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