From 8dcea59092efcdcb5b98d92f6718a39c1a8e7e45 Mon Sep 17 00:00:00 2001 From: Tristan Matthews <tristan.matthews@savoirfairelinux.com> Date: Tue, 3 Jun 2014 18:56:48 -0400 Subject: [PATCH] sip: don't do reinvite if hold state is unchanged Refs #48945 Change-Id: Ic80a99457bde01bd6e7f775d41c55f4359937bf2 --- daemon/src/sip/sipcall.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/daemon/src/sip/sipcall.cpp b/daemon/src/sip/sipcall.cpp index b1f127ac21..5bc29b7be0 100644 --- a/daemon/src/sip/sipcall.cpp +++ b/daemon/src/sip/sipcall.cpp @@ -127,6 +127,9 @@ int SIPSessionReinvite(SIPCall *call) void SIPCall::offhold(const std::function<void()> &SDPUpdateFunc) { + if (not setState(Call::ACTIVE)) + return; + if (local_sdp_ == NULL) throw SdpException("Could not find sdp session"); @@ -179,14 +182,18 @@ SIPCall::offhold(const std::function<void()> &SDPUpdateFunc) local_sdp_->addAttributeToLocalVideoMedia("sendrecv"); #endif - if (SIPSessionReinvite(this) == PJ_SUCCESS) - setState(Call::ACTIVE); + if (SIPSessionReinvite(this) != PJ_SUCCESS) { + WARN("Reinvite failed, resuming hold"); + onhold(); + } } void SIPCall::onhold() { - setState(Call::HOLD); + if (not setState(Call::HOLD)) + return; + audiortp_.saveLocalContext(); audiortp_.stop(); #ifdef SFL_VIDEO -- GitLab