void parsePeers (const char *pszPeerAddresses, StringHashset &addresses) { StringTokenizer tokenizer (pszPeerAddresses, ';', ';'); const char *pszRemoteAddress; while ((pszRemoteAddress = tokenizer.getNextToken()) != NULL) { addresses.put (pszRemoteAddress); } }
int MetadataConfigurationImpl::addCustomMetadata (TiXmlElement *pRoot) { const char *pszMethodName = "MetadataConfiguration::addCustomMetadata (1)"; _ui16MetadataFieldsNumber = _usMetadataFixedFieldsNumber; TiXmlElement *pXmlField = pRoot->FirstChildElement (XML_FIELD_ELEMENT); if (pXmlField == nullptr) { return -1; } StringHashset currentFields; for (uint16 i = 0; i < _ui16MetadataFieldsNumber; i++) { if (_pMetadataFieldInfos[i] != nullptr) { currentFields.put (_pMetadataFieldInfos[i]->_sFieldName); } } do { TiXmlElement *pXmlElName = pXmlField->FirstChildElement (XML_FIELD_NAME_ELEMENT); TiXmlElement *pXmlElType = pXmlField->FirstChildElement (XML_FIELD_TYPE_ELEMENT); if ((pXmlElName != nullptr) && (pXmlElType != nullptr)) { const String nameText (pXmlElName->GetText()); const String typeText (pXmlElType->GetText()); if ((nameText.length () <= 0) || (typeText.length() <= 0)) { pXmlField = pXmlField->NextSiblingElement(); continue; } if (currentFields.containsKey (nameText)) { checkAndLogMsg (pszMethodName, Logger::L_MildError, "trying to add duplicate field %s.\n", nameText.c_str()); pXmlField = pXmlField->NextSiblingElement (); continue; } String type (typeText); type.convertToUpperCase (); _ui16MetadataFieldsNumber++; _pMetadataFieldInfos = static_cast<MetadataFieldInfo **>(realloc (_pMetadataFieldInfos, _ui16MetadataFieldsNumber * sizeof (MetadataFieldInfo *))); if (_pMetadataFieldInfos == nullptr) { checkAndLogMsg (pszMethodName, memoryExhausted); return -2; } if ((type != MetadataType::INTEGER8) && (type != MetadataType::INTEGER16) && (type != MetadataType::INTEGER32) && (type != MetadataType::INTEGER64) && (type != MetadataType::FLOAT) && (type != MetadataType::DOUBLE) && (type != MetadataType::TEXT)) { checkAndLogMsg (pszMethodName, Logger::L_Warning, "unsupported data type for %s attribute: " "%s. Setting it to %s.\n", nameText.c_str (), type.c_str (), MetadataType::TEXT.c_str ()); // Set "TEXT" as default type in case the specified // type doesn't match any type in MetadataType. type = MetadataType::TEXT; } _pMetadataFieldInfos[_ui16MetadataFieldsNumber - 1] = new MetadataFieldInfo (nameText, type); if ((_pMetadataFieldInfos[_ui16MetadataFieldsNumber - 1] == nullptr) || (_pMetadataFieldInfos[_ui16MetadataFieldsNumber - 1]->_sFieldName.length () <= 0)) { checkAndLogMsg ("MetadataConfiguration::addCustomMetadata (1)", memoryExhausted); return -3; } _pMetadataFieldInfos[_ui16MetadataFieldsNumber - 1]->_bVolatile = ((_ui16MetadataFieldsNumber - 1U) == _usPedigreeIndex); pXmlField = pXmlField->NextSiblingElement(); } } while (pXmlField != nullptr); return 0; }