OpenDNSSEC-signer 2.1.13
|
#include "config.h"
#include "status.h"
#include "log.h"
#include <ldns/ldns.h>
#include <stdint.h>
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_type * | buffer_create (size_t capacity) |
void | buffer_clear (buffer_type *buffer) |
void | buffer_flip (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_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_cleanup (buffer_type *buffer) |
Variables | |
ods_lookup_table | ods_rcode_str [] |
#define MAX_RR_SIZE (MAXDOMAINLEN + sizeof(uint32_t) + 4*sizeof(uint16_t) + MAX_RDLENGTH) |
#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 PACKET_BUFFER_SIZE (MAX_PACKET_SIZE + MAX_RR_SIZE) |
#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)) |
typedef struct buffer_struct buffer_type |
|
extern |
Return a pointer to the data at the indicated position.
[in] | buffer | buffer |
[in] | at | indicated position |
Return a pointer to the data at the indicated position.
Definition at line 413 of file buffer.c.
References buffer_struct::data.
Referenced by buffer_begin(), buffer_current(), and tsig_rr_update().
|
extern |
Check if the buffer has enough bytes available.
[in] | buffer | buffer |
[in] | count | number of bytes that needs to be available |
Check if the buffer has enough bytes available.
Definition at line 487 of file buffer.c.
References 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().
|
extern |
Return a pointer to the data at the beginning of the buffer.
[in] | buffer | buffer |
Return a pointer to the data at the beginning of the buffer.
Definition at line 426 of file buffer.c.
References buffer_at().
Referenced by sock_handle_udp().
|
extern |
Get the buffer's capacity.
[in] | buffer | buffer |
Get the buffer's capacity.
Definition at line 401 of file buffer.c.
References buffer_struct::capacity.
Referenced by query_prepare(), and tcp_conn_read().
|
extern |
Clean up buffer.
[in] | buffer | buffer |
[in] | allocator | memory allocator |
Clean up buffer.
Definition at line 1145 of file buffer.c.
References buffer_struct::data.
Referenced by query_cleanup(), and xfrhandler_cleanup().
|
extern |
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.
[in] | buffer | buffer |
Clear the buffer and make it ready for writing.
Definition at line 99 of file buffer.c.
References buffer_struct::capacity, buffer_struct::limit, and buffer_struct::position.
Referenced by query_prepare(), query_reset(), sock_handle_tcp_write(), and tcp_conn_ready().
|
extern |
Create a new buffer with the specified capacity.
[in] | allocator | memory allocator |
[in] | capacity | specified capacity |
Create a new buffer with the specified capacity.
Definition at line 78 of file buffer.c.
References 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().
|
extern |
Return a pointer to the data at the buffer's current position.
[in] | buffer | buffer |
Return a pointer to the data at the buffer's current position.
Definition at line 438 of file buffer.c.
References buffer_at(), 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().
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.
[in] | buffer | buffer |
Flip the buffer and make it ready for reading.
Definition at line 112 of file buffer.c.
References buffer_struct::limit, and buffer_struct::position.
Referenced by notify_send(), sock_handle_tcp_read(), sock_handle_tcp_write(), and sock_handle_udp().
|
extern |
Get the buffer's limit.
[in] | buffer | buffer |
Get the buffer's limit.
Definition at line 373 of file buffer.c.
References buffer_struct::limit.
Referenced by buffer_read_dname(), query_prepare(), query_process(), and tsig_rr_update().
|
extern |
|
extern |
|
extern |
Get ANCOUNT from buffer.
[in] | buffer | buffer |
Get ANCOUNT from buffer.
Definition at line 1018 of file buffer.c.
Referenced by axfr(), ixfr(), soa_request(), and tsig_rr_find().
|
extern |
Get ARCOUNT from buffer.
[in] | buffer | buffer |
Get ARCOUNT from buffer.
Definition at line 1066 of file buffer.c.
Referenced by query_add_optional(), and tsig_rr_find().
|
extern |
|
extern |
|
extern |
Get flags from buffer.
[in] | buffer | buffer |
Get flags from buffer.
Definition at line 786 of file buffer.c.
Referenced by query_prepare().
|
extern |
Get query id from buffer.
[in] | buffer | buffer |
Get query id from buffer.
Definition at line 751 of file buffer.c.
Referenced by notify_send().
|
extern |
Make a new notify.
[in] | buffer | buffer |
[in] | qname | qname |
[in] | qclass | qclass |
Make a new notify.
Definition at line 1133 of file buffer.c.
Referenced by notify_send().
|
extern |
Get NSCOUNT from buffer.
[in] | buffer | buffer |
Get NSCOUNT from buffer.
Definition at line 1042 of file buffer.c.
Referenced by tsig_rr_find().
|
extern |
|
extern |
Get QDCOUNT from buffer.
[in] | buffer | buffer |
Get QDCOUNT from buffer.
Definition at line 994 of file buffer.c.
Referenced by tsig_rr_find().
|
extern |
Get QR bit from buffer.
[in] | buffer | buffer |
Get QR bit from buffer.
Definition at line 810 of file buffer.c.
References QR.
Referenced by query_process(), and tsig_rr_update().
|
extern |
Make a new query.
[in] | buffer | buffer |
[in] | qname | qname |
[in] | qtype | qtype |
[in] | qclass | qclass |
Make a new query.
Definition at line 1120 of file buffer.c.
References buffer_pkt_set_flags().
|
extern |
|
extern |
|
extern |
|
extern |
Set AA bit in buffer.
[in] | buffer | buffer |
Set AA bit in buffer.
Definition at line 882 of file buffer.c.
References AA_SET.
Referenced by axfr(), notify_send(), and soa_request().
|
extern |
Set ANCOUNT in buffer.
[in] | buffer | buffer |
[in] | count | ANCOUNT |
Set ANCOUNT in buffer.
Definition at line 1030 of file buffer.c.
References buffer_write_u16_at().
Referenced by axfr(), ixfr(), notify_send(), and soa_request().
|
extern |
Set ARCOUNT in buffer.
[in] | buffer | buffer |
[in] | count | ARCOUNT |
Set ARCOUNT in buffer.
Definition at line 1078 of file buffer.c.
References buffer_write_u16_at().
Referenced by axfr(), ixfr(), query_add_optional(), and soa_request().
|
extern |
Set flags in buffer.
[in] | buffer | buffer |
[in] | flags | flags |
Set flags in buffer.
Definition at line 798 of file buffer.c.
References buffer_write_u16_at().
Referenced by buffer_pkt_query(), and query_prepare().
|
extern |
Set NSCOUNT in buffer.
[in] | buffer | buffer |
[in] | count | NSCOUNT |
Set NSCOUNT in buffer.
Definition at line 1054 of file buffer.c.
References buffer_write_u16_at().
Referenced by axfr(), ixfr(), and soa_request().
|
extern |
Set OPCODE in buffer.
[in] | buffer | buffer |
[in] | opcode | OPCODE |
Set OPCODE in buffer.
Definition at line 858 of file buffer.c.
References OPCODE_SET.
|
extern |
Set QDCOUNT in buffer.
[in] | buffer | buffer |
[in] | count | QDCOUNT |
Set QDCOUNT in buffer.
Definition at line 1006 of file buffer.c.
References buffer_write_u16_at().
|
extern |
|
extern |
Set random query id in buffer.
[in] | buffer | buffer |
Set random query id in buffer.
Definition at line 772 of file buffer.c.
References buffer_write_u16_at().
|
extern |
|
extern |
|
extern |
Get the buffer's position.
[in] | buffer | buffer |
Get the buffer's position.
Definition at line 125 of file buffer.c.
References buffer_struct::position.
Referenced by axfr(), buffer_read_dname(), buffer_write_rr(), edns_rr_parse(), ixfr(), query_add_optional(), query_add_rr(), sock_handle_tcp_read(), tcp_conn_read(), tsig_rr_append(), tsig_rr_find(), and tsig_rr_parse().
|
extern |
Look up a descriptive text by each rcode.
[in] | rcode | rcode |
Look up a descriptive text by each rcode.
Definition at line 978 of file buffer.c.
References ods_rcode_str.
|
extern |
Read from buffer.
[in] | buffer | buffer |
[in] | data | read data |
[in] | count | number of bytes to read |
Read from buffer.
Definition at line 692 of file buffer.c.
References buffer_available(), buffer_struct::data, and buffer_struct::position.
Referenced by buffer_read_dname().
|
extern |
Read dname from buffer.
[in] | buffer | buffer |
[out] | dname | dname |
[in] | allow_pointers | allow pointer labels |
Read dname from buffer.
Definition at line 246 of file buffer.c.
References buffer_available(), buffer_current(), buffer_limit(), buffer_position(), buffer_read(), buffer_set_position(), buffer_skip(), MAX_PACKET_SIZE, and MAXDOMAINLEN.
|
extern |
Read uint16_t from buffer.
[in] | buffer | buffer |
Read uint16_t from buffer.
Definition at line 721 of file buffer.c.
References buffer_struct::position.
Referenced by buffer_skip_rr(), edns_rr_parse(), and tsig_rr_parse().
|
extern |
Read uint32_t from buffer.
[in] | buffer | buffer |
Read uint32_t from buffer.
Definition at line 736 of file buffer.c.
References buffer_struct::position.
Referenced by tsig_rr_parse().
|
extern |
Read uint8_t from buffer.
[in] | buffer | buffer |
Read uint8_t from buffer.
Definition at line 706 of file buffer.c.
References buffer_struct::position.
Referenced by buffer_skip_dname(), and edns_rr_parse().
|
extern |
The number of bytes remaining between the buffer's position and limit.
[in] | buffer | buffer |
The number of bytes remaining between the buffer's position and limit.
Definition at line 463 of file buffer.c.
References buffer_struct::position.
Referenced by query_process(), sock_handle_tcp_read(), sock_handle_tcp_write(), sock_handle_udp(), tcp_conn_read(), and tcp_conn_write().
|
extern |
Set the buffer's limit. If the buffer's position is greater than the new limit, the position is set to the limit.
[in] | buffer | buffer |
[in] | limit | limit |
Set the buffer's limit.
Definition at line 385 of file buffer.c.
References buffer_struct::limit, and buffer_struct::position.
Referenced by axfr(), ixfr(), query_prepare(), sock_handle_tcp_read(), and tcp_conn_read().
|
extern |
Set the buffer's position. The position must be less than or equal to the buffer's limit.
[in] | buffer | buffer |
[in] | pos | position |
Set the buffer's position.
Definition at line 137 of file buffer.c.
References 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().
|
extern |
Change the buffer's position. The position must not be moved behind the buffer's limit or before the beginning of the buffer.
[in] | buffer | buffer |
[in] | count | number of bytes to skip |
Change the buffer's position.
Definition at line 150 of file buffer.c.
References buffer_struct::position.
Referenced by buffer_read_dname(), buffer_skip_dname(), buffer_skip_rr(), buffer_write_rr(), edns_rr_parse(), query_add_rr(), sock_handle_tcp_read(), sock_handle_tcp_write(), sock_handle_udp(), tcp_conn_read(), tcp_conn_write(), tsig_rr_append(), and tsig_rr_parse().
|
extern |
Change the buffer's position so that one dname is skipped.
[in] | buffer | buffer |
Change the buffer's position so that one dname is skipped.
Definition at line 310 of file buffer.c.
References buffer_available(), buffer_read_u8(), and buffer_skip().
Referenced by buffer_skip_rr(), and tsig_rr_parse().
|
extern |
Change the buffer's position so that one RR is skipped.
[in] | buffer | buffer |
[in] | qrr | 1 if we skip RRs in the question section. |
Change the buffer's position so that one RR is skipped.
Definition at line 342 of file buffer.c.
References buffer_available(), buffer_read_u16(), buffer_skip(), and buffer_skip_dname().
Referenced by tsig_rr_find().
|
extern |
Write to buffer.
[in] | buffer | buffer |
[in] | data | data to write |
[in] | count | number of bytes to write |
Write to buffer.
Definition at line 538 of file buffer.c.
References buffer_available(), buffer_struct::data, and buffer_struct::position.
Referenced by buffer_write_rdf(), query_add_optional(), and tsig_rr_append().
|
extern |
Write rdf to buffer.
[in] | buffer | buffer |
[in] | rdf | data to write |
Write rdf to buffer.
Definition at line 591 of file buffer.c.
References buffer_write().
Referenced by buffer_write_rr(), query_add_rr(), and tsig_rr_append().
|
extern |
Write rr to buffer.
[in] | buffer | buffer |
[in] | rr | data to write |
Write rr to buffer.
Definition at line 605 of file buffer.c.
References buffer_available(), buffer_position(), buffer_set_position(), buffer_skip(), buffer_write_rdf(), buffer_write_u16(), buffer_write_u16_at(), and buffer_write_u32().
Referenced by notify_send().
|
extern |
Write uint16_t to buffer.
[in] | buffer | buffer |
[in] | data | data to write |
Write uint16_t to buffer.
Definition at line 565 of file buffer.c.
References buffer_write_u16_at(), and buffer_struct::position.
Referenced by buffer_write_rr(), query_add_rr(), and tsig_rr_append().
|
extern |
Write uint16_t to buffer at indicated position.
[in] | buffer | buffer |
[in] | at | indicated position |
[in] | data | data to write |
Write to buffer at indicated position.
Definition at line 512 of file buffer.c.
References buffer_struct::data.
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(), and tsig_rr_append().
|
extern |
Write uint32_t to buffer.
[in] | buffer | buffer |
[in] | data | data to write |
Write uint32_t to buffer.
Definition at line 578 of file buffer.c.
References buffer_struct::position.
Referenced by buffer_write_rr(), query_add_rr(), and tsig_rr_append().
|
extern |
Write uint8_t to buffer.
[in] | buffer | buffer |
[in] | data | data to write |
Write uint8_t to buffer.
Definition at line 552 of file buffer.c.
References buffer_struct::position.
Referenced by tsig_rr_append().
|
extern |
Definition at line 57 of file buffer.c.
Referenced by buffer_rcode2str().