Hi,
I would like to understand a little bit better the "loose route" concept. I have seen 2 different configs for ser:
Sometimes the config has just: loose_route();
...and sometimes it has:
if (loose_route()) { t_relay(); break; };
How exactly do these 2 differ? The README says: "The function performs loose routing as defined in RFC3261", but why would I put a t_relay() after checking for loose_route()?
What I can tell so far is that loose routing leaves the next hop in the Route header, but I don't understand which one of the above two examples actually tell SER to do that.
Thanks, Ricardo Villa
Hello,
the reason why we use the condition below is that there were (and probably still are) some user agents that strip parameters (including lr) from Route header fields.
loose_route function returns 1 if the message being processed will be sent to a different destination than Request-URI. In this case if one of user agents would strip ;lr parameters and the request spirals through the proxy, strange things could happend without the condition.
So the condition is there to deal with broken user agents.
Jan.
On 04-08 20:37, Ricardo Villa wrote:
Hi,
I would like to understand a little bit better the "loose route" concept. I have seen 2 different configs for ser:
Sometimes the config has just: loose_route();
...and sometimes it has:
if (loose_route()) { t_relay(); break; };
How exactly do these 2 differ? The README says: "The function performs loose routing as defined in RFC3261", but why would I put a t_relay() after checking for loose_route()?
What I can tell so far is that loose routing leaves the next hop in the Route header, but I don't understand which one of the above two examples actually tell SER to do that.
Thanks, Ricardo Villa
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Thanks Jan,
So the loose_route function only check to see if the "lr" parameter is in the Route Header? It does not insert or modify any Route Headers?
Regards, Ricardo
----- Original Message ----- From: "Jan Janak" jan@iptel.org To: "Ricardo Villa" ricvil@epm.net.co Cc: serusers@lists.iptel.org Sent: Tuesday, August 05, 2003 7:49 AM Subject: Re: [Serusers] loose_route question
Hello,
the reason why we use the condition below is that there were (and probably still are) some user agents that strip parameters (including lr) from Route header fields.
loose_route function returns 1 if the message being processed will be sent to a different destination than Request-URI. In this case if one of user agents would strip ;lr parameters and the request spirals through the proxy, strange things could happend without the condition.
So the condition is there to deal with broken user agents.
Jan.
On 04-08 20:37, Ricardo Villa wrote:
Hi,
I would like to understand a little bit better the "loose route"
concept. I have seen 2 different configs for ser:
Sometimes the config has just: loose_route();
...and sometimes it has:
if (loose_route()) { t_relay(); break; };
How exactly do these 2 differ? The README says: "The function performs
loose routing as defined in RFC3261", but why would I put a t_relay() after checking for loose_route()?
What I can tell so far is that loose routing leaves the next hop in the
Route header, but I don't understand which one of the above two examples actually tell SER to do that.
Thanks, Ricardo Villa
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
At 12:51 AM 8/6/2003, Ricardo Villa wrote:
Thanks Jan,
So the loose_route function only check to see if the "lr" parameter is in the Route Header?
No.
loose_route performs loose routing as specified in 3261. If there is a route header field, it calculates next hop, modifies request-uri if needed, consumes Route header fields as needed, and returns true. OTherwise it returns false.
If t_relay is called later, it uses transport destination calculated with loose_route.
It does not insert or modify any Route Headers?
It does modify the route set according to 3261 rules.
Again: both scripts alternatives are possible, use the one with the condition. It better deals with some UAs which break the specification.
Do you really want me to tell you the details? ok, be mu guest, this is the case: 1) Cisco IOS gateways corrupt record-routing in that they strip parameters. If rr inserted by SER includes ;lr, it will be gone. 2) In some circumstances (e.g., so-called spirals) SER may record-route itself twice. 3) If a BYE with corrupted two Route header fields comes from IOS, SER's loose_route places its own URI from Route to request-uri (that's because ;lr is gone due to the IOS bug); uri==myself matches and user lookup is executed, resulting typically in a mistake; (correct behaviour would be to identify the request as uri!=myself and simply processing it) 4) To make sure that requests with broken rr-ing never enter the script, use the condition mentioned previously. To determine that a requst should be forwarded, without any other script processing logic it uses the "was there some rr-ing?" test as opposed to the "uri==myself" test.
-Jiri
Regards, Ricardo
----- Original Message ----- From: "Jan Janak" jan@iptel.org To: "Ricardo Villa" ricvil@epm.net.co Cc: serusers@lists.iptel.org Sent: Tuesday, August 05, 2003 7:49 AM Subject: Re: [Serusers] loose_route question
Hello,
the reason why we use the condition below is that there were (and probably still are) some user agents that strip parameters (including lr) from Route header fields.
loose_route function returns 1 if the message being processed will be sent to a different destination than Request-URI. In this case if one of user agents would strip ;lr parameters and the request spirals through the proxy, strange things could happend without the condition.
So the condition is there to deal with broken user agents.
Jan.
On 04-08 20:37, Ricardo Villa wrote:
Hi,
I would like to understand a little bit better the "loose route"
concept. I have seen 2 different configs for ser:
Sometimes the config has just: loose_route();
...and sometimes it has:
if (loose_route()) { t_relay(); break; };
How exactly do these 2 differ? The README says: "The function performs
loose routing as defined in RFC3261", but why would I put a t_relay() after checking for loose_route()?
What I can tell so far is that loose routing leaves the next hop in the
Route header, but I don't understand which one of the above two examples actually tell SER to do that.
Thanks, Ricardo Villa
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
-- Jiri Kuthan http://iptel.org/~jiri/