Client Tool 70%, Server Tool 50% Complete
diff --git a/ndn-traffic-server.cpp b/ndn-traffic-server.cpp
index fbc92ce..a6d8cf5 100644
--- a/ndn-traffic-server.cpp
+++ b/ndn-traffic-server.cpp
@@ -1,10 +1,15 @@
/**
*
- * Copyright (C) 2013 University of Arizona.
+ * Copyright (C) 2014 University of Arizona.
* @author: Jerald Paul Abraham <jeraldabraham@email.arizona.edu>
*
*/
+#include <sstream>
+#include <boost/asio.hpp>
+#include <boost/filesystem.hpp>
+
+#include <ndn-cpp-dev/face.hpp>
#include <ndn-cpp-dev/security/key-chain.hpp>
using namespace ndn;
@@ -15,10 +20,16 @@
NdnTrafficServer( char* programName )
{
+ std::stringstream randomId;
+ std::srand(std::time(0));
+ randomId << std::rand();
+ instanceId_ = randomId.str();
programName_ = programName;
contentDelayTime_ = getDefaultContentDelayTime();
- prefix_ = "";
+ logLocation_ = "";
configurationFile_ = "";
+ ioService_ = ptr_lib::make_shared<boost::asio::io_service>();
+ face_ = Face(ioService_);
}
NdnTrafficServer()
@@ -40,15 +51,6 @@
return 0;
}
- bool
- isPrefixSet()
- {
- if (prefix_.length() > 0)
- return true;
- else
- return false;
- }
-
void
setContentDelayTime( int contentDelayTime )
{
@@ -58,24 +60,73 @@
}
void
- setPrefix( char* prefix )
- {
- prefix_ = prefix;
- }
-
- void
setConfigurationFile( char* configurationFile )
{
configurationFile_ = configurationFile;
}
+ void
+ signalHandler()
+ {
+ face_.shutdown();
+ ioService_.reset();
+ exit(1);
+ }
+
+ void
+ initializeLog()
+ {
+ char* variableValue = std::getenv("NDN_TRAFFIC_LOGFOLDER");
+ if (variableValue != NULL)
+ logLocation_ = variableValue;
+
+ if (boost::filesystem::exists(boost::filesystem::path(logLocation_)))
+ {
+ if (boost::filesystem::is_directory(boost::filesystem::path(logLocation_)))
+ {
+ logLocation_ += "/NDNTrafficServer_"+instanceId_+".log";
+ std::cout << "Log File Initialized: " << logLocation_ << std::endl;
+ }
+ else
+ {
+ std::cout << "Environment Variable NDN_TRAFFIC_LOGFOLDER Should Be A Folder.\n"
+ "Using Default Output For Logging." << std::endl;
+ logLocation_ = "";
+ }
+ }
+ else
+ {
+ std::cout << "Environment Variable NDN_TRAFFIC_LOGFOLDER Not Set.\n"
+ "Using Default Output For Logging." << std::endl;
+ logLocation_ = "";
+ }
+ }
+
+ void
+ initializeTrafficConfiguration()
+ {
+ std::cout << "Traffic Configuration File: " << configurationFile_ << std::endl;
+ }
+
+ void
+ initialize()
+ {
+ boost::asio::signal_set signalSet(*ioService_, SIGINT, SIGTERM);
+ signalSet.async_wait(boost::bind(&NdnTrafficServer::signalHandler, this));
+ initializeLog();
+ initializeTrafficConfiguration();
+ }
+
private:
KeyChain keyChain_;
std::string programName_;
int contentDelayTime_;
- std::string prefix_;
+ std::string logLocation_;
std::string configurationFile_;
+ ptr_lib::shared_ptr<boost::asio::io_service> ioService_;
+ Face face_;
+ std::string instanceId_;
};
@@ -83,7 +134,7 @@
{
int option;
NdnTrafficServer ndnTrafficServer (argv[0]);
- while ((option = getopt(argc, argv, "hd:p:")) != -1) {
+ while ((option = getopt(argc, argv, "hd:")) != -1) {
switch (option) {
case 'h' :
ndnTrafficServer.usage();
@@ -91,9 +142,6 @@
case 'd' :
ndnTrafficServer.setContentDelayTime(atoi(optarg));
break;
- case 'p' :
- ndnTrafficServer.setPrefix(optarg);
- break;
default :
ndnTrafficServer.usage();
break;
@@ -103,10 +151,11 @@
argc -= optind;
argv += optind;
- if (argv[0] == NULL && !ndnTrafficServer.isPrefixSet() )
+ if (argv[0] == NULL)
ndnTrafficServer.usage();
ndnTrafficServer.setConfigurationFile(argv[0]);
+ ndnTrafficServer.initialize();
return 0;
}