[svn] commit: r628 - in /experiments/each-query/src/lib/auth/cpp: data_source.cc data_source.h

BIND 10 source code commits bind10-changes at lists.isc.org
Fri Jan 29 02:34:07 UTC 2010


Author: each
Date: Fri Jan 29 02:34:07 2010
New Revision: 628

Log:
checkpoint

Modified:
    experiments/each-query/src/lib/auth/cpp/data_source.cc
    experiments/each-query/src/lib/auth/cpp/data_source.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 Fri Jan 29 02:34:07 2010
@@ -11,10 +11,22 @@
 namespace dns {
 
 DSResult
-DataSource::runQuery(Query query)
-{
-        return (NOT_IMPLEMENTED);
-}
+DataSrc::runQuery(Query q) {
+    DSResult result;
+    Name container("");
+    RRsetList data, sigs;
+    DataSrcPtr ds = findClosestEnclosure(q.qname(), container);
+
+    if (q.wantDnssec()) {
+        result = ds->findRRset(q.qname(), q.qclass(), q.qtype(), data, sigs);
+    } else {
+        result = ds->findRRset(q.qname(), q.qclass(), q.qtype(), data);
+    }
+
+    // XXX this is temporary
+    return (result);
+};
+
 
 }
 }

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 Fri Jan 29 02:34:07 2010
@@ -17,6 +17,7 @@
 #ifndef __DATA_SOURCE_H
 #define __DATA_SOURCE_H
 
+#include <boost/foreach.hpp>
 #include <dns/cpp/name.h>
 #include <dns/cpp/rrset.h>
 #include <auth/cpp/query.h>
@@ -32,86 +33,106 @@
     NAME_NOT_FOUND
 };
 
-class AbstractDataSource;
-typedef boost::shared_ptr<AbstractDataSource> DataSourcePtr;
+class AbstractDataSrc;
+typedef boost::shared_ptr<AbstractDataSrc> DataSrcPtr;
 
-class AbstractDataSource {
+class AbstractDataSrc {
 public:
-    virtual ~AbstractDataSource();
+    virtual ~AbstractDataSrc();
 
     // 'High-level' methods.  These will be implemented by the
-    // general DataSource class, but MAY be overwritten by subclasses.
+    // general DataSrc class, but MAY be overwritten by subclasses.
     virtual DSResult runQuery(Query query) = 0;
 
     // Mandatory 'low-level' methods: These will NOT be implemented by
-    // the general DataSource class; subclasses MUST implement them.
-    virtual DSResult findClosestEnclosure(const Name& qname,
-                                          Name& container) = 0;
+    // the general DataSrc class; subclasses MUST implement them.
+    virtual DSResult findRRset(const Name& qname,
+                               const RRClass& qclass,
+                               const RRType& qtype,
+                               RRsetList& target,
+                               RRsetList& sigs) = 0;
 
     virtual DSResult findRRset(const Name& qname,
                                const RRClass& qclass,
                                const RRType& qtype,
-                               RRset& target, RRset& sigs) = 0;
+                               RRsetList& target) = 0;
+
+    virtual DataSrcPtr findClosestEnclosure(const Name& qname,
+                                               Name& container) = 0;
 
     // Optional 'low-level' methods.  These will have stub implementations
-    // in the general DataSource class but MAY be overwritten by subclasses
+    // in the general DataSrc class but MAY be overwritten by subclasses
     virtual DSResult init() = 0;
     virtual DSResult close() = 0;
+
+    virtual RRClass& getClass() = 0;
+    virtual RRClass& setClass() = 0;
 };
 
 // Base class for a DNS Data Source
-class DataSource : public AbstractDataSource {
+class DataSrc : public AbstractDataSrc {
 public:
-    DataSource() {};
-    virtual ~DataSource() {};
+    DataSrc() : rrclass(RRClass::IN()) {}
+    DataSrc(const RRClass& c) : rrclass(c) {}
+    virtual ~DataSrc() {};
 
     DSResult runQuery(Query q);
-
-    virtual DSResult findClosestEnclosure(const Name& qname,
-                                          Name& container) = 0;
 
     virtual DSResult findRRset(const Name& qname,
                                const RRClass& qclass,
                                const RRType& qtype,
-                               RRset& target, RRset& sigs) = 0;
+                               RRset& target,
+                               RRset& sigs) = 0;
+
+    virtual DSResult findRRset(const Name& qname,
+                               const RRClass& qclass,
+                               const RRType& qtype,
+                               RRsetList& target) = 0;
+
+    virtual DataSrcPtr findClosestEnclosure(const Name& qname,
+                                               Name& container) = 0;
+
+    RRClass& getClass() { return rrclass; }
+    void setClass(RRClass& c) { rrclass = c; }
 
     DSResult init() { return NOT_IMPLEMENTED; }
     DSResult close() { return NOT_IMPLEMENTED; }
+
+protected:
+    RRClass rrclass;
 };
 
-class MetaDataSource : public DataSource {
+class MetaDataSrc : public DataSrc {
 public:
-    MetaDataSource() {};
-    virtual ~MetaDataSource() {};
+    MetaDataSrc() : DataSrc(RRClass::IN()) {}
+    MetaDataSrc(const RRClass& c) : DataSrc(c) {}
+    virtual ~MetaDataSrc() {}
 
-    DSResult addDataSource(DataSourcePtr ds) {
-        data_sources.push(ds);
+    void addDataSrc(DataSrcPtr ds) {
+        if (ds->getClass() != getClass()) {
+            dns_throw(Unexpected, "class mismatch");
+        }
+
+        data_sources.push_back(ds);
     };
 
-    DSResult runQuery(Query q) {
-        Name container = new Name("");
-        DataSourcePtr best;
-        BOOST_FOREACH (DataSourcePtr ds, data_sources) {
+    DataSrcPtr findClosestEnclosure(const Name& qname, Name& container) {
+        DataSrcPtr best = DataSrcPtr();
+        BOOST_FOREACH (DataSrcPtr ds, data_sources) {
+            DataSrcPtr source;
             DSResult result;
 
-            if (ds->rdclass != q.qclass())
-                continue;
-            result = ds->findClosestEnclosure(q.qname(), container);
-            if (result == SUCCESS)
-                best = ds;
+            source = ds->findClosestEnclosure(qname, container);
+            if (result == SUCCESS) {
+                best = source;
+            }
         }
-    };
 
-    DSResult findClosestEnclosure(const Name& qname, Name& container) {
-    };
-
-    DSResult findRRset(const Name& qname, const RRClass& qclass,
-                       const RRType& qtype, RRset& target, RRset& sigs) {
+        return (best);
     };
 
 private:
-    std::vector<DataSourcePtr> data_sources;
-
+    std::vector<DataSrcPtr> data_sources;
 };
 
 }




More information about the bind10-changes mailing list