[svn] commit: r605 - in /experiments/each-query/src/lib/auth/cpp: data_source.cc data_source.h query.h
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Jan 28 22:20:00 UTC 2010
Author: each
Date: Thu Jan 28 22:20:00 2010
New Revision: 605
Log:
checkpoint
Modified:
experiments/each-query/src/lib/auth/cpp/data_source.cc
experiments/each-query/src/lib/auth/cpp/data_source.h
experiments/each-query/src/lib/auth/cpp/query.h
Modified: experiments/each-query/src/lib/auth/cpp/data_source.cc
==============================================================================
--- experiments/each-query/src/lib/auth/cpp/data_source.cc (original)
+++ experiments/each-query/src/lib/auth/cpp/data_source.cc Thu Jan 28 22:20:00 2010
@@ -5,15 +5,15 @@
#include <cc/cpp/data.h>
-#include <auth/cpp/data_source.h>
+#include "data_source.h"
namespace isc {
namespace dns {
-void
-DataSource::getData(isc::dns::RRsetPtr query, isc::dns::Message& answer)
+DataSourceResult
+DataSource::runQuery(Query query)
{
- return;
+ return (NOT_IMPLEMENTED);
}
}
Modified: experiments/each-query/src/lib/auth/cpp/data_source.h
==============================================================================
--- experiments/each-query/src/lib/auth/cpp/data_source.h (original)
+++ experiments/each-query/src/lib/auth/cpp/data_source.h Thu Jan 28 22:20:00 2010
@@ -24,14 +24,20 @@
namespace isc {
namespace dns {
-// Base class for a DNS Data Source
-class DataSource {
+enum DataSourceResult {
+ SUCCESS,
+ NOT_IMPLEMENTED,
+ ERROR,
+ ZONE_NOT_FOUND,
+ NAME_NOT_FOUND
+};
+
+class AbstractDataSource;
+typedef boost::shared_ptr<AbstractDataSource> DataSourcePtr;
+
+class AbstractDataSource {
public:
- //enum result { success, not_implemented, error, zone_not_found,
- // name_not_found };
-
- DataSource() {};
- virtual ~DataSource() {};
+ virtual ~AbstractDataSource();
//
// 'high-level' methods, these may or may not be overwritten;
@@ -39,14 +45,11 @@
// may not be most efficient, but should at least provide
// the needed functionality
//
-
- // fill in separate lists or simple fill in an answer Message object?
- void getData(const RRsetPtr query, Message& answer);
+ virtual DataSourceResult runQuery(Query query) = 0;
// how to provide highlevel update data?
//result handleUpdate()
-
//
// mandatory 'low-level' methods, an implementation must overwrite these
//
@@ -64,29 +67,41 @@
// for the zone_name, see getZoneFor, perhaps this needs to be a more
// general handle
// And perhaps we need a function that does not have that argument too
- virtual int findRRsets(Query &query) = 0;
+ virtual DataSourceResult findRRsets(Query &query) = 0;
//
// optional 'low-level' methods, an implementation may overwrite these,
- // by default they return not_implemented
+ // by default they return NOT_IMPLEMENTED
//
- virtual void init() {};
- virtual void close() {};
+ virtual DataSourceResult init() = 0;
+ virtual DataSourceResult close() = 0;
+
//virtual result addRR(Name name, int clas, int type,
// int ttl, Rdata::RdataPtr data)
- // { return not_implemented; };
+ // { return NOT_IMPLEMENTED; };
//virtual result delRR(isc::dns::Name name, int clas, int type) = 0;
// on name/class/type again? or use an already constructed object?
//virtual result getRRSigs(RRsetPtr target, const RRsetPtr rrset)
- // { return not_implemented; };
+ // { return NOT_IMPLEMENTED; };
//virtual result getNSECs(RRsetPtr target, const RRsetPtr rrset)
- // { return not_implemented; };
+ // { return NOT_IMPLEMENTED; };
// check if the zone exists, and if so, return something that could
// be used as a pointer for the rest of these functions?
// do we need this? do we want this?
//virtual int getZone(void* zone, isc::dns::Name name);
-
+};
+
+// Base class for a DNS Data Source
+class DataSource : public AbstractDataSource {
+public:
+ DataSource() {};
+ virtual ~DataSource() {};
+
+ DataSourceResult runQuery(Query q);
+
+ DataSourceResult init() { return NOT_IMPLEMENTED; }
+ DataSourceResult close() { return NOT_IMPLEMENTED; }
};
}
Modified: experiments/each-query/src/lib/auth/cpp/query.h
==============================================================================
--- experiments/each-query/src/lib/auth/cpp/query.h (original)
+++ experiments/each-query/src/lib/auth/cpp/query.h Thu Jan 28 22:20:00 2010
@@ -28,7 +28,11 @@
namespace isc {
namespace dns {
-enum QueryResult { success, incomplete, not_found };
+enum QueryStatus {
+ INCOMPLETE,
+ DATA_FOUND,
+ NO_DATA
+};
///
/// \brief exception to throw if a DNS Message is malformed
@@ -56,14 +60,45 @@
SectionCode section;
};
+typedef std::queue<QueryTask*> QueryTaskQueue;
+
+class AbstractQuery;
+typedef boost::shared_ptr<AbstractQuery> QueryPtr;
+
+class AbstractQuery {
+public:
+ virtual ~AbstractQuery();
+ // wantAdditional() == true indicates that additional-section data
+ // should be looked up while processing this query. false indicates
+ // that we're only interested in answer-section data
+ virtual bool wantAdditional() = 0;
+ virtual void setWantAdditional(bool d) = 0;
+
+ // wantDnssec() == true indicates that DNSSEC data should be retrieved
+ // from the data source when this query is being processed
+ virtual bool wantDnssec() = 0;
+ virtual void setWantDnssec(bool d) = 0;
+
+ virtual const Name& qname() = 0;
+ virtual const RRClass& qclass() = 0;
+ virtual const RRType& qtype() = 0;
+
+ virtual Message& message() = 0;
+ virtual QueryTaskQueue& tasks() = 0;
+
+ virtual QueryStatus result() = 0;
+ virtual void setStatus(QueryStatus s) = 0;
+};
+
+
// Data Source query
-class Query {
+class Query : public AbstractQuery {
public:
Query(Message& m, bool dnssec) {
message_ = &m;
want_additional = true;
want_dnssec = dnssec;
- _result = incomplete;
+ status_ = INCOMPLETE;
// Check message formatting
QuestionIterator qid = message_->beginQuestion();
@@ -76,7 +111,8 @@
qname_ = &query->getName();
qclass_ = &query->getClass();
qtype_ = &query->getType();
- querytasks.push(new QueryTask(*qname_, *qclass_, *qtype_, answer));
+ querytasks.push(new QueryTask(*qname_, *qclass_, *qtype_,
+ ANSWER_SECTION));
};
virtual ~Query() {}
@@ -97,12 +133,13 @@
const RRType& qtype() { return *qtype_; }
Message& message() { return *message_; }
- std::queue<QueryTask*>& tasks() { return querytasks; }
+ QueryTaskQueue& tasks() { return querytasks; }
- QueryResult result() { return _result; }
+ QueryStatus result() { return status_; }
+ void setStatus(QueryStatus s) { status_ = s; }
protected:
- QueryResult _result;
+ QueryStatus status_;
private:
const Name* qname_;
@@ -110,7 +147,7 @@
const RRType* qtype_;
Message* message_;
- std::queue<QueryTask*> querytasks;
+ QueryTaskQueue querytasks;
bool want_additional;
bool want_dnssec;
More information about the bind10-changes
mailing list