[Serusers] ACK processing (was: [Serdev] loose_route behaviour, detecting single?Route with myself)
Martin Hoffmann
hn at nvnc.de
Thu Jul 12 12:54:58 CEST 2007
Nils Ohlmeier wrote:
> On Thursday 12 July 2007 09:26:37 Martin Hoffmann wrote:
> >
> > Is there any argument against putting a
> >
> > if (method == "ACK") {
> > t_relay();
> > drop();
> > }
> >
> > somewhere way up in your config?
>
> And how do you distinguish between in-dialog ACKs and out-of-dialog ACKs?
Techically, there is no such thing. There is only ACKs to 2xx and
non-2xx responses. The former are always in-dialog requests, since the
2xx creates the dialog should it not yet exists. The latter is a matter
of the transaction layer which doesn't know of dialogs.
In practice, an ACK to a non-2xx response always needs to be eaten by
tm. This t_relay() does. Any ACK to a 2xx response needs to be routed
like any other in-dialog request to the endpoint (save for some
elaborate processing such as authentication). Which means, my code
snipped does indeed lack a loose_route() before t_relay().
> Note: they both have a To-tag and even worse if the original INVITE contained
> a pre-loaded Route header (for outbound proxy) the ACK has to contain this
> Route as well!
Depends. A non-2xx ACK indeed has to. But a 2xx ACK musn't. It is to be
created like any other in-dialog request. The Route set thus MUST be the
reversed set of the Record-Route headers of the 2xx response, possibly
be empty.
Regards,
Martin
Book keeping: Limited to seruser and changed subject.
More information about the sr-users
mailing list