[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