diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp index 3cb9e84d86a0a97d1fd80d1981ec7524fd76c024..1464d8ae5996e0947cd0ccb934ba6bc6fe3eafa5 100644 --- a/daemon/src/managerimpl.cpp +++ b/daemon/src/managerimpl.cpp @@ -2565,7 +2565,10 @@ namespace { bool isIP2IP(const Conf::YamlNode *node) { std::string id; - dynamic_cast<const Conf::MappingNode *>(node)->getValue("id", &id); + const Conf::MappingNode *m = dynamic_cast<const Conf::MappingNode *>(node); + if (!m) + return false; + m->getValue("id", &id); return id == "IP2IP"; } @@ -2627,7 +2630,8 @@ void ManagerImpl::loadAccountMap(Conf::YamlParser &parser) Sequence::const_iterator ip2ip = std::find_if(seq->begin(), seq->end(), isIP2IP); if (ip2ip != seq->end()) { MappingNode *node = dynamic_cast<MappingNode*>(*ip2ip); - accountMap_[SIPAccount::IP2IP_PROFILE]->unserialize(node); + if (node) + accountMap_[SIPAccount::IP2IP_PROFILE]->unserialize(node); } // Initialize default UDP transport according to diff --git a/daemon/src/sip/sipaccount.cpp b/daemon/src/sip/sipaccount.cpp index 66cfcfc64d01b12240a4a029ce25c4a6d913511a..33a6a6301bdd7d7fef05973ee19ffe062fd6313c 100644 --- a/daemon/src/sip/sipaccount.cpp +++ b/daemon/src/sip/sipaccount.cpp @@ -241,22 +241,17 @@ void SIPAccount::serialize(Conf::YamlEmitter &emitter) Sequence::iterator seqit; for (seqit = seq->begin(); seqit != seq->end(); ++seqit) { - MappingNode *node = (MappingNode*)*seqit; + MappingNode *node = static_cast<MappingNode*>(*seqit); delete node->getValue(CONFIG_ACCOUNT_USERNAME); delete node->getValue(CONFIG_ACCOUNT_PASSWORD); delete node->getValue(CONFIG_ACCOUNT_REALM); delete node; } - - } void SIPAccount::unserialize(const Conf::MappingNode &map) { using namespace Conf; - MappingNode *srtpMap; - MappingNode *tlsMap; - MappingNode *zrtpMap; map.getValue(ALIAS_KEY, &alias_); map.getValue(TYPE_KEY, &type_); @@ -272,7 +267,7 @@ void SIPAccount::unserialize(const Conf::MappingNode &map) map.getValue(RINGTONE_ENABLED_KEY, &ringtoneEnabled_); map.getValue(Preferences::REGISTRATION_EXPIRE_KEY, ®istrationExpire_); map.getValue(INTERFACE_KEY, &interface_); - int port; + int port = DEFAULT_SIP_PORT; map.getValue(PORT_KEY, &port); localPort_ = port; map.getValue(PUBLISH_ADDR_KEY, &publishedIpAddress_); @@ -305,12 +300,12 @@ void SIPAccount::unserialize(const Conf::MappingNode &map) * the configuration file. */ if (credNode && credNode->getType() == SEQUENCE) { - SequenceNode *credSeq = (SequenceNode *) credNode; + SequenceNode *credSeq = static_cast<SequenceNode *>(credNode); Sequence::iterator it; Sequence *seq = credSeq->getSequence(); for (it = seq->begin(); it != seq->end(); ++it) { - MappingNode *cred = (MappingNode *)(*it); + MappingNode *cred = static_cast<MappingNode *>(*it); std::string user; std::string pass; std::string realm; @@ -340,7 +335,7 @@ void SIPAccount::unserialize(const Conf::MappingNode &map) setCredentials(creds); // get srtp submap - srtpMap = (MappingNode *)(map.getValue(SRTP_KEY)); + MappingNode *srtpMap = static_cast<MappingNode *>(map.getValue(SRTP_KEY)); if (srtpMap) { srtpMap->getValue(SRTP_ENABLE_KEY, &srtpEnabled_); @@ -349,7 +344,7 @@ void SIPAccount::unserialize(const Conf::MappingNode &map) } // get zrtp submap - zrtpMap = (MappingNode *)(map.getValue(ZRTP_KEY)); + MappingNode *zrtpMap = static_cast<MappingNode *>(map.getValue(ZRTP_KEY)); if (zrtpMap) { zrtpMap->getValue(DISPLAY_SAS_KEY, &zrtpDisplaySas_); @@ -359,7 +354,7 @@ void SIPAccount::unserialize(const Conf::MappingNode &map) } // get tls submap - tlsMap = (MappingNode *)(map.getValue(TLS_KEY)); + MappingNode *tlsMap = static_cast<MappingNode *>(map.getValue(TLS_KEY)); if (tlsMap) { tlsMap->getValue(TLS_ENABLE_KEY, &tlsEnable_);