예제 #1
0
 void
 run()
 {
   try
     {
       m_face.expressInterest(createInterestPacket(),
                              ndn::func_lib::bind(&NdnTlvPeek::onData,
                                                  this, _1, _2),
                              ndn::func_lib::bind(&NdnTlvPeek::onTimeout,
                                                  this, _1));
       if (m_timeout < ndn::time::milliseconds::zero())
         {
           if (m_interestLifetime < ndn::time::milliseconds::zero())
             m_face.processEvents(getDefaultInterestLifetime());
           else
             m_face.processEvents(m_interestLifetime);
         }
       else
         m_face.processEvents(m_timeout);
     }
   catch (std::exception& e)
     {
       std::cerr << "ERROR: " << e.what() << "\n" << std::endl;
       exit(1);
     }
 }
예제 #2
0
 ndn::Interest
 createInterestPacket()
 {
   ndn::Name interestName(m_prefixName);
   ndn::Interest interestPacket(interestName);
   if (m_mustBeFresh)
     interestPacket.setMustBeFresh(true);
   if (m_isChildSelectorRightmost)
     interestPacket.setChildSelector(1);
   if (m_minSuffixComponents >= 0)
     interestPacket.setMinSuffixComponents(m_minSuffixComponents);
   if (m_maxSuffixComponents >= 0)
     interestPacket.setMaxSuffixComponents(m_maxSuffixComponents);
   if (m_interestLifetime < ndn::time::milliseconds::zero())
     interestPacket.setInterestLifetime(getDefaultInterestLifetime());
   else
     interestPacket.setInterestLifetime(m_interestLifetime);
   return interestPacket;
 }
  void
  generateTraffic( const boost::system::error_code& errorCode,
                   boost::asio::deadline_timer* deadlineTimer )
  {
    if ((interestCount_ < 0) || (totalInterestSent_ < interestCount_))
      {
        int trafficKey, patternId, cumulativePercentage;
        std::srand(std::time(0));
        trafficKey = std::rand() % 100;
        cumulativePercentage = 0;
        for (patternId=0; patternId<trafficPattern_.size(); patternId++)
          {
            cumulativePercentage += trafficPattern_[patternId].trafficPercentage;
            if (trafficKey <= cumulativePercentage)
              {
                Name interestName(trafficPattern_[patternId].name);
                if (trafficPattern_[patternId].nameAppendBytes > 0)
                  interestName.append(getRandomByteString(trafficPattern_[patternId].nameAppendBytes));
                if (trafficPattern_[patternId].nameAppendSequenceNumber >= 0)
                  {
                    interestName.append(toString(trafficPattern_[patternId].nameAppendSequenceNumber));
                    trafficPattern_[patternId].nameAppendSequenceNumber++;
                  }
                Interest interest(interestName);
                if (trafficPattern_[patternId].minSuffixComponents >= 0)
                  interest.setMinSuffixComponents(trafficPattern_[patternId].minSuffixComponents);
                if (trafficPattern_[patternId].maxSuffixComponents >= 0)
                  interest.setMaxSuffixComponents(trafficPattern_[patternId].maxSuffixComponents);
                Exclude exclude;
                if (trafficPattern_[patternId].excludeBefore != "" &&  trafficPattern_[patternId].excludeAfter != "")
                  {
                    exclude.excludeRange(name::Component(trafficPattern_[patternId].excludeAfter),
                                         name::Component(trafficPattern_[patternId].excludeBefore));
                    interest.setExclude(exclude);
                  }
                else if (trafficPattern_[patternId].excludeBefore != "")
                  {
                    exclude.excludeBefore(name::Component(trafficPattern_[patternId].excludeBefore));
                    interest.setExclude(exclude);
                  }
                else if (trafficPattern_[patternId].excludeAfter != "")
                  {
                    exclude.excludeAfter(name::Component(trafficPattern_[patternId].excludeAfter));
                    interest.setExclude(exclude);
                  }
                if (trafficPattern_[patternId].excludeBeforeBytes > 0 &&  trafficPattern_[patternId].excludeAfterBytes > 0)
                  {
                    exclude.excludeRange(name::Component(getRandomByteString(trafficPattern_[patternId].excludeAfterBytes)),
                                         name::Component(getRandomByteString(trafficPattern_[patternId].excludeBeforeBytes)));
                    interest.setExclude(exclude);
                  }
                else if (trafficPattern_[patternId].excludeBeforeBytes > 0)
                  {
                    exclude.excludeBefore(name::Component(getRandomByteString(trafficPattern_[patternId].excludeBeforeBytes)));
                    interest.setExclude(exclude);
                  }
                else if (trafficPattern_[patternId].excludeAfterBytes > 0)
                  {
                    exclude.excludeAfter(name::Component(getRandomByteString(trafficPattern_[patternId].excludeAfterBytes)));
                    interest.setExclude(exclude);
                  }

                if (trafficPattern_[patternId].childSelector >= 0)
                  interest.setChildSelector(trafficPattern_[patternId].childSelector);

                if (trafficPattern_[patternId].mustBeFresh == 0)
                  interest.setMustBeFresh(false);
                else if (trafficPattern_[patternId].mustBeFresh > 0)
                  interest.setMustBeFresh(true);
                if (trafficPattern_[patternId].nonceDuplicationPercentage > 0)
                  {
                    int duplicationKey;
                    std::srand(std::time(0));
                    duplicationKey = std::rand() % 100;
                    if (trafficPattern_[patternId].nonceDuplicationPercentage <= duplicationKey)
                      interest.setNonce(getOldNonce());
                    else
                      interest.setNonce(getNewNonce());
                  }
                else
                  interest.setNonce(getNewNonce());
                if (trafficPattern_[patternId].scope >= 0)
                  interest.setScope(trafficPattern_[patternId].scope);
                if (trafficPattern_[patternId].interestLifetime >= 0)
                  interest.setInterestLifetime(trafficPattern_[patternId].interestLifetime);
                else
                  interest.setInterestLifetime(getDefaultInterestLifetime());
                try {
                  totalInterestSent_++;
                  trafficPattern_[patternId].totalInterestSent++;
                  boost::posix_time::ptime sentTime;
                  sentTime = boost::posix_time::microsec_clock::local_time();
                  face_.expressInterest(interest,
                                        func_lib::bind( &NdnTrafficClient::onData,
                                                        this, boost::ref(face_),
                                                        _1, _2, totalInterestSent_,
                                                        trafficPattern_[patternId].totalInterestSent,
                                                        patternId,
                                                        sentTime),
                                        func_lib::bind( &NdnTrafficClient::onTimeout,
                                                        this, boost::ref(face_),
                                                        _1, totalInterestSent_,
                                                        trafficPattern_[patternId].totalInterestSent,
                                                        patternId));
                  std::string logLine;
                  logLine = "";
                  logLine += "Sending Interest   - PatternType="+toString(patternId+1);
                  logLine += ", GlobalID="+toString(totalInterestSent_);
                  logLine += ", LocalID="+toString(trafficPattern_[patternId].totalInterestSent);
                  logLine += ", Name="+interest.getName().toUri();
                  m_logger.log(logLine, true, false);
                  deadlineTimer->expires_at(deadlineTimer->expires_at() +
                                            boost::posix_time::millisec(interestInterval_));
                  deadlineTimer->async_wait(boost::bind(&NdnTrafficClient::generateTraffic,
                                                        this,
                                                        boost::asio::placeholders::error,
                                                        deadlineTimer));
                }
                catch (std::exception &e) {
                  m_logger.log("ERROR: "+(std::string)e.what(), true, true);
                }
                break;
              }
          }
        if (patternId==trafficPattern_.size())
          {
            deadlineTimer->expires_at(deadlineTimer->expires_at() +
                                      boost::posix_time::millisec(interestInterval_));
            deadlineTimer->async_wait(boost::bind(&NdnTrafficClient::generateTraffic,
                                                  this,
                                                  boost::asio::placeholders::error,
                                                  deadlineTimer));
          }
      }
  }