Kea 2.5.8
isc::dns::RRType Class Reference

The RRType class encapsulates DNS resource record types. More...

#include <rrtype.h>

Public Member Functions

Constructors and Destructor
 RRType (uint16_t typecode)
 Constructor from an integer type code.
 
 RRType (const std::string &typestr)
 Constructor from a string.
 
 RRType (isc::util::InputBuffer &buffer)
 Constructor from wire-format data.
 
Converter methods

We use the default copy constructor intentionally.

We use the default copy assignment operator intentionally.

const std::string toText () const
 Convert the RRType to a string.
 
void toWire (AbstractMessageRenderer &renderer) const
 Render the RRType in the wire format.
 
void toWire (isc::util::OutputBuffer &buffer) const
 Render the RRType in the wire format.
 
Getter Methods
uint16_t getCode () const
 Returns the RR type code as a 16-bit unsigned integer.
 

Comparison methods

bool equals (const RRType &other) const
 Return true iff two RRTypes are equal.
 
bool operator== (const RRType &other) const
 Same as equals().
 
bool nequals (const RRType &other) const
 Return true iff two RRTypes are not equal.
 
bool operator!= (const RRType &other) const
 Same as nequals().
 
bool operator< (const RRType &other) const
 Less-than comparison for RRType against other.
 
static const RRTypeA ()
 
static const RRTypeNS ()
 
static const RRTypeSOA ()
 
static const RRTypeOPT ()
 
static const RRTypePTR ()
 
static const RRTypeTXT ()
 
static const RRTypeAAAA ()
 
static const RRTypeRRSIG ()
 
static const RRTypeDHCID ()
 
static const RRTypeTKEY ()
 
static const RRTypeTSIG ()
 
static const RRTypeANY ()
 

Detailed Description

The RRType class encapsulates DNS resource record types.

This class manages the 16-bit integer type codes in quite a straightforward way. The only non trivial task is to handle textual representations of RR types, such as "A", "AAAA", or "TYPE65534".

This class consults a helper RRParamRegistry class, which is a registry of RR related parameters and has the singleton object. This registry provides a mapping between RR type codes and their "well-known" textual representations. Parameters of RR types defined by DNS protocol standards are automatically registered at initialization time and are ensured to be always available for applications unless the application explicitly modifies the registry.

For convenience, this class defines constant class objects corresponding to standard RR types. These are generally referred to as the form of RRType::{type-text}(). For example, RRType::NS() is an RRType object corresponding to the NS resource record (type code 2). Note that these constants are used through a "proxy" function. This is because they may be used to initialize another non-local (e.g. global or namespace-scope) static object as follows:

namespace foo {
const RRType default_type = RRType::A();
}
The RRType class encapsulates DNS resource record types.
Definition: rrtype.h:96

In order to ensure that the constant RRType object has been initialized before the initialization for default_type, we need help from the proxy function.

In the current implementation, the initialization of the well-known static objects is not thread safe. The same consideration as the RRParamRegistry class applies. We may extend the implementation so that the initialization is ensured to be thread safe in a future version.

Note to developers: since it's expected that some of these constant RRType objects are frequently used in a performance sensitive path, we define these proxy functions as inline. This makes sense only when the corresponding static objects are defined only once even if they used in different source files. Sufficiently modern compilers should meet this assumption, but if we encounter memory bloat due to this problem with particular compilers we need to revisit the design or think about workaround.

Definition at line 96 of file rrtype.h.

Constructor & Destructor Documentation

◆ RRType() [1/3]

isc::dns::RRType::RRType ( uint16_t  typecode)
inlineexplicit

Constructor from an integer type code.

This constructor never throws an exception.

Parameters
typecodeAn 16-bit integer code corresponding to the RRType.

Definition at line 107 of file rrtype.h.

◆ RRType() [2/3]

isc::dns::RRType::RRType ( const std::string &  typestr)
explicit

Constructor from a string.

A valid string is one of "well-known" textual type representations such as "A", "AAAA", or "NS", or in the standard format for "unknown" RR types as defined in RFC3597, i.e., "TYPEnnnn".

More precisely, the "well-known" representations are the ones stored in the RRParamRegistry registry (see the class description).

As for the format of "TYPEnnnn", "nnnn" must represent a valid 16-bit unsigned integer, which may contain leading 0's as long as it consists of at most 5 characters (inclusive). For example, "TYPE1" and "TYPE001" are valid and represent the same RR type, but "TYPE65536" and "TYPE000001" are invalid. A "TYPEnnnn" representation is valid even if the corresponding type code is registered in the RRParamRegistry object. For example, both "A" and "TYPE1" are valid and represent the same RR type.

All of these representations are case insensitive; "NS" and "ns", and "TYPE1" and "type1" are all valid and represent the same RR types, respectively.

If the given string is not recognized as a valid representation of an RR type, an exception of class InvalidRRType will be thrown.

Parameters
typestrA string representation of the RRType

Definition at line 27 of file rrtype.cc.

References isc::dns::RRParamRegistry::getRegistry(), and isc_throw.

+ Here is the call graph for this function:

◆ RRType() [3/3]

isc::dns::RRType::RRType ( isc::util::InputBuffer buffer)
explicit

Constructor from wire-format data.

The buffer parameter normally stores a complete DNS message containing the RRType to be constructed. The current read position of the buffer points to the head of the type.

If the given data does not large enough to contain a 16-bit integer, an exception of class IncompleteRRType will be thrown.

Parameters
bufferA buffer storing the wire format data.

Definition at line 36 of file rrtype.cc.

References isc::util::InputBuffer::getLength(), isc::util::InputBuffer::getPosition(), isc_throw, and isc::util::InputBuffer::readUint16().

+ Here is the call graph for this function:

Member Function Documentation

◆ A()

◆ AAAA()

◆ ANY()

◆ DHCID()

◆ equals()

bool isc::dns::RRType::equals ( const RRType other) const
inline

Return true iff two RRTypes are equal.

Two RRTypes are equal iff their type codes are equal.

This method never throws an exception.

Parameters
otherthe RRType object to compare against.
Returns
true if the two RRTypes are equal; otherwise false.

Definition at line 219 of file rrtype.h.

Referenced by operator==().

◆ getCode()

uint16_t isc::dns::RRType::getCode ( ) const
inline

Returns the RR type code as a 16-bit unsigned integer.

This method never throws an exception.

Returns
An 16-bit integer code corresponding to the RRType.

Definition at line 202 of file rrtype.h.

◆ nequals()

bool isc::dns::RRType::nequals ( const RRType other) const
inline

Return true iff two RRTypes are not equal.

This method never throws an exception.

Parameters
otherthe RRType object to compare against.
Returns
true if the two RRTypes are not equal; otherwise false.

Definition at line 233 of file rrtype.h.

Referenced by operator!=().

◆ NS()

const RRType & isc::dns::RRType::NS ( )
inlinestatic

Definition at line 285 of file rrtype.h.

◆ operator!=()

bool isc::dns::RRType::operator!= ( const RRType other) const
inline

Same as nequals().

Definition at line 237 of file rrtype.h.

References nequals().

+ Here is the call graph for this function:

◆ operator<()

bool isc::dns::RRType::operator< ( const RRType other) const
inline

Less-than comparison for RRType against other.

We define the less-than relationship based on their type codes; one RRType is less than the other iff the code of the former is less than that of the other as unsigned integers. The relationship is meaningless in terms of DNS protocol; the only reason we define this method is that RRType objects can be stored in STL containers without requiring user-defined less-than relationship. We therefore don't define other comparison operators.

This method never throws an exception.

Parameters
otherthe RRType object to compare against.
Returns
true if this RRType is less than the other; otherwise false.

Definition at line 256 of file rrtype.h.

◆ operator==()

bool isc::dns::RRType::operator== ( const RRType other) const
inline

Same as equals().

Definition at line 223 of file rrtype.h.

References equals().

+ Here is the call graph for this function:

◆ OPT()

const RRType & isc::dns::RRType::OPT ( )
inlinestatic

Definition at line 297 of file rrtype.h.

Referenced by isc::dns::EDNS::EDNS(), and isc::dns::MessageImpl::parseSection().

◆ PTR()

◆ RRSIG()

const RRType & isc::dns::RRType::RRSIG ( )
inlinestatic

Definition at line 321 of file rrtype.h.

Referenced by isc::dns::RRset::addRRsig().

◆ SOA()

const RRType & isc::dns::RRType::SOA ( )
inlinestatic

Definition at line 291 of file rrtype.h.

Referenced by isc::d2::D2UpdateMessage::setZone().

◆ TKEY()

const RRType & isc::dns::RRType::TKEY ( )
inlinestatic

Definition at line 333 of file rrtype.h.

◆ toText()

const string isc::dns::RRType::toText ( ) const

Convert the RRType to a string.

If a "well known" textual representation for the type code is registered in the RR parameter registry (see the class description), that will be used as the return value of this method. Otherwise, this method creates a new string for an "unknown" RR type in the format defined in RFC3597, i.e., "TYPEnnnn", and returns it.

If resource allocation for the string fails, a corresponding standard exception will be thrown.

Returns
A string representation of the RRType.

Definition at line 44 of file rrtype.cc.

References isc::dns::RRParamRegistry::getRegistry().

Referenced by isc::dns::operator<<(), isc::dns::AbstractRRset::toText(), and isc::dns::Question::toText().

+ Here is the call graph for this function:

◆ toWire() [1/2]

void isc::dns::RRType::toWire ( AbstractMessageRenderer renderer) const

Render the RRType in the wire format.

This method renders the type code in network byte order via renderer, which encapsulates output buffer and other rendering contexts.

If resource allocation in rendering process fails, a corresponding standard exception will be thrown.

Parameters
rendererDNS message rendering context that encapsulates the output buffer in which the RRType is to be stored.

Definition at line 54 of file rrtype.cc.

References isc::dns::AbstractMessageRenderer::writeUint16().

Referenced by isc::dns::BasicRRsetImpl::toWire(), and isc::dns::Question::toWire().

+ Here is the call graph for this function:

◆ toWire() [2/2]

void isc::dns::RRType::toWire ( isc::util::OutputBuffer buffer) const

Render the RRType in the wire format.

This method renders the type code in network byte order into the buffer.

If resource allocation in rendering process fails, a corresponding standard exception will be thrown.

Parameters
bufferAn output buffer to store the wire data.

Definition at line 49 of file rrtype.cc.

References isc::util::OutputBuffer::writeUint16().

+ Here is the call graph for this function:

◆ TSIG()

const RRType & isc::dns::RRType::TSIG ( )
inlinestatic

Definition at line 339 of file rrtype.h.

Referenced by isc::dns::MessageImpl::parseSection(), and isc::dns::TSIGRecord::toText().

◆ TXT()

const RRType & isc::dns::RRType::TXT ( )
inlinestatic

Definition at line 309 of file rrtype.h.


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