From: Terry Wilson Date: Fri, 4 Jun 2010 03:11:31 +0000 (+0000) Subject: Send an ACK for every final response received for an INVITE X-Git-Tag: 11.0.0-beta1~2912 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f06302755a94cd117dc1d67d495130ad82798199;p=thirdparty%2Fasterisk.git 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 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 8fb16b4062..0d45bb2349 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; }