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); } }
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)); } } }