Send an ACK for every final response received for an INVITE
authorTerry Wilson <twilson@digium.com>
Fri, 4 Jun 2010 03:11:31 +0000 (03:11 +0000)
committerTerry Wilson <twilson@digium.com>
Fri, 4 Jun 2010 03:11:31 +0000 (03:11 +0000)
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: https://origsvn.digium.com/svn/asterisk/trunk@267863 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 8fb16b4..0d45bb2 100644 (file)
@@ -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;
                }