diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 9b28e568e16ed6f97a26417a017e5d47a1b97bc6..60729ea359116deeedb6af5cc9d26fbdd78be9cd 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -196,7 +196,7 @@ bool ManagerImpl::outgoingCall (const std::string& account_id, Call::CallConfiguration callConfig; SIPVoIPLink *siplink; - _debug ("Manager: New outgoing call %s", call_id.c_str()); + _debug ("Manager: New outgoing call %s to %s", call_id.c_str(), to.c_str()); CallID current_call_id = getCurrentCallId(); @@ -214,23 +214,17 @@ bool ManagerImpl::outgoingCall (const std::string& account_id, // in any cases we have to detach from current communication if (hasCurrentCall()) { - _debug (" outgoingCall: Has current call (%s) put it onhold", current_call_id.c_str()); - + _debug ("Manager: Has current call (%s) put it onhold", current_call_id.c_str()); // if this is not a conferenceand this and is not a conference participant - - if (!isConference(current_call_id) && !participToConference( - current_call_id)) { - _debug (" outgoingCall: Put the current call (%s) on hold", current_call_id.c_str()); + if (!isConference(current_call_id) && !participToConference(current_call_id)) { onHoldCall(current_call_id); - } else if (isConference(current_call_id) && !participToConference( - call_id)) { - _debug (" outgoingCall: detach main participant from conference"); + } else if (isConference(current_call_id) && !participToConference(call_id)) { detachParticipant(default_id, current_call_id); } } if (callConfig == Call::IPtoIP) { - _debug ("Manager: Start IP to IP call"); + _debug ("Manager: Start IP2IP call"); /* We need to retrieve the sip voiplink instance */ siplink = SIPVoIPLink::instance(""); @@ -244,6 +238,7 @@ bool ManagerImpl::outgoingCall (const std::string& account_id, return false; } + _debug("Manager: Selecting account %s", account_id.c_str()); if (!accountExists(account_id)) { _error ("Manager: Error: Account doesn't exist in new outgoing call"); return false; @@ -254,16 +249,15 @@ bool ManagerImpl::outgoingCall (const std::string& account_id, return false; } - _debug ("Manager: Action: Adding Outgoing Call %s on account %s", call_id.data(), account_id.data()); - + _debug ("Manager: Adding Outgoing Call %s on account %s", call_id.data(), account_id.data()); associateCallToAccount(call_id, account_id); if (getAccountLink(account_id)->newOutgoingCall(call_id, to_cleaned)) { - switchCall(call_id); - return true; + switchCall(call_id); + return true; } else { - callFailure(call_id); - _debug ("Manager: Error: An error occur, the call was not created"); + callFailure(call_id); + _debug ("Manager: Error: An error occur, the call was not created"); } return false; @@ -272,7 +266,7 @@ bool ManagerImpl::outgoingCall (const std::string& account_id, //THREAD=Main : for outgoing Call bool ManagerImpl::answerCall (const CallID& call_id) { - _debug ("ManagerImpl::answerCall(%s)", call_id.c_str()); + _debug ("ManagerImpl: Answer call %s", call_id.c_str()); stopTone(); @@ -494,7 +488,7 @@ bool ManagerImpl::onHoldCall (const CallID& call_id) { AccountID account_id; bool returnValue; - _debug ("Manager: Put call %s on hold", call_id.c_str()); + _debug ("Manager: Put call %s on hold", call_id.c_str()); stopTone(); @@ -1127,7 +1121,7 @@ void ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id void ManagerImpl::detachParticipant (const CallID& call_id, const CallID& current_id) { - _debug ("ManagerImpl::detachParticipant(%s)", call_id.c_str()); + _debug ("Manager: Detach participant %s from conference", call_id.c_str()); CallID current_call_id = current_id; @@ -1147,8 +1141,7 @@ void ManagerImpl::detachParticipant (const CallID& call_id, if (conf != NULL) { - _debug (" detachParticipant: detaching participant %s", call_id.c_str()); - + _debug ("Manager: Detaching participant %s", call_id.c_str()); std::map<std::string, std::string> call_details = getCallDetails( call_id); std::map<std::string, std::string>::iterator iter_details; @@ -1167,11 +1160,11 @@ void ManagerImpl::detachParticipant (const CallID& call_id, } } else { - _debug (" detachParticipant: call is not conferencing, cannot detach"); + _debug ("Manager: Call is not conferencing, cannot detach"); } } else { - _debug (" detachParticipant: unbind main participant from all"); + _debug ("Manager: Unbind main participant from all"); _audiodriver->getMainBuffer()->unBindAll(default_id); if (isConference(current_call_id)) { @@ -4152,7 +4145,7 @@ void ManagerImpl::check_call_configuration (const CallID& id, Call::CallConfiguration config; if (to.find(SIP_SCHEME) == 0 || to.find(SIPS_SCHEME) == 0) { - _debug ("Sending Sip Call "); + _debug ("Manager: Sip scheme detected (sip: or sips:), sending IP2IP Call"); config = Call::IPtoIP; } else { config = Call::Classic; diff --git a/sflphone-common/src/numbercleaner.h b/sflphone-common/src/numbercleaner.h index aff62036d03525c6e10e8566e95e107e94c0412d..02be4bd347c350abc3064c537a8f74d93e968d23 100644 --- a/sflphone-common/src/numbercleaner.h +++ b/sflphone-common/src/numbercleaner.h @@ -21,6 +21,7 @@ #ifndef _NUMBER_CLEANER_H #define _NUMBER_CLEANER_H +#include "logger.h" #include <string> class NumberCleaner { @@ -31,7 +32,8 @@ class NumberCleaner { std::string clean (std::string to_clean); - inline void set_phone_number_prefix (std::string prefix) { _prefix = prefix; } + inline void set_phone_number_prefix (std::string prefix) { + _debug("Number: Set phone number prefix %s", _prefix.c_str()); _prefix = prefix; } inline std::string get_phone_number_prefix (void) { return _prefix; } diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 07f7d70481deade5f63c15f25c9aed56efd4d918..75e4bf9e7edc05d2cd8ff750a7a9e3e8d2b9401d 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -749,6 +749,8 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) pj_status_t status; std::string localAddr, addrSdp; + _debug("UserAgent: New outgoing call %s to %s", id.c_str(), toUrl.c_str()); + SIPCall* call = new SIPCall (id, Call::Outgoing, _pool); if (call) { @@ -769,6 +771,8 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl) localAddr = getInterfaceAddrFromName(account->getLocalInterface ()); + _debug("UserAgent: Local address for call: %s", localAddr.c_str()); + if (localAddr == "0.0.0.0") loadSIPLocalIP (&localAddr); @@ -1378,6 +1382,8 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) AccountID id; + _debug("UserAgent: Start sip call"); + if (call == NULL) return false; @@ -1389,7 +1395,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id)); if (account == NULL) { - _debug ("Account is null in SIPStartCall"); + _debug ("UserAgent: Error: Account is null in SIPStartCall"); return false; } @@ -1411,7 +1417,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) contactUri = account->getContactHeader (address, portStr); - _debug ("SIPStartCall: fromUri: %s toUri: %s contactUri: %s", + _debug ("UserAgent: FROM uri: %s, TO uri: %s, CONTACT uri: %s", fromUri.c_str(), toUri.c_str(), contactUri.c_str()); @@ -1433,7 +1439,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) &dialog); if (status != PJ_SUCCESS) { - _debug ("UAC creation failed"); + _error ("UserAgent: Error: UAC creation failed"); return false; } @@ -1469,13 +1475,13 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED) status = pjsip_inv_send_msg (inv, tdata); if (status != PJ_SUCCESS) { - _debug (" SIPStartCall: failed to send invite"); + _error ("UserAgent: Error: failed to send invite"); return false; } if(account->getAccountTransport()) { - _debug("Sent invite request using transport: %s %s (refcnt=%d)", + _debug("UserAgent: Sent invite request using transport: %s %s (refcnt=%d)", account->getAccountTransport()->obj_name, account->getAccountTransport()->info, (int)pj_atomic_get(account->getAccountTransport()->ref_cnt)); @@ -1586,6 +1592,8 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) pjsip_tx_data *tdata; std::string localAddress, addrSdp; + _debug("UserAgent: New IP2IP call %s to %s", id.c_str(), to.c_str()); + /* Create the call */ call = new SIPCall (id, Call::Outgoing, _pool); @@ -1594,13 +1602,12 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) call->setCallConfiguration (Call::IPtoIP); call->initRecFileName(); - // AccountID accountId = Manager::instance().getAccountFromCall (id); SIPAccount * account = NULL; account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE)); if (account == NULL) { - _debug ("UserAgent: Account %s is null. Returning", IP2IP_PROFILE); - return !PJ_SUCCESS; + _error ("UserAgent: Error: Account %s is null. Returning", IP2IP_PROFILE); + return !PJ_SUCCESS; } // Set the local address @@ -1608,25 +1615,27 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) // Set SDP parameters - Set to local addrSdp = localAddress; - _debug ("UserAgent: Local Address for IP2IP call: %s", localAddress.c_str()); - // If local address bound to ANY, reslove it using PJSIP if (localAddress == "0.0.0.0") { loadSIPLocalIP (&localAddress); } + _debug ("UserAgent: Local Address for IP2IP call: %s", localAddress.c_str()); + // Local address to appear in SDP if (addrSdp == "0.0.0.0") { addrSdp = localAddress; } + _debug ("UserAgent: Media Address for IP2IP call: %s", localAddress.c_str()); + // Set local address for RTP media setCallAudioLocal (call, localAddress); std::string toUri = account->getToUri (to); call->setPeerNumber (toUri); - _debug ("UserAgent: TO uri: %s", toUri.c_str()); + _debug ("UserAgent: TO uri for IP2IP call: %s", toUri.c_str()); // Building the local SDP offer call->getLocalSDP()->set_ip_address (addrSdp); @@ -1645,13 +1654,13 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) // Init TLS transport if enabled if(account->isTlsEnabled()) { - _debug("UserAgent: TLS enabled for IP to IP calls"); + _debug("UserAgent: TLS enabled for IP2IP calls"); int at = toUri.find("@"); int trns = toUri.find(";transport"); std::string remoteAddr = toUri.substr(at+1, trns-at-1); if(toUri.find("sips:") != 1) { - _debug("UserAgent: Error \"sips\" scheme required TLS call"); + _debug("UserAgent: Error \"sips\" scheme required for TLS call"); return false; } @@ -1665,91 +1674,90 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) account->setAccountTransport (_localUDPTransport); } - _debug ("UserAgent: new IP2IP local port %i", account->getLocalPort()); + _debug ("UserAgent: Local port %i for IP2IP call", account->getLocalPort()); - _debug ("UserAgent: new IP2IP local address in sdp %s", localAddress.c_str()); + _debug ("UserAgent: Local address in sdp %s for IP2IP call", localAddress.c_str()); // Create URI std::string fromUri = account->getFromUri(); - std::string address = findLocalAddressFromUri (toUri, account->getAccountTransport()); int port = findLocalPortFromUri (toUri, account->getAccountTransport()); std::stringstream ss; - std::string portStr; - ss << port; - ss >> portStr; - - std::string contactUri = account->getContactHeader (address, portStr); - - _debug ("UserAgent: FROM uri: %s TO uri: %s CONTACT uri: %s", - fromUri.c_str(), toUri.c_str(), contactUri.c_str()); - - pj_str_t pjFrom; - pj_cstr (&pjFrom, fromUri.c_str()); - - pj_str_t pjTo; - pj_cstr (&pjTo, toUri.c_str()); - - pj_str_t pjContact; - pj_cstr (&pjContact, contactUri.c_str()); + std::string portStr; + ss << port; + ss >> portStr; + + std::string contactUri = account->getContactHeader (address, portStr); - // Create the dialog (UAC) - // (Parameters are "strduped" inside this function) - status = pjsip_dlg_create_uac (pjsip_ua_instance(), &pjFrom, &pjContact, &pjTo, NULL, &dialog); - PJ_ASSERT_RETURN (status == PJ_SUCCESS, false); + _debug ("UserAgent: FROM uri: %s, TO uri: %s, CONTACT uri: %s", + fromUri.c_str(), toUri.c_str(), contactUri.c_str()); - // Create the invite session for this call - status = pjsip_inv_create_uac (dialog, call->getLocalSDP()->get_local_sdp_session(), 0, &inv); - PJ_ASSERT_RETURN (status == PJ_SUCCESS, false); + pj_str_t pjFrom; + pj_cstr (&pjFrom, fromUri.c_str()); - // Set the appropriate transport - pjsip_tpselector *tp; + pj_str_t pjTo; + pj_cstr (&pjTo, toUri.c_str()); - init_transport_selector (account->getAccountTransport(), &tp); + pj_str_t pjContact; + pj_cstr (&pjContact, contactUri.c_str()); - if(!account->getAccountTransport()) { - _error("UserAgent: Error: Transport is NULL in ip to ip call"); - } + // Create the dialog (UAC) + // (Parameters are "strduped" inside this function) + status = pjsip_dlg_create_uac (pjsip_ua_instance(), &pjFrom, &pjContact, &pjTo, NULL, &dialog); + PJ_ASSERT_RETURN (status == PJ_SUCCESS, false); + + // Create the invite session for this call + status = pjsip_inv_create_uac (dialog, call->getLocalSDP()->get_local_sdp_session(), 0, &inv); + PJ_ASSERT_RETURN (status == PJ_SUCCESS, false); + + // Set the appropriate transport + pjsip_tpselector *tp; - // set_transport methods increment transport's ref_count - status = pjsip_dlg_set_transport (dialog, tp); + init_transport_selector (account->getAccountTransport(), &tp); - // decrement transport's ref count - // pjsip_transport_dec_ref(account->getAccountTransport()); + if(!account->getAccountTransport()) { + _error("UserAgent: Error: Transport is NULL in IP2IP call"); + } - if (status != PJ_SUCCESS) { - _error ("UserAgent: Error: Failed to set the transport for an IP2IP call"); - return status; - } + // set_transport methods increment transport's ref_count + status = pjsip_dlg_set_transport (dialog, tp); - // Associate current call in the invite session - inv->mod_data[getModId() ] = call; + // decrement transport's ref count + // pjsip_transport_dec_ref(account->getAccountTransport()); - status = pjsip_inv_invite (inv, &tdata); + if (status != PJ_SUCCESS) { + _error ("UserAgent: Error: Failed to set the transport for an IP2IP call"); + return status; + } - PJ_ASSERT_RETURN (status == PJ_SUCCESS, false); + // Associate current call in the invite session + inv->mod_data[getModId() ] = call; - // Associate current invite session in the call - call->setInvSession (inv); + status = pjsip_inv_invite (inv, &tdata); + + PJ_ASSERT_RETURN (status == PJ_SUCCESS, false); + + // Associate current invite session in the call + call->setInvSession (inv); - status = pjsip_inv_send_msg (inv, tdata); + status = pjsip_inv_send_msg (inv, tdata); - if (status != PJ_SUCCESS) { - delete call; - call = 0; - return false; - } + if (status != PJ_SUCCESS) { + delete call; + call = 0; + return false; + } - call->setConnectionState (Call::Progressing); + call->setConnectionState (Call::Progressing); - call->setState (Call::Active); - addCall (call); + call->setState (Call::Active); + addCall (call); - return true; - } else - return false; + return true; + } else + return false; } @@ -3597,6 +3605,8 @@ mod_on_rx_request (pjsip_rx_data *rdata) if (Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_ENABLED) == "1") { + _debug("UserAgent: Set sip url hooks"); + std::string header_value; header_value = fetch_header_value (rdata->msg_info.msg, Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_FIELD));