diff --git a/sflphone-common/src/config/yamlnode.cpp b/sflphone-common/src/config/yamlnode.cpp index 1eece93f91f55a42861eb31925b7f31d9867dac9..508adfce63db5a6664c677ecdbb17368ce3a505d 100644 --- a/sflphone-common/src/config/yamlnode.cpp +++ b/sflphone-common/src/config/yamlnode.cpp @@ -154,10 +154,12 @@ void MappingNode::getValue (std::string key, std::string *v) void MappingNode::deleteChildNodes() { - Mapping::iterator it = map.begin(); + Mapping::iterator it; - while (it != map.end()) { + for (it = map.begin(); it != map.end(); ++it) { YamlNode *yamlNode = static_cast<YamlNode *> (it->second); + if (!yamlNode) + continue; switch (yamlNode->getType()) { case DOCUMENT: @@ -185,8 +187,6 @@ void MappingNode::deleteChildNodes() default: break; } - - it++; } } @@ -199,9 +199,8 @@ void SequenceNode::addNode (YamlNode *node) void SequenceNode::deleteChildNodes() { - Sequence::iterator it = seq.begin(); - - while (it != seq.end()) { + Sequence::iterator it; + for (it = seq.begin(); it != seq.end(); ++it) { YamlNode *yamlNode = static_cast<YamlNode *> (*it); switch (yamlNode->getType()) { @@ -211,27 +210,22 @@ void SequenceNode::deleteChildNodes() SequenceNode *sequence = static_cast<SequenceNode *> (yamlNode); sequence->deleteChildNodes(); delete sequence; - sequence = NULL; } break; case MAPPING: { MappingNode *mapping = static_cast<MappingNode *> (yamlNode); mapping->deleteChildNodes(); delete mapping; - mapping = NULL; } break; case SCALAR: { ScalarNode *scalar = static_cast<ScalarNode *> (yamlNode); delete scalar; - scalar = NULL; } break; default: break; } - - it++; } } diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp index bbf92c49ce113de2dcb92b5573b5066fac03c32c..b4e7efa275f28053a7451cbc7d21d57696f90b8a 100644 --- a/sflphone-common/src/config/yamlparser.cpp +++ b/sflphone-common/src/config/yamlparser.cpp @@ -45,26 +45,13 @@ YamlParser::YamlParser (const char *file) : filename (file) , doc (NULL) , eventIndex (0) , accountSequence (NULL) - , preferenceSequence (NULL) - , addressbookSequence (NULL) - , audioSequence (NULL) - , hooksSequence (NULL) - , voiplinkSequence (NULL) - , shortcutSequence (NULL) + , preferenceNode (NULL) + , addressbookNode (NULL) + , audioNode (NULL) + , hooksNode (NULL) + , voiplinkNode (NULL) + , shortcutNode (NULL) { - memset (buffer, 0, PARSER_BUFFERSIZE); - - open(); -} - -YamlParser::~YamlParser() -{ - close(); -} - -void YamlParser::open() throw(YamlParserException) -{ - fd = fopen (filename.c_str(), "rb"); if (!fd) @@ -76,7 +63,7 @@ void YamlParser::open() throw(YamlParserException) yaml_parser_set_input_file (&parser, fd); } -void YamlParser::close() throw(YamlParserException) +YamlParser::~YamlParser() { if (!fd) throw YamlParserException ("File descriptor not valid"); @@ -486,46 +473,17 @@ void YamlParser::constructNativeData() throw(YamlParserException) } -void YamlParser::mainNativeDataMapping (MappingNode *map) throw(YamlParserException) +void YamlParser::mainNativeDataMapping (MappingNode *map) { - - try { - Mapping::iterator iter = map->getMapping()->begin(); - - std::string accounts ("accounts"); - std::string addressbook ("addressbook"); - std::string audio ("audio"); - std::string hooks ("hooks"); - std::string preferences ("preferences"); - std::string voiplink ("voipPreferences"); - std::string shortcuts ("shortcuts"); - - while (iter != map->getMapping()->end()) { - - if (accounts.compare (iter->first) == 0) { - accountSequence = (SequenceNode *) (iter->second); - } else if (addressbook.compare (iter->first) == 0) { - addressbookSequence = (SequenceNode *) (iter->second); - } else if (audio.compare (iter->first) == 0) { - audioSequence = (SequenceNode *) (iter->second); - } else if (hooks.compare (iter->first) == 0) { - hooksSequence = (SequenceNode *) (iter->second); - } else if (preferences.compare (iter->first) == 0) { - preferenceSequence = (SequenceNode *) (iter->second); - } else if (voiplink.compare (iter->first) == 0) { - voiplinkSequence = (SequenceNode *) (iter->second); - } else if (shortcuts.compare (iter->first) == 0) { - shortcutSequence = (SequenceNode *) (iter->second); - } else { - throw YamlParserException ("Unknown map key in configuration"); - } - - iter++; - } - } - catch(YamlParserException &e) { - throw; - } + Mapping *mapping = map->getMapping(); + + accountSequence = (SequenceNode*)(*mapping)["accounts"]; + addressbookNode = (MappingNode*)(*mapping)["addressbook"]; + audioNode = (MappingNode*)(*mapping)["audio"]; + hooksNode = (MappingNode*)(*mapping)["hooks"]; + preferenceNode = (MappingNode*)(*mapping)["preferences"]; + voiplinkNode = (MappingNode*)(*mapping)["voipPreferences"]; + shortcutNode = (MappingNode*)(*mapping)["shortcuts"]; } } diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h index 2061d7e99f3f4fd4e91c392161c0e8797ee9d7dc..b4ebf0f9014d4d6fa9105e0ab41d3673e2ef841c 100644 --- a/sflphone-common/src/config/yamlparser.h +++ b/sflphone-common/src/config/yamlparser.h @@ -69,10 +69,6 @@ class YamlParser ~YamlParser(); - void open() throw(YamlParserException); - - void close() throw(YamlParserException); - void serializeEvents() throw(YamlParserException); YamlDocument *composeEvents() throw(YamlParserException); @@ -83,28 +79,28 @@ class YamlParser return accountSequence; }; - SequenceNode *getPreferenceSequence (void) { - return preferenceSequence; + MappingNode *getPreferenceNode (void) { + return preferenceNode; } - SequenceNode *getAddressbookSequence (void) { - return addressbookSequence; + MappingNode *getAddressbookNode (void) { + return addressbookNode; } - SequenceNode *getAudioSequence (void) { - return audioSequence; + MappingNode *getAudioNode (void) { + return audioNode; } - SequenceNode *getHookSequence (void) { - return hooksSequence; + MappingNode *getHookNode (void) { + return hooksNode; } - SequenceNode *getVoipPreferenceSequence (void) { - return voiplinkSequence; + MappingNode *getVoipPreferenceNode (void) { + return voiplinkNode; } - SequenceNode *getShortcutSequence (void) { - return shortcutSequence; + MappingNode *getShortcutNode (void) { + return shortcutNode; } private: @@ -124,7 +120,7 @@ class YamlParser void processMapping (YamlNode *topNode) throw(YamlParserException); - void mainNativeDataMapping (MappingNode *map) throw(YamlParserException); + void mainNativeDataMapping (MappingNode *map); /** * Configuration file name @@ -146,11 +142,6 @@ class YamlParser */ YamlEventVector events; - /** - * - */ - unsigned char buffer[PARSER_BUFFERSIZE]; - /** * Number of event actually parsed */ @@ -162,18 +153,17 @@ class YamlParser SequenceNode *accountSequence; - SequenceNode *preferenceSequence; - - SequenceNode *addressbookSequence; + MappingNode *preferenceNode; - SequenceNode *audioSequence; + MappingNode *addressbookNode; - SequenceNode *hooksSequence; + MappingNode *audioNode; - SequenceNode *voiplinkSequence; + MappingNode *hooksNode; - SequenceNode *shortcutSequence; + MappingNode *voiplinkNode; + MappingNode *shortcutNode; }; } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index fca0282250e4c46d6970f70b10a005d0bc5a07c9..ff03b7ff5f2efba0aab89886833a0a37bd4635b1 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -4249,7 +4249,6 @@ void ManagerImpl::loadIptoipProfile() short ManagerImpl::loadAccountMap() { - _debug ("Manager: Load account map"); // Conf::YamlParser *parser; @@ -4261,23 +4260,18 @@ short ManagerImpl::loadAccountMap() } // build preferences - preferences.unserialize ( (Conf::MappingNode *) (parser->getPreferenceSequence())); - voipPreferences.unserialize ( (Conf::MappingNode *) (parser->getVoipPreferenceSequence())); - addressbookPreference.unserialize ( (Conf::MappingNode *) (parser->getAddressbookSequence())); - hookPreference.unserialize ( (Conf::MappingNode *) (parser->getHookSequence())); - audioPreference.unserialize ( (Conf::MappingNode *) (parser->getAudioSequence())); - shortcutPreferences.unserialize ( (Conf::MappingNode *) (parser->getShortcutSequence())); + preferences.unserialize (parser->getPreferenceNode()); + voipPreferences.unserialize (parser->getVoipPreferenceNode()); + addressbookPreference.unserialize (parser->getAddressbookNode()); + hookPreference.unserialize (parser->getHookNode()); + audioPreference.unserialize (parser->getAudioNode()); + shortcutPreferences.unserialize (parser->getShortcutNode()); Conf::SequenceNode *seq = parser->getAccountSequence(); // Each element in sequence is a new account to create - Conf::Sequence::iterator iterSeq = seq->getSequence()->begin(); - - std::string accTypeKey ("type"); - std::string accID ("id"); - std::string alias ("alias"); - - while (iterSeq != seq->getSequence()->end()) { + Conf::Sequence::iterator iterSeq; + for (iterSeq = seq->getSequence()->begin(); iterSeq != seq->getSequence()->end(); ++iterSeq) { // Pointer to the account and account preferences map Account *tmpAccount = NULL; @@ -4285,19 +4279,18 @@ short ManagerImpl::loadAccountMap() // Search for account types (IAX/IP2IP) std::string accountType = "SIP"; // Assume type is SIP if not specified - map->getValue (accTypeKey, &accountType); + map->getValue ("type", &accountType); // search for account id std::string accountid; - map->getValue (accID, &accountid); + map->getValue ("id", &accountid); // search for alias (to get rid of the "ghost" account) std::string accountAlias; - map->getValue (alias, &accountAlias); + map->getValue ("alias", &accountAlias); // do not insert in account map if id or alias is empty if (accountid.empty() || accountAlias.empty()) { - iterSeq++; continue; } @@ -4323,8 +4316,6 @@ short ManagerImpl::loadAccountMap() tmpAccount->setVoIPLink(); nbAccount++; } - - iterSeq++; } try { diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp index afcda7ab7a67f267243b9db303e9177aacdb4251..35bb3a8ae57abe3bc5c23244dcfb3bdda7826483 100644 --- a/sflphone-common/src/preferences.cpp +++ b/sflphone-common/src/preferences.cpp @@ -31,6 +31,7 @@ #include "preferences.h" #include <sstream> #include "global.h" +#include <cassert> const char * const Preferences::DFT_ZONE = "North America"; @@ -409,13 +410,7 @@ void AudioPreference::serialize (Conf::YamlEmitter *emitter) void AudioPreference::unserialize (Conf::MappingNode *map) { - if (map == NULL) { - _error ("AudioPreference: Error: Preference map is NULL"); - return; - } - - Conf::MappingNode *alsamap = NULL; - Conf::MappingNode *pulsemap = NULL; + assert(map); map->getValue (recordpathKey, &_recordpath); map->getValue (alwaysRecordingKey, &_alwaysRecording); @@ -424,7 +419,7 @@ void AudioPreference::unserialize (Conf::MappingNode *map) map->getValue (noiseReduceKey, &_noisereduce); map->getValue(echoCancelKey, &_echocancel); - alsamap = (Conf::MappingNode *) (map->getValue ("alsa")); + Conf::MappingNode *alsamap = (Conf::MappingNode *) (map->getValue ("alsa")); if (alsamap) { alsamap->getValue (cardinKey, &_cardin); alsamap->getValue (cardoutKey, &_cardout); @@ -434,8 +429,7 @@ void AudioPreference::unserialize (Conf::MappingNode *map) alsamap->getValue (pluginKey, &_plugin); } - - pulsemap = (Conf::MappingNode *) (map->getValue ("pulse")); + Conf::MappingNode *pulsemap = (Conf::MappingNode *) (map->getValue ("pulse")); if (pulsemap) { pulsemap->getValue (devicePlaybackKey, &_devicePlayback); pulsemap->getValue (deviceRecordKey, &_deviceRecord);