diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index ecb67b07c2a06caa4fcf4deb72ec9402147d6af1..97c0bb1344cccdf21f5debb94772315db0d58494 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -271,12 +271,13 @@ static GtkWidget* create_basic_tab (account_t **a) { int row = 0; + DEBUG("Config: Create basic account tab"); + // Load from SIP/IAX/Unknown ? if(currentAccount) { curAccountID = currentAccount->accountID; curAccountType = g_hash_table_lookup(currentAccount->properties, ACCOUNT_TYPE); - DEBUG("Config: Current accountType %s", curAccountType); curAccountEnabled = g_hash_table_lookup(currentAccount->properties, ACCOUNT_ENABLED); curAlias = g_hash_table_lookup(currentAccount->properties, ACCOUNT_ALIAS); curHostname = g_hash_table_lookup(currentAccount->properties, ACCOUNT_HOSTNAME); diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index 5eacb2d2e88f41fc951a6cf4d788a5cb942a81b7..1912b82f3faa4b27d28b762f6d858def5a8f7c7e 100755 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -72,6 +72,8 @@ #define MD5_APPEND(pms,buf,len) pj_md5_update(pms, (const pj_uint8_t*)buf, len) +SIPAccount defaultAccount("default"); + ManagerImpl::ManagerImpl (void) : _hasTriedToRegister(false), _config(), _currentCallId2(), _currentCallMutex(), _codecBuilder(NULL), _audiodriver(NULL), @@ -3271,10 +3273,9 @@ std::map<std::string, std::string> ManagerImpl::getAccountDetails ( Account * account; if(!(account = _accountMap[accountID])) { - _warn("Manager: Cannot getAccountDetails on a non-existing accountID %s.", accountID.c_str()); - // return an empty map - std::map<std::string, std::string> a; - return a; + _debug("Manager: Get account details on a non-existing accountID %s. Returning default", accountID.c_str()); + // return a default map + return defaultAccount.getAccountDetails(); } else return account->getAccountDetails(); diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 5b7ef192c22450dc9b2e3ce586fa190b983191dc..d2cb0e0178895935e9fab7d57bb97c9aa3e77b20 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -84,6 +84,7 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _regc (NULL) , _bRegister (false) , _registrationExpire ("") + , _interface("default") , _publishedSameasLocal (true) , _publishedIpAddress ("") , _localPort (atoi (DEFAULT_SIP_PORT)) @@ -115,7 +116,6 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _tlsEnabled(false) , _stunEnabled(false) // , _routeSet("") - , _authenticationUsename("") // , _tlsListenerPort("5061") , _srtpEnabled(false) , _srtpKeyExchange("") @@ -128,6 +128,10 @@ SIPAccount::SIPAccount (const AccountID& accountID) _debug("Sip account constructor called"); + _stunServerName.ptr = NULL; + _stunServerName.slen = 0; + _stunPort = 0; + // IP2IP settings must be loaded before singleton instanciation, cannot call it here... // _link = SIPVoIPLink::instance (""); @@ -178,7 +182,7 @@ void SIPAccount::serialize(Conf::YamlEmitter *emitter) { Conf::ScalarNode sameasLocal(_publishedSameasLocal ? "true" : "false"); Conf::ScalarNode resolveOnce(_resolveOnce ? "true" : "false"); Conf::ScalarNode codecs(_startupCodecStr); - Conf::ScalarNode stunServer(std::string(_stunServerName.ptr, _stunServerName.slen)); + Conf::ScalarNode stunServer(_stunServer); Conf::ScalarNode stunEnabled(_stunEnabled ? "true" : "false"); Conf::ScalarNode displayName(_displayName); Conf::ScalarNode dtmfType(_dtmfType==0 ? "overrtp" : "sipinfo"); @@ -489,9 +493,8 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det setPublishedAddress(publishedAddress); setLocalPort(atoi(localPort.data())); setPublishedPort(atoi(publishedPort.data())); - // sipaccount->setStunServerName - // sipaccount->setStunServer(); - // sipaccount->setStunEnable(); + setStunServer(stunServer); + setStunEnabled((stunEnable == "true")); setResolveOnce((resolveOnce.compare("true")==0) ? true : false); setRegistrationExpire(registrationExpire); @@ -580,12 +583,11 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det std::map<std::string, std::string> SIPAccount::getAccountDetails() { - _debug("SipAccount: get account details %s", _accountID.c_str()); + _debug("SipAccount: get account details %s", _accountID.c_str()); std::map<std::string, std::string> a; a.insert(std::pair<std::string, std::string>(ACCOUNT_ID, _accountID)); - // The IP profile does not allow to set an alias (_accountID == IP2IP_PROFILE) ? a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ALIAS, IP2IP_PROFILE)) : @@ -621,6 +623,8 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails() a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_CODE, registrationStateCode)); a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_DESCRIPTION, registrationStateDescription)); + _debug("OK for default"); + // Add sip specific details if(getType() == "SIP") { @@ -639,7 +643,7 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails() std::stringstream publishedport; publishedport << getPublishedPort(); a.insert(std::pair<std::string, std::string>(PUBLISHED_PORT, publishedport.str())); a.insert(std::pair<std::string, std::string>(STUN_ENABLE, isStunEnabled() ? "true" : "false")); - a.insert(std::pair<std::string, std::string>(STUN_SERVER, std::string(getStunServerName().ptr, getStunServerName().slen))); + a.insert(std::pair<std::string, std::string>(STUN_SERVER, getStunServer())); a.insert(std::pair<std::string, std::string>(ACCOUNT_DTMF_TYPE, (getDtmfType() == 0) ? "0" : "1")); a.insert(std::pair<std::string, std::string>(SRTP_KEY_EXCHANGE, getSrtpKeyExchange())); @@ -651,6 +655,8 @@ std::map<std::string, std::string> SIPAccount::getAccountDetails() a.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH, getZrtpHelloHash() ? "true" : "false")); a.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING, getZrtpNotSuppWarning() ? "true" : "false")); + _debug("OK for default again"); + // TLS listener is unique and parameters are modified through IP2IP_PROFILE std::stringstream tlslistenerport; tlslistenerport << getTlsListenerPort(); @@ -784,17 +790,14 @@ int SIPAccount::registerVoIPLink() initCredential(); // Init TLS settings if the user wants to use TLS - bool tlsEnabled = false; - - if (tlsEnabled) { + if (_tlsEnabled) { _transportType = PJSIP_TRANSPORT_TLS; initTlsConfiguration(); } // Init STUN settings for this account if the user selected it - bool stunEnabled = _stunEnabled; - if (stunEnabled) { + if (_stunEnabled) { _transportType = PJSIP_TRANSPORT_START_OTHER; initStunConfiguration (); } diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index fb47d8812deac565fb689ada009518fee1b66b15..cf5a81c491c648e4677ab42b423579cd9315e747 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -289,8 +289,10 @@ class SIPAccount : public Account * file, that can be used directly by PJSIP to initialize * an alternate UDP transport. */ - inline pj_str_t getStunServerName(void) { return _stunServerName; } - inline void setStunServerName (pj_str_t srv) { _stunServerName = srv; } + inline std::string getStunServer(void) { return _stunServer; } + inline void setStunServer (std::string srv) { _stunServer = srv; } + + inline pj_str_t getStunServerName(void) { return _stunServerName; } /** * @return pj_uint8_t structure, filled from the configuration @@ -597,7 +599,7 @@ class SIPAccount : public Account // a sip transport. pjsip_tls_setting * _tlsSetting; - // The STUN server name, if applicable + // The STUN server name, if applicable for internal use only pj_str_t _stunServerName; // The STUN server port, if applicable @@ -628,8 +630,6 @@ class SIPAccount : public Account // std::string _routeset; // std::string _realm; - std::string _authenticationUsename; - // std::string _tlsListenerPort; // std::string _routeSet; // std::string _dtmfType;