diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp index 100308a7177b317cc5fffa9bdb24ebfb597b88e5..ca278d3caf25c4ef22b76eec77a8f58b9696539d 100644 --- a/sflphone-common/src/account.cpp +++ b/sflphone-common/src/account.cpp @@ -40,6 +40,8 @@ Account::Account (const AccountID& accountID, std::string type) : , _type (type) , _codecOrder () , _startupCodecStr("") + , _displayName("") + , _useragent("SFLphone") { setRegistrationState (Unregistered); } diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h index 5120bfd8297988b5294319dd0a9472cc8be35a09..4180918cbe347865e50471b706f99f23695317aa 100644 --- a/sflphone-common/src/account.h +++ b/sflphone-common/src/account.h @@ -143,6 +143,7 @@ const Conf::Key accountEnableKey("enable"); const Conf::Key mailboxKey("mailbox"); const Conf::Key codecsKey("codecs"); // 0/9/110/111/112/ +const Conf::Key displayNameKey("displayName"); #define find_in_map(X, Y) if((iter = map_cpy.find(X)) != map_cpy.end()) { Y = iter->second; } @@ -262,6 +263,12 @@ class Account : public Serializable{ void setActiveCodecs (const std::vector <std::string>& list); + inline std::string getDisplayName(void) { return _displayName; } + inline void setDisplayName(std::string name) { _displayName = name; } + + std::string getUseragent(void) { return _useragent; } + void setUseragent(std::string ua) { _useragent = ua; } + private: // copy constructor Account(const Account& rh); @@ -338,6 +345,11 @@ class Account : public Serializable{ */ std::string _startupCodecStr; + // Display Name that can be used in SIP URI. + std::string _displayName; + + std::string _useragent; + }; #endif diff --git a/sflphone-common/src/iax/iaxaccount.cpp b/sflphone-common/src/iax/iaxaccount.cpp index 42ca92abb162a6e1cde5e902998c4bd0c27c5e2d..5b75b8dd69f429c9b15b6222ace72ec34c25cd7e 100644 --- a/sflphone-common/src/iax/iaxaccount.cpp +++ b/sflphone-common/src/iax/iaxaccount.cpp @@ -49,16 +49,113 @@ IAXAccount::~IAXAccount() void IAXAccount::serialize(Conf::YamlEmitter *emitter) { - + _debug("IaxAccount: serialize %s", _accountID.c_str()); + + Conf::MappingNode accountmap(NULL); + + Conf::ScalarNode id(Account::_accountID); + Conf::ScalarNode username(Account::_username); + Conf::ScalarNode password(Account::_password); + Conf::ScalarNode alias(Account::_alias); + Conf::ScalarNode hostname(Account::_hostname); + Conf::ScalarNode enable(_enabled ? "true" : "false"); + Conf::ScalarNode type(Account::_type); + Conf::ScalarNode mailbox("97"); + + Conf::ScalarNode codecs(_startupCodecStr); + Conf::ScalarNode displayName(_displayName); + + accountmap.setKeyValue(aliasKey, &alias); + accountmap.setKeyValue(typeKey, &type); + accountmap.setKeyValue(idKey, &id); + accountmap.setKeyValue(usernameKey, &username); + accountmap.setKeyValue(passwordKey, &password); + accountmap.setKeyValue(hostnameKey, &hostname); + accountmap.setKeyValue(accountEnableKey, &enable); + accountmap.setKeyValue(mailboxKey, &mailbox); + + accountmap.setKeyValue(displayNameKey, &displayName); + accountmap.setKeyValue(codecsKey, &codecs); + + try{ + emitter->serializeAccount(&accountmap); + } + catch (Conf::YamlEmitterException &e) { + _error("ConfigTree: %s", e.what()); + } } void IAXAccount::unserialize(Conf::MappingNode *map) { - + Conf::ScalarNode *val; + + _debug("IaxAccount: Unserialize"); + + val = (Conf::ScalarNode *)(map->getValue(aliasKey)); + if(val) { _alias = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(typeKey)); + if(val) { _type = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(idKey)); + if(val) { _accountID = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(usernameKey)); + if(val) { _username = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(passwordKey)); + if(val) { _password = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(hostnameKey)); + if(val) { _hostname = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(accountEnableKey)); + if(val) { _enabled = (val->getValue().compare("true") == 0) ? true : false; val = NULL; } + // val = (Conf::ScalarNode *)(map->getValue(mailboxKey)); + + val = (Conf::ScalarNode *)(map->getValue(codecsKey)); + if(val) { _startupCodecStr = val->getValue(); val = NULL; } + val = (Conf::ScalarNode *)(map->getValue(displayNameKey)); + if(val) { _displayName = val->getValue(); val = NULL; } + } void IAXAccount::setAccountDetails(const std::map<std::string, std::string>& details) { + std::map<std::string, std::string> map_cpy; + std::map<std::string, std::string>::iterator iter; + + _debug("IaxAccount: Set account details: %s", _accountID.c_str()); + + // Work on a copy + map_cpy = details; + + std::string alias; + std::string type; + std::string hostname; + std::string username; + std::string password; + std::string mailbox; + std::string accountEnable; + + std::string ua_name; + + // Account setting common to SIP and IAX + find_in_map(CONFIG_ACCOUNT_ALIAS, alias) + find_in_map(CONFIG_ACCOUNT_TYPE, type) + find_in_map(HOSTNAME, hostname) + find_in_map(USERNAME, username) + find_in_map(PASSWORD, password) + find_in_map(CONFIG_ACCOUNT_MAILBOX, mailbox); + find_in_map(CONFIG_ACCOUNT_ENABLE, accountEnable); + + setAlias(alias); + setType(type); + setUsername(username); + setHostname(hostname); + setPassword(password); + setEnabled((accountEnable.compare("true") == 0) ? true : false); + + std::string displayName; + find_in_map(DISPLAY_NAME, displayName) + setDisplayName(displayName); + + find_in_map(USERAGENT, ua_name) + setUseragent(ua_name); } @@ -66,6 +163,31 @@ std::map<std::string, std::string> IAXAccount::getAccountDetails() { std::map<std::string, std::string> a; + _debug("IaxAccount: get account details %s", _accountID.c_str()); + + a.insert(std::pair<std::string, std::string>(ACCOUNT_ID, _accountID)); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ALIAS, getAlias())); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ENABLE, isEnabled() ? "true" : "false")); + a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_TYPE, getType())); + a.insert(std::pair<std::string, std::string>(HOSTNAME, getHostname())); + a.insert(std::pair<std::string, std::string>(USERNAME, getUsername())); + a.insert(std::pair<std::string, std::string>(PASSWORD, getPassword())); + + RegistrationState state = Unregistered; + std::string registrationStateCode; + std::string registrationStateDescription; + + state = getRegistrationState(); + int code = getRegistrationStateDetailed().first; + std::stringstream out; out << code; + registrationStateCode = out.str(); + registrationStateDescription = getRegistrationStateDetailed().second; + + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATUS, Manager::instance().mapStateNumberToString(state))); + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_CODE, registrationStateCode)); + a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_DESCRIPTION, registrationStateDescription)); + a.insert(std::pair<std::string, std::string>(USERAGENT, getUseragent())); + return a; } diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp index 498f56533830f50f566616f599c534ce5b1adbe2..c23cf1f45accd694ed8eb95caeb15f65073fcb80 100755 --- a/sflphone-common/src/sip/sipaccount.cpp +++ b/sflphone-common/src/sip/sipaccount.cpp @@ -97,7 +97,6 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _authenticationUsername ("") , _tlsSetting (NULL) , _dtmfType(OVERRTP) - , _displayName ("") , _tlsEnable("") , _tlsPortStr("") , _tlsCaListFile("") @@ -125,7 +124,6 @@ SIPAccount::SIPAccount (const AccountID& accountID) , _zrtpDisplaySasOnce(false) , _zrtpHelloHash(false) , _zrtpNotSuppWarning(false) - , _useragent("SFLphone") { _debug("Sip account constructor called"); @@ -399,6 +397,8 @@ void SIPAccount::setAccountDetails(const std::map<std::string, std::string>& det std::map<std::string, std::string> map_cpy; std::map<std::string, std::string>::iterator iter; + _debug("SipAccount: set account details %s", _accountID.c_str()); + // Work on a copy map_cpy = details; diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h index 30e0f1681a638a2c6d50c3296c033d12ab39cfd8..fb47d8812deac565fb689ada009518fee1b66b15 100755 --- a/sflphone-common/src/sip/sipaccount.h +++ b/sflphone-common/src/sip/sipaccount.h @@ -96,8 +96,6 @@ const Conf::Key stunServerKey("stunServer"); const Conf::Key credKey("credential"); const Conf::Key credentialCountKey("count"); -const Conf::Key displayNameKey("displayName"); - class SIPVoIPLink; /** @@ -448,9 +446,6 @@ class SIPAccount : public Account DtmfType getDtmfType(void) { return _dtmfType; } void setDtmfType(DtmfType type) { _dtmfType = type; } - std::string getDisplayName(void) { return _displayName; } - void setDisplayName(std::string name) { _displayName = name ;} - bool getSrtpEnable(void) { return _srtpEnabled; } void setSrtpEnable(bool enabl) { _srtpEnabled = enabl; } @@ -515,9 +510,6 @@ class SIPAccount : public Account std::string getTlsNegotiationTimeoutMsec(void) { return _tlsNegotiationTimeoutMsec; } void setTlsNegotiationTimeoutMsec(std::string timeout) { _tlsNegotiationTimeoutMsec = timeout; } - std::string getUseragent(void) { return _useragent; } - void setUseragent(std::string ua) { _useragent = ua; } - private: /* Maps a string description of the SSL method @@ -612,9 +604,6 @@ class SIPAccount : public Account pj_uint16_t _stunPort; DtmfType _dtmfType; - - // Display Name that can be used in SIP URI. - std::string _displayName; std::string _tlsEnable; std::string _tlsPortStr; @@ -655,8 +644,6 @@ class SIPAccount : public Account bool _zrtpHelloHash; bool _zrtpNotSuppWarning; - std::string _useragent; - };