diff --git a/daemon/src/sip/sipcall.cpp b/daemon/src/sip/sipcall.cpp index b1f127ac216feb083aacfa17b7b284ae1ae66969..5bc29b7be068bee3e57787bdc75c3e798ae06045 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