OpenDNSSEC-signer  1.4.1
Functions
buffer.c File Reference
#include "config.h"
#include "shared/log.h"
#include "wire/buffer.h"
#include <string.h>
Include dependency graph for buffer.c:

Go to the source code of this file.

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)
 
size_t buffer_read_dname (buffer_type *buffer, uint8_t *dname, unsigned allow_pointers)
 
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_u16_at (buffer_type *buffer, size_t at, uint16_t data)
 
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_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)
 
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)
 
ldns_pkt_opcode buffer_pkt_opcode (buffer_type *buffer)
 
void buffer_pkt_set_opcode (buffer_type *buffer, ldns_pkt_opcode opcode)
 
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_rcode buffer_pkt_rcode (buffer_type *buffer)
 
void buffer_pkt_set_rcode (buffer_type *buffer, 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)
 

Function Documentation

uint8_t* buffer_at ( buffer_type buffer,
size_t  at 
)

Return a pointer to the data at the indicated position.

Definition at line 438 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.

Definition at line 524 of file buffer.c.

References 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(), and tsig_rr_parse().

uint8_t* buffer_begin ( buffer_type buffer)

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

Definition at line 451 of file buffer.c.

References buffer_at(), and ods_log_assert.

Referenced by buffer_pkt_print(), and sock_handle_udp().

size_t buffer_capacity ( buffer_type buffer)

Get the buffer's capacity.

Definition at line 426 of file buffer.c.

References buffer_struct::capacity, and ods_log_assert.

Referenced by query_prepare(), and tcp_conn_read().

void buffer_cleanup ( buffer_type buffer,
allocator_type allocator 
)

Clean up buffer.

Definition at line 1231 of file buffer.c.

References allocator_deallocate(), and buffer_struct::data.

Referenced by query_cleanup(), and xfrhandler_cleanup().

void buffer_clear ( buffer_type buffer)

Clear the buffer and make it ready for writing.

Definition at line 105 of file buffer.c.

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

Referenced by query_prepare(), query_reset(), sock_handle_tcp_write(), and tcp_conn_ready().

buffer_type* buffer_create ( allocator_type allocator,
size_t  capacity 
)

Create a new buffer with the specified capacity.

Definition at line 64 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.

Definition at line 88 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.

Definition at line 475 of file buffer.c.

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

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

uint8_t* buffer_end ( buffer_type buffer)

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

Definition at line 463 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.

Definition at line 119 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(), and sock_handle_udp().

size_t buffer_limit ( buffer_type buffer)

Get the buffer's limit.

Definition at line 397 of file buffer.c.

References buffer_struct::limit, and ods_log_assert.

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

int buffer_pkt_aa ( buffer_type buffer)

Get AA bit from buffer.

Definition at line 921 of file buffer.c.

References AA, and ods_log_assert.

int buffer_pkt_ad ( buffer_type buffer)

Get AD bit from buffer.

Definition at line 982 of file buffer.c.

References AD, and ods_log_assert.

uint16_t buffer_pkt_ancount ( buffer_type buffer)

Get ANCOUNT from buffer.

Definition at line 1056 of file buffer.c.

References ods_log_assert.

Referenced by axfr(), ixfr(), and tsig_rr_find().

uint16_t buffer_pkt_arcount ( buffer_type buffer)

Get ARCOUNT from buffer.

Definition at line 1106 of file buffer.c.

References ods_log_assert.

Referenced by query_add_optional(), and tsig_rr_find().

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

Make a new axfr.

Definition at line 1189 of file buffer.c.

References buffer_pkt_set_qr().

int buffer_pkt_cd ( buffer_type buffer)

Get CD bit from buffer.

Definition at line 994 of file buffer.c.

References CD, and ods_log_assert.

void buffer_pkt_clear_qr ( buffer_type buffer)

Clear QR bit in buffer.

Definition at line 883 of file buffer.c.

References ods_log_assert, and QR_CLR.

uint16_t buffer_pkt_flags ( buffer_type buffer)

Get flags from buffer.

Definition at line 833 of file buffer.c.

References ods_log_assert.

Referenced by query_prepare().

uint16_t buffer_pkt_id ( buffer_type buffer)

Get query id from buffer.

Definition at line 797 of file buffer.c.

References ods_log_assert.

Referenced by notify_send().

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

Make a new notify.

Definition at line 1176 of file buffer.c.

Referenced by notify_send().

uint16_t buffer_pkt_nscount ( buffer_type buffer)

Get NSCOUNT from buffer.

Definition at line 1081 of file buffer.c.

References ods_log_assert.

Referenced by tsig_rr_find().

ldns_pkt_opcode buffer_pkt_opcode ( buffer_type buffer)

Get OPCODE from buffer.

Definition at line 896 of file buffer.c.

References ods_log_assert, and OPCODE.

void buffer_pkt_print ( FILE *  fd,
buffer_type buffer 
)

Print packet buffer.

Definition at line 1203 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.

Definition at line 1031 of file buffer.c.

References ods_log_assert.

Referenced by tsig_rr_find().

int buffer_pkt_qr ( buffer_type buffer)

Get QR bit from buffer.

Definition at line 858 of file buffer.c.

References ods_log_assert, and QR.

Referenced by query_process(), 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.

Definition at line 1162 of file buffer.c.

References buffer_pkt_set_flags().

int buffer_pkt_ra ( buffer_type buffer)

Get RA bit from buffer.

Definition at line 970 of file buffer.c.

References ods_log_assert, and RA.

ldns_pkt_rcode buffer_pkt_rcode ( buffer_type buffer)

Get RCODE from buffer.

Definition at line 1006 of file buffer.c.

References ods_log_assert, and RCODE.

int buffer_pkt_rd ( buffer_type buffer)

Get RD bit from buffer.

Definition at line 958 of file buffer.c.

References ods_log_assert, and RD.

void buffer_pkt_set_aa ( buffer_type buffer)

Set AA bit in buffer.

Definition at line 933 of file buffer.c.

References AA_SET, and ods_log_assert.

Referenced by notify_send().

void buffer_pkt_set_ancount ( buffer_type buffer,
uint16_t  count 
)

Set ANCOUNT in buffer.

Definition at line 1068 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

Referenced by axfr(), ixfr(), and notify_send().

void buffer_pkt_set_arcount ( buffer_type buffer,
uint16_t  count 
)

Set ARCOUNT in buffer.

Definition at line 1118 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

Referenced by axfr(), ixfr(), and query_add_optional().

void buffer_pkt_set_flags ( buffer_type buffer,
uint16_t  flags 
)

Set flags in buffer.

Definition at line 845 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

Referenced by buffer_pkt_query(), and query_prepare().

void buffer_pkt_set_nscount ( buffer_type buffer,
uint16_t  count 
)

Set NSCOUNT in buffer.

Definition at line 1093 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

Referenced by axfr(), and ixfr().

void buffer_pkt_set_opcode ( buffer_type buffer,
ldns_pkt_opcode  opcode 
)

Set OPCODE in buffer.

Definition at line 908 of file buffer.c.

References ods_log_assert, and OPCODE_SET.

void buffer_pkt_set_qdcount ( buffer_type buffer,
uint16_t  count 
)

Set QDCOUNT in buffer.

Definition at line 1043 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

Referenced by axfr(), and ixfr().

void buffer_pkt_set_qr ( buffer_type buffer)

Set QR bit in buffer.

Definition at line 870 of file buffer.c.

References ods_log_assert, and QR_SET.

Referenced by buffer_pkt_axfr().

void buffer_pkt_set_random_id ( buffer_type buffer)

Set random query id in buffer.

Definition at line 818 of file buffer.c.

References buffer_write_u16_at(), and ods_log_assert.

void buffer_pkt_set_rcode ( buffer_type buffer,
ldns_pkt_rcode  rcode 
)

Set RCODE in buffer.

Definition at line 1018 of file buffer.c.

References ods_log_assert, and RCODE_SET.

Referenced by axfr(), and ixfr().

int buffer_pkt_tc ( buffer_type buffer)

Get TC bit from buffer.

Definition at line 946 of file buffer.c.

References ods_log_assert, and TC.

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

Read from buffer.

Definition at line 737 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 
)
uint16_t buffer_read_u16 ( buffer_type buffer)

Read uint16_t from buffer.

Definition at line 767 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

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

uint32_t buffer_read_u32 ( buffer_type buffer)

Read uint32_t from buffer.

Definition at line 782 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by tsig_rr_parse().

uint8_t buffer_read_u8 ( buffer_type buffer)

Read uint8_t from buffer.

Definition at line 752 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.

Definition at line 500 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by buffer_pkt_print(), query_process(), sock_handle_tcp_read(), sock_handle_tcp_write(), sock_handle_udp(), tcp_conn_read(), and tcp_conn_write().

void buffer_rewind ( buffer_type buffer)

Make the buffer ready for re-reading the data.

Definition at line 133 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.

Definition at line 409 of file buffer.c.

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

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

void buffer_set_position ( buffer_type buffer,
size_t  pos 
)

Set the buffer's position.

Definition at line 158 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(), tsig_rr_find(), and tsig_rr_parse().

void buffer_skip ( buffer_type buffer,
ssize_t  count 
)
int buffer_skip_dname ( buffer_type buffer)

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

Definition at line 334 of file buffer.c.

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

Referenced by buffer_skip_rr(), and tsig_rr_parse().

int buffer_skip_rr ( buffer_type buffer,
unsigned  qrr 
)

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

Definition at line 366 of file buffer.c.

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

Referenced by tsig_rr_find().

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

Write to buffer.

Definition at line 578 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(), and tsig_rr_append().

void buffer_write_rdf ( buffer_type buffer,
ldns_rdf *  rdf 
)

Write rdf to buffer.

Definition at line 635 of file buffer.c.

References buffer_write(), and ods_log_assert.

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

int buffer_write_rr ( buffer_type buffer,
ldns_rr *  rr 
)
void buffer_write_u16 ( buffer_type buffer,
uint16_t  data 
)

Write uint16_t to buffer.

Definition at line 607 of file buffer.c.

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

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

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

Write uint32_t to buffer.

Definition at line 621 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

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

void buffer_write_u8 ( buffer_type buffer,
uint8_t  data 
)

Write uint8_t to buffer.

Definition at line 593 of file buffer.c.

References ods_log_assert, and buffer_struct::position.

Referenced by tsig_rr_append().