validator: integrate validator-config for data validation
Change-Id: I782964f8d6ce9134b2b849425a13b82aef741e2f
refs #1479
diff --git a/src/handles/write-handle.cpp b/src/handles/write-handle.cpp
index 91557f3..07a5664 100644
--- a/src/handles/write-handle.cpp
+++ b/src/handles/write-handle.cpp
@@ -47,8 +47,8 @@
WriteHandle::onInterest(const Name& prefix, const Interest& interest)
{
m_validator.validate(interest,
- bind(&WriteHandle::onValidated, this, _1, prefix),
- bind(&WriteHandle::onValidationFailed, this, _1, _2));
+ bind(&WriteHandle::onValidated, this, _1, prefix),
+ bind(&WriteHandle::onValidationFailed, this, _1, _2));
}
void
@@ -61,6 +61,7 @@
void
WriteHandle::onRegisterFailed(const Name& prefix, const std::string& reason)
{
+ std::cerr << reason << std::endl;
throw Error("Insert prefix registration failed");
}
@@ -68,6 +69,7 @@
void
WriteHandle::onCheckRegisterFailed(const Name& prefix, const std::string& reason)
{
+ std::cerr << reason << std::endl;
throw Error("Insert check prefix registration failed");
}
@@ -107,6 +109,15 @@
void
WriteHandle::onData(const Interest& interest, ndn::Data& data, ProcessId processId)
{
+ m_validator.validate(data,
+ bind(&WriteHandle::onDataValidated, this, interest, _1, processId),
+ bind(&WriteHandle::onDataValidationFailed, this, _1, _2));
+}
+
+void
+WriteHandle::onDataValidated(const Interest& interest, const shared_ptr<const Data>& data,
+ ProcessId processId)
+{
if (m_processes.count(processId) == 0) {
return;
}
@@ -115,7 +126,7 @@
RepoCommandResponse& response = process.response;
if (response.getInsertNum() == 0) {
- getStorageHandle().insertData(data);
+ getStorageHandle().insertData(*data);
response.setInsertNum(1);
}
@@ -123,15 +134,31 @@
}
void
+WriteHandle::onDataValidationFailed(const shared_ptr<const Data>& data, const std::string& reason)
+{
+ std::cerr << reason << std::endl;
+}
+
+void
WriteHandle::onSegmentData(const Interest& interest, Data& data, ProcessId processId)
{
+ m_validator.validate(data,
+ bind(&WriteHandle::onSegmentDataValidated, this, interest, _1, processId),
+ bind(&WriteHandle::onDataValidationFailed, this, _1, _2));
+}
+
+void
+WriteHandle::onSegmentDataValidated(const Interest& interest,
+ const shared_ptr<const Data>& data,
+ ProcessId processId)
+{
if (m_processes.count(processId) == 0) {
return;
}
RepoCommandResponse& response = m_processes[processId].response;
//refresh endBlockId
- Name::Component finalBlockId = data.getFinalBlockId();
+ Name::Component finalBlockId = data->getFinalBlockId();
if (!finalBlockId.empty()) {
SegmentNo final = finalBlockId.toSegment();
@@ -146,7 +173,7 @@
}
//insert data
- if (getStorageHandle().insertData(data)) {
+ if (getStorageHandle().insertData(*data)) {
response.setInsertNum(response.getInsertNum() + 1);
}
@@ -367,8 +394,8 @@
WriteHandle::onCheckInterest(const Name& prefix, const Interest& interest)
{
m_validator.validate(interest,
- bind(&WriteHandle::onCheckValidated, this, _1, prefix),
- bind(&WriteHandle::onCheckValidationFailed, this, _1));
+ bind(&WriteHandle::onCheckValidated, this, _1, prefix),
+ bind(&WriteHandle::onCheckValidationFailed, this, _1, _2));
}
@@ -419,8 +446,10 @@
}
void
-WriteHandle::onCheckValidationFailed(const shared_ptr<const Interest>& interest)
+WriteHandle::onCheckValidationFailed(const shared_ptr<const Interest>& interest,
+ const std::string& reason)
{
+ std::cerr << reason << std::endl;
negativeReply(*interest, 401);
}
diff --git a/src/handles/write-handle.hpp b/src/handles/write-handle.hpp
index 1fe147a..8638a23 100644
--- a/src/handles/write-handle.hpp
+++ b/src/handles/write-handle.hpp
@@ -128,6 +128,10 @@
void
onData(const Interest& interest, Data& data, ProcessId processId);
+ void
+ onDataValidated(const Interest& interest, const shared_ptr<const Data>& data,
+ ProcessId processId);
+
/**
* @brief handle when fetching one data timeout
*/
@@ -144,6 +148,10 @@
void
onSegmentData(const Interest& interest, Data& data, ProcessId processId);
+ void
+ onSegmentDataValidated(const Interest& interest, const shared_ptr<const Data>& data,
+ ProcessId processId);
+
/**
* @brief Timeout when fetching segmented data. Data can be fetched RETRY_TIMEOUT times.
*/
@@ -171,6 +179,13 @@
void
processSegmentedInsertCommand(const Interest& interest, RepoCommandParameter& parameter);
+private:
+ /**
+ * @brief failure of validation for both one or segmented data
+ */
+ void
+ onDataValidationFailed(const shared_ptr<const Data>& data, const std::string& reason);
+
/**
* @brief extends noEndTime of process if not noEndTimeout, set StatusCode 405
*
@@ -197,7 +212,7 @@
onCheckValidated(const shared_ptr<const Interest>& interest, const Name& prefix);
void
- onCheckValidationFailed(const shared_ptr<const Interest>& interest);
+ onCheckValidationFailed(const shared_ptr<const Interest>& interest, const std::string& reason);
private:
void