[Serusers] problems with ACKs and BYEs

Jorge Crichigno jcrichigno at conexion.com.py
Fri Jun 17 21:29:52 CEST 2005


Hi Klaus,

   Thanks a lot! You are right! The behavior of the Lucent Gw is as you
said, and the problem was solved. Thanks again!

   Jorge
  

El vie, 17-06-2005 a las 03:20, Klaus Darilion escribió:
> 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