<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>unbound: libunbound/context.c File Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.5.9 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul> </div> <div class="navpath"><a class="el" href="dir_fc3ea7a5a61a7a52c4b5d946cda53628.html">libunbound</a> </div> </div> <div class="contents"> <h1>context.c File Reference</h1>This file contains the validator context structure. <a href="#_details">More...</a> <p> <code>#include "config.h"</code><br> <code>#include "<a class="el" href="context_8h.html">libunbound/context.h</a>"</code><br> <code>#include "<a class="el" href="module_8h.html">util/module.h</a>"</code><br> <code>#include "<a class="el" href="config__file_8h.html">util/config_file.h</a>"</code><br> <code>#include "<a class="el" href="net__help_8h.html">util/net_help.h</a>"</code><br> <code>#include "<a class="el" href="modstack_8h.html">services/modstack.h</a>"</code><br> <code>#include "<a class="el" href="localzone_8h.html">services/localzone.h</a>"</code><br> <code>#include "<a class="el" href="rrset_8h.html">services/cache/rrset.h</a>"</code><br> <code>#include "<a class="el" href="infra_8h.html">services/cache/infra.h</a>"</code><br> <code>#include "<a class="el" href="msgreply_8h.html">util/data/msgreply.h</a>"</code><br> <code>#include "<a class="el" href="slabhash_8h.html">util/storage/slabhash.h</a>"</code><br> <table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Defines</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="87984c77b94a221c8a0616fb794260b5"></a><!-- doxytag: member="context.c::NUM_ID_TRIES" ref="87984c77b94a221c8a0616fb794260b5" args="" --> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#87984c77b94a221c8a0616fb794260b5">NUM_ID_TRIES</a> 100000</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">How many times to try to find an unused query-id-number for async. <br></td></tr> <tr><td colspan="2"><br><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#17c9a06c988ddecaf90f289873a34055">context_finalize</a> (struct <a class="el" href="structub__ctx.html">ub_ctx</a> *ctx)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">finalize a context. <a href="#17c9a06c988ddecaf90f289873a34055"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7bdd8a1e5283b181bc198b423dba85b8"></a><!-- doxytag: member="context.c::context_query_cmp" ref="7bdd8a1e5283b181bc198b423dba85b8" args="(const void *a, const void *b)" --> int </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#7bdd8a1e5283b181bc198b423dba85b8">context_query_cmp</a> (const void *a, const void *b)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">compare two <a class="el" href="structctx__query.html" title="The queries outstanding for the libunbound resolver.">ctx_query</a> elements <br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#708c2cd34f30d8e2275c867e5ddb917f">context_query_delete</a> (struct <a class="el" href="structctx__query.html">ctx_query</a> *q)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">delete context query <a href="#708c2cd34f30d8e2275c867e5ddb917f"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c3e2bc6db896993d8eb186d3910b394c"></a><!-- doxytag: member="context.c::find_id" ref="c3e2bc6db896993d8eb186d3910b394c" args="(struct ub_ctx *ctx, int *id)" --> static int </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#c3e2bc6db896993d8eb186d3910b394c">find_id</a> (struct <a class="el" href="structub__ctx.html">ub_ctx</a> *ctx, int *id)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">find next useful id number of 0 on error <br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structctx__query.html">ctx_query</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#12f8f5eadf5657c182458dd6b48e769f">context_new</a> (struct <a class="el" href="structub__ctx.html">ub_ctx</a> *ctx, char *name, int rrtype, int rrclass, <a class="el" href="unbound_8h.html#1f287e8f89ab449223a593bb5545d54a">ub_callback_t</a> cb, void *cbarg)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Create new query in context, add to querynum list. <a href="#12f8f5eadf5657c182458dd6b48e769f"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structalloc__cache.html">alloc_cache</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#07ed834caa619eaa70d11beb1cd5f13a">context_obtain_alloc</a> (struct <a class="el" href="structub__ctx.html">ub_ctx</a> *ctx, int locking)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Get a new alloc. <a href="#07ed834caa619eaa70d11beb1cd5f13a"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#96294fc7567cadd78868f9128a36e910">context_release_alloc</a> (struct <a class="el" href="structub__ctx.html">ub_ctx</a> *ctx, struct <a class="el" href="structalloc__cache.html">alloc_cache</a> *alloc, int locking)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Release an alloc. <a href="#96294fc7567cadd78868f9128a36e910"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#924b6d2d5265f7daf1105c5fa94f58cc">context_serialize_new_query</a> (struct <a class="el" href="structctx__query.html">ctx_query</a> *q, uint32_t *len)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Serialize a context query that questions data. <a href="#924b6d2d5265f7daf1105c5fa94f58cc"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structctx__query.html">ctx_query</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#553dfac7ea03dd02a5222cbcb5483041">context_deserialize_new_query</a> (struct <a class="el" href="structub__ctx.html">ub_ctx</a> *ctx, uint8_t *p, uint32_t len)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Deserialize a new_query buffer. <a href="#553dfac7ea03dd02a5222cbcb5483041"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structctx__query.html">ctx_query</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#696f6d65fc18c5489fa7593315a3984f">context_lookup_new_query</a> (struct <a class="el" href="structub__ctx.html">ub_ctx</a> *ctx, uint8_t *p, uint32_t len)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Lookup query from new_query buffer. <a href="#696f6d65fc18c5489fa7593315a3984f"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#42f82fdfbb3428c5e85d491f65e5fa56">context_serialize_answer</a> (struct <a class="el" href="structctx__query.html">ctx_query</a> *q, int err, ldns_buffer *pkt, uint32_t *len)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Serialize a context_query result to hand back to user. <a href="#42f82fdfbb3428c5e85d491f65e5fa56"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structctx__query.html">ctx_query</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#a2bedee46e73954b129dfda534b31e47">context_deserialize_answer</a> (struct <a class="el" href="structub__ctx.html">ub_ctx</a> *ctx, uint8_t *p, uint32_t len, int *err)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Deserialize an answer buffer. <a href="#a2bedee46e73954b129dfda534b31e47"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#bbc499bb2de6ade5369e431d75752d1e">context_serialize_cancel</a> (struct <a class="el" href="structctx__query.html">ctx_query</a> *q, uint32_t *len)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Serialize a query cancellation. <a href="#bbc499bb2de6ade5369e431d75752d1e"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structctx__query.html">ctx_query</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#c97f986496570502352b523f482be8fd">context_deserialize_cancel</a> (struct <a class="el" href="structub__ctx.html">ub_ctx</a> *ctx, uint8_t *p, uint32_t len)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Deserialize a cancel buffer. <a href="#c97f986496570502352b523f482be8fd"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">uint8_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#3885809ae2dc2563f153581786fb9e19">context_serialize_quit</a> (uint32_t *len)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Serialize a 'quit' command. <a href="#3885809ae2dc2563f153581786fb9e19"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="context_8h.html#462014fd717adbbed48185adb2656d96">ub_ctx_cmd</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#4a9c183b3d56ac5a7e9e079f759ac74a">context_serial_getcmd</a> (uint8_t *p, uint32_t len)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Obtain command code from serialized buffer. <a href="#4a9c183b3d56ac5a7e9e079f759ac74a"></a><br></td></tr> </table> <hr><h2>Detailed Description</h2> This file contains the validator context structure. <p> <hr><h2>Function Documentation</h2> <a class="anchor" name="17c9a06c988ddecaf90f289873a34055"></a><!-- doxytag: member="context.c::context_finalize" ref="17c9a06c988ddecaf90f289873a34055" args="(struct ub_ctx *ctx)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int context_finalize </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structub__ctx.html">ub_ctx</a> * </td> <td class="paramname"> <em>ctx</em> </td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p> finalize a context. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ctx,:</em> </td><td>context to finalize. creates shared data. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if OK, or errcode. </dd></dl> <p>References <a class="el" href="module_8h_source.html#l00194">module_env::alloc</a>, <a class="el" href="module_8h_source.html#l00073">module_env::cfg</a>, <a class="el" href="config__file_8c_source.html#l00822">config_apply()</a>, <a class="el" href="context_8h_source.html#l00106">ub_ctx::env</a>, <a class="el" href="context_8h_source.html#l00078">ub_ctx::finalized</a>, <a class="el" href="lruhash_8h_source.html#l00114">HASH_DEFAULT_STARTARRAY</a>, <a class="el" href="infra_8c_source.html#l00116">infra_adjust()</a>, <a class="el" href="module_8h_source.html#l00079">module_env::infra_cache</a>, <a class="el" href="context_8h_source.html#l00110">ub_ctx::local_zones</a>, <a class="el" href="localzone_8c_source.html#l00846">local_zones_apply_cfg()</a>, <a class="el" href="localzone_8c_source.html#l00053">local_zones_create()</a>, <a class="el" href="log_8c_source.html#l00135">log_file()</a>, <a class="el" href="log_8c_source.html#l00081">log_init()</a>, <a class="el" href="context_8h_source.html#l00094">ub_ctx::log_out</a>, <a class="el" href="config__file_8h_source.html#l00168">config_file::logfile</a>, <a class="el" href="context_8h_source.html#l00092">ub_ctx::logfile_override</a>, <a class="el" href="context_8h_source.html#l00108">ub_ctx::mods</a>, <a class="el" href="modstack_8c_source.html#l00165">modstack_setup()</a>, <a class="el" href="config__file_8h_source.html#l00187">config_file::module_conf</a>, <a class="el" href="module_8h_source.html#l00075">module_env::msg_cache</a>, <a class="el" href="config__file_8h_source.html#l00089">config_file::msg_cache_size</a>, <a class="el" href="config__file_8h_source.html#l00091">config_file::msg_cache_slabs</a>, <a class="el" href="msgreply_8c_source.html#l00557">msgreply_sizefunc()</a>, <a class="el" href="msgreply_8c_source.html#l00570">query_entry_delete()</a>, <a class="el" href="msgreply_8c_source.html#l00534">query_info_compare()</a>, <a class="el" href="msgreply_8c_source.html#l00579">reply_info_delete()</a>, <a class="el" href="module_8h_source.html#l00077">module_env::rrset_cache</a>, <a class="el" href="rrset_8c_source.html#l00079">rrset_cache_adjust()</a>, <a class="el" href="slabhash_8h_source.html#l00059">slabhash::size</a>, <a class="el" href="slabhash_8c_source.html#l00048">slabhash_create()</a>, <a class="el" href="slabhash_8c_source.html#l00087">slabhash_delete()</a>, <a class="el" href="slabhash_8c_source.html#l00145">slabhash_get_size()</a>, <a class="el" href="context_8h_source.html#l00183">UB_INITFAIL</a>, <a class="el" href="context_8h_source.html#l00168">UB_NOERROR</a>, <a class="el" href="context_8h_source.html#l00173">UB_NOMEM</a>, <a class="el" href="config__file_8h_source.html#l00173">config_file::use_syslog</a>, <a class="el" href="config__file_8h_source.html#l00054">config_file::verbosity</a>, and <a class="el" href="log_8c_source.html#l00062">verbosity</a>.</p> <p>Referenced by <a class="el" href="libunbound_8c_source.html#l00911">ub_ctx_finalize()</a>, <a class="el" href="libunbound_8c_source.html#l00528">ub_resolve()</a>, and <a class="el" href="libunbound_8c_source.html#l00572">ub_resolve_async()</a>.</p> </div> </div><p> <a class="anchor" name="708c2cd34f30d8e2275c867e5ddb917f"></a><!-- doxytag: member="context.c::context_query_delete" ref="708c2cd34f30d8e2275c867e5ddb917f" args="(struct ctx_query *q)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void context_query_delete </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structctx__query.html">ctx_query</a> * </td> <td class="paramname"> <em>q</em> </td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p> delete context query <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>q,:</em> </td><td>query to delete, including message packet and prealloc result </td></tr> </table> </dl> <p>References <a class="el" href="context_8h_source.html#l00150">ctx_query::msg</a>, <a class="el" href="context_8h_source.html#l00160">ctx_query::res</a>, and <a class="el" href="libunbound_8c_source.html#l00676">ub_resolve_free()</a>.</p> <p>Referenced by <a class="el" href="libworker_8c_source.html#l00540">add_bg_result()</a>, <a class="el" href="libunbound_8c_source.html#l00146">delq()</a>, <a class="el" href="libworker_8c_source.html#l00577">libworker_bg_done_cb()</a>, <a class="el" href="libunbound_8c_source.html#l00366">process_answer_detail()</a>, <a class="el" href="libunbound_8c_source.html#l00635">ub_cancel()</a>, <a class="el" href="libunbound_8c_source.html#l00528">ub_resolve()</a>, and <a class="el" href="libunbound_8c_source.html#l00572">ub_resolve_async()</a>.</p> </div> </div><p> <a class="anchor" name="12f8f5eadf5657c182458dd6b48e769f"></a><!-- doxytag: member="context.c::context_new" ref="12f8f5eadf5657c182458dd6b48e769f" args="(struct ub_ctx *ctx, char *name, int rrtype, int rrclass, ub_callback_t cb, void *cbarg)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct <a class="el" href="structctx__query.html">ctx_query</a>* context_new </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structub__ctx.html">ub_ctx</a> * </td> <td class="paramname"> <em>ctx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char * </td> <td class="paramname"> <em>name</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>rrtype</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>rrclass</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="unbound_8h.html#1f287e8f89ab449223a593bb5545d54a">ub_callback_t</a> </td> <td class="paramname"> <em>cb</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"> <em>cbarg</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [read]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Create new query in context, add to querynum list. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ctx,:</em> </td><td>context </td></tr> <tr><td valign="top"></td><td valign="top"><em>name,:</em> </td><td>query name </td></tr> <tr><td valign="top"></td><td valign="top"><em>rrtype,:</em> </td><td>type </td></tr> <tr><td valign="top"></td><td valign="top"><em>rrclass,:</em> </td><td>class </td></tr> <tr><td valign="top"></td><td valign="top"><em>cb,:</em> </td><td>callback for async, or NULL for sync. </td></tr> <tr><td valign="top"></td><td valign="top"><em>cbarg,:</em> </td><td>user arg for async queries. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>new <a class="el" href="structctx__query.html" title="The queries outstanding for the libunbound resolver.">ctx_query</a> or NULL for malloc failure. </dd></dl> <p>References <a class="el" href="context_8h_source.html#l00140">ctx_query::async</a>, <a class="el" href="context_8h_source.html#l00145">ctx_query::cb</a>, <a class="el" href="context_8h_source.html#l00147">ctx_query::cb_arg</a>, <a class="el" href="context_8h_source.html#l00072">ub_ctx::cfglock</a>, <a class="el" href="context_8c_source.html#l00113">find_id()</a>, <a class="el" href="rbtree_8h_source.html#l00063">rbnode_t::key</a>, <a class="el" href="context_8h_source.html#l00136">ctx_query::node</a>, <a class="el" href="context_8h_source.html#l00117">ub_ctx::num_async</a>, <a class="el" href="unbound_8h_source.html#l00116">ub_result::qclass</a>, <a class="el" href="unbound_8h_source.html#l00112">ub_result::qname</a>, <a class="el" href="unbound_8h_source.html#l00114">ub_result::qtype</a>, <a class="el" href="context_8h_source.html#l00125">ub_ctx::queries</a>, <a class="el" href="context_8h_source.html#l00138">ctx_query::querynum</a>, <a class="el" href="rbtree_8c_source.html#l00227">rbtree_insert()</a>, and <a class="el" href="context_8h_source.html#l00160">ctx_query::res</a>.</p> <p>Referenced by <a class="el" href="libunbound_8c_source.html#l00528">ub_resolve()</a>, and <a class="el" href="libunbound_8c_source.html#l00572">ub_resolve_async()</a>.</p> </div> </div><p> <a class="anchor" name="07ed834caa619eaa70d11beb1cd5f13a"></a><!-- doxytag: member="context.c::context_obtain_alloc" ref="07ed834caa619eaa70d11beb1cd5f13a" args="(struct ub_ctx *ctx, int locking)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct <a class="el" href="structalloc__cache.html">alloc_cache</a>* context_obtain_alloc </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structub__ctx.html">ub_ctx</a> * </td> <td class="paramname"> <em>ctx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>locking</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [read]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Get a new alloc. <p> Creates a new one or uses a cached one. <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ctx,:</em> </td><td>context </td></tr> <tr><td valign="top"></td><td valign="top"><em>locking,:</em> </td><td>if true, cfglock is locked while getting alloc. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>an alloc, or NULL on mem error. </dd></dl> <p>References <a class="el" href="alloc_8c_source.html#l00097">alloc_init()</a>, <a class="el" href="context_8h_source.html#l00101">ub_ctx::alloc_list</a>, <a class="el" href="context_8h_source.html#l00072">ub_ctx::cfglock</a>, <a class="el" href="alloc_8h_source.html#l00076">alloc_cache::super</a>, <a class="el" href="context_8h_source.html#l00104">ub_ctx::superalloc</a>, and <a class="el" href="context_8h_source.html#l00090">ub_ctx::thr_next_num</a>.</p> <p>Referenced by <a class="el" href="libworker_8c_source.html#l00092">libworker_setup()</a>.</p> </div> </div><p> <a class="anchor" name="96294fc7567cadd78868f9128a36e910"></a><!-- doxytag: member="context.c::context_release_alloc" ref="96294fc7567cadd78868f9128a36e910" args="(struct ub_ctx *ctx, struct alloc_cache *alloc, int locking)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void context_release_alloc </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structub__ctx.html">ub_ctx</a> * </td> <td class="paramname"> <em>ctx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="structalloc__cache.html">alloc_cache</a> * </td> <td class="paramname"> <em>alloc</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>locking</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p> Release an alloc. <p> Puts it into the cache. <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ctx,:</em> </td><td>context </td></tr> <tr><td valign="top"></td><td valign="top"><em>locking,:</em> </td><td>if true, cfglock is locked while releasing alloc. </td></tr> <tr><td valign="top"></td><td valign="top"><em>alloc,:</em> </td><td>alloc to relinquish. </td></tr> </table> </dl> <p>References <a class="el" href="context_8h_source.html#l00101">ub_ctx::alloc_list</a>, <a class="el" href="context_8h_source.html#l00072">ub_ctx::cfglock</a>, and <a class="el" href="alloc_8h_source.html#l00076">alloc_cache::super</a>.</p> <p>Referenced by <a class="el" href="libworker_8c_source.html#l00071">libworker_delete()</a>.</p> </div> </div><p> <a class="anchor" name="924b6d2d5265f7daf1105c5fa94f58cc"></a><!-- doxytag: member="context.c::context_serialize_new_query" ref="924b6d2d5265f7daf1105c5fa94f58cc" args="(struct ctx_query *q, uint32_t *len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">uint8_t* context_serialize_new_query </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structctx__query.html">ctx_query</a> * </td> <td class="paramname"> <em>q</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t * </td> <td class="paramname"> <em>len</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p> Serialize a context query that questions data. <p> This serializes the query name, type, ... As well as command code 'new_query'. <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>q,:</em> </td><td>context query </td></tr> <tr><td valign="top"></td><td valign="top"><em>len,:</em> </td><td>the length of the allocation is returned. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>: an alloc, or NULL on mem error. </dd></dl> <p>References <a class="el" href="unbound_8h_source.html#l00116">ub_result::qclass</a>, <a class="el" href="unbound_8h_source.html#l00112">ub_result::qname</a>, <a class="el" href="unbound_8h_source.html#l00114">ub_result::qtype</a>, <a class="el" href="context_8h_source.html#l00138">ctx_query::querynum</a>, <a class="el" href="context_8h_source.html#l00160">ctx_query::res</a>, and <a class="el" href="context_8h_source.html#l00204">UB_LIBCMD_NEWQUERY</a>.</p> <p>Referenced by <a class="el" href="libunbound_8c_source.html#l00572">ub_resolve_async()</a>.</p> </div> </div><p> <a class="anchor" name="553dfac7ea03dd02a5222cbcb5483041"></a><!-- doxytag: member="context.c::context_deserialize_new_query" ref="553dfac7ea03dd02a5222cbcb5483041" args="(struct ub_ctx *ctx, uint8_t *p, uint32_t len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct <a class="el" href="structctx__query.html">ctx_query</a>* context_deserialize_new_query </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structub__ctx.html">ub_ctx</a> * </td> <td class="paramname"> <em>ctx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint8_t * </td> <td class="paramname"> <em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"> <em>len</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [read]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Deserialize a new_query buffer. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ctx,:</em> </td><td>context </td></tr> <tr><td valign="top"></td><td valign="top"><em>p,:</em> </td><td>buffer serialized. </td></tr> <tr><td valign="top"></td><td valign="top"><em>len,:</em> </td><td>length of buffer. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>new <a class="el" href="structctx__query.html" title="The queries outstanding for the libunbound resolver.">ctx_query</a> or NULL for malloc failure. </dd></dl> <p> add to query list <p>References <a class="el" href="context_8h_source.html#l00140">ctx_query::async</a>, <a class="el" href="rbtree_8h_source.html#l00063">rbnode_t::key</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="context_8h_source.html#l00136">ctx_query::node</a>, <a class="el" href="context_8h_source.html#l00117">ub_ctx::num_async</a>, <a class="el" href="unbound_8h_source.html#l00116">ub_result::qclass</a>, <a class="el" href="unbound_8h_source.html#l00112">ub_result::qname</a>, <a class="el" href="unbound_8h_source.html#l00114">ub_result::qtype</a>, <a class="el" href="context_8h_source.html#l00125">ub_ctx::queries</a>, <a class="el" href="context_8h_source.html#l00138">ctx_query::querynum</a>, <a class="el" href="rbtree_8c_source.html#l00227">rbtree_insert()</a>, <a class="el" href="context_8h_source.html#l00160">ctx_query::res</a>, and <a class="el" href="context_8h_source.html#l00204">UB_LIBCMD_NEWQUERY</a>.</p> <p>Referenced by <a class="el" href="libworker_8c_source.html#l00604">handle_newq()</a>.</p> </div> </div><p> <a class="anchor" name="696f6d65fc18c5489fa7593315a3984f"></a><!-- doxytag: member="context.c::context_lookup_new_query" ref="696f6d65fc18c5489fa7593315a3984f" args="(struct ub_ctx *ctx, uint8_t *p, uint32_t len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct <a class="el" href="structctx__query.html">ctx_query</a>* context_lookup_new_query </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structub__ctx.html">ub_ctx</a> * </td> <td class="paramname"> <em>ctx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint8_t * </td> <td class="paramname"> <em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"> <em>len</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [read]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Lookup query from new_query buffer. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ctx,:</em> </td><td>context </td></tr> <tr><td valign="top"></td><td valign="top"><em>p,:</em> </td><td>buffer serialized. </td></tr> <tr><td valign="top"></td><td valign="top"><em>len,:</em> </td><td>length of buffer. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>looked up <a class="el" href="structctx__query.html" title="The queries outstanding for the libunbound resolver.">ctx_query</a> or NULL for malloc failure. </dd></dl> <p>References <a class="el" href="context_8h_source.html#l00140">ctx_query::async</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="context_8h_source.html#l00125">ub_ctx::queries</a>, <a class="el" href="context_8h_source.html#l00138">ctx_query::querynum</a>, <a class="el" href="rbtree_8c_source.html#l00280">rbtree_search()</a>, and <a class="el" href="context_8h_source.html#l00204">UB_LIBCMD_NEWQUERY</a>.</p> <p>Referenced by <a class="el" href="libworker_8c_source.html#l00604">handle_newq()</a>.</p> </div> </div><p> <a class="anchor" name="42f82fdfbb3428c5e85d491f65e5fa56"></a><!-- doxytag: member="context.c::context_serialize_answer" ref="42f82fdfbb3428c5e85d491f65e5fa56" args="(struct ctx_query *q, int err, ldns_buffer *pkt, uint32_t *len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">uint8_t* context_serialize_answer </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structctx__query.html">ctx_query</a> * </td> <td class="paramname"> <em>q</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>err</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">ldns_buffer * </td> <td class="paramname"> <em>pkt</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t * </td> <td class="paramname"> <em>len</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p> Serialize a context_query result to hand back to user. <p> This serializes the query name, type, ..., and result. As well as command code 'answer'. <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>q,:</em> </td><td>context query </td></tr> <tr><td valign="top"></td><td valign="top"><em>err,:</em> </td><td>error code to pass to client. </td></tr> <tr><td valign="top"></td><td valign="top"><em>pkt,:</em> </td><td>the packet to add, can be NULL. </td></tr> <tr><td valign="top"></td><td valign="top"><em>len,:</em> </td><td>the length of the allocation is returned. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>: an alloc, or NULL on mem error. </dd></dl> <p>References <a class="el" href="context_8h_source.html#l00154">ctx_query::msg_security</a>, <a class="el" href="context_8h_source.html#l00138">ctx_query::querynum</a>, and <a class="el" href="context_8h_source.html#l00208">UB_LIBCMD_ANSWER</a>.</p> <p>Referenced by <a class="el" href="libworker_8c_source.html#l00540">add_bg_result()</a>.</p> </div> </div><p> <a class="anchor" name="a2bedee46e73954b129dfda534b31e47"></a><!-- doxytag: member="context.c::context_deserialize_answer" ref="a2bedee46e73954b129dfda534b31e47" args="(struct ub_ctx *ctx, uint8_t *p, uint32_t len, int *err)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct <a class="el" href="structctx__query.html">ctx_query</a>* context_deserialize_answer </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structub__ctx.html">ub_ctx</a> * </td> <td class="paramname"> <em>ctx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint8_t * </td> <td class="paramname"> <em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"> <em>len</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int * </td> <td class="paramname"> <em>err</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [read]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Deserialize an answer buffer. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ctx,:</em> </td><td>context </td></tr> <tr><td valign="top"></td><td valign="top"><em>p,:</em> </td><td>buffer serialized. </td></tr> <tr><td valign="top"></td><td valign="top"><em>len,:</em> </td><td>length of buffer. </td></tr> <tr><td valign="top"></td><td valign="top"><em>err,:</em> </td><td>error code to be returned to client is passed. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd><a class="el" href="structctx__query.html" title="The queries outstanding for the libunbound resolver.">ctx_query</a> with answer added or NULL for malloc failure. </dd></dl> <p>References <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="net__help_8c_source.html#l00138">memdup()</a>, <a class="el" href="context_8h_source.html#l00150">ctx_query::msg</a>, <a class="el" href="context_8h_source.html#l00152">ctx_query::msg_len</a>, <a class="el" href="context_8h_source.html#l00154">ctx_query::msg_security</a>, <a class="el" href="context_8h_source.html#l00125">ub_ctx::queries</a>, <a class="el" href="rbtree_8c_source.html#l00280">rbtree_search()</a>, <a class="el" href="context_8h_source.html#l00208">UB_LIBCMD_ANSWER</a>, and <a class="el" href="context_8h_source.html#l00173">UB_NOMEM</a>.</p> <p>Referenced by <a class="el" href="libunbound_8c_source.html#l00366">process_answer_detail()</a>.</p> </div> </div><p> <a class="anchor" name="bbc499bb2de6ade5369e431d75752d1e"></a><!-- doxytag: member="context.c::context_serialize_cancel" ref="bbc499bb2de6ade5369e431d75752d1e" args="(struct ctx_query *q, uint32_t *len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">uint8_t* context_serialize_cancel </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structctx__query.html">ctx_query</a> * </td> <td class="paramname"> <em>q</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t * </td> <td class="paramname"> <em>len</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p> Serialize a query cancellation. <p> Serializes query async id as well as command code 'cancel' <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>q,:</em> </td><td>context query </td></tr> <tr><td valign="top"></td><td valign="top"><em>len,:</em> </td><td>the length of the allocation is returned. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>: an alloc, or NULL on mem error. </dd></dl> <p>References <a class="el" href="context_8h_source.html#l00138">ctx_query::querynum</a>, and <a class="el" href="context_8h_source.html#l00206">UB_LIBCMD_CANCEL</a>.</p> <p>Referenced by <a class="el" href="libunbound_8c_source.html#l00635">ub_cancel()</a>.</p> </div> </div><p> <a class="anchor" name="c97f986496570502352b523f482be8fd"></a><!-- doxytag: member="context.c::context_deserialize_cancel" ref="c97f986496570502352b523f482be8fd" args="(struct ub_ctx *ctx, uint8_t *p, uint32_t len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct <a class="el" href="structctx__query.html">ctx_query</a>* context_deserialize_cancel </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structub__ctx.html">ub_ctx</a> * </td> <td class="paramname"> <em>ctx</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint8_t * </td> <td class="paramname"> <em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"> <em>len</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [read]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Deserialize a cancel buffer. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ctx,:</em> </td><td>context </td></tr> <tr><td valign="top"></td><td valign="top"><em>p,:</em> </td><td>buffer serialized. </td></tr> <tr><td valign="top"></td><td valign="top"><em>len,:</em> </td><td>length of buffer. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd><a class="el" href="structctx__query.html" title="The queries outstanding for the libunbound resolver.">ctx_query</a> to cancel or NULL for failure. </dd></dl> <p>References <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="context_8h_source.html#l00125">ub_ctx::queries</a>, <a class="el" href="rbtree_8c_source.html#l00280">rbtree_search()</a>, and <a class="el" href="context_8h_source.html#l00206">UB_LIBCMD_CANCEL</a>.</p> <p>Referenced by <a class="el" href="libworker_8c_source.html#l00197">handle_cancel()</a>.</p> </div> </div><p> <a class="anchor" name="3885809ae2dc2563f153581786fb9e19"></a><!-- doxytag: member="context.c::context_serialize_quit" ref="3885809ae2dc2563f153581786fb9e19" args="(uint32_t *len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">uint8_t* context_serialize_quit </td> <td>(</td> <td class="paramtype">uint32_t * </td> <td class="paramname"> <em>len</em> </td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p> Serialize a 'quit' command. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>len,:</em> </td><td>the length of the allocation is returned. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>: an alloc, or NULL on mem error. </dd></dl> <p>References <a class="el" href="context_8h_source.html#l00202">UB_LIBCMD_QUIT</a>.</p> </div> </div><p> <a class="anchor" name="4a9c183b3d56ac5a7e9e079f759ac74a"></a><!-- doxytag: member="context.c::context_serial_getcmd" ref="4a9c183b3d56ac5a7e9e079f759ac74a" args="(uint8_t *p, uint32_t len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">enum <a class="el" href="context_8h.html#462014fd717adbbed48185adb2656d96">ub_ctx_cmd</a> context_serial_getcmd </td> <td>(</td> <td class="paramtype">uint8_t * </td> <td class="paramname"> <em>p</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"> <em>len</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p> Obtain command code from serialized buffer. <p> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>p,:</em> </td><td>buffer serialized. </td></tr> <tr><td valign="top"></td><td valign="top"><em>len,:</em> </td><td>length of buffer. </td></tr> </table> </dl> <dl class="return" compact><dt><b>Returns:</b></dt><dd>command code or QUIT on error. </dd></dl> <p>References <a class="el" href="context_8h_source.html#l00202">UB_LIBCMD_QUIT</a>.</p> <p>Referenced by <a class="el" href="libworker_8c_source.html#l00218">libworker_do_cmd()</a>, <a class="el" href="libunbound_8c_source.html#l00366">process_answer_detail()</a>, and <a class="el" href="libunbound_8c_source.html#l00153">ub_ctx_delete()</a>.</p> </div> </div><p> </div> <hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 13 06:46:30 2009 for unbound by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address> </body> </html>