[Users] loose_route() function

Klaus Darilion klaus.mailinglists at pernau.at
Mon Nov 27 10:25:50 CET 2006


I think the README needs some refurbishment. How about this? Corrections 
welcome.

1.5.1. loose_route()

The function performs routing of SIP requests which contain a route set. 
The name is a little bit confusing, as this function also routes 
requests which are in the "strict router" format.

This function is usually used to route in-dialog requests (like ACK, 
BYE, reINVITE). Nevertheless also out-of-dialog requests can have a 
"pre-loaded route set" and my be routed with loose_route. It also takes 
care of translating between strict-routers and loose-router.

The loose_route function analyzes the Route: headers in the requests. If 
there is no Route: header, the function returns 0 and routing should be 
done with normal lookup functions. If a Route: header is found, the 
function returns 1 and behaves as described in section 16.12 of RFC 
3261. There is only one exception: If the request is out-of-dialog (no 
to-tag) and there is only one Route: header indicating the local proxy, 
then the Route: header is removed and the function returns 0.

Make sure your loose_routing function can't be used by attackers to 
bypass proxy authorization.

The loose_routing topic is very complex. See the RFC3261 for more 
details (grep for "route set" is a good starting point in this 
comprehensive RFC)

This function can be used from REQUEST_ROUTE



regards
klaus


Christian Schlatter wrote:
> Quoting Gregoire <mlgg at hispeed.ch>:
> 
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Hi!
>>
>> I am wondering where I can find more information about the
>> loose_route() function. On Wiki, I can see that it is RFC 3261
>> compliant and understand what it's the difference between loose
>> routing and strict routing, but in my conf. file I have a test like:
>> if(loose_route()){...}
>> and I 'd like to know what kind of value this function can return or
>> when can it return something else than true?
> 
> To my knowledge, loose_route() returns a negative value in case of 
> invalid headers in the sip message or other "internal" errors. It 
> returns 1 (or TRUE) in case it finds a Route: header including the 
> proxy's domain. In this case, the function will also remove the proxy's 
> domain from the Route: header and sets the destination URI to the next 
> hop address found in the Route: header.
> 
> The function returns 0 (FALSE) if there is no Route: header present in 
> the message.
> 
> Also have a look at the source file /modules/rr/loose.c, in particular 
> functions loose_route() and after_loose().
> 
> Christian
> 
> 
>>
>> Does someone have some information about that?
>>
>> Thanks
>>
>> Greg
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.2.2 (GNU/Linux)
>> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>>
>> iD8DBQFFZv/iI8gmGeMTr0sRAgg8AKCA9CGb6hI9FEhdE8BMm5nlnXDKkACgjZBA
>> NFrRWixi2BtEE6e2YrAfg9g=
>> =ucXk
>> -----END PGP SIGNATURE-----
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at openser.org
>> http://openser.org/cgi-bin/mailman/listinfo/users
>>
> 
> 
> 
> _______________________________________________
> Users mailing list
> Users at openser.org
> http://openser.org/cgi-bin/mailman/listinfo/users


-- 
Klaus Darilion
nic.at





More information about the Users mailing list