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