25#ifndef JOIN_FABRIC_RESOLVER_HPP
26#define JOIN_FABRIC_RESOLVER_HPP
126 Resolver (
const std::string& interface);
379 static std::string
typeName (uint16_t recordType);
386 static std::string
className (uint16_t recordClass);
419 void setHeader (uint16_t
id, uint16_t flags, uint16_t qcount, uint16_t ancount, uint16_t nscount,
420 uint16_t arcount, std::stringstream& data);
432 void getHeader (uint16_t&
id, uint16_t& flags, uint16_t& qcount, uint16_t& ancount, uint16_t& nscount,
433 uint16_t& arcount, std::stringstream& data);
440 static void encodeName (
const std::string& host, std::stringstream& data);
447 static std::string
decodeName (std::stringstream& data);
454 static std::string
decodeMail (std::stringstream& data);
463 static void encodeQuestion (
const std::string& host, uint16_t type, uint16_t dnsclass, std::stringstream& data);
484 static std::error_code
parseError (
int error);
491 static void defaultOnSuccess (
const DnsPacket& packet);
497 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:858
static void encodeName(const std::string &host, std::stringstream &data)
encode name.
Definition resolver.cpp:767
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:521
static std::string className(uint16_t recordClass)
get record class name.
Definition resolver.cpp:588
static QuestionRecord decodeQuestion(std::stringstream &data)
decode question record.
Definition resolver.cpp:873
DnsNotify _onFailure
callback called when a lookup sequence failed.
Definition resolver.hpp:398
RecordClass
DNS record classes.
Definition resolver.hpp:113
@ IN
Definition resolver.hpp:114
virtual ~Resolver()=default
destroy instance.
std::string resolveAddress(const IpAddress &address, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve host address.
Definition resolver.cpp:306
std::string resolveNameServer(const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve host name server.
Definition resolver.cpp:388
static AnswerRecord decodeAnswer(std::stringstream &data)
decode answer record.
Definition resolver.cpp:892
static std::string typeName(uint16_t recordType)
get record type name.
Definition resolver.cpp:568
Resolver(const Resolver &other)=delete
copy constructor.
static std::error_code parseError(int error)
convert DNS error to system error code.
Definition resolver.cpp:971
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:741
ServerList resolveAllNameServer(const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve all host name server.
Definition resolver.cpp:334
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:715
std::string _interface
interface name.
Definition resolver.hpp:508
static std::string decodeMail(std::stringstream &data)
decode mail.
Definition resolver.cpp:833
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:466
DnsNotify _onSuccess
callback called when a lookup sequence succeed.
Definition resolver.hpp:395
static uint16_t resolveService(const std::string &service)
resolve service name.
Definition resolver.cpp:550
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:416
std::function< void(const DnsPacket &)> DnsNotify
notification callback definition.
Definition resolver.hpp:392
static std::string decodeName(std::stringstream &data)
decode name.
Definition resolver.cpp:784
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:195
void notify(const DnsNotify &function, const DnsPacket &packet)
safe way to notify DNS events.
Definition resolver.cpp:1094
int lookup(DnsPacket &packet, int timeout)
send the DNS request.
Definition resolver.cpp:602
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:389
AliasList resolveAllAddress(const IpAddress &address, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
resolve all host address.
Definition resolver.cpp:252
Definition acceptor.hpp:32
std::set< std::string > ExchangerList
list of mail exchangers.
Definition resolver.hpp:46
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::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