[experimental] Allow strategy to expire PIT entry

This somewhat duplicates logic in the Forwarder, but may be needed in
certain cases.

Change-Id: I05bceb86024579153d72bf0e41ca48e89790a209
diff --git a/daemon/fw/strategy.cpp b/daemon/fw/strategy.cpp
index 7cf73ad..27ca68c 100644
--- a/daemon/fw/strategy.cpp
+++ b/daemon/fw/strategy.cpp
@@ -272,7 +272,15 @@
     data2.setTag(pitToken);
     return m_forwarder.onOutgoingData(data2, egress);
   }
-  return m_forwarder.onOutgoingData(data, egress);
+  m_forwarder.onOutgoingData(data, egress);
+
+  if (pitEntry->getInRecords().empty()) { // if nothing left, "closing down" the entry
+    // set PIT expiry timer to now
+    m_forwarder.setExpiryTimer(pitEntry, 0_ms);
+
+    // mark PIT satisfied
+    pitEntry->isSatisfied = true;
+  }
 }
 
 void
@@ -295,6 +303,14 @@
   for (const auto& pendingDownstream : pendingDownstreams) {
     this->sendData(data, *pendingDownstream, pitEntry);
   }
+
+  pitEntry->clearInRecords();
+
+  // set PIT expiry timer to now
+  m_forwarder.setExpiryTimer(pitEntry, 0_ms);
+
+  // mark PIT satisfied
+  pitEntry->isSatisfied = true;
 }
 
 void