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;