Async 1.8.0
Async::DnsResourceRecordA Class Reference

A class for representing an A DNS resource record. More...

#include <AsyncDnsResourceRecord.h>

Inheritance diagram for Async::DnsResourceRecordA:
Async::DnsResourceRecordCRTP< DnsResourceRecordA > Async::DnsResourceRecord Async::DnsResourceRecord

Public Types

using Ip = Async::IpAddress
 
- Public Types inherited from Async::DnsResourceRecordCRTP< DnsResourceRecordA >
using List
 The type for a list of resource records.
 
- Public Types inherited from Async::DnsResourceRecord
enum class  Type {
  ANY , A , PTR , CNAME ,
  SRV , A , PTR , CNAME ,
  SRV
}
 The record type. More...
 
enum class  Class { IN , IN }
 The record class. More...
 
enum class  Type {
  ANY , A , PTR , CNAME ,
  SRV , A , PTR , CNAME ,
  SRV
}
 
enum class  Class { IN , IN }
 
using Name = std::string
 
using Ttl = uint32_t
 
using List = std::vector<std::unique_ptr<DnsResourceRecord>>
 The type for a list of resource records.
 

Public Member Functions

 DnsResourceRecordA (const Name &name, Ttl ttl, const Ip &ip=Ip())
 Constructor.
 
virtual bool operator== (const DnsResourceRecordA &other) const
 Equality comparison operator.
 
virtual std::string toString (void) const
 The string representation of this record.
 
void setIp (const Ip &ip)
 Set the IP address for this record.
 
const Ipip (void) const
 The IP address for this record.
 
 DnsResourceRecordA (const std::string &name, uint32_t ttl, const IpAddress &ip=IpAddress())
 
 ~DnsResourceRecordA (void)
 
virtual const Type type (void) const
 The type of record.
 
virtual std::string toString (void) const
 The string representation of this record.
 
void setIp (const IpAddress &ip)
 
const IpAddressip (void) const
 
- Public Member Functions inherited from Async::DnsResourceRecordCRTP< DnsResourceRecordA >
 DnsResourceRecordCRTP (const Name &name, Ttl ttl)
 Constructor.
 
virtual DnsResourceRecordclone (void) const
 Clone this class.
 
virtual bool operator== (const DnsResourceRecord &other) const
 Equality comparison operator.
 
- Public Member Functions inherited from Async::DnsResourceRecord
 DnsResourceRecord (const Name &name, Ttl ttl)
 Constructor.
 
virtual ~DnsResourceRecord (void)
 Destructor.
 
Class classId (void) const
 The DNS class for the record.
 
const char * classStr (void) const
 The DNS class for the record as a string.
 
const std::string & typeStr (void) const
 The type of record as a string.
 
void setName (const Name &name)
 Set the name for this record.
 
const Namename (void) const
 The name of this record.
 
void setTtl (Ttl ttl)
 Set the TTL for this record.
 
Ttl ttl (void) const
 The TTL for this record.
 
 DnsResourceRecord (const std::string &name, uint32_t ttl)
 Default constructor.
 
 DnsResourceRecord (const DnsResourceRecord &)=delete
 Disallow copy construction.
 
DnsResourceRecordoperator= (const DnsResourceRecord &)=delete
 Disallow copy assignment.
 
virtual ~DnsResourceRecord (void)
 Destructor.
 
Class classId (void) const
 A_brief_member_function_description.
 
const char * classStr (void) const
 
const std::string & typeStr (void) const
 
void setName (const std::string &name)
 
const std::string & name (void) const
 
void setTtl (uint32_t ttl)
 
uint32_t ttl (void) const
 

Static Public Member Functions

static const Type staticType (void)
 The type for this specific class.
 
static const Type staticType (void)
 
- Static Public Member Functions inherited from Async::DnsResourceRecord
static const Type staticType (void)
 The type for this specific class.
 
static const std::string & typeToString (Type type)
 The type for this specific class represented as a string.
 
static const std::string & typeToString (Type type)
 

Additional Inherited Members

- Static Public Attributes inherited from Async::DnsResourceRecord
static constexpr Ttl MAX_TTL = 0x7fffffff
 The maximum allowed value for a TTL.
 

Detailed Description

A class for representing an A DNS resource record.

Author
Tobias Blomberg / SM0SVX
Date
2021-05-22

This class represents an A DNS resource record. One or more resource records is the result of performing a DNS query. This specific resource record maps a hostname to an IP address.

#include <iostream>
#include <AsyncDnsLookup.h>
using namespace Async;
class MyClass : public sigc::trackable
{
public:
MyClass(void)
{
dns.resultsReady.connect(mem_fun(*this, &MyClass::onResultsReady));
dns.lookup("www.svxlink.org");
//dns.lookup("www.svxlink.org", DnsLookup::Type::CNAME);
//dns.lookup("185.199.110.153");
//dns.lookup("185.199.110.153", DnsLookup::Type::PTR);
//dns.lookup("153.110.199.185.in-addr.arpa.", DnsLookup::Type::PTR);
//std::string srv = "_svxreflector._tcp.test.svxlink.org";
//dns.addStaticResourceRecord(
// new DnsResourceRecordSRV(srv, 3600, 15, 10, 5304, "localhost."));
//dns.lookup(srv, DnsLookup::Type::SRV);
std::cout << "Starting " << dns.typeStr() << " record query for \""
<< dns.label() << "\"..." << std::endl;
}
void onResultsReady(DnsLookup& dns)
{
if (!dns.lookupFailed())
{
// Simple IP address lookup API
std::cout << "IP addresses received:\n";
for (auto& addr : dns.addresses())
{
std::cout << addr << std::endl;
}
std::cout << std::endl;
// Access to all resource records
std::cout << "All resource records received:\n";
for (auto& rr : dns.resourceRecords())
{
std::cout << rr->toString() << std::endl;
}
std::cout << std::endl;
// Access A records with full detail
dns.resourceRecords(a_rrs);
if (!a_rrs.empty())
{
std::cout << "A records received:\n";
for (auto& rr : a_rrs)
{
std::cout << rr->name() << "\t" << rr->ttl() << "\t" << rr->ip()
<< std::endl;
}
std::cout << std::endl;
}
// Access PTR records with full detail
dns.resourceRecords(ptr_rrs);
if (!ptr_rrs.empty())
{
std::cout << "PTR records received:\n";
for (auto& rr : ptr_rrs)
{
std::cout << rr->name() << "\t" << rr->ttl() << "\t" << rr->dname()
<< std::endl;
}
std::cout << std::endl;
}
// Access CNAME records with full detail
dns.resourceRecords(cname_rrs);
if (!cname_rrs.empty())
{
std::cout << "CNAME records received:\n";
for (auto& rr : cname_rrs)
{
std::cout << rr->name() << "\t" << rr->ttl() << "\t" << rr->cname()
<< std::endl;
}
std::cout << std::endl;
}
// Access SRV records with full detail
dns.resourceRecords(srv_rrs);
if (!srv_rrs.empty())
{
std::cout << "SRV records received:\n";
for (auto& rr : srv_rrs)
{
std::cout << rr->name() << "\t" << rr->ttl() << "\t" << rr->prio()
<< " " << rr->weight() << " " << rr->port() << " "
<< rr->target() << std::endl;
}
}
}
else
{
std::cout << "*** ERROR: The " << dns.typeStr()
<< " record DNS lookup for " << dns.label()
<< " failed" << std::endl;
}
Application::app().quit();
}
private:
DnsLookup dns;
};
int main(int argc, char **argv)
{
MyClass dns;
app.exec();
}
The core class for writing asyncronous cpp applications.
Contains a class for executing DNS queries.
An application class for writing non GUI applications.
void exec(void)
Execute the application main loop.
A class for performing asynchronous DNS lookups.
DnsResourceRecord::List resourceRecords(Type type=Type::ANY) const
Return all matching resource records.
const std::string & label(void) const
Return the associated label.
std::string typeStr(void) const
Return the type of lookup as a string.
bool lookupFailed(void) const
Check if the lookup failed.
std::vector< IpAddress > addresses(void)
Return the addresses for the host in the query.
std::vector< std::unique_ptr< DnsResourceRecord > > List
The type for a list of resource records.
Namespace for the asynchronous programming classes.

Definition at line 197 of file AsyncResourceRecord.h.

Member Typedef Documentation

◆ Ip

Constructor & Destructor Documentation

◆ DnsResourceRecordA() [1/2]

Async::DnsResourceRecordA::DnsResourceRecordA ( const Name & name,
Ttl ttl,
const Ip & ip = Ip() )
inline

Constructor.

Parameters
nameThe name of this record
ttlThe time-to-live, in seconds, for this record
ipThe IP address associated with the record name

Definition at line 356 of file AsyncDnsResourceRecord.h.

◆ DnsResourceRecordA() [2/2]

Async::DnsResourceRecordA::DnsResourceRecordA ( const std::string & name,
uint32_t ttl,
const IpAddress & ip = IpAddress() )
inline

Definition at line 202 of file AsyncResourceRecord.h.

◆ ~DnsResourceRecordA()

Async::DnsResourceRecordA::~DnsResourceRecordA ( void )
inline

Definition at line 205 of file AsyncResourceRecord.h.

Member Function Documentation

◆ ip() [1/2]

const Ip & Async::DnsResourceRecordA::ip ( void ) const
inline

The IP address for this record.

Returns
Return the IP address for this record

Definition at line 393 of file AsyncDnsResourceRecord.h.

Referenced by operator==(), setIp(), setIp(), and toString().

◆ ip() [2/2]

const IpAddress & Async::DnsResourceRecordA::ip ( void ) const
inline

Definition at line 216 of file AsyncResourceRecord.h.

◆ operator==()

virtual bool Async::DnsResourceRecordA::operator== ( const DnsResourceRecordA & other) const
inlinevirtual

Equality comparison operator.

Parameters
otherThe other resource record to comapare to
Returns
Return true if the two records are equal

NOTE: The TTL is not used in the comparison.

Implements Async::DnsResourceRecordCRTP< DnsResourceRecordA >.

Definition at line 366 of file AsyncDnsResourceRecord.h.

References ip(), and Async::DnsResourceRecord::operator==().

◆ setIp() [1/2]

void Async::DnsResourceRecordA::setIp ( const Ip & ip)
inline

Set the IP address for this record.

Parameters
ipThe new IP address to set

Definition at line 387 of file AsyncDnsResourceRecord.h.

References ip().

◆ setIp() [2/2]

void Async::DnsResourceRecordA::setIp ( const IpAddress & ip)
inline

Definition at line 215 of file AsyncResourceRecord.h.

References ip().

◆ staticType() [1/2]

static const Type Async::DnsResourceRecordA::staticType ( void )
inlinestatic

The type for this specific class.

Definition at line 348 of file AsyncDnsResourceRecord.h.

References Async::DnsResourceRecord::A.

Referenced by type().

◆ staticType() [2/2]

static const Type Async::DnsResourceRecordA::staticType ( void )
inlinestatic

Definition at line 200 of file AsyncResourceRecord.h.

References Async::DnsResourceRecord::A.

◆ toString() [1/2]

virtual std::string Async::DnsResourceRecordA::toString ( void ) const
inlinevirtual

The string representation of this record.

Returns
Return the string representation of this record

Reimplemented from Async::DnsResourceRecord.

Definition at line 376 of file AsyncDnsResourceRecord.h.

References ip(), and Async::DnsResourceRecord::toString().

◆ toString() [2/2]

virtual std::string Async::DnsResourceRecordA::toString ( void ) const
inlinevirtual

The string representation of this record.

Returns
Return the string representation of this record

Reimplemented from Async::DnsResourceRecord.

Definition at line 208 of file AsyncResourceRecord.h.

References ip(), and Async::DnsResourceRecord::toString().

◆ type()

virtual const Type Async::DnsResourceRecordA::type ( void ) const
inlinevirtual

The type of record.

Returns
Return the type of this record

Reimplemented from Async::DnsResourceRecordCRTP< DnsResourceRecordA >.

Definition at line 207 of file AsyncResourceRecord.h.

References staticType().


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