From 230d4b38a3b9586b9769b5c056e93ec46375e852 Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Mon, 23 Aug 2004 14:31:20 +0000 Subject: Qualify rtptimeout with a reinvite having taken place (bug #2286) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3635 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'channels') diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 937a942cc..b461284d1 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -7576,7 +7576,7 @@ restartsearch: sip = iflist; while(sip) { ast_mutex_lock(&sip->lock); - if (sip->rtp && sip->lastrtprx && (sip->rtptimeout || sip->rtpholdtimeout)) { + if (sip->rtp && sip->lastrtprx && (sip->rtptimeout || sip->rtpholdtimeout) && !sip->redirip.sin_addr.s_addr) { if (t > sip->lastrtprx + sip->rtptimeout) { /* Might be a timeout now -- see if we're on hold */ struct sockaddr_in sin; @@ -8592,19 +8592,29 @@ static int reload_config(void) static struct ast_rtp *sip_get_rtp_peer(struct ast_channel *chan) { struct sip_pvt *p; + struct ast_rtp *rtp = NULL; p = chan->pvt->pvt; - if (p && p->rtp && p->canreinvite) - return p->rtp; - return NULL; + if (p) { + ast_mutex_lock(&p->lock); + if (p->rtp && p->canreinvite) + rtp = p->rtp; + ast_mutex_unlock(&p->lock); + } + return rtp; } static struct ast_rtp *sip_get_vrtp_peer(struct ast_channel *chan) { struct sip_pvt *p; + struct ast_rtp *rtp = NULL; p = chan->pvt->pvt; - if (p && p->vrtp && p->canreinvite) - return p->vrtp; - return NULL; + if (p) { + ast_mutex_lock(&p->lock); + if (p->vrtp && p->canreinvite) + rtp = p->vrtp; + ast_mutex_unlock(&p->lock); + } + return rtp; } static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struct ast_rtp *vrtp, int codecs) @@ -8612,6 +8622,7 @@ static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struc struct sip_pvt *p; p = chan->pvt->pvt; if (p) { + ast_mutex_lock(&p->lock); if (rtp) ast_rtp_get_peer(rtp, &p->redirip); else @@ -8629,6 +8640,9 @@ static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struc p->needreinvite = 1; } } + /* Reset lastrtprx timer */ + time(&p->lastrtprx); + ast_mutex_unlock(&p->lock); return 0; } return -1; -- cgit v1.2.3