summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorSteve Davies <steve@one47.co.uk>2016-09-13 11:34:47 +0100
committerRichard Mudgett <rmudgett@digium.com>2016-09-13 10:55:58 -0500
commit6ba68b486ed790695c048972f7cf05757214c1dc (patch)
treec64b4ca3fb9e75e6e2cefb6fea58a0a0ac94e647 /channels
parent7d7b23f04f2d45a531afd8fd8d0a172ab8411932 (diff)
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
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 28ba05f51..0efe687dc 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 */