blob: 3e0b612afc6d7ed6212409e2300b222c8bf99f73 [file] [log] [blame]
Laqin Fan54a43f02017-03-08 12:31:30 -06001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesaventoc1d0e8e2022-06-15 14:26:02 -04002/*
Junxiao Shi52f16642023-08-15 00:18:35 +00003 * Copyright (c) 2014-2023, The University of Memphis,
Laqin Fan54a43f02017-03-08 12:31:30 -06004 * 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/>.
Davide Pesaventoc1d0e8e2022-06-15 14:26:02 -040020 */
Laqin Fan54a43f02017-03-08 12:31:30 -060021
22#include "manager-base.hpp"
Davide Pesaventoc1d0e8e2022-06-15 14:26:02 -040023#include "logger.hpp"
Laqin Fan54a43f02017-03-08 12:31:30 -060024
25namespace nlsr {
26namespace update {
27
dmcoomescf8d0ed2017-02-21 11:39:01 -060028INIT_LOGGER(update.PrefixCommandProcessor);
Laqin Fan54a43f02017-03-08 12:31:30 -060029
30ManagerBase::ManagerBase(ndn::mgmt::Dispatcher& dispatcher,
31 const std::string& module)
32 : m_dispatcher(dispatcher)
33 , m_module(module)
34{
35}
36
37ndn::PartialName
38ManagerBase::makeRelPrefix(const std::string& verb) const
39{
40 return ndn::PartialName(m_module).append(verb);
41}
42
43CommandManagerBase::CommandManagerBase(ndn::mgmt::Dispatcher& dispatcher,
44 NamePrefixList& namePrefixList,
45 Lsdb& lsdb,
46 const std::string& module)
47 : ManagerBase(dispatcher, module)
48 , m_namePrefixList(namePrefixList)
49 , m_lsdb(lsdb)
50{
51}
52
53void
54CommandManagerBase::advertiseAndInsertPrefix(const ndn::Name& prefix,
55 const ndn::Interest& interest,
56 const ndn::mgmt::ControlParameters& parameters,
57 const ndn::mgmt::CommandContinuation& done)
Muktadir Chowdhuryf04f9892017-08-20 20:42:56 -050058{
Laqin Fan54a43f02017-03-08 12:31:30 -060059 const ndn::nfd::ControlParameters& castParams =
60 static_cast<const ndn::nfd::ControlParameters&>(parameters);
61
62 // Only build a Name LSA if the added name is new
63 if (m_namePrefixList.insert(castParams.getName())) {
Saurab Dulal7526cee2018-01-31 18:14:10 +000064 NLSR_LOG_INFO("Advertising name: " << castParams.getName() << "\n");
Laqin Fan54a43f02017-03-08 12:31:30 -060065 m_lsdb.buildAndInstallOwnNameLsa();
Saurab Dulal7526cee2018-01-31 18:14:10 +000066 if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
Ashlesh Gawande85998a12017-12-07 22:22:13 -060067 NLSR_LOG_INFO("Saving name to the configuration file ");
Saurab Dulal7526cee2018-01-31 18:14:10 +000068 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, "Failed to open configuration file.")
73 .setBody(parameters.wireEncode()));
74 }
75 }
Laqin Fan54a43f02017-03-08 12:31:30 -060076 return done(ndn::nfd::ControlResponse(200, "OK").setBody(parameters.wireEncode()));
77 }
Saurab Dulal7526cee2018-01-31 18:14:10 +000078 else {
79 if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
80 // Save an already advertised prefix
81 NLSR_LOG_INFO("Saving an already advertised name: " << castParams.getName() << "\n");
82 if (afterAdvertise(castParams.getName()) == true) {
83 return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
84 }
85 else {
86 return done(ndn::nfd::ControlResponse(406, "Prefix is already Saved/Failed to open configuration file.")
87 .setBody(parameters.wireEncode()));
88 }
89 }
90 return done(ndn::nfd::ControlResponse(204, "Prefix is already advertised/inserted.")
91 .setBody(parameters.wireEncode()));
92 }
Laqin Fan54a43f02017-03-08 12:31:30 -060093}
94
95void
96CommandManagerBase::withdrawAndRemovePrefix(const ndn::Name& prefix,
97 const ndn::Interest& interest,
98 const ndn::mgmt::ControlParameters& parameters,
99 const ndn::mgmt::CommandContinuation& done)
100{
101 const ndn::nfd::ControlParameters& castParams =
102 static_cast<const ndn::nfd::ControlParameters&>(parameters);
103
104 // Only build a Name LSA if the added name is new
Junxiao Shi52f16642023-08-15 00:18:35 +0000105 if (m_namePrefixList.erase(castParams.getName())) {
dmcoomes5bcb39e2017-10-31 15:07:55 -0500106 NLSR_LOG_INFO("Withdrawing/Removing name: " << castParams.getName() << "\n");
Laqin Fan54a43f02017-03-08 12:31:30 -0600107 m_lsdb.buildAndInstallOwnNameLsa();
Saurab Dulal7526cee2018-01-31 18:14:10 +0000108 if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
109 if (afterWithdraw(castParams.getName()) == true) {
110 return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
111 }
112 else {
113 return done(ndn::nfd::ControlResponse(406, "Failed to open configuration file.")
114 .setBody(parameters.wireEncode()));
115 }
116 }
Laqin Fan54a43f02017-03-08 12:31:30 -0600117 return done(ndn::nfd::ControlResponse(200, "OK").setBody(parameters.wireEncode()));
118 }
Saurab Dulal7526cee2018-01-31 18:14:10 +0000119 else {
120 if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
121 // Delete an already withdrawn prefix
122 NLSR_LOG_INFO("Deleting an already withdrawn name: " << castParams.getName() << "\n");
123 if (afterWithdraw(castParams.getName()) == true) {
124 return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
125 }
126 else {
127 return done(ndn::nfd::ControlResponse(406, "Prefix is already deleted/Failed to open configuration file.")
128 .setBody(parameters.wireEncode()));
129 }
130 }
131 return done(ndn::nfd::ControlResponse(204, "Prefix is already withdrawn/removed.")
132 .setBody(parameters.wireEncode()));
133 }
Laqin Fan54a43f02017-03-08 12:31:30 -0600134}
135
136} // namespace update
137} // namespace nlsr