support for NS, TXT, NDNCERT, FH
diff --git a/src/iterative-query.hpp b/src/iterative-query.hpp
index 3f0ab98..aff9e43 100644
--- a/src/iterative-query.hpp
+++ b/src/iterative-query.hpp
@@ -26,6 +26,9 @@
#include <cstdbool>
#include <iostream>
+#include <boost/algorithm/string/predicate.hpp>
+#include <boost/lexical_cast.hpp>
+
#include "query.hpp"
#include "response.hpp"
//#include "rr.hpp"
@@ -37,23 +40,24 @@
{
public:
- enum QuerySteps{
- NSQuery,
+ enum QuerySteps
+ {
+ NSQuery=1,
NackNS,
RRQuery,
NackRR,
+ FHQuery,
AnswerStub,
Abort,
- FinishedSuccessfully
+ FinishedSuccessfully,
+ UNKNOWN
};
-
static std::string
toString(const QuerySteps& step)
{
std::string label;
- switch(step)
- {
+ switch (step) {
case NSQuery:
label = "NSQuery";
break;
@@ -66,12 +70,18 @@
case NackRR:
label = "NackRR";
break;
+ case FHQuery:
+ label = "FHQuery";
+ break;
case AnswerStub:
label = "AnswerStub";
break;
case Abort:
label = "Abort";
break;
+ case FinishedSuccessfully:
+ label = "FinishedSuccessfully";
+ break;
default:
label = "UNKNOW";
}
@@ -79,109 +89,157 @@
return label;
}
-public:
- IterativeQuery(const Query& );
+ static QuerySteps
+ toQuerySteps(std::string str)
+ {
+ QuerySteps step = UNKNOWN;
+ if (str == "NSQuery") {
+ step = NSQuery;
+ } else if (str == "NackNS") {
+ step = NackNS;
+ } else if (str == "RRQuery") {
+ step = RRQuery;
+ } else if (str == "NackRR") {
+ step = NackRR;
+ } else if (str == "FHQuery")
+ step = FHQuery;
+ else if (str == "AnswerStub")
+ step = AnswerStub;
+ else if (str == "Abort")
+ step = Abort;
+ else if (str == "FinishedSuccessfully")
+ step = FinishedSuccessfully;
+ else
+ step = UNKNOWN;
- void
+ return step;
+ }
+
+
+public:
+ IterativeQuery(const Query&);
+
+ virtual void
doData(Data& data);
- bool
+ virtual bool
doTimeout();
+ void abort();
- void
- abort();
-
-
- const Interest
+ virtual const Interest
toLatestInterest();
-
- bool hasFinished() {
+ bool hasFinished()
+ {
return m_query.getRrLabel().size() == m_finishedLabelNum;
}
- void addTryNum() {
+ void addTryNum()
+ {
m_tryNum += 1;
}
- ssize_t getFinishedLabelNum() const {
+ ssize_t getFinishedLabelNum() const
+ {
return m_finishedLabelNum;
}
- void setFinishedLabelNum(ssize_t finishedLabelNum) {
+ void setFinishedLabelNum(ssize_t finishedLabelNum)
+ {
m_finishedLabelNum = finishedLabelNum;
}
- const Query& getQuery() const {
+ const Query& getQuery() const
+ {
return m_query;
}
- const Response& getLastResponse() const {
+ const Response& getLastResponse() const
+ {
return m_lastResponse;
}
- void setLastResponse(const Response& response) {
+ void setLastResponse(const Response& response)
+ {
m_lastResponse = response;
}
- unsigned short getTryMax() const {
+ unsigned short getTryMax() const
+ {
return m_tryMax;
}
- void setTryMax(unsigned short tryMax) {
+ void setTryMax(unsigned short tryMax)
+ {
m_tryMax = tryMax;
}
- unsigned short getTryNum() const {
+ unsigned short getTryNum() const
+ {
return m_tryNum;
}
- void setTryNum(unsigned short tryNum) {
+ void setTryNum(unsigned short tryNum)
+ {
m_tryNum = tryNum;
}
- const Interest& getLastInterest() const {
+ const Interest& getLastInterest() const
+ {
return m_lastInterest;
}
- void setLastInterest(const Interest& lastInterest) {
+ void setLastInterest(const Interest& lastInterest)
+ {
m_lastInterest = lastInterest;
}
- QuerySteps getStep() const {
+ QuerySteps getStep() const
+ {
return m_step;
}
-
- void setStep(QuerySteps step) {
+/*
+ void setStep(QuerySteps step)
+ {
m_step = step;
}
-
- ssize_t getRrLabelLen() const {
+*/
+ ssize_t getRrLabelLen() const
+ {
return m_rrLabelLen;
}
- void setRrLabelLen(ssize_t rrLabelLen) {
+ void setRrLabelLen(ssize_t rrLabelLen)
+ {
m_rrLabelLen = rrLabelLen;
}
- unsigned int getAuthZoneIndex() const {
+ unsigned int getAuthZoneIndex() const
+ {
return m_authZoneIndex;
}
- void setRrAsNextAuthorityZoneToTry(unsigned int authZoneIndex) {
+ void setRrAsNextAuthorityZoneToTry(unsigned int authZoneIndex)
+ {
m_authZoneIndex = authZoneIndex;
}
-private:
+ /**
+ * The function is neccesarry since the template of class CachingResolver call setForwardingHint
+
+ void setForwardingHint(const Name& lastForwardingHint)
+ {
+ }
+*/
+protected:
QuerySteps m_step;
unsigned short m_tryNum;
unsigned short m_tryMax;
//Name m_dstLabel;
-
/*
* the original query, not the intermediate query
*/
@@ -193,13 +251,19 @@
*/
ssize_t m_finishedLabelNum;
+
+ /*
+ * used when query the KSK (key signing key), e.g., /net/ndnsim/ksk-1
+ */
+ ssize_t m_lastFinishedLabelNum;
+
+
/*
* the number used to generated the label
* query.getRrLabel().getSubName(m_finishedLabelNum, m_labelLength);
*/
ssize_t m_rrLabelLen;
-
/*
* m_lastResponse is changed once a new expecting Data is understood:
* response.from(data)
@@ -211,26 +275,24 @@
*/
unsigned int m_authZoneIndex;
-
-
-
/*
* last interest that has sent
*/
Interest m_lastInterest;
+
+ //friend class IterativeQueryWithForwardingHint;
};
inline std::ostream&
operator<<(std::ostream& os, const IterativeQuery iq)
{
- os<<"InterativeQuery: dstLabel="<<iq.getQuery().getRrLabel().toUri()
- <<" currentStep="<<IterativeQuery::toString( iq.getStep())
- <<" finishedLabel="<<iq.getFinishedLabelNum()
- <<" rrLabelen="<<iq.getRrLabelLen()
- <<" NextAuZoneIndex="<<iq.getAuthZoneIndex()
- << " [OriginalQuery: " <<iq.getQuery() << "]"
- <<" [LastReponse: "<<iq.getLastResponse()<<"]"
- <<" [LastInterest: " <<iq.getLastInterest()<<"]";
+ os << "InterativeQuery: dstLabel=" << iq.getQuery().getRrLabel().toUri()
+ << " currentStep=" << IterativeQuery::toString(iq.getStep())
+ << " finishedLabel=" << iq.getFinishedLabelNum() << " rrLabelen="
+ << iq.getRrLabelLen() << " NextAuZoneIndex=" << iq.getAuthZoneIndex()
+ << " [OriginalQuery: " << iq.getQuery() << "]" << " [LastReponse: "
+ << iq.getLastResponse() << "]" << " [LastInterest: "
+ << iq.getLastInterest() << "]";
return os;
}