summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorTerry Wilson <twilson@digium.com>2010-06-04 03:11:31 +0000
committerTerry Wilson <twilson@digium.com>2010-06-04 03:11:31 +0000
commitf06302755a94cd117dc1d67d495130ad82798199 (patch)
treef90018d01ae05408754587378ebbda2fc4023221 /channels
parent58fc11c15da66dae08a9f2f78172c2b1b2bd2ca3 (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: https://origsvn.digium.com/svn/asterisk/trunk@267863 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-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;
}