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.