join 1.0
lightweight network framework library
Loading...
Searching...
No Matches
join::Resolver Class Reference

basic domain name resolution class. More...

#include <resolver.hpp>

Public Types

enum  RecordType : uint16_t {
  A = 1 , NS = 2 , CNAME = 5 , SOA = 6 ,
  PTR = 12 , MX = 15 , AAAA = 28
}
 DNS record types. More...
 
enum  RecordClass : uint16_t { IN = 1 }
 DNS record classes. More...
 
using DnsNotify = std::function <void (const DnsPacket&)>
 notification callback definition.
 

Public Member Functions

 Resolver ()
 default constructor.
 
 Resolver (const std::string &interface)
 create the Resolver instance binded to the given interface.
 
 Resolver (const Resolver &other)=delete
 copy constructor.
 
Resolveroperator= (const Resolver &other)=delete
 copy assignment operator.
 
 Resolver (Resolver &&other)=delete
 move constructor.
 
Resolveroperator= (Resolver &&other)=delete
 move assignment operator.
 
virtual ~Resolver ()=default
 destroy instance.
 
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.
 
IpAddressList resolveAllHost (const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
 resolve host name and return all IP address found.
 
IpAddress resolveHost (const std::string &host, int family, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
 resolve host name using address family.
 
IpAddress resolveHost (const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
 resolve host name.
 
AliasList resolveAllAddress (const IpAddress &address, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
 resolve all host address.
 
std::string resolveAddress (const IpAddress &address, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
 resolve host address.
 
ServerList resolveAllNameServer (const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
 resolve all host name server.
 
std::string resolveNameServer (const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
 resolve host name server.
 
std::string resolveAuthority (const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
 resolve host start of authority name server.
 
ExchangerList resolveAllMailExchanger (const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
 resolve all host mail exchanger.
 
std::string resolveMailExchanger (const std::string &host, const IpAddress &server, uint16_t port=dnsPort, int timeout=5000)
 resolve host mail exchanger.
 

Static Public Member Functions

static IpAddressList nameServers ()
 get IP address of the currently configured name servers.
 
static IpAddressList resolveAllHost (const std::string &host, int family)
 resolve host name and return all IP address found.
 
static IpAddressList resolveAllHost (const std::string &host)
 resolve host name and return all IP address found.
 
static IpAddress resolveHost (const std::string &host, int family)
 resolve host name using address family.
 
static IpAddress resolveHost (const std::string &host)
 resolve host name.
 
static AliasList resolveAllAddress (const IpAddress &address)
 resolve all host address.
 
static std::string resolveAddress (const IpAddress &address)
 resolve host address.
 
static ServerList resolveAllNameServer (const std::string &host)
 resolve all host name server.
 
static std::string resolveNameServer (const std::string &host)
 resolve host name server.
 
static std::string resolveAuthority (const std::string &host)
 resolve host start of authority name server.
 
static ExchangerList resolveAllMailExchanger (const std::string &host)
 resolve all host mail exchanger.
 
static std::string resolveMailExchanger (const std::string &host)
 resolve host mail exchanger.
 
static uint16_t resolveService (const std::string &service)
 resolve service name.
 
static std::string typeName (uint16_t recordType)
 get record type name.
 
static std::string className (uint16_t recordClass)
 get record class name.
 

Public Attributes

DnsNotify _onSuccess
 callback called when a lookup sequence succeed.
 
DnsNotify _onFailure
 callback called when a lookup sequence failed.
 

Static Public Attributes

static constexpr uint16_t dnsPort = 53
 default DNS port.
 

Protected Member Functions

int lookup (DnsPacket &packet, int timeout)
 send the DNS request.
 
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.
 
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.
 
void notify (const DnsNotify &function, const DnsPacket &packet)
 safe way to notify DNS events.
 

Static Protected Member Functions

static void encodeName (const std::string &host, std::stringstream &data)
 encode name.
 
static std::string decodeName (std::stringstream &data)
 decode name.
 
static std::string decodeMail (std::stringstream &data)
 decode mail.
 
static void encodeQuestion (const std::string &host, uint16_t type, uint16_t dnsclass, std::stringstream &data)
 decode question record.
 
static QuestionRecord decodeQuestion (std::stringstream &data)
 decode question record.
 
static AnswerRecord decodeAnswer (std::stringstream &data)
 decode answer record.
 
static std::error_code parseError (int error)
 convert DNS error to system error code.
 

Protected Attributes

std::string _interface
 interface name.
 

Detailed Description

basic domain name resolution class.

Member Typedef Documentation

◆ DnsNotify

using join::Resolver::DnsNotify = std::function <void (const DnsPacket&)>

notification callback definition.

Member Enumeration Documentation

◆ RecordClass

enum join::Resolver::RecordClass : uint16_t

DNS record classes.

Enumerator
IN 

Internet.

◆ RecordType

enum join::Resolver::RecordType : uint16_t

DNS record types.

Enumerator

IPv4 host address.

NS 

Authoritative name server.

CNAME 

Canonical name for an alias.

SOA 

Start of a zone of authority.

PTR 

Domain name pointer.

MX 

Mail exchange.

AAAA 

IPv6 host address.

Constructor & Destructor Documentation

◆ Resolver() [1/4]

Resolver::Resolver ( )

default constructor.

◆ Resolver() [2/4]

Resolver::Resolver ( const std::string & interface)

create the Resolver instance binded to the given interface.

Parameters
interfaceinterface to use.

◆ Resolver() [3/4]

join::Resolver::Resolver ( const Resolver & other)
delete

copy constructor.

Parameters
otherother object to copy.

◆ Resolver() [4/4]

join::Resolver::Resolver ( Resolver && other)
delete

move constructor.

Parameters
otherother object to move.

◆ ~Resolver()

virtual join::Resolver::~Resolver ( )
virtualdefault

destroy instance.

Member Function Documentation

◆ className()

std::string Resolver::className ( uint16_t recordClass)
static

get record class name.

Parameters
recordTyperecord class.
Returns
record class name.

◆ decodeAnswer()

AnswerRecord Resolver::decodeAnswer ( std::stringstream & data)
staticprotected

decode answer record.

Parameters
datastream where the encoded mail is stored.
Returns
decoded answer record.

◆ decodeMail()

std::string Resolver::decodeMail ( std::stringstream & data)
staticprotected

decode mail.

Parameters
datastream where the encoded mail is stored.
Returns
decoded mail.

◆ decodeName()

std::string Resolver::decodeName ( std::stringstream & data)
staticprotected

decode name.

Parameters
datastream where the encoded name is stored.
Returns
decoded name.

◆ decodeQuestion()

QuestionRecord Resolver::decodeQuestion ( std::stringstream & data)
staticprotected

decode question record.

Parameters
datastream where the encoded mail is stored.
Returns
decoded question record.

◆ encodeName()

void Resolver::encodeName ( const std::string & host,
std::stringstream & data )
staticprotected

encode name.

Parameters
hosthost name to encode.
datadata stream where to store encoded name.

◆ encodeQuestion()

void Resolver::encodeQuestion ( const std::string & host,
uint16_t type,
uint16_t dnsclass,
std::stringstream & data )
staticprotected

decode question record.

Parameters
hosthost name.
typerecord type.
dnsclassrecord class.
datadata stream where to store encoded question.

◆ getHeader()

void Resolver::getHeader ( uint16_t & id,
uint16_t & flags,
uint16_t & qcount,
uint16_t & ancount,
uint16_t & nscount,
uint16_t & arcount,
std::stringstream & data )
protected

get DNS header.

Parameters
idrequest id.
flagsflags.
qcountquestion record count.
ancountanswer record count.
nscountname server record count.
arcountadditional record count.
datadata stream where to read header.

◆ lookup()

int Resolver::lookup ( DnsPacket & packet,
int timeout )
protected

send the DNS request.

Parameters
packetDNS packet to send.
timeouttimeout in milliseconds.
Returns
0 on success, -1 on failure.

◆ nameServers()

IpAddressList Resolver::nameServers ( )
static

get IP address of the currently configured name servers.

Returns
a list of configured name servers.

◆ notify()

void Resolver::notify ( const DnsNotify & function,
const DnsPacket & packet )
protected

safe way to notify DNS events.

Parameters
functionfunction to call.
packetDNS packet.

◆ operator=() [1/2]

Resolver & join::Resolver::operator= ( const Resolver & other)
delete

copy assignment operator.

Parameters
otherother object to copy.
Returns
a reference to the current object.

◆ operator=() [2/2]

Resolver & join::Resolver::operator= ( Resolver && other)
delete

move assignment operator.

Parameters
otherother object to move.
Returns
a reference to the current object.

◆ parseError()

std::error_code Resolver::parseError ( int error)
staticprotected

convert DNS error to system error code.

Parameters
errorDNS error number.
Returns
system error.

◆ resolveAddress() [1/2]

std::string Resolver::resolveAddress ( const IpAddress & address)
static

resolve host address.

Parameters
hosthost address to resolve.
Returns
the first resolved alias.

◆ resolveAddress() [2/2]

std::string Resolver::resolveAddress ( const IpAddress & address,
const IpAddress & server,
uint16_t port = dnsPort,
int timeout = 5000 )

resolve host address.

Parameters
addresshost address to resolve.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the first resolved alias.

◆ resolveAllAddress() [1/2]

AliasList Resolver::resolveAllAddress ( const IpAddress & address)
static

resolve all host address.

Parameters
addresshost address to resolve.
Returns
the resolved alias list.

◆ resolveAllAddress() [2/2]

AliasList Resolver::resolveAllAddress ( const IpAddress & address,
const IpAddress & server,
uint16_t port = dnsPort,
int timeout = 5000 )

resolve all host address.

Parameters
addresshost address to resolve.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the resolved alias list.

◆ resolveAllHost() [1/4]

IpAddressList Resolver::resolveAllHost ( const std::string & host)
static

resolve host name and return all IP address found.

Parameters
hosthost name to resolve.
Returns
the resolved IP address list.

◆ resolveAllHost() [2/4]

IpAddressList Resolver::resolveAllHost ( const std::string & host,
const IpAddress & server,
uint16_t port = dnsPort,
int timeout = 5000 )

resolve host name and return all IP address found.

Parameters
hosthost name to resolve.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the resolved IP address list.

◆ resolveAllHost() [3/4]

IpAddressList Resolver::resolveAllHost ( const std::string & host,
int family )
static

resolve host name and return all IP address found.

Parameters
hosthost name to resolve.
familyaddress family.
Returns
the resolved IP address list.

◆ resolveAllHost() [4/4]

IpAddressList Resolver::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.

Parameters
hosthost name to resolve.
familyaddress family.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the resolved IP address list.

◆ resolveAllMailExchanger() [1/2]

ExchangerList Resolver::resolveAllMailExchanger ( const std::string & host)
static

resolve all host mail exchanger.

Parameters
hosthost name to resolve.
Returns
the resolved mail exchanger list.

◆ resolveAllMailExchanger() [2/2]

ExchangerList Resolver::resolveAllMailExchanger ( const std::string & host,
const IpAddress & server,
uint16_t port = dnsPort,
int timeout = 5000 )

resolve all host mail exchanger.

Parameters
hosthost name to resolve.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the resolved mail exchanger list.

◆ resolveAllNameServer() [1/2]

ServerList Resolver::resolveAllNameServer ( const std::string & host)
static

resolve all host name server.

Parameters
hosthost name to resolve.
Returns
the resolved name server list.

◆ resolveAllNameServer() [2/2]

ServerList Resolver::resolveAllNameServer ( const std::string & host,
const IpAddress & server,
uint16_t port = dnsPort,
int timeout = 5000 )

resolve all host name server.

Parameters
hosthost name to resolve.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the resolved name server list.

◆ resolveAuthority() [1/2]

std::string Resolver::resolveAuthority ( const std::string & host)
static

resolve host start of authority name server.

Parameters
hosthost name to resolve.
Returns
the start of authority name server.

◆ resolveAuthority() [2/2]

std::string Resolver::resolveAuthority ( const std::string & host,
const IpAddress & server,
uint16_t port = dnsPort,
int timeout = 5000 )

resolve host start of authority name server.

Parameters
hosthost name to resolve.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the start of authority name server.

◆ resolveHost() [1/4]

IpAddress Resolver::resolveHost ( const std::string & host)
static

resolve host name.

Parameters
hosthost name to resolve.
Returns
the first resolved IP address found.

◆ resolveHost() [2/4]

IpAddress Resolver::resolveHost ( const std::string & host,
const IpAddress & server,
uint16_t port = dnsPort,
int timeout = 5000 )

resolve host name.

Parameters
hosthost name to resolve.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the first resolved IP address found.

◆ resolveHost() [3/4]

IpAddress Resolver::resolveHost ( const std::string & host,
int family )
static

resolve host name using address family.

Parameters
hosthost name to resolve.
familyaddress family.
Returns
the first resolved IP address found matching address family.

◆ resolveHost() [4/4]

IpAddress Resolver::resolveHost ( const std::string & host,
int family,
const IpAddress & server,
uint16_t port = dnsPort,
int timeout = 5000 )

resolve host name using address family.

Parameters
hosthost name to resolve.
familyaddress family.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the first resolved IP address found matching address family.

◆ resolveMailExchanger() [1/2]

std::string Resolver::resolveMailExchanger ( const std::string & host)
static

resolve host mail exchanger.

Parameters
hosthost name to resolve.
Returns
the first resolved mail exchanger.

◆ resolveMailExchanger() [2/2]

std::string Resolver::resolveMailExchanger ( const std::string & host,
const IpAddress & server,
uint16_t port = dnsPort,
int timeout = 5000 )

resolve host mail exchanger.

Parameters
hosthost name to resolve.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the first resolved mail exchanger.

◆ resolveNameServer() [1/2]

std::string Resolver::resolveNameServer ( const std::string & host)
static

resolve host name server.

Parameters
hosthost name to resolve.
Returns
the first resolved name server.

◆ resolveNameServer() [2/2]

std::string Resolver::resolveNameServer ( const std::string & host,
const IpAddress & server,
uint16_t port = dnsPort,
int timeout = 5000 )

resolve host name server.

Parameters
hosthost name to resolve.
serverserver address.
portserver port.
timeouttimeout in milliseconds (default: 5000).
Returns
the first resolved name server.

◆ resolveService()

uint16_t Resolver::resolveService ( const std::string & service)
static

resolve service name.

Parameters
serviceservice name to resolve (ex. "http", "ftp", "ssh" etc...).
Returns
the port resolved.

◆ setHeader()

void Resolver::setHeader ( uint16_t id,
uint16_t flags,
uint16_t qcount,
uint16_t ancount,
uint16_t nscount,
uint16_t arcount,
std::stringstream & data )
protected

set DNS header.

Parameters
idrequest id.
flagsflags.
qcountquestion record count.
ancountanswer record count.
nscountname server record count.
arcountadditional record count.
datadata stream where to write header.

◆ typeName()

std::string Resolver::typeName ( uint16_t recordType)
static

get record type name.

Parameters
recordTyperecord type.
Returns
record type name.

Member Data Documentation

◆ _interface

std::string join::Resolver::_interface
protected

interface name.

◆ _onFailure

DnsNotify join::Resolver::_onFailure

callback called when a lookup sequence failed.

◆ _onSuccess

DnsNotify join::Resolver::_onSuccess

callback called when a lookup sequence succeed.

◆ dnsPort

uint16_t join::Resolver::dnsPort = 53
staticconstexpr

default DNS port.


The documentation for this class was generated from the following files: