blob: 62736240c71395c26963a916327b5562b75766be [file] [log] [blame]
Yanbiao Lidf846e52016-01-30 21:53:47 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2014-2016, Regents of the University of California,
4 * Arizona Board of Regents,
5 * Colorado State University,
6 * University Pierre & Marie Curie, Sorbonne University,
7 * Washington University in St. Louis,
8 * Beijing Institute of Technology,
9 * The University of Memphis.
10 *
11 * This file is part of NFD (Named Data Networking Forwarding Daemon).
12 * See AUTHORS.md for complete list of NFD authors and contributors.
13 *
14 * NFD is free software: you can redistribute it and/or modify it under the terms
15 * of the GNU General Public License as published by the Free Software Foundation,
16 * either version 3 of the License, or (at your option) any later version.
17 *
18 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20 * PURPOSE. See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
24 */
25
26#ifndef NFD_DAEMON_MGMT_NFD_MANAGER_BASE_HPP
27#define NFD_DAEMON_MGMT_NFD_MANAGER_BASE_HPP
28
29#include "common.hpp"
30#include "command-validator.hpp"
31#include "core/manager-base.hpp"
32
33#include <ndn-cxx/mgmt/dispatcher.hpp>
34#include <ndn-cxx/management/nfd-control-command.hpp>
35#include <ndn-cxx/management/nfd-control-response.hpp>
36#include <ndn-cxx/management/nfd-control-parameters.hpp>
37
38namespace nfd {
39
40using ndn::mgmt::Dispatcher;
41using ndn::nfd::ControlParameters;
42
43/**
44 * @brief a collection of common functions shared by all NFD managers,
45 * such as communicating with the dispatcher and command validator.
46 */
47class NfdManagerBase : public ManagerBase
48{
49public:
50 NfdManagerBase(Dispatcher& dispatcher,
51 CommandValidator& validator,
52 const std::string& module);
53
54PUBLIC_WITH_TESTS_ELSE_PRIVATE: // command validation
55 /**
56 * @brief validate a request for ControlCommand.
57 *
58 * This is called by the dispatcher.
59 *
60 * @pre params != null
61 * @pre typeid(*params) == typeid(ndn::nfd::ControlParameters)
62 *
63 * @param prefix the top prefix
64 * @param interest a request for ControlCommand
65 * @param params the parameters for ControlCommand
66 * @param accept callback of successful validation, take the requester string as a argument
67 * @param reject callback of failure in validation, take the action code as a argument
68 */
69 virtual void
70 authorize(const Name& prefix, const Interest& interest,
71 const ndn::mgmt::ControlParameters* params,
72 ndn::mgmt::AcceptContinuation accept,
Davide Pesaventob84bd3a2016-04-22 02:21:45 +020073 ndn::mgmt::RejectContinuation reject) override;
Yanbiao Lidf846e52016-01-30 21:53:47 -080074
75private:
76 CommandValidator& m_validator;
77};
78
79} // namespace nfd
80
81#endif // NFD_DAEMON_MGMT_NFD_MANAGER_BASE_HPP