wip
This commit is contained in:
1 parent
af592f2082
commit
c0b549631c
6 files changed
+239
-190
No files matched your search
@@ -1,72 +0,0 @@
|
||||
#include "Record.hpp"
|
||||
|
||||
|
||||
namespace Plains {
|
||||
namespace Core {
|
||||
namespace DNS {
|
||||
|
||||
|
||||
Record::Record(const uint16_t id) : _id(id) {
|
||||
_os = new ostream(&_sb);
|
||||
*_os << "NOT IMPLEMENTED";
|
||||
}
|
||||
|
||||
Record::~Record() {
|
||||
delete _os;
|
||||
}
|
||||
|
||||
ostream& Record::serialze() {
|
||||
return *_os;
|
||||
}
|
||||
|
||||
ARecord::ARecord() : Record(1) {}
|
||||
AAAARecord::AAAARecord() : Record(28) {}
|
||||
AFSDBRecord::AFSDBRecord() : Record(18) {}
|
||||
APLRecord::APLRecord() : Record(42) {}
|
||||
CAARecord::CAARecord() : Record(257) {}
|
||||
CDNSKEYRecord::CDNSKEYRecord() : Record(60) {}
|
||||
CDSRecord::CDSRecord() : Record(59) {}
|
||||
CERTRecord::CERTRecord() : Record(37) {}
|
||||
CNAMERecord::CNAMERecord() : Record(5) {}
|
||||
CSYNCRecord::CSYNCRecord() : Record(62) {}
|
||||
DHCIDRecord::DHCIDRecord() : Record(49) {}
|
||||
DLVRecord::DLVRecord() : Record(32769) {}
|
||||
DNAMERecord::DNAMERecord() : Record(39) {}
|
||||
DNSKEYRecord::DNSKEYRecord() : Record(48) {}
|
||||
DSRecord::DSRecord() : Record(43) {}
|
||||
EUI48Record::EUI48Record() : Record(108) {}
|
||||
EUI64Record::EUI64Record() : Record(109) {}
|
||||
HINFORecord::HINFORecord() : Record(13) {}
|
||||
HIPRecord::HIPRecord() : Record(55) {}
|
||||
IPSECKEYRecord::IPSECKEYRecord() : Record(45) {}
|
||||
KEYRecord::KEYRecord() : Record(25) {}
|
||||
KXRecord::KXRecord() : Record(36) {}
|
||||
LOCRecord::LOCRecord() : Record(29) {}
|
||||
MXRecord::MXRecord() : Record(15) {}
|
||||
NAPTRRecord::NAPTRRecord() : Record(35) {}
|
||||
NSRecord::NSRecord() : Record(2) {}
|
||||
NSECRecord::NSECRecord() : Record(47) {}
|
||||
NSEC3Record::NSEC3Record() : Record(50) {}
|
||||
NSEC3PARAMRecord::NSEC3PARAMRecord() : Record(51) {}
|
||||
OPENPGPKEYRecord::OPENPGPKEYRecord() : Record(61) {}
|
||||
PTRRecord::PTRRecord() : Record(12) {}
|
||||
RRSIGRecord::RRSIGRecord() : Record(46) {}
|
||||
RPRecord::RPRecord() : Record(17) {}
|
||||
SIGRecord::SIGRecord() : Record(24) {}
|
||||
SMIMEARecord::SMIMEARecord() : Record(53) {}
|
||||
SOARecord::SOARecord() : Record(6) {}
|
||||
SRVRecord::SRVRecord() : Record(33) {}
|
||||
SSHFPRecord::SSHFPRecord() : Record(44) {}
|
||||
TARecord::TARecord() : Record(32768) {}
|
||||
TKEYRecord::TKEYRecord() : Record(249) {}
|
||||
TLSARecord::TLSARecord() : Record(52) {}
|
||||
TSIGRecord::TSIGRecord() : Record(250) {}
|
||||
TXTRecord::TXTRecord() : Record(16) {}
|
||||
URIRecord::URIRecord() : Record(256) {}
|
||||
ZONEMDRecord::ZONEMDRecord() : Record(63) {}
|
||||
SVCBRecord::SVCBRecord() : Record(64) {}
|
||||
HTTPSRecord::HTTPSRecord() : Record(65) {}
|
||||
|
||||
|
||||
|
||||
}}}
|
||||
@@ -0,0 +1,72 @@
|
||||
#include "Record.hpp"
|
||||
|
||||
|
||||
namespace Plains {
|
||||
namespace Core {
|
||||
namespace DNS {
|
||||
|
||||
|
||||
ResourceRecord::ResourceRecord(const uint16_t id) : _id(id) {
|
||||
_os = new ostream(&_sb);
|
||||
*_os << "NOT IMPLEMENTED";
|
||||
}
|
||||
|
||||
ResourceRecord::~ResourceRecord() {
|
||||
delete _os;
|
||||
}
|
||||
|
||||
ostream& ResourceRecord::serialze() {
|
||||
return *_os;
|
||||
}
|
||||
|
||||
ARecord::ARecord() : ResourceRecord(1) {}
|
||||
AAAARecord::AAAARecord() : ResourceRecord(28) {}
|
||||
AFSDBRecord::AFSDBRecord() : ResourceRecord(18) {}
|
||||
APLRecord::APLRecord() : ResourceRecord(42) {}
|
||||
CAARecord::CAARecord() : ResourceRecord(257) {}
|
||||
CDNSKEYRecord::CDNSKEYRecord() : ResourceRecord(60) {}
|
||||
CDSRecord::CDSRecord() : ResourceRecord(59) {}
|
||||
CERTRecord::CERTRecord() : ResourceRecord(37) {}
|
||||
CNAMERecord::CNAMERecord() : ResourceRecord(5) {}
|
||||
CSYNCRecord::CSYNCRecord() : ResourceRecord(62) {}
|
||||
DHCIDRecord::DHCIDRecord() : ResourceRecord(49) {}
|
||||
DLVRecord::DLVRecord() : ResourceRecord(32769) {}
|
||||
DNAMERecord::DNAMERecord() : ResourceRecord(39) {}
|
||||
DNSKEYRecord::DNSKEYRecord() : ResourceRecord(48) {}
|
||||
DSRecord::DSRecord() : ResourceRecord(43) {}
|
||||
EUI48Record::EUI48Record() : ResourceRecord(108) {}
|
||||
EUI64Record::EUI64Record() : ResourceRecord(109) {}
|
||||
HINFORecord::HINFORecord() : ResourceRecord(13) {}
|
||||
HIPRecord::HIPRecord() : ResourceRecord(55) {}
|
||||
IPSECKEYRecord::IPSECKEYRecord() : ResourceRecord(45) {}
|
||||
KEYRecord::KEYRecord() : ResourceRecord(25) {}
|
||||
KXRecord::KXRecord() : ResourceRecord(36) {}
|
||||
LOCRecord::LOCRecord() : ResourceRecord(29) {}
|
||||
MXRecord::MXRecord() : ResourceRecord(15) {}
|
||||
NAPTRRecord::NAPTRRecord() : ResourceRecord(35) {}
|
||||
NSRecord::NSRecord() : ResourceRecord(2) {}
|
||||
NSECRecord::NSECRecord() : ResourceRecord(47) {}
|
||||
NSEC3Record::NSEC3Record() : ResourceRecord(50) {}
|
||||
NSEC3PARAMRecord::NSEC3PARAMRecord() : ResourceRecord(51) {}
|
||||
OPENPGPKEYRecord::OPENPGPKEYRecord() : ResourceRecord(61) {}
|
||||
PTRRecord::PTRRecord() : ResourceRecord(12) {}
|
||||
RRSIGRecord::RRSIGRecord() : ResourceRecord(46) {}
|
||||
RPRecord::RPRecord() : ResourceRecord(17) {}
|
||||
SIGRecord::SIGRecord() : ResourceRecord(24) {}
|
||||
SMIMEARecord::SMIMEARecord() : ResourceRecord(53) {}
|
||||
SOARecord::SOARecord() : ResourceRecord(6) {}
|
||||
SRVRecord::SRVRecord() : ResourceRecord(33) {}
|
||||
SSHFPRecord::SSHFPRecord() : ResourceRecord(44) {}
|
||||
TARecord::TARecord() : ResourceRecord(32768) {}
|
||||
TKEYRecord::TKEYRecord() : ResourceRecord(249) {}
|
||||
TLSARecord::TLSARecord() : ResourceRecord(52) {}
|
||||
TSIGRecord::TSIGRecord() : ResourceRecord(250) {}
|
||||
TXTRecord::TXTRecord() : ResourceRecord(16) {}
|
||||
URIRecord::URIRecord() : ResourceRecord(256) {}
|
||||
ZONEMDRecord::ZONEMDRecord() : ResourceRecord(63) {}
|
||||
SVCBRecord::SVCBRecord() : ResourceRecord(64) {}
|
||||
HTTPSRecord::HTTPSRecord() : ResourceRecord(65) {}
|
||||
|
||||
|
||||
|
||||
}}}
|
||||
@@ -1,81 +0,0 @@
|
||||
#ifndef RECORD_HPP
|
||||
#define RECORD_HPP
|
||||
#include <cstdint>
|
||||
#include "Resource.hpp"
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <memory>
|
||||
|
||||
namespace Plains {
|
||||
namespace Core {
|
||||
namespace DNS {
|
||||
|
||||
using std::ostream;
|
||||
using std::stringbuf;
|
||||
|
||||
|
||||
// Provides an abstract class for dns records that may be stored in the database
|
||||
class Record : public Resource
|
||||
{
|
||||
public:
|
||||
const uint16_t _id;
|
||||
ostream& serialze();
|
||||
Record(const uint16_t id);
|
||||
~Record();
|
||||
|
||||
private:
|
||||
stringbuf _sb;
|
||||
ostream* _os;
|
||||
};
|
||||
|
||||
class ARecord : public Record { ARecord(); };
|
||||
class AAAARecord : public Record { AAAARecord(); };
|
||||
class AFSDBRecord : public Record { AFSDBRecord(); };
|
||||
class APLRecord : public Record { APLRecord(); };
|
||||
class CAARecord : public Record { CAARecord(); };
|
||||
class CDNSKEYRecord : public Record { CDNSKEYRecord(); };
|
||||
class CDSRecord : public Record { CDSRecord(); };
|
||||
class CERTRecord : public Record { CERTRecord(); };
|
||||
class CNAMERecord : public Record { CNAMERecord(); };
|
||||
class CSYNCRecord : public Record { CSYNCRecord(); };
|
||||
class DHCIDRecord : public Record { DHCIDRecord(); };
|
||||
class DLVRecord : public Record { DLVRecord(); };
|
||||
class DNAMERecord : public Record { DNAMERecord(); };
|
||||
class DNSKEYRecord : public Record { DNSKEYRecord(); };
|
||||
class DSRecord : public Record { DSRecord(); };
|
||||
class EUI48Record : public Record { EUI48Record(); };
|
||||
class EUI64Record : public Record { EUI64Record(); };
|
||||
class HINFORecord : public Record { HINFORecord(); };
|
||||
class HIPRecord : public Record { HIPRecord(); };
|
||||
class IPSECKEYRecord : public Record { IPSECKEYRecord(); };
|
||||
class KEYRecord : public Record { KEYRecord(); };
|
||||
class KXRecord : public Record { KXRecord(); };
|
||||
class LOCRecord : public Record { LOCRecord(); };
|
||||
class MXRecord : public Record { MXRecord(); };
|
||||
class NAPTRRecord : public Record { NAPTRRecord(); };
|
||||
class NSRecord : public Record { NSRecord(); };
|
||||
class NSECRecord : public Record { NSECRecord(); };
|
||||
class NSEC3Record : public Record { NSEC3Record(); };
|
||||
class NSEC3PARAMRecord : public Record { NSEC3PARAMRecord(); };
|
||||
class OPENPGPKEYRecord : public Record { OPENPGPKEYRecord(); };
|
||||
class PTRRecord : public Record { PTRRecord(); };
|
||||
class RRSIGRecord : public Record { RRSIGRecord(); };
|
||||
class RPRecord : public Record { RPRecord(); };
|
||||
class SIGRecord : public Record { SIGRecord(); };
|
||||
class SMIMEARecord : public Record { SMIMEARecord(); };
|
||||
class SOARecord : public Record { SOARecord(); };
|
||||
class SRVRecord : public Record { SRVRecord(); };
|
||||
class SSHFPRecord : public Record { SSHFPRecord(); };
|
||||
class TARecord : public Record { TARecord(); };
|
||||
class TKEYRecord : public Record { TKEYRecord(); };
|
||||
class TLSARecord : public Record { TLSARecord(); };
|
||||
class TSIGRecord : public Record { TSIGRecord(); };
|
||||
class TXTRecord : public Record { TXTRecord(); };
|
||||
class URIRecord : public Record { URIRecord(); };
|
||||
class ZONEMDRecord : public Record { ZONEMDRecord(); };
|
||||
class SVCBRecord : public Record { SVCBRecord(); };
|
||||
class HTTPSRecord : public Record { HTTPSRecord(); };
|
||||
|
||||
|
||||
}}}
|
||||
#endif
|
||||
@@ -0,0 +1,81 @@
|
||||
#ifndef RESOURCE_RECORD_HPP
|
||||
#define RESOURCE_RECORD_HPP
|
||||
#include <cstdint>
|
||||
#include "Resource.hpp"
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <memory>
|
||||
|
||||
namespace Plains {
|
||||
namespace Core {
|
||||
namespace DNS {
|
||||
|
||||
using std::ostream;
|
||||
using std::stringbuf;
|
||||
|
||||
|
||||
// Provides an abstract class for dns records that may be stored in the database
|
||||
class ResourceRecord : public Resource
|
||||
{
|
||||
public:
|
||||
const uint16_t _id;
|
||||
ostream& serialze();
|
||||
ResourceRecord(const uint16_t id);
|
||||
~ResourceRecord();
|
||||
|
||||
private:
|
||||
stringbuf _sb;
|
||||
ostream* _os;
|
||||
};
|
||||
|
||||
class ARecord : public ResourceRecord { ARecord(); };
|
||||
class AAAARecord : public ResourceRecord { AAAARecord(); };
|
||||
class AFSDBRecord : public ResourceRecord { AFSDBRecord(); };
|
||||
class APLRecord : public ResourceRecord { APLRecord(); };
|
||||
class CAARecord : public ResourceRecord { CAARecord(); };
|
||||
class CDNSKEYRecord : public ResourceRecord { CDNSKEYRecord(); };
|
||||
class CDSRecord : public ResourceRecord { CDSRecord(); };
|
||||
class CERTRecord : public ResourceRecord { CERTRecord(); };
|
||||
class CNAMERecord : public ResourceRecord { CNAMERecord(); };
|
||||
class CSYNCRecord : public ResourceRecord { CSYNCRecord(); };
|
||||
class DHCIDRecord : public ResourceRecord { DHCIDRecord(); };
|
||||
class DLVRecord : public ResourceRecord { DLVRecord(); };
|
||||
class DNAMERecord : public ResourceRecord { DNAMERecord(); };
|
||||
class DNSKEYRecord : public ResourceRecord { DNSKEYRecord(); };
|
||||
class DSRecord : public ResourceRecord { DSRecord(); };
|
||||
class EUI48Record : public ResourceRecord { EUI48Record(); };
|
||||
class EUI64Record : public ResourceRecord { EUI64Record(); };
|
||||
class HINFORecord : public ResourceRecord { HINFORecord(); };
|
||||
class HIPRecord : public ResourceRecord { HIPRecord(); };
|
||||
class IPSECKEYRecord : public ResourceRecord { IPSECKEYRecord(); };
|
||||
class KEYRecord : public ResourceRecord { KEYRecord(); };
|
||||
class KXRecord : public ResourceRecord { KXRecord(); };
|
||||
class LOCRecord : public ResourceRecord { LOCRecord(); };
|
||||
class MXRecord : public ResourceRecord { MXRecord(); };
|
||||
class NAPTRRecord : public ResourceRecord { NAPTRRecord(); };
|
||||
class NSRecord : public ResourceRecord { NSRecord(); };
|
||||
class NSECRecord : public ResourceRecord { NSECRecord(); };
|
||||
class NSEC3Record : public ResourceRecord { NSEC3Record(); };
|
||||
class NSEC3PARAMRecord : public ResourceRecord { NSEC3PARAMRecord(); };
|
||||
class OPENPGPKEYRecord : public ResourceRecord { OPENPGPKEYRecord(); };
|
||||
class PTRRecord : public ResourceRecord { PTRRecord(); };
|
||||
class RRSIGRecord : public ResourceRecord { RRSIGRecord(); };
|
||||
class RPRecord : public ResourceRecord { RPRecord(); };
|
||||
class SIGRecord : public ResourceRecord { SIGRecord(); };
|
||||
class SMIMEARecord : public ResourceRecord { SMIMEARecord(); };
|
||||
class SOARecord : public ResourceRecord { SOARecord(); };
|
||||
class SRVRecord : public ResourceRecord { SRVRecord(); };
|
||||
class SSHFPRecord : public ResourceRecord { SSHFPRecord(); };
|
||||
class TARecord : public ResourceRecord { TARecord(); };
|
||||
class TKEYRecord : public ResourceRecord { TKEYRecord(); };
|
||||
class TLSARecord : public ResourceRecord { TLSARecord(); };
|
||||
class TSIGRecord : public ResourceRecord { TSIGRecord(); };
|
||||
class TXTRecord : public ResourceRecord { TXTRecord(); };
|
||||
class URIRecord : public ResourceRecord { URIRecord(); };
|
||||
class ZONEMDRecord : public ResourceRecord { ZONEMDRecord(); };
|
||||
class SVCBRecord : public ResourceRecord { SVCBRecord(); };
|
||||
class HTTPSRecord : public ResourceRecord { HTTPSRecord(); };
|
||||
|
||||
|
||||
}}}
|
||||
#endif
|
||||
+53
-25
@@ -4,33 +4,61 @@
|
||||
namespace Plains {
|
||||
namespace Resolver {
|
||||
|
||||
unsigned Message::Header::id() const { return ntohs(_id); }
|
||||
unsigned Message::Header::rCode() const { return ntohs(_rCode); }
|
||||
unsigned Message::Header::qdCount() const { return ntohs(_qdCount); }
|
||||
unsigned Message::Header::anCount() const { return ntohs(_anCount); }
|
||||
unsigned Message::Header::nsCount() const { return ntohs(_nsCount); }
|
||||
unsigned Message::Header::arCount() const { return ntohs(_arCount); }
|
||||
unsigned Message::Header::opCode() const { return ntohs(_opCode); }
|
||||
bool Message::Header::rd() const { return ntohs(_rd); }
|
||||
bool Message::Header::aa() const { return ntohs(_aa); }
|
||||
bool Message::Header::tc() const { return ntohs(_tc); }
|
||||
bool Message::Header::ra() const { return ntohs(_ra); }
|
||||
bool Message::Header::qr() const { return ntohs(_qr); }
|
||||
|
||||
void Message::Header::id (unsigned value) { _id = htons(value); }
|
||||
void Message::Header::rCode (unsigned value) { _rCode = htons(value); }
|
||||
void Message::Header::qdCount(unsigned value) { _qdCount = htons(value); }
|
||||
void Message::Header::anCount(unsigned value) { _anCount = htons(value); }
|
||||
void Message::Header::nsCount(unsigned value) { _nsCount = htons(value); }
|
||||
void Message::Header::arCount(unsigned value) { _arCount = htons(value); }
|
||||
void Message::Header::opCode (unsigned value) { _opCode = htons(value); }
|
||||
void Message::Header::rd (RD::FLAG flag) { _rd = flag; }
|
||||
void Message::Header::aa (AA::FLAG flag) { _aa = flag; }
|
||||
void Message::Header::tc (TC::FLAG flag) { _tc = flag; }
|
||||
void Message::Header::ra (RA::FLAG flag) { _ra = flag; }
|
||||
void Message::Header::qr (QR::FLAG flag) { _qr = flag; }
|
||||
|
||||
size_t Message::size() { return 12; }
|
||||
Message::Message() {
|
||||
_id = 0;
|
||||
_qr = 0;
|
||||
_opCode = 0;
|
||||
_aa = 0;
|
||||
_tc = 0;
|
||||
_rd = 0;
|
||||
_ra = 0;
|
||||
_rCode = 0;
|
||||
_qdCount = 0;
|
||||
_anCount = 0;
|
||||
_nsCount = 0;
|
||||
_arCount = 0;
|
||||
}
|
||||
|
||||
Message::Message(const Buffer& buffer) { decodeMessage(buffer); }
|
||||
|
||||
unsigned Message::id() const { return _id; }
|
||||
unsigned Message::rCode() const { return _rCode; }
|
||||
unsigned Message::qdCount() const { return _qdCount; }
|
||||
unsigned Message::anCount() const { return _anCount; }
|
||||
unsigned Message::nsCount() const { return _nsCount; }
|
||||
unsigned Message::arCount() const { return _arCount; }
|
||||
unsigned Message::opCode() const { return _opCode; }
|
||||
bool Message::rd() const { return _rd; }
|
||||
bool Message::aa() const { return _aa; }
|
||||
bool Message::tc() const { return _tc; }
|
||||
bool Message::ra() const { return _ra; }
|
||||
bool Message::qr() const { return _qr; }
|
||||
|
||||
void Message::id (unsigned value) { _id = value; }
|
||||
void Message::rCode (unsigned value) { _rCode = value; }
|
||||
void Message::qdCount(unsigned value) { _qdCount = value; }
|
||||
void Message::anCount(unsigned value) { _anCount = value; }
|
||||
void Message::nsCount(unsigned value) { _nsCount = value; }
|
||||
void Message::arCount(unsigned value) { _arCount = value; }
|
||||
void Message::opCode (unsigned value) { _opCode = value; }
|
||||
void Message::rd (RD::FLAG flag) { _rd = flag; }
|
||||
void Message::aa (AA::FLAG flag) { _aa = flag; }
|
||||
void Message::tc (TC::FLAG flag) { _tc = flag; }
|
||||
void Message::ra (RA::FLAG flag) { _ra = flag; }
|
||||
void Message::qr (QR::FLAG flag) { _qr = flag; }
|
||||
|
||||
unique_ptr<Buffer> Message::encodeMessage() const; {
|
||||
//Encode message
|
||||
}
|
||||
|
||||
void Message::decode(const Buffer& buffer) {
|
||||
//Interprete Buffer
|
||||
//buffer.size
|
||||
//buffer.data
|
||||
//ntohs & htons
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,21 +1,16 @@
|
||||
#ifndef MESSAGE_HPP
|
||||
#define MESSAGE_HPP
|
||||
#include <cstddef>
|
||||
#include <memory>
|
||||
|
||||
namespace Plains {
|
||||
namespace Resolver {
|
||||
|
||||
using std::size_t;
|
||||
using std::unique_ptr;
|
||||
|
||||
class Message
|
||||
{
|
||||
public:
|
||||
Message();
|
||||
size_t size();
|
||||
|
||||
public: //change to private after debugging
|
||||
class Header {
|
||||
public:
|
||||
/*
|
||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
@@ -32,6 +27,8 @@ class Message
|
||||
| ARCOUNT |
|
||||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
*/
|
||||
|
||||
public:
|
||||
struct RCode { enum FLAG { NO_ERR, FORMAT_ERR, SERVER_FAIL, NAME_ERR, NOT_IMPL, REFUSED, YX_DOM, YX_RR_SET, NX_RR_SET, NOT_AUTH, NOT_ZONE }; };
|
||||
struct OpCode { enum FLAG { QUERY, IQUERY, STATUS, reserved, NOTIFY, UPDATE }; };
|
||||
struct QR { enum FLAG { QUERY, RESPONSE }; };
|
||||
@@ -40,6 +37,14 @@ class Message
|
||||
struct RD { enum FLAG { NOT_DESIRED, DESIRED }; };
|
||||
struct RA { enum FLAG { NOT_AVAILABLE, AVAILABLE }; };
|
||||
|
||||
struct Buffer {
|
||||
size_t size;
|
||||
void* data;
|
||||
};
|
||||
|
||||
Message();
|
||||
Message(const Buffer& buffer);
|
||||
|
||||
unsigned id() const; // Identifyer
|
||||
unsigned rCode() const; // Response Code
|
||||
unsigned qdCount() const; // Question Count
|
||||
@@ -52,6 +57,7 @@ class Message
|
||||
bool tc() const; // Truncation Flag
|
||||
bool rd() const; // Recursion Desired Flag
|
||||
bool ra() const; // Recursion Available Flag
|
||||
unique_ptr<Buffer> encodeMessage() const; // Creates network byte-orderd message to be sent
|
||||
|
||||
void id (unsigned value);
|
||||
void rCode (unsigned value);
|
||||
@@ -65,7 +71,10 @@ class Message
|
||||
void tc(TC::FLAG flag);
|
||||
void rd(RD::FLAG flag);
|
||||
void ra(RA::FLAG flag);
|
||||
void decodeMessage(const Buffer& buffer);
|
||||
|
||||
private:
|
||||
struct Header {
|
||||
private:
|
||||
unsigned _id : 16; //Identifier: A 16-bit identification field generated by the device that creates the DNS query. It is copied by the server into the response, so it can be used by that device to match that query to the corresponding reply received from a DNS server. This is used in a manner similar to how the Identifier field is used in many of the ICMP message types.
|
||||
bool _qr : 1; //Query/Response Flag: Differentiates between queries and responses. Set to 0 when the query is generated; changed to 1 when that query is changed to a response by a replying server.
|
||||
@@ -80,13 +89,25 @@ class Message
|
||||
unsigned _anCount : 16; //Answer Record Count: Specifies the number of resource records in the Answer section of the message.
|
||||
unsigned _nsCount : 16; //Authority Record Count: Specifies the number of resource records in the Authority section of the message. (“NS” stands for “name server”, of course. J)
|
||||
unsigned _arCount : 16; //Additional Record Count: Specifies the number of resource records in the Additional section of the message.
|
||||
} header;
|
||||
};
|
||||
|
||||
struct Question {} question;
|
||||
struct Answer {} answer;
|
||||
struct Authority {} authority;
|
||||
struct Additional {} additional;
|
||||
unsigned _id;
|
||||
bool _qr;
|
||||
unsigned _opCode;
|
||||
bool _aa;
|
||||
bool _tc;
|
||||
bool _rd;
|
||||
bool _ra;
|
||||
unsigned _rCode;
|
||||
unsigned _qdCount;
|
||||
unsigned _anCount;
|
||||
unsigned _nsCount;
|
||||
unsigned _arCount;
|
||||
|
||||
vector<ResourceRecord> _question;
|
||||
vector<ResourceRecord> _answer;
|
||||
vector<ResourceRecord> _authority;
|
||||
vector<ResourceRecord> _additional;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user