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.