[SR-Users] re-SUBSCRIBE and Record-Route

marius zbihlei marius.zbihlei at 1and1.ro
Fri Mar 4 16:07:43 CET 2011


On 03/04/2011 05:05 PM, marius zbihlei wrote:
> On 03/04/2011 04:56 PM, Klaus Darilion wrote:
>    
>> Not so easy .....
>>
>> 16.4 Route Information Preprocessing
>>
>>
>>      The proxy MUST inspect the Request-URI of the request.  If the
>>      Request-URI of the request contains a value this proxy previously
>>      placed into a Record-Route header field (see Section 16.6 item 4),
>>      the proxy MUST replace the Request-URI in the request with the last
>>      value from the Route header field, and remove that value from the
>>      Route header field.  The proxy MUST then proceed as if it received
>>      this modified request.
>>
>>         This will only happen when the element sending the request to the
>>         proxy (which may have been an endpoint) is a strict router.  This
>>         rewrite on receive is necessary to enable backwards compatibility
>>         with those elements.  It also allows elements following this
>>         specification to preserve the Request-URI through strict-routing
>>         proxies (see Section 12.2.1.1).
>>
>>
>> Thus, Kamailio should somehow detect if the URI is inserted by himself
>> or not. This may only happen if the previous hop is a strict-router. As
>> Kamailio is a loose-router and always adds the ;lr parameter, the check
>> could be extended to check if the RURI also cotains lr parameter. If the
>> lr parameter is not present, this means for sure that the RURI was not
>> generated by Kamailio.
>>
>>
>>      
> Hello,
>
> I was thinking of maybe adding a new configurable RR param. A strict
> router would copy this header into the RURI. But a.t.m. loose_route does
> not perform any checking on tags. Maybe an exclude_uri_tag module param
> that can work like this:
>
> modparam("rr", "exclude_uri_tag", "mark=on");
>
> Then, when the initial SUBSCRIBE (dialog setting message) comes
>
> add_rr_param(";mark=on");
>
> In the loose_route processing, if exclude_uri_tag is set and  !(RURI =~
> exclude_uri_tag), then perform loose routing on that request (the
> request isn't coming from a strict router)
>
> What do you think?
>    
Replying to myself..

Of course, this is almost the same as your idea, the question would this 
suffice, of a param to loose_route will be needed to enable/disable this 
behavior ?!

Marius


> Marius
>    
>> Of course this would require code changes.
>>
>> A dirty hack would be to manipulate the Route headers manually and set $du.
>>
>>
>> regards
>> Klaus
>>
>>
>>
>> Am 04.03.2011 15:25, schrieb marius zbihlei:
>>
>>      
>>> Hello list,
>>>
>>> An UAC sends a resubscribe in the form
>>>
>>> SUBSCRIBE sip:Alice at example.com SIP/2.0
>>> Route:<sip:sip.example.com;lr=on>
>>> Route:<sip:sip.next-hop.example.com;lr=on>
>>> ....
>>>
>>> The request has a to tag, from tag... Basic resubscribe(R-URI is the
>>> same as original SUBSCRIBE) The proxy that handles it is a Kamailio (1.5
>>> but this refers to 3.1 as well). The problem is that loose_route()
>>> treats this request as coming from a strict routing router, not from the
>>> UAC, so it applies the strict-to-loose rules and rewrites the request as:
>>>
>>> SUBSCRIBE sip:sip.next-hop.example.com;lr=on SIP/2.0
>>> Route:<sip:sip.example.com;lr=on>
>>> ....
>>>
>>> The segment that handles this is pretty standard:
>>>
>>> if (loose_route()) {
>>>                   # sequential request withing a dialog should take the path
>>>                   # determined by record-routing
>>>                   if(has_totag()) {
>>>                           forward();
>>>                           exit;
>>> }
>>>
>>> It sees that message has Route set, it finds the to tag (so the routes
>>> were not a preset), and then , the important thing, sees that the domain
>>> from the RURI matches itself (kamailio has aliases configured for
>>> example.com), thus considering the request as coming from a strict
>>> router. Then it takes the bottom Route header and overwrites the RURI.
>>>
>>> What is the best way to ensure that loose routing is applied to the
>>> resubscribe as described above?
>>>
>>> Cheers,
>>> Marius
>>>
>>> _______________________________________________
>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>>> sr-users at lists.sip-router.org
>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>
>>>        
>>
>>      
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
>    




More information about the sr-users mailing list