manager-base.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
22 #include "manager-base.hpp"
23 
24 namespace nlsr {
25 namespace update {
26 
27 INIT_LOGGER(update.PrefixCommandProcessor);
28 
29 ManagerBase::ManagerBase(ndn::mgmt::Dispatcher& dispatcher,
30  const std::string& module)
31  : m_dispatcher(dispatcher)
32  , m_module(module)
33 {
34 }
35 
36 ndn::PartialName
37 ManagerBase::makeRelPrefix(const std::string& verb) const
38 {
39  return ndn::PartialName(m_module).append(verb);
40 }
41 
42 CommandManagerBase::CommandManagerBase(ndn::mgmt::Dispatcher& dispatcher,
43  NamePrefixList& namePrefixList,
44  Lsdb& lsdb,
45  const std::string& module)
46  : ManagerBase(dispatcher, module)
47  , m_namePrefixList(namePrefixList)
48  , m_lsdb(lsdb)
49 {
50 }
51 
52 void
54  const ndn::Interest& interest,
55  const ndn::mgmt::ControlParameters& parameters,
56  const ndn::mgmt::CommandContinuation& done)
57 {
58  const ndn::nfd::ControlParameters& castParams =
59  static_cast<const ndn::nfd::ControlParameters&>(parameters);
60 
61  // Only build a Name LSA if the added name is new
62  if (m_namePrefixList.insert(castParams.getName())) {
63  NLSR_LOG_INFO("Advertising name: " << castParams.getName() << "\n");
65  if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
66  NLSR_LOG_INFO("Saving name to the configuration file ");
67  if (afterAdvertise(castParams.getName()) == true) {
68  return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
69  }
70  else {
71  return done(ndn::nfd::ControlResponse(406, "Failed to open configuration file.")
72  .setBody(parameters.wireEncode()));
73  }
74  }
75  return done(ndn::nfd::ControlResponse(200, "OK").setBody(parameters.wireEncode()));
76  }
77  else {
78  if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
79  // Save an already advertised prefix
80  NLSR_LOG_INFO("Saving an already advertised name: " << castParams.getName() << "\n");
81  if (afterAdvertise(castParams.getName()) == true) {
82  return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
83  }
84  else {
85  return done(ndn::nfd::ControlResponse(406, "Prefix is already Saved/Failed to open configuration file.")
86  .setBody(parameters.wireEncode()));
87  }
88  }
89  return done(ndn::nfd::ControlResponse(204, "Prefix is already advertised/inserted.")
90  .setBody(parameters.wireEncode()));
91  }
92 }
93 
94 void
96  const ndn::Interest& interest,
97  const ndn::mgmt::ControlParameters& parameters,
98  const ndn::mgmt::CommandContinuation& done)
99 {
100  const ndn::nfd::ControlParameters& castParams =
101  static_cast<const ndn::nfd::ControlParameters&>(parameters);
102 
103  // Only build a Name LSA if the added name is new
104  if (m_namePrefixList.remove(castParams.getName())) {
105  NLSR_LOG_INFO("Withdrawing/Removing name: " << castParams.getName() << "\n");
107  if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
108  if (afterWithdraw(castParams.getName()) == true) {
109  return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
110  }
111  else {
112  return done(ndn::nfd::ControlResponse(406, "Failed to open configuration file.")
113  .setBody(parameters.wireEncode()));
114  }
115  }
116  return done(ndn::nfd::ControlResponse(200, "OK").setBody(parameters.wireEncode()));
117  }
118  else {
119  if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
120  // Delete an already withdrawn prefix
121  NLSR_LOG_INFO("Deleting an already withdrawn name: " << castParams.getName() << "\n");
122  if (afterWithdraw(castParams.getName()) == true) {
123  return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
124  }
125  else {
126  return done(ndn::nfd::ControlResponse(406, "Prefix is already deleted/Failed to open configuration file.")
127  .setBody(parameters.wireEncode()));
128  }
129  }
130  return done(ndn::nfd::ControlResponse(204, "Prefix is already withdrawn/removed.")
131  .setBody(parameters.wireEncode()));
132  }
133 }
134 
135 } // namespace update
136 } // namespace nlsr
void buildAndInstallOwnNameLsa()
Builds a name LSA for this router and then installs it into the LSDB.
Definition: lsdb.cpp:65
bool remove(const ndn::Name &name, const std::string &source="")
removes name from NamePrefixList
bool insert(const ndn::Name &name, const std::string &source="")
inserts name into NamePrefixList
virtual ndn::optional< bool > afterAdvertise(const ndn::Name &prefix)
save an advertised prefix to the nlsr configuration file returns bool from the overridden function wh...
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 ndn::optional< bool > afterWithdraw(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...
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
#define INIT_LOGGER(name)
Definition: logger.hpp:35
#define NLSR_LOG_INFO(x)
Definition: logger.hpp:39
Copyright (c) 2014-2020, The University of Memphis, Regents of the University of California,...