nrd: Basic version of nrd
refs #1324
Change-Id: I797922e8367e0473bb8ed39840e44d038295f148
diff --git a/src/nrd.hpp b/src/nrd.hpp
new file mode 100644
index 0000000..210af74
--- /dev/null
+++ b/src/nrd.hpp
@@ -0,0 +1,98 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NRD_HPP
+#define NRD_HPP
+
+#include "rib.hpp"
+
+namespace ndn {
+namespace nrd {
+
+class Nrd
+{
+public:
+ Nrd();
+
+ void
+ onRibRequest(const Interest& request);
+
+ void
+ enableLocalControlHeader();
+
+ void
+ listen();
+
+private:
+ void
+ sendResponse(const Name& name,
+ const nfd::ControlResponse& response);
+
+ void
+ sendResponse(const Name& name,
+ uint32_t code,
+ const std::string& text);
+ void
+ onCommandError(const std::string& error,
+ const ndn::Interest& interest,
+ const PrefixRegOptions& options);
+
+ void
+ onRegSuccess(const ndn::Interest& interest, const PrefixRegOptions& options);
+
+ void
+ onUnRegSuccess(const ndn::Interest& interest, const PrefixRegOptions& options);
+
+ void
+ onControlHeaderSuccess();
+
+ void
+ onControlHeaderError();
+
+ void
+ insertEntry(const Interest& request, const PrefixRegOptions& options);
+
+ void
+ deleteEntry(const Interest& request, const PrefixRegOptions& options);
+
+ bool
+ extractOptions(const Interest& request,
+ PrefixRegOptions& extractedOptions);
+private:
+ Rib m_managedRib;
+ ndn::Face m_face;
+ ndn::KeyChain m_keyChain;
+ shared_ptr<nfd::Controller> m_nfdController;
+
+ typedef boost::function<void(Nrd*,
+ const Interest&,
+ const PrefixRegOptions&)> VerbProcessor;
+
+ typedef std::map<Name::Component, VerbProcessor> VerbDispatchTable;
+
+ typedef std::pair<Name::Component, VerbProcessor> VerbAndProcessor;
+
+
+ const VerbDispatchTable m_verbDispatch;
+
+ static const Name COMMAND_PREFIX; // /localhost/nrd
+
+ // number of components in an invalid, but not malformed, unsigned command.
+ // (/localhost/nrd + verb + options) = 4
+ static const size_t COMMAND_UNSIGNED_NCOMPS;
+
+ // number of components in a valid signed Interest.
+ // 5 in mock (see UNSIGNED_NCOMPS), 8 with signed Interest support.
+ static const size_t COMMAND_SIGNED_NCOMPS;
+
+ static const VerbAndProcessor COMMAND_VERBS[];
+};
+
+} // namespace nrd
+} // namespace ndn
+
+#endif // NRD_HPP
+