Beispiel #1
0
 void parsePeers (const char *pszPeerAddresses, StringHashset &addresses)
 {
     StringTokenizer tokenizer (pszPeerAddresses, ';', ';');
     const char *pszRemoteAddress;
     while ((pszRemoteAddress = tokenizer.getNextToken()) != NULL) {
         addresses.put (pszRemoteAddress);
     }
 }
Beispiel #2
0
int DSProUtils::addPeers (DSPro &dspro, ConfigManager &cfgMgr)
{
    const char *pszMethodName = "DSProUtils::addPeers";
    const uint16 ui16MocketsPort = static_cast<uint16>(cfgMgr.getValueAsInt ("aci.dspro.adaptor.mockets.port", MocketsAdaptor::DEFAULT_PORT));
    StringHashset mocketsAddresses;
    parsePeers (cfgMgr.getValue ("aci.dspro.adaptor.mockets.peer.addr"), mocketsAddresses);
    const int mocketsRc = addPeer (dspro, MOCKETS, mocketsAddresses, ui16MocketsPort);

    const uint16 ui16TCPPort = static_cast<uint16>(cfgMgr.getValueAsInt ("aci.dspro.adaptor.tcp.port", TCPAdaptor::DEFAULT_PORT));
    StringHashset tcpAddresses;
    parsePeers (cfgMgr.getValue ("aci.dspro.adaptor.tcp.peer.addr"), tcpAddresses);
    const int iCount = tcpAddresses.getCount();
    tcpAddresses.removeAll (mocketsAddresses);
    if (iCount > tcpAddresses.getCount()) {
        checkAndLogMsg (pszMethodName, Logger::L_Warning,
                        "trying to connect to the same peer with both Mockets and TCP. "
                        "The duplicated connections via TCP will be dropped.\n");
    }
    const int tcpRc = addPeer (dspro, TCP, tcpAddresses, ui16TCPPort);

    return (mocketsRc + tcpRc);
}
Beispiel #3
0
 int addPeer (DSPro &dspro, AdaptorType adaptorType, StringHashset &addresses, uint16 ui16Port)
 {
     int allRc = 0;
     const char *pszMethodName = "DSProUtils::addPeer";
     StringHashset::Iterator iter = addresses.getAllElements();
     for (; !iter.end(); iter.nextElement()) {
         int rc = dspro.addPeer (adaptorType, NULL, iter.getKey(), ui16Port);
         if (rc < 0) {
             checkAndLogMsg (pszMethodName, Logger::L_Warning, "could not connect "
                 "to %s:%u via %s. Returned %d.\n", iter.getKey(), ui16Port,
                 getAdaptorTypeAsString (adaptorType), rc);
             allRc = -1;
         }
     }
     return allRc;
 }
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;
}