[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