It is what it tells to be -- the received packet is broken in that it includes
a zero character in the end. We honor such request but issue a warning about
them. use "ngrep -x" to inspect the packet in hexcode.
-jiri
At 11:53 PM 7/15/2004, Jev wrote:
Hi All,
I'm having to work with another SIP UAS acting as a location server, and I have ser as
my 'frontend' so all clients talk to ser, and ser will register and with the
location server.
In my logs I see the warning:
Jul 15 14:26:31 frig /usr/local/sbin/ser[18931]: WARNING: upstream bug - 0-terminated
packet
This happens when I t_relay my REGISTERS to the 3rd party location server. The packets
look fine to me. Any ideas?
Here follows a trace (from ngrep), the logs from syslog, and our ser configuration.
I'm aware that the location server is not challenging on REGISTERS :)
Thanks!
-Jev
U xx.xx.xx.181:64683 -> xx.xx.xx.6:5060
REGISTER
sip:frontendser.example.com SIP/2.0.
Via: SIP/2.0/UDP 192.168.123.92;branch=z9hG4bK0c95a85aa284e67a.
From: "Billy Pike"
<sip:88890000@frontendser.example.com>;tag=4c8855e01b806681.
To: <sip:88890000@frontendser.example.com>.
Contact: <sip:88890000@192.168.123.92>.
Call-ID: 0b3754db1b4dd80b(a)192.168.123.92.
CSeq: 100 REGISTER.
Expires: 3600.
User-Agent: Grandstream BT100 1.0.4.55.
Max-Forwards: 70.
Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE.
Content-Length: 0.
.
#
U xx.xx.xx.6:5060 -> xx.xx.xx.178:5060
REGISTER sip:location.example.com:5060 SIP/2.0.
Record-Route: <sip:xx.xx.xx.6;ftag=4c8855e01b806681;lr=on>.
Via: SIP/2.0/UDP xx.xx.xx.6;branch=z9hG4bK168.c89ec35.0.
Via: SIP/2.0/UDP
192.168.123.92;rport=64683;received=xx.xx.xx.181;branch=z9hG4bK0c95a85aa284e67a.
From: "Billy Pike"
<sip:88890000@frontendser.example.com>;tag=4c8855e01b806681.
To: <sip:88890000@frontendser.example.com>.
Contact: <sip:88890000@xx.xx.xx.181:64683>.
Call-ID: 0b3754db1b4dd80b(a)192.168.123.92.
CSeq: 100 REGISTER.
Expires: 3600.
User-Agent: Grandstream BT100 1.0.4.55.
Max-Forwards: 69.
Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE.
Content-Length: 0.
P-hint: fixed NAT contact for request.
.
#####
U xx.xx.xx.178:5060 -> xx.xx.xx.6:5060
SIP/2.0 200 OK.
Record-Route: <sip:xx.xx.xx.6;ftag=4c8855e01b806681;lr=on>.
Via: SIP/2.0/UDP xx.xx.xx.6;branch=z9hG4bK168.c89ec35.0.
Via: SIP/2.0/UDP
192.168.123.92;rport=64683;received=xx.xx.xx.181;branch=z9hG4bK0c95a85aa284e67a.
From: "Billy Pike"
<sip:88890000@frontendser.example.com>;tag=4c8855e01b806681.
To: <sip:88890000@frontendser.example.com>.
Contact: <sip:88890000@xx.xx.xx.181:64683>.
Call-ID: 0b3754db1b4dd80b(a)192.168.123.92.
CSeq: 100 REGISTER.
Expires: 3600.
User-agent: Grandstream BT100 1.0.4.55.
Max-Forwards: 68.
Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE.
Content-Length: 0.
P-hint: fixed NAT contact for request.
.
.
##
U xx.xx.xx.6:5060 -> xx.xx.xx.181:64683
SIP/2.0 200 OK.
Record-Route: <sip:xx.xx.xx.6;ftag=4c8855e01b806681;lr=on>.
Via: SIP/2.0/UDP
192.168.123.92;rport=64683;received=xx.xx.xx.181;branch=z9hG4bK0c95a85aa284e67a.
From: "Billy Pike"
<sip:88890000@frontendser.example.com>;tag=4c8855e01b806681.
To: <sip:88890000@frontendser.example.com>.
Contact: <sip:88890000@xx.xx.xx.181:64683>.
Call-ID: 0b3754db1b4dd80b(a)192.168.123.92.
CSeq: 100 REGISTER.
Expires: 3600.
User-agent: Grandstream BT100 1.0.4.55.
Max-Forwards: 68.
Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE.
Content-Length: 0.
P-hint: fixed NAT contact for request.
.
Jul 15 14:26:31 frig /usr/local/sbin/ser[18904]: ----------Entering default
route---------------
Jul 15 14:26:31 frig /usr/local/sbin/ser[18904]: [REGISTER] from
[sip:88890000@frontendser.example.com] to [sip:88890000@frontendser.example.com]
Jul 15 14:26:31 frig /usr/local/sbin/ser[18904]: src address different than via
header->NAT detected
Jul 15 14:26:31 frig /usr/local/sbin/ser[18904]: force_rport and fix_nated_contact and
setflag(5)
Jul 15 14:26:31 frig /usr/local/sbin/ser[18904]: rewriting uri for REGISTER request..
Jul 15 14:26:31 frig /usr/local/sbin/ser[18904]: Called
rewritehostport(location.example.com,5060) on REGSITER request..
Jul 15 14:26:31 frig /usr/local/sbin/ser[18904]: Called t_relay() for register..
Jul 15 14:26:31 frig /usr/local/sbin/ser[18931]: WARNING: upstream bug - 0-terminated
packet
#
# $Id: ser_rtproxy_fe.cfg,v 1.3 2004/07/06 22:48:35 jev Exp $
#
# TODO
# Fix xlog statements to use appropriate logging levels.
#
# ----------- global configuration parameters ------------------------
debug=9 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
debug=9
fork=no
log_stderror=yes
*/
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
port=5060
#children=4
fifo="/tmp/ser_fifo"
sip_warning=yes
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
loadmodule "/usr/local/lib/ser/modules/mysql.so"
loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/domain.so"
loadmodule "/usr/local/lib/ser/modules/xlog.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
#modparam("usrloc", "db_mode", 2)
# -- auth params --
# Uncomment if you are using auth module
#
#modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this config),
# uncomment also the following parameter)
#
#modparam("auth_db", "password_column", "password")
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
modparam("rr", "append_fromtag", 1)
modparam("registrar", "nat_flag", 6)
#modparam("nathelper", "natping_interval", 4) # Ping interval 30 s
modparam("nathelper", "natping_interval", 5) # Ping interval 30 s
# ------------------------- request routing logic -------------------
# main routing logic
route{
log(1, "----------Entering default route---------------\n");
xlog("L_ERR", "[%rm] from [%fu] to [%tu]");
if (nat_uac_test("2")) {
log(1, "src address different than via header->NAT
detected\n");
log(1, "force_rport and fix_nated_contact and setflag(5)\n");
#try NAT traversal, works only if the client is symmetrical
force_rport();
fix_nated_contact();
#fix_nated_sdp();
append_hf("P-hint: fixed NAT contact for request\r\n");
# flag 5 indicates that incoming request is from NATed client
setflag(5);
};
# initial sanity checks -- messages with
# max_forwards==0, or excessively long requests
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
break;
};
if ( msg:len > max_len ) {
sl_send_reply("513", "Message too big");
break;
};
# we record-route all messages -- to make sure that
# subsequent messages will go through our proxy; that's
# particularly good if upstream and downstream entities
# use different transport protocol
record_route();
# loose-route processing
if (loose_route()) {
t_relay();
break;
};
# if the request is for other domain use UsrLoc
# (in case, it does not work, use the following command
# with proper names and addresses in it)
if (uri==myself) {
if (method=="REGISTER") {
log(1,"rewriting uri for REGISTER request..");
rewritehostport("location.example.com:5060");
if( isflagset(5) ){
force_rtp_proxy();
}
log(1,"Called rewritehostport(location.example.com,5060) on
REGSITER request..");
if(t_relay()){
log(1,"Called t_relay() for register..");
}
# if(!sl_send_reply("200", "ok")){
# log(1,"Got error when calling sl_send_reply(200, ok)
on REGSITER request..");
# }
t_on_reply("1");
break;
};
if (method=="INVITE" || method == "CANCEL") {
log(1,"rewriting uri for INVITE request..");
rewritehostport("location.example.com:5060");
log(1,"Called rewritehostport(location.example.com,5060) on
INVITE request..");
if(isflagset(5)){
force_rtp_proxy();
}
route(1);
#if(t_relay()){
# log(1,"Called t_relay() for register..");
# }
# if(!sl_send_reply("200", "ok")){
# log(1,"Got error when calling sl_send_reply(200, ok)
on REGSITER request..");
# }
t_on_reply("1");
break;
};
};
route(1);
}
route[1]{
log(1, "-------------------------------------------\n");
log(1, "entering route[1] - relaying SIP message\n");
if ((isflagset(5)) || (isflagset(6))) {
log(1, "at least one of the participants is
NATed->record_route\n");
record_route();
log(1, " -->setting up reply processing
->onreply_route[1]");
t_on_reply("1");
if (method=="INVITE") {
log(1, "INVITE request-->force_rtp_proxy, set NATED-INVITE
flag(7)");
force_rtp_proxy();
append_hf("P-hint: request forced to nathelper\r\n");
setflag(7);
};
};
log(1, "relaying message ...\n");
if (!t_relay()) {
log(1, "t_relay error occured\n");
sl_reply_error();
};
}
route[2]{
if ((isflagset(5)) || (isflagset(6))) {
log(1, "at least one of the participants is
NATed->record_route\n");
record_route();
log(1, " -->setting up reply processing
->onreply_route[2]");
t_on_reply("1");
if (method=="INVITE") {
log(1, " INVITE request-->force_rtp_proxy, set
NATED-INVITE flag(7)");
force_rtp_proxy();
append_hf("P-hint: request forced to nathelper\r\n");
setflag(7);
};
};
xlog("L_ERR", "Forwarding %fu to %tu [Cisco]\n");
rewritehostport("xx.xx.xx.8:5060");
if(!t_relay()){
log(1, "Relay to Cisco failed");
break;
};
}
#all incoming replies for t_onrepli-ed transactions enter here
onreply_route[1] {
log(1, "-------------------------------------------\n");
log(1, "onreply_route[1] entered\n");
if (isflagset(5)) {
log(1, "transaction was sent to a NATED client -> fix nated
contact\n");
fix_nated_contact();
force_rport();
force_rtp_proxy();
#fix_nated_sdp();
append_hf("P-hint: fixed NAT contact for response
(nathelper)\r\n");
}
if ( (status=~"100") ) {
log(1, "status 100 received\n");
};
if ( (status=~"180") ) {
log(1, "status 180 received\n");
};
if ( (status=~"202") ) {
log(1, "status 202 received\n");
};
if ( (status=~"200" || status=~"183") ) {
log(1, "status 2xx or 183");
if ( isflagset(7) ) {
log(1, "marked(7) as NATED-INVITE -> force_rtp_proxy \n");
force_rtp_proxy();
append_hf("P-hint: response forced to nathelper\r\n");
};
};
}
onreply_route[2] {
log(1, "-------------------------------------------\n");
xlog("L_ERR", "onreply_route[2] entered From %fu to %tu\n");
if (isflagset(6)) {
log(1, "transaction was sent to a NATED client -> fix nated
contact\n");
fix_nated_contact();
#fix_nated_sdp();
append_hf("P-hint: fixed NAT contact for response\r\n");
}
if ( (status=~"100") ) {
log(1, "status 100 received\n");
};
if ( (status=~"180") ) {
log(1, "status 180 received\n");
};
if ( (status=~"202") ) {
log(1, "status 202 received\n");
};
if ( (status=~"200" || status=~"183") ) {
log(1, "status 2xx or 183");
if ( isflagset(7) ) {
log(1, "marked(7) as NATED-INVITE -> force_rtp_proxy \n");
force_rtp_proxy();
append_hf("P-hint: response forced to nathelper\r\n");
};
};
}
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers