diff --git a/src/dbus/callmanager.cpp b/src/dbus/callmanager.cpp index 4708f7f6308ac534b3eb64005647012ded5ca317..9b073950b763f78b7797c792c1335dc21142e352 100644 --- a/src/dbus/callmanager.cpp +++ b/src/dbus/callmanager.cpp @@ -41,7 +41,6 @@ CallManager::refuse( const ::DBus::String& callID ) { _debug("CallManager::refuse received\n"); Manager::instance().refuseCall(callID); - callStateChanged(callID, "HUNGUP"); } void @@ -49,7 +48,6 @@ CallManager::accept( const ::DBus::String& callID ) { _debug("CallManager::accept received\n"); Manager::instance().answerCall(callID); - callStateChanged(callID, "CURRENT"); } void @@ -57,7 +55,6 @@ CallManager::hangUp( const ::DBus::String& callID ) { _debug("CallManager::hangUp received\n"); Manager::instance().hangupCall(callID); - callStateChanged(callID, "HUNGUP"); } @@ -66,7 +63,6 @@ CallManager::hold( const ::DBus::String& callID ) { _debug("CallManager::hold received\n"); Manager::instance().onHoldCall(callID); - callStateChanged(callID, "HOLD"); } @@ -75,7 +71,6 @@ CallManager::unhold( const ::DBus::String& callID ) { _debug("CallManager::unhold received\n"); Manager::instance().offHoldCall(callID); - callStateChanged(callID, "UNHOLD"); } void @@ -83,7 +78,6 @@ CallManager::transfert( const ::DBus::String& callID, const ::DBus::String& to ) { _debug("CallManager::transfert received\n"); Manager::instance().transferCall(callID, to); - callStateChanged(callID, "HUNGUP"); } void diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp index a1898bc1862cd5363aac5ed384d8553d883e480b..77050c1e06715d4fdbe503892d34dc901cf3b6f3 100644 --- a/src/managerimpl.cpp +++ b/src/managerimpl.cpp @@ -215,7 +215,10 @@ bool ManagerImpl::answerCall(const CallID& id) { stopTone(false); - + if (hasCurrentCall()) + { + onHoldCall(getCurrentCallId()); + } AccountID accountid = getAccountFromCall( id ); if (accountid == AccountNULL) { _debug("Answering Call: Call doesn't exists\n"); @@ -224,12 +227,15 @@ ManagerImpl::answerCall(const CallID& id) if (!getAccountLink(accountid)->answer(id)) { // error when receiving... - removeCallAccount(id); return false; } + //Place current call on hold if it isn't + + // if it was waiting, it's waiting no more + if (_dbus) _dbus->getCallManager()->callStateChanged(id, "CURRENT"); removeWaitingCall(id); switchCall(id); return true; @@ -250,7 +256,7 @@ bool ManagerImpl::hangupCall(const CallID& id) { stopTone(true); - + if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP"); AccountID accountid = getAccountFromCall( id ); if (accountid == AccountNULL) { _debug("! Manager Hangup Call: Call doesn't exists\n"); @@ -260,7 +266,8 @@ ManagerImpl::hangupCall(const CallID& id) bool returnValue = getAccountLink(accountid)->hangup(id); removeCallAccount(id); switchCall(""); - + + return returnValue; } @@ -296,7 +303,9 @@ ManagerImpl::onHoldCall(const CallID& id) } bool returnValue = getAccountLink(accountid)->onhold(id); + removeWaitingCall(id); + if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HOLD"); switchCall(""); return returnValue; @@ -312,9 +321,16 @@ ManagerImpl::offHoldCall(const CallID& id) _debug("5 Manager OffHold Call: Call doesn't exists\n"); return false; } + + //Place current call on hold if it isn't + if (hasCurrentCall()) + { + onHoldCall(getCurrentCallId()); + } + bool returnValue = getAccountLink(accountid)->offhold(id); + if (_dbus) _dbus->getCallManager()->callStateChanged(id, "UNHOLD"); switchCall(id); - if (returnValue) { try { getAudioDriver()->startStream(); @@ -338,6 +354,7 @@ ManagerImpl::transferCall(const CallID& id, const std::string& to) bool returnValue = getAccountLink(accountid)->transfer(id, to); removeWaitingCall(id); removeCallAccount(id); + if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP"); switchCall(""); return returnValue; @@ -374,6 +391,7 @@ ManagerImpl::refuseCall (const CallID& id) if (returnValue) { removeWaitingCall(id); removeCallAccount(id); + if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP"); switchCall(""); } return returnValue; @@ -538,8 +556,6 @@ ManagerImpl::playDtmf(char code) return returnValue; } - - // Multi-thread bool ManagerImpl::incomingCallWaiting() { @@ -647,26 +663,28 @@ ManagerImpl::peerHungupCall(const CallID& id) _debug("peerHungupCall: Call doesn't exists\n"); return; } + if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP"); if (isCurrentCall(id)) { stopTone(true); switchCall(""); } removeWaitingCall(id); removeCallAccount(id); - if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP"); + } //THREAD=VoIP void ManagerImpl::callBusy(const CallID& id) { _debug("Call busy\n"); + + if (_dbus) _dbus->getCallManager()->callStateChanged(id, "BUSY"); if (isCurrentCall(id) ) { playATone(Tone::TONE_BUSY); switchCall(""); } removeCallAccount(id); removeWaitingCall(id); - if (_dbus) _dbus->getCallManager()->callStateChanged(id, "BUSY"); } //THREAD=VoIP @@ -674,13 +692,13 @@ void ManagerImpl::callFailure(const CallID& id) { _debug("Call failed\n"); + if (_dbus) _dbus->getCallManager()->callStateChanged(id, "FAILURE"); if (isCurrentCall(id) ) { playATone(Tone::TONE_BUSY); switchCall(""); } removeCallAccount(id); removeWaitingCall(id); - if (_dbus) _dbus->getCallManager()->callStateChanged(id, "FAILURE"); }