22 #ifndef NDN_DETAIL_PENDING_INTEREST_HPP 23 #define NDN_DETAIL_PENDING_INTEREST_HPP 25 #include "../data.hpp" 26 #include "../interest.hpp" 27 #include "../lp/nack.hpp" 28 #include "../util/scheduler-scoped-event-id.hpp" 48 return os <<
"forwarder";
77 : m_interest(
std::move(interest))
79 , m_dataCallback(dataCallback)
80 , m_nackCallback(nackCallback)
81 , m_timeoutCallback(timeoutCallback)
82 , m_timeoutEvent(scheduler)
85 scheduleTimeoutEvent(scheduler);
95 : m_interest(
std::move(interest))
97 , m_timeoutEvent(scheduler)
100 scheduleTimeoutEvent(scheduler);
106 shared_ptr<const Interest>
138 BOOST_ASSERT(m_nNotNacked >= 0);
141 m_leastSevereNack = nack;
144 return m_nNotNacked > 0 ?
nullopt : m_leastSevereNack;
154 if (m_dataCallback !=
nullptr) {
155 m_dataCallback(*m_interest, data);
166 if (m_nackCallback !=
nullptr) {
167 m_nackCallback(*m_interest, nack);
182 scheduleTimeoutEvent(
Scheduler& scheduler)
184 m_timeoutEvent = scheduler.
scheduleEvent(m_interest->getInterestLifetime(),
185 [=] { this->invokeTimeoutCallback(); });
192 invokeTimeoutCallback()
194 if (m_timeoutCallback) {
195 m_timeoutCallback(*m_interest);
198 BOOST_ASSERT(m_deleter);
203 shared_ptr<const Interest> m_interest;
208 util::scheduler::ScopedEventId m_timeoutEvent;
210 optional<lp::Nack> m_leastSevereNack;
211 std::function<void()> m_deleter;
217 class PendingInterestId;
227 : m_id(pendingInterestId)
232 operator()(
const shared_ptr<const PendingInterest>& pendingInterest)
const 234 return reinterpret_cast<const PendingInterestId*
>(pendingInterest->getInterest().get()) == m_id;
238 const PendingInterestId* m_id;
243 #endif // NDN_DETAIL_PENDING_INTEREST_HPP constexpr nullopt_t nullopt
Copyright (c) 2011-2015 Regents of the University of California.
shared_ptr< const Interest > getInterest() const
Get the Interest.
std::ostream & operator<<(std::ostream &os, const Data &data)
void setDeleter(const std::function< void()> &deleter)
Set cleanup function to be invoked when Interest times out.
optional< lp::Nack > recordNack(const lp::Nack &nack)
Record an incoming Nack against a forwarded Interest.
EventId scheduleEvent(const time::nanoseconds &after, const Event &event)
Schedule a one-time event after the specified delay.
Functor to match PendingInterestId.
represents a Network Nack
NackReason getReason() const
bool operator()(const shared_ptr< const PendingInterest > &pendingInterest) const
void invokeNackCallback(const lp::Nack &nack)
Invoke the Nack callback.
void recordForwarding()
Record that the Interest has been forwarded to one destination.
PendingInterest(shared_ptr< const Interest > interest, const DataCallback &dataCallback, const NackCallback &nackCallback, const TimeoutCallback &timeoutCallback, Scheduler &scheduler)
Construct a pending Interest record for an Interest from Face::expressInterest.
MatchPendingInterestId(const PendingInterestId *pendingInterestId)
PendingInterestOrigin
Indicates where a pending Interest came from.
Interest was received from the forwarder via Transport.
Interest was received from this app via Face::expressInterest API.
function< void(const Interest &)> TimeoutCallback
Callback invoked when expressed Interest times out.
function< void(const Interest &, const lp::Nack &)> NackCallback
Callback invoked when Nack is sent in response to expressed Interest.
PendingInterestOrigin getOrigin() const
Represents a Data packet.
bool isLessSevere(lp::NackReason x, lp::NackReason y)
compare NackReason for severity
Stores a pending Interest and associated callbacks.
PendingInterest(shared_ptr< const Interest > interest, Scheduler &scheduler)
Construct a pending Interest record for an Interest from NFD.
function< void(const Interest &, const Data &)> DataCallback
Callback invoked when expressed Interest gets satisfied with a Data packet.
void invokeDataCallback(const Data &data)
Invoke the Data callback.