edns_strings
if(!edns_strings_apply_cfg(ctx->env->edns_strings, cfg))
ctx->env->edns_strings = edns_strings_create();
if(!ctx->env->edns_strings) {
edns_strings_delete(ctx->env->edns_strings);
edns_strings_delete(ctx->env->edns_strings);
edns_strings_delete(ctx->env->edns_strings);
&env->edns_strings->client_strings, addr, addrlen))) {
env->edns_strings->client_string_opcode,
regional_free_all(edns_strings->region);
addr_tree_init(&edns_strings->client_strings);
if(!edns_strings_client_insert(edns_strings, &addr, addrlen,
edns_strings->client_string_opcode = config->edns_client_string_opcode;
addr_tree_init_parents(&edns_strings->client_strings);
edns_strings_get_mem(struct edns_strings* edns_strings)
if(!edns_strings) return 0;
return regional_get_mem(edns_strings->region) + sizeof(*edns_strings);
edns_strings_swap_tree(struct edns_strings* edns_strings,
struct edns_strings* data)
rbtree_type tree = edns_strings->client_strings;
uint16_t opcode = edns_strings->client_string_opcode;
struct regional* region = edns_strings->region;
edns_strings->client_strings = data->client_strings;
edns_strings->client_string_opcode = data->client_string_opcode;
edns_strings->region = data->region;
struct edns_strings* edns_strings_create(void)
struct edns_strings* edns_strings = calloc(1,
sizeof(struct edns_strings));
if(!edns_strings)
if(!(edns_strings->region = regional_create())) {
edns_strings_delete(edns_strings);
return edns_strings;
void edns_strings_delete(struct edns_strings* edns_strings)
if(!edns_strings)
regional_destroy(edns_strings->region);
free(edns_strings);
edns_strings_client_insert(struct edns_strings* edns_strings,
struct edns_string_addr* esa = regional_alloc_zero(edns_strings->region,
esa->string = regional_alloc_init(edns_strings->region, string,
if(!addr_tree_insert(&edns_strings->client_strings, &esa->node, addr,
int edns_strings_apply_cfg(struct edns_strings* edns_strings,
struct edns_strings* edns_strings_create(void);
void edns_strings_delete(struct edns_strings* edns_strings);
int edns_strings_apply_cfg(struct edns_strings* edns_strings,
size_t edns_strings_get_mem(struct edns_strings* edns_strings);
void edns_strings_swap_tree(struct edns_strings* edns_strings,
struct edns_strings* data);
struct edns_strings* edns_strings;
if(!(daemon->env->edns_strings = edns_strings_create())) {
if(!edns_strings_apply_cfg(daemon->env->edns_strings, daemon->cfg))
edns_strings_delete(daemon->env->edns_strings);
struct edns_strings* edns_strings;
edns_strings_delete(ct->edns_strings);
mem += edns_strings_get_mem(ct->edns_strings);
if(!(ct->edns_strings = edns_strings_create())) {
if(!edns_strings_apply_cfg(ct->edns_strings, newcfg)) {
edns_strings_swap_tree(env->edns_strings, ct->edns_strings);
if(!edns_strings_apply_cfg(ctx->env->edns_strings, cfg))
ctx->env->edns_strings = edns_strings_create();
if(!ctx->env->edns_strings) {
edns_strings_delete(ctx->env->edns_strings);
edns_strings_delete(ctx->env->edns_strings);
edns_strings_delete(ctx->env->edns_strings);
&env->edns_strings->client_strings, addr, addrlen))) {
env->edns_strings->client_string_opcode,
&env->edns_strings->client_strings,
env->edns_strings->client_string_opcode,
regional_free_all(edns_strings->region);
addr_tree_init(&edns_strings->client_strings);
if(!edns_strings_client_insert(edns_strings, &addr, addrlen,
edns_strings->client_string_opcode = config->edns_client_string_opcode;
addr_tree_init_parents(&edns_strings->client_strings);
edns_strings_get_mem(struct edns_strings* edns_strings)
if(!edns_strings) return 0;
return regional_get_mem(edns_strings->region) + sizeof(*edns_strings);
edns_strings_swap_tree(struct edns_strings* edns_strings,
struct edns_strings* data)
rbtree_type tree = edns_strings->client_strings;
uint16_t opcode = edns_strings->client_string_opcode;
struct regional* region = edns_strings->region;
edns_strings->client_strings = data->client_strings;
edns_strings->client_string_opcode = data->client_string_opcode;
edns_strings->region = data->region;
struct edns_strings* edns_strings_create(void)
struct edns_strings* edns_strings = calloc(1,
sizeof(struct edns_strings));
if(!edns_strings)
if(!(edns_strings->region = regional_create())) {
edns_strings_delete(edns_strings);
return edns_strings;
void edns_strings_delete(struct edns_strings* edns_strings)
if(!edns_strings)
regional_destroy(edns_strings->region);
free(edns_strings);
edns_strings_client_insert(struct edns_strings* edns_strings,
struct edns_string_addr* esa = regional_alloc_zero(edns_strings->region,
esa->string = regional_alloc_init(edns_strings->region, string,
if(!addr_tree_insert(&edns_strings->client_strings, &esa->node, addr,
int edns_strings_apply_cfg(struct edns_strings* edns_strings,
struct edns_strings* edns_strings_create(void);
void edns_strings_delete(struct edns_strings* edns_strings);
int edns_strings_apply_cfg(struct edns_strings* edns_strings,
size_t edns_strings_get_mem(struct edns_strings* edns_strings);
void edns_strings_swap_tree(struct edns_strings* edns_strings,
struct edns_strings* data);
struct edns_strings* edns_strings;