Ripples 1.0
High Performant Software Architecture For Transaction Processing
Loading...
Searching...
No Matches
query.h
Go to the documentation of this file.
1
42#ifndef QUERY_H
43#define QUERY_H
44
45#include <stdbool.h>
46#include <sys/socket.h>
47#include <time.h>
48
49#include "channel.h"
50#include "config.h"
51#include "constants.h"
52#include "metrics.h"
53#include "rip_ns_utils.h"
54#include "rr_record.h"
55
56
58typedef struct edns_client_subnet_s {
60 unsigned char *edns_cs_raw_buf;
61
66
71
73 uint16_t family;
74
76 struct sockaddr_storage ip;
77
81 uint8_t source_mask;
82
87 uint8_t scope_mask;
89
91typedef struct edns_s {
93 unsigned char *edns_raw_buf;
94
99
104
107
109 uint8_t version;
110
112 uint16_t udp_resp_len;
113
115 bool dnssec;
116
120
122typedef struct query_s {
124 uint8_t protocol;
125
127 struct sockaddr_storage *client_ip;
128
130 struct sockaddr_storage *local_ip;
131
132 /*** REQUEST ***/
134 unsigned char *request_buffer;
135
138
144
149
156 unsigned char *query_label;
157
160
163
168 uint16_t query_q_type;
169
175
178
179 /*** RESPONSE ***/
186 unsigned char *response_buffer;
187
190
197
205
208
211
216
219
224
227
229 struct timespec start_time;
230
232 struct timespec end_time;
233
266
271
275
276
277void query_init(query_t *q, config_t *cfg, uint8_t protocol);
278void query_reset(query_t *q);
279void query_clean(query_t *q);
281
283int query_parse_edns_ext(query_t *q, unsigned char *buf, unsigned char *eobuf);
284int query_parse_request_rr_additional_edns(query_t *q, unsigned char *ptr);
286void query_parse(query_t *q);
287
288void query_resolve(query_t *q);
289
290int query_pack_edns(uint8_t *buf, uint16_t buf_len, edns_t *edns);
291int query_pack_rr(const unsigned char *name, rr_record_t *rr, unsigned char *buf, uint16_t buf_len,
292 const unsigned char **dnptrs, const unsigned char **lastdnptr);
294
313typedef struct query_log_s {
315 size_t buf_size;
316
318 char *a_buf;
319
321 size_t a_buf_len;
322
324 char *b_buf;
326 size_t b_buf_len;
327
329 char *buf;
330
332 size_t buf_len;
334
353
354int query_log(char *buf, size_t buf_len, query_t *q);
356
357void * query_log_loop(void *args);
358
359
360void query_report_metrics(query_t *, metrics_t *metrics);
361
362#endif /* End of QUERY_H */
363
#define ERR_MSG_LENGTH
Definition constants.h:228
#define DNS_RESPONSE_COMPRESSED_NAMES_MAX
Definition constants.h:238
#define RIP_NS_RESP_MAX_NS
Definition rip_ns_utils.h:73
#define RIP_NS_RESP_MAX_ANSW
Definition rip_ns_utils.h:70
#define RIP_NS_RESP_MAX_ADDL
Definition rip_ns_utils.h:78
int query_parse_request_rr_question(query_t *q)
Definition query_parse.c:342
void query_resolve(query_t *q)
Definition query_resolve.c:41
struct edns_client_subnet_s edns_client_subnet_t
int query_pack_rr(const unsigned char *name, rr_record_t *rr, unsigned char *buf, uint16_t buf_len, const unsigned char **dnptrs, const unsigned char **lastdnptr)
Definition query_pack.c:138
int query_parse_request_rr_additional_edns(query_t *q, unsigned char *ptr)
Definition query_parse.c:194
int query_parse_edns_ext_cs(edns_client_subnet_t *cs)
Definition query_parse.c:48
int query_tcp_response_buffer_increase(query_t *q)
Definition query.c:144
void query_reset(query_t *q)
Definition query.c:86
void query_log_rotate(query_log_t *query_log)
Definition query_log.c:40
struct query_log_loop_args_s query_log_loop_args_t
struct query_s query_t
void query_parse(query_t *q)
Definition query_parse.c:385
void * query_log_loop(void *args)
Definition query_log_loop.c:84
int query_response_pack(query_t *q)
Definition query_pack.c:190
struct query_log_s query_log_t
int query_log(char *buf, size_t buf_len, query_t *q)
Definition query_log.c:97
int query_pack_edns(uint8_t *buf, uint16_t buf_len, edns_t *edns)
Definition query_pack.c:48
int query_parse_edns_ext(query_t *q, unsigned char *buf, unsigned char *eobuf)
Definition query_parse.c:147
struct edns_s edns_t
void query_init(query_t *q, config_t *cfg, uint8_t protocol)
Definition query.c:39
void query_report_metrics(query_t *, metrics_t *metrics)
Definition query_report_metrics.c:37
void query_clean(query_t *q)
Definition query.c:120
Definition channel.h:101
Definition channel.h:145
Definition config.h:46
Definition query.h:58
uint8_t scope_mask
Definition query.h:87
bool edns_cs_valid
Definition query.h:70
struct sockaddr_storage ip
Definition query.h:76
uint16_t edns_cs_raw_buf_len
Definition query.h:65
uint16_t family
Definition query.h:73
unsigned char * edns_cs_raw_buf
Definition query.h:60
uint8_t source_mask
Definition query.h:81
Definition query.h:91
uint8_t extended_rcode
Definition query.h:106
bool edns_valid
Definition query.h:103
edns_client_subnet_t client_subnet
Definition query.h:118
bool dnssec
Definition query.h:115
uint16_t edns_raw_buf_len
Definition query.h:98
uint8_t version
Definition query.h:109
unsigned char * edns_raw_buf
Definition query.h:93
uint16_t udp_resp_len
Definition query.h:112
Definition metrics.h:41
Definition query.h:336
metrics_t * metrics
Definition query.h:350
config_t * cfg
Definition query.h:338
channel_log_t * app_log_channel
Definition query.h:347
size_t query_log_channel_count
Definition query.h:344
channel_bss_t * query_log_channels
Definition query.h:341
Definition query.h:313
char * buf
Definition query.h:329
char * b_buf
Definition query.h:324
size_t buf_len
Definition query.h:332
char * a_buf
Definition query.h:318
size_t buf_size
Definition query.h:315
size_t a_buf_len
Definition query.h:321
size_t b_buf_len
Definition query.h:326
Definition query.h:122
uint16_t query_label_len
Definition query.h:162
size_t request_buffer_size
Definition query.h:137
struct sockaddr_storage * client_ip
Definition query.h:127
uint8_t answer_section_count
Definition query.h:210
struct sockaddr_storage * local_ip
Definition query.h:130
rr_record_t * answer_section[RIP_NS_RESP_MAX_ANSW]
Definition query.h:207
unsigned char * request_buffer
Definition query.h:134
unsigned char * query_label
Definition query.h:156
const unsigned char * dnptrs[DNS_RESPONSE_COMPRESSED_NAMES_MAX]
Definition query.h:273
uint8_t protocol
Definition query.h:124
unsigned char * response_buffer
Definition query.h:186
char error_message[ERR_MSG_LENGTH]
Definition query.h:270
struct timespec end_time
Definition query.h:232
rip_ns_header_t * response_hdr
Definition query.h:204
rr_record_t * additional_section[RIP_NS_RESP_MAX_ADDL]
Definition query.h:223
uint16_t query_q_type
Definition query.h:168
rip_ns_header_t * request_hdr
Definition query.h:148
size_t response_buffer_size
Definition query.h:189
size_t response_buffer_len
Definition query.h:196
edns_t edns
Definition query.h:177
int end_code
Definition query.h:265
uint16_t query_label_size
Definition query.h:159
uint8_t authority_section_count
Definition query.h:218
rr_record_t * authority_section[RIP_NS_RESP_MAX_NS]
Definition query.h:215
uint16_t query_q_class
Definition query.h:174
size_t request_buffer_len
Definition query.h:143
uint8_t additional_section_count
Definition query.h:226
struct timespec start_time
Definition query.h:229
Definition rip_ns_utils.h:255
Definition rr_record.h:35