22 #ifndef NDN_CXX_MGMT_DISPATCHER_HPP 23 #define NDN_CXX_MGMT_DISPATCHER_HPP 33 #include <unordered_map> 74 typedef std::function<void(
const Name& prefix,
const Interest& interest,
76 const AcceptContinuation&
accept,
104 typedef std::function<void(
const Name& prefix,
const Interest& interest,
117 typedef std::function<void(
const Name& prefix,
const Interest& interest,
141 size_t imsCapacity = 256);
166 addTopPrefix(
const Name& prefix,
bool wantRegister =
true,
178 removeTopPrefix(
const Name& prefix);
206 template<
typename CP>
209 Authorization authorize,
211 ControlCommandHandler handle);
246 Authorization authorize,
247 StatusDatasetHandler handle);
270 addNotificationStream(
const PartialName& relPrefix);
273 using InterestHandler = std::function<void(const Name& prefix, const Interest&)>;
275 using AuthorizationAcceptedCallback = std::function<void(
const std::string& requester,
278 const shared_ptr<ControlParameters>&)>;
280 using AuthorizationRejectedCallback = std::function<void(RejectReply, const Interest&)>;
287 using ControlParametersParser = std::function<shared_ptr<ControlParameters>(
const name::Component&)>;
290 isOverlappedWithOthers(
const PartialName& relPrefix)
const;
310 queryStorage(
const Name& prefix,
const Interest& interest,
const InterestHandler& missContinuation);
312 enum class SendDestination {
336 SendDestination destination);
344 sendOnFace(
const Data& data);
358 processControlCommandInterest(
const Name& prefix,
359 const Name& relPrefix,
361 const ControlParametersParser& parser,
362 const Authorization& authorization,
363 const AuthorizationAcceptedCallback&
accepted,
364 const AuthorizationRejectedCallback&
rejected);
377 processAuthorizedControlCommandInterest(
const std::string& requester,
380 const shared_ptr<ControlParameters>& parameters,
381 const ValidateParameters& validate,
382 const ControlCommandHandler& handler);
397 processStatusDatasetInterest(
const Name& prefix,
399 const Authorization& authorization,
400 const AuthorizationAcceptedCallback& accepted,
401 const AuthorizationRejectedCallback& rejected);
411 processAuthorizedStatusDatasetInterest(
const Name& prefix,
413 const StatusDatasetHandler& handler);
423 sendStatusDatasetSegment(
const Name& dataName,
const Block& content,
bool isFinalBlock);
429 struct TopPrefixEntry
432 std::vector<ScopedInterestFilterHandle> interestFilters;
434 std::unordered_map<Name, TopPrefixEntry> m_topLevelPrefixes;
440 std::unordered_map<PartialName, InterestHandler> m_handlers;
443 std::unordered_map<Name, uint64_t> m_streams;
449 template<
typename CP>
452 Authorization authorize,
454 ControlCommandHandler handle)
456 if (!m_topLevelPrefixes.empty()) {
457 NDN_THROW(std::domain_error(
"one or more top-level prefix has been added"));
460 if (isOverlappedWithOthers(relPrefix)) {
461 NDN_THROW(std::out_of_range(
"relPrefix overlaps with another relPrefix"));
464 ControlParametersParser parser = [] (
const name::Component& comp) -> shared_ptr<ControlParameters> {
465 return make_shared<CP>(comp.blockFromValue());
468 handle =
std::move(handle)] (
auto&&... args) {
469 processAuthorizedControlCommandInterest(std::forward<decltype(args)>(args)..., validate, handle);
471 AuthorizationRejectedCallback
rejected = [
this] (
auto&&... args) {
472 afterAuthorizationRejected(std::forward<decltype(args)>(args)...);
475 m_handlers[relPrefix] = [
this, relPrefix,
479 rejected =
std::move(rejected)] (
const auto& prefix,
const auto& interest) {
480 processControlCommandInterest(prefix, relPrefix, interest, parser, authorize, accepted, rejected);
487 #endif // NDN_CXX_MGMT_DISPATCHER_HPP Copyright (c) 2011-2015 Regents of the University of California.
Accept any value the remote endpoint offers.
Provides in-memory storage employing First-In-First-Out (FIFO) replacement policy.
std::function< void(const Block ¬ification)> PostNotification
a function to post a notification
represents a dispatcher on server side of NFD Management protocol
RejectReply
indicate how to reply in case authorization is rejected
reply with a ControlResponse where StatusCode is 403
Represents a TLV element of the NDN packet format.
Represents an Interest packet.
std::function< void(const std::string &requester)> AcceptContinuation
a function to be called if authorization is successful
Authorization makeAcceptAllAuthorization()
return an Authorization that accepts all Interests, with empty string as requester ...
Signing parameters passed to KeyChain.
std::function< void(RejectReply reply)> RejectContinuation
a function to be called if authorization is rejected
Provide a communication channel with local or remote NDN forwarder.
#define NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PRIVATE
void addControlCommand(const PartialName &relPrefix, Authorization authorize, ValidateParameters validate, ControlCommandHandler handle)
register a ControlCommand
Represents an absolute name.
bool validate(server *, websocketpp::connection_hdl)
std::function< void(const ControlResponse &resp)> CommandContinuation
a function to be called after ControlCommandHandler completes
base class for a struct that contains ControlCommand parameters
Represents a name component.
std::function< void(const Name &prefix, const Interest &interest, const ControlParameters ¶ms, const CommandContinuation &done)> ControlCommandHandler
a function to handle an authorized ControlCommand
std::function< bool(const ControlParameters ¶ms)> ValidateParameters
a function to validate input ControlParameters
Provides a context for generating the response to a StatusDataset request.
Represents a Data packet.
std::function< void(const Name &prefix, const Interest &interest, const ControlParameters *params, const AcceptContinuation &accept, const RejectContinuation &reject)> Authorization
a function that performs authorization
std::function< void(const Name &prefix, const Interest &interest, StatusDatasetContext &context)> StatusDatasetHandler
a function to handle a StatusDataset request