void ClientFace::request(const Interest& interest, const OnData& onData, const OnNack& onNack, const OnTimeout& onTimeout, const time::milliseconds& timeoutOverride) { PendingInterestList::iterator it = m_pendingInterests.insert(m_pendingInterests.end(), PendingInterest()); PendingInterest& pi = *it; pi.interest = interest; pi.onData = onData; pi.onNack = onNack; pi.onTimeout = onTimeout; time::milliseconds timeout = interest.getInterestLifetime(); if (timeout < time::milliseconds::zero()) { timeout = time::duration_cast<time::milliseconds>(DEFAULT_INTEREST_LIFETIME); } if (timeoutOverride > time::milliseconds::zero() && timeoutOverride < timeout) { // XXX hack! allow library and network use different timeout, // so that caller doesn't have to manage retx timeout = timeoutOverride; } pi.timeoutEvent = this->getScheduler().schedule(timeout, bind(&ClientFace::onInterestTimeout, this, it)); this->sendInterest(interest); this->trace(TraceEventKind::INTEREST_TO, interest, Nack::NONE); }