OpenDNSSEC-signer  1.4.8.2
Data Structures | Macros | Typedefs | Functions | Variables
buffer.h File Reference
#include "config.h"
#include "shared/allocator.h"
#include "shared/log.h"
#include "shared/status.h"
#include <ldns/ldns.h>
#include <stdint.h>
Include dependency graph for buffer.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  buffer_struct
 

Macros

#define BUFFER_PKT_HEADER_SIZE   12
 
#define MAXDOMAINLEN   255
 
#define MAXLABELLEN   63
 
#define MAX_RDLENGTH   65535
 
#define MAX_RR_SIZE   (MAXDOMAINLEN + sizeof(uint32_t) + 4*sizeof(uint16_t) + MAX_RDLENGTH)
 
#define MAX_PACKET_SIZE   65535
 
#define PACKET_BUFFER_SIZE   (MAX_PACKET_SIZE + MAX_RR_SIZE)
 
#define QR_MASK   0x80U
 
#define QR_SHIFT   7
 
#define QR(packet)   (*buffer_at((packet), 2) & QR_MASK)
 
#define QR_SET(packet)   (*buffer_at((packet), 2) |= QR_MASK)
 
#define QR_CLR(packet)   (*buffer_at((packet), 2) &= ~QR_MASK)
 
#define OPCODE_MASK   0x78U
 
#define OPCODE_SHIFT   3
 
#define OPCODE(packet)   ((*buffer_at((packet), 2) & OPCODE_MASK) >> OPCODE_SHIFT)
 
#define OPCODE_SET(packet, opcode)   (*buffer_at((packet), 2) = (*buffer_at((packet), 2) & ~OPCODE_MASK) | ((opcode) << OPCODE_SHIFT))
 
#define AA_MASK   0x04U
 
#define AA_SHIFT   2
 
#define AA(packet)   (*buffer_at((packet), 2) & AA_MASK)
 
#define AA_SET(packet)   (*buffer_at((packet), 2) |= AA_MASK)
 
#define AA_CLR(packet)   (*buffer_at((packet), 2) &= ~AA_MASK)
 
#define TC_MASK   0x02U
 
#define TC_SHIFT   1
 
#define TC(packet)   (*buffer_at((packet), 2) & TC_MASK)
 
#define TC_SET(packet)   (*buffer_at((packet), 2) |= TC_MASK)
 
#define TC_CLR(packet)   (*buffer_at((packet), 2) &= ~TC_MASK)
 
#define RD_MASK   0x01U
 
#define RD_SHIFT   0
 
#define RD(packet)   (*buffer_at((packet), 2) & RD_MASK)
 
#define RD_SET(packet)   (*buffer_at((packet), 2) |= RD_MASK)
 
#define RD_CLR(packet)   (*buffer_at((packet), 2) &= ~RD_MASK)
 
#define RA_MASK   0x80U
 
#define RA_SHIFT   7
 
#define RA(packet)   (*buffer_at((packet), 3) & RA_MASK)
 
#define RA_SET(packet)   (*buffer_at((packet), 3) |= RA_MASK)
 
#define RA_CLR(packet)   (*buffer_at((packet), 3) &= ~RA_MASK)
 
#define AD_MASK   0x20U
 
#define AD_SHIFT   5
 
#define AD(packet)   (*buffer_at((packet), 3) & AD_MASK)
 
#define AD_SET(packet)   (*buffer_at((packet), 3) |= AD_MASK)
 
#define AD_CLR(packet)   (*buffer_at((packet), 3) &= ~AD_MASK)
 
#define CD_MASK   0x10U
 
#define CD_SHIFT   4
 
#define CD(packet)   (*buffer_at((packet), 3) & CD_MASK)
 
#define CD_SET(packet)   (*buffer_at((packet), 3) |= CD_MASK)
 
#define CD_CLR(packet)   (*buffer_at((packet), 3) &= ~CD_MASK)
 
#define RCODE_MASK   0x0fU
 
#define RCODE_SHIFT   0
 
#define RCODE(packet)   (*buffer_at((packet), 3) & RCODE_MASK)
 
#define RCODE_SET(packet, rcode)   (*buffer_at((packet), 3) = (*buffer_at((packet), 3) & ~RCODE_MASK) | (rcode))
 

Typedefs

typedef struct buffer_struct buffer_type
 

Functions

buffer_typebuffer_create (allocator_type *allocator, size_t capacity)
 
void buffer_create_from (buffer_type *buffer, void *data, size_t size)
 
void buffer_clear (buffer_type *buffer)
 
void buffer_flip (buffer_type *buffer)
 
void buffer_rewind (buffer_type *buffer)
 
size_t buffer_position (buffer_type *buffer)
 
void buffer_set_position (buffer_type *buffer, size_t pos)
 
void buffer_skip (buffer_type *buffer, ssize_t count)
 
int buffer_skip_dname (buffer_type *buffer)
 
int buffer_skip_rr (buffer_type *buffer, unsigned qrr)
 
size_t buffer_limit (buffer_type *buffer)
 
void buffer_set_limit (buffer_type *buffer, size_t limit)
 
size_t buffer_capacity (buffer_type *buffer)
 
uint8_t * buffer_at (buffer_type *buffer, size_t at)
 
uint8_t * buffer_begin (buffer_type *buffer)
 
uint8_t * buffer_end (buffer_type *buffer)
 
uint8_t * buffer_current (buffer_type *buffer)
 
size_t buffer_remaining (buffer_type *buffer)
 
int buffer_available (buffer_type *buffer, size_t count)
 
void buffer_write (buffer_type *buffer, const void *data, size_t count)
 
void buffer_write_u8 (buffer_type *buffer, uint8_t data)
 
void buffer_write_u16 (buffer_type *buffer, uint16_t data)
 
void buffer_write_u16_at (buffer_type *buffer, size_t at, uint16_t data)
 
void buffer_write_u32 (buffer_type *buffer, uint32_t data)
 
void buffer_write_rdf (buffer_type *buffer, ldns_rdf *rdf)
 
int buffer_write_rr (buffer_type *buffer, ldns_rr *rr)
 
void buffer_read (buffer_type *buffer, void *data, size_t count)
 
uint8_t buffer_read_u8 (buffer_type *buffer)
 
uint16_t buffer_read_u16 (buffer_type *buffer)
 
uint32_t buffer_read_u32 (buffer_type *buffer)
 
size_t buffer_read_dname (buffer_type *buffer, uint8_t *dname, unsigned allow_pointers)
 
uint16_t buffer_pkt_id (buffer_type *buffer)
 
void buffer_pkt_set_random_id (buffer_type *buffer)
 
uint16_t buffer_pkt_flags (buffer_type *buffer)
 
void buffer_pkt_set_flags (buffer_type *buffer, uint16_t flags)
 
int buffer_pkt_qr (buffer_type *buffer)
 
void buffer_pkt_set_qr (buffer_type *buffer)
 
void buffer_pkt_clear_qr (buffer_type *buffer)
 
int buffer_pkt_aa (buffer_type *buffer)
 
void buffer_pkt_set_aa (buffer_type *buffer)
 
int buffer_pkt_tc (buffer_type *buffer)
 
int buffer_pkt_rd (buffer_type *buffer)
 
int buffer_pkt_ra (buffer_type *buffer)
 
int buffer_pkt_ad (buffer_type *buffer)
 
int buffer_pkt_cd (buffer_type *buffer)
 
ldns_pkt_opcode buffer_pkt_opcode (buffer_type *buffer)
 
void buffer_pkt_set_opcode (buffer_type *buffer, ldns_pkt_opcode opcode)
 
ldns_pkt_rcode buffer_pkt_rcode (buffer_type *buffer)
 
void buffer_pkt_set_rcode (buffer_type *buffer, ldns_pkt_rcode rcode)
 
const char * buffer_rcode2str (ldns_pkt_rcode rcode)
 
uint16_t buffer_pkt_qdcount (buffer_type *buffer)
 
void buffer_pkt_set_qdcount (buffer_type *buffer, uint16_t count)
 
uint16_t buffer_pkt_ancount (buffer_type *buffer)
 
void buffer_pkt_set_ancount (buffer_type *buffer, uint16_t count)
 
uint16_t buffer_pkt_nscount (buffer_type *buffer)
 
void buffer_pkt_set_nscount (buffer_type *buffer, uint16_t count)
 
uint16_t buffer_pkt_arcount (buffer_type *buffer)
 
void buffer_pkt_set_arcount (buffer_type *buffer, uint16_t count)
 
void buffer_pkt_query (buffer_type *buffer, ldns_rdf *qname, ldns_rr_type qtype, ldns_rr_class qclass)
 
void buffer_pkt_notify (buffer_type *buffer, ldns_rdf *qname, ldns_rr_class qclass)
 
void buffer_pkt_axfr (buffer_type *buffer, ldns_rdf *qname, ldns_rr_class qclass)
 
void buffer_pkt_print (FILE *fd, buffer_type *buffer)
 
void buffer_cleanup (buffer_type *buffer, allocator_type *allocator)
 

Variables

ods_lookup_table ods_rcode_str []
 

Macro Definition Documentation

#define AA (   packet)    (*buffer_at((packet), 2) & AA_MASK)

Definition at line 66 of file buffer.h.

Referenced by buffer_pkt_aa().

#define AA_CLR (   packet)    (*buffer_at((packet), 2) &= ~AA_MASK)

Definition at line 68 of file buffer.h.

#define AA_MASK   0x04U

Definition at line 64 of file buffer.h.

#define AA_SET (   packet)    (*buffer_at((packet), 2) |= AA_MASK)

Definition at line 67 of file buffer.h.

Referenced by buffer_pkt_set_aa().

#define AA_SHIFT   2

Definition at line 65 of file buffer.h.

#define AD (   packet)    (*buffer_at((packet), 3) & AD_MASK)

Definition at line 90 of file buffer.h.

Referenced by buffer_pkt_ad().

#define AD_CLR (   packet)    (*buffer_at((packet), 3) &= ~AD_MASK)

Definition at line 92 of file buffer.h.

#define AD_MASK   0x20U

Definition at line 88 of file buffer.h.

#define AD_SET (   packet)    (*buffer_at((packet), 3) |= AD_MASK)

Definition at line 91 of file buffer.h.

#define AD_SHIFT   5

Definition at line 89 of file buffer.h.

#define BUFFER_PKT_HEADER_SIZE   12
#define CD (   packet)    (*buffer_at((packet), 3) & CD_MASK)

Definition at line 96 of file buffer.h.

Referenced by buffer_pkt_cd().

#define CD_CLR (   packet)    (*buffer_at((packet), 3) &= ~CD_MASK)

Definition at line 98 of file buffer.h.

#define CD_MASK   0x10U

Definition at line 94 of file buffer.h.

#define CD_SET (   packet)    (*buffer_at((packet), 3) |= CD_MASK)

Definition at line 97 of file buffer.h.

#define CD_SHIFT   4

Definition at line 95 of file buffer.h.

#define MAX_PACKET_SIZE   65535

Definition at line 49 of file buffer.h.

Referenced by buffer_read_dname(), dnshandler_fwd_notify(), and xfrhandler_signal().

#define MAX_RDLENGTH   65535

Definition at line 46 of file buffer.h.

#define MAX_RR_SIZE   (MAXDOMAINLEN + sizeof(uint32_t) + 4*sizeof(uint16_t) + MAX_RDLENGTH)

Definition at line 47 of file buffer.h.

#define MAXDOMAINLEN   255

Definition at line 44 of file buffer.h.

Referenced by buffer_read_dname().

#define MAXLABELLEN   63

Definition at line 45 of file buffer.h.

#define OPCODE (   packet)    ((*buffer_at((packet), 2) & OPCODE_MASK) >> OPCODE_SHIFT)

Definition at line 60 of file buffer.h.

Referenced by buffer_pkt_opcode().

#define OPCODE_MASK   0x78U

Definition at line 58 of file buffer.h.

#define OPCODE_SET (   packet,
  opcode 
)    (*buffer_at((packet), 2) = (*buffer_at((packet), 2) & ~OPCODE_MASK) | ((opcode) << OPCODE_SHIFT))

Definition at line 61 of file buffer.h.

Referenced by buffer_pkt_set_opcode().

#define OPCODE_SHIFT   3

Definition at line 59 of file buffer.h.

#define PACKET_BUFFER_SIZE   (MAX_PACKET_SIZE + MAX_RR_SIZE)

Definition at line 50 of file buffer.h.

Referenced by query_create(), tcp_conn_create(), and xfrhandler_create().

#define QR (   packet)    (*buffer_at((packet), 2) & QR_MASK)

Definition at line 54 of file buffer.h.

Referenced by buffer_pkt_qr().

#define QR_CLR (   packet)    (*buffer_at((packet), 2) &= ~QR_MASK)

Definition at line 56 of file buffer.h.

Referenced by buffer_pkt_clear_qr().

#define QR_MASK   0x80U

Definition at line 52 of file buffer.h.

#define QR_SET (   packet)    (*buffer_at((packet), 2) |= QR_MASK)

Definition at line 55 of file buffer.h.

Referenced by buffer_pkt_set_qr().

#define QR_SHIFT   7

Definition at line 53 of file buffer.h.

#define RA (   packet)    (*buffer_at((packet), 3) & RA_MASK)

Definition at line 84 of file buffer.h.

Referenced by buffer_pkt_ra().

#define RA_CLR (   packet)    (*buffer_at((packet), 3) &= ~RA_MASK)

Definition at line 86 of file buffer.h.

#define RA_MASK   0x80U

Definition at line 82 of file buffer.h.

#define RA_SET (   packet)    (*buffer_at((packet), 3) |= RA_MASK)

Definition at line 85 of file buffer.h.

#define RA_SHIFT   7

Definition at line 83 of file buffer.h.

#define RCODE (   packet)    (*buffer_at((packet), 3) & RCODE_MASK)

Definition at line 102 of file buffer.h.

Referenced by buffer_pkt_rcode().

#define RCODE_MASK   0x0fU

Definition at line 100 of file buffer.h.

#define RCODE_SET (   packet,
  rcode 
)    (*buffer_at((packet), 3) = (*buffer_at((packet), 3) & ~RCODE_MASK) | (rcode))

Definition at line 103 of file buffer.h.

Referenced by buffer_pkt_set_rcode().

#define RCODE_SHIFT   0

Definition at line 101 of file buffer.h.

#define RD (   packet)    (*buffer_at((packet), 2) & RD_MASK)

Definition at line 78 of file buffer.h.

Referenced by buffer_pkt_rd().

#define RD_CLR (   packet)    (*buffer_at((packet), 2) &= ~RD_MASK)

Definition at line 80 of file buffer.h.

#define RD_MASK   0x01U

Definition at line 76 of file buffer.h.

#define RD_SET (   packet)    (*buffer_at((packet), 2) |= RD_MASK)

Definition at line 79 of file buffer.h.

#define RD_SHIFT   0

Definition at line 77 of file buffer.h.

#define TC (   packet)    (*buffer_at((packet), 2) & TC_MASK)

Definition at line 72 of file buffer.h.

Referenced by buffer_pkt_tc().

#define TC_CLR (   packet)    (*buffer_at((packet), 2) &= ~TC_MASK)

Definition at line 74 of file buffer.h.

#define TC_MASK   0x02U

Definition at line 70 of file buffer.h.

#define TC_SET (   packet)    (*buffer_at((packet), 2) |= TC_MASK)

Definition at line 73 of file buffer.h.

#define TC_SHIFT   1

Definition at line 71 of file buffer.h.

Typedef Documentation

typedef struct buffer_struct buffer_type

Buffer.

Definition at line 111 of file buffer.h.

Function Documentation

uint8_t* buffer_at ( buffer_type buffer,
size_t  at 
)

Return a pointer to the data at the indicated position.

Parameters
[in]bufferbuffer
[in]atindicated position
Returns
uint8_t* pointer to the data at the indicated position

Return a pointer to the data at the indicated position.

Definition at line 452 of file buffer.c.

References buffer_struct::data, and ods_log_assert.

Referenced by buffer_begin(), buffer_current(), buffer_end(), and tsig_rr_update().

int buffer_available ( buffer_type buffer,
size_t  count 
)

Check if the buffer has enough bytes available.

Parameters
[in]bufferbuffer
[in]countnumber of bytes that needs to be available
Returns
int 0 if not enough bytes are available 1 otherwise

Check if the buffer has enough bytes available.

Definition at line 538 of file buffer.c.

References buffer_struct::data, ods_log_assert, and buffer_struct::position.

Referenced by buffer_read(), buffer_read_dname(), buffer_skip_dname(), buffer_skip_rr(), buffer_write(), buffer_write_rr(), edns_rr_parse(), query_add_rr(), query_reset(), tsig_rr_parse(), and xfrd_acl_sockaddr_to().

uint8_t* buffer_begin ( buffer_type buffer)

Return a pointer to the data at the beginning of the buffer.

Parameters
[in]bufferbuffer
Returns
uint8_t* pointer to the data at the begin of the buffer

Return a pointer to the data at the beginning of the buffer.

Definition at line 465 of file buffer.c.

References buffer_at(), and ods_log_assert.

Referenced by buffer_pkt_print(), notify_create(), query_reset(), sock_handle_udp(), sock_listen(), and xfrd_acl_sockaddr_to().

size_t buffer_capacity ( buffer_type buffer)

Get the buffer's capacity.

Parameters
[in]bufferbuffer
Returns
size_t capacity

Get the buffer's capacity.

Definition at line 440 of file buffer.c.

References buffer_struct::capacity, and ods_log_assert.

Referenced by query_prepare(), query_reset(), and tcp_conn_read().

void buffer_cleanup ( buffer_type buffer,
allocator_type allocator 
)

Clean up buffer.

Parameters
[in]bufferbuffer
[in]allocatormemory allocator

Clean up buffer.

Definition at line 1261 of file buffer.c.

References allocator_deallocate(), and buffer_struct::data.

Referenced by query_cleanup(), tcp_conn_write(), and xfrhandler_cleanup().

void buffer_clear ( buffer_type buffer)

Clear the buffer and make it ready for writing. The buffer's limit is set to the capacity and the position is set to 0.

Parameters
[in]bufferbuffer

Clear the buffer and make it ready for writing.

Definition at line 119 of file buffer.c.

References buffer_struct::capacity, buffer_struct::limit, ods_log_assert, and buffer_struct::position.

Referenced by buffer_pkt_set_arcount(), notify_create(), query_prepare(), query_reset(), sock_handle_tcp_write(), tcp_conn_ready(), and xfrd_acl_sockaddr_to().

buffer_type* buffer_create ( allocator_type allocator,
size_t  capacity 
)

Create a new buffer with the specified capacity.

Parameters
[in]allocatormemory allocator
[in]capacityspecified capacity
Returns
buffer_type* buffer

Create a new buffer with the specified capacity.

Definition at line 78 of file buffer.c.

References allocator_alloc(), buffer_struct::capacity, buffer_struct::data, buffer_struct::fixed, buffer_struct::limit, and buffer_struct::position.

Referenced by query_create(), tcp_conn_create(), and xfrhandler_create().

void buffer_create_from ( buffer_type buffer,
void *  data,
size_t  size 
)

Create a buffer with the specified data. The data is not copied and no memory allocations are done. The buffer is fixed and cannot be resized using buffer_reserve().

Parameters
[in]bufferbuffer
[in]dataspecified data
[in]sizesize of data

Create a buffer with the specified data.

Definition at line 102 of file buffer.c.

References buffer_struct::capacity, buffer_struct::data, buffer_struct::fixed, buffer_struct::limit, ods_log_assert, and buffer_struct::position.

uint8_t* buffer_current ( buffer_type buffer)

Return a pointer to the data at the buffer's current position.

Parameters
[in]bufferbuffer
Returns
uint8_t* pointer to the data at the buffer's current position

Return a pointer to the data at the buffer's current position.

Definition at line 489 of file buffer.c.

References buffer_at(), buffer_struct::limit, ods_log_assert, and buffer_struct::position.

Referenced by buffer_read_dname(), notify_create(), query_process(), sock_handle_tcp_read(), sock_handle_tcp_write(), tcp_conn_read(), tcp_conn_write(), tsig_rr_parse(), and xfrd_acl_sockaddr_to().

uint8_t* buffer_end ( buffer_type buffer)

Return a pointer to the data at the end of the buffer.

Parameters
[in]bufferbuffer
Returns
uint8_t* pointer to the data at the end of the buffer

Return a pointer to the data at the end of the buffer.

Definition at line 477 of file buffer.c.

References buffer_at(), buffer_struct::limit, and ods_log_assert.

void buffer_flip ( buffer_type buffer)

Flip the buffer and make it ready for reading. The data that has been written to the buffer. The buffer's limit is set to the current position and the position is set to 0.

Parameters
[in]bufferbuffer

Flip the buffer and make it ready for reading.

Definition at line 133 of file buffer.c.

References buffer_struct::limit, ods_log_assert, and buffer_struct::position.

Referenced by notify_send(), sock_handle_tcp_read(), sock_handle_tcp_write(), sock_handle_udp(), and xfrd_acl_sockaddr_to().

size_t buffer_limit ( buffer_type buffer)

Get the buffer's limit.

Parameters
[in]bufferbuffer
Returns
size_t limit

Get the buffer's limit.

Definition at line 411 of file buffer.c.

References buffer_struct::limit, and ods_log_assert.

Referenced by buffer_read_dname(), query_prepare(), query_process(), query_reset(), tsig_rr_update(), and xfrd_acl_sockaddr_to().

int buffer_pkt_aa ( buffer_type buffer)

Get AA bit from buffer.

Parameters
[in]bufferbuffer
Returns
int 0 if AA bit is clear 1 if AA bit is set

Get AA bit from buffer.

Definition at line 935 of file buffer.c.

References AA, and ods_log_assert.

Referenced by query_reset().

int buffer_pkt_ad ( buffer_type buffer)

Get AD bit from buffer.

Parameters
[in]bufferbuffer
Returns
int 0 if AD bit is clear 1 if AD bit is set

Get AD bit from buffer.

Definition at line 996 of file buffer.c.

References AD, and ods_log_assert.

Referenced by query_reset().

uint16_t buffer_pkt_ancount ( buffer_type buffer)

Get ANCOUNT from buffer.

Parameters
[in]bufferbuffer
Returns
uint16_t ANCOUNT

Get ANCOUNT from buffer.

Definition at line 1086 of file buffer.c.

References ods_log_assert.

Referenced by axfr(), ixfr(), query_prepare(), query_reset(), soa_request(), tsig_rr_find(), and xfrd_acl_sockaddr_to().

uint16_t buffer_pkt_arcount ( buffer_type buffer)

Get ARCOUNT from buffer.

Parameters
[in]bufferbuffer
Returns
uint16_t ARCOUNT

Get ARCOUNT from buffer.

Definition at line 1136 of file buffer.c.

References ods_log_assert.

Referenced by notify_create(), query_add_optional(), query_prepare(), tsig_rr_find(), and xfrd_acl_sockaddr_to().

void buffer_pkt_axfr ( buffer_type buffer,
ldns_rdf *  qname,
ldns_rr_class  qclass 
)

Make a new axfr.

Parameters
[in]bufferbuffer
[in]qnameqname
[in]qclassqclass

Make a new axfr.

Definition at line 1219 of file buffer.c.

References buffer_pkt_set_qr().

int buffer_pkt_cd ( buffer_type buffer)

Get CD bit from buffer.

Parameters
[in]bufferbuffer
Returns
int 0 if CD bit is clear 1 if CD bit is set

Get CD bit from buffer.

Definition at line 1008 of file buffer.c.

References CD, and ods_log_assert.

Referenced by query_reset().

void buffer_pkt_clear_qr ( buffer_type buffer)

Clear QR bit in buffer.

Parameters
[in]bufferbuffer

Clear QR bit in buffer.

Definition at line 897 of file buffer.c.

References ods_log_assert, and QR_CLR.

Referenced by buffer_pkt_set_arcount().

uint16_t buffer_pkt_flags ( buffer_type buffer)

Get flags from buffer.

Parameters
[in]bufferbuffer
Returns
uint16_t flags

Get flags from buffer.

Definition at line 847 of file buffer.c.

References ods_log_assert.

Referenced by query_prepare(), and query_reset().

uint16_t buffer_pkt_id ( buffer_type buffer)

Get query id from buffer.

Parameters
[in]bufferbuffer
Returns
uint16_t query id

Get query id from buffer.

Definition at line 811 of file buffer.c.

References ods_log_assert.

Referenced by notify_create(), notify_send(), and xfrd_acl_sockaddr_to().

void buffer_pkt_notify ( buffer_type buffer,
ldns_rdf *  qname,
ldns_rr_class  qclass 
)

Make a new notify.

Parameters
[in]bufferbuffer
[in]qnameqname
[in]qclassqclass

Make a new notify.

Definition at line 1206 of file buffer.c.

Referenced by notify_send().

uint16_t buffer_pkt_nscount ( buffer_type buffer)

Get NSCOUNT from buffer.

Parameters
[in]bufferbuffer
Returns
uint16_t NSCOUNT

Get NSCOUNT from buffer.

Definition at line 1111 of file buffer.c.

References ods_log_assert.

Referenced by query_prepare(), query_reset(), and tsig_rr_find().

ldns_pkt_opcode buffer_pkt_opcode ( buffer_type buffer)

Get OPCODE from buffer.

Parameters
[in]bufferbuffer
Returns
ldns_pkt_opcode OPCODE

Get OPCODE from buffer.

Definition at line 910 of file buffer.c.

References ods_log_assert, and OPCODE.

Referenced by notify_create(), and query_reset().

void buffer_pkt_print ( FILE *  fd,
buffer_type buffer 
)

Print packet buffer.

Parameters
[in]fdfile descriptor
[in]bufferbuffer

Print packet buffer.

Definition at line 1233 of file buffer.c.

References buffer_begin(), buffer_remaining(), and ods_log_assert.

uint16_t buffer_pkt_qdcount ( buffer_type buffer)

Get QDCOUNT from buffer.

Parameters
[in]bufferbuffer
Returns
uint16_t QDCOUNT

Get QDCOUNT from buffer.

Definition at line 1061 of file buffer.c.

References ods_log_assert.

Referenced by query_prepare(), query_reset(), tsig_rr_find(), and xfrd_acl_sockaddr_to().

int buffer_pkt_qr ( buffer_type buffer)

Get QR bit from buffer.

Parameters
[in]bufferbuffer
Returns
int 0 if QR bit is clear 1 if QR bit is set

Get QR bit from buffer.

Definition at line 872 of file buffer.c.

References ods_log_assert, and QR.

Referenced by notify_create(), query_process(), query_reset(), and tsig_rr_update().

void buffer_pkt_query ( buffer_type buffer,
ldns_rdf *  qname,
ldns_rr_type  qtype,
ldns_rr_class  qclass 
)

Make a new query.

Parameters
[in]bufferbuffer
[in]qnameqname
[in]qtypeqtype
[in]qclassqclass

Make a new query.

Definition at line 1192 of file buffer.c.

References buffer_pkt_set_flags().

Referenced by xfrd_acl_sockaddr_to().

int buffer_pkt_ra ( buffer_type buffer)

Get RA bit from buffer.

Parameters
[in]bufferbuffer
Returns
int 0 if RA bit is clear 1 if RA bit is set

Get RA bit from buffer.

Definition at line 984 of file buffer.c.

References ods_log_assert, and RA.

Referenced by query_reset().

ldns_pkt_rcode buffer_pkt_rcode ( buffer_type buffer)

Get RCODE from buffer.

Parameters
[in]bufferbuffer
Returns
ldns_pkt_rcode RCODE

Get RCODE from buffer.

Definition at line 1020 of file buffer.c.

References ods_log_assert, and RCODE.

Referenced by notify_create(), query_reset(), and xfrd_acl_sockaddr_to().

int buffer_pkt_rd ( buffer_type buffer)

Get RD bit from buffer.

Parameters
[in]bufferbuffer
Returns
int 0 if RD bit is clear 1 if RD bit is set

Get RD bit from buffer.

Definition at line 972 of file buffer.c.

References ods_log_assert, and RD.

Referenced by query_reset().

void buffer_pkt_set_aa ( buffer_type buffer)

Set AA bit in buffer.

Parameters
[in]bufferbuffer

Set AA bit in buffer.

Definition at line 947 of file buffer.c.

References AA_SET, and ods_log_assert.

Referenced by notify_send(), query_reset(), and soa_request().

void buffer_pkt_set_ancount ( buffer_type buffer,
uint16_t  count 
)

Set ANCOUNT in buffer.

Parameters
[in]bufferbuffer
[in]countANCOUNT

Set ANCOUNT in buffer.

Definition at line 1098 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

Referenced by axfr(), buffer_pkt_set_arcount(), ixfr(), notify_send(), query_reset(), and soa_request().

void buffer_pkt_set_arcount ( buffer_type buffer,
uint16_t  count 
)
void buffer_pkt_set_flags ( buffer_type buffer,
uint16_t  flags 
)

Set flags in buffer.

Parameters
[in]bufferbuffer
[in]flagsflags

Set flags in buffer.

Definition at line 859 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

Referenced by buffer_pkt_query(), query_prepare(), and query_reset().

void buffer_pkt_set_nscount ( buffer_type buffer,
uint16_t  count 
)

Set NSCOUNT in buffer.

Parameters
[in]bufferbuffer
[in]countNSCOUNT

Set NSCOUNT in buffer.

Definition at line 1123 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

Referenced by axfr(), buffer_pkt_set_arcount(), ixfr(), query_reset(), soa_request(), and xfrd_acl_sockaddr_to().

void buffer_pkt_set_opcode ( buffer_type buffer,
ldns_pkt_opcode  opcode 
)

Set OPCODE in buffer.

Parameters
[in]bufferbuffer
[in]opcodeOPCODE

Set OPCODE in buffer.

Definition at line 922 of file buffer.c.

References ods_log_assert, and OPCODE_SET.

Referenced by buffer_pkt_set_arcount(), and query_reset().

void buffer_pkt_set_qdcount ( buffer_type buffer,
uint16_t  count 
)

Set QDCOUNT in buffer.

Parameters
[in]bufferbuffer
[in]countQDCOUNT

Set QDCOUNT in buffer.

Definition at line 1073 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

Referenced by axfr(), buffer_pkt_set_arcount(), ixfr(), and query_reset().

void buffer_pkt_set_qr ( buffer_type buffer)

Set QR bit in buffer.

Parameters
[in]bufferbuffer

Set QR bit in buffer.

Definition at line 884 of file buffer.c.

References ods_log_assert, and QR_SET.

Referenced by buffer_pkt_axfr(), and query_reset().

void buffer_pkt_set_random_id ( buffer_type buffer)

Set random query id in buffer.

Parameters
[in]bufferbuffer

Set random query id in buffer.

Definition at line 832 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

Referenced by buffer_pkt_set_arcount().

void buffer_pkt_set_rcode ( buffer_type buffer,
ldns_pkt_rcode  rcode 
)

Set RCODE in buffer.

Parameters
[in]bufferbuffer
[in]rcodeRCODE

Set RCODE in buffer.

Definition at line 1032 of file buffer.c.

References ods_log_assert, and RCODE_SET.

Referenced by axfr(), buffer_pkt_set_arcount(), ixfr(), query_reset(), and soa_request().

int buffer_pkt_tc ( buffer_type buffer)

Get TC bit from buffer.

Parameters
[in]bufferbuffer
Returns
int 0 if TC bit is clear 1 if TC bit is set

Get TC bit from buffer.

Definition at line 960 of file buffer.c.

References ods_log_assert, and TC.

Referenced by query_prepare(), query_reset(), and xfrd_acl_sockaddr_to().

size_t buffer_position ( buffer_type buffer)

Get the buffer's position.

Parameters
[in]bufferbuffer
Returns
size_t position

Get the buffer's position.

Definition at line 160 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by axfr(), buffer_read_dname(), buffer_write_rr(), edns_rr_parse(), ixfr(), notify_create(), query_add_optional(), query_add_rr(), query_prepare(), query_process(), query_reset(), sock_handle_tcp_read(), tcp_conn_read(), tsig_rr_append(), tsig_rr_find(), tsig_rr_parse(), and xfrd_acl_sockaddr_to().

const char* buffer_rcode2str ( ldns_pkt_rcode  rcode)

Look up a descriptive text by each rcode.

Parameters
[in]rcodercode
Returns
const char* descriptive text

Look up a descriptive text by each rcode.

Definition at line 1045 of file buffer.c.

References ods_struct_lookup_table::name, and ods_lookup_by_id().

Referenced by notify_create().

void buffer_read ( buffer_type buffer,
void *  data,
size_t  count 
)

Read from buffer.

Parameters
[in]bufferbuffer
[in]dataread data
[in]countnumber of bytes to read

Read from buffer.

Definition at line 751 of file buffer.c.

References buffer_available(), buffer_struct::data, ods_log_assert, and buffer_struct::position.

Referenced by buffer_read_dname().

size_t buffer_read_dname ( buffer_type buffer,
uint8_t *  dname,
unsigned  allow_pointers 
)

Read dname from buffer.

Parameters
[in]bufferbuffer
[out]dnamedname
[in]allow_pointersallow pointer labels
Returns
int dname length

Read dname from buffer.

Definition at line 284 of file buffer.c.

References buffer_available(), buffer_current(), buffer_limit(), buffer_position(), buffer_read(), buffer_set_position(), buffer_skip(), MAX_PACKET_SIZE, MAXDOMAINLEN, ods_log_assert, and ods_log_error().

Referenced by xfrd_acl_sockaddr_to().

uint16_t buffer_read_u16 ( buffer_type buffer)

Read uint16_t from buffer.

Parameters
[in]bufferbuffer
Returns
uint16_t read data

Read uint16_t from buffer.

Definition at line 781 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by buffer_skip_rr(), edns_rr_parse(), query_reset(), tsig_rr_parse(), and xfrd_acl_sockaddr_to().

uint32_t buffer_read_u32 ( buffer_type buffer)

Read uint32_t from buffer.

Parameters
[in]bufferbuffer
Returns
uint32_t read data

Read uint32_t from buffer.

Definition at line 796 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by query_reset(), tsig_rr_parse(), and xfrd_acl_sockaddr_to().

uint8_t buffer_read_u8 ( buffer_type buffer)

Read uint8_t from buffer.

Parameters
[in]bufferbuffer
Returns
uint8_t read data

Read uint8_t from buffer.

Definition at line 766 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by buffer_skip_dname(), and edns_rr_parse().

size_t buffer_remaining ( buffer_type buffer)

The number of bytes remaining between the buffer's position and limit.

Parameters
[in]bufferbuffer
Returns
size_t remaining number of bytes

The number of bytes remaining between the buffer's position and limit.

Definition at line 514 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by buffer_pkt_print(), notify_create(), query_process(), query_reset(), sock_handle_tcp_read(), sock_handle_tcp_write(), sock_handle_udp(), sock_listen(), tcp_conn_read(), tcp_conn_write(), and xfrd_acl_sockaddr_to().

void buffer_rewind ( buffer_type buffer)

Make the buffer ready for re-reading the data. The buffer's position is reset to 0.

Parameters
[in]bufferbuffer

Make the buffer ready for re-reading the data.

Definition at line 147 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

void buffer_set_limit ( buffer_type buffer,
size_t  limit 
)

Set the buffer's limit. If the buffer's position is greater than the new limit, the position is set to the limit.

Parameters
[in]bufferbuffer
[in]limitlimit

Set the buffer's limit.

Definition at line 423 of file buffer.c.

References buffer_struct::limit, ods_log_assert, and buffer_struct::position.

Referenced by axfr(), ixfr(), notify_create(), query_prepare(), query_reset(), sock_handle_tcp_read(), tcp_conn_read(), and xfrd_acl_sockaddr_to().

void buffer_set_position ( buffer_type buffer,
size_t  pos 
)

Set the buffer's position. The position must be less than or equal to the buffer's limit.

Parameters
[in]bufferbuffer
[in]posposition

Set the buffer's position.

Definition at line 172 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by axfr(), buffer_read_dname(), buffer_write_rr(), edns_rr_parse(), ixfr(), query_add_rr(), query_prepare(), query_reset(), tsig_rr_find(), tsig_rr_parse(), and xfrd_acl_sockaddr_to().

void buffer_skip ( buffer_type buffer,
ssize_t  count 
)

Change the buffer's position. The position must not be moved behind the buffer's limit or before the beginning of the buffer.

Parameters
[in]bufferbuffer
[in]countnumber of bytes to skip

Change the buffer's position.

Definition at line 186 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by buffer_pkt_set_arcount(), buffer_read_dname(), buffer_skip_dname(), buffer_skip_rr(), buffer_write_rr(), query_add_rr(), query_reset(), sock_handle_tcp_read(), sock_handle_tcp_write(), sock_handle_udp(), tcp_conn_read(), tcp_conn_write(), tsig_rr_append(), tsig_rr_parse(), and xfrd_acl_sockaddr_to().

int buffer_skip_dname ( buffer_type buffer)

Change the buffer's position so that one dname is skipped.

Parameters
[in]bufferbuffer
Returns
int 0 if dname skipping failed 1 otherwise

Change the buffer's position so that one dname is skipped.

Definition at line 348 of file buffer.c.

References buffer_available(), buffer_read_u8(), buffer_skip(), and ods_log_assert.

Referenced by buffer_skip_rr(), query_reset(), tsig_rr_parse(), and xfrd_acl_sockaddr_to().

int buffer_skip_rr ( buffer_type buffer,
unsigned  qrr 
)

Change the buffer's position so that one RR is skipped.

Parameters
[in]bufferbuffer
[in]qrr1 if we skip RRs in the question section.
Returns
int 0 if RR skipping failed 1 otherwise

Change the buffer's position so that one RR is skipped.

Definition at line 380 of file buffer.c.

References buffer_available(), buffer_read_u16(), buffer_skip(), and buffer_skip_dname().

Referenced by query_prepare(), query_reset(), tsig_rr_find(), and xfrd_acl_sockaddr_to().

void buffer_write ( buffer_type buffer,
const void *  data,
size_t  count 
)

Write to buffer.

Parameters
[in]bufferbuffer
[in]datadata to write
[in]countnumber of bytes to write

Write to buffer.

Definition at line 592 of file buffer.c.

References buffer_available(), buffer_struct::data, ods_log_assert, and buffer_struct::position.

Referenced by buffer_write_rdf(), query_add_optional(), query_reset(), tsig_rr_append(), and xfrd_acl_sockaddr_to().

void buffer_write_rdf ( buffer_type buffer,
ldns_rdf *  rdf 
)

Write rdf to buffer.

Parameters
[in]bufferbuffer
[in]rdfdata to write

Write rdf to buffer.

Definition at line 649 of file buffer.c.

References buffer_write(), and ods_log_assert.

Referenced by buffer_pkt_set_arcount(), buffer_write_rr(), query_add_rr(), tsig_rr_append(), and xfrd_acl_sockaddr_to().

int buffer_write_rr ( buffer_type buffer,
ldns_rr *  rr 
)

Write rr to buffer.

Parameters
[in]bufferbuffer
[in]rrdata to write
Returns
int 1 if rr fits, 0 otherwise

Write rr to buffer.

Definition at line 664 of file buffer.c.

References buffer_available(), buffer_position(), buffer_set_position(), buffer_skip(), buffer_write_rdf(), buffer_write_u16(), buffer_write_u16_at(), buffer_write_u32(), buffer_struct::data, and ods_log_assert.

Referenced by notify_send().

void buffer_write_u16 ( buffer_type buffer,
uint16_t  data 
)

Write uint16_t to buffer.

Parameters
[in]bufferbuffer
[in]datadata to write

Write uint16_t to buffer.

Definition at line 621 of file buffer.c.

References buffer_write_u16_at(), ods_log_assert, and buffer_struct::position.

Referenced by buffer_pkt_set_arcount(), buffer_write_rr(), query_add_rr(), tsig_rr_append(), and xfrd_acl_sockaddr_to().

void buffer_write_u16_at ( buffer_type buffer,
size_t  at,
uint16_t  data 
)

Write uint16_t to buffer at indicated position.

Parameters
[in]bufferbuffer
[in]atindicated position
[in]datadata to write

Write to buffer at indicated position.

Definition at line 564 of file buffer.c.

References buffer_struct::data, and ods_log_assert.

Referenced by buffer_pkt_set_ancount(), buffer_pkt_set_arcount(), buffer_pkt_set_flags(), buffer_pkt_set_nscount(), buffer_pkt_set_qdcount(), buffer_pkt_set_random_id(), buffer_write_rr(), buffer_write_u16(), query_add_rr(), tsig_rr_append(), and xfrd_acl_sockaddr_to().

void buffer_write_u32 ( buffer_type buffer,
uint32_t  data 
)

Write uint32_t to buffer.

Parameters
[in]bufferbuffer
[in]datadata to write

Write uint32_t to buffer.

Definition at line 635 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by buffer_write_rr(), query_add_rr(), tsig_rr_append(), and xfrd_acl_sockaddr_to().

void buffer_write_u8 ( buffer_type buffer,
uint8_t  data 
)

Write uint8_t to buffer.

Parameters
[in]bufferbuffer
[in]datadata to write

Write uint8_t to buffer.

Definition at line 607 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by tsig_rr_append().

Variable Documentation

ods_lookup_table ods_rcode_str[]

Definition at line 57 of file buffer.c.