diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp index 0984c2299f56aa6934e4768d10802362e95c134c..a1b4268ba8be651360cc153b4aaa661b4d95f850 100644 --- a/sflphone-common/src/dbus/configurationmanager.cpp +++ b/sflphone-common/src/dbus/configurationmanager.cpp @@ -35,6 +35,7 @@ #include <sstream> #include "../manager.h" #include "sip/sipvoiplink.h" +#include "sip/sipaccount.h" const char* ConfigurationManager::SERVER_PATH = "/org/sflphone/SFLphone/ConfigurationManager"; @@ -59,8 +60,9 @@ std::map<std::string, std::string> ConfigurationManager::getTlsSettingsDefault( void) { std::map<std::string, std::string> tlsSettingsDefault; + tlsSettingsDefault.insert(std::pair<std::string, std::string>( - TLS_LISTENER_PORT, DEFAULT_SIP_TLS_PORT)); + TLS_LISTENER_PORT, DEFAULT_SIP_TLS_PORT)); tlsSettingsDefault.insert(std::pair<std::string, std::string>( TLS_CA_LIST_FILE, "")); tlsSettingsDefault.insert(std::pair<std::string, std::string>( @@ -93,34 +95,24 @@ std::map<std::string, std::string> ConfigurationManager::getIp2IpDetails(void) { std::map<std::string, std::string> ip2ipAccountDetails; - ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ACCOUNT_ID, - IP2IP_PROFILE)); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - SRTP_KEY_EXCHANGE, Manager::instance().getConfigString( - IP2IP_PROFILE, SRTP_KEY_EXCHANGE))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>(SRTP_ENABLE, - Manager::instance().getConfigString(IP2IP_PROFILE, SRTP_ENABLE))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - SRTP_RTP_FALLBACK, Manager::instance().getConfigString( - IP2IP_PROFILE, SRTP_RTP_FALLBACK))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - ZRTP_DISPLAY_SAS, Manager::instance().getConfigString( - IP2IP_PROFILE, ZRTP_DISPLAY_SAS))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - ZRTP_HELLO_HASH, Manager::instance().getConfigString(IP2IP_PROFILE, - ZRTP_HELLO_HASH))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - ZRTP_NOT_SUPP_WARNING, Manager::instance().getConfigString( - IP2IP_PROFILE, ZRTP_NOT_SUPP_WARNING))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - ZRTP_DISPLAY_SAS_ONCE, Manager::instance().getConfigString( - IP2IP_PROFILE, ZRTP_DISPLAY_SAS_ONCE))); - - ip2ipAccountDetails.insert(std::pair<std::string, std::string>( - LOCAL_INTERFACE, Manager::instance().getConfigString(IP2IP_PROFILE, - LOCAL_INTERFACE))); - ip2ipAccountDetails.insert(std::pair<std::string, std::string>(LOCAL_PORT, - Manager::instance().getConfigString(IP2IP_PROFILE, LOCAL_PORT))); + SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(IP2IP_PROFILE); + + if(!sipaccount) { + _error("ConfigurationManager: could not find account"); + return ip2ipAccountDetails; + } + + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ACCOUNT_ID, IP2IP_PROFILE)); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(SRTP_KEY_EXCHANGE, sipaccount->getSrtpKeyExchange())); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(SRTP_ENABLE, sipaccount->getSrtpEnable() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(SRTP_RTP_FALLBACK, sipaccount->getSrtpFallback() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS, sipaccount->getZrtpDisplaySas() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH, sipaccount->getZrtpHelloHash() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING, sipaccount->getZrtpNotSuppWarning() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS_ONCE, sipaccount->getZrtpDiaplaySasOnce() ? "true" : "false")); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(LOCAL_INTERFACE, sipaccount->getLocalInterface())); + std::stringstream portstr; portstr << sipaccount->getLocalPort(); + ip2ipAccountDetails.insert(std::pair<std::string, std::string>(LOCAL_PORT, portstr.str())); std::map<std::string, std::string> tlsSettings; tlsSettings = getTlsSettings(IP2IP_PROFILE); @@ -136,66 +128,39 @@ void ConfigurationManager::setIp2IpDetails(const std::map<std::string, std::map<std::string, std::string> map_cpy = details; std::map<std::string, std::string>::iterator it; - it = map_cpy.find(LOCAL_INTERFACE); + SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(IP2IP_PROFILE); - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, LOCAL_INTERFACE, - it->second); + if(!sipaccount) { + _error("ConfigurationManager: could not find account"); } + - it = map_cpy.find(LOCAL_PORT); + it = map_cpy.find(LOCAL_INTERFACE); + if (it != details.end()) sipaccount->setLocalInterface(it->second); - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, LOCAL_PORT, it->second); - } + it = map_cpy.find(LOCAL_PORT); + if (it != details.end()) sipaccount->setLocalPort(atoi(it->second.data())); it = map_cpy.find(SRTP_ENABLE); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, SRTP_ENABLE, it->second); - } + if (it != details.end()) sipaccount->setSrtpEnable((it->second == "true")); it = map_cpy.find(SRTP_RTP_FALLBACK); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, SRTP_RTP_FALLBACK, - it->second); - } + if (it != details.end()) sipaccount->setSrtpFallback((it->second == "true")); it = map_cpy.find(SRTP_KEY_EXCHANGE); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, SRTP_KEY_EXCHANGE, - it->second); - } + if (it != details.end()) sipaccount->setSrtpKeyExchange(it->second); it = map_cpy.find(ZRTP_DISPLAY_SAS); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_DISPLAY_SAS, - it->second); - } + if (it != details.end()) sipaccount->setZrtpDisplaySas((it->second == "true")); it = map_cpy.find(ZRTP_NOT_SUPP_WARNING); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_NOT_SUPP_WARNING, - it->second); - } + if (it != details.end()) sipaccount->setZrtpNotSuppWarning((it->second == "true")); it = map_cpy.find(ZRTP_HELLO_HASH); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_HELLO_HASH, - it->second); - } + if (it != details.end()) sipaccount->setZrtpHelloHash((it->second == "true")); it = map_cpy.find(ZRTP_DISPLAY_SAS_ONCE); - - if (it != details.end()) { - Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_DISPLAY_SAS_ONCE, - it->second); - } + if (it != details.end()) sipaccount->setZrtpDiaplaySasOnce((it->second == "true")); setTlsSettings(IP2IP_PROFILE, details); @@ -214,129 +179,81 @@ std::map<std::string, std::string> ConfigurationManager::getTlsSettings( std::map<std::string, std::string> tlsSettings; - // SIPAccount *sipaccount - - tlsSettings.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT, - Manager::instance().getConfigString(section, TLS_LISTENER_PORT))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_ENABLE, - Manager::instance().getConfigString(section, TLS_ENABLE))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_CA_LIST_FILE, - Manager::instance().getConfigString(section, TLS_CA_LIST_FILE))); - tlsSettings.insert(std::pair<std::string, std::string>( - TLS_CERTIFICATE_FILE, Manager::instance().getConfigString(section, - TLS_CERTIFICATE_FILE))); - tlsSettings.insert(std::pair<std::string, std::string>( - TLS_PRIVATE_KEY_FILE, Manager::instance().getConfigString(section, - TLS_PRIVATE_KEY_FILE))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_PASSWORD, - Manager::instance().getConfigString(section, TLS_PASSWORD))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_METHOD, - Manager::instance().getConfigString(section, TLS_METHOD))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_CIPHERS, - Manager::instance().getConfigString(section, TLS_CIPHERS))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_SERVER_NAME, - Manager::instance().getConfigString(section, TLS_SERVER_NAME))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_VERIFY_SERVER, - Manager::instance().getConfigString(section, TLS_VERIFY_SERVER))); - tlsSettings.insert(std::pair<std::string, std::string>(TLS_VERIFY_CLIENT, - Manager::instance().getConfigString(section, TLS_VERIFY_CLIENT))); - tlsSettings.insert(std::pair<std::string, std::string>( - TLS_REQUIRE_CLIENT_CERTIFICATE, - Manager::instance().getConfigString(section, - TLS_REQUIRE_CLIENT_CERTIFICATE))); - tlsSettings.insert(std::pair<std::string, std::string>( - TLS_NEGOTIATION_TIMEOUT_SEC, Manager::instance().getConfigString( - section, TLS_NEGOTIATION_TIMEOUT_SEC))); - tlsSettings.insert(std::pair<std::string, std::string>( - TLS_NEGOTIATION_TIMEOUT_MSEC, Manager::instance().getConfigString( - section, TLS_NEGOTIATION_TIMEOUT_MSEC))); + SIPAccount *sipaccount = (SIPAccount *)Manager::instance().getAccount(IP2IP_PROFILE); + + if(!sipaccount) + return tlsSettings; + + std::stringstream portstr; portstr << sipaccount->getTlsListenerPort(); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT, portstr.str())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_ENABLE, sipaccount->getTlsEnable())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_CA_LIST_FILE, sipaccount->getTlsCaListFile())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_CERTIFICATE_FILE, sipaccount->getTlsCertificateFile())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_PRIVATE_KEY_FILE, sipaccount->getTlsPrivateKeyFile())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_PASSWORD, sipaccount->getTlsPassword())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_METHOD, sipaccount->getTlsMethod())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_CIPHERS, sipaccount->getTlsCiphers())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_SERVER_NAME, sipaccount->getTlsServerName())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_VERIFY_SERVER, sipaccount->getTlsVerifyServer() ? "true" : "false")); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_VERIFY_CLIENT, sipaccount->getTlsVerifyClient() ? "true" : "false")); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_REQUIRE_CLIENT_CERTIFICATE, sipaccount->getTlsRequireClientCertificate() ? "true" : "false")); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_SEC, sipaccount->getTlsNegotiationTimeoutSec())); + tlsSettings.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_MSEC, sipaccount->getTlsNegotiationTimeoutMsec())); + return tlsSettings; } void ConfigurationManager::setTlsSettings(const std::string& section, const std::map<std::string, std::string>& details) { + std::map<std::string, std::string> map_cpy = details; std::map<std::string, std::string>::iterator it; - it = map_cpy.find(TLS_LISTENER_PORT); - if (it != details.end()) { - Manager::instance().setConfig(section, TLS_LISTENER_PORT, it->second); + SIPAccount * sipaccount = (SIPAccount *)Manager::instance().getAccount(IP2IP_PROFILE); + + if(!sipaccount) { + _debug("ConfigurationManager: Error: No valid account in set TLS settings"); + return; } - it = map_cpy.find(TLS_ENABLE); + it = map_cpy.find(TLS_LISTENER_PORT); + if (it != details.end()) sipaccount->setTlsListenerPort(atoi(it->second.data())); - if (it != details.end()) { - Manager::instance().setConfig(section, TLS_ENABLE, it->second); - } + it = map_cpy.find(TLS_ENABLE); + if (it != details.end()) sipaccount->setTlsEnable(it->second); it = map_cpy.find(TLS_CA_LIST_FILE); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_CA_LIST_FILE, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsCaListFile(it->second); it = map_cpy.find(TLS_CERTIFICATE_FILE); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_CERTIFICATE_FILE, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsCertificateFile(it->second); it = map_cpy.find(TLS_PRIVATE_KEY_FILE); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_PRIVATE_KEY_FILE, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsPrivateKeyFile(it->second); it = map_cpy.find(TLS_PASSWORD); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_PASSWORD, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsPassword(it->second); it = map_cpy.find(TLS_METHOD); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_METHOD, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsMethod(it->second); it = map_cpy.find(TLS_CIPHERS); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_CIPHERS, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsCiphers(it->second); it = map_cpy.find(TLS_SERVER_NAME); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_SERVER_NAME, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsServerName(it->second); it = map_cpy.find(TLS_VERIFY_CLIENT); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_VERIFY_CLIENT, it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsVerifyClient((it->second == "true") ? true : false); it = map_cpy.find(TLS_REQUIRE_CLIENT_CERTIFICATE); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_REQUIRE_CLIENT_CERTIFICATE, - it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsRequireClientCertificate((it->second == "true") ? true : false); it = map_cpy.find(TLS_NEGOTIATION_TIMEOUT_SEC); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_NEGOTIATION_TIMEOUT_SEC, - it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsNegotiationTimeoutSec(it->second); it = map_cpy.find(TLS_NEGOTIATION_TIMEOUT_MSEC); - - if (it != map_cpy.end()) { - Manager::instance().setConfig(section, TLS_NEGOTIATION_TIMEOUT_MSEC, - it->second); - } + if (it != map_cpy.end()) sipaccount->setTlsNegotiationTimeoutMsec(it->second); Manager::instance().saveConfig();