Transition to v0.3 format

Set CanBePrefix on interests
Remove remaining exclude filter logic

refs: #4691, #4684

Change-Id: I6d1b23ba9973f5b54ba49e5122b18ac0d9f88720
diff --git a/src/logic.cpp b/src/logic.cpp
index ab0b794..35480ee 100644
--- a/src/logic.cpp
+++ b/src/logic.cpp
@@ -360,8 +360,7 @@
   else if (name.size() >= 2 && RECOVERY_COMPONENT == name.get(-2)) {
     processRecoveryInterest(interest);
   }
-  // Do not process exclude interests, they should be answered by CS
-  else if (interest.getExclude().empty()) {
+  else {
     processSyncInterest(interest);
   }
 
@@ -379,22 +378,12 @@
 Logic::onSyncData(const Interest& interest, const Data& data)
 {
   _LOG_DEBUG_ID(">> Logic::onSyncData");
-  // if (static_cast<bool>(m_validator))
-  //   m_validator->validate(data,
-  //                         bind(&Logic::onSyncDataValidated, this, _1),
-  //                         bind(&Logic::onSyncDataValidationFailed, this, _1));
-  // else
-  //   onSyncDataValidated(data);
-
-  if (interest.getExclude().empty()) {
-    _LOG_DEBUG_ID("First data");
-    onSyncDataValidated(data);
-  }
-  else {
-    _LOG_DEBUG_ID("Data obtained using exclude filter");
-    onSyncDataValidated(data, false);
-  }
-  // sendExcludeInterest(interest, data);
+  if (m_validator != nullptr)
+    m_validator->validate(data,
+                          bind(&Logic::onSyncDataValidated, this, _1),
+                          bind(&Logic::onSyncDataValidationFailed, this, _1));
+  else
+     onSyncDataValidated(data);
 
   _LOG_DEBUG_ID("<< Logic::onSyncData");
 }
@@ -421,7 +410,7 @@
 }
 
 void
-Logic::onSyncDataValidated(const Data& data, bool firstData)
+Logic::onSyncDataValidated(const Data& data)
 {
   Name name = data.getName();
   ConstBufferPtr digest = make_shared<ndn::Buffer>(name.get(-1).value(), name.get(-1).value_size());
@@ -429,7 +418,7 @@
   try {
     auto contentBuffer = bzip2::decompress(reinterpret_cast<const char*>(data.getContent().value()),
                                            data.getContent().value_size());
-    processSyncData(name, digest, Block(contentBuffer), firstData);
+    processSyncData(name, digest, Block(std::move(contentBuffer)));
   }
   catch (const std::ios_base::failure& error) {
     _LOG_WARN("Error decompressing content of " << data.getName() << " (" << error.what() << ")");
@@ -526,8 +515,7 @@
 void
 Logic::processSyncData(const Name& name,
                        ConstBufferPtr digest,
-                       const Block& syncReplyBlock,
-                       bool firstData)
+                       const Block& syncReplyBlock)
 {
   _LOG_DEBUG_ID(">> Logic::processSyncData");
   DiffStatePtr commit = make_shared<DiffState>();
@@ -577,7 +565,7 @@
     return;
   }
 
-  if (static_cast<bool>(commit) && !commit->getLeaves().empty() && firstData) {
+  if (static_cast<bool>(commit) && !commit->getLeaves().empty()) {
     // state changed and it is safe to express a new interest
     time::steady_clock::Duration after = time::milliseconds(m_reexpressionJitter(m_rng));
     _LOG_DEBUG_ID("Reschedule sync interest after: " << after);
@@ -644,6 +632,7 @@
 
   Interest interest(m_syncReset);
   interest.setMustBeFresh(true);
+  interest.setCanBePrefix(false); // no data is expected
   interest.setInterestLifetime(m_resetInterestLifetime);
   const ndn::PendingInterestId* pendingInterestId = m_face.expressInterest(interest,
     bind(&Logic::onResetData, this, _1, _2),
@@ -681,6 +670,7 @@
 
   Interest interest(interestName);
   interest.setMustBeFresh(true);
+  interest.setCanBePrefix(true);
   interest.setInterestLifetime(m_syncInterestLifetime);
 
   if (m_outstandingInterestId != nullptr) {
@@ -815,6 +805,7 @@
 
   Interest interest(interestName);
   interest.setMustBeFresh(true);
+  interest.setCanBePrefix(true);
   interest.setInterestLifetime(m_recoveryInterestLifetime);
 
   const ndn::PendingInterestId* pendingInterestId = m_face.expressInterest(interest,
diff --git a/src/logic.hpp b/src/logic.hpp
index f901bb4..a71080f 100644
--- a/src/logic.hpp
+++ b/src/logic.hpp
@@ -315,10 +315,9 @@
    * This method simply passes the valid reply to processSyncData.
    *
    * @param data The valid Sync Reply.
-   * @param firstData Whether the data is new or that obtained using exclude filter
    */
   void
-  onSyncDataValidated(const Data& data, bool firstData = true);
+  onSyncDataValidated(const Data& data);
 
   /**
    * @brief Process normal Sync Interest
@@ -355,13 +354,11 @@
    * @param name           The data name of the Sync Reply.
    * @param digest         The digest in the data name.
    * @param syncReplyBlock The content of the Sync Reply.
-   * @param firstData      Whether the data is new or obtained using exclude filter
    */
   void
   processSyncData(const Name& name,
                   ConstBufferPtr digest,
-                  const Block& syncReplyBlock,
-                  bool firstData);
+                  const Block& syncReplyBlock);
 
   /**
    * @brief Insert state diff into log
diff --git a/src/socket.cpp b/src/socket.cpp
index 4468fb7..02725f2 100644
--- a/src/socket.cpp
+++ b/src/socket.cpp
@@ -177,6 +177,7 @@
 
   Interest interest(interestName);
   interest.setMustBeFresh(true);
+  interest.setCanBePrefix(false);
 
   DataValidationErrorCallback failureCallback =
     bind(&Socket::onDataValidationFailed, this, _1, _2);
@@ -202,6 +203,7 @@
 
   Interest interest(interestName);
   interest.setMustBeFresh(true);
+  interest.setCanBePrefix(false);
 
   m_face.expressInterest(interest,
                          bind(&Socket::onData, this, _1, _2, dataCallback, failureCallback),