fw: make strategies understand scope

refs #1253

Change-Id: I57f7a6008e6f08c9817e58f480020eb9219a4aec
diff --git a/daemon/table/pit-entry.hpp b/daemon/table/pit-entry.hpp
index 1e342e2..e72365b 100644
--- a/daemon/table/pit-entry.hpp
+++ b/daemon/table/pit-entry.hpp
@@ -64,10 +64,23 @@
   /** \brief decides whether Interest can be forwarded to face
    *
    *  \return true if OutRecord of this face does not exist or has expired,
-   *          and there is an InRecord not of this face
+   *          and there is an InRecord not of this face,
+   *          and scope is not violated
    */
   bool
-  canForwardTo(shared_ptr<Face> face) const;
+  canForwardTo(const Face& face) const;
+
+  /** \brief decides whether forwarding Interest to face would violate scope
+   *
+   *  \return true if scope control would be violated
+   *  \note canForwardTo has more comprehensive checks (including scope control)
+   *        and should be used by most strategies. Outgoing Interest pipeline
+   *        should only check scope because some strategy (eg. vehicular) needs
+   *        to retransmit sooner than OutRecord expiry, or forward Interest
+   *        back to incoming face
+   */
+  bool
+  violatesScope(const Face& face) const;
 
   /** \brief records a nonce
    *
@@ -101,6 +114,11 @@
   void
   deleteOutRecord(shared_ptr<Face> face);
 
+  /** \return true if there is one or more unexpired OutRecords
+   */
+  bool
+  hasUnexpiredOutRecords() const;
+
 public:
   EventId m_unsatisfyTimer;
   EventId m_stragglerTimer;
@@ -110,6 +128,10 @@
   const Interest m_interest;
   InRecordCollection m_inRecords;
   OutRecordCollection m_outRecords;
+
+  static const Name LOCALHOST_NAME;
+  static const Name LOCALHOP_NAME;
+
   shared_ptr<name_tree::Entry> m_nameTreeEntry;
 
   friend class nfd::NameTree;