static ngx_int_t ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename) { off_t size; u_char *p; uint32_t hash; ngx_buf_t *buf; ngx_str_node_t *sn; ngx_conf_dump_t *cd; hash = ngx_crc32_long(filename->data, filename->len); sn = ngx_str_rbtree_lookup(&cf->cycle->config_dump_rbtree, filename, hash); if (sn) { cf->conf_file->dump = NULL; return NGX_OK; } p = ngx_pstrdup(cf->cycle->pool, filename); if (p == NULL) { return NGX_ERROR; } cd = ngx_array_push(&cf->cycle->config_dump); if (cd == NULL) { return NGX_ERROR; } size = ngx_file_size(&cf->conf_file->file.info); buf = ngx_create_temp_buf(cf->cycle->pool, (size_t) size); if (buf == NULL) { return NGX_ERROR; } cd->name.data = p; cd->name.len = filename->len; cd->buffer = buf; cf->conf_file->dump = buf; sn = ngx_palloc(cf->temp_pool, sizeof(ngx_str_node_t)); if (sn == NULL) { return NGX_ERROR; } sn->node.key = hash; sn->str = cd->name; ngx_rbtree_insert(&cf->cycle->config_dump_rbtree, &sn->node); return NGX_OK; }
ngx_inline ngx_array_t * yy_sec_waf_re_cache_get_value(ngx_rbtree_t *rbtree, ngx_str_t *name) { uint32_t hash; re_cache_node_t *cache_node; hash = ngx_crc32_long(name->data, name->len); cache_node = (re_cache_node_t *) ngx_str_rbtree_lookup(rbtree, name, hash); if (cache_node != NULL) { return cache_node->value; } return NULL; }
ngx_int_t yy_sec_waf_re_cache_set_value(ngx_pool_t *pool, ngx_str_t *name, ngx_array_t *value, ngx_rbtree_t *rbtree) { uint32_t hash; ngx_str_t *val; re_cache_node_t *cache_node; hash = ngx_crc32_long(name->data, name->len); cache_node = (re_cache_node_t *) ngx_str_rbtree_lookup(rbtree, name, hash); if (cache_node != NULL) { return NGX_OK; } cache_node = ngx_palloc(pool, sizeof(re_cache_node_t)); if (cache_node == NULL) { return NGX_ERROR; } val = ngx_palloc(pool, sizeof(ngx_str_t)); if (value == NULL) { return NGX_ERROR; } val->len = value->len; val->data = ngx_pstrdup(pool, value); if (val->data == NULL) { return NGX_ERROR; } cache_node->sn.node.key = hash; cache_node->sn.str.len = name->len; cache_node->sn.str.data = name->data; cache_node->value = value; ngx_rbtree_insert(rbtree, &cache_node->sn.node); return NGX_OK; }