22 #ifndef NDN_MGMT_DISPATCHER_HPP 23 #define NDN_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);
167 addTopPrefix(
const Name& prefix,
bool wantRegister =
true,
181 removeTopPrefix(
const Name& prefix);
209 template<
typename CP>
212 Authorization authorize,
213 ValidateParameters validate,
214 ControlCommandHandler handle);
249 Authorization authorize,
250 StatusDatasetHandler handle);
273 addNotificationStream(
const PartialName& relPrefix);
276 typedef std::function<void(
const Name& prefix,
277 const Interest& interest)> InterestHandler;
279 typedef std::function<void(
const std::string& requester,
282 const shared_ptr<ControlParameters>&)> AuthorizationAcceptedCallback;
285 const Interest& interest)> AuthorizationRejectedCallback;
293 typedef std::function<shared_ptr<ControlParameters>(
const name::Component& comp)> ControlParametersParser;
296 isOverlappedWithOthers(
const PartialName& relPrefix)
const;
316 queryStorage(
const Name& prefix,
const Interest& interest,
const InterestHandler& missContinuation);
318 enum class SendDestination {
343 SendDestination destination, time::milliseconds imsFresh);
351 sendOnFace(
const Data& data);
365 processControlCommandInterest(
const Name& prefix,
366 const Name& relPrefix,
368 const ControlParametersParser& parser,
369 const Authorization& authorization,
370 const AuthorizationAcceptedCallback& accepted,
371 const AuthorizationRejectedCallback& rejected);
384 processAuthorizedControlCommandInterest(
const std::string& requester,
387 const shared_ptr<ControlParameters>& parameters,
388 const ValidateParameters& validate,
389 const ControlCommandHandler& handler);
404 processStatusDatasetInterest(
const Name& prefix,
406 const Authorization& authorization,
407 const AuthorizationAcceptedCallback& accepted,
408 const AuthorizationRejectedCallback& rejected);
419 processAuthorizedStatusDatasetInterest(
const std::string& requester,
422 const StatusDatasetHandler& handler);
433 sendStatusDatasetSegment(
const Name& dataName,
const Block& content,
434 time::milliseconds imsFresh,
bool isFinalBlock);
440 struct TopPrefixEntry
443 std::vector<ScopedInterestFilterHandle> interestFilters;
445 std::unordered_map<Name, TopPrefixEntry> m_topLevelPrefixes;
448 KeyChain& m_keyChain;
451 std::unordered_map<PartialName, InterestHandler> m_handlers;
454 std::unordered_map<Name, uint64_t> m_streams;
460 template<
typename CP>
463 Authorization authorize,
464 ValidateParameters validate,
465 ControlCommandHandler handle)
467 if (!m_topLevelPrefixes.empty()) {
468 BOOST_THROW_EXCEPTION(std::domain_error(
"one or more top-level prefix has been added"));
471 if (isOverlappedWithOthers(relPrefix)) {
472 BOOST_THROW_EXCEPTION(std::out_of_range(
"relPrefix overlaps with another relPrefix"));
475 auto parser = [] (
const name::Component& comp) -> shared_ptr<ControlParameters> {
476 return make_shared<CP>(comp.blockFromValue());
479 AuthorizationAcceptedCallback accepted =
480 bind(&Dispatcher::processAuthorizedControlCommandInterest,
this,
481 _1, _2, _3, _4, std::move(validate), std::move(handle));
483 AuthorizationRejectedCallback rejected =
484 bind(&Dispatcher::afterAuthorizationRejected,
this, _1, _2);
486 m_handlers[relPrefix] = bind(&Dispatcher::processControlCommandInterest,
this,
487 _1, relPrefix, _2, std::move(parser), std::move(authorize),
488 std::move(accepted), std::move(rejected));
494 #endif // NDN_MGMT_DISPATCHER_HPP
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 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.
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 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
Cancels an operation automatically upon destruction.
std::function< void(const Name &prefix, const Interest &interest, StatusDatasetContext &context)> StatusDatasetHandler
a function to handle a StatusDataset request