aboutsummaryrefslogtreecommitdiff
path: root/external/unbound/libunbound/context.h
diff options
context:
space:
mode:
Diffstat (limited to 'external/unbound/libunbound/context.h')
-rw-r--r--external/unbound/libunbound/context.h352
1 files changed, 0 insertions, 352 deletions
diff --git a/external/unbound/libunbound/context.h b/external/unbound/libunbound/context.h
deleted file mode 100644
index 1761c4d87..000000000
--- a/external/unbound/libunbound/context.h
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * libunbound/context.h - validating context for unbound internal use
- *
- * Copyright (c) 2007, NLnet Labs. All rights reserved.
- *
- * This software is open source.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * Neither the name of the NLNET LABS nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/**
- * \file
- *
- * This file contains the validator context structure.
- */
-#ifndef LIBUNBOUND_CONTEXT_H
-#define LIBUNBOUND_CONTEXT_H
-#include "util/locks.h"
-#include "util/alloc.h"
-#include "util/rbtree.h"
-#include "services/modstack.h"
-#include "libunbound/unbound.h"
-#include "util/data/packed_rrset.h"
-struct libworker;
-struct tube;
-struct sldns_buffer;
-struct ub_event_base;
-
-/**
- * The context structure
- *
- * Contains two pipes for async service
- * qq : write queries to the async service pid/tid.
- * rr : read results from the async service pid/tid.
- */
-struct ub_ctx {
- /* --- pipes --- */
- /** mutex on query write pipe */
- lock_basic_type qqpipe_lock;
- /** the query write pipe */
- struct tube* qq_pipe;
- /** mutex on result read pipe */
- lock_basic_type rrpipe_lock;
- /** the result read pipe */
- struct tube* rr_pipe;
-
- /* --- shared data --- */
- /** mutex for access to env.cfg, finalized and dothread */
- lock_basic_type cfglock;
- /**
- * The context has been finalized
- * This is after config when the first resolve is done.
- * The modules are inited (module-init()) and shared caches created.
- */
- int finalized;
-
- /** is bg worker created yet ? */
- int created_bg;
- /** pid of bg worker process */
- pid_t bg_pid;
- /** tid of bg worker thread */
- ub_thread_type bg_tid;
-
- /** do threading (instead of forking) for async resolution */
- int dothread;
- /** next thread number for new threads */
- int thr_next_num;
- /** if logfile is overriden */
- int logfile_override;
- /** what logfile to use instead */
- FILE* log_out;
- /**
- * List of alloc-cache-id points per threadnum for notinuse threads.
- * Simply the entire struct alloc_cache with the 'super' member used
- * to link a simply linked list. Reset super member to the superalloc
- * before use.
- */
- struct alloc_cache* alloc_list;
-
- /** shared caches, and so on */
- struct alloc_cache superalloc;
- /** module env master value */
- struct module_env* env;
- /** module stack */
- struct module_stack mods;
- /** local authority zones */
- struct local_zones* local_zones;
- /** random state used to seed new random state structures */
- struct ub_randstate* seed_rnd;
-
- /** event base for event oriented interface */
- struct ub_event_base* event_base;
- /** libworker for event based interface */
- struct libworker* event_worker;
-
- /** next query number (to try) to use */
- int next_querynum;
- /** number of async queries outstanding */
- size_t num_async;
- /**
- * Tree of outstanding queries. Indexed by querynum
- * Used when results come in for async to lookup.
- * Used when cancel is done for lookup (and delete).
- * Used to see if querynum is free for use.
- * Content of type ctx_query.
- */
- rbtree_type queries;
-};
-
-/**
- * The queries outstanding for the libunbound resolver.
- * These are outstanding for async resolution.
- * But also, outstanding for sync resolution by one of the threads that
- * has joined the threadpool.
- */
-struct ctx_query {
- /** node in rbtree, must be first entry, key is ptr to the querynum */
- struct rbnode_type node;
- /** query id number, key for node */
- int querynum;
- /** was this an async query? */
- int async;
- /** was this query cancelled (for bg worker) */
- int cancelled;
-
- /** for async query, the callback function */
- ub_callback_type cb;
- /** for async query, the callback user arg */
- void* cb_arg;
-
- /** answer message, result from resolver lookup. */
- uint8_t* msg;
- /** resulting message length. */
- size_t msg_len;
- /** validation status on security */
- enum sec_status msg_security;
- /** store libworker that is handling this query */
- struct libworker* w;
-
- /** result structure, also contains original query, type, class.
- * malloced ptr ready to hand to the client. */
- struct ub_result* res;
-};
-
-/**
- * The error constants
- */
-enum ub_ctx_err {
- /** no error */
- UB_NOERROR = 0,
- /** socket operation. Set to -1, so that if an error from _fd() is
- * passed (-1) it gives a socket error. */
- UB_SOCKET = -1,
- /** alloc failure */
- UB_NOMEM = -2,
- /** syntax error */
- UB_SYNTAX = -3,
- /** DNS service failed */
- UB_SERVFAIL = -4,
- /** fork() failed */
- UB_FORKFAIL = -5,
- /** cfg change after finalize() */
- UB_AFTERFINAL = -6,
- /** initialization failed (bad settings) */
- UB_INITFAIL = -7,
- /** error in pipe communication with async bg worker */
- UB_PIPE = -8,
- /** error reading from file (resolv.conf) */
- UB_READFILE = -9,
- /** error async_id does not exist or result already been delivered */
- UB_NOID = -10
-};
-
-/**
- * Command codes for libunbound pipe.
- *
- * Serialization looks like this:
- * o length (of remainder) uint32.
- * o uint32 command code.
- * o per command format.
- */
-enum ub_ctx_cmd {
- /** QUIT */
- UB_LIBCMD_QUIT = 0,
- /** New query, sent to bg worker */
- UB_LIBCMD_NEWQUERY,
- /** Cancel query, sent to bg worker */
- UB_LIBCMD_CANCEL,
- /** Query result, originates from bg worker */
- UB_LIBCMD_ANSWER
-};
-
-/**
- * finalize a context.
- * @param ctx: context to finalize. creates shared data.
- * @return 0 if OK, or errcode.
- */
-int context_finalize(struct ub_ctx* ctx);
-
-/** compare two ctx_query elements */
-int context_query_cmp(const void* a, const void* b);
-
-/**
- * delete context query
- * @param q: query to delete, including message packet and prealloc result
- */
-void context_query_delete(struct ctx_query* q);
-
-/**
- * Create new query in context, add to querynum list.
- * @param ctx: context
- * @param name: query name
- * @param rrtype: type
- * @param rrclass: class
- * @param cb: callback for async, or NULL for sync.
- * @param cbarg: user arg for async queries.
- * @return new ctx_query or NULL for malloc failure.
- */
-struct ctx_query* context_new(struct ub_ctx* ctx, const char* name, int rrtype,
- int rrclass, ub_callback_type cb, void* cbarg);
-
-/**
- * Get a new alloc. Creates a new one or uses a cached one.
- * @param ctx: context
- * @param locking: if true, cfglock is locked while getting alloc.
- * @return an alloc, or NULL on mem error.
- */
-struct alloc_cache* context_obtain_alloc(struct ub_ctx* ctx, int locking);
-
-/**
- * Release an alloc. Puts it into the cache.
- * @param ctx: context
- * @param locking: if true, cfglock is locked while releasing alloc.
- * @param alloc: alloc to relinquish.
- */
-void context_release_alloc(struct ub_ctx* ctx, struct alloc_cache* alloc,
- int locking);
-
-/**
- * Serialize a context query that questions data.
- * This serializes the query name, type, ...
- * As well as command code 'new_query'.
- * @param q: context query
- * @param len: the length of the allocation is returned.
- * @return: an alloc, or NULL on mem error.
- */
-uint8_t* context_serialize_new_query(struct ctx_query* q, 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'.
- * @param q: context query
- * @param err: error code to pass to client.
- * @param pkt: the packet to add, can be NULL.
- * @param len: the length of the allocation is returned.
- * @return: an alloc, or NULL on mem error.
- */
-uint8_t* context_serialize_answer(struct ctx_query* q, int err,
- struct sldns_buffer* pkt, uint32_t* len);
-
-/**
- * Serialize a query cancellation. Serializes query async id
- * as well as command code 'cancel'
- * @param q: context query
- * @param len: the length of the allocation is returned.
- * @return: an alloc, or NULL on mem error.
- */
-uint8_t* context_serialize_cancel(struct ctx_query* q, uint32_t* len);
-
-/**
- * Serialize a 'quit' command.
- * @param len: the length of the allocation is returned.
- * @return: an alloc, or NULL on mem error.
- */
-uint8_t* context_serialize_quit(uint32_t* len);
-
-/**
- * Obtain command code from serialized buffer
- * @param p: buffer serialized.
- * @param len: length of buffer.
- * @return command code or QUIT on error.
- */
-enum ub_ctx_cmd context_serial_getcmd(uint8_t* p, uint32_t len);
-
-/**
- * Lookup query from new_query buffer.
- * @param ctx: context
- * @param p: buffer serialized.
- * @param len: length of buffer.
- * @return looked up ctx_query or NULL for malloc failure.
- */
-struct ctx_query* context_lookup_new_query(struct ub_ctx* ctx,
- uint8_t* p, uint32_t len);
-
-/**
- * Deserialize a new_query buffer.
- * @param ctx: context
- * @param p: buffer serialized.
- * @param len: length of buffer.
- * @return new ctx_query or NULL for malloc failure.
- */
-struct ctx_query* context_deserialize_new_query(struct ub_ctx* ctx,
- uint8_t* p, uint32_t len);
-
-/**
- * Deserialize an answer buffer.
- * @param ctx: context
- * @param p: buffer serialized.
- * @param len: length of buffer.
- * @param err: error code to be returned to client is passed.
- * @return ctx_query with answer added or NULL for malloc failure.
- */
-struct ctx_query* context_deserialize_answer(struct ub_ctx* ctx,
- uint8_t* p, uint32_t len, int* err);
-
-/**
- * Deserialize a cancel buffer.
- * @param ctx: context
- * @param p: buffer serialized.
- * @param len: length of buffer.
- * @return ctx_query to cancel or NULL for failure.
- */
-struct ctx_query* context_deserialize_cancel(struct ub_ctx* ctx,
- uint8_t* p, uint32_t len);
-
-#endif /* LIBUNBOUND_CONTEXT_H */