diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 46163a25d5ea5ad6fea3e74fe223dced0350a9ad..9fa00c11b76fb272f8f84f7d189a24016b7b77ab 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -350,13 +350,13 @@ ManagerImpl::answerCall (const CallID& call_id) Call* call = NULL; call = getAccountLink (account_id)->getCall (call_id); if (call == NULL) { - _debug(" answerCall: currentCall is null\n"); + _debug(" answerCall: Call is null\n"); } // in any cases we have to detach from current communication if (hasCurrentCall()) { - _debug (" answerCall: Has current call or conference (%s)\n", current_call_id.c_str()); + _debug (" answerCall: Currently conversing with %s\n", current_call_id.c_str()); // if it is not a conference and is not a conference participant if (!isConference(current_call_id) && !participToConference(current_call_id)) { @@ -366,7 +366,7 @@ ManagerImpl::answerCall (const CallID& call_id) // if we are talking to a conference and we are answering an incoming call else if (isConference(current_call_id) && !participToConference(call_id)) { - _debug (" answerCall: detach main participant from conference\n"); + _debug (" answerCall: Detach main participant from conference\n"); detachParticipant(default_id, current_call_id); } } @@ -385,7 +385,21 @@ ManagerImpl::answerCall (const CallID& call_id) removeWaitingCall (call_id); - switchCall (call_id); + // if we dragged this call into a conference already + if ( participToConference(call_id) ) { + + // AccountID currentAccountId; + // Call* call = NULL; + + // currentAccountId = getAccountFromCall (call_id); + // call = getAccountLink (currentAccountId)->getCall (call_id); + + switchCall(call->getConfId()); + } + else + { + switchCall(call_id); + } return true; } @@ -556,27 +570,33 @@ ManagerImpl::onHoldCall (const CallID& call_id) // switchCall (id); - /* Direct IP to IP call */ + CallID current_call_id = getCurrentCallId(); + + _debug(" onHoldCall: try to put call %s on hold\n", call_id.c_str()); + /* Direct IP to IP call */ if (getConfigFromCall (call_id) == Call::IPtoIP) { - returnValue = SIPVoIPLink::instance (AccountNULL)-> onhold (call_id); + returnValue = SIPVoIPLink::instance (AccountNULL)-> onhold (call_id); } /* Classic call, attached to an account */ else { - account_id = getAccountFromCall (call_id); - - if (account_id == AccountNULL) { - _debug (" onHoldCall: Account ID %s or callid %s doesn't exists\n", account_id.c_str(), call_id.c_str()); - return false; - } + account_id = getAccountFromCall (call_id); + + if (account_id == AccountNULL) { + _debug (" onHoldCall: Account ID %s or callid %s doesn't exists\n", account_id.c_str(), call_id.c_str()); + return false; + } - returnValue = getAccountLink (account_id)->onhold (call_id); + returnValue = getAccountLink (account_id)->onhold (call_id); } - + removeWaitingCall (call_id); - // switchCall (""); + if(current_call_id == call_id) { + + switchCall (""); + } if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "HOLD"); @@ -1732,6 +1752,8 @@ ManagerImpl::peerAnsweredCall (const CallID& id) // _debug("ManagerImpl::hangupCall(): broadcast codec name %s \n",codecName.c_str()); if (_dbus) _dbus->getCallManager()->currentSelectedCodec (id,codecName.c_str()); + + } //THREAD=VoIP Call=Outgoing diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index e24083ab5584870718c27fb038ccc5d9e9b482cd..e38d993e432734526e8c18ef1a9e60f9a228d67c 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -2320,6 +2320,8 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id) (int) a_name.host.slen, a_name.host.ptr, (int) a_name.port, localAddress.c_str(), (int) localTlsPort); + + status = pjsip_tls_transport_start (_endpt, tls_setting, &local_addr, &a_name, 1, &tls); if (status != PJ_SUCCESS) {