[Serusers] loose routing problem

Jan Janak jan at iptel.org
Wed Feb 25 17:41:20 CET 2004


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