fw: honor NextHopFaceId universally

NextHopFaceId usage no longer depends on client-control strategy.

refs #3783

Change-Id: Ie49c453f90fa34b517b576fe401c8e4e8f23eab7
diff --git a/daemon/fw/forwarder.cpp b/daemon/fw/forwarder.cpp
index f0186f5..9ef3c75 100644
--- a/daemon/fw/forwarder.cpp
+++ b/daemon/fw/forwarder.cpp
@@ -201,6 +201,18 @@
   // set PIT unsatisfy timer
   this->setUnsatisfyTimer(pitEntry);
 
+  // has NextHopFaceId?
+  shared_ptr<lp::NextHopFaceIdTag> nextHopTag = interest.getTag<lp::NextHopFaceIdTag>();
+  if (nextHopTag != nullptr) {
+    // chosen NextHop face exists?
+    Face* nextHopFace = m_faceTable.get(*nextHopTag);
+    if (nextHopFace != nullptr) {
+      // go to outgoing Interest pipeline
+      this->onOutgoingInterest(pitEntry, *nextHopFace);
+    }
+    return;
+  }
+
   // dispatch to strategy: after incoming Interest
   this->dispatchToStrategy(*pitEntry,
     [&] (fw::Strategy& strategy) { strategy.afterReceiveInterest(inFace, interest, pitEntry); });