From 9d3be20a0d33e6a10a8cc1f7de73876b2744f9c1 Mon Sep 17 00:00:00 2001 From: Olle Johansson Date: Thu, 15 Nov 2007 11:26:22 +0000 Subject: [PATCH] Don't send re-invites during pending INVITE transactions. Patch by one47 - thanks! Closes issue #9305 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@89281 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 39ec4bc9b7..9023d0939e 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -11854,16 +11854,29 @@ static void check_pendings(struct sip_pvt *p) transmit_request(p, SIP_CANCEL, p->ocseq, XMIT_RELIABLE, FALSE); /* Actually don't destroy us yet, wait for the 487 on our original INVITE, but do set an autodestruct just in case we never get it. */ - else + else { + /* We have a pending outbound invite, don't send someting + new in-transaction */ + if (p->pendinginvite) + return; + + /* Perhaps there is an SD change INVITE outstanding */ transmit_request_with_auth(p, SIP_BYE, 0, XMIT_RELIABLE, TRUE); + } ast_clear_flag(&p->flags[0], SIP_PENDINGBYE); sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT); } else if (ast_test_flag(&p->flags[0], SIP_NEEDREINVITE)) { - if (option_debug) - ast_log(LOG_DEBUG, "Sending pending reinvite on '%s'\n", p->callid); - /* Didn't get to reinvite yet, so do it now */ - transmit_reinvite_with_sdp(p); - ast_clear_flag(&p->flags[0], SIP_NEEDREINVITE); + /* if we can't REINVITE, hold it for later */ + if (p->pendinginvite || p->invitestate == INV_CALLING || p->invitestate == INV_PROCEEDING || p->invitestate == INV_EARLY_MEDIA) { + if (option_debug) + ast_log(LOG_DEBUG, "NOT Sending pending reinvite (yet) on '%s'\n", p->callid); + } else { + if (option_debug) + ast_log(LOG_DEBUG, "Sending pending reinvite on '%s'\n", p->callid); + /* Didn't get to reinvite yet, so do it now */ + transmit_reinvite_with_sdp(p); + ast_clear_flag(&p->flags[0], SIP_NEEDREINVITE); + } } }