Data Passing for Info Interest
diff --git a/nlsr.cpp b/nlsr.cpp
index 61f9424..99552b0 100644
--- a/nlsr.cpp
+++ b/nlsr.cpp
@@ -16,14 +16,14 @@
nlsr::nlsrRegistrationFailed(const ptr_lib::shared_ptr<const Name>&)
{
cerr << "ERROR: Failed to register prefix in local hub's daemon" << endl;
- nlsrFace.shutdown();
+ getNlsrFace().shutdown();
}
void
nlsr::setInterestFilterNlsr(const string& name)
{
- nlsrFace.setInterestFilter(name,
+ getNlsrFace().setInterestFilter(name,
func_lib::bind(&interestManager::processInterest, &im,
boost::ref(*this), _1, _2),
func_lib::bind(&nlsr::nlsrRegistrationFailed, this, _1));
@@ -33,7 +33,7 @@
void
nlsr::startEventLoop()
{
- nlsrFace.processEvents();
+ getNlsrFace().processEvents();
}
int
@@ -57,14 +57,14 @@
nlsr.setConfFileName("nlsr.conf");
ConfFileProcessor cfp(nlsr.getConfFileName());
cfp.processConfFile(nlsr);
- nlsr.confParam.buildRouterPrefix();
+ nlsr.getConfParameter().buildRouterPrefix();
/* debugging purpose start */
- cout << nlsr.confParam ;
- nlsr.adl.printAdl();
- nlsr.npl.printNpl();
+ cout << nlsr.getConfParameter(); ;
+ nlsr.getAdl().printAdl();
+ nlsr.getNpl().printNpl();
/* debugging purpose end */
- nlsr.setInterestFilterNlsr(nlsr.confParam.getRouterPrefix());
- nlsr.im.scheduleInfoInterest(nlsr,1);
+ nlsr.setInterestFilterNlsr(nlsr.getConfParameter().getRouterPrefix());
+ nlsr.getIm().scheduleInfoInterest(nlsr,1);
diff --git a/nlsr.hpp b/nlsr.hpp
index ed2e4d2..a041738 100644
--- a/nlsr.hpp
+++ b/nlsr.hpp
@@ -60,6 +60,44 @@
isDaemonProcess=value;
}
+ ConfParameter& getConfParameter(){
+ return confParam;
+ }
+
+ Adl& getAdl(){
+ return adl;
+ }
+
+ Npl& getNpl(){
+ return npl;
+ }
+
+ ndn::shared_ptr<boost::asio::io_service>& getIo()
+ {
+ return io;
+ }
+
+ ndn::Scheduler& getScheduler(){
+ return scheduler;
+ }
+
+ ndn::Face& getNlsrFace(){
+ return nlsrFace;
+ }
+
+ ndn::KeyChain& getKeyChain(){
+ return kChain;
+ }
+
+ interestManager& getIm(){
+ return im;
+ }
+
+ DataManager& getDm(){
+ return dm;
+ }
+
+private:
ConfParameter confParam;
Adl adl;
Npl npl;
@@ -69,9 +107,6 @@
ndn::KeyChain kChain;
interestManager im;
DataManager dm;
-
-private:
-
bool isDaemonProcess;
string configFileName;
diff --git a/nlsr_adjacent.hpp b/nlsr_adjacent.hpp
index 09eef16..dc4a712 100644
--- a/nlsr_adjacent.hpp
+++ b/nlsr_adjacent.hpp
@@ -9,7 +9,7 @@
Adjacent()
:adjacentName()
,connectingFace(0)
- ,linkCost(0.0)
+ ,linkCost(10.0)
,status(0)
,interestTimedOutNo(0)
{
diff --git a/nlsr_adl.cpp b/nlsr_adl.cpp
index 0b22d80..0cbdb4a 100644
--- a/nlsr_adl.cpp
+++ b/nlsr_adl.cpp
@@ -62,6 +62,90 @@
}
+bool
+Adl::isNeighbor(string adjName){
+ Adjacent adj(adjName);
+ std::list<Adjacent >::iterator it = std::find_if( adjList.begin(),
+ adjList.end(),
+ bind(&adjacent_compare, _1, adj));
+
+ if( it == adjList.end()){
+ return false;
+ }
+
+ return true;
+}
+
+void
+Adl::incrementTimedOutInterestCount(string& neighbor){
+ Adjacent adj(neighbor);
+ std::list<Adjacent >::iterator it = std::find_if( adjList.begin(),
+ adjList.end(),
+ bind(&adjacent_compare, _1, adj));
+
+ if( it == adjList.end()){
+ return ;
+ }
+
+ (*it).setInterestTimedOutNo((*it).getInterestTimedOutNo()+1);
+
+}
+
+void
+Adl::setTimedOutInterestCount(string& neighbor, int count){
+ Adjacent adj(neighbor);
+ std::list<Adjacent >::iterator it = std::find_if( adjList.begin(),
+ adjList.end(),
+ bind(&adjacent_compare, _1, adj));
+
+ if( it != adjList.end()){
+ (*it).setInterestTimedOutNo(count);
+ }
+}
+
+int
+Adl::getTimedOutInterestCount(string& neighbor)
+{
+ Adjacent adj(neighbor);
+ std::list<Adjacent >::iterator it = std::find_if( adjList.begin(),
+ adjList.end(),
+ bind(&adjacent_compare, _1, adj));
+
+ if( it == adjList.end()){
+ return -1;
+ }
+
+ return (*it).getInterestTimedOutNo();
+}
+
+int
+Adl::getStatusOfNeighbor(string& neighbor)
+{
+ Adjacent adj(neighbor);
+ std::list<Adjacent >::iterator it = std::find_if( adjList.begin(),
+ adjList.end(),
+ bind(&adjacent_compare, _1, adj));
+
+ if( it == adjList.end()){
+ return -1;
+ }
+
+ return (*it).getStatus();
+}
+
+void
+Adl::setStatusOfNeighbor(string& neighbor, int status)
+{
+ Adjacent adj(neighbor);
+ std::list<Adjacent >::iterator it = std::find_if( adjList.begin(),
+ adjList.end(),
+ bind(&adjacent_compare, _1, adj));
+
+ if( it != adjList.end()){
+ (*it).setStatus(status);
+ }
+}
+
std::list<Adjacent>
Adl::getAdjList(){
return adjList;
diff --git a/nlsr_adl.hpp b/nlsr_adl.hpp
index 2f388c8..71829c1 100644
--- a/nlsr_adl.hpp
+++ b/nlsr_adl.hpp
@@ -15,9 +15,15 @@
int insert(Adjacent& adj);
int updateAdjacentStatus(string adjName, int s);
int updateAdjacentLinkCost(string adjName, double lc);
- void printAdl();
std::list<Adjacent> getAdjList();
+ bool isNeighbor(string adjName);
+ void incrementTimedOutInterestCount(string& neighbor);
+ int getTimedOutInterestCount(string& neighbor);
+ int getStatusOfNeighbor(string& neighbor);
+ void setStatusOfNeighbor(string& neighbor, int status);
+ void setTimedOutInterestCount(string& neighbor, int count);
+ void printAdl();
private:
std::list< Adjacent > adjList;
diff --git a/nlsr_conf_param.cpp b/nlsr_conf_param.cpp
index fad9f10..8ae7647 100644
--- a/nlsr_conf_param.cpp
+++ b/nlsr_conf_param.cpp
@@ -5,28 +5,22 @@
ostream&
operator << (ostream &os, ConfParameter& cfp){
- os <<"Router Name: "<< cfp.getRouterName()<<endl;
- os <<"Site Name: "<< cfp.getSiteName()<<endl;
- os <<"Network: "<< cfp.getNetwork()<<endl;
-
- os <<"Router Prefix: "<< cfp.getRouterPrefix()<<endl;
-
- os <<"ChronoSync sync Prifex: "<< cfp.getChronosyncSyncPrefix()<<endl;
-
- os <<"Interest Retry number: "<< cfp.getInterestRetryNumber()<<endl;
- os <<"Interest Resend second: "<< cfp.getInterestResendTime()<<endl;
+ os <<"Router Name: "<< cfp.getRouterName()<<endl;
+ os <<"Site Name: "<< cfp.getSiteName()<<endl;
+ os <<"Network: "<< cfp.getNetwork()<<endl;
+ os <<"Router Prefix: "<< cfp.getRouterPrefix()<<endl;
+ os <<"ChronoSync sync Prifex: "<< cfp.getChronosyncSyncPrefix()<<endl;
+ os <<"Interest Retry number: "<< cfp.getInterestRetryNumber()<<endl;
+ os <<"Interest Resend second: "<< cfp.getInterestResendTime()<<endl;
os <<"Info Interest Interval: "<<cfp.getInfoInterestInterval()<<endl;
- os <<"LSA refresh time: "<< cfp.getLsaRefreshTime()<<endl;
-
- os <<"Max Faces Per Prefix: "<< cfp.getMaxFacesPerPrefix()<<endl;
- os <<"Log Dir: "<< cfp.getLogDir()<<endl;
- os <<"Detalied logging: "<< cfp.getDetailedLogging()<<endl;
- os <<"Debugging: "<< cfp.getDebugging()<<endl;
-
- os <<"Hyperbolic ROuting: "<< cfp.getIsHyperbolicCalc()<<endl;
- os <<"Hyp R: "<< cfp.getCorR()<<endl;
- os <<"Hyp theta: "<< cfp.getCorTheta()<<endl;
-
+ os <<"LSA refresh time: "<< cfp.getLsaRefreshTime()<<endl;
+ os <<"Max Faces Per Prefix: "<< cfp.getMaxFacesPerPrefix()<<endl;
+ os <<"Log Dir: "<< cfp.getLogDir()<<endl;
+ os <<"Detalied logging: "<< cfp.getDetailedLogging()<<endl;
+ os <<"Debugging: "<< cfp.getDebugging()<<endl;
+ os <<"Hyperbolic ROuting: "<< cfp.getIsHyperbolicCalc()<<endl;
+ os <<"Hyp R: "<< cfp.getCorR()<<endl;
+ os <<"Hyp theta: "<< cfp.getCorTheta()<<endl;
os <<"Tunnel Type: "<< cfp.getTunnelType()<<endl;
return os;
diff --git a/nlsr_conf_param.hpp b/nlsr_conf_param.hpp
index 69d2eff..f8290d2 100644
--- a/nlsr_conf_param.hpp
+++ b/nlsr_conf_param.hpp
@@ -178,44 +178,42 @@
infoInterestInterval=iii;
}
- private:
- string routerName;
- string siteName;
- string network;
+private:
+ string routerName;
+ string siteName;
+ string network;
- string routerPrefix;
- string lsaRouterPrefix;
+ string routerPrefix;
+ string lsaRouterPrefix;
- string chronosyncSyncPrefix;
- string chronosyncLsaPrefix;
+ string chronosyncSyncPrefix;
+ string chronosyncLsaPrefix;
- int interestRetryNumber;
- int interestResendTime;
- int infoInterestInterval;
- int lsaRefreshTime;
- int routerDeadInterval;
+ int interestRetryNumber;
+ int interestResendTime;
+ int infoInterestInterval;
+ int lsaRefreshTime;
+ int routerDeadInterval;
- int maxFacesPerPrefix;
- string logDir;
- string logFile;
- int detailedLogging;
- int debugging;
+ int maxFacesPerPrefix;
+ string logDir;
+ string logFile;
+ int detailedLogging;
+ int debugging;
- int isHyperbolicCalc;
- double corR;
- double corTheta;
+ int isHyperbolicCalc;
+ double corR;
+ double corTheta;
- int tunnelType;
+ int tunnelType;
- int adjBuildFlag;
- long int adjBuildCount;
- int isBuildAdjLsaSheduled;
- int isRouteCalculationScheduled;
+ int adjBuildFlag;
+ long int adjBuildCount;
+ int isBuildAdjLsaSheduled;
+ int isRouteCalculationScheduled;
- int isRoutingTableCalculating;
- int isStrictHierchicalKeyCheck;
-
-
+ int isRoutingTableCalculating;
+ int isStrictHierchicalKeyCheck;
};
diff --git a/nlsr_conf_processor.cpp b/nlsr_conf_processor.cpp
index 5f80b29..691a285 100644
--- a/nlsr_conf_processor.cpp
+++ b/nlsr_conf_processor.cpp
@@ -108,7 +108,7 @@
if(command[0] == '/' ){
command.erase(0,1);
}
- pnlsr.confParam.setNetwork(command);
+ pnlsr.getConfParameter().setNetwork(command);
}
return 0;
}
@@ -125,7 +125,7 @@
if(command[0] == '/' ){
command.erase(0,1);
}
- pnlsr.confParam.setSiteName(command);
+ pnlsr.getConfParameter().setSiteName(command);
}
return 0;
}
@@ -142,7 +142,7 @@
if(command[0] == '/' ){
command.erase(0,1);
}
- pnlsr.confParam.setRouterName(command);
+ pnlsr.getConfParameter().setRouterName(command);
}
return 0;
}
@@ -156,7 +156,7 @@
stringstream ss(command.c_str());
ss>>irn;
if ( irn >=1 && irn <=5){
- pnlsr.confParam.setInterestRetryNumber(irn);
+ pnlsr.getConfParameter().setInterestRetryNumber(irn);
}
}
return 0;
@@ -171,7 +171,7 @@
stringstream ss(command.c_str());
ss>>irt;
if( irt>=1 && irt <=20){
- pnlsr.confParam.setInterestResendTime(irt);
+ pnlsr.getConfParameter().setInterestResendTime(irt);
}
}
return 0;
@@ -186,7 +186,7 @@
stringstream ss(command.c_str());
ss>>lrt;
if ( lrt>= 240 && lrt<=7200){
- pnlsr.confParam.setLsaRefreshTime(lrt);
+ pnlsr.getConfParameter().setLsaRefreshTime(lrt);
}
}
return 0;
@@ -201,7 +201,7 @@
stringstream ss(command.c_str());
ss>>mfpp;
if ( mfpp>=0 && mfpp<=60){
- pnlsr.confParam.setMaxFacesPerPrefix(mfpp);
+ pnlsr.getConfParameter().setMaxFacesPerPrefix(mfpp);
}
}
return 0;
@@ -213,10 +213,10 @@
cerr <<" Wrong command format ! [tunnel-type tcp/udp]!"<<endl;
}else{
if(command == "tcp" || command == "TCP" ){
- pnlsr.confParam.setTunnelType(1);
+ pnlsr.getConfParameter().setTunnelType(1);
}
else if(command == "udp" || command == "UDP"){
- pnlsr.confParam.setTunnelType(0);
+ pnlsr.getConfParameter().setTunnelType(0);
}else{
cerr <<" Wrong command format ! [tunnel-type tcp/udp]!"<<endl;
}
@@ -230,7 +230,7 @@
if(command.empty() ){
cerr <<" Wrong command format ! [chronosync-sync-prefix name/prefix]!"<<endl;
}else{
- pnlsr.confParam.setChronosyncSyncPrefix(command);
+ pnlsr.getConfParameter().setChronosyncSyncPrefix(command);
}
return 0;
}
@@ -241,7 +241,7 @@
if(command.empty() ){
cerr <<" Wrong command format ! [log-dir /path/to/log/dir]!"<<endl;
}else{
- pnlsr.confParam.setLogDir(command);
+ pnlsr.getConfParameter().setLogDir(command);
}
return 0;
}
@@ -252,10 +252,10 @@
cerr <<" Wrong command format ! [debugging on/of]!"<<endl;
}else{
if(command == "on" || command == "ON" ){
- pnlsr.confParam.setDebugging(1);
+ pnlsr.getConfParameter().setDebugging(1);
}
else if(command == "off" || command == "off"){
- pnlsr.confParam.setDebugging(0);
+ pnlsr.getConfParameter().setDebugging(0);
}else{
cerr <<" Wrong command format ! [debugging on/off]!"<<endl;
}
@@ -269,10 +269,10 @@
cerr <<" Wrong command format ! [detailed-logging on/off]!"<<endl;
}else{
if(command == "on" || command == "ON" ){
- pnlsr.confParam.setDetailedLogging(1);
+ pnlsr.getConfParameter().setDetailedLogging(1);
}
else if(command == "off" || command == "off"){
- pnlsr.confParam.setDetailedLogging(0);
+ pnlsr.getConfParameter().setDetailedLogging(0);
}else{
cerr <<" Wrong command format ! [detailed-logging on/off]!"<<endl;
}
@@ -286,13 +286,13 @@
cerr <<" Wrong command format ! [hyperbolic-routing on/off/dry-run]!"<<endl;
}else{
if(command == "on" || command == "ON" ){
- pnlsr.confParam.setIsHyperbolicCalc(1);
+ pnlsr.getConfParameter().setIsHyperbolicCalc(1);
}
else if(command == "dry-run" || command == "DRY-RUN"){
- pnlsr.confParam.setIsHyperbolicCalc(2);
+ pnlsr.getConfParameter().setIsHyperbolicCalc(2);
}
else if(command == "off" || command == "off"){
- pnlsr.confParam.setIsHyperbolicCalc(0);
+ pnlsr.getConfParameter().setIsHyperbolicCalc(0);
}else{
cerr <<" Wrong command format ! [hyperbolic-routing on/off/dry-run]!"<<endl;
}
@@ -304,7 +304,7 @@
ConfFileProcessor::processConfCommandHyperbolicCordinate(nlsr& pnlsr, string command){
if(command.empty() ){
cerr <<" Wrong command format ! [hyperbolic-cordinate r 0]!"<<endl;
- if (pnlsr.confParam.getIsHyperbolicCalc() > 0 ){
+ if (pnlsr.getConfParameter().getIsHyperbolicCalc() > 0 ){
return -1;
}
}else{
@@ -316,8 +316,8 @@
ssr>>r;
sst>>theta;
- pnlsr.confParam.setCorR(r);
- pnlsr.confParam.setCorTheta(theta);
+ pnlsr.getConfParameter().setCorR(r);
+ pnlsr.getConfParameter().setCorTheta(theta);
}
return 0;
}
@@ -330,7 +330,7 @@
}else{
nlsrTokenizer nt(command," ");
Adjacent adj(nt.getFirstToken(),0,0.0,0,0);
- pnlsr.adl.insert(adj);
+ pnlsr.getAdl().insert(adj);
}
return 0;
}
@@ -340,7 +340,7 @@
if(command.empty() ){
cerr <<" Wrong command format ! [ndnname name/prefix]!"<<endl;
}else{
- pnlsr.npl.insertIntoNpl(command);
+ pnlsr.getNpl().insertIntoNpl(command);
}
return 0;
}
@@ -350,7 +350,7 @@
ConfFileProcessor::processConfCommandLinkCost(nlsr& pnlsr, string command){
if(command.empty() ){
cerr <<" Wrong command format ! [link-cost nbr/name cost]!"<<endl;
- if (pnlsr.confParam.getIsHyperbolicCalc() > 0 ){
+ if (pnlsr.getConfParameter().getIsHyperbolicCalc() > 0 ){
return -1;
}
}else{
@@ -360,7 +360,7 @@
double cost;
sst>>cost;
- pnlsr.adl.updateAdjacentLinkCost(nt.getFirstToken(),cost);
+ pnlsr.getAdl().updateAdjacentLinkCost(nt.getFirstToken(),cost);
}
return 0;
}
diff --git a/nlsr_dm.cpp b/nlsr_dm.cpp
index 70089dc..7b958de 100644
--- a/nlsr_dm.cpp
+++ b/nlsr_dm.cpp
@@ -11,13 +11,57 @@
using namespace ndn;
void
-DataManager::processContent(const nlsr& pnlsr,
+DataManager::processContent(nlsr& pnlsr,
const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest,
const ndn::ptr_lib::shared_ptr<ndn::Data> &data)
{
cout << "I: " << interest->toUri() << endl;
- cout << "D: " << data->getName().toUri() << endl;
- cout << "Data Content: " << data->getContent() << endl;
+ string dataName(data->getName().toUri());
+ string dataContent((char *)data->getContent().value());
+
+ cout << "D: " << dataName << endl;
+ cout << "Data Content: " << dataContent << endl;
+
+ nlsrTokenizer nt(dataName,"/");
+ string chkString("info");
+ if( nt.doesTokenExist(chkString) ){
+ processContentInfo(pnlsr,dataName,dataContent);
+ }
+
+}
+
+void
+DataManager::processContentInfo(nlsr& pnlsr, string& dataName,
+ string& dataContent)
+{
+ nlsrTokenizer nt(dataName,"/");
+ string chkString("info");
+ string neighbor="/" + nt.getFirstToken()
+ +nt.getTokenString(0,nt.getTokenPosition(chkString)-1);
+ int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
+ int infoIntTimedOutCount=pnlsr.getAdl().getTimedOutInterestCount(neighbor);
+ //debugging purpose start
+ cout <<"Before Updates: " <<endl;
+ cout <<"Neighbor : "<<neighbor<<endl;
+ cout<<"Status: "<< status << endl;
+ cout<<"Info Interest Timed out: "<< infoIntTimedOutCount <<endl;
+ //debugging purpose end
+
+ pnlsr.getAdl().setStatusOfNeighbor(neighbor,1);
+ pnlsr.getAdl().setTimedOutInterestCount(neighbor,0);
+
+ status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
+ infoIntTimedOutCount=pnlsr.getAdl().getTimedOutInterestCount(neighbor);
+
+ //debugging purpose
+ cout <<"After Updates: " <<endl;
+ cout <<"Neighbor : "<<neighbor<<endl;
+ cout<<"Status: "<< status << endl;
+ cout<<"Info Interest Timed out: "<< infoIntTimedOutCount <<endl;
+ //debugging purpose end
+
+ /* Need to schedule event for Adjacency LSA building */
+
}
diff --git a/nlsr_dm.hpp b/nlsr_dm.hpp
index da513ed..c174e02 100644
--- a/nlsr_dm.hpp
+++ b/nlsr_dm.hpp
@@ -14,9 +14,11 @@
class DataManager
{
public:
- void processContent(const nlsr& pnlsr,
+ void processContent(nlsr& pnlsr,
const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest,
const ndn::ptr_lib::shared_ptr<ndn::Data> &data);
+ void processContentInfo(nlsr& pnlsr, string& dataName,
+ string& dataContent);
private:
};
diff --git a/nlsr_im.cpp b/nlsr_im.cpp
index 6a432a5..a29fac9 100644
--- a/nlsr_im.cpp
+++ b/nlsr_im.cpp
@@ -18,12 +18,46 @@
{
cout << "<< I: " << *interest << endl;
- Data data(ndn::Name(interest->getName()).append("testApp").appendVersion());
- data.setFreshnessPeriod(1000); // 10 sec
- data.setContent((const uint8_t*)"HELLO KITTY", sizeof("HELLO KITTY"));
- pnlsr.kChain.sign(data);
- cout << ">> D: " << data << endl;
- pnlsr.nlsrFace.put(data);
+ string intName=interest->getName().toUri();
+ cout << "Interest Received for Name: "<< intName <<endl;
+ nlsrTokenizer nt(intName,"/");
+ string chkString("info");
+ if( nt.doesTokenExist(chkString) ){
+ string nbr=nt.getTokenString(nt.getTokenPosition(chkString)+1);
+ cout <<"Neighbor: " << nbr <<endl;
+ processInterestInfo(pnlsr,nbr,interest);
+ }
+
+ //Data data(ndn::Name(interest->getName()).append("testApp").appendVersion());
+ //data.setFreshnessPeriod(1000); // 10 sec
+ //data.setContent((const uint8_t*)"HELLO KITTY", sizeof("HELLO KITTY"));
+ //pnlsr.getKeyChain().sign(data);
+ //cout << ">> D: " << data << endl;
+ //pnlsr.getNlsrFace().put(data);
+}
+
+void
+interestManager::processInterestInfo(nlsr& pnlsr, string& neighbor,
+ const ptr_lib::shared_ptr<const Interest> &interest)
+{
+ if ( pnlsr.getAdl().isNeighbor(neighbor) )
+ {
+ Data data(ndn::Name(interest->getName()).appendVersion());
+ data.setFreshnessPeriod(1000); // 10 sec
+ data.setContent((const uint8_t*)"info", sizeof("info"));
+ pnlsr.getKeyChain().sign(data);
+ cout << ">> D: " << data << endl;
+ pnlsr.getNlsrFace().put(data);
+
+ int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
+ if ( status == 0 )
+ {
+ string intName=neighbor +"/"+"info"+
+ pnlsr.getConfParameter().getRouterPrefix();
+ expressInterest( pnlsr,intName,2,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
+ }
}
void
@@ -32,17 +66,44 @@
{
cout << "Timed out interest : " << interest->getName().toUri() << endl;
string intName= interest->getName().toUri();
- cout << intName <<endl;
nlsrTokenizer nt(intName,"/");
string chkString("info");
if( nt.doesTokenExist(chkString) ){
- string nbr=nt.getTokenString(0,nt.getTokenPosition(chkString)-1);
- cout<<"Neighbor :"<<nbr<<endl;
+ string nbr="/" + nt.getFirstToken()
+ +nt.getTokenString(0,nt.getTokenPosition(chkString)-1);
+ processInterestTimedOutInfo( pnlsr , nbr , interest);
}
}
void
+interestManager::processInterestTimedOutInfo(nlsr& pnlsr, string& neighbor,
+ const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest)
+{
+ pnlsr.getAdl().incrementTimedOutInterestCount(neighbor);
+ int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
+ int infoIntTimedOutCount=pnlsr.getAdl().getTimedOutInterestCount(neighbor);
+ cout<<"Neighbor: "<< neighbor << endl;
+ cout<<"Status: "<< status << endl;
+ cout<<"Info Interest Timed out: "<< infoIntTimedOutCount <<endl;
+
+ if((infoIntTimedOutCount < pnlsr.getConfParameter().getInterestRetryNumber()))
+ {
+ string intName=neighbor +"/"+"info"+
+ pnlsr.getConfParameter().getRouterPrefix();
+ expressInterest( pnlsr,intName,2,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
+ else if ( (status == 1) &&
+ (infoIntTimedOutCount == pnlsr.getConfParameter().getInterestRetryNumber()))
+ {
+ pnlsr.getAdl().setStatusOfNeighbor(neighbor,0);
+ // schedule event for building adjacency LSA
+ }
+
+}
+
+void
interestManager::expressInterest(nlsr& pnlsr,const string& interestNamePrefix,
int scope, int seconds)
{
@@ -51,9 +112,9 @@
i.setInterestLifetime(seconds*1000);
i.setMustBeFresh(true);
- pnlsr.nlsrFace.expressInterest(i,
+ pnlsr.getNlsrFace().expressInterest(i,
ndn::func_lib::bind(&DataManager::processContent,
- &pnlsr.dm, boost::ref(pnlsr),_1, _2),
+ &pnlsr.getDm(), boost::ref(pnlsr),_1, _2),
ndn::func_lib::bind(&interestManager::processInterestTimedOut,
this,boost::ref(pnlsr),_1));
}
@@ -62,22 +123,22 @@
void
interestManager::sendScheduledInfoInterest(nlsr& pnlsr, int seconds)
{
- std::list<Adjacent> adjList=pnlsr.adl.getAdjList();
+ std::list<Adjacent> adjList=pnlsr.getAdl().getAdjList();
for(std::list<Adjacent>::iterator it=adjList.begin(); it!=adjList.end();++it)
{
string adjName=(*it).getAdjacentName()+"/"+"info"+
- pnlsr.confParam.getRouterPrefix();
- expressInterest( pnlsr,adjName,2,pnlsr.confParam.getInterestResendTime());
+ pnlsr.getConfParameter().getRouterPrefix();
+ expressInterest( pnlsr,adjName,2,pnlsr.getConfParameter().getInterestResendTime());
}
- scheduleInfoInterest(pnlsr, pnlsr.confParam.getInfoInterestInterval());
+ scheduleInfoInterest(pnlsr, pnlsr.getConfParameter().getInfoInterestInterval());
}
void
interestManager::scheduleInfoInterest(nlsr& pnlsr, int seconds)
{
- pnlsr.scheduler.scheduleEvent(ndn::time::seconds(seconds),
+ pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(seconds),
ndn::bind(&interestManager::sendScheduledInfoInterest, this,
boost::ref(pnlsr),seconds));
}
diff --git a/nlsr_im.hpp b/nlsr_im.hpp
index 7e3eb9c..de6ba74 100644
--- a/nlsr_im.hpp
+++ b/nlsr_im.hpp
@@ -18,8 +18,12 @@
}
void processInterest(nlsr& pnlsr, const ptr_lib::shared_ptr<const Name> &name,
const ptr_lib::shared_ptr<const Interest> &interest);
+ void processInterestInfo(nlsr& pnlsr, string& neighbor,
+ const ptr_lib::shared_ptr<const Interest> &interest);
void processInterestTimedOut(nlsr& pnlsr,
const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest);
+ void processInterestTimedOutInfo(nlsr& pnlsr, string& neighbor,
+ const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest);
void expressInterest(nlsr& pnlsr,const string& interestNamePrefix, int scope,
int seconds);
void sendScheduledInfoInterest(nlsr& pnlsr, int seconds);
diff --git a/nlsr_tokenizer.cpp b/nlsr_tokenizer.cpp
index 7c82ecd..e03d2d2 100644
--- a/nlsr_tokenizer.cpp
+++ b/nlsr_tokenizer.cpp
@@ -57,16 +57,17 @@
nlsrTokenizer::getTokenString(int from , int to){
string returnString;
if ( from >=0 && to < tokenList.size()){
- int i=1;
+ int i=0;
for(std::list<string>::iterator it=tokenList.begin();
it!=tokenList.end();it++){
+ i++;
if( i >= from && i<= to ){
string oneToken((*it));
returnString+=seps;
returnString+=oneToken;
}
- i++;
+
}
}
@@ -78,16 +79,17 @@
nlsrTokenizer::getTokenString(int from){
string returnString;
if ( from >=0 && from < tokenList.size()){
- int i=1;
+ int i=0;
for(std::list<string>::iterator it=tokenList.begin();
it!=tokenList.end();it++){
+ i++;
if( i >= from){
string oneToken((*it));
returnString+=seps;
returnString+=oneToken;
}
- i++;
+
}
}