25#ifndef __JOIN_RESOLVER_HPP__
26#define __JOIN_RESOLVER_HPP__
126 Resolver (
const std::string& interface);
368 static std::string
typeName (uint16_t recordType);
375 static std::string
className (uint16_t recordClass);
408 void setHeader (uint16_t
id, uint16_t flags, uint16_t qcount, uint16_t ancount, uint16_t nscount, uint16_t arcount, std::stringstream& data);
420 void getHeader (uint16_t&
id, uint16_t& flags, uint16_t& qcount, uint16_t& ancount, uint16_t& nscount, uint16_t& arcount, std::stringstream& data);
427 static void encodeName (
const std::string& host, std::stringstream& data);
434 static std::string
decodeName (std::stringstream& data);
441 static std::string
decodeMail (std::stringstream& data);
450 static void encodeQuestion (
const std::string& host, uint16_t type, uint16_t dnsclass, std::stringstream& data);
471 static std::error_code
parseError (
int error);
478 static void defaultOnSuccess (
const DnsPacket& packet);
484 static void defaultOnFailure (
const DnsPacket& packet);
IPv6, IPv4 address class.
Definition ipaddress.hpp:51
basic domain name resolution class.
Definition resolver.hpp:93
static IpAddressList nameServers()
get IP address of the currently configured name servers.
Definition resolver.cpp:77
static void encodeQuestion(const std::string &host, uint16_t type, uint16_t dnsclass, std::stringstream &data)
decode question record.
Definition resolver.cpp:851
static void encodeName(const std::string &host, std::stringstream &data)
encode name.
Definition resolver.cpp:760
Resolver()
default constructor.
Definition resolver.cpp:53
std::string resolveMailExchanger(const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve host mail exchanger.
Definition resolver.cpp:518
static std::string className(uint16_t recordClass)
get record class name.
Definition resolver.cpp:584
static QuestionRecord decodeQuestion(std::stringstream &data)
decode question record.
Definition resolver.cpp:866
DnsNotify _onFailure
callback called when a lookup sequence failed.
Definition resolver.hpp:387
RecordClass
DNS record classes.
Definition resolver.hpp:113
@ IN
Definition resolver.hpp:114
virtual ~Resolver()=default
destroy instance.
std::function< void(const DnsPacket &)> DnsNotify
notification callback definition.
Definition resolver.hpp:381
std::string resolveAddress(const IpAddress &address, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve host address.
Definition resolver.cpp:304
std::string resolveNameServer(const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve host name server.
Definition resolver.cpp:386
static AnswerRecord decodeAnswer(std::stringstream &data)
decode answer record.
Definition resolver.cpp:885
static std::string typeName(uint16_t recordType)
get record type name.
Definition resolver.cpp:564
Resolver(const Resolver &other)=delete
copy constructor.
static std::error_code parseError(int error)
convert DNS error to system error code.
Definition resolver.cpp:964
void getHeader(uint16_t &id, uint16_t &flags, uint16_t &qcount, uint16_t &ancount, uint16_t &nscount, uint16_t &arcount, std::stringstream &data)
get DNS header.
Definition resolver.cpp:735
ServerList resolveAllNameServer(const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve all host name server.
Definition resolver.cpp:332
void setHeader(uint16_t id, uint16_t flags, uint16_t qcount, uint16_t ancount, uint16_t nscount, uint16_t arcount, std::stringstream &data)
set DNS header.
Definition resolver.cpp:710
std::string _interface
interface name.
Definition resolver.hpp:495
static std::string decodeMail(std::stringstream &data)
decode mail.
Definition resolver.cpp:826
RecordType
DNS record types.
Definition resolver.hpp:99
@ CNAME
Definition resolver.hpp:102
@ NS
Definition resolver.hpp:101
@ SOA
Definition resolver.hpp:103
@ MX
Definition resolver.hpp:105
@ AAAA
Definition resolver.hpp:106
@ A
Definition resolver.hpp:100
@ PTR
Definition resolver.hpp:104
Resolver(Resolver &&other)=delete
move constructor.
Resolver & operator=(const Resolver &other)=delete
copy assignment operator.
ExchangerList resolveAllMailExchanger(const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve all host mail exchanger.
Definition resolver.cpp:464
DnsNotify _onSuccess
callback called when a lookup sequence succeed.
Definition resolver.hpp:384
static uint16_t resolveService(const std::string &service)
resolve service name.
Definition resolver.cpp:546
std::string resolveAuthority(const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve host start of authority name server.
Definition resolver.cpp:414
static std::string decodeName(std::stringstream &data)
decode name.
Definition resolver.cpp:777
IpAddress resolveHost(const std::string &host, int family, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve host name using address family.
Definition resolver.cpp:194
void notify(const DnsNotify &function, const DnsPacket &packet)
safe way to notify DNS events.
Definition resolver.cpp:1087
int lookup(DnsPacket &packet, int timeout)
send the DNS request.
Definition resolver.cpp:598
IpAddressList resolveAllHost(const std::string &host, int family, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve host name and return all IP address found.
Definition resolver.cpp:105
static constexpr uint16_t dnsPort
default DNS port.
Definition resolver.hpp:378
AliasList resolveAllAddress(const IpAddress &address, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve all host address.
Definition resolver.cpp:250
Definition acceptor.hpp:32
std::set< std::string > AliasList
list of alias.
Definition resolver.hpp:40
std::set< std::string > ServerList
list of name servers.
Definition resolver.hpp:43
std::set< std::string > ExchangerList
list of mail exchangers.
Definition resolver.hpp:46
std::vector< IpAddress > IpAddressList
List of IP address.
Definition ipaddress.hpp:45
answer record.
Definition resolver.hpp:62
uint16_t mxpref
Definition resolver.hpp:72
std::string mail
Definition resolver.hpp:66
uint32_t expire
Definition resolver.hpp:70
IpAddress addr
Definition resolver.hpp:64
uint32_t retry
Definition resolver.hpp:69
uint32_t serial
Definition resolver.hpp:67
uint32_t ttl
Definition resolver.hpp:63
uint32_t refresh
Definition resolver.hpp:68
std::string name
Definition resolver.hpp:65
uint32_t minimum
Definition resolver.hpp:71
DNS packet.
Definition resolver.hpp:79
uint16_t port
Definition resolver.hpp:82
std::vector< AnswerRecord > additionals
Definition resolver.hpp:86
std::vector< AnswerRecord > authorities
Definition resolver.hpp:85
std::vector< AnswerRecord > answers
Definition resolver.hpp:84
std::vector< QuestionRecord > questions
Definition resolver.hpp:83
IpAddress src
Definition resolver.hpp:80
IpAddress dest
Definition resolver.hpp:81
question record.
Definition resolver.hpp:52
std::string host
Definition resolver.hpp:53
uint16_t type
Definition resolver.hpp:54
uint16_t dnsclass
Definition resolver.hpp:55
IpAddress address
Definition tcpacceptor_test.cpp:35
uint16_t port
Definition tcpacceptor_test.cpp:36