join 1.0
lightweight network framework library
Loading...
Searching...
No Matches
join::BasicDatagramNameServer< Protocol > Class Template Referenceabstract

basic DNS name server over datagram socket. More...

#include <nameserver.hpp>

Inheritance diagram for join::BasicDatagramNameServer< Protocol >:
Collaboration diagram for join::BasicDatagramNameServer< Protocol >:

Public Types

using Socket = typename Protocol::Socket
 
using Endpoint = typename Protocol::Endpoint
 

Public Member Functions

 BasicDatagramNameServer (Reactor &reactor=ReactorThread::reactor())
 construct the name server instance.
 
 BasicDatagramNameServer (const BasicDatagramNameServer &other)=delete
 copy constructor.
 
BasicDatagramNameServeroperator= (const BasicDatagramNameServer &other)=delete
 copy assignment operator.
 
 BasicDatagramNameServer (BasicDatagramNameServer &&other)=delete
 move constructor.
 
BasicDatagramNameServeroperator= (BasicDatagramNameServer &&other)=delete
 move assignment operator.
 
virtual ~BasicDatagramNameServer () noexcept=default
 destroy instance.
 
virtual int bind (const Endpoint &endpoint) noexcept override
 bind the socket to the given endpoint and register with the reactor.
 
virtual void close () noexcept override
 close the socket and unregister from the reactor.
 
int reply (const DnsPacket &query, const std::vector< ResourceRecord > &answers={}, const std::vector< ResourceRecord > &authorities={}, const std::vector< ResourceRecord > &additionals={}, uint16_t rcode=0)
 reply to a DNS query.
 
virtual void onQuery (const DnsPacket &packet)=0
 method called when a DNS query is received.
 
- Public Member Functions inherited from join::EventHandler
 EventHandler ()=default
 create instance.
 
 EventHandler (const EventHandler &other)=default
 copy constructor.
 
EventHandleroperator= (const EventHandler &other)=default
 copy assignment operator.
 
 EventHandler (EventHandler &&other)=default
 move constructor.
 
EventHandleroperator= (EventHandler &&other)=default
 move assignment operator.
 
virtual ~EventHandler ()=default
 destroy instance.
 

Protected Member Functions

virtual void onReadable (int fd) override
 method called when data are ready to be read on handle.
 
int send (DnsPacket &packet)
 serialize and send a DNS packet.
 
- Protected Member Functions inherited from join::EventHandler
virtual void onWriteable (int fd)
 method called when data are ready to be written on handle.
 
virtual void onClose (int fd)
 method called when handle was closed by the peer.
 
virtual void onError (int fd)
 method called when an error occurred on handle.
 

Protected Attributes

DnsMessage _message
 DNS message codec.
 
Reactor_reactor
 event loop reactor.
 
std::unique_ptr< char[]> _buffer
 reception buffer.
 

Static Protected Attributes

static constexpr size_t _headerSize = 12
 DNS message header size.
 

Detailed Description

template<typename Protocol>
class join::BasicDatagramNameServer< Protocol >

basic DNS name server over datagram socket.

Member Typedef Documentation

◆ Endpoint

template<typename Protocol >
using join::BasicDatagramNameServer< Protocol >::Endpoint = typename Protocol::Endpoint

◆ Socket

template<typename Protocol >
using join::BasicDatagramNameServer< Protocol >::Socket = typename Protocol::Socket

Constructor & Destructor Documentation

◆ BasicDatagramNameServer() [1/3]

template<typename Protocol >
join::BasicDatagramNameServer< Protocol >::BasicDatagramNameServer ( Reactor & reactor = ReactorThread::reactor ())
inlineexplicit

construct the name server instance.

Parameters
reactorevent loop reactor.

◆ BasicDatagramNameServer() [2/3]

template<typename Protocol >
join::BasicDatagramNameServer< Protocol >::BasicDatagramNameServer ( const BasicDatagramNameServer< Protocol > & other)
delete

copy constructor.

Parameters
otherother object to copy.

◆ BasicDatagramNameServer() [3/3]

template<typename Protocol >
join::BasicDatagramNameServer< Protocol >::BasicDatagramNameServer ( BasicDatagramNameServer< Protocol > && other)
delete

move constructor.

Parameters
otherother object to move.

◆ ~BasicDatagramNameServer()

template<typename Protocol >
virtual join::BasicDatagramNameServer< Protocol >::~BasicDatagramNameServer ( )
virtualdefaultnoexcept

destroy instance.

Member Function Documentation

◆ bind()

template<typename Protocol >
virtual int join::BasicDatagramNameServer< Protocol >::bind ( const Endpoint & endpoint)
inlineoverridevirtualnoexcept

bind the socket to the given endpoint and register with the reactor.

Parameters
endpointendpoint to bind to.
Returns
0 on success, -1 on failure.

◆ close()

template<typename Protocol >
virtual void join::BasicDatagramNameServer< Protocol >::close ( )
inlineoverridevirtualnoexcept

close the socket and unregister from the reactor.

◆ onQuery()

template<typename Protocol >
virtual void join::BasicDatagramNameServer< Protocol >::onQuery ( const DnsPacket & packet)
pure virtual

method called when a DNS query is received.

Parameters
packetparsed DNS query received.

◆ onReadable()

template<typename Protocol >
virtual void join::BasicDatagramNameServer< Protocol >::onReadable ( int fd)
inlineoverrideprotectedvirtual

method called when data are ready to be read on handle.

Parameters
fdfile descriptor.

Reimplemented from join::EventHandler.

Reimplemented in join::BasicDatagramPeer< Protocol >.

◆ operator=() [1/2]

template<typename Protocol >
BasicDatagramNameServer & join::BasicDatagramNameServer< Protocol >::operator= ( BasicDatagramNameServer< Protocol > && other)
delete

move assignment operator.

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

◆ operator=() [2/2]

template<typename Protocol >
BasicDatagramNameServer & join::BasicDatagramNameServer< Protocol >::operator= ( const BasicDatagramNameServer< Protocol > & other)
delete

copy assignment operator.

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

◆ reply()

template<typename Protocol >
int join::BasicDatagramNameServer< Protocol >::reply ( const DnsPacket & query,
const std::vector< ResourceRecord > & answers = {},
const std::vector< ResourceRecord > & authorities = {},
const std::vector< ResourceRecord > & additionals = {},
uint16_t rcode = 0 )
inline

reply to a DNS query.

Parameters
queryoriginal query packet.
answersanswer records.
authoritiesauthority records.
additionalsadditional records.
rcoderesponse code (default: 0 = no error).
Returns
0 on success, -1 on error.

◆ send()

template<typename Protocol >
int join::BasicDatagramNameServer< Protocol >::send ( DnsPacket & packet)
inlineprotected

serialize and send a DNS packet.

Parameters
packetDNS packet to send.
Returns
0 on success, -1 on error.

Member Data Documentation

◆ _buffer

template<typename Protocol >
std::unique_ptr<char[]> join::BasicDatagramNameServer< Protocol >::_buffer
protected

reception buffer.

◆ _headerSize

template<typename Protocol >
size_t join::BasicDatagramNameServer< Protocol >::_headerSize = 12
staticconstexprprotected

DNS message header size.

◆ _message

template<typename Protocol >
DnsMessage join::BasicDatagramNameServer< Protocol >::_message
protected

DNS message codec.

◆ _reactor

template<typename Protocol >
Reactor& join::BasicDatagramNameServer< Protocol >::_reactor
protected

event loop reactor.


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