diff options
author | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-06-04 03:11:31 +0000 |
---|---|---|
committer | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-06-04 03:11:31 +0000 |
commit | 9edc5914abad5aa717e0973bc07da5adba247249 (patch) | |
tree | f90018d01ae05408754587378ebbda2fc4023221 | |
parent | 21eaeb073e7a44cb7e50bc95b188538a4a1882f8 (diff) |
Send an ACK for every final response received for an INVITE
From issue ABE-2247. RFC 3261 compliance for sections 13.2.24 and 17.1.1.2.
Review: https://reviewboard.asterisk.org/r/692/
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@267863 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_sip.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 8fb16b406..0d45bb234 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -18774,6 +18774,11 @@ static void handle_response(struct sip_pvt *p, int resp, const char *rest, struc } if (ack_res == FALSE) { + /* RFC 3261 13.2.2.4 and 17.1.1.2 - We must re-send ACKs to re-transmitted final responses */ + if (sipmethod == SIP_INVITE && resp >= 200) { + transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, resp < 300 ? TRUE: FALSE); + } + append_history(p, "Ignore", "Ignoring this retransmit\n"); return; } |