[Serusers] record_route and re-invite problem

Andrei Pelinescu-Onciul pelinescu-onciul at fokus.fraunhofer.de
Wed Jul 7 14:36:16 CEST 2004


On Jul 06, 2004 at 18:14, bert berlin <btberlin at quintum.com> wrote:
> Below is a call flow for a situation that fails -
> I have attached the ser.cfg file, and two ethereal sniffs - these are 
> for fax call attempts - one with record_route commented out (which 
> succeeds) , and one with record_route(), which fails. 
> Note that in the failure case, with record_route(), the re-invite from 
> 208.226.140.40 gets to the proxy at 208.226.140.141, but the proxy never 
> sends that to the origination UA, 208.226.140.142.

There are several errors. 

[...]
> 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;
> 	};

Add a loose route block here. If you don't your messages won't be
properly routed. See etc/ser.cfg for a good basic config example.

       if (loose_route()) {
                t_relay();
                break;
        };
> 
> 
> ############################################
> 
> # store user location if a REGISTER appears
> if (method=="REGISTER") {
>    save("location");
>    break;
> };

The above stuff should be under if (uri==myself) or you will catch all the registers (even if they are not for your proxy). OTOH this won't affect your test.
> 
> 
> 	if (uri==myself) #where myself is defined by the aliases above
>     	{
> #look for the registered contact in the location table of database	
> #and if find it, rewrite the uri and forward statefully to the destination
> 	if (lookup ("location"))##Lookup finds the contact info and rewrites the header
> 	{
> 		record_route();#send everything back through the proxy
> 		t_relay();
> 		break;
> 	}
> 	else
> 	{
> 	sl_send_reply("404","user not found");#and if you really don't know what to do, send this back
> 	break;
> 	}
> 	};
> 

Here you are dropping all the packets (you don't forward them and you've
reached the end of your config). So if a packet doesn't match uri==myself it
will get dropped. This happens to your re-INVITEs.  Add here a t_relay()
 or forward(uri:host, uri:port).
> }


Also note that your UA1 (.142) sends the ACK directly to UA2(.40) and not
through the proxy. See packet 15 in sip-fax-with-record-route-7-6-04.


Andrei




More information about the sr-users mailing list