-----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?
Does someone have some information about that?
Thanks
Greg
Quoting Gregoire mlgg@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@openser.org http://openser.org/cgi-bin/mailman/listinfo/users
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@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@openser.org http://openser.org/cgi-bin/mailman/listinfo/users
Users mailing list Users@openser.org http://openser.org/cgi-bin/mailman/listinfo/users
Hi Klaus,
this is more than correct - I will replace the current description with this both on CVS and web.
thanks and regards, bogdan
Klaus Darilion wrote:
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@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@openser.org http://openser.org/cgi-bin/mailman/listinfo/users
Users mailing list Users@openser.org http://openser.org/cgi-bin/mailman/listinfo/users