This file contains the validator context structure. More...
#include "config.h"#include "libunbound/context.h"#include "util/module.h"#include "util/config_file.h"#include "util/net_help.h"#include "services/modstack.h"#include "services/localzone.h"#include "services/cache/rrset.h"#include "services/cache/infra.h"#include "services/authzone.h"#include "services/listen_dnsport.h"#include "util/data/msgreply.h"#include "util/storage/slabhash.h"#include "util/edns.h"#include "sldns/sbuffer.h"#include "iterator/iter_fwd.h"#include "iterator/iter_hints.h"Macros | |
| #define | NUM_ID_TRIES 100000 |
| How many times to try to find an unused query-id-number for async. | |
Functions | |
| int | context_finalize (struct ub_ctx *ctx) |
| finalize a context. | |
| int | context_query_cmp (const void *a, const void *b) |
| compare two ctx_query elements | |
| void | context_query_delete (struct ctx_query *q) |
| delete context query | |
| static int | find_id (struct ub_ctx *ctx, int *id) |
| find next useful id number of 0 on error | |
| struct ctx_query * | context_new (struct ub_ctx *ctx, const char *name, int rrtype, int rrclass, ub_callback_type cb, ub_event_callback_type cb_event, void *cbarg) |
| Create new query in context, add to querynum list. | |
| struct alloc_cache * | context_obtain_alloc (struct ub_ctx *ctx, int locking) |
| Get a new alloc. | |
| void | context_release_alloc (struct ub_ctx *ctx, struct alloc_cache *alloc, int locking) |
| Release an alloc. | |
| uint8_t * | context_serialize_new_query (struct ctx_query *q, uint32_t *len) |
| Serialize a context query that questions data. | |
| struct ctx_query * | context_deserialize_new_query (struct ub_ctx *ctx, uint8_t *p, uint32_t len) |
| Deserialize a new_query buffer. | |
| struct ctx_query * | context_lookup_new_query (struct ub_ctx *ctx, uint8_t *p, uint32_t len) |
| Lookup query from new_query buffer. | |
| uint8_t * | context_serialize_answer (struct ctx_query *q, int err, sldns_buffer *pkt, uint32_t *len) |
| Serialize a context_query result to hand back to user. | |
| struct ctx_query * | context_deserialize_answer (struct ub_ctx *ctx, uint8_t *p, uint32_t len, int *err) |
| Deserialize an answer buffer. | |
| uint8_t * | context_serialize_cancel (struct ctx_query *q, uint32_t *len) |
| Serialize a query cancellation. | |
| struct ctx_query * | context_deserialize_cancel (struct ub_ctx *ctx, uint8_t *p, uint32_t len) |
| Deserialize a cancel buffer. | |
| uint8_t * | context_serialize_quit (uint32_t *len) |
| Serialize a 'quit' command. | |
| enum ub_ctx_cmd | context_serial_getcmd (uint8_t *p, uint32_t len) |
| Obtain command code from serialized buffer. | |
This file contains the validator context structure.
| int context_finalize | ( | struct ub_ctx * | ctx | ) |
finalize a context.
| ctx | context to finalize. creates shared data. |
References module_env::alloc, module_env::auth_zones, auth_zones_apply_cfg(), module_env::cfg, cfg_apply_local_port_policy(), config_apply(), ctx_logfile_overridden, module_env::edns_strings, edns_strings_apply_cfg(), ub_ctx::env, ub_ctx::finalized, forwards_apply_cfg(), forwards_create(), module_env::fwds, HASH_DEFAULT_STARTARRAY, module_env::hints, hints_apply_cfg(), hints_create(), infra_adjust(), module_env::infra_cache, listen_setup_locks(), ub_ctx::local_zones, local_zones_apply_cfg(), local_zones_create(), log_edns_known_options(), log_file(), log_init(), ub_ctx::log_out, config_file::logfile, ub_ctx::logfile_override, ub_ctx::mods, modstack_call_init(), modstack_call_startup(), config_file::module_conf, module_env::msg_cache, config_file::msg_cache_size, config_file::msg_cache_slabs, msgreply_sizefunc(), ub_ctx::pipe_pid, query_info_compare(), module_env::rrset_cache, rrset_cache_adjust(), slabhash_create(), slabhash_delete(), slabhash_is_size(), UB_INITFAIL, UB_NOERROR, UB_NOMEM, config_file::use_syslog, VERB_ALGO, config_file::verbosity, and verbosity.
Referenced by ub_ctx_finalize(), ub_resolve(), ub_resolve_async(), and ub_resolve_event().
| void context_query_delete | ( | struct ctx_query * | q | ) |
delete context query
| q | query to delete, including message packet and prealloc result |
References ctx_query::msg, ctx_query::res, and ub_resolve_free().
Referenced by add_bg_result(), delq(), libworker_bg_done_cb(), libworker_event_done_cb(), process_answer_detail(), ub_cancel(), ub_resolve(), and ub_resolve_async().
| struct ctx_query * context_new | ( | struct ub_ctx * | ctx, |
| const char * | name, | ||
| int | rrtype, | ||
| int | rrclass, | ||
| ub_callback_type | cb, | ||
| ub_event_callback_type | cb_event, | ||
| void * | cbarg | ||
| ) |
Create new query in context, add to querynum list.
| ctx | context |
| name | query name |
| rrtype | type |
| rrclass | class |
| cb | callback for async, or NULL for sync. |
| cb_event | event callback for async, or NULL for sync. |
| cbarg | user arg for async queries. |
References ctx_query::async, ctx_query::cb, ctx_query::cb_arg, ctx_query::cb_event, ub_ctx::cfglock, find_id(), rbnode_type::key, ctx_query::node, ub_ctx::num_async, ub_result::qclass, ub_result::qname, ub_result::qtype, ub_ctx::queries, ctx_query::querynum, rbtree_insert(), and ctx_query::res.
Referenced by ub_resolve(), ub_resolve_async(), and ub_resolve_event().
| struct alloc_cache * context_obtain_alloc | ( | struct ub_ctx * | ctx, |
| int | locking | ||
| ) |
Get a new alloc.
Creates a new one or uses a cached one.
| ctx | context |
| locking | if true, cfglock is locked while getting alloc. |
References alloc_init(), ub_ctx::alloc_list, ub_ctx::cfglock, alloc_cache::super, ub_ctx::superalloc, and ub_ctx::thr_next_num.
Referenced by libworker_setup().
| void context_release_alloc | ( | struct ub_ctx * | ctx, |
| struct alloc_cache * | alloc, | ||
| int | locking | ||
| ) |
Release an alloc.
Puts it into the cache.
| ctx | context |
| locking | if true, cfglock is locked while releasing alloc. |
| alloc | alloc to relinquish. |
References ub_ctx::alloc_list, ub_ctx::cfglock, and alloc_cache::super.
Referenced by libworker_delete_env().
| uint8_t * context_serialize_new_query | ( | struct ctx_query * | q, |
| uint32_t * | len | ||
| ) |
Serialize a context query that questions data.
This serializes the query name, type, ... As well as command code 'new_query'.
| q | context query |
| len | the length of the allocation is returned. |
References ub_result::qclass, ub_result::qname, ub_result::qtype, ctx_query::querynum, ctx_query::res, and UB_LIBCMD_NEWQUERY.
Referenced by ub_resolve_async().
Deserialize a new_query buffer.
| ctx | context |
| p | buffer serialized. |
| len | length of buffer. |
add to query list
References ctx_query::async, rbnode_type::key, log_assert, ctx_query::node, ub_ctx::num_async, ub_result::qclass, ub_result::qname, ub_result::qtype, ub_ctx::queries, ctx_query::querynum, rbtree_insert(), ctx_query::res, and UB_LIBCMD_NEWQUERY.
Referenced by handle_newq().
Lookup query from new_query buffer.
| ctx | context |
| p | buffer serialized. |
| len | length of buffer. |
References ctx_query::async, log_assert, ub_ctx::queries, ctx_query::querynum, rbtree_search(), and UB_LIBCMD_NEWQUERY.
Referenced by handle_newq().
| uint8_t * context_serialize_answer | ( | struct ctx_query * | q, |
| int | err, | ||
| struct sldns_buffer * | pkt, | ||
| uint32_t * | len | ||
| ) |
Serialize a context_query result to hand back to user.
This serializes the query name, type, ..., and result. As well as command code 'answer'.
| q | context query |
| err | error code to pass to client. |
| pkt | the packet to add, can be NULL. |
| len | the length of the allocation is returned. |
References ctx_query::msg_security, ctx_query::querynum, ctx_query::res, sldns_buffer_begin(), sldns_buffer_remaining(), UB_LIBCMD_ANSWER, ub_result::was_ratelimited, and ub_result::why_bogus.
Referenced by add_bg_result().
| struct ctx_query * context_deserialize_answer | ( | struct ub_ctx * | ctx, |
| uint8_t * | p, | ||
| uint32_t | len, | ||
| int * | err | ||
| ) |
Deserialize an answer buffer.
| ctx | context |
| p | buffer serialized. |
| len | length of buffer. |
| err | error code to be returned to client is passed. |
References log_assert, memdup(), ctx_query::msg, ctx_query::msg_len, ctx_query::msg_security, ub_ctx::queries, rbtree_search(), ctx_query::res, UB_LIBCMD_ANSWER, UB_NOMEM, ub_result::was_ratelimited, and ub_result::why_bogus.
Referenced by process_answer_detail().
| uint8_t * context_serialize_cancel | ( | struct ctx_query * | q, |
| uint32_t * | len | ||
| ) |
Serialize a query cancellation.
Serializes query async id as well as command code 'cancel'
| q | context query |
| len | the length of the allocation is returned. |
References ctx_query::querynum, and UB_LIBCMD_CANCEL.
Referenced by ub_cancel().
Deserialize a cancel buffer.
| ctx | context |
| p | buffer serialized. |
| len | length of buffer. |
References log_assert, ub_ctx::queries, rbtree_search(), and UB_LIBCMD_CANCEL.
Referenced by handle_cancel().
| uint8_t * context_serialize_quit | ( | uint32_t * | len | ) |
Serialize a 'quit' command.
| len | the length of the allocation is returned. |
References UB_LIBCMD_QUIT.
| enum ub_ctx_cmd context_serial_getcmd | ( | uint8_t * | p, |
| uint32_t | len | ||
| ) |
Obtain command code from serialized buffer.
| p | buffer serialized. |
| len | length of buffer. |
References UB_LIBCMD_QUIT.
Referenced by libworker_do_cmd(), process_answer_detail(), and ub_stop_bg().