]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_sip: Fix session timeout on retransmit of non-UDP packets 87/3887/3
authorSteve Davies <steve@one47.co.uk>
Tue, 13 Sep 2016 10:34:47 +0000 (11:34 +0100)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 13 Sep 2016 15:55:16 +0000 (10:55 -0500)
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

channels/chan_sip.c

index b65f612751f59e96f1baefc3873adad8492a5a26..6fdb37871820dacaebade007631c1ac11c0d2bb4 100644 (file)
@@ -4185,7 +4185,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 & SIP_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 */