face: Refactored code to set interest filter
Change-Id: I1f9637a79c03a9e24608403d963bbfc4d9bcab1c
diff --git a/src/detail/pending-interest.hpp b/src/detail/pending-interest.hpp
new file mode 100644
index 0000000..85acb23
--- /dev/null
+++ b/src/detail/pending-interest.hpp
@@ -0,0 +1,112 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/**
+ * Copyright (C) 2013 Regents of the University of California.
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NDN_DETAIL_PENDING_INTEREST_HPP
+#define NDN_DETAIL_PENDING_INTEREST_HPP
+
+#include "../common.hpp"
+#include "../interest.hpp"
+#include "../data.hpp"
+#include "../util/time.hpp"
+
+namespace ndn {
+
+class PendingInterest {
+public:
+ typedef function<void(const shared_ptr<const Interest>&, const shared_ptr<Data>&)> OnData;
+ typedef function<void(const shared_ptr<const Interest>&)> OnTimeout;
+
+ /**
+ * Create a new PitEntry and set the timeoutTime_ based on the current time and the interest lifetime.
+ * @param interest A shared_ptr for the interest.
+ * @param onData A function object to call when a matching data packet is received.
+ * @param onTimeout A function object to call if the interest times out. If onTimeout is an empty OnTimeout(), this does not use it.
+ */
+ PendingInterest(const shared_ptr<const Interest>& interest, const OnData& onData,
+ const OnTimeout& onTimeout)
+ : interest_(interest),
+ onData_(onData), onTimeout_(onTimeout)
+ {
+ // Set up timeoutTime_.
+ if (interest_->getInterestLifetime() >= 0)
+ timeoutTimeMilliseconds_ = getNowMilliseconds() + interest_->getInterestLifetime();
+ else
+ // No timeout.
+ /**
+ * @todo Set more meaningful default timeout. This timeout MUST exist.
+ */
+ timeoutTimeMilliseconds_ = getNowMilliseconds() + 4000;
+ }
+
+ const shared_ptr<const Interest>&
+ getInterest()
+ {
+ return interest_;
+ }
+
+ const OnData&
+ getOnData()
+ {
+ return onData_;
+ }
+
+ /**
+ * Check if this interest is timed out.
+ * @param nowMilliseconds The current time in milliseconds from getNowMilliseconds.
+ * @return true if this interest timed out, otherwise false.
+ */
+ bool
+ isTimedOut(MillisecondsSince1970 nowMilliseconds)
+ {
+ return timeoutTimeMilliseconds_ >= 0.0 && nowMilliseconds >= timeoutTimeMilliseconds_;
+ }
+
+ /**
+ * Call onTimeout_ (if defined). This ignores exceptions from the onTimeout_.
+ */
+ void
+ callTimeout()
+ {
+ if (onTimeout_) {
+ onTimeout_(interest_);
+ }
+ }
+
+private:
+ shared_ptr<const Interest> interest_;
+ const OnData onData_;
+ const OnTimeout onTimeout_;
+
+ /** The time when the interest times out in milliseconds according to getNowMilliseconds, or -1 for no timeout. */
+ MillisecondsSince1970 timeoutTimeMilliseconds_;
+};
+
+
+struct PendingInterestId;
+
+/**
+ * @brief Functor to match pending interests against PendingInterestId
+ */
+struct MatchPendingInterestId
+{
+ MatchPendingInterestId(const PendingInterestId *pendingInterestId)
+ : id_(pendingInterestId)
+ {
+ }
+
+ bool
+ operator()(const shared_ptr<const PendingInterest> &pendingInterest) const
+ {
+ return (reinterpret_cast<const PendingInterestId *>(pendingInterest.get()) == id_);
+ }
+private:
+ const PendingInterestId *id_;
+};
+
+
+} // namespace ndn
+
+#endif // NDN_DETAIL_PENDING_INTEREST_HPP
diff --git a/src/detail/registered-prefix.hpp b/src/detail/registered-prefix.hpp
new file mode 100644
index 0000000..5cb5523
--- /dev/null
+++ b/src/detail/registered-prefix.hpp
@@ -0,0 +1,72 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/**
+ * Copyright (C) 2013 Regents of the University of California.
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NDN_DETAIL_REGISTERED_PREFIX_HPP
+#define NDN_DETAIL_REGISTERED_PREFIX_HPP
+
+#include "../common.hpp"
+#include "../interest.hpp"
+
+namespace ndn {
+
+class RegisteredPrefix {
+public:
+ typedef function<void
+ (const shared_ptr<const Name>&, const shared_ptr<const Interest>&)> OnInterest;
+
+ /**
+ * Create a new PrefixEntry.
+ * @param prefix A shared_ptr for the prefix.
+ * @param onInterest A function object to call when a matching data packet is received.
+ */
+ RegisteredPrefix(const Name& prefix, const OnInterest& onInterest)
+ : prefix_(new Name(prefix))
+ , onInterest_(onInterest)
+ {
+ }
+
+ const Name&
+ getPrefix() const
+ {
+ return *prefix_;
+ }
+
+ const OnInterest&
+ getOnInterest() const
+ {
+ return onInterest_;
+ }
+
+private:
+ shared_ptr<Name> prefix_;
+ const OnInterest onInterest_;
+};
+
+
+struct RegisteredPrefixId;
+
+/**
+ * @brief Functor to match pending interests against PendingInterestId
+ */
+struct MatchRegisteredPrefixId
+{
+ MatchRegisteredPrefixId(const RegisteredPrefixId *registeredPrefixId)
+ : id_(registeredPrefixId)
+ {
+ }
+
+ bool
+ operator()(const shared_ptr<RegisteredPrefix> ®isteredPrefix) const
+ {
+ return (reinterpret_cast<const RegisteredPrefixId *>(registeredPrefix.get()) == id_);
+ }
+private:
+ const RegisteredPrefixId *id_;
+};
+
+} // namespace ndn
+
+#endif // NDN_DETAIL_REGISTERED_PREFIX_HPP