[Serusers] problems with ACKs and BYEs

Klaus Darilion klaus.mailinglists at pernau.at
Fri Jun 17 09:20:22 CEST 2005


Hi!

Maybe the Lucent GW is a strict router (RFC 2534). Strict routers will 
put the next hop in the request URI, and the final destination into the 
last Route: header.

Using loose_route should take care of this.

if (loose_route()) {
   ... do some authentication stuff ...
   xlog("...loose_route() processed");
   t_relay;
   break;
}

regards,
klaus

Jorge Crichigno wrote:
> Hi all,
> 
>     I have a problem with in the following scenario:
> 
>     Lucent GW			SER			IPPhone
>    IP: 1.2.3.4			IP:5.6.7.8		IP:8.9.5.5
> 
>   		INVITE-->
> 		<-- 100		
> 					INVITE-->
> 					<--100
> 					<--180
> 		<--180
> 					<--200 
> 		<--200
> 		ACK-->(Request-Uri = sip:5.6.7.8:5060) <-- PROBLEM HERE
> 
> 
>   The problem arises only with the Lucent Gateway, because it sends the
> ACK with the Request-Uri as showed above (Request-Uri has the IP and
> port of the SER). I also found the same problem with BYEs. I attach the 
> ser.cfg at this mail. 
> 
>   I think this is a bug of Lucent, because I expected that Request-Uri
> of the ACKs should equal to the contact uri of the 200 message sent by
> the ipphone. The same for BYEs. Could some one clarify me that?
> 
>   Thanks in advance !!!
> 
> 
> 
>  
> 
> 					
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 
> debug=5         # debug level (cmd line: -dddddddddd)
> fork=yes
> log_stderror=yes	# (cmd line: -E)
> 
> 
> check_via=no	# (cmd. line: -v)
> dns=no           # (cmd. line: -r)
> rev_dns=no      # (cmd. line: -R)
> port=5060
> children=20
> fifo="/tmp/ser_fifo"
> listen=5.6.7.8
> alias = "mydomain.com"
> 
> # ---------------------------------------------------------------------------
> loadmodule "/usr/local/lib/ser/modules/mysql.so"      # needed for domain.so
> loadmodule "/usr/local/lib/ser/modules/registrar.so"
> loadmodule "/usr/local/lib/ser/modules/dbtext.so"     # necesario para domain.so
> loadmodule "/usr/local/lib/ser/modules/usrloc.so"
> loadmodule "/usr/local/lib/ser/modules/domain.so"     # necesario para mediaproxy.so (is_from_local)
> loadmodule "/usr/local/lib/ser/modules/mediaproxy.so"
> 
> loadmodule "/usr/local/lib/ser/modules/rr.so"
> loadmodule "/usr/local/lib/ser/modules/sl.so"             # stateless
> loadmodule "/usr/local/lib/ser/modules/tm.so"             # statefull
> loadmodule "/usr/local/lib/ser/modules/acc.so"
> loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
> loadmodule "/usr/local/lib/ser/modules/textops.so"
> loadmodule "/usr/local/lib/ser/modules/auth.so"           # needed for xml_socket
> loadmodule "/usr/local/lib/ser/modules/xml_socket.so"     # our module
> 
> # ---------------------------------------------------------------------------
> modparam("usrloc", "db_mode", 0)
> modparam("domain", "db_mode", 0)
> #modparam("domain", "db_url", "mysql://serro:47serro11@216.55.240.66/ser")
> modparam("domain", "db_url", "mysql://serro:47serro11@localhost/ser")
> #Default value is "mysql://serro:47serro11@localhost/ser"
> modparam("mediaproxy", "natping_interval", 60)
> # unix socket to send commands to proxy dispatcher
> modparam("mediaproxy", "mediaproxy_socket", "/var/run/proxydispatcher.sock")
> modparam("registrar","nat_flag",2)
> modparam("rr", "enable_full_lr", 1)
> #modparam("rr", "enable_double_rr", 0)
> modparam("tm", "fr_timer", 50)
> modparam("tm", "fr_inv_timer", 50)
> # ---------------------------------------------------------------------------
> 
> route{
> 
> 	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;
> 	};
> 
> 	# NAT control
> 	if (client_nat_test("3")) {
> 		setflag(2);
> 		force_rport();
> 		fix_contact();
> 	};
> 
> 	if (method=="REGISTER") {
> 		route(1);
> 		break;
> 	};
> 
> 	if (method == "INVITE"){
> 		route(2);
> 		break;
> 	};
> 
> 	if (method == "BYE"){
> 		route(3);
> 		break;
> 	};
> 
> 	route(4);
> 
> }
> 
> 
> #--------------------------------------------------------------------------------------
> #     Aqui se procesan los REGISTERs - REGISTERs here
> #--------------------------------------------------------------------------------------
> route[1]{
> 
>         if (xml_www_authorize_register("")) {         # challenge - response auth
> 		    www_challenge("", "0");
> 	            break;
> 	};
> 	consume_credentials();
>         sl_send_reply("200", "Ok");
> }
> 
> #--------------------------------------------------------------------------------------
> #     Aqui se procesan los INVITEs  - INVITEs here
> #--------------------------------------------------------------------------------------
> route[2]{
> 	t_on_reply("1");
> 	sl_send_reply("100"," Trying");
> 
> 	if (t_lookup_request()){
> 		log(1, "route[2]: Transaction already in progress\n");
> 		break;
> 	};
> 
> 
>         if (!xml_www_authorize_invite("")) {       # chanllenge - response auth - load msg->new_uri
> 		www_challenge("", "0");
> 		break;
> 	};
>         consume_credentials();
> 
> 	record_route();
> #	use_media_proxy();
> 	log(1, "routing the invite...\n");
> 	if (!t_relay()){
> 		sl_reply_error();
> #		end_media_session();
> 		break;
> 	};
> 
> 
> }
> 
> #--------------------------------------------------------------------------------------
> #     Aqui se procesan los BYEs - BYEs here
> #--------------------------------------------------------------------------------------
> route[3]{
> 	t_on_reply("1");                              # p/ q en los reply tb cambiemos contact
> 
> 	if (t_lookup_request()){
> 		sl_send_reply("100", "Trying");
> 		log(1, "route[3]: Transaction already in progress\n");
> 		break;
> 	};
> 	#end_media_session();
> 	xml_acc();				    # accounting
> 	if (!t_relay()) {
>         	sl_reply_error();
> 	        break;
> 	};
> }
> #--------------------------------------------------------------------------------------
> #     Aqui se procesan los metodos que no son INVITEs ni BYEs, i.e., ACKs & CANCELs
> #--------------------------------------------------------------------------------------
> route[4]{
> 
>     xml_acc();
> 
>    if (!t_relay()) {
> 
>         sl_reply_error();
>         break;
>    };
> 
> }
> 
> # Cuando hay NAT, en la respuesta 200 (OK) del telefono destino se debe cambiar el campo
> # contact este uri (el del campo contact) sera usado en las siguientes transacciones
> #--------------------------------------------------------------------------------------
> #     Aqui se procesan los replies: 1xx, 200, 4xx, etc -
> #--------------------------------------------------------------------------------------
> 
> onreply_route[1] {
> 
>     xml_acc();
> 
>     if (status=~"(183)|(2[0-9][0-9])") {
>         if (client_nat_test("1")) {
>             fix_contact();
>         };
>     };
> 
> 
> }
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Serusers mailing list
> serusers at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers




More information about the sr-users mailing list