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
This commit is contained in:
Steve Davies
2016-09-13 11:34:47 +01:00
committed by Richard Mudgett
parent 7d7b23f04f
commit 6ba68b486e

View File

@@ -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 */ 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)) { 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; pkt->retrans_stop = 1;
siptimer_a = pkt->retrans_stop_time;
} }
/* Schedule retransmission */ /* Schedule retransmission */