mgmt: moved signing into AppFace, code streamlining, and bug fixes
tests/management: improved callback validation
Fixed bad shared_ptr NULL checks
Fixed bad iterator decrement in InternalFace.sendInterest
Removed semi-useless constants in FibManager
Clarified ControlResponse text messages
Change-Id: Ic327a0b6b57827e401c7c3115d0ee92bae996a34
refs: #1138
diff --git a/daemon/mgmt/app-face.cpp b/daemon/mgmt/app-face.cpp
new file mode 100644
index 0000000..79bf39f
--- /dev/null
+++ b/daemon/mgmt/app-face.cpp
@@ -0,0 +1,17 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "app-face.hpp"
+
+namespace nfd {
+
+void
+AppFace::sign(Data& data)
+{
+ m_keyChain.sign(data);
+}
+
+} // namespace nfd
diff --git a/daemon/mgmt/app-face.hpp b/daemon/mgmt/app-face.hpp
index af58cdf..b6e2ab5 100644
--- a/daemon/mgmt/app-face.hpp
+++ b/daemon/mgmt/app-face.hpp
@@ -9,9 +9,11 @@
#include "common.hpp"
+#include <ndn-cpp-dev/security/key-chain.hpp>
+
namespace nfd {
-typedef ndn::func_lib::function<void(const Name&, const Interest&)> OnInterest;
+typedef function<void(const Name&, const Interest&)> OnInterest;
class AppFace
{
@@ -21,10 +23,16 @@
OnInterest onInterest) = 0;
virtual void
+ sign(Data& data);
+
+ virtual void
put(const Data& data) = 0;
virtual
~AppFace() { }
+
+protected:
+ ndn::KeyChain m_keyChain;
};
} // namespace nfd
diff --git a/daemon/mgmt/fib-manager.cpp b/daemon/mgmt/fib-manager.cpp
index 5885e48..69be19f 100644
--- a/daemon/mgmt/fib-manager.cpp
+++ b/daemon/mgmt/fib-manager.cpp
@@ -33,41 +33,34 @@
FibManager::FIB_MANAGER_COMMAND_UNSIGNED_NCOMPS +
0; // No signed Interest support in mock, otherwise 3 (timestamp, signed info tlv, signature tlv)
-const Name::Component FibManager::FIB_MANAGER_COMMAND_VERB_INSERT = "insert";
-const Name::Component FibManager::FIB_MANAGER_COMMAND_VERB_DELETE = "delete";
-const Name::Component FibManager::FIB_MANAGER_COMMAND_VERB_ADD_NEXTHOP = "add-nexthop";
-const Name::Component FibManager::FIB_MANAGER_COMMAND_VERB_REMOVE_NEXTHOP = "remove-nexthop";
-const Name::Component FibManager::FIB_MANAGER_COMMAND_VERB_STRATEGY = "strategy";
-
-
const FibManager::VerbAndProcessor FibManager::FIB_MANAGER_COMMAND_VERBS[] =
{
// Unsupported
// VerbAndProcessor(
- // FibManager::FIB_MANAGER_COMMAND_VERB_INSERT,
+ // "insert",
// &FibManager::fibInsert
// ),
// VerbAndProcessor(
- // FibManager::FIB_MANAGER_COMMAND_VERB_DELETE,
+ // "delete",
// &FibManager::fibDelete
// ),
VerbAndProcessor(
- FibManager::FIB_MANAGER_COMMAND_VERB_ADD_NEXTHOP,
+ "add-nexthop",
&FibManager::fibAddNextHop
),
// Unsupported
// VerbAndProcessor(
- // FibManager::FIB_MANAGER_COMMAND_VERB_REMOVE_NEXTHOP,
+ // "remove-nexthop",
// &FibManager::fibRemoveNextHop
// ),
// VerbAndProcessor(
- // FibManager::FIB_MANAGER_COMMAND_VERB_STRATEGY,
+ // "strategy",
// &FibManager::fibStrategy
// )
@@ -99,7 +92,7 @@
commandNComps < FIB_MANAGER_COMMAND_SIGNED_NCOMPS)
{
NFD_LOG_INFO("Unsigned command: " << command);
- sendResponse(command, 401, "SIGREQ");
+ sendResponse(command, 401, "Signature required");
return;
}
@@ -107,7 +100,7 @@
!FIB_MANAGER_COMMAND_PREFIX.isPrefixOf(command))
{
NFD_LOG_INFO("Malformed command: " << command);
- sendResponse(command, 400, "MALFORMED");
+ sendResponse(command, 400, "Malformed command");
return;
}
@@ -123,7 +116,7 @@
else
{
NFD_LOG_INFO("Unsupported command verb: " << verb);
- sendResponse(request.getName(), 404, "UNSUPPORTED");
+ sendResponse(request.getName(), 501, "Unsupported command");
}
}
@@ -160,7 +153,7 @@
catch (const ndn::Tlv::Error& e)
{
NFD_LOG_INFO("Bad command option parse: " << command);
- sendResponse(request.getName(), 400, "MALFORMED");
+ sendResponse(request.getName(), 400, "Malformed command");
return;
}
@@ -168,7 +161,7 @@
if (false)
{
NFD_LOG_INFO("Unauthorized command attempt: " << command);
- sendResponse(request.getName(), 403, "UNAUTHORIZED");
+ sendResponse(request.getName(), 403, "Unauthorized command");
return;
}
@@ -177,7 +170,7 @@
<< " Cost: " << options.getCost());
shared_ptr<Face> nextHopFace = m_getFace(options.getFaceId());
- if (nextHopFace != 0)
+ if (static_cast<bool>(nextHopFace))
{
std::pair<shared_ptr<fib::Entry>, bool> insertResult = m_managedFib.insert(options.getName());
insertResult.first->addNextHop(nextHopFace, options.getCost());
@@ -186,7 +179,7 @@
else
{
NFD_LOG_INFO("Unknown FaceId: " << command);
- sendResponse(request.getName(), 400, "MALFORMED");
+ sendResponse(request.getName(), 400, "Malformed command");
}
}
diff --git a/daemon/mgmt/fib-manager.hpp b/daemon/mgmt/fib-manager.hpp
index 60b2385..d77a2f2 100644
--- a/daemon/mgmt/fib-manager.hpp
+++ b/daemon/mgmt/fib-manager.hpp
@@ -55,8 +55,6 @@
function<shared_ptr<Face>(FaceId)> m_getFace;
std::map<Name, shared_ptr<fw::Strategy> > m_namespaceToStrategyMap;
-
-
typedef function<void(FibManager*,
const Interest&)> VerbProcessor;
@@ -77,12 +75,6 @@
// 5 in mock (see UNSIGNED_NCOMPS), 8 with signed Interest support.
static const size_t FIB_MANAGER_COMMAND_SIGNED_NCOMPS;
- static const Name::Component FIB_MANAGER_COMMAND_VERB_INSERT;
- static const Name::Component FIB_MANAGER_COMMAND_VERB_DELETE;
- static const Name::Component FIB_MANAGER_COMMAND_VERB_ADD_NEXTHOP;
- static const Name::Component FIB_MANAGER_COMMAND_VERB_REMOVE_NEXTHOP;
- static const Name::Component FIB_MANAGER_COMMAND_VERB_STRATEGY;
-
static const VerbAndProcessor FIB_MANAGER_COMMAND_VERBS[];
};
diff --git a/daemon/mgmt/internal-face.cpp b/daemon/mgmt/internal-face.cpp
index ec1baab..7af328f 100644
--- a/daemon/mgmt/internal-face.cpp
+++ b/daemon/mgmt/internal-face.cpp
@@ -44,7 +44,7 @@
// match or there is no matching prefix in the map.
- if (filter == m_interestFilters.end())
+ if (filter == m_interestFilters.end() && filter != m_interestFilters.begin())
{
// We hit the end, check if the previous element
// is a match
@@ -59,7 +59,7 @@
NFD_LOG_DEBUG("no Interest filter found for " << interestName << " (before end)");
}
}
- else if (filter->first.isPrefixOf(interestName))
+ else if (filter->first == interestName)
{
NFD_LOG_DEBUG("found Interest filter for " << filter->first << " (exact match)");
filter->second(interestName, interest);
diff --git a/daemon/mgmt/manager-base.cpp b/daemon/mgmt/manager-base.cpp
index 2b27f85..55787b6 100644
--- a/daemon/mgmt/manager-base.cpp
+++ b/daemon/mgmt/manager-base.cpp
@@ -40,7 +40,7 @@
Data response(name);
response.setContent(encodedControl);
- m_keyChain.sign(response);
+ m_face->sign(response);
m_face->put(response);
}
diff --git a/daemon/mgmt/manager-base.hpp b/daemon/mgmt/manager-base.hpp
index fd3bcef..d62b1c0 100644
--- a/daemon/mgmt/manager-base.hpp
+++ b/daemon/mgmt/manager-base.hpp
@@ -8,7 +8,7 @@
#define NFD_MGMT_MANAGER_BASE_HPP
#include "common.hpp"
-#include <ndn-cpp-dev/security/key-chain.hpp>
+
namespace nfd {
@@ -31,7 +31,6 @@
protected:
shared_ptr<AppFace> m_face;
- ndn::KeyChain m_keyChain;
};