unbound: libunbound/context.h File Reference

unbound 0.1

Data Structures | Enumerations | Functions | Variables
context.h File Reference

This file contains the validator context structure. More...

`#include "util/locks.h"`
`#include "util/alloc.h"`
`#include "util/rbtree.h"`
`#include "services/modstack.h"`
`#include "libunbound/unbound.h"`
`#include "libunbound/unbound-event.h"`
`#include "util/data/packed_rrset.h"`

## Data Structures
struct | ub_ctx
| The context structure. More...
struct | ctx_query
| The queries outstanding for the libunbound resolver. More...

## Enumerations
enum | ub_ctx_cmd { UB_LIBCMD_QUIT = 0 , UB_LIBCMD_NEWQUERY , UB_LIBCMD_CANCEL , UB_LIBCMD_ANSWER }
| Command codes for libunbound pipe. More...

## 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
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.
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.
uint8_t * | context_serialize_cancel (struct ctx_query *q, uint32_t *len)
| Serialize a query cancellation.
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.
struct ctx_query * | context_lookup_new_query (struct ub_ctx *ctx, uint8_t *p, uint32_t len)
| Lookup query from new_query buffer.
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_deserialize_answer (struct ub_ctx *ctx, uint8_t *p, uint32_t len, int *err)
| Deserialize an answer buffer.
struct ctx_query * | context_deserialize_cancel (struct ub_ctx *ctx, uint8_t *p, uint32_t len)
| Deserialize a cancel buffer.

## Variables
int | ctx_logfile_overridden
| store that the logfile has a debug override

## Detailed Description

This file contains the validator context structure.

## Enumeration Type Documentation

## ◆ ub_ctx_cmd

enum ub_ctx_cmd

Command codes for libunbound pipe.

Serialization looks like this: o length (of remainder) uint32. o uint32 command code. o per command format.

Enumerator
UB_LIBCMD_QUIT | QUIT.
UB_LIBCMD_NEWQUERY | New query, sent to bg worker.
UB_LIBCMD_CANCEL | Cancel query, sent to bg worker.
UB_LIBCMD_ANSWER | Query result, originates from bg worker.

## Function Documentation

## ◆ context_finalize()

int context_finalize | ( | struct ub_ctx * | ctx | ) |

finalize a context.

Parameters

  ctx | context to finalize. creates shared data.

Returns
  0 if OK, or errcode.

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().

## ◆ context_query_delete()

void context_query_delete | ( | struct ctx_query * | q | ) |

delete context query

Parameters

  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().

## ◆ context_new()

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.

Parameters

  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.

Returns
  new ctx_query or NULL for malloc failure.

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().

## ◆ context_obtain_alloc()

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.

Parameters

  ctx | context
  locking | if true, cfglock is locked while getting alloc.

Returns
  an alloc, or NULL on mem error.

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().

## ◆ context_release_alloc()

void context_release_alloc | ( | struct ub_ctx * | ctx,
|  | struct alloc_cache * | alloc,
|  | int | locking )

Release an alloc.

Puts it into the cache.

Parameters

  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().

## ◆ context_serialize_new_query()

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'.

Parameters

  q | context query
  len | the length of the allocation is returned.

Returns
  : an alloc, or NULL on mem error.

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().

## ◆ context_serialize_answer()

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'.

Parameters

  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.

Returns
  : an alloc, or NULL on mem error.

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().

## ◆ context_serialize_cancel()

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'

Parameters

  q | context query
  len | the length of the allocation is returned.

Returns
  : an alloc, or NULL on mem error.

References ctx_query::querynum, and UB_LIBCMD_CANCEL.

Referenced by ub_cancel().

## ◆ context_serialize_quit()

uint8_t * context_serialize_quit | ( | uint32_t * | len | ) |

Serialize a 'quit' command.

Parameters

  len | the length of the allocation is returned.

Returns
  : an alloc, or NULL on mem error.

References UB_LIBCMD_QUIT.

## ◆ context_serial_getcmd()

enum ub_ctx_cmd context_serial_getcmd | ( | uint8_t * | p,
|  | uint32_t | len )

Obtain command code from serialized buffer.

Parameters

  p | buffer serialized.
  len | length of buffer.

Returns
  command code or QUIT on error.

References UB_LIBCMD_QUIT.

Referenced by libworker_do_cmd(), process_answer_detail(), and ub_stop_bg().

## ◆ context_lookup_new_query()

struct ctx_query * context_lookup_new_query | ( | struct ub_ctx * | ctx,
|  | uint8_t * | p,
|  | uint32_t | len )

Lookup query from new_query buffer.

Parameters

  ctx | context
  p | buffer serialized.
  len | length of buffer.

Returns
  looked up ctx_query or NULL for malloc failure.

References ctx_query::async, log_assert, ub_ctx::queries, ctx_query::querynum, rbtree_search(), and UB_LIBCMD_NEWQUERY.

Referenced by handle_newq().

## ◆ context_deserialize_new_query()

struct ctx_query * context_deserialize_new_query | ( | struct ub_ctx * | ctx,
|  | uint8_t * | p,
|  | uint32_t | len )

Deserialize a new_query buffer.

Parameters

  ctx | context
  p | buffer serialized.
  len | length of buffer.

Returns
  new ctx_query or NULL for malloc failure.

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().

## ◆ context_deserialize_answer()

struct ctx_query * context_deserialize_answer | ( | struct ub_ctx * | ctx,
|  | uint8_t * | p,
|  | uint32_t | len,
|  | int * | err )

Deserialize an answer buffer.

Parameters

  ctx | context
  p | buffer serialized.
  len | length of buffer.
  err | error code to be returned to client is passed.

Returns
  ctx_query with answer added or NULL for malloc failure.

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().

## ◆ context_deserialize_cancel()

struct ctx_query * context_deserialize_cancel | ( | struct ub_ctx * | ctx,
|  | uint8_t * | p,
|  | uint32_t | len )

Deserialize a cancel buffer.

Parameters

  ctx | context
  p | buffer serialized.
  len | length of buffer.

Returns
  ctx_query to cancel or NULL for failure.

References log_assert, ub_ctx::queries, rbtree_search(), and UB_LIBCMD_CANCEL.

Referenced by handle_cancel().