wire2host.h File Reference

Contains functions that translate dns data from the wire format (as sent by servers and clients) to the internal structures. More...

Go to the source code of this file.

Macros

#define LDNS_HEADER_SIZE   12
 
#define LDNS_RD_MASK   0x01U
 
#define LDNS_RD_SHIFT   0
 
#define LDNS_RD_WIRE(wirebuf)   (*(wirebuf+2) & LDNS_RD_MASK)
 
#define LDNS_RD_SET(wirebuf)   (*(wirebuf+2) |= LDNS_RD_MASK)
 
#define LDNS_RD_CLR(wirebuf)   (*(wirebuf+2) &= ~LDNS_RD_MASK)
 
#define LDNS_TC_MASK   0x02U
 
#define LDNS_TC_SHIFT   1
 
#define LDNS_TC_WIRE(wirebuf)   (*(wirebuf+2) & LDNS_TC_MASK)
 
#define LDNS_TC_SET(wirebuf)   (*(wirebuf+2) |= LDNS_TC_MASK)
 
#define LDNS_TC_CLR(wirebuf)   (*(wirebuf+2) &= ~LDNS_TC_MASK)
 
#define LDNS_AA_MASK   0x04U
 
#define LDNS_AA_SHIFT   2
 
#define LDNS_AA_WIRE(wirebuf)   (*(wirebuf+2) & LDNS_AA_MASK)
 
#define LDNS_AA_SET(wirebuf)   (*(wirebuf+2) |= LDNS_AA_MASK)
 
#define LDNS_AA_CLR(wirebuf)   (*(wirebuf+2) &= ~LDNS_AA_MASK)
 
#define LDNS_OPCODE_MASK   0x78U
 
#define LDNS_OPCODE_SHIFT   3
 
#define LDNS_OPCODE_WIRE(wirebuf)   ((*(wirebuf+2) & LDNS_OPCODE_MASK) >> LDNS_OPCODE_SHIFT)
 
#define LDNS_OPCODE_SET(wirebuf, opcode)    (*(wirebuf+2) = ((*(wirebuf+2)) & ~LDNS_OPCODE_MASK) | ((opcode) << LDNS_OPCODE_SHIFT))
 
#define LDNS_QR_MASK   0x80U
 
#define LDNS_QR_SHIFT   7
 
#define LDNS_QR_WIRE(wirebuf)   (*(wirebuf+2) & LDNS_QR_MASK)
 
#define LDNS_QR_SET(wirebuf)   (*(wirebuf+2) |= LDNS_QR_MASK)
 
#define LDNS_QR_CLR(wirebuf)   (*(wirebuf+2) &= ~LDNS_QR_MASK)
 
#define LDNS_RCODE_MASK   0x0fU
 
#define LDNS_RCODE_SHIFT   0
 
#define LDNS_RCODE_WIRE(wirebuf)   (*(wirebuf+3) & LDNS_RCODE_MASK)
 
#define LDNS_RCODE_SET(wirebuf, rcode)    (*(wirebuf+3) = ((*(wirebuf+3)) & ~LDNS_RCODE_MASK) | (rcode))
 
#define LDNS_CD_MASK   0x10U
 
#define LDNS_CD_SHIFT   4
 
#define LDNS_CD_WIRE(wirebuf)   (*(wirebuf+3) & LDNS_CD_MASK)
 
#define LDNS_CD_SET(wirebuf)   (*(wirebuf+3) |= LDNS_CD_MASK)
 
#define LDNS_CD_CLR(wirebuf)   (*(wirebuf+3) &= ~LDNS_CD_MASK)
 
#define LDNS_AD_MASK   0x20U
 
#define LDNS_AD_SHIFT   5
 
#define LDNS_AD_WIRE(wirebuf)   (*(wirebuf+3) & LDNS_AD_MASK)
 
#define LDNS_AD_SET(wirebuf)   (*(wirebuf+3) |= LDNS_AD_MASK)
 
#define LDNS_AD_CLR(wirebuf)   (*(wirebuf+3) &= ~LDNS_AD_MASK)
 
#define LDNS_Z_MASK   0x40U
 
#define LDNS_Z_SHIFT   6
 
#define LDNS_Z_WIRE(wirebuf)   (*(wirebuf+3) & LDNS_Z_MASK)
 
#define LDNS_Z_SET(wirebuf)   (*(wirebuf+3) |= LDNS_Z_MASK)
 
#define LDNS_Z_CLR(wirebuf)   (*(wirebuf+3) &= ~LDNS_Z_MASK)
 
#define LDNS_RA_MASK   0x80U
 
#define LDNS_RA_SHIFT   7
 
#define LDNS_RA_WIRE(wirebuf)   (*(wirebuf+3) & LDNS_RA_MASK)
 
#define LDNS_RA_SET(wirebuf)   (*(wirebuf+3) |= LDNS_RA_MASK)
 
#define LDNS_RA_CLR(wirebuf)   (*(wirebuf+3) &= ~LDNS_RA_MASK)
 
#define LDNS_ID_WIRE(wirebuf)   (ldns_read_uint16(wirebuf))
 
#define LDNS_ID_SET(wirebuf, id)   (ldns_write_uint16(wirebuf, id))
 
#define LDNS_QDCOUNT_OFF   4
 
#define LDNS_QDCOUNT(wirebuf)   (ldns_read_uint16(wirebuf+LDNS_QDCOUNT_OFF))
 
#define LDNS_ANCOUNT_OFF   6
 
#define LDNS_ANCOUNT(wirebuf)   (ldns_read_uint16(wirebuf+LDNS_ANCOUNT_OFF))
 
#define LDNS_NSCOUNT_OFF   8
 
#define LDNS_NSCOUNT(wirebuf)   (ldns_read_uint16(wirebuf+LDNS_NSCOUNT_OFF))
 
#define LDNS_ARCOUNT_OFF   10
 
#define LDNS_ARCOUNT(wirebuf)   (ldns_read_uint16(wirebuf+LDNS_ARCOUNT_OFF))
 

Functions

ldns_status ldns_wire2pkt (ldns_pkt **packet, const uint8_t *data, size_t len)
 converts the data on the uint8_t bytearray (in wire format) to a DNS packet. More...
 
ldns_status ldns_buffer2pkt_wire (ldns_pkt **packet, const ldns_buffer *buffer)
 converts the data in the ldns_buffer (in wire format) to a DNS packet. More...
 
ldns_status ldns_wire2dname (ldns_rdf **dname, const uint8_t *wire, size_t max, size_t *pos)
 converts the data on the uint8_t bytearray (in wire format) to a DNS dname rdata field. More...
 
ldns_status ldns_wire2rdf (ldns_rr *rr, const uint8_t *wire, size_t max, size_t *pos)
 converts the data on the uint8_t bytearray (in wire format) to DNS rdata fields, and adds them to the list of rdfs of the given rr. More...
 
ldns_status ldns_wire2rr (ldns_rr **rr, const uint8_t *wire, size_t max, size_t *pos, ldns_pkt_section section)
 converts the data on the uint8_t bytearray (in wire format) to a DNS resource record. More...
 

Detailed Description

Contains functions that translate dns data from the wire format (as sent by servers and clients) to the internal structures.

Definition in file wire2host.h.

Macro Definition Documentation

◆ LDNS_HEADER_SIZE

#define LDNS_HEADER_SIZE   12

Definition at line 32 of file wire2host.h.

◆ LDNS_RD_MASK

#define LDNS_RD_MASK   0x01U

Definition at line 35 of file wire2host.h.

◆ LDNS_RD_SHIFT

#define LDNS_RD_SHIFT   0

Definition at line 36 of file wire2host.h.

◆ LDNS_RD_WIRE

#define LDNS_RD_WIRE (   wirebuf)    (*(wirebuf+2) & LDNS_RD_MASK)

Definition at line 37 of file wire2host.h.

◆ LDNS_RD_SET

#define LDNS_RD_SET (   wirebuf)    (*(wirebuf+2) |= LDNS_RD_MASK)

Definition at line 38 of file wire2host.h.

◆ LDNS_RD_CLR

#define LDNS_RD_CLR (   wirebuf)    (*(wirebuf+2) &= ~LDNS_RD_MASK)

Definition at line 39 of file wire2host.h.

◆ LDNS_TC_MASK

#define LDNS_TC_MASK   0x02U

Definition at line 41 of file wire2host.h.

◆ LDNS_TC_SHIFT

#define LDNS_TC_SHIFT   1

Definition at line 42 of file wire2host.h.

◆ LDNS_TC_WIRE

#define LDNS_TC_WIRE (   wirebuf)    (*(wirebuf+2) & LDNS_TC_MASK)

Definition at line 43 of file wire2host.h.

◆ LDNS_TC_SET

#define LDNS_TC_SET (   wirebuf)    (*(wirebuf+2) |= LDNS_TC_MASK)

Definition at line 44 of file wire2host.h.

◆ LDNS_TC_CLR

#define LDNS_TC_CLR (   wirebuf)    (*(wirebuf+2) &= ~LDNS_TC_MASK)

Definition at line 45 of file wire2host.h.

◆ LDNS_AA_MASK

#define LDNS_AA_MASK   0x04U

Definition at line 47 of file wire2host.h.

◆ LDNS_AA_SHIFT

#define LDNS_AA_SHIFT   2

Definition at line 48 of file wire2host.h.

◆ LDNS_AA_WIRE

#define LDNS_AA_WIRE (   wirebuf)    (*(wirebuf+2) & LDNS_AA_MASK)

Definition at line 49 of file wire2host.h.

◆ LDNS_AA_SET

#define LDNS_AA_SET (   wirebuf)    (*(wirebuf+2) |= LDNS_AA_MASK)

Definition at line 50 of file wire2host.h.

◆ LDNS_AA_CLR

#define LDNS_AA_CLR (   wirebuf)    (*(wirebuf+2) &= ~LDNS_AA_MASK)

Definition at line 51 of file wire2host.h.

◆ LDNS_OPCODE_MASK

#define LDNS_OPCODE_MASK   0x78U

Definition at line 53 of file wire2host.h.

◆ LDNS_OPCODE_SHIFT

#define LDNS_OPCODE_SHIFT   3

Definition at line 54 of file wire2host.h.

◆ LDNS_OPCODE_WIRE

#define LDNS_OPCODE_WIRE (   wirebuf)    ((*(wirebuf+2) & LDNS_OPCODE_MASK) >> LDNS_OPCODE_SHIFT)

Definition at line 55 of file wire2host.h.

◆ LDNS_OPCODE_SET

#define LDNS_OPCODE_SET (   wirebuf,
  opcode 
)     (*(wirebuf+2) = ((*(wirebuf+2)) & ~LDNS_OPCODE_MASK) | ((opcode) << LDNS_OPCODE_SHIFT))

Definition at line 56 of file wire2host.h.

◆ LDNS_QR_MASK

#define LDNS_QR_MASK   0x80U

Definition at line 59 of file wire2host.h.

◆ LDNS_QR_SHIFT

#define LDNS_QR_SHIFT   7

Definition at line 60 of file wire2host.h.

◆ LDNS_QR_WIRE

#define LDNS_QR_WIRE (   wirebuf)    (*(wirebuf+2) & LDNS_QR_MASK)

Definition at line 61 of file wire2host.h.

◆ LDNS_QR_SET

#define LDNS_QR_SET (   wirebuf)    (*(wirebuf+2) |= LDNS_QR_MASK)

Definition at line 62 of file wire2host.h.

◆ LDNS_QR_CLR

#define LDNS_QR_CLR (   wirebuf)    (*(wirebuf+2) &= ~LDNS_QR_MASK)

Definition at line 63 of file wire2host.h.

◆ LDNS_RCODE_MASK

#define LDNS_RCODE_MASK   0x0fU

Definition at line 66 of file wire2host.h.

◆ LDNS_RCODE_SHIFT

#define LDNS_RCODE_SHIFT   0

Definition at line 67 of file wire2host.h.

◆ LDNS_RCODE_WIRE

#define LDNS_RCODE_WIRE (   wirebuf)    (*(wirebuf+3) & LDNS_RCODE_MASK)

Definition at line 68 of file wire2host.h.

◆ LDNS_RCODE_SET

#define LDNS_RCODE_SET (   wirebuf,
  rcode 
)     (*(wirebuf+3) = ((*(wirebuf+3)) & ~LDNS_RCODE_MASK) | (rcode))

Definition at line 69 of file wire2host.h.

◆ LDNS_CD_MASK

#define LDNS_CD_MASK   0x10U

Definition at line 72 of file wire2host.h.

◆ LDNS_CD_SHIFT

#define LDNS_CD_SHIFT   4

Definition at line 73 of file wire2host.h.

◆ LDNS_CD_WIRE

#define LDNS_CD_WIRE (   wirebuf)    (*(wirebuf+3) & LDNS_CD_MASK)

Definition at line 74 of file wire2host.h.

◆ LDNS_CD_SET

#define LDNS_CD_SET (   wirebuf)    (*(wirebuf+3) |= LDNS_CD_MASK)

Definition at line 75 of file wire2host.h.

◆ LDNS_CD_CLR

#define LDNS_CD_CLR (   wirebuf)    (*(wirebuf+3) &= ~LDNS_CD_MASK)

Definition at line 76 of file wire2host.h.

◆ LDNS_AD_MASK

#define LDNS_AD_MASK   0x20U

Definition at line 78 of file wire2host.h.

◆ LDNS_AD_SHIFT

#define LDNS_AD_SHIFT   5

Definition at line 79 of file wire2host.h.

◆ LDNS_AD_WIRE

#define LDNS_AD_WIRE (   wirebuf)    (*(wirebuf+3) & LDNS_AD_MASK)

Definition at line 80 of file wire2host.h.

◆ LDNS_AD_SET

#define LDNS_AD_SET (   wirebuf)    (*(wirebuf+3) |= LDNS_AD_MASK)

Definition at line 81 of file wire2host.h.

◆ LDNS_AD_CLR

#define LDNS_AD_CLR (   wirebuf)    (*(wirebuf+3) &= ~LDNS_AD_MASK)

Definition at line 82 of file wire2host.h.

◆ LDNS_Z_MASK

#define LDNS_Z_MASK   0x40U

Definition at line 84 of file wire2host.h.

◆ LDNS_Z_SHIFT

#define LDNS_Z_SHIFT   6

Definition at line 85 of file wire2host.h.

◆ LDNS_Z_WIRE

#define LDNS_Z_WIRE (   wirebuf)    (*(wirebuf+3) & LDNS_Z_MASK)

Definition at line 86 of file wire2host.h.

◆ LDNS_Z_SET

#define LDNS_Z_SET (   wirebuf)    (*(wirebuf+3) |= LDNS_Z_MASK)

Definition at line 87 of file wire2host.h.

◆ LDNS_Z_CLR

#define LDNS_Z_CLR (   wirebuf)    (*(wirebuf+3) &= ~LDNS_Z_MASK)

Definition at line 88 of file wire2host.h.

◆ LDNS_RA_MASK

#define LDNS_RA_MASK   0x80U

Definition at line 90 of file wire2host.h.

◆ LDNS_RA_SHIFT

#define LDNS_RA_SHIFT   7

Definition at line 91 of file wire2host.h.

◆ LDNS_RA_WIRE

#define LDNS_RA_WIRE (   wirebuf)    (*(wirebuf+3) & LDNS_RA_MASK)

Definition at line 92 of file wire2host.h.

◆ LDNS_RA_SET

#define LDNS_RA_SET (   wirebuf)    (*(wirebuf+3) |= LDNS_RA_MASK)

Definition at line 93 of file wire2host.h.

◆ LDNS_RA_CLR

#define LDNS_RA_CLR (   wirebuf)    (*(wirebuf+3) &= ~LDNS_RA_MASK)

Definition at line 94 of file wire2host.h.

◆ LDNS_ID_WIRE

#define LDNS_ID_WIRE (   wirebuf)    (ldns_read_uint16(wirebuf))

Definition at line 97 of file wire2host.h.

◆ LDNS_ID_SET

#define LDNS_ID_SET (   wirebuf,
  id 
)    (ldns_write_uint16(wirebuf, id))

Definition at line 98 of file wire2host.h.

◆ LDNS_QDCOUNT_OFF

#define LDNS_QDCOUNT_OFF   4

Definition at line 101 of file wire2host.h.

◆ LDNS_QDCOUNT

#define LDNS_QDCOUNT (   wirebuf)    (ldns_read_uint16(wirebuf+LDNS_QDCOUNT_OFF))

Definition at line 102 of file wire2host.h.

◆ LDNS_ANCOUNT_OFF

#define LDNS_ANCOUNT_OFF   6

Definition at line 105 of file wire2host.h.

◆ LDNS_ANCOUNT

#define LDNS_ANCOUNT (   wirebuf)    (ldns_read_uint16(wirebuf+LDNS_ANCOUNT_OFF))

Definition at line 106 of file wire2host.h.

◆ LDNS_NSCOUNT_OFF

#define LDNS_NSCOUNT_OFF   8

Definition at line 109 of file wire2host.h.

◆ LDNS_NSCOUNT

#define LDNS_NSCOUNT (   wirebuf)    (ldns_read_uint16(wirebuf+LDNS_NSCOUNT_OFF))

Definition at line 110 of file wire2host.h.

◆ LDNS_ARCOUNT_OFF

#define LDNS_ARCOUNT_OFF   10

Definition at line 113 of file wire2host.h.

◆ LDNS_ARCOUNT

#define LDNS_ARCOUNT (   wirebuf)    (ldns_read_uint16(wirebuf+LDNS_ARCOUNT_OFF))

Definition at line 114 of file wire2host.h.

Function Documentation

◆ ldns_wire2pkt()

ldns_status ldns_wire2pkt ( ldns_pkt **  packet,
const uint8_t *  data,
size_t  len 
)

converts the data on the uint8_t bytearray (in wire format) to a DNS packet.

This function will initialize and allocate memory space for the packet structure.

Parameters
[out]packetpointer to the structure to hold the packet
[in]datapointer to the buffer with the data
[in]lenthe length of the data buffer (in bytes)
Returns
LDNS_STATUS_OK if everything succeeds, error otherwise

Definition at line 405 of file wire2host.c.

References ldns_pkt_new(), LDNS_STATUS_MEM_ERR, and LDNS_STATUS_OK.

◆ ldns_buffer2pkt_wire()

ldns_status ldns_buffer2pkt_wire ( ldns_pkt **  packet,
const ldns_buffer buffer 
)

converts the data in the ldns_buffer (in wire format) to a DNS packet.

This function will initialize and allocate memory space for the packet structure.

Parameters
[out]packetpointer to the structure to hold the packet
[in]bufferthe buffer with the data
Returns
LDNS_STATUS_OK if everything succeeds, error otherwise

Definition at line 396 of file wire2host.c.

References ldns_wire2pkt().

◆ ldns_wire2dname()

ldns_status ldns_wire2dname ( ldns_rdf **  dname,
const uint8_t *  wire,
size_t  max,
size_t *  pos 
)

converts the data on the uint8_t bytearray (in wire format) to a DNS dname rdata field.

This function will initialize and allocate memory space for the dname structure. The length of the wiredata of this rdf is added to the *pos value.

Parameters
[out]dnamepointer to the structure to hold the rdata value
[in]wirepointer to the buffer with the data
[in]maxthe length of the data buffer (in bytes)
[in]posthe position of the rdf in the buffer (ie. the number of bytes from the start of the buffer)
Returns
LDNS_STATUS_OK if everything succeeds, error otherwise

Definition at line 56 of file wire2host.c.

References LDNS_MAX_DOMAINLEN, LDNS_STATUS_PACKET_OVERFLOW, and LDNS_STATUS_WIRE_RDATA_ERR.

◆ ldns_wire2rdf()

ldns_status ldns_wire2rdf ( ldns_rr rr,
const uint8_t *  wire,
size_t  max,
size_t *  pos 
)

converts the data on the uint8_t bytearray (in wire format) to DNS rdata fields, and adds them to the list of rdfs of the given rr.

This function will initialize and allocate memory space for the dname structures. The length of the wiredata of these rdfs is added to the *pos value.

All rdfs belonging to the RR are read; the rr should have no rdfs yet. An error is returned if the format cannot be parsed.

Parameters
[in]rrpointer to the ldns_rr structure to hold the rdata value
[in]wirepointer to the buffer with the data
[in]maxthe length of the data buffer (in bytes)
[in]posthe position of the rdf in the buffer (ie. the number of bytes from the start of the buffer)
Returns
LDNS_STATUS_OK if everything succeeds, error otherwise

Definition at line 158 of file wire2host.c.

References ldns_rr_descript(), ldns_rr_get_type(), and LDNS_STATUS_PACKET_OVERFLOW.

◆ ldns_wire2rr()

ldns_status ldns_wire2rr ( ldns_rr **  rr,
const uint8_t *  wire,
size_t  max,
size_t *  pos,
ldns_pkt_section  section 
)

converts the data on the uint8_t bytearray (in wire format) to a DNS resource record.

This function will initialize and allocate memory space for the rr structure. The length of the wiredata of this rr is added to the *pos value.

Parameters
[out]rrpointer to the structure to hold the rdata value
[in]wirepointer to the buffer with the data
[in]maxthe length of the data buffer (in bytes)
[in]posthe position of the rr in the buffer (ie. the number of bytes from the start of the buffer)
[in]sectionthe section in the packet the rr is meant for
Returns
LDNS_STATUS_OK if everything succeeds, error otherwise

Definition at line 320 of file wire2host.c.

References ldns_rr_new(), ldns_rr_set_owner(), ldns_rr_set_type(), LDNS_STATUS_CHECK_GOTO, LDNS_STATUS_PACKET_OVERFLOW, and ldns_wire2dname().