From c5202fcb4244be25bf20126677d16ff7ad9a93f2 Mon Sep 17 00:00:00 2001
From: alexandresavard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 4 Feb 2009 09:21:03 -0500
Subject: [PATCH] Terminate only one call

---
 src/sipvoiplink.cpp | 30 +++++++++++++++++++++++++-----
 src/sipvoiplink.h   |  5 +++++
 2 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp
index 1e8783950f..bfb5810bef 100644
--- a/src/sipvoiplink.cpp
+++ b/src/sipvoiplink.cpp
@@ -229,6 +229,23 @@ SIPVoIPLink::terminateSIPCall()
     _callMap.clear();
 }
 
+    void
+SIPVoIPLink::terminateOneCall(const CallID& id)
+{
+    _debug("SIPVoIPLink::terminateOneCall(): function called \n");
+  
+    SIPCall *call;
+    
+    call = getSIPCall(id);
+    if (call) {
+    // terminate the sip call
+        _debug("SIPVoIPLink::terminateOneCall()::the call is deleted, should close recording file \n");
+        delete call; call = 0;
+    }
+}
+
+
+
     void
 SIPVoIPLink::getEvent()
 {
@@ -383,7 +400,7 @@ SIPVoIPLink::sendUnregister( AccountID id )
     return true;
 }
 
-    Call* 
+Call* 
 SIPVoIPLink::newOutgoingCall(const CallID& id, const std::string& toUrl)
 {
     Account* account;
@@ -453,6 +470,7 @@ SIPVoIPLink::answer(const CallID& id)
             _debug("! SIP Failure: Unable to start sound when answering %s/%d\n", __FILE__, __LINE__);
         }
     }
+    terminateOneCall(call->getCallId());
     removeCall(call->getCallId());
     return false;
 }
@@ -489,8 +507,7 @@ SIPVoIPLink::hangup(const CallID& id)
         _audiortp->closeRtpSession();
     }
  
-    terminateSIPCall();
-
+    terminateOneCall(id);
     removeCall(id);
 
     return true;
@@ -504,6 +521,7 @@ SIPVoIPLink::cancel(const CallID& id)
 
     _debug("- SIP Action: Cancel call %s [cid: %3d]\n", id.data(), call->getCid()); 
 
+    terminateOneCall(id);
     removeCall(id);
 
     return true;
@@ -716,7 +734,7 @@ SIPVoIPLink::refuse (const CallID& id)
 
     call->getInvSession()->mod_data[getModId()] = NULL;
 
-    terminateSIPCall();
+    terminateOneCall(id);
     return true;
 }
 
@@ -941,6 +959,7 @@ SIPVoIPLink::SIPCallServerFailure(SIPCall *call)
         _debug("Server error!\n");
         CallID id = call->getCallId();
         Manager::instance().callFailure(id);
+        terminateOneCall(id);
         removeCall(id);
     }
     //break;
@@ -965,7 +984,7 @@ SIPVoIPLink::SIPCallClosed(SIPCall *call)
     }
     _debug("After close RTP\n");
     Manager::instance().peerHungupCall(id);
-    terminateSIPCall();
+    terminateOneCall(id);
     removeCall(id);
     _debug("After remove call ID\n");
 }
@@ -982,6 +1001,7 @@ SIPVoIPLink::SIPCallReleased(SIPCall *call)
     _debug("SIP call release\n");
     CallID id = call->getCallId();
     Manager::instance().callFailure(id);
+    terminateOneCall(id);
     removeCall(id);
 }
 
diff --git a/src/sipvoiplink.h b/src/sipvoiplink.h
index dde5e71ebb..01e92540f2 100644
--- a/src/sipvoiplink.h
+++ b/src/sipvoiplink.h
@@ -191,6 +191,11 @@ class SIPVoIPLink : public VoIPLink
          * Terminate every call not hangup | brutal | Protected by mutex 
          */
         void terminateSIPCall(); 
+ 
+        /**
+         * Terminate only one call
+         */
+        void terminateOneCall(const CallID& id);
 
         /**
          * Build a sip address with the number that you want to call
-- 
GitLab