[Serusers] loose routing problem

Klaus Darilion klaus.mailinglists at pernau.at
Wed Feb 25 18:56:46 CET 2004


I'm still confused. I try to write it down in my own words as far as I 
understand it and hope that somebody will confirm or correct my statements:

So, loose_route does the rewritting of the req-URI (strict routing) and 
removing of route headers if there are Route: headers in the request. 
After that, the request should be routable by t_relay.

The loose_route function will rewrite the req-URI of "strict_routing" 
messages. So the if(uri==myself) statement shouldn't be TRUE anymore, or 
  does this statement checks the original req-URI?

What is the reason why the BYE message from xlite (loose route) does not 
trigger the execution of the (loose_route()){...} block.  This would be 
nice, so I could do the security checks before forwarding to the PSTN 
gateway for both UAs at the same place. Otherwise I would have to do it 
2 times (1x for Messenger in the loose_route{ } block, and 1x for xlite 
after the loose_route{ } block.

regards,
klaus

Jan Janak wrote:
> On 25-02 17:26, Klaus Darilion wrote:
> 
>>Hi!
>>
>>Once again I'm stucked in the loose routing topic, maybe some can answer 
>>my question!
>>
>>I have ser configured to use RR. At the top of my ser.cfg I have:
>>
>>        # loose-route processing
>>        log(1, "check loose_route ...");
>>        if (loose_route()) {
>>                log(1, "loose_route processing, finished routing!\n");
>>                t_relay();
>>                break;
>>        };
>>        log(1, "no loose_route processing\n");
>>
>>	...
>>
>>Client A is xlite, which is a loose router, and Client B is Windows 
>>Messenger 4.7, which is a strict router. One client calls the other 
>>client, which accepts the call. Then the client hangs up.
>>
>>If client A hangs up (xlite, loose router) the loose_route(){...} block 
>>will not be processed and the BYE is handled by the following routing 
>>logic. If client B (strict router) hangs up, the loose_route(){...} 
>>block will be executed.
>>
>>So, why is the request from xlite (loose router) not treated in the 
>>loose_route block?
>>
>>IMHO, I would suggest that both requests (loose and strict) should be 
>>handled be the loose_route block. Also RFC3261 (16.4) says that "strict 
>>router" request should be transformed into a loose routing request 
>>(writing the last Route header field into the req-URI and remove this 
>>route header field) and than be handled like all other requests.
> 
> 
>   First of all loose routing or strict routing (depends on the Route
>   header fields) is performed even if loose_route function returns 0.
> 
>   There are some situations in which the message will have the IP
>   address of the server in the Request-URI and the message, in fact,
>   will be routed elsewhere (to the IP in the topmost Route header
>   field).
> 
>   In this case subsequent if (uri==myself) would match which is wrong.
>   Therefore loose_route will return 1 in this situation. Note well that
>   inside the if (loose_route()) condition the message will be not sent
>   to the host from Request-URI (!).
> 
>   loose_route function is RFC3261 compliant, it performs both loose and
>   strict routing, depending on the routeset.
> 
>   Please speak up if I did not explain it clearly enough and I will try to
>   make some examples. I am aware that this is hard to understand but you
>   should understand it well otherwise you might introduce some security
>   holes to your config (especially when routing to a PSTN gateway).
> 
>     Jan.
> 
> 




More information about the sr-users mailing list