node+face-management-protocol: Adding StatusResponse to the Tlv::FaceManagement
Change-Id: I23b2478e3b27cf7fb8b263704c1835d70d3b606d
diff --git a/src/node.cpp b/src/node.cpp
index 3276e62..b766718 100644
--- a/src/node.cpp
+++ b/src/node.cpp
@@ -14,6 +14,8 @@
#include "util/ndnd-id-fetcher.hpp"
#include "security/signature/signature-sha256-with-rsa.hpp"
+#include "status-response.hpp"
+
using namespace std;
namespace ndn {
@@ -119,20 +121,73 @@
// Create an interest where the name has the encoded Data packet.
Name interestName;
- const uint8_t component0[] = "ndnx";
- const uint8_t component2[] = "selfreg";
- interestName.append(component0, sizeof(component0) - 1);
+ interestName.append("ndnx");
interestName.append(ndndId_);
- interestName.append(component2, sizeof(component2) - 1);
+ interestName.append("selfreg");
interestName.append(data.wireEncode());
-
+
Interest interest(interestName);
interest.setScope(1);
+ interest.setInterestLifetime(1000);
+
+ expressInterest(interest,
+ func_lib::bind(&Node::registerPrefixFinal, this,
+ registeredPrefixId, prefix, onInterest, onRegisterFailed, _1, _2),
+ func_lib::bind(onRegisterFailed, prefix));
+}
+
+void
+Node::registerPrefixFinal(uint64_t registeredPrefixId,
+ const ptr_lib::shared_ptr<const Name>& prefix,
+ const OnInterest& onInterest,
+ const OnRegisterFailed& onRegisterFailed,
+ const ptr_lib::shared_ptr<const Interest>&, const ptr_lib::shared_ptr<Data>&data)
+{
+ Block content = data->getContent();
+ content.parse();
+
+ if (content.getAll().empty())
+ {
+ onRegisterFailed(prefix);
+ return;
+ }
+
+ switch(content.getAll().begin()->type())
+ {
+ case Tlv::FaceManagement::ForwardingEntry:
+ {
+ // succeeded
+ break;
+ }
+ case Tlv::FaceManagement::StatusResponse:
+ {
+ // failed :(
+ StatusResponse resp;
+ resp.wireDecode(*content.getAll().begin());
+
+ std::cerr << "StatusReponse: " << resp << std::endl;
+
+ onRegisterFailed(prefix);
+ return;
+
+ break;
+ }
+ default:
+ {
+ // failed :(
+
+ onRegisterFailed(prefix);
+ return;
+ break;
+ }
+ }
+
+
// Save the onInterest callback and send the registration interest.
registeredPrefixTable_.push_back(ptr_lib::make_shared<RegisteredPrefix>(registeredPrefixId, prefix, onInterest));
-
- transport_->send(interest.wireEncode());
+
+ /// @todo Notify user about successful registration
}
void