diff --git a/core/manager-base.cpp b/core/manager-base.cpp index 3aeec6f6..737c1c6f 100644 --- a/core/manager-base.cpp +++ b/core/manager-base.cpp @@ -1,6 +1,6 @@ /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /** - * Copyright (c) 2014-2016, Regents of the University of California, + * Copyright (c) 2014-2017, Regents of the University of California, * Arizona Board of Regents, * Colorado State University, * University Pierre & Marie Curie, Sorbonne University, @@ -30,13 +30,14 @@ namespace nfd { using ndn::mgmt::ValidateParameters; using ndn::mgmt::Authorization; -ManagerBase::ManagerBase(Dispatcher& dispatcher, - const std::string& module) +ManagerBase::ManagerBase(Dispatcher& dispatcher, const std::string& module) : m_dispatcher(dispatcher) , m_module(module) { } +ManagerBase::~ManagerBase() = default; + void ManagerBase::registerStatusDatasetHandler(const std::string& verb, const ndn::mgmt::StatusDatasetHandler& handler) diff --git a/core/manager-base.hpp b/core/manager-base.hpp index e947b8d4..3d0a4652 100644 --- a/core/manager-base.hpp +++ b/core/manager-base.hpp @@ -1,6 +1,6 @@ /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /** - * Copyright (c) 2014-2016, Regents of the University of California, + * Copyright (c) 2014-2017, Regents of the University of California, * Arizona Board of Regents, * Colorado State University, * University Pierre & Marie Curie, Sorbonne University, @@ -59,8 +59,10 @@ public: }; public: - ManagerBase(Dispatcher& dispatcher, - const std::string& module); + ManagerBase(Dispatcher& dispatcher, const std::string& module); + + virtual + ~ManagerBase(); const std::string& getModule() const @@ -69,7 +71,6 @@ public: } PUBLIC_WITH_TESTS_ELSE_PROTECTED: // registrations to the dispatcher - // difference from mgmt::ControlCommand: accepts nfd::ControlParameters typedef function >& +inline const std::list>& RibEntry::getChildren() const { return m_children; } -inline RibEntry::RouteList& -RibEntry::getRoutes() +inline const RibEntry::RouteList& +RibEntry::getRoutes() const { return m_routes; } diff --git a/rib/rib-manager.cpp b/rib/rib-manager.cpp index ae76a811..46819bdb 100644 --- a/rib/rib-manager.cpp +++ b/rib/rib-manager.cpp @@ -28,7 +28,6 @@ #include "readvertise/client-to-nlsr-readvertise-policy.hpp" #include "readvertise/nfd-rib-readvertise-destination.hpp" -#include "core/global-io.hpp" #include "core/logger.hpp" #include "core/scheduler.hpp" @@ -39,14 +38,11 @@ #include #include +#include + namespace nfd { namespace rib { -using ndn::nfd::ControlCommand; -using ndn::nfd::ControlResponse; -using ndn::nfd::ControlParameters; -using ndn::nfd::FaceEventNotification; - NFD_LOG_INIT("RibManager"); const Name RibManager::LOCAL_HOST_TOP_PREFIX = "/localhost/nfd"; @@ -81,10 +77,7 @@ RibManager::RibManager(Dispatcher& dispatcher, registerStatusDatasetHandler("list", bind(&RibManager::listEntries, this, _1, _2, _3)); } -RibManager::~RibManager() -{ - scheduler::cancel(m_activeFaceFetchEvent); -} +RibManager::~RibManager() = default; void RibManager::registerWithNfd() @@ -283,29 +276,26 @@ void RibManager::listEntries(const Name& topPrefix, const Interest& interest, ndn::mgmt::StatusDatasetContext& context) { - for (auto&& ribTableEntry : m_rib) { + for (const auto& ribTableEntry : m_rib) { const auto& ribEntry = *ribTableEntry.second; - ndn::nfd::RibEntry record; - - for (auto&& route : ribEntry) { - ndn::nfd::Route routeElement; - routeElement.setFaceId(route.faceId) - .setOrigin(route.origin) - .setCost(route.cost) - .setFlags(route.flags); - - if (route.expires < time::steady_clock::TimePoint::max()) { - routeElement.setExpirationPeriod(time::duration_cast( - route.expires - time::steady_clock::now())); - } - - record.addRoute(routeElement); - } - - record.setName(ribEntry.getName()); - context.append(record.wireEncode()); + const auto& routes = ribEntry.getRoutes() | + boost::adaptors::transformed([] (const Route& route) { + auto r = ndn::nfd::Route() + .setFaceId(route.faceId) + .setOrigin(route.origin) + .setCost(route.cost) + .setFlags(route.flags); + if (route.expires < time::steady_clock::TimePoint::max()) { + r.setExpirationPeriod(time::duration_cast( + route.expires - time::steady_clock::now())); + } + return r; + }); + context.append(ndn::nfd::RibEntry() + .setName(ribEntry.getName()) + .setRoutes(std::begin(routes), std::end(routes)) + .wireEncode()); } - context.end(); } @@ -370,10 +360,7 @@ RibManager::onFaceDestroyedEvent(uint64_t faceId) void RibManager::scheduleActiveFaceFetch(const time::seconds& timeToWait) { - scheduler::cancel(m_activeFaceFetchEvent); - - m_activeFaceFetchEvent = scheduler::schedule(timeToWait, - bind(&RibManager::fetchActiveFaces, this)); + m_activeFaceFetchEvent = scheduler::schedule(timeToWait, [this] { this->fetchActiveFaces(); }); } void @@ -382,18 +369,16 @@ RibManager::removeInvalidFaces(const std::vector& activeFa NFD_LOG_DEBUG("Checking for invalid face registrations"); FaceIdSet activeFaceIds; - for (const ndn::nfd::FaceStatus& item : activeFaces) { - activeFaceIds.insert(item.getFaceId()); + for (const auto& faceStatus : activeFaces) { + activeFaceIds.insert(faceStatus.getFaceId()); } // Look for face IDs that were registered but not active to find missed // face destroyed events - for (auto&& faceId : m_registeredFaces) { + for (auto faceId : m_registeredFaces) { if (activeFaceIds.count(faceId) == 0) { NFD_LOG_DEBUG("Removing invalid face ID: " << faceId); - - scheduler::schedule(time::seconds(0), - bind(&RibManager::onFaceDestroyedEvent, this, faceId)); + scheduler::schedule(time::seconds(0), [this, faceId] { this->onFaceDestroyedEvent(faceId); }); } } @@ -402,7 +387,7 @@ RibManager::removeInvalidFaces(const std::vector& activeFa } void -RibManager::onNotification(const FaceEventNotification& notification) +RibManager::onNotification(const ndn::nfd::FaceEventNotification& notification) { NFD_LOG_TRACE("onNotification: " << notification); diff --git a/rib/rib-manager.hpp b/rib/rib-manager.hpp index b074addb..6da3ef4a 100644 --- a/rib/rib-manager.hpp +++ b/rib/rib-manager.hpp @@ -33,11 +33,11 @@ #include "core/config-file.hpp" #include "core/manager-base.hpp" -#include #include #include #include #include +#include namespace nfd { namespace rib { @@ -61,7 +61,7 @@ public: public: RibManager(Dispatcher& dispatcher, ndn::Face& face, ndn::KeyChain& keyChain); - ~RibManager(); + ~RibManager() override; void registerWithNfd(); @@ -138,17 +138,16 @@ PUBLIC_WITH_TESTS_ELSE_PRIVATE: private: void - onCommandPrefixAddNextHopSuccess(const Name& prefix, - const ndn::nfd::ControlParameters& result); + onCommandPrefixAddNextHopSuccess(const Name& prefix, const ControlParameters& result); void - onCommandPrefixAddNextHopError(const Name& name, const ndn::nfd::ControlResponse& response); + onCommandPrefixAddNextHopError(const Name& name, const ControlResponse& response); void onEnableLocalFieldsSuccess(); void - onEnableLocalFieldsError(const ndn::nfd::ControlResponse& response); + onEnableLocalFieldsError(const ControlResponse& response); private: ndn::Face& m_face; @@ -171,7 +170,7 @@ private: static const std::string MGMT_MODULE_NAME; static const Name FACES_LIST_DATASET_PREFIX; static const time::seconds ACTIVE_FACE_FETCH_INTERVAL; - scheduler::EventId m_activeFaceFetchEvent; + scheduler::ScopedEventId m_activeFaceFetchEvent; static const Name READVERTISE_NLSR_PREFIX; typedef std::set FaceIdSet;