42 #ifndef _DWMDNSRESOURCERECORD_HH_ 43 #define _DWMDNSRESOURCERECORD_HH_ 45 #include "DwmDnsPortability.hh" 54 #define MY_VARIANT std::variant 55 #define MY_GET_IF std::get_if 57 #include <mpark_variant> 58 #define MY_VARIANT mpark::variant 59 #define MY_GET_IF mpark::get_if 191 const std::string &
Name()
const;
196 const std::string &
Name(
const std::string & name);
211 uint16_t
Class()
const;
216 uint16_t
Class(uint16_t cl);
221 uint32_t
TTL()
const;
226 uint32_t
TTL(uint32_t ttl);
235 uint8_t *
Encode(uint8_t *pkt, uint8_t *ptr, uint16_t pktlen,
245 const uint8_t *
Decode(
const uint8_t *pkt,
const uint8_t *ptr,
251 template <
typename T>
254 return MY_GET_IF<T>(&_rrdata);
265 template <
typename T>
266 const T *
Data(
const T & rrdata, uint16_t rrClass = k_classIN,
267 uint16_t rrType = T::k_rrtype)
272 return MY_GET_IF<T>(&_rrdata);
278 template <
typename T>
281 return MY_GET_IF<T>(&_rrdata);
287 friend std::ostream &
operator << (std::ostream & os,
293 static std::string
TypeName(uint16_t rrtype);
298 static std::string
ClassName(uint16_t rrclass);
339 static std::map<uint16_t,std::string> _classNames;
340 static std::map<uint16_t,std::string> _typeNames;
346 static constexpr std::pair<uint16_t,size_t> k_rrTypeArr[] = {
385 static constexpr
auto k_rrTypeArrSize =
386 sizeof k_rrTypeArr /
sizeof k_rrTypeArr[0];
391 static constexpr
size_t RRDataIndex(uint16_t rrtype,
392 int range = k_rrTypeArrSize)
394 return (k_rrTypeArr[range - 1].first == rrtype) ?
395 k_rrTypeArr[range - 1].second
396 : RRDataIndex(rrtype, range - 1);
400 std::ostream & PrintData(std::ostream & os)
const;
408 #endif // _DWMDNSRESOURCERECORD_HH_ marks the start of a zone of authority
Definition: DwmDnsResourceRecord.hh:117
URI (RFC7553)
Definition: DwmDnsResourceRecord.hh:149
Encapsulates KEY resource record data.
Definition: DwmDnsRRDataKEY.hh:62
Dwm::Dns::RRDataSSHFP class definition.
ResourceRecord()
Default constructor.
Dwm::Dns::RRDataRP class definition.
Encapsulates OPENPGKPEY resource record data.
Definition: DwmDnsRRDataOPENPGPKEY.hh:60
DNSKEY (RFC4034)
Definition: DwmDnsResourceRecord.hh:139
Dwm::Dns::LabelPositions class definition.
Dwm::Dns::RRDataCERT class definition.
Dwm::Dns::RRDataSMIMEA class definition.
Encapsulates CERT resource record data.
Definition: DwmDnsRRDataCERT.hh:60
host address
Definition: DwmDnsResourceRecord.hh:112
Encapsulates DNSKEY resource record data.
Definition: DwmDnsRRDataDNSKEY.hh:59
NSEC3 (RFC5155)
Definition: DwmDnsResourceRecord.hh:141
Encapsulates NSEC3PARAM resource record data.
Definition: DwmDnsRRDataNSEC3PARAM.hh:60
Encapsulates MX resource record data.
Definition: DwmDnsRRDataMX.hh:59
certificate (RFC4398)
Definition: DwmDnsResourceRecord.hh:133
Dwm::Dns::RRDataCNAME class definition.
Dwm::Dns::RRDataMB class definition.
Encapsulates NSEC3 resource record data.
Definition: DwmDnsRRDataNSEC3.hh:60
null RR (EXPERIMENTAL)
Definition: DwmDnsResourceRecord.hh:121
CDS (RFC7344)
Definition: DwmDnsResourceRecord.hh:145
Encapsulates a DNS resource record.
Definition: DwmDnsResourceRecord.hh:104
NSEC3PARAM (RFC5155)
Definition: DwmDnsResourceRecord.hh:142
T * Data()
Returns a pointer to mutable contained RRDATA.
Definition: DwmDnsResourceRecord.hh:279
Dwm::Dns::RRDataSOA class definition.
RFC4408 but obsoleted in RFC7208.
Definition: DwmDnsResourceRecord.hh:148
Dwm::Dns::RRDataNS class definition.
Dwm::Dns::RRDataNSEC3PARAM class definition.
CDNSKEY (RFC7344)
Definition: DwmDnsResourceRecord.hh:146
Dwm::Dns::RRDataNSEC class definition.
Encapsulates SRV resource record data.
Definition: DwmDnsRRDataSRV.hh:59
const std::string & Name() const
Returns the contained domain name.
friend std::ostream & operator<<(std::ostream &os, const ResourceRecord &rr)
Prints the resource record to an ostream in human readable form.
DS (RFC4034)
Definition: DwmDnsResourceRecord.hh:135
cert. authority auth. (RFC6844)
Definition: DwmDnsResourceRecord.hh:150
Encapsulates NSEC resource record data.
Definition: DwmDnsRRDataNSEC.hh:61
Encapsulates SMIMEA resource record data.
Definition: DwmDnsRRDataSMIMEA.hh:59
Encapsulates PTR resource record data.
Definition: DwmDnsRRDataPTR.hh:58
location (LOC) (RFC1876)
Definition: DwmDnsResourceRecord.hh:131
host information
Definition: DwmDnsResourceRecord.hh:124
ResourceRecord & operator=(const ResourceRecord &rr)
operator =
SSH fingerprint (RFC4255)
Definition: DwmDnsResourceRecord.hh:136
Dwm::Dns::RRDataDS class definition.
ClassEnum
Resource record classes.
Definition: DwmDnsResourceRecord.hh:156
Encapsulates MINFO resource record data.
Definition: DwmDnsRRDataMINFO.hh:59
DHCID (RFC4701)
Definition: DwmDnsResourceRecord.hh:140
Encapsulates URI resource record data.
Definition: DwmDnsRRDataURI.hh:59
mail rename domain name (EXPERIMENTAL)
Definition: DwmDnsResourceRecord.hh:120
Encapsulates MR resource record data.
Definition: DwmDnsRRDataMR.hh:58
static std::string ClassName(uint16_t rrclass)
Returns the mnemonic for the given recource record class @ rrclass.
Dwm::Dns::RRDataDHCID class definition.
Dwm::Dns::RRDataMG class definition.
CHAOS.
Definition: DwmDnsResourceRecord.hh:159
Dwm::Dns::RRDataKEY class definition.
Dwm::Dns::RRDataCAA class definition.
Dwm::Dns::RRDataPTR class definition.
mail forwarder (obsolete, use MX)
Definition: DwmDnsResourceRecord.hh:115
host IPv6 address (RFC3596)
Definition: DwmDnsResourceRecord.hh:130
Encapsulates MG resource record data.
Definition: DwmDnsRRDataMG.hh:58
Dwm::Dns::RRDataTXT class definition.
Dwm::Dns::RRDataLOC class definition.
Internet.
Definition: DwmDnsResourceRecord.hh:158
canonical name for an alias
Definition: DwmDnsResourceRecord.hh:116
server selection (RFC2782)
Definition: DwmDnsResourceRecord.hh:132
Encapsulates RP resource record data.
Definition: DwmDnsRRDataRP.hh:59
Responsible Person (RFC1183)
Definition: DwmDnsResourceRecord.hh:128
Encapsulates NS resource record data.
Definition: DwmDnsRRDataNS.hh:58
Hesiod.
Definition: DwmDnsResourceRecord.hh:160
mailbox domain name (EXPERIMENTAL)
Definition: DwmDnsResourceRecord.hh:118
Encapsulates CAA resource record data.
Definition: DwmDnsRRDataCAA.hh:59
Dwm::Dns::RRDataAAAA class definition.
mail exchange
Definition: DwmDnsResourceRecord.hh:126
Dwm::Dns::RRDataSRV class definition.
Dwm::Dns::RRDataOPENPGPKEY class definition.
Encapsulates TLSA resource record data.
Definition: DwmDnsRRDataTLSA.hh:59
Dwm::Dns::RRDataMR class definition.
Definition: DwmDnsEtcHosts.hh:60
uint32_t TTL() const
Returns the TTL.
Encapsulates HINFO resource record data.
Definition: DwmDnsRRDataHINFO.hh:59
Dwm::Dns::RRDataURI class definition.
mailbox or mail list information
Definition: DwmDnsResourceRecord.hh:125
TLSA (RFC6698)
Definition: DwmDnsResourceRecord.hh:143
const T * Data() const
Returns a pointer to const of the contained RRDATA.
Definition: DwmDnsResourceRecord.hh:252
bool operator==(const ResourceRecord &rr) const
Equal-to operator, mostly for unit testing.
Encapsulates LOC resource record data.
Definition: DwmDnsRRDataLOC.hh:58
Dwm::Dns::RRDataMX class definition.
public key (RFC2535)
Definition: DwmDnsResourceRecord.hh:129
const uint8_t * Decode(const uint8_t *pkt, const uint8_t *ptr, uint16_t pktlen)
Decodes the resource record from buffer pkt of length pktlen, starting at ptr.
Encapsulates SSHFP recource record data.
Definition: DwmDnsRRDataSSHFP.hh:59
~ResourceRecord()=default
Destructor.
mail group member (EXPERIMENTAL)
Definition: DwmDnsResourceRecord.hh:119
const T * Data(const T &rrdata, uint16_t rrClass=k_classIN, uint16_t rrType=T::k_rrtype)
Sets and returns the RRDATA of the resource record.
Definition: DwmDnsResourceRecord.hh:266
Dwm::Dns::RRDataUnknown class definition.
Dwm::Dns::RRDataA class definition.
well known service description
Definition: DwmDnsResourceRecord.hh:122
Dwm::Dns::RRDataRRSIG class definition.
authoritative nameserver
Definition: DwmDnsResourceRecord.hh:113
OPENPGPKEY (RFC7929)
Definition: DwmDnsResourceRecord.hh:147
Encapsulates SOA resource record data.
Definition: DwmDnsRRDataSOA.hh:59
Encapsulates RRSIG resource record data.
Definition: DwmDnsRRDataRRSIG.hh:59
uint8_t * Encode(uint8_t *pkt, uint8_t *ptr, uint16_t pktlen, LabelPositions &lps) const
Encodes the resource record into buffer @ pkt of length pktlen, starting at ptr.
Dwm::Dns::RRDataTLSA class definition.
TypeEnum Type() const
Returns the contained type.
uint16_t Class() const
Returns the contained class.
A helper class used when performing label sequence compression.
Definition: DwmDnsLabelPositions.hh:57
Dwm::Dns::RRDataHINFO class definition.
domain name pointer
Definition: DwmDnsResourceRecord.hh:123
Dwm::Dns::RRDataMINFO class definition.
Encapsulates AAAA resource record data.
Definition: DwmDnsRRDataAAAA.hh:62
mail destination (old, use MX)
Definition: DwmDnsResourceRecord.hh:114
SMIMEA (RFC8162)
Definition: DwmDnsResourceRecord.hh:144
static std::string TypeName(uint16_t rrtype)
Returns the mnemonic for the given resource record type @ rrtype.
Encapsulates DHCID resource record data.
Definition: DwmDnsRRDataDHCID.hh:59
OPT (for EDNS, RFC6891)
Definition: DwmDnsResourceRecord.hh:134
RRSIG (RFC4034)
Definition: DwmDnsResourceRecord.hh:137
Encapsulates resource record data for unknown resource record types.
Definition: DwmDnsRRDataUnknown.hh:58
Dwm::Dns::RRDataDNSKEY class definition.
NSEC (RFC4034)
Definition: DwmDnsResourceRecord.hh:138
Encapsulates TXT resource record data.
Definition: DwmDnsRRDataTXT.hh:60
Encapsulates CNAME resource record data.
Definition: DwmDnsRRDataCNAME.hh:58
Encapsulates MB resource record data.
Definition: DwmDnsRRDataMB.hh:58
Encapsulates DS resource record data.
Definition: DwmDnsRRDataDS.hh:59
TypeEnum
Resource record types.
Definition: DwmDnsResourceRecord.hh:110
Encapsulates A resource record data.
Definition: DwmDnsRRDataA.hh:62
text strings
Definition: DwmDnsResourceRecord.hh:127