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(a)iptel.org>
To: "Ricardo Villa" <ricvil(a)epm.net.co>
Cc: <serusers(a)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(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers
--
Jiri Kuthan
http://iptel.org/~jiri/