Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 550bbe86d83a7870fdddc73c68e5d2b2 > files > 22

libunbound-devel-1.3.4-1mdv2010.0.i586.rpm

<!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&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;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&nbsp;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 &quot;config.h&quot;</code><br>
<code>#include &quot;<a class="el" href="context_8h.html">libunbound/context.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="module_8h.html">util/module.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="config__file_8h.html">util/config_file.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="net__help_8h.html">util/net_help.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="modstack_8h.html">services/modstack.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="localzone_8h.html">services/localzone.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="rrset_8h.html">services/cache/rrset.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="infra_8h.html">services/cache/infra.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="msgreply_8h.html">util/data/msgreply.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="slabhash_8h.html">util/storage/slabhash.h</a>&quot;</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&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="context_8c.html#87984c77b94a221c8a0616fb794260b5">NUM_ID_TRIES</a>&nbsp;&nbsp;&nbsp;100000</td></tr>

<tr><td class="mdescLeft">&nbsp;</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&nbsp;</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">&nbsp;</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&nbsp;</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">&nbsp;</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&nbsp;</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">&nbsp;</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&nbsp;</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">&nbsp;</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> *&nbsp;</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">&nbsp;</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> *&nbsp;</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">&nbsp;</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&nbsp;</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">&nbsp;</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 *&nbsp;</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">&nbsp;</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> *&nbsp;</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">&nbsp;</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> *&nbsp;</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">&nbsp;</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 *&nbsp;</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">&nbsp;</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> *&nbsp;</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">&nbsp;</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 *&nbsp;</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">&nbsp;</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> *&nbsp;</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">&nbsp;</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 *&nbsp;</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">&nbsp;</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>&nbsp;</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">&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>ctx</em>          </td>
          <td>&nbsp;)&nbsp;</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>&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>q</em>          </td>
          <td>&nbsp;)&nbsp;</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>&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>rrtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</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>&nbsp;</td>
          <td class="paramname"> <em>cb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>cbarg</em></td><td>&nbsp;</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>&nbsp;</td><td>context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name,:</em>&nbsp;</td><td>query name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrtype,:</em>&nbsp;</td><td>type </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrclass,:</em>&nbsp;</td><td>class </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cb,:</em>&nbsp;</td><td>callback for async, or NULL for sync. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cbarg,:</em>&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>locking</em></td><td>&nbsp;</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>&nbsp;</td><td>context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>locking,:</em>&nbsp;</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> *&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>alloc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>locking</em></td><td>&nbsp;</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>&nbsp;</td><td>context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>locking,:</em>&nbsp;</td><td>if true, cfglock is locked while releasing alloc. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>alloc,:</em>&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>q</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t *&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</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>&nbsp;</td><td>context query </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</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>&nbsp;</td><td>context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p,:</em>&nbsp;</td><td>buffer serialized. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</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>&nbsp;</td><td>context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p,:</em>&nbsp;</td><td>buffer serialized. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>q</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>err</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t *&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</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>&nbsp;</td><td>context query </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>err,:</em>&nbsp;</td><td>error code to pass to client. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>the packet to add, can be NULL. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>err</em></td><td>&nbsp;</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>&nbsp;</td><td>context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p,:</em>&nbsp;</td><td>buffer serialized. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</td><td>length of buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>err,:</em>&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>q</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t *&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</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>&nbsp;</td><td>context query </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</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> *&nbsp;</td>
          <td class="paramname"> <em>ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</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>&nbsp;</td><td>context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p,:</em>&nbsp;</td><td>buffer serialized. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</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 *&nbsp;</td>
          <td class="paramname"> <em>len</em>          </td>
          <td>&nbsp;)&nbsp;</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>&nbsp;</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 *&nbsp;</td>
          <td class="paramname"> <em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>len</em></td><td>&nbsp;</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>&nbsp;</td><td>buffer serialized. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</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&nbsp;
<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>