Development Complete, README File To Be Updated
diff --git a/NDNTrafficServer.sample.conf b/NDNTrafficServer.sample.conf
new file mode 100644
index 0000000..2bdfb24
--- /dev/null
+++ b/NDNTrafficServer.sample.conf
@@ -0,0 +1,20 @@
+#
+#Name
+#
+#ContentType
+#
+#FreshnessPeriod
+#
+#ContentBytes
+#Content
+#
+##########
+#Name=/example
+#ContentType=1
+#ContentBytes=10
+##########
+Name=/example/A
+ContentType=0
+FreshnessPeriod=0
+Content=NoData
+##########
diff --git a/ndn-traffic-client.cpp b/ndn-traffic-client.cpp
index 6df1ed1..b617b1c 100644
--- a/ndn-traffic-client.cpp
+++ b/ndn-traffic-client.cpp
@@ -10,8 +10,8 @@
#include <fstream>
#include <vector>
#include <boost/asio.hpp>
-#include <boost/filesystem.hpp>
#include <boost/bind.hpp>
+#include <boost/filesystem.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <ndn-cpp-dev/face.hpp>
@@ -34,7 +34,10 @@
shutdownLogger()
{
if (logFile_.is_open())
+ {
+ log("Terminating Logging Operations" , true, true);
logFile_.close();
+ }
}
static std::string
@@ -118,7 +121,7 @@
{
public:
- NdnTrafficClient( char* programName ) : ioService_(new boost::asio::io_service), face_(ioService_)
+ NdnTrafficClient( char* programName ) : ioService_(new boost::asio::io_service), face_(ioService_), keyChain_()
{
std::srand(std::time(0));
instanceId_ = toString(std::rand());
@@ -133,11 +136,6 @@
totalInterestRoundTripTime_ = 0;
}
- NdnTrafficClient()
- : keyChain_()
- {
- }
-
class InterestTrafficConfiguration
{
public:
@@ -158,7 +156,7 @@
mustBeFresh = -1;
nonceDuplicationPercentage = -1;
scope = -1;
- interestLifetime = getDefaultInterestLifetime();
+ interestLifetime = -1;
totalInterestSent = 0;
totalInterestReceived = 0;
minimumInterestRoundTripTime = std::numeric_limits<double>::max();
@@ -166,12 +164,6 @@
totalInterestRoundTripTime = 0;
}
- int
- getDefaultInterestLifetime()
- {
- return 4000;
- }
-
void
printTrafficConfiguration( Logger& logger )
{
@@ -181,13 +173,13 @@
detail += "TrafficPercentage="+toString(trafficPercentage)+", ";
if (name != "")
detail += "Name="+name+", ";
- if (nameAppendBytes>0)
+ if (nameAppendBytes > 0)
detail += "NameAppendBytes="+toString(nameAppendBytes)+", ";
- if (nameAppendSequenceNumber>0)
+ if (nameAppendSequenceNumber > 0)
detail += "NameAppendSequenceNumber="+toString(nameAppendSequenceNumber)+", ";
- if (minSuffixComponents>0)
+ if (minSuffixComponents >= 0)
detail += "MinSuffixComponents="+toString(minSuffixComponents)+", ";
- if (maxSuffixComponents>0)
+ if (maxSuffixComponents >= 0)
detail += "MaxSuffixComponents="+toString(maxSuffixComponents)+", ";
if (excludeBefore != "")
detail += "ExcludeBefore="+excludeBefore+", ";
@@ -197,15 +189,15 @@
detail += "ExcludeBeforeBytes="+toString(excludeBeforeBytes)+", ";
if (excludeAfterBytes > 0)
detail += "ExcludeAfterBytes="+toString(excludeAfterBytes)+", ";
- if (childSelector > 0)
+ if (childSelector >= 0)
detail += "ChildSelector="+toString(childSelector)+", ";
- if (mustBeFresh > 0)
+ if (mustBeFresh >= 0)
detail += "MustBeFresh="+toString(mustBeFresh)+", ";
if (nonceDuplicationPercentage > 0)
detail += "NonceDuplicationPercentage="+toString(nonceDuplicationPercentage)+", ";
- if (scope > 0)
+ if (scope >= 0)
detail += "Scope="+toString(scope)+", ";
- if (interestLifetime > 0)
+ if (interestLifetime >= 0)
detail += "InterestLifetime="+toString(interestLifetime)+", ";
if (detail.length() >= 0)
detail = detail.substr(0, detail.length()-2);
@@ -314,6 +306,12 @@
};
+ int
+ getDefaultInterestLifetime()
+ {
+ return 4000;
+ }
+
static std::string
toString( int integerValue )
{
@@ -322,6 +320,14 @@
return stream.str();
}
+ static std::string
+ toString( double doubleValue )
+ {
+ std::stringstream stream;
+ stream << doubleValue;
+ return stream.str();
+ }
+
static int
toInteger( std::string stringValue )
{
@@ -379,9 +385,56 @@
logger_.shutdownLogger();
face_.shutdown();
ioService_.reset();
+ logStatistics();
exit(1);
}
+ void
+ logStatistics()
+ {
+ int patternId;
+ double loss, average;
+
+ logger_.log("\n\n== Interest Traffic Report ==\n", false, true);
+ logger_.log("Total Traffic Pattern Types = "+toString((int)trafficPattern_.size()), false, true);
+ logger_.log("Total Interests Sent = "+toString(totalInterestSent_), false, true);
+ logger_.log("Total Responses Received = "+toString(totalInterestReceived_), false, true);
+ if (totalInterestSent_ > 0)
+ loss = (totalInterestSent_-totalInterestReceived_)*100.0/totalInterestSent_;
+ else
+ loss = 0;
+ logger_.log("Total Interest Loss = "+toString(loss)+"%", false, true);
+ if (totalInterestReceived_ > 0)
+ average = totalInterestRoundTripTime_/totalInterestReceived_;
+ else
+ average = 0;
+ logger_.log("Total Round Trip Time = "+toString(totalInterestRoundTripTime_)+"ms", false, true);
+ logger_.log("Average Round Trip Time = "+toString(average)+"ms\n", false, true);
+
+ for (patternId=0; patternId<trafficPattern_.size(); patternId++)
+ {
+ logger_.log("Traffic Pattern Type #"+toString(patternId+1), false, true);
+ trafficPattern_[patternId].printTrafficConfiguration(logger_);
+ logger_.log("Total Interests Sent = "+toString(trafficPattern_[patternId].totalInterestSent), false, true);
+ logger_.log("Total Responses Received = "+toString(trafficPattern_[patternId].totalInterestReceived), false, true);
+ if (trafficPattern_[patternId].totalInterestSent > 0)
+ {
+ loss = (trafficPattern_[patternId].totalInterestSent-trafficPattern_[patternId].totalInterestReceived);
+ loss *= 100.0;
+ loss /= trafficPattern_[patternId].totalInterestSent;
+ }
+ else
+ loss = 0;
+ logger_.log("Total Interest Loss = "+toString(loss)+"%", false, true);
+ if (trafficPattern_[patternId].totalInterestReceived > 0)
+ average = trafficPattern_[patternId].totalInterestRoundTripTime/trafficPattern_[patternId].totalInterestReceived;
+ else
+ average = 0;
+ logger_.log("Total Round Trip Time = "+toString(trafficPattern_[patternId].totalInterestRoundTripTime)+"ms", false, true);
+ logger_.log("Average Round Trip Time = "+toString(average)+"ms\n", false, true);
+ }
+ }
+
bool
checkTrafficPatternCorrectness()
{
@@ -439,8 +492,13 @@
logger_.shutdownLogger();
exit(1);
}
- for (patternId = 0; patternId < trafficPattern_.size(); patternId++)
+ logger_.log("Traffic Configuration File Processing Completed\n", true, false);
+ for (patternId=0; patternId<trafficPattern_.size(); patternId++)
+ {
+ logger_.log("Traffic Pattern Type #"+toString(patternId+1), false, false);
trafficPattern_[patternId].printTrafficConfiguration(logger_);
+ logger_.log("", false, false);
+ }
}
else
{
@@ -547,6 +605,8 @@
trafficPattern_[patternId].maximumInterestRoundTripTime = roundTripTime;
totalInterestRoundTripTime_ += roundTripTime;
trafficPattern_[patternId].totalInterestRoundTripTime += roundTripTime;
+ if (totalInterestSent_ == interestCount_)
+ signalHandler();
}
void
@@ -563,6 +623,8 @@
logLine += ", PatternID="+toString(patternId);
logLine += ", Name="+interest.getName().toUri();
logger_.log(logLine, true, false);
+ if (totalInterestSent_ == interestCount_)
+ signalHandler();
}
void
@@ -575,7 +637,6 @@
std::srand(std::time(0));
trafficKey = std::rand() % 100;
cumulativePercentage = 0;
- std::cout << trafficKey << std::endl;
for (patternId=0; patternId<trafficPattern_.size(); patternId++)
{
cumulativePercentage += trafficPattern_[patternId].trafficPercentage;
@@ -590,9 +651,9 @@
trafficPattern_[patternId].nameAppendSequenceNumber++;
}
Interest interest(interestName);
- if (trafficPattern_[patternId].minSuffixComponents > 0)
+ if (trafficPattern_[patternId].minSuffixComponents >= 0)
interest.setMinSuffixComponents(trafficPattern_[patternId].minSuffixComponents);
- if (trafficPattern_[patternId].maxSuffixComponents > 0)
+ if (trafficPattern_[patternId].maxSuffixComponents >= 0)
interest.setMaxSuffixComponents(trafficPattern_[patternId].maxSuffixComponents);
Exclude exclude;
if (trafficPattern_[patternId].excludeBefore != "" && trafficPattern_[patternId].excludeAfter != "")
@@ -633,7 +694,7 @@
if (trafficPattern_[patternId].mustBeFresh == 0)
interest.setMustBeFresh(false);
- else if (trafficPattern_[patternId].mustBeFresh == 1)
+ else if (trafficPattern_[patternId].mustBeFresh > 0)
interest.setMustBeFresh(true);
if (trafficPattern_[patternId].nonceDuplicationPercentage > 0)
{
@@ -649,8 +710,10 @@
interest.setNonce(getNewNonce());
if (trafficPattern_[patternId].scope >= 0)
interest.setScope(trafficPattern_[patternId].scope);
- if (trafficPattern_[patternId].interestLifetime > 0)
+ if (trafficPattern_[patternId].interestLifetime >= 0)
interest.setInterestLifetime(trafficPattern_[patternId].interestLifetime);
+ else
+ interest.setInterestLifetime(getDefaultInterestLifetime());
try {
totalInterestSent_++;
trafficPattern_[patternId].totalInterestSent++;
diff --git a/ndn-traffic-server.cpp b/ndn-traffic-server.cpp
index 4b12510..e059bbe 100644
--- a/ndn-traffic-server.cpp
+++ b/ndn-traffic-server.cpp
@@ -14,25 +14,242 @@
using namespace ndn;
+class Logger
+{
+public:
+
+ Logger()
+ {
+ logLocation_ = "";
+ }
+
+ void
+ shutdownLogger()
+ {
+ if (logFile_.is_open())
+ {
+ log("Terminating Logging Operations" , true, true);
+ logFile_.close();
+ }
+ }
+
+ static std::string
+ getTimestamp()
+ {
+ boost::posix_time::ptime now;
+ now = boost::posix_time::second_clock::local_time();
+ return to_simple_string(now);
+ }
+
+ void
+ log( std::string logLine, bool printTime, bool printToConsole )
+ {
+ if( logLocation_.length() > 0 )
+ {
+ if (printTime)
+ logFile_ << getTimestamp() << " - ";
+ logFile_ << logLine << std::endl;
+ logFile_.flush();
+ if (printToConsole)
+ {
+ if (printTime)
+ std::cout << getTimestamp() << " - ";
+ std::cout << logLine << std::endl;
+ }
+ }
+ else
+ {
+ if (printTime)
+ std::cout << getTimestamp() << " - ";
+ std::cout << logLine << std::endl;
+ }
+ }
+
+ void
+ initializeLog( std::string instanceId )
+ {
+ char* variableValue = std::getenv("NDN_TRAFFIC_LOGFOLDER");
+ std::string logFilename;
+ logLocation_ = "";
+ if (variableValue != NULL)
+ logLocation_ = variableValue;
+ if (boost::filesystem::exists(boost::filesystem::path(logLocation_)))
+ {
+ if (boost::filesystem::is_directory(boost::filesystem::path(logLocation_)))
+ {
+ logFilename = logLocation_+"/NDNTrafficServer_"+instanceId+".log";
+ logFile_.open(logFilename.c_str(), std::ofstream::out | std::ofstream::trunc);
+ if (logFile_.is_open())
+ std::cout << "Log File Initialized: " << logFilename << std::endl;
+ else
+ {
+ std::cout << "ERROR - Unable To Initialize A Log File At: " << logLocation_ << std::endl
+ << "Using Default Output For Logging." << std::endl;
+ logLocation_ = "";
+ }
+ }
+ else
+ {
+ std::cout << "Environment Variable NDN_TRAFFIC_LOGFOLDER Should Be A Folder." << std::endl
+ << "Using Default Output For Logging." << std::endl;
+ logLocation_ = "";
+ }
+ }
+ else
+ {
+ std::cout << "Environment Variable NDN_TRAFFIC_LOGFOLDER Not Set." << std::endl
+ << "Using Default Output For Logging." << std::endl;
+ logLocation_ = "";
+ }
+ }
+
+private:
+
+ std::string logLocation_;
+ std::ofstream logFile_;
+
+};
+
+
class NdnTrafficServer
{
public:
- NdnTrafficServer( char* programName ) : ioService_(new boost::asio::io_service), face_(ioService_)
+ NdnTrafficServer( char* programName ) : ioService_(new boost::asio::io_service), face_(ioService_), keyChain_()
{
- std::stringstream randomId;
std::srand(std::time(0));
- randomId << std::rand();
- instanceId_ = randomId.str();
+ instanceId_ = toString(std::rand());
programName_ = programName;
contentDelayTime_ = getDefaultContentDelayTime();
- logLocation_ = "";
+ totalRegistrationsFailed_ = 0;
configurationFile_ = "";
+ totalInterestReceived_ = 0;
}
- NdnTrafficServer()
- : keyChain_()
+ class DataTrafficConfiguration
{
+ public:
+
+ DataTrafficConfiguration()
+ {
+ name = "";
+ contentType = -1;
+ freshnessPeriod = -1;
+ contentBytes = -1;
+ content = "";
+ totalInterestReceived = 0;
+ }
+
+ void
+ printTrafficConfiguration( Logger& logger )
+ {
+ std::string detail;
+ detail = "";
+ if (name != "")
+ detail += "Name="+name+", ";
+ if (contentType >= 0)
+ detail += "ContentType="+toString(contentType)+", ";
+ if (freshnessPeriod >= 0)
+ detail += "FreshnessPeriod="+toString(freshnessPeriod)+", ";
+ if (contentBytes >= 0)
+ detail += "ContentBytes="+toString(contentBytes)+", ";
+ if (content != "")
+ detail += "Content="+content+", ";
+ if (detail.length() >= 0)
+ detail = detail.substr(0, detail.length()-2);
+ logger.log(detail, false, false);
+ }
+
+
+ bool
+ extractParameterValue( std::string detail, std::string& parameter, std::string& value )
+ {
+ int i;
+ std::string allowedCharacters = ":/+._-%";
+ parameter = "";
+ value = "";
+ i = 0;
+ while (detail[i] != '=' && i < detail.length())
+ {
+ parameter += detail[i];
+ i++;
+ }
+ if (i == detail.length())
+ return false;
+ i++;
+ while ((std::isalnum(detail[i]) || allowedCharacters.find(detail[i]) != std::string::npos) && i < detail.length())
+ {
+ value += detail[i];
+ i++;
+ }
+ if(parameter == "" || value == "")
+ return false;
+ return true;
+ }
+
+ bool
+ processConfigurationDetail( std::string detail, Logger& logger, int lineNumber )
+ {
+ std::string parameter, value;
+ if (extractParameterValue(detail, parameter, value))
+ {
+ if (parameter == "Name")
+ name = value;
+ else if (parameter == "ContentType")
+ contentType = toInteger(value);
+ else if (parameter == "FreshnessPeriod")
+ freshnessPeriod = toInteger(value);
+ else if (parameter == "ContentBytes")
+ contentBytes = toInteger(value);
+ else if (parameter == "Content")
+ content = value;
+ else
+ logger.log("Line "+toString(lineNumber)+" \t- Invalid Parameter='"+parameter+"'", false, true);
+ }
+ else
+ {
+ logger.log("Line "+toString(lineNumber)+" \t- Improper Traffic Configuration Line- "+detail, false, true);
+ return false;
+ }
+ return true;
+ }
+
+ bool
+ checkTrafficDetailCorrectness()
+ {
+ return true;
+ }
+
+ std::string name;
+ int contentType;
+ int freshnessPeriod;
+ int contentBytes;
+ std::string content;
+ int totalInterestReceived;
+
+ };
+
+ std::string
+ getDefaultContent()
+ {
+ return "";
+ }
+
+ static std::string
+ toString( int integerValue )
+ {
+ std::stringstream stream;
+ stream << integerValue;
+ return stream.str();
+ }
+
+ static int
+ toInteger( std::string stringValue )
+ {
+ int integerValue;
+ std::stringstream stream(stringValue);
+ stream >> integerValue;
+ return integerValue;
}
void
@@ -66,44 +283,174 @@
void
signalHandler()
{
+ logger_.shutdownLogger();
face_.shutdown();
ioService_.reset();
+ logStatistics();
exit(1);
}
void
- initializeLog()
+ logStatistics()
{
- char* variableValue = std::getenv("NDN_TRAFFIC_LOGFOLDER");
- if (variableValue != NULL)
- logLocation_ = variableValue;
-
- if (boost::filesystem::exists(boost::filesystem::path(logLocation_)))
+ int patternId;
+ logger_.log("\n\n== Interest Traffic Report ==\n", false, true);
+ logger_.log("Total Traffic Pattern Types = "+toString((int)trafficPattern_.size()), false, true);
+ logger_.log("Total Interests Received = "+toString(totalInterestReceived_), false, true);
+ for (patternId=0; patternId<trafficPattern_.size(); patternId++)
{
- if (boost::filesystem::is_directory(boost::filesystem::path(logLocation_)))
+ logger_.log("\nTraffic Pattern Type #"+toString(patternId+1), false, true);
+ trafficPattern_[patternId].printTrafficConfiguration(logger_);
+ logger_.log("Total Interests Received = "+toString(trafficPattern_[patternId].totalInterestReceived)+"\n", false, true);
+ }
+ }
+
+ bool
+ checkTrafficPatternCorrectness()
+ {
+ return true;
+ }
+
+ void
+ analyzeConfigurationFile()
+ {
+ int patternId;
+ int lineNumber;
+ bool skipLine;
+ std::string patternLine;
+ std::ifstream patternFile;
+ logger_.log("Analyzing Traffic Configuration File: " + configurationFile_, true, true);
+ patternFile.open(configurationFile_.c_str());
+ if (patternFile.is_open())
+ {
+ patternId = 0;
+ lineNumber = 0;
+ while (getline(patternFile, patternLine))
{
- logLocation_ += "/NDNTrafficServer_"+instanceId_+".log";
- std::cout << "Log File Initialized: " << logLocation_ << std::endl;
+ lineNumber++;
+ if (std::isalpha(patternLine[0]))
+ {
+ DataTrafficConfiguration dataData;
+ skipLine = false;
+ patternId++;
+ if (dataData.processConfigurationDetail(patternLine, logger_, lineNumber))
+ {
+ while (getline(patternFile, patternLine) && std::isalpha(patternLine[0]))
+ {
+ lineNumber++;
+ if (!dataData.processConfigurationDetail(patternLine, logger_, lineNumber))
+ {
+ skipLine = true;
+ break;
+ }
+ }
+ lineNumber++;
+ }
+ else
+ skipLine = true;
+ if( !skipLine )
+ {
+ if (dataData.checkTrafficDetailCorrectness())
+ trafficPattern_.push_back(dataData);
+ }
+ }
}
- else
+ patternFile.close();
+ if (!checkTrafficPatternCorrectness())
{
- std::cout << "Environment Variable NDN_TRAFFIC_LOGFOLDER Should Be A Folder.\n"
- "Using Default Output For Logging." << std::endl;
- logLocation_ = "";
+ logger_.log("ERROR - Traffic Configuration Provided Is Not Proper- " + configurationFile_, false, true);
+ logger_.shutdownLogger();
+ exit(1);
+ }
+ logger_.log("Traffic Configuration File Processing Completed\n", true, false);
+ for (patternId = 0; patternId < trafficPattern_.size(); patternId++)
+ {
+ logger_.log("Traffic Pattern Type #"+toString(patternId+1), false, false);
+ trafficPattern_[patternId].printTrafficConfiguration(logger_);
+ logger_.log("", false, false);
}
}
else
{
- std::cout << "Environment Variable NDN_TRAFFIC_LOGFOLDER Not Set.\n"
- "Using Default Output For Logging." << std::endl;
- logLocation_ = "";
+ logger_.log("ERROR - Unable To Open Traffic Configuration File: " + configurationFile_, false, true);
+ logger_.shutdownLogger();
+ exit(1);
}
}
void
initializeTrafficConfiguration()
{
- std::cout << "Traffic Configuration File: " << configurationFile_ << std::endl;
+ if (boost::filesystem::exists(boost::filesystem::path(configurationFile_)))
+ {
+ if(boost::filesystem::is_regular_file(boost::filesystem::path(configurationFile_)))
+ {
+ analyzeConfigurationFile();
+ }
+ else
+ {
+ logger_.log("ERROR - Traffic Configuration File Is Not A Regular File: " + configurationFile_, false, true);
+ logger_.shutdownLogger();
+ exit(1);
+ }
+ }
+ else
+ {
+ logger_.log("ERROR - Traffic Configuration File Does Not Exist: " + configurationFile_, false, true);
+ logger_.shutdownLogger();
+ exit(1);
+ }
+ }
+
+ static std::string
+ getRandomByteString( int randomSize )
+ {
+ int i;
+ std::string characterSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw0123456789";
+ std::string randomData;
+ for (i=0; i<randomSize; i++)
+ randomData += characterSet[std::rand() % characterSet.length()];
+ return randomData;
+ }
+
+ void
+ onInterest( const Name& name, const Interest& interest, int patternId )
+ {
+ std::string content, logLine;
+ content = "";
+ logLine = "";
+ Data data(interest.getName());
+ if (trafficPattern_[patternId].contentType >= 0)
+ data.setContentType(trafficPattern_[patternId].contentType);
+ if (trafficPattern_[patternId].freshnessPeriod >= 0)
+ data.setFreshnessPeriod(trafficPattern_[patternId].freshnessPeriod);
+ if (trafficPattern_[patternId].contentBytes >= 0)
+ content = getRandomByteString(trafficPattern_[patternId].contentBytes);
+ if (trafficPattern_[patternId].content != "")
+ content = trafficPattern_[patternId].content;
+ data.setContent((const uint8_t*)content.c_str(), content.length());
+ keyChain_.sign(data);
+ totalInterestReceived_++;
+ trafficPattern_[patternId].totalInterestReceived++;
+ logLine += "Interest Received - PatternID="+toString(patternId);
+ logLine += ", GlobalID="+toString(totalInterestReceived_);
+ logLine += ", LocalID="+toString(trafficPattern_[patternId].totalInterestReceived);
+ logLine += ", Name="+trafficPattern_[patternId].name;
+ logger_.log(logLine, true, false);
+ face_.put(data);
+ }
+
+ void
+ onRegisterFailed( const ndn::Name& prefix, const std::string& reason, int patternId )
+ {
+ std::string logLine;
+ logLine = "";
+ logLine += "Prefix Registration Failed - PatternID="+toString(patternId);
+ logLine += ", Name="+trafficPattern_[patternId].name;
+ logger_.log(logLine, true, true);
+ totalRegistrationsFailed_++;
+ if (totalRegistrationsFailed_ == trafficPattern_.size())
+ signalHandler();
}
void
@@ -111,20 +458,43 @@
{
boost::asio::signal_set signalSet(*ioService_, SIGINT, SIGTERM);
signalSet.async_wait(boost::bind(&NdnTrafficServer::signalHandler, this));
- initializeLog();
+ logger_.initializeLog(instanceId_);
initializeTrafficConfiguration();
+
+ int patternId;
+ for (patternId=0; patternId<trafficPattern_.size(); patternId++ )
+ {
+ face_.setInterestFilter( trafficPattern_[patternId].name,
+ func_lib::bind( &NdnTrafficServer::onInterest,
+ this, _1, _2,
+ patternId),
+ func_lib::bind( &NdnTrafficServer::onRegisterFailed,
+ this, _1, _2,
+ patternId));
+ }
+
+ try {
+ face_.processEvents();
+ }
+ catch(std::exception &e) {
+ logger_.log("ERROR: "+(std::string)e.what(), true, true);
+ logger_.shutdownLogger();
+ }
}
private:
KeyChain keyChain_;
std::string programName_;
+ std::string instanceId_;
int contentDelayTime_;
- std::string logLocation_;
+ int totalRegistrationsFailed_;
+ Logger logger_;
std::string configurationFile_;
ptr_lib::shared_ptr<boost::asio::io_service> ioService_;
Face face_;
- std::string instanceId_;
+ std::vector<DataTrafficConfiguration> trafficPattern_;
+ int totalInterestReceived_;
};