[sr-dev] ACKs to failure responses do not match transactions
Hugh Waite
hugh.waite at crocodile-rcs.com
Wed Oct 5 16:25:38 CEST 2011
We have discovered the cause of the problem I described, but we still do
not understand why.
After a SIP request arrives we make some changes to the
P-Preferred/Asserted-Identity headers after our own validation. To allow
these changes to be visible later (e.g. in $hdr() variables) we call
msg_apply_changes(). It seems that calling this function causes the
transaction matching to fail for subsequent messages (e.g. ACK and CANCEL).
*Non-Working Example:*
append_hf("My-Header: yes\r\n");
msg_apply_changes();
if (is_present_hf("My-Header"))
{
# log("Found my header") - this gets run
}
t_relay();
If the destination responds with a 4XX then the ACK does not match and
the 4XX is retransmitted.
If a CANCEL is sent, then it does not match and is not relayed.
*Working Example:*
append_hf("My-Header: yes\r\n");
if (is_present_hf("My-Header"))
{
# log("Found my header") - this does not get run
}
t_relay();
In this example, the header is not found, but the transaction matching
works properly
Is this something to do with re-parsing the request? And is it a bug to
be investigated?
Regards,
Hugh
On 04/10/2011 15:15, Hugh Waite wrote:
> We are seeing an issue with ACKs to failure responses.
>
> Our config is set up to forward an INVITE to another destination. It
> replies with a 407 Auth Required. Kamailio sends an ACK to the
> destination and relays the 407 back to the source. The source sends an
> ACK, but this always fails the transaction match, so kamailio keeps
> retransmitting the 407 (when using UDP)
>
> UA KAM UA
>
> -- INVITE --> -- INVITE -->
> <-- 407 --
> -- ACK -->
> <-- 407 --
> -- ACK -->
> ...
> <-- 407 -- (retrans)
> -- ACK -->
>
> I wondered if it was the same issue as the stateless reply (Flyspray
> #154), but this happens when we do a t_relay.
>
> Basically, when t_check_trans() is called for the ACK, it does not
> terminate the script. I have worked my way into the t_check_trans()
> code and found that it does not find a matching transaction;
> matching_3261() in t_lookup.c returns 0 because there are no entries
> in that hash bucket.
>
> Does anyone understand why this may be happening?
>
> Regards,
> Hugh
>
--
--
Hugh Waite
Senior Design Engineer
Crocodile RCS Ltd.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-dev/attachments/20111005/a4a37657/attachment.htm>
More information about the sr-dev
mailing list