[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