At 09:26 12/07/2007, Martin Hoffmann wrote:
Nils Ohlmeier wrote:
The realization of the fact that the presence or
absence of To-tag is
not enough to decide if a request belongs to a dialog or not. The big
exception here is the ACK for negative replies. It has a To-tag but a
dialog was not established.
That is a non-issue. This ACK needs special treatment anyways -- it is
to be consumed by tm.
I would say too that this is not a big exception but an insignificant one.
(Historians may wish to comment, that from the protocol design point of
view the positive ACK is just terribly insane in SIP, but for benefit of
the mailing list readers I will save you this ellaboration.)
Is there any argument against putting a
if (method == "ACK") {
t_relay();
drop();
}
somewhere way up in your config?
Haven't tried but it seems workable. It would have to be behind loose_route
(otherweise e2e ACK routed using record-routed logic would be routed
wrong.) hbh ACKs are absorbed by t_relay, e2e ACKs forwarded statelessly.
Anyhow, I got lost in the volume of this exciting debate. Can some of the
honorable gentlemen make me a massive favor and "destilate" for me, what
the problem is thought to be? (i.e., what does not work "as is")?
I'll try my best....
It was started by JF who pointed out that an INVITE with a TEL URI in the RURI
and a SIP URI as preloaded Route is not handled the same way by loose_route()
as other preloaded requests. The reason for this is that a TEL URI is not
detected/accepted as local URI.
If the RURI contains a local URI the handling is very easy, because you simply
can remove the Route header and forward the request to yourself. In the
second round the request should be treated as any other incoming request
without a preloaded route. Unfortunately this does not work in case of
non-local RURI's.
Then I tried to explain what was the motivation behind the change of the
loose_route() function for 2.0 (stateless handling of non-2xx preloaded ACKs
and 2xx ACKs - please see the thread for details).
Then the reasonable question was raised if preloaded requests should be
handled by the loose_route() function at all.
Currently I like Martin's proposal of having an extra function for preloaded
requests best. But
- a clean implemenatation of this is not easy
- still the only solution for distinguishing non-2xx preloaded ACKs from 2xx
ACKs seems to be a Route cookie (which can be omitted if your proxy is
statefull)
- all this discussion is IMO for SER version > 2.0
Besides this interesting discussion for future SER versions, the big open
question is: if and how we want to change/fix the original problem of JF?
Personally I do not like JFs proposal, because it "fixes" only his problem
with TEL URIs. But the general problem of having pre-loaded requests with
non-local or non-routeable RURIs is not solved by this.
Changing loose_route() in a way of not handling preloaded requests is a too
dramitcal change for the 2.0 release IMHO.
Introducing a To-tag check would be a faulty solution as well (as I explained
already that you can not distinguish a non-2xx preloaded ACK from a 2xx ACK
by this).
So I fear there is no optimal solution for this. Thus I would propose that we
just explain that this "special case" has to be considered by the script
writers.
Regards
Nils