示例#1
0
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);
}