aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortwilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b>2010-06-04 03:11:31 +0000
committertwilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b>2010-06-04 03:11:31 +0000
commit9edc5914abad5aa717e0973bc07da5adba247249 (patch)
treef90018d01ae05408754587378ebbda2fc4023221
parent21eaeb073e7a44cb7e50bc95b188538a4a1882f8 (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.c5
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;
}