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.