All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
nrd-controller.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
7 #include "nrd-controller.hpp"
9 #include "nfd-control-response.hpp" // used in deprecated function only
10 
11 namespace ndn {
12 namespace nrd {
13 
17 
19  : nfd::Controller(face)
20 {
21 }
22 
23 void
24 Controller::selfRegisterPrefix(const Name& prefixToRegister,
25  const SuccessCallback& onSuccess,
26  const FailCallback& onFail)
27 {
28  ControlParameters parameters;
29  parameters.setName(prefixToRegister);
30 
31  this->start<RibRegisterCommand>(parameters,
32  bind(onSuccess),
33  bind(onFail, _2));
34 }
35 
36 void
37 Controller::selfDeregisterPrefix(const Name& prefixToRegister,
38  const SuccessCallback& onSuccess,
39  const FailCallback& onFail)
40 {
41  ControlParameters parameters;
42  parameters.setName(prefixToRegister);
43 
44  this->start<RibUnregisterCommand>(parameters,
45  bind(onSuccess),
46  bind(onFail, _2));
47 }
48 
49 void
51  const CommandSucceedCallback& onSuccess,
52  const FailCallback& onFail)
53 {
54  startCommand("register", options, onSuccess, onFail);
55 }
56 
57 void
59  const CommandSucceedCallback& onSuccess,
60  const FailCallback& onFail)
61 {
62  startCommand("unregister", options, onSuccess, onFail);
63 }
64 
65 void
67  const CommandSucceedCallback& onSuccess,
68  const FailCallback& onFail)
69 {
70  startCommand("advertise", options, onSuccess, onFail);
71 }
72 
73 void
75  const CommandSucceedCallback& onSuccess,
76  const FailCallback& onFail)
77 {
78  startCommand("withdraw", options, onSuccess, onFail);
79 }
80 
81 void
82 Controller::startCommand(const std::string& command,
83  const PrefixRegOptions& options,
84  const CommandSucceedCallback& onSuccess,
85  const FailCallback& onFail)
86 {
87  Name commandInterestName("/localhost/nrd");
88  commandInterestName
89  .append(command)
90  .append(options.wireEncode());
91 
92  Interest commandInterest(commandInterestName);
93  m_commandInterestGenerator.generate(commandInterest);
94 
95  m_face.expressInterest(commandInterest,
96  bind(&Controller::processCommandResponse, this, _2,
97  onSuccess, onFail),
98  bind(onFail, "Command Interest timed out"));
99 }
100 
101 void
102 Controller::processCommandResponse(Data& data,
103  const CommandSucceedCallback& onSuccess,
104  const FailCallback& onFail)
105 {
107 
108  try
109  {
111  if (response.getCode() != 200)
112  return onFail(response.getText());
113 
114  PrefixRegOptions options(response.getBody());
115  return onSuccess(options);
116  }
117  catch (ndn::Tlv::Error& e)
118  {
119  if (static_cast<bool>(onFail))
120  return onFail(e.what());
121  }
122 }
123 
124 } // namespace nrd
125 } // namespace ndn
virtual void selfRegisterPrefix(const Name &prefixToRegister, const SuccessCallback &onSuccess, const FailCallback &onFail)
void generate(Interest &interest, const Name &certificateName=Name())
virtual void selfDeregisterPrefix(const Name &prefixToRegister, const SuccessCallback &onSuccess, const FailCallback &onFail)
CommandInterestGenerator m_commandInterestGenerator
void advertisePrefix(const PrefixRegOptions &options, const CommandSucceedCallback &onSuccess, const FailCallback &onFail)
void withdrawPrefix(const PrefixRegOptions &options, const CommandSucceedCallback &onSuccess, const FailCallback &onFail)
function< void()> SuccessCallback
Definition: controller.hpp:23
An Interest holds a Name and other fields for an interest.
Definition: interest.hpp:24
void startCommand(const std::string &command, const PrefixRegOptions &options, const CommandSucceedCallback &onSuccess, const FailCallback &onFailure)
function< void(const ControlParameters &)> CommandSucceedCallback
a callback on command success
size_t wireEncode(EncodingImpl< T > &block) const
Block blockFromValue() const
Definition: block.cpp:352
function< void(const std::string &)> FailCallback
Definition: controller.hpp:24
Class defining abstraction of ControlResponse for NFD Control Protocol.
Abstraction to communicate with local or remote NDN forwarder.
Definition: face.hpp:54
A Name holds an array of Name::Component and represents an NDN name.
Definition: name.hpp:26
const PendingInterestId * expressInterest(const Interest &interest, const OnData &onData, const OnTimeout &onTimeout=OnTimeout())
Express Interest.
Definition: face.cpp:125
represents a rib/unregister command
represents a rib/register command
const Block & getContent() const
Get content Block.
Definition: data.hpp:411
Name & append(const uint8_t *value, size_t valueLength)
Append a new component, copying from value of length valueLength.
Definition: name.hpp:142
void registerPrefix(const PrefixRegOptions &options, const CommandSucceedCallback &onSuccess, const FailCallback &onFail)
Abstraction for prefix registration options for NRD Prefix registration protocol. ...
void unregisterPrefix(const PrefixRegOptions &options, const CommandSucceedCallback &onSuccess, const FailCallback &onFail)