38#include <tins/macros.h>
40#include <tins/endianness.h>
53class InputMemoryStream;
188 : name_(std::
move(
nm)), type_(
tp), qclass_(
cl) {}
191 : name_(
nm), type_(
tp), qclass_(
cl) {}
313 const std::string& rname,
386 void mname(
const std::string& value);
392 void rname(
const std::string& value);
463 : dname_(std::
move(dname)), data_(std::
move(data)), type_(type),
464 qclass_(
rclass), ttl_(ttl), preference_(preference) {}
467 const std::string& data,
472 : dname_(dname), data_(data), type_(type), qclass_(
rclass),
473 ttl_(ttl), preference_(preference) {}
476 resource() : type_(), qclass_(), ttl_(), preference_() {}
491 const std::string&
data()
const {
540 void dname(
const std::string& data) {
556 void data(
const std::string& data) {
611 std::string dname_, data_;
617 TINS_DEPRECATED(
typedef query
Query);
618 TINS_DEPRECATED(
typedef resource
Resource);
620 typedef std::vector<query> queries_type;
621 typedef std::vector<resource> resources_type;
660 return Endian::be_to_host(header_.id);
670 return static_cast<QRType>(header_.qr);
679 return header_.opcode;
756 return header_.rcode;
765 return Endian::be_to_host(header_.questions);
774 return Endian::be_to_host(header_.answers);
783 return Endian::be_to_host(header_.authority);
792 return Endian::be_to_host(header_.additional);
900 void add_query(
const query& query);
907 void add_answer(
const resource& resource);
914 void add_authority(
const resource& resource);
921 void add_additional(
const resource& resource);
928 queries_type queries()
const;
935 resources_type answers()
const;
942 resources_type authority()
const;
949 resources_type additional()
const;
966 static std::string encode_domain_name(
const std::string& domain_name);
980 static std::string decode_domain_name(
const std::string& domain_name);
995 return new DNS(*
this);
998 friend class soa_record;
1003 #if TINS_IS_LITTLE_ENDIAN
1015 #elif TINS_IS_BIG_ENDIAN
1029 authority, additional;
1032 typedef std::vector<std::pair<uint32_t*, uint32_t> > sections_type;
1034 uint32_t compose_name(
const uint8_t* ptr,
char* out_ptr)
const;
1035 void convert_records(
const uint8_t* ptr,
1037 resources_type& res,
1038 const uint16_t rr_count)
const;
1039 void skip_to_section_end(Memory::InputMemoryStream& stream,
1040 const uint32_t num_records)
const;
1041 void skip_to_dname_end(Memory::InputMemoryStream& stream)
const;
1042 void update_records(uint32_t& section_start,
1043 uint32_t num_records,
1046 uint8_t* update_dname(uint8_t* ptr, uint32_t threshold, uint32_t offset);
1047 static void inline_convert_v4(uint32_t value,
char* output);
1048 static bool contains_dname(uint16_t type);
1049 void write_serialization(uint8_t* buffer, uint32_t total_sz);
1050 void add_record(
const resource& resource,
const sections_type& sections);
1053 byte_array records_data_;
1054 uint32_t answers_idx_, authority_idx_, additional_idx_;
Represents a range of addresses.
Definition address_range.h:167
const_iterator end() const
Returns an interator to the end of this range.
Definition address_range.h:249
const_iterator begin() const
Returns an interator to the beginning of this range.
Definition address_range.h:237
Struct that represent DNS queries.
Definition dns.h:177
void dname(const std::string &nm)
Setter for the name field.
Definition dns.h:204
TINS_DEPRECATED(QueryType type() const)
Getter for the query type field.
Definition dns.h:260
const std::string & dname() const
Getter for the name field.
Definition dns.h:241
void query_class(QueryClass cl)
Setter for the query class field.
Definition dns.h:234
QueryType query_type() const
Getter for the query type field.
Definition dns.h:248
TINS_DEPRECATED(void type(QueryType tp))
Setter for the query type field.
Definition dns.h:225
void query_type(QueryType tp)
Setter for the query type field.
Definition dns.h:213
query(std::string nm, QueryType tp, QueryClass cl)
Constructs a DNS query.
Definition dns.h:187
QueryClass query_class() const
Getter for the query class field.
Definition dns.h:267
query()
Default constructs this Query.
Definition dns.h:197
Class that represent DNS resource records.
Definition dns.h:444
uint16_t preference() const
Getter for the preferece field.
Definition dns.h:533
uint32_t ttl() const
Definition dns.h:524
const std::string & data() const
Definition dns.h:491
TINS_DEPRECATED(void type(uint16_t data))
Setter for the query type field.
Definition dns.h:584
uint16_t query_class() const
Definition dns.h:517
void data(const std::string &data)
Setter for the data field.
Definition dns.h:556
resource(std::string dname, std::string data, uint16_t type, uint16_t rclass, uint32_t ttl, uint16_t preference=0)
Definition dns.h:457
void query_type(uint16_t data)
Definition dns.h:572
uint16_t query_type() const
Definition dns.h:498
const std::string & dname() const
Getter for the domain name field.
Definition dns.h:484
void dname(const std::string &data)
Definition dns.h:540
void ttl(uint32_t data)
Definition dns.h:598
TINS_DEPRECATED(uint16_t type() const)
Getter for the query type field.
Definition dns.h:510
void preference(uint16_t data)
Setter for the preference field.
Definition dns.h:607
void data(const soa_record &data)
Sets the contents of this resource to the provided SOA record.
Definition dns.h:564
void query_class(uint16_t data)
Definition dns.h:591
Class that represents a Start Of Authority record.
Definition dns.h:281
void rname(const std::string &value)
Getter for the responsible person name field.
const std::string & mname() const
Getter for the primary source name field.
Definition dns.h:327
const std::string & rname() const
Getter for the responsible person name field.
Definition dns.h:338
uint32_t expire() const
Getter for the expire field.
Definition dns.h:370
soa_record(const std::string &mname, const std::string &rname, uint32_t serial, uint32_t refresh, uint32_t retry, uint32_t expire, uint32_t minimum_ttl)
Constructs a SOA record.
uint32_t refresh() const
Getter for the refresh field.
Definition dns.h:354
uint32_t minimum_ttl() const
Getter for the minimum TTL field.
Definition dns.h:378
uint32_t retry() const
Getter for the retry field.
Definition dns.h:362
void mname(const std::string &value)
Getter for the primary source name field.
PDU::serialization_type serialize() const
Serialize this SOA record.
Definition dns.cpp:681
uint32_t serial() const
Getter for the serial number field.
Definition dns.h:346
Represents a DNS PDU.
Definition dns.h:85
uint8_t authenticated_data() const
Getter for the authenticated data field.
Definition dns.h:736
uint16_t id() const
Getter for the id field.
Definition dns.h:659
QRType
Definition dns.h:95
uint16_t answers_count() const
Getter for the answers field.
Definition dns.h:773
QRType type() const
Getter for the query response field.
Definition dns.h:669
uint8_t rcode() const
Getter for the rcode field.
Definition dns.h:755
uint16_t additional_count() const
Getter for the additional field.
Definition dns.h:791
DNS * clone() const
Definition dns.h:994
QueryType
Query types enum.
Definition dns.h:103
uint8_t recursion_available() const
Getter for the recursion available field.
Definition dns.h:717
uint8_t authoritative_answer() const
Getter for the authoritative answer field.
Definition dns.h:688
PDUType pdu_type() const
Getter for the PDU's type.
Definition dns.h:800
uint8_t z() const
Getter for the z desired field.
Definition dns.h:726
uint8_t recursion_desired() const
Getter for the recursion desired field.
Definition dns.h:707
uint8_t opcode() const
Getter for the opcode field.
Definition dns.h:678
uint8_t truncated() const
Getter for the truncated field.
Definition dns.h:697
uint16_t authority_count() const
Getter for the authority field.
Definition dns.h:782
uint16_t questions_count() const
Getter for the questions field.
Definition dns.h:764
uint8_t checking_disabled() const
Getter for the checking disabled field.
Definition dns.h:746
Abstraction of an IPv4 address.
Definition ip_address.h:45
Definition ipv6_address.h:45
Base class for protocol data units.
Definition pdu.h:107
byte_array serialization_type
Definition pdu.h:112
PDUType
Enum which identifies each type of PDU.
Definition pdu.h:127
The Tins namespace.
Definition address_range.h:38