[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