[Serusers] SER SDP Port Problem??

Aisling O'Driscoll ashling.odriscoll at cit.ie
Mon Feb 21 11:33:52 CET 2005


Hi,

I understand the basic problem behind one way audio is that the
client behind nat has a private address in the sdp information,
therefore the voice cannot be delivered to this private address. It
is necessary to rewrite this sdp info with the nat public address.
However I have done this in my ser.cfg and I still have one way
voice. 

I have included some of relevant ethereal messages on SER and my
ser.cfg below. The messages show that the rtp information has been
changed. Does anyone think the problem is because there is no port
information in the "c" and "o" fields in the sdp?? If so how can I
make sure the port is included?

Many Thanks,
Aisling.

Ethereal messages:

call between private client with public nat address 63.218.54.71 and
a public client with address 157.190.183.80. The SER address is
157.190.183.70.

REGISTER sip:157.190.183.70 SIP/2.0
VIA: SIP/2.0/UDP 63.218.54.71:11987;rport;branch=z9h.....
FROM: whoever <sip:2008 at 157.190.183.70>;tag=455....
TO: whoever <sip:2008 at 157.190.183.70>
CONTACT: "whoever" <sip:2008 at 63.218.54.71:11987>
Call-Id: ....
CSeq: 22227 REGISTER
Expires; 1800
User Agent: X-Lite release 1103m
Content-Length: 0

SIP/2.0 200 OK
VIA: SIP/2.0/UDP 63.218.54.71:11987;rport;branch=z9h.....
FROM: whoever <sip:2008 at 157.190.183.70>;tag=455....
TO: whoever <sip:2008 at 157.190.183.70>
CONTACT: "whoever" <sip:2008 at 63.218.54.71:11987>;q=0.00 expires=1800
Call-Id: ....
CSeq: 22227 REGISTER
Expires; 1800
User Agent: X-Lite release 1103m
Content-Length: 0

The public client (157.190.183.80 also registers)

Then the private client invites the public client to a voice
conversation:

INVITE sip:2001 at 157.190.183.70 SIP/2.0
VIA: SIP/2.0/UDP 63.218.54.71:11987;rport;branch=z9h.....
FROM: whoever <sip:2008 at 157.190.183.70>;tag=455....
TO: whoever <sip:2001 at 157.190.183.70>
CONTACT: "whoever" <sip:2008 at 63.218.54.71:11987>
Call-Id: ....
CSeq: 19929 INVITE
Expires; 1800
User Agent: X-Lite release 1103m
Content-Type=application/sdp
Content-Length: 290

   Session description Protocol
   Owner/Creator of the Session (o): 2008 245812 272828 IN IP4
63.218.54.71
   Connection information (c): IN IP4 63.218.54.71

A 100 Trying is sent back from SER to the private client (i.e. caller)

The INVITE is forwarded from SER to public client (callee) as show
below:

INVITE sip:2001 at 157.190.183.70 SIP/2.0
VIA: SIP/2.0/UDP 157.190.183.70;branch=....
VIA: SIP/2.0/UDP 63.218.54.71:11987;branch=z9h.....
FROM: whoever <sip:2008 at 157.190.183.70>;tag=455....
TO: whoever <sip:2001 at 157.190.183.70>
CONTACT: "whoever" <sip:2008 at 63.218.54.71:11987>
Call-Id: ....
CSeq: 19929 INVITE
Expires; 1800
User Agent: X-Lite release 1103m
Content-Type=application/sdp
Content-Length: 290

   Session description Protocol
   Owner/Creator of the Session (o): 2008 245812 272828 IN IP4
63.218.54.71
   Connection information (c): IN IP4 63.218.54.71

157.190.183.80 157.190.183.70 SIP 100 Trying
157.190.183.80 157.190.183.70 SIP 180 Ringing
157.190.183.70 63.218.54.71 SIP 180 Ringing

157.190.183.80 157.190.183.70 SIP/SDP Status: 200OK

SIP/2.0 200 OK
Via: SIP/2.0/UDP 157.190.183.70;branch=....
Via: SIP/2.0/UDP 63.218.54.71:11987;rport=11987;branch=.....
From: whoever<sip:2008 at 157.190.183.70>;tag=...
To: <sip:2001 at 157.190.183.70>;tag=....
CSeq: 19929 INVITE
User Agent: Grandtsream BT100 1.0.5.18
Contact: <sip:2001 at 157.190.183.80>

    Session description protocol
    (c) IN IP4 157.190.183.80


#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#

# ----------- global configuration parameters ------------------------

#debug=3         # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=no	# (cmd line: -E)

/* Uncomment these lines to enter debugging mode
debug=7
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"

alias="157.190.183.70:5060"

# ------------------ module loading ----------------------------------

# Uncomment this if you want to use SQL database
loadmodule "/usr/lib/ser/modules/mysql.so"

loadmodule "/usr/lib/ser/modules/sl.so"
loadmodule "/usr/lib/ser/modules/tm.so"
loadmodule "/usr/lib/ser/modules/rr.so"
loadmodule "/usr/lib/ser/modules/maxfwd.so"
loadmodule "/usr/lib/ser/modules/usrloc.so"
loadmodule "/usr/lib/ser/modules/registrar.so"
loadmodule "/usr/lib/ser/modules/textops.so"
loadmodule "/usr/lib/ser/modules/nathelper.so"

# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/lib/ser/modules/auth.so"
loadmodule "/usr/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
#NB Had to up this value from 1 to 11 because reinvites were
bombarding called phone
modparam("rr", "enable_full_lr", 11)

#!! Nathelper
modparam("registrar", "nat_flag", 6)
modparam("nathelper", "natping_interval", 30) #Ping interval 30 s
modparam("nathelper", "ping_nated_only", 1)   #Ping only clients
behind NAT

modparam("tm", "fr_inv_timer", 80)

# -------------------------  request routing logic -------------------

# main routing logic

route{

	# 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;
	};

	#########################added for cit client behind nat
09/02/05#######################
	if (nat_uac_test("3")){
		if (method == "REGISTER" || ! search("^Record-Route:")){
			log("Log: Someone trying to register from private IP,rewriting\n");
			fix_nated_contact(); #Rewrite contact with source IP
			if (method == "INVITE"){
				fix_nated_sdp("1"); #Add direction=active to SDP
			};
			force_rport(); # Add rport parameter to topmost Via
			setflag(6); # Mark as Nated
		};
	};
	#####################################################################
###################

	# 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

	if (method =="REGISTER") record_route();

	# loose-route processing
	if (loose_route()) {
		#commented 11/02/05
		#t_relay();
		route(1);
		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) {

		log(1,"into loop");
		if (method=="REGISTER") {

# Uncomment this if you want to use digest authentication
#			if (!www_authorize("157.190.183.70", "subscriber")) {
#				www_challenge("157.190.183.70", "0");
#				break;
#			};

			save("location");
			break;
		};

		lookup("aliases");
		if (!uri==myself) {
			append_hf("P-hint: outbound alias\r\n");
			route(1);
			break;
		};

		if (method=="INVITE"){
			log(1,"in invite loop");
			#break; #no 100 trying
			t_on_failure("1");
		};

		# native SIP destinations are handled using our USRLOC DB
		if (!lookup("location")) {
			#sl_send_reply("404", "Not Found");
			route(2);
			break;
		};
	};

	# forward to current uri now; use stateful forwarding; that
	# works reliably even if we forward from TCP to UDP
	#commented 11/02/05#######################
	if (!t_relay()) {
		sl_reply_error();
	};

}

######################################entered
11/02/05############################################################
route[1]
{
	#!!Nathelper
	if(uri=~"[@:](192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)" &&
!search("^Route:")){
		sl_send_reply("479", "We don't forward to private IP addresses");
		break;
	};

	t_on_reply("1");

	if(!t_relay()){
		sl_reply_error();
	};
}
######################################entered
11/02/05############################################################
#!! Nathelper
onreply_route[1]{
	if(isflagset(6) && status =~ "(183)|2[0-9][0-9]"){
		fix_nated_contact();
		force_rtp_proxy();
	} else if (nat_uac_test("1")){
		fix_nated_contact();
	};
}
######################################################################
###########################################

# ------------- handling of unavailable user ------------------
route[2] {

        # non-Voip -- just send "off-line"
        if (!(method == "INVITE" || method == "ACK" || method ==
"CANCEL")) {
                sl_send_reply("404", "Not Found");
                break;
        };

        # forward to voicemail now
        rewritehostport("157.190.183.70:5062");
        t_relay_to_udp("157.190.183.70", "5062");
}

# if forwarding downstream did not succeed, try voicemail running
# at 157.190.183.70:5062

failure_route[1] {
        revert_uri();
        rewritehostport("157.190.183.70:5062");
        append_branch();
        t_relay_to_udp("157.190.183.70", "5062");
}





-------------------Legal  Disclaimer---------------------------------------

The above electronic mail transmission is confidential and intended only for the person to whom it is addressed. Its contents may be protected by legal and/or professional privilege. Should it be received by you in error please contact the sender at the above quoted email address. Any unauthorised form of reproduction of this message is strictly prohibited. The Institute does not guarantee the security of any information electronically transmitted and is not liable if the information contained in this communication is not a proper and complete record of the message as transmitted by the sender nor for any delay in its receipt.




More information about the sr-users mailing list