BestRouteStrategy::BestRouteStrategy(Forwarder& forwarder, const Name& name) : BestRouteStrategyBase(forwarder) { ParsedInstanceName parsed = parseInstanceName(name); if (!parsed.parameters.empty()) { BOOST_THROW_EXCEPTION(std::invalid_argument("BestRouteStrategy does not accept parameters")); } if (parsed.version && *parsed.version != getStrategyName()[-1].toVersion()) { BOOST_THROW_EXCEPTION(std::invalid_argument( "BestRouteStrategy does not support version " + to_string(*parsed.version))); } this->setInstanceName(makeInstanceName(name, getStrategyName())); }
ClientControlStrategy::ClientControlStrategy(Forwarder& forwarder, const Name& name) : BestRouteStrategyBase(forwarder) { ParsedInstanceName parsed = parseInstanceName(name); if (!parsed.parameters.empty()) { BOOST_THROW_EXCEPTION(std::invalid_argument("ClientControlStrategy does not accept parameters")); } if (parsed.version && *parsed.version != getStrategyName()[-1].toVersion()) { BOOST_THROW_EXCEPTION(std::invalid_argument( "ClientControlStrategy does not support version " + to_string(*parsed.version))); } this->setInstanceName(makeInstanceName(name, getStrategyName())); NFD_LOG_WARN("NextHopFaceId field is honored universally and " "it's unnecessary to set client-control strategy."); }
AsfStrategy::AsfStrategy(Forwarder& forwarder, const Name& name) : Strategy(forwarder) , m_measurements(getMeasurements()) , m_probing(m_measurements) , m_retxSuppression(RETX_SUPPRESSION_INITIAL, RetxSuppressionExponential::DEFAULT_MULTIPLIER, RETX_SUPPRESSION_MAX) { ParsedInstanceName parsed = parseInstanceName(name); if (!parsed.parameters.empty()) { BOOST_THROW_EXCEPTION(std::invalid_argument("AsfStrategy does not accept parameters")); } if (parsed.version && *parsed.version != getStrategyName()[-1].toVersion()) { BOOST_THROW_EXCEPTION(std::invalid_argument( "AsfStrategy does not support version " + std::to_string(*parsed.version))); } this->setInstanceName(makeInstanceName(name, getStrategyName())); }
Strategy::Registry::const_iterator Strategy::find(const Name& instanceName) { const Registry& registry = getRegistry(); ParsedInstanceName parsed = parseInstanceName(instanceName); if (parsed.version) { // specified version: find exact or next higher version auto found = registry.lower_bound(parsed.strategyName); if (found != registry.end()) { if (parsed.strategyName.getPrefix(-1).isPrefixOf(found->first)) { NFD_LOG_TRACE("find " << instanceName << " versioned found=" << found->first); return found; } } NFD_LOG_TRACE("find " << instanceName << " versioned not-found"); return registry.end(); } // no version specified: find highest version if (!parsed.strategyName.empty()) { // Name().getSuccessor() would be invalid auto found = registry.lower_bound(parsed.strategyName.getSuccessor()); if (found != registry.begin()) { --found; if (parsed.strategyName.isPrefixOf(found->first)) { NFD_LOG_TRACE("find " << instanceName << " unversioned found=" << found->first); return found; } } } NFD_LOG_TRACE("find " << instanceName << " unversioned not-found"); return registry.end(); }