From: Steve Davies Date: Tue, 13 Sep 2016 10:34:47 +0000 (+0100) Subject: chan_sip: Fix session timeout on retransmit of non-UDP packets X-Git-Tag: 14.1.0-rc1~51 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=58f41ebf934e3f7eb7d810ea34bb778c68e2861d;p=thirdparty%2Fasterisk.git chan_sip: Fix session timeout on retransmit of non-UDP packets Change-Id I1cd33453c77c56c8e1394cd60a6f17bb61c1d957 Enable Session-Timers for SIP over TCP (and TLS) also disables SIP retransmits in chan_sip for non-UDP connections, allowing the TCP layer to handle the retransmits. Unfortunately, this caused sessions to be terminated with a retransmit timeout becasue it stopped at the point of the first retrans call. This patch waits for the 64*T1 timer to expire instead. ASTERISK-19968 Change-Id: I844f26801aada10bc94e9bebe6e151f0a8443204 (cherry picked from commit 98e42cc6624a02bede84c38772412b6ff9d8fa2f) --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index e05c22e16d..f7219add27 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -4243,7 +4243,10 @@ static enum sip_result __sip_reliable_xmit(struct sip_pvt *p, uint32_t seqno, in pkt->retrans_stop_time = 64 * (pkt->timer_t1 ? pkt->timer_t1 : DEFAULT_TIMER_T1); /* time in ms after pkt->time_sent to stop retransmission */ if (!(p->socket.type & AST_TRANSPORT_UDP)) { + /* TCP does not need retransmits as that's built in, but with + * retrans_stop set, we must give it the full timer_H treatment */ pkt->retrans_stop = 1; + siptimer_a = pkt->retrans_stop_time; } /* Schedule retransmission */