123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- #ifndef __RDATA_H
- #define __RDATA_H 1
- #include <stdint.h>
- #include <boost/shared_ptr.hpp>
- #include "name.h"
- namespace isc {
- namespace dns {
- class InputBuffer;
- class OutputBuffer;
- class MessageRenderer;
- class RRType;
- class RRClass;
- class Name;
- namespace rdata {
- class InvalidRdataLength : public Exception {
- public:
- InvalidRdataLength(const char* file, size_t line, const char* what) :
- isc::dns::Exception(file, line, what) {}
- };
- class InvalidRdataText : public Exception {
- public:
- InvalidRdataText(const char* file, size_t line, const char* what) :
- isc::dns::Exception(file, line, what) {}
- };
- class CharStringTooLong : public Exception {
- public:
- CharStringTooLong(const char* file, size_t line, const char* what) :
- isc::dns::Exception(file, line, what) {}
- };
- class Rdata;
- typedef boost::shared_ptr<Rdata> RdataPtr;
- class Rdata {
- protected:
- Rdata() {}
- private:
-
-
- Rdata(const Rdata& source);
- void operator=(const Rdata& source);
- public:
- virtual ~Rdata() {};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual std::string toText() const = 0;
- virtual void toWire(OutputBuffer& buffer) const = 0;
- virtual void toWire(MessageRenderer& renderer) const = 0;
-
-
-
-
-
-
-
- virtual int compare(const Rdata& other) const = 0;
-
-
-
-
-
-
- };
- namespace generic {
- class Generic : public Rdata {
- public:
- explicit Generic(const std::string& rdata_string);
- explicit Generic(InputBuffer& buffer, size_t rdata_len);
- virtual std::string toText() const;
- virtual void toWire(OutputBuffer& buffer) const;
- virtual void toWire(MessageRenderer& renderer) const;
-
-
-
-
-
- virtual int compare(const Rdata& other) const;
- private:
- std::vector<uint8_t> data_;
- };
- class NS : public Rdata {
- public:
- explicit NS(const std::string& namestr) : nsname_(namestr) {}
- explicit NS(InputBuffer& buffer, size_t rdata_len);
- NS(const NS& other);
- virtual std::string toText() const;
- virtual void toWire(OutputBuffer& buffer) const;
- virtual void toWire(MessageRenderer& buffer) const;
- virtual int compare(const Rdata& other) const;
-
-
-
- explicit NS(const Name& nsname) : nsname_(nsname) {}
-
-
-
- const Name& getNSName() const;
- private:
- Name nsname_;
- };
- class SOA : public Rdata {
- public:
- explicit SOA(const std::string& soastr);
- explicit SOA(InputBuffer& buffer, size_t rdata_len);
- explicit SOA(const Name& mname, const Name& rname, uint32_t serial,
- uint32_t refresh, uint32_t retry, uint32_t expire,
- uint32_t minimum);
- SOA(const SOA& other);
- virtual ~SOA() {}
- virtual std::string toText() const;
- virtual void toWire(OutputBuffer& buffer) const;
- virtual void toWire(MessageRenderer& buffer) const;
- virtual int compare(const Rdata& other) const;
- private:
-
-
- Name mname_;
- Name rname_;
-
- uint8_t numdata_[20];
- };
- class MX : public Rdata {
- public:
- explicit MX(const std::string& mxstr);
- explicit MX(InputBuffer& buffer, size_t rdata_len);
- explicit MX(uint16_t preference, const Name& mxname);
- MX(const MX& other);
- virtual std::string toText() const;
- virtual void toWire(OutputBuffer& buffer) const;
- virtual void toWire(MessageRenderer& buffer) const;
- virtual int compare(const Rdata& other) const;
- private:
-
-
- uint16_t preference_;
- Name mxname_;
- };
- class TXT : public Rdata {
- public:
- explicit TXT(const std::string& txtstr);
- explicit TXT(InputBuffer& buffer, size_t rdata_len);
- TXT(const TXT& other);
- virtual std::string toText() const;
- virtual void toWire(OutputBuffer& buffer) const;
- virtual void toWire(MessageRenderer& buffer) const;
- virtual int compare(const Rdata& other) const;
- private:
-
-
- static const unsigned int MAX_CHARSTRING_LEN = 255;
- std::vector<std::vector<uint8_t> > string_list_;
- };
- }
- namespace in {
- class A : public Rdata {
- public:
-
- explicit A(const std::string& addrstr);
- explicit A(InputBuffer& buffer, size_t rdata_len);
- A(const A& ohter);
- virtual std::string toText() const;
- virtual void toWire(OutputBuffer& buffer) const;
- virtual void toWire(MessageRenderer& renderer) const;
- virtual int compare(const Rdata& other) const;
-
-
-
-
- private:
- uint32_t addr_;
- };
- class AAAA : public Rdata {
- public:
-
- explicit AAAA(const std::string& addrstr);
- explicit AAAA(InputBuffer& buffer, size_t rdata_len);
- AAAA(const AAAA& ohter);
- virtual std::string toText() const;
- virtual void toWire(OutputBuffer& buffer) const;
- virtual void toWire(MessageRenderer& renderer) const;
- virtual int compare(const Rdata& other) const;
-
-
-
-
- private:
- uint8_t addr_[16];
- };
- }
- namespace ch {
- class A : public Rdata {
- public:
- explicit A(const std::string& addrstr);
- explicit A(InputBuffer& buffer, size_t rdata_len);
- A(const A& ohter);
- virtual std::string toText() const;
- virtual void toWire(OutputBuffer& buffer) const;
- virtual void toWire(MessageRenderer& renderer) const;
- virtual int compare(const Rdata& other) const;
- private:
- };
- }
- RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
- const std::string& rdata_string);
- RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
- InputBuffer& buffer, size_t len);
- RdataPtr createRdata(const RRType& rrtype, const RRClass& rrclass,
- const Rdata& source);
- int
- compareNames(const Name& n1, const Name& n2);
- }
- }
- }
- #endif
|