[Serusers] [Serdev] loose_route behaviour, detecting single Route with myself

Nils Ohlmeier nils at iptel.org
Fri Jul 13 11:38:05 CEST 2007

On Thursday 12 July 2007 20:31:10 Greger V. Teigre wrote:
> I vote for a new preloaded_route() in trunk. I also suggest a new alias
> for loose_route (or rename and create loose_route as backwards
> compatible name): in_dialog() returning true if and only if the message
> being processed is and in-dialog message.

The problem is that you simply can not provide the functions you want in a 
stateless way.

An non-2xx ACK with a preloaded route looks exactly the same then a 2xx ACK. A 
preloaded_route() function thus has no chance to distinguish them. And I will 
not make the rr module depending on the tm module, just to query tm all the 
time if it knows something about this transaction or not.
IMHO the only way to distinguish these two is the RURI. Because in a normal 
loose route case the 2xx ACK should have non-local URI (the remote Contact) 
as RURI. But the non-2xx ACK should have a local RURI.
But with this theory we are back to the original topic: is a TEL URI a local 
URI or not.

And an in_dialog() function would not work as well. Because the To-tag is not 
enough to decide wether the request belongs to an established dialog or not. 
And the presence of one Route header also means nothing.

Is just came to my mind that a possible solution could be to add some kind of 
secret information to our Record-Route headers. Then the criteria for 
distinguishing a preloaded from an in-dialog routed request would be the 
presence of this "secret" information in the Route header. And if a UA omits 
this "secret" add-on from the Route header it would be guilty on its own that 
its requests might be mis-routed.


More information about the Serusers mailing list