123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 |
- #ifndef __DATA_SOURCE_H
- #define __DATA_SOURCE_H
- #include <stdint.h>
- #include <vector>
- #include <boost/shared_ptr.hpp>
- #include <exceptions/exceptions.h>
- #include <dns/name.h>
- #include <dns/rrclass.h>
- #include <cc/data.h>
- namespace isc {
- namespace dns {
- class Name;
- class RRType;
- class RRset;
- class RRsetList;
- }
- namespace datasrc {
- class DataSrcMatch;
- class Query;
- class DataSrc;
- typedef boost::shared_ptr<DataSrc> DataSrcPtr;
- typedef boost::shared_ptr<const DataSrc> ConstDataSrcPtr;
- class DataSourceError : public Exception {
- public:
- DataSourceError(const char* file, size_t line, const char* what) :
- isc::Exception(file, line, what) {}
- };
- class AbstractDataSrc {
-
-
-
-
-
- private:
- AbstractDataSrc(const AbstractDataSrc& source);
- AbstractDataSrc& operator=(const AbstractDataSrc& source);
- protected:
-
-
-
-
- AbstractDataSrc() {}
- public:
-
- virtual ~AbstractDataSrc() {};
-
- enum Result {
- SUCCESS,
- ERROR,
- NOT_IMPLEMENTED
- };
-
-
-
-
-
-
-
-
-
- enum QueryResponseFlags {
- REFERRAL = 0x01,
- CNAME_FOUND = 0x02,
- NAME_NOT_FOUND = 0x04,
- TYPE_NOT_FOUND = 0x08,
- NO_SUCH_ZONE = 0x10,
- DATA_NOT_FOUND = (NAME_NOT_FOUND|TYPE_NOT_FOUND|NO_SUCH_ZONE)
- };
-
-
- virtual void doQuery(Query& query) = 0;
-
-
-
-
-
- virtual void findClosestEnclosure(DataSrcMatch& match) const = 0;
-
-
- virtual Result init() = 0;
- virtual Result init(isc::data::ConstElementPtr config) = 0;
- virtual Result close() = 0;
-
-
- virtual Result findRRset(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- const isc::dns::RRType& qtype,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const = 0;
- virtual Result findExactRRset(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- const isc::dns::RRType& qtype,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const = 0;
-
-
- virtual Result findAddrs(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const = 0;
- virtual Result findReferral(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const = 0;
-
-
- virtual Result findPreviousName(const isc::dns::Name& qname,
- isc::dns::Name& target,
- const isc::dns::Name* zonename) const = 0;
-
-
- virtual Result findCoveringNSEC3(const isc::dns::Name& zonename,
- std::string& hash,
- isc::dns::RRsetList& target) const = 0;
- };
- class DataSrc : public AbstractDataSrc {
-
-
-
-
-
- private:
- DataSrc(const DataSrc& source);
- DataSrc& operator=(const DataSrc& source);
- public:
- DataSrc() : rrclass(isc::dns::RRClass::IN()) {}
- DataSrc(const isc::dns::RRClass& c) : rrclass(c) {}
-
- virtual ~DataSrc() {};
-
- virtual void doQuery(Query& q);
- virtual void findClosestEnclosure(DataSrcMatch& match) const = 0;
- const isc::dns::RRClass& getClass() const { return (rrclass); }
- void setClass(isc::dns::RRClass& c) { rrclass = c; }
- void setClass(const isc::dns::RRClass& c) { rrclass = c; }
- Result init() { return (NOT_IMPLEMENTED); }
- Result init(isc::data::ConstElementPtr config);
- Result close() { return (NOT_IMPLEMENTED); }
- virtual Result findRRset(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- const isc::dns::RRType& qtype,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const = 0;
- virtual Result findExactRRset(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- const isc::dns::RRType& qtype,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const = 0;
- virtual Result findAddrs(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const;
- virtual Result findReferral(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const;
- virtual Result findPreviousName(const isc::dns::Name& qname,
- isc::dns::Name& target,
- const isc::dns::Name* zonename) const = 0;
- virtual Result findCoveringNSEC3(const isc::dns::Name& zonename,
- std::string& hash,
- isc::dns::RRsetList& target) const = 0;
- private:
- isc::dns::RRClass rrclass;
- };
- class MetaDataSrc : public DataSrc {
-
-
-
-
-
-
- private:
- MetaDataSrc(const MetaDataSrc& source);
- MetaDataSrc& operator=(const MetaDataSrc& source);
- public:
- MetaDataSrc() : DataSrc(isc::dns::RRClass::ANY()) {}
- MetaDataSrc(const isc::dns::RRClass& c) : DataSrc(c) {}
-
- virtual ~MetaDataSrc() {}
-
- void addDataSrc(ConstDataSrcPtr data_src);
- void removeDataSrc(ConstDataSrcPtr data_src);
- size_t dataSrcCount() { return (data_sources.size()); }
- void findClosestEnclosure(DataSrcMatch& match) const;
-
-
-
-
-
-
- Result findRRset(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- const isc::dns::RRType& qtype,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const;
- Result findExactRRset(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- const isc::dns::RRType& qtype,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const;
- Result findAddrs(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const;
- Result findReferral(const isc::dns::Name& qname,
- const isc::dns::RRClass& qclass,
- isc::dns::RRsetList& target,
- uint32_t& flags,
- const isc::dns::Name* zonename) const;
- virtual Result findPreviousName(const isc::dns::Name& qname,
- isc::dns::Name& target,
- const isc::dns::Name* zonename) const;
- virtual Result findCoveringNSEC3(const isc::dns::Name& zonename,
- std::string& hash,
- isc::dns::RRsetList& target) const;
- private:
- std::vector<ConstDataSrcPtr> data_sources;
- };
- class DataSrcMatch {
-
-
-
-
-
-
- private:
- DataSrcMatch(const DataSrcMatch& source);
- DataSrcMatch& operator=(const DataSrcMatch& source);
- public:
-
-
-
-
-
-
-
-
-
- DataSrcMatch(const isc::dns::Name& name,
- const isc::dns::RRClass& rrclass) :
- closest_name_(NULL), best_source_(NULL),
- name_(name), rrclass_(rrclass)
- {}
- ~DataSrcMatch();
-
-
-
-
- const isc::dns::Name& getName() const { return (name_); }
-
-
-
- const isc::dns::RRClass& getClass() const { return (rrclass_); }
-
-
-
-
-
-
- const isc::dns::Name* getEnclosingZone() const { return (closest_name_); }
-
-
-
-
-
-
- const DataSrc* getDataSource() const { return (best_source_); }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- void update(const DataSrc& new_source, const isc::dns::Name& container);
- private:
- isc::dns::Name* closest_name_;
- const DataSrc* best_source_;
- const isc::dns::Name name_;
- const isc::dns::RRClass& rrclass_;
- };
- class Nsec3Param {
- public:
- Nsec3Param(uint8_t a, uint8_t f, uint16_t i, const std::vector<uint8_t>& s);
- std::string getHash(const isc::dns::Name& name) const;
- private:
- const uint8_t algorithm_;
- const uint8_t flags_;
- const uint16_t iterations_;
- const std::vector<uint8_t> salt_;
- };
- }
- }
- #endif
|