manager-base.hpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2014-2022, The University of Memphis,
4  * Regents of the University of California,
5  * Arizona Board of Regents.
6  *
7  * This file is part of NLSR (Named-data Link State Routing).
8  * See AUTHORS.md for complete list of NLSR authors and contributors.
9  *
10  * NLSR is free software: you can redistribute it and/or modify it under the terms
11  * of the GNU General Public License as published by the Free Software Foundation,
12  * either version 3 of the License, or (at your option) any later version.
13  *
14  * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
15  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16  * PURPOSE. See the GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along with
19  * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef NLSR_MANAGER_BASE_HPP
23 #define NLSR_MANAGER_BASE_HPP
24 
25 #include "name-prefix-list.hpp"
26 #include "test-access-control.hpp"
27 #include "lsdb.hpp"
28 #include "nfd-rib-commands.hpp"
30 
31 #include <ndn-cxx/face.hpp>
32 #include <ndn-cxx/interest.hpp>
33 #include <ndn-cxx/mgmt/nfd/control-command.hpp>
34 #include <ndn-cxx/mgmt/dispatcher.hpp>
35 #include <ndn-cxx/mgmt/nfd/control-parameters.hpp>
36 #include <ndn-cxx/mgmt/nfd/control-response.hpp>
37 
38 #include <boost/noncopyable.hpp>
39 #include <iostream>
40 #include <optional>
41 
42 namespace nlsr {
43 
44 class Lsdb;
45 
46 namespace update {
47 
48 enum { PREFIX_FLAG = 1 };
49 
50 class ManagerBase : boost::noncopyable
51 {
52 public:
53  class Error : public std::runtime_error
54  {
55  public:
56  using std::runtime_error::runtime_error;
57  };
58 
59  ManagerBase(ndn::mgmt::Dispatcher& m_dispatcher, const std::string& module);
60 
61 protected:
64  ndn::PartialName
65  makeRelPrefix(const std::string& verb) const;
66 
70  template<typename T>
71  bool
72  validateParameters(const ndn::mgmt::ControlParameters& parameters)
73  {
74  const auto* castParams = dynamic_cast<const ndn::nfd::ControlParameters*>(&parameters);
75  BOOST_ASSERT(castParams != nullptr);
76 
77  T command;
78  try {
79  command.validateRequest(*castParams);
80  }
81  catch (const ndn::nfd::ControlCommand::ArgumentError&) {
82  throw;
83  }
84  catch (const std::exception& e) {
85  std::cerr << e.what() << std::endl;
86  return false;
87  }
88  return true;
89  }
90 
91 protected:
92  ndn::mgmt::Dispatcher& m_dispatcher;
93 
94 private:
95  std::string m_module;
96 };
97 
99 {
100 public:
101  CommandManagerBase(ndn::mgmt::Dispatcher& m_dispatcher,
103  Lsdb& lsdb,
104  const std::string& module);
105 
106  virtual
107  ~CommandManagerBase() = default;
108 
112  void
113  advertiseAndInsertPrefix(const ndn::Name& prefix,
114  const ndn::Interest& interest,
115  const ndn::mgmt::ControlParameters& parameters,
116  const ndn::mgmt::CommandContinuation& done);
117 
121  void
122  withdrawAndRemovePrefix(const ndn::Name& prefix,
123  const ndn::Interest& interest,
124  const ndn::mgmt::ControlParameters& parameters,
125  const ndn::mgmt::CommandContinuation& done);
126 
130  virtual std::optional<bool>
131  afterAdvertise(const ndn::Name& prefix)
132  {
133  return std::nullopt;
134  }
135 
139  virtual std::optional<bool>
140  afterWithdraw(const ndn::Name& prefix)
141  {
142  return std::nullopt;
143  }
144 
145 protected:
148 };
149 
150 } // namespace update
151 } // namespace nlsr
152 
153 #endif // NLSR_MANAGER_BASE_HPP
virtual std::optional< bool > afterWithdraw(const ndn::Name &prefix)
save an advertised prefix to the nlsr configuration file returns bool from the overridden function wh...
virtual ~CommandManagerBase()=default
void withdrawAndRemovePrefix(const ndn::Name &prefix, const ndn::Interest &interest, const ndn::mgmt::ControlParameters &parameters, const ndn::mgmt::CommandContinuation &done)
remove desired name prefix from the advertised name prefix list or remove a prefix from the FIB if pa...
virtual std::optional< bool > afterAdvertise(const ndn::Name &prefix)
save an advertised prefix to the nlsr configuration file returns bool from the overridden function wh...
CommandManagerBase(ndn::mgmt::Dispatcher &m_dispatcher, NamePrefixList &m_namePrefixList, Lsdb &lsdb, const std::string &module)
void advertiseAndInsertPrefix(const ndn::Name &prefix, const ndn::Interest &interest, const ndn::mgmt::ControlParameters &parameters, const ndn::mgmt::CommandContinuation &done)
add desired name prefix to the advertised name prefix list or insert a prefix into the FIB if paramet...
bool validateParameters(const ndn::mgmt::ControlParameters &parameters)
validate the parameters for a given command
ManagerBase(ndn::mgmt::Dispatcher &m_dispatcher, const std::string &module)
ndn::PartialName makeRelPrefix(const std::string &verb) const
generate the relative prefix for a handler by appending the verb name to the module name
ndn::mgmt::Dispatcher & m_dispatcher
Copyright (c) 2014-2020, The University of Memphis, Regents of the University of California.
Copyright (c) 2014-2017, The University of Memphis, Regents of the University of California,...
Copyright (c) 2014-2017, The University of Memphis, Regents of the University of California,...
#define PUBLIC_WITH_TESTS_ELSE_PROTECTED