All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
command-processor.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2014-2025, 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 #include "command-processor.hpp"
23 #include "logger.hpp"
24 
25 #include <ndn-cxx/mgmt/nfd/control-response.hpp>
26 
27 namespace nlsr::update {
28 
29 INIT_LOGGER(update.CommandProcessor);
30 
31 CommandProcessor::CommandProcessor(ndn::mgmt::Dispatcher& dispatcher,
32  NamePrefixList& namePrefixList,
33  Lsdb& lsdb)
34  : m_dispatcher(dispatcher)
35  , m_namePrefixList(namePrefixList)
36  , m_lsdb(lsdb)
37 {
38 }
39 
41 
42 void
43 CommandProcessor::advertiseAndInsertPrefix(const ndn::mgmt::ControlParametersBase& parameters,
44  const ndn::mgmt::CommandContinuation& done)
45 {
46  const auto& castParams = static_cast<const ndn::nfd::ControlParameters&>(parameters);
47 
48  // Only build a Name LSA if the added name is new
49  if (m_namePrefixList.insert(castParams.getName())) {
50  NLSR_LOG_INFO("Advertising name: " << castParams.getName());
52  if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
53  NLSR_LOG_INFO("Saving name to the configuration file ");
54  if (afterAdvertise(castParams.getName()) == true) {
55  return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
56  }
57  else {
58  return done(ndn::nfd::ControlResponse(406, "Failed to open configuration file.")
59  .setBody(parameters.wireEncode()));
60  }
61  }
62  return done(ndn::nfd::ControlResponse(200, "OK").setBody(parameters.wireEncode()));
63  }
64  else {
65  if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
66  // Save an already advertised prefix
67  NLSR_LOG_INFO("Saving an already advertised name: " << castParams.getName());
68  if (afterAdvertise(castParams.getName()) == true) {
69  return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
70  }
71  else {
72  return done(ndn::nfd::ControlResponse(406, "Prefix is already Saved/Failed to open configuration file.")
73  .setBody(parameters.wireEncode()));
74  }
75  }
76  return done(ndn::nfd::ControlResponse(204, "Prefix is already advertised/inserted.")
77  .setBody(parameters.wireEncode()));
78  }
79 }
80 
81 void
82 CommandProcessor::withdrawAndRemovePrefix(const ndn::mgmt::ControlParametersBase& parameters,
83  const ndn::mgmt::CommandContinuation& done)
84 {
85  const auto& castParams = static_cast<const ndn::nfd::ControlParameters&>(parameters);
86 
87  // Only build a Name LSA if the added name is new
88  if (m_namePrefixList.erase(castParams.getName())) {
89  NLSR_LOG_INFO("Withdrawing/Removing name: " << castParams.getName());
91  if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
92  if (afterWithdraw(castParams.getName()) == true) {
93  return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
94  }
95  else {
96  return done(ndn::nfd::ControlResponse(406, "Failed to open configuration file.")
97  .setBody(parameters.wireEncode()));
98  }
99  }
100  return done(ndn::nfd::ControlResponse(200, "OK").setBody(parameters.wireEncode()));
101  }
102  else {
103  if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
104  // Delete an already withdrawn prefix
105  NLSR_LOG_INFO("Deleting an already withdrawn name: " << castParams.getName());
106  if (afterWithdraw(castParams.getName()) == true) {
107  return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
108  }
109  else {
110  return done(ndn::nfd::ControlResponse(406, "Prefix is already deleted/Failed to open configuration file.")
111  .setBody(parameters.wireEncode()));
112  }
113  }
114  return done(ndn::nfd::ControlResponse(204, "Prefix is already withdrawn/removed.")
115  .setBody(parameters.wireEncode()));
116  }
117 }
118 
119 } // namespace nlsr::update
void buildAndInstallOwnNameLsa()
Builds a name LSA for this router and then installs it into the LSDB.
Definition: lsdb.cpp:93
bool erase(const ndn::Name &name, const std::string &source="")
Deletes name and source combination.
bool insert(const ndn::Name &name, const std::string &source="")
Inserts name and source combination.
virtual std::optional< bool > afterWithdraw(const ndn::Name &prefix)
Save an advertised prefix to the nlsr configuration file.
void advertiseAndInsertPrefix(const ndn::mgmt::ControlParametersBase &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...
virtual std::optional< bool > afterAdvertise(const ndn::Name &prefix)
Save an advertised prefix to the nlsr configuration file.
void withdrawAndRemovePrefix(const ndn::mgmt::ControlParametersBase &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...
CommandProcessor(ndn::mgmt::Dispatcher &m_dispatcher, NamePrefixList &m_namePrefixList, Lsdb &lsdb)
Copyright (c) 2014-2018, The University of Memphis, Regents of the University of California.
#define INIT_LOGGER(name)
Definition: logger.hpp:35
#define NLSR_LOG_INFO(x)
Definition: logger.hpp:39