Sophie

Sophie

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

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: services/mesh.h 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_d1ccb6fd7b4f0b6c4993c4e5b9d49242.html">services</a>
  </div>
</div>
<div class="contents">
<h1>mesh.h File Reference</h1>This file contains functions to assist in dealing with a mesh of query states.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;<a class="el" href="rbtree_8h.html">util/rbtree.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="netevent_8h.html">util/netevent.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="msgparse_8h.html">util/data/msgparse.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="modstack_8h.html">services/modstack.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmesh__area.html">mesh_area</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Mesh of query states.  <a href="structmesh__area.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmesh__state.html">mesh_state</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A mesh query state Unique per qname, qtype, qclass (from the qstate).  <a href="structmesh__state.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmesh__state__ref.html">mesh_state_ref</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Rbtree reference to a <a class="el" href="structmesh__state.html" title="A mesh query state Unique per qname, qtype, qclass (from the qstate).">mesh_state</a>.  <a href="structmesh__state__ref.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmesh__reply.html">mesh_reply</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reply to a client.  <a href="structmesh__reply.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmesh__cb.html">mesh_cb</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Callback to result routine.  <a href="structmesh__cb.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#16933803b93ba03552956205083ef5e6">MESH_MAX_ACTIVATION</a>&nbsp;&nbsp;&nbsp;1000</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Maximum number of mesh state activations.  <a href="#16933803b93ba03552956205083ef5e6"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#a95ff1039f915363c90eb4d4034e6d43">mesh_cb_func_t</a> )(void *, int, ldns_buffer *, enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Mesh result callback func.  <a href="#a95ff1039f915363c90eb4d4034e6d43"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#4074a2feb7f1a04735f4989f4d639c40">mesh_create</a> (struct <a class="el" href="structmodule__stack.html">module_stack</a> *stack, struct <a class="el" href="structmodule__env.html">module_env</a> *env)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocate mesh, to empty.  <a href="#4074a2feb7f1a04735f4989f4d639c40"></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="mesh_8h.html#cbf51a7e0c652875d5ad6caa970d1f7c">mesh_delete</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete mesh, and all query states and replies in it.  <a href="#cbf51a7e0c652875d5ad6caa970d1f7c"></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="mesh_8h.html#f1805888ae3c3b2e6699165c800cd6a7">mesh_new_client</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, uint16_t qflags, struct <a class="el" href="structedns__data.html">edns_data</a> *edns, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *rep, uint16_t qid)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">New query incoming from clients.  <a href="#f1805888ae3c3b2e6699165c800cd6a7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#0ccd7c03d7b03f510e286857532c3247">mesh_new_callback</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, uint16_t qflags, struct <a class="el" href="structedns__data.html">edns_data</a> *edns, ldns_buffer *buf, uint16_t qid, <a class="el" href="mesh_8h.html#a95ff1039f915363c90eb4d4034e6d43">mesh_cb_func_t</a> cb, void *cb_arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">New query with callback.  <a href="#0ccd7c03d7b03f510e286857532c3247"></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="mesh_8h.html#d8abb6c7a760fe25a09ef39a2468ec14">mesh_report_reply</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh, struct <a class="el" href="structoutbound__entry.html">outbound_entry</a> *e, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *reply, int what)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Handle new event from the wire.  <a href="#d8abb6c7a760fe25a09ef39a2468ec14"></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="mesh_8h.html#fa9f7482b98dc7f11b5f09b0790103e7">mesh_detach_subs</a> (struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *qstate)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Detach-subqueries.  <a href="#fa9f7482b98dc7f11b5f09b0790103e7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#16a48a50f24def50b64c792574631f47">mesh_attach_sub</a> (struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *qstate, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, uint16_t qflags, int prime, struct <a class="el" href="structmodule__qstate.html">module_qstate</a> **newq)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Attach subquery.  <a href="#16a48a50f24def50b64c792574631f47"></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="mesh_8h.html#7f49c82bee5dd9a61c5870364ce6133c">mesh_query_done</a> (struct <a class="el" href="structmesh__state.html">mesh_state</a> *mstate)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Query state is done, send messages to reply entries.  <a href="#7f49c82bee5dd9a61c5870364ce6133c"></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="mesh_8h.html#d774abfdf40abc582511a9c86c435b0d">mesh_walk_supers</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh, struct <a class="el" href="structmesh__state.html">mesh_state</a> *mstate)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Call inform_super for the super query states that are interested in the results from this query state.  <a href="#d774abfdf40abc582511a9c86c435b0d"></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="mesh_8h.html#6dc86381d61884ec319020aae256b0a5">mesh_state_delete</a> (struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *qstate)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete mesh state, cleanup and also rbtrees and so on.  <a href="#6dc86381d61884ec319020aae256b0a5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#5461ab6fdac553fa8dd9851961deed69">mesh_state_create</a> (struct <a class="el" href="structmodule__env.html">module_env</a> *env, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, uint16_t qflags, int prime)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create and initialize a new mesh state and its query state Does not put the mesh state into rbtrees and so on.  <a href="#5461ab6fdac553fa8dd9851961deed69"></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="mesh_8h.html#f299eb48d6cd90e878d6af21d6d56ffd">mesh_state_cleanup</a> (struct <a class="el" href="structmesh__state.html">mesh_state</a> *mstate)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Cleanup a mesh state and its query state.  <a href="#f299eb48d6cd90e878d6af21d6d56ffd"></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="mesh_8h.html#7ce7a6ad842e25531f44f4c433119e29">mesh_delete_all</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete all mesh states from the mesh.  <a href="#7ce7a6ad842e25531f44f4c433119e29"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#b31afaf42feefd1730cfe08cc4f51e8b">mesh_area_find</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, uint16_t qflags, int prime)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find a mesh state in the mesh area.  <a href="#b31afaf42feefd1730cfe08cc4f51e8b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#957ce7a5453c385df6243868af78b0ef">mesh_state_attachment</a> (struct <a class="el" href="structmesh__state.html">mesh_state</a> *super, struct <a class="el" href="structmesh__state.html">mesh_state</a> *sub)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Setup attachment super/sub relation between super and sub mesh state.  <a href="#957ce7a5453c385df6243868af78b0ef"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#5f5dd39ad7d400cb172304cf8f1c7a28">mesh_state_add_reply</a> (struct <a class="el" href="structmesh__state.html">mesh_state</a> *s, struct <a class="el" href="structedns__data.html">edns_data</a> *edns, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *rep, uint16_t qid, uint16_t qflags, uint8_t *qname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create new reply structure and attach it to a mesh state.  <a href="#5f5dd39ad7d400cb172304cf8f1c7a28"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#f83e17347339ccbd1e532d61ef0f999a">mesh_state_add_cb</a> (struct <a class="el" href="structmesh__state.html">mesh_state</a> *s, struct <a class="el" href="structedns__data.html">edns_data</a> *edns, ldns_buffer *buf, <a class="el" href="mesh_8h.html#a95ff1039f915363c90eb4d4034e6d43">mesh_cb_func_t</a> cb, void *cb_arg, uint16_t qid, uint16_t qflags)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create new callback structure and attach it to a mesh state.  <a href="#f83e17347339ccbd1e532d61ef0f999a"></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="mesh_8h.html#b496ccfc51cea7af08ad26ee964877d5">mesh_run</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh, struct <a class="el" href="structmesh__state.html">mesh_state</a> *mstate, enum <a class="el" href="module_8h.html#3d7416154a3bc44d78e8a6e99efc4376">module_ev</a> ev, struct <a class="el" href="structoutbound__entry.html">outbound_entry</a> *e)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Run the mesh.  <a href="#b496ccfc51cea7af08ad26ee964877d5"></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="mesh_8h.html#6ff838f951c7eb26ce498400c6b10ae8">mesh_stats</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh, const char *str)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print some stats about the mesh to the log.  <a href="#6ff838f951c7eb26ce498400c6b10ae8"></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="mesh_8h.html#7d16010448f35bd5281253ea629ff8cc">mesh_stats_clear</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear the stats that the mesh keeps (number of queries serviced).  <a href="#7d16010448f35bd5281253ea629ff8cc"></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="mesh_8h.html#df4fd6696582e458d1bb3d3d7274078a">mesh_log_list</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print all the states in the mesh to the log.  <a href="#df4fd6696582e458d1bb3d3d7274078a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#31ac4a34e17a0832381ae5af27186bc8">mesh_get_mem</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate memory size in use by mesh and all queries inside it.  <a href="#31ac4a34e17a0832381ae5af27186bc8"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#330696aa316ca55e871c67f8ef19c6b9">mesh_detect_cycle</a> (struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *qstate, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, uint16_t flags, int prime)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find cycle; see if the given mesh is in the targets sub, or sub-sub, .  <a href="#330696aa316ca55e871c67f8ef19c6b9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5244579fc81e4164fe4d81ca137aea1d"></a><!-- doxytag: member="mesh.h::mesh_state_compare" ref="5244579fc81e4164fe4d81ca137aea1d" args="(const void *ap, const void *bp)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#5244579fc81e4164fe4d81ca137aea1d">mesh_state_compare</a> (const void *ap, const void *bp)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare two mesh_states <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="43c683109a05db90ab1deeea316f5603"></a><!-- doxytag: member="mesh.h::mesh_state_ref_compare" ref="43c683109a05db90ab1deeea316f5603" args="(const void *ap, const void *bp)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#43c683109a05db90ab1deeea316f5603">mesh_state_ref_compare</a> (const void *ap, const void *bp)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare two mesh references <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mesh_8h.html#6291c4bc4bcb2d953dd51ffdb71ff981">mesh_make_new_space</a> (struct <a class="el" href="structmesh__area.html">mesh_area</a> *mesh)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Make space for another recursion state for a reply in the mesh.  <a href="#6291c4bc4bcb2d953dd51ffdb71ff981"></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="mesh_8h.html#155d7740adc439218877b4d7a6d5a456">mesh_list_insert</a> (struct <a class="el" href="structmesh__state.html">mesh_state</a> *m, struct <a class="el" href="structmesh__state.html">mesh_state</a> **fp, struct <a class="el" href="structmesh__state.html">mesh_state</a> **lp)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert mesh state into a double linked list.  <a href="#155d7740adc439218877b4d7a6d5a456"></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="mesh_8h.html#af73a8b7109115be23ce03348cf9c3e0">mesh_list_remove</a> (struct <a class="el" href="structmesh__state.html">mesh_state</a> *m, struct <a class="el" href="structmesh__state.html">mesh_state</a> **fp, struct <a class="el" href="structmesh__state.html">mesh_state</a> **lp)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove mesh state from a double linked list.  <a href="#af73a8b7109115be23ce03348cf9c3e0"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This file contains functions to assist in dealing with a mesh of query states. 
<p>
This mesh is supposed to be thread-specific. It consists of query states (per qname, qtype, qclass) and connections between query states and the super and subquery states, and replies to send back to clients. <hr><h2>Define Documentation</h2>
<a class="anchor" name="16933803b93ba03552956205083ef5e6"></a><!-- doxytag: member="mesh.h::MESH_MAX_ACTIVATION" ref="16933803b93ba03552956205083ef5e6" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define MESH_MAX_ACTIVATION&nbsp;&nbsp;&nbsp;1000          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Maximum number of mesh state activations. 
<p>
Any more is likely an infinite loop in the module. It is then terminated. 
<p>Referenced by <a class="el" href="mesh_8c_source.html#l00843">mesh_continue()</a>.</p>

</div>
</div><p>
<hr><h2>Typedef Documentation</h2>
<a class="anchor" name="a95ff1039f915363c90eb4d4034e6d43"></a><!-- doxytag: member="mesh.h::mesh_cb_func_t" ref="a95ff1039f915363c90eb4d4034e6d43" args=")(void *, int, ldns_buffer *, enum sec_status)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef void(* <a class="el" href="mesh_8h.html#a95ff1039f915363c90eb4d4034e6d43">mesh_cb_func_t</a>)(void *, int, ldns_buffer *, enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a>)          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Mesh result callback func. 
<p>
called as func(cb_arg, rcode, buffer_with_reply, security); 
</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="4074a2feb7f1a04735f4989f4d639c40"></a><!-- doxytag: member="mesh.h::mesh_create" ref="4074a2feb7f1a04735f4989f4d639c40" args="(struct module_stack *stack, struct module_env *env)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structmesh__area.html">mesh_area</a>* mesh_create           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__stack.html">module_stack</a> *&nbsp;</td>
          <td class="paramname"> <em>stack</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structmodule__env.html">module_env</a> *&nbsp;</td>
          <td class="paramname"> <em>env</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>
Allocate mesh, to empty. 
<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>stack,:</em>&nbsp;</td><td>module stack to activate, copied (as readonly reference). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>env,:</em>&nbsp;</td><td>environment for new queries. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>mesh: the new mesh or NULL on error. </dd></dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="module_8h_source.html#l00073">module_env::cfg</a>, <a class="el" href="mesh_8h_source.html#l00075">mesh_area::env</a>, <a class="el" href="mesh_8h_source.html#l00109">mesh_area::histogram</a>, <a class="el" href="mesh_8h_source.html#l00131">mesh_area::jostle_max</a>, <a class="el" href="config__file_8h_source.html#l00095">config_file::jostle_time</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="mesh_8h_source.html#l00098">mesh_area::max_forever_states</a>, <a class="el" href="mesh_8h_source.html#l00096">mesh_area::max_reply_states</a>, <a class="el" href="mesh_8c_source.html#l00124">mesh_state_compare()</a>, <a class="el" href="mesh_8h_source.html#l00073">mesh_area::mods</a>, <a class="el" href="mesh_8h_source.html#l00091">mesh_area::num_detached_states</a>, <a class="el" href="mesh_8h_source.html#l00093">mesh_area::num_forever_states</a>, <a class="el" href="config__file_8h_source.html#l00093">config_file::num_queries_per_thread</a>, <a class="el" href="mesh_8h_source.html#l00083">mesh_area::num_reply_addrs</a>, <a class="el" href="mesh_8h_source.html#l00087">mesh_area::num_reply_states</a>, <a class="el" href="rbtree_8c_source.html#l00094">rbtree_init()</a>, <a class="el" href="mesh_8h_source.html#l00078">mesh_area::run</a>, <a class="el" href="mesh_8h_source.html#l00103">mesh_area::stats_dropped</a>, <a class="el" href="mesh_8h_source.html#l00101">mesh_area::stats_jostled</a>, and <a class="el" href="timehist_8c_source.html#l00079">timehist_setup()</a>.</p>

<p>Referenced by <a class="el" href="libworker_8c_source.html#l00092">libworker_setup()</a>, and <a class="el" href="worker_8c_source.html#l00967">worker_init()</a>.</p>

</div>
</div><p>
<a class="anchor" name="cbf51a7e0c652875d5ad6caa970d1f7c"></a><!-- doxytag: member="mesh.h::mesh_delete" ref="cbf51a7e0c652875d5ad6caa970d1f7c" args="(struct mesh_area *mesh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_delete           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Delete mesh, and all query states and replies in it. 
<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>mesh,:</em>&nbsp;</td><td>the mesh to delete. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="mesh_8h_source.html#l00109">mesh_area::histogram</a>, <a class="el" href="mesh_8c_source.html#l00191">mesh_delete_helper()</a>, <a class="el" href="rbtree_8h_source.html#l00078">rbtree_t::root</a>, and <a class="el" href="timehist_8c_source.html#l00097">timehist_delete()</a>.</p>

<p>Referenced by <a class="el" href="libworker_8c_source.html#l00071">libworker_delete()</a>, and <a class="el" href="worker_8c_source.html#l01115">worker_delete()</a>.</p>

</div>
</div><p>
<a class="anchor" name="f1805888ae3c3b2e6699165c800cd6a7"></a><!-- doxytag: member="mesh.h::mesh_new_client" ref="f1805888ae3c3b2e6699165c800cd6a7" args="(struct mesh_area *mesh, struct query_info *qinfo, uint16_t qflags, struct edns_data *edns, struct comm_reply *rep, uint16_t qid)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_new_client           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qflags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structedns__data.html">edns_data</a> *&nbsp;</td>
          <td class="paramname"> <em>edns</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structcomm__reply.html">comm_reply</a> *&nbsp;</td>
          <td class="paramname"> <em>rep</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qid</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
New query incoming from clients. 
<p>
Create new query state if needed, and add <a class="el" href="structmesh__reply.html" title="Reply to a client.">mesh_reply</a> to it. Returns error to client on malloc failures. Will run the mesh area queries to process if a new query state is created.<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>mesh,:</em>&nbsp;</td><td>the mesh. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query from client. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qflags,:</em>&nbsp;</td><td>flags from client query. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>edns data from client query. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rep,:</em>&nbsp;</td><td>where to reply to. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qid,:</em>&nbsp;</td><td>query id to reply with. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="netevent_8h_source.html#l00140">comm_point::buffer</a>, <a class="el" href="netevent_8h_source.html#l00098">comm_reply::c</a>, <a class="el" href="mesh_8h_source.html#l00154">mesh_state::cb_list</a>, <a class="el" href="fake__event_8c_source.html#l00711">comm_point_drop_reply()</a>, <a class="el" href="fake__event_8c_source.html#l00684">comm_point_send_reply()</a>, <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="mesh_8h_source.html#l00075">mesh_area::env</a>, <a class="el" href="msgencode_8c_source.html#l00769">error_encode()</a>, <a class="el" href="mesh_8h_source.html#l00121">mesh_area::forever_first</a>, <a class="el" href="mesh_8h_source.html#l00123">mesh_area::forever_last</a>, <a class="el" href="mesh_8h_source.html#l00127">mesh_area::jostle_first</a>, <a class="el" href="mesh_8h_source.html#l00129">mesh_area::jostle_last</a>, <a class="el" href="structmesh__state.html#b37e83ad67595e1a4b9ba91ff4f85203">mesh_state::list_select</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="mesh_8h_source.html#l00098">mesh_area::max_forever_states</a>, <a class="el" href="mesh_8c_source.html#l00769">mesh_area_find()</a>, <a class="el" href="mesh_8c_source.html#l01022">mesh_list_insert()</a>, <a class="el" href="mesh_8c_source.html#l00234">mesh_make_new_space()</a>, <a class="el" href="mesh_8c_source.html#l00886">mesh_run()</a>, <a class="el" href="mesh_8c_source.html#l00805">mesh_state_add_reply()</a>, <a class="el" href="mesh_8c_source.html#l00405">mesh_state_create()</a>, <a class="el" href="mesh_8c_source.html#l00491">mesh_state_delete()</a>, <a class="el" href="module_8h_source.html#l00244">module_event_new</a>, <a class="el" href="mesh_8h_source.html#l00145">mesh_state::node</a>, <a class="el" href="mesh_8h_source.html#l00091">mesh_area::num_detached_states</a>, <a class="el" href="mesh_8h_source.html#l00093">mesh_area::num_forever_states</a>, <a class="el" href="mesh_8h_source.html#l00083">mesh_area::num_reply_addrs</a>, <a class="el" href="mesh_8h_source.html#l00087">mesh_area::num_reply_states</a>, <a class="el" href="msgreply_8h_source.html#l00064">query_info::qname</a>, <a class="el" href="rbtree_8c_source.html#l00227">rbtree_insert()</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, <a class="el" href="mesh_8h_source.html#l00103">mesh_area::stats_dropped</a>, <a class="el" href="mesh_8h_source.html#l00157">mesh_state::super_set</a>, <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>, and <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>.</p>

<p>Referenced by <a class="el" href="worker_8c_source.html#l00681">worker_handle_request()</a>.</p>

</div>
</div><p>
<a class="anchor" name="0ccd7c03d7b03f510e286857532c3247"></a><!-- doxytag: member="mesh.h::mesh_new_callback" ref="0ccd7c03d7b03f510e286857532c3247" args="(struct mesh_area *mesh, struct query_info *qinfo, uint16_t qflags, struct edns_data *edns, ldns_buffer *buf, uint16_t qid, mesh_cb_func_t cb, void *cb_arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mesh_new_callback           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qflags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structedns__data.html">edns_data</a> *&nbsp;</td>
          <td class="paramname"> <em>edns</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="mesh_8h.html#a95ff1039f915363c90eb4d4034e6d43">mesh_cb_func_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>cb_arg</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
New query with callback. 
<p>
Create new query state if needed, and add <a class="el" href="structmesh__cb.html" title="Callback to result routine.">mesh_cb</a> to it. Will run the mesh area queries to process if a new query state is created.<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>mesh,:</em>&nbsp;</td><td>the mesh. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query from client. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qflags,:</em>&nbsp;</td><td>flags from client query. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>edns data from client query. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buf,:</em>&nbsp;</td><td>buffer for reply contents. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qid,:</em>&nbsp;</td><td>query id to reply with. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cb,:</em>&nbsp;</td><td>callback function. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cb_arg,:</em>&nbsp;</td><td>callback user arg. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on error. </dd></dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="mesh_8h_source.html#l00154">mesh_state::cb_list</a>, <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="mesh_8h_source.html#l00075">mesh_area::env</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="mesh_8c_source.html#l00769">mesh_area_find()</a>, <a class="el" href="mesh_8c_source.html#l00886">mesh_run()</a>, <a class="el" href="mesh_8c_source.html#l00784">mesh_state_add_cb()</a>, <a class="el" href="mesh_8c_source.html#l00405">mesh_state_create()</a>, <a class="el" href="mesh_8c_source.html#l00491">mesh_state_delete()</a>, <a class="el" href="module_8h_source.html#l00244">module_event_new</a>, <a class="el" href="mesh_8h_source.html#l00145">mesh_state::node</a>, <a class="el" href="mesh_8h_source.html#l00091">mesh_area::num_detached_states</a>, <a class="el" href="mesh_8h_source.html#l00083">mesh_area::num_reply_addrs</a>, <a class="el" href="mesh_8h_source.html#l00087">mesh_area::num_reply_states</a>, <a class="el" href="rbtree_8c_source.html#l00227">rbtree_insert()</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, and <a class="el" href="mesh_8h_source.html#l00157">mesh_state::super_set</a>.</p>

<p>Referenced by <a class="el" href="libworker_8c_source.html#l00604">handle_newq()</a>, and <a class="el" href="libworker_8c_source.html#l00497">libworker_fg()</a>.</p>

</div>
</div><p>
<a class="anchor" name="d8abb6c7a760fe25a09ef39a2468ec14"></a><!-- doxytag: member="mesh.h::mesh_report_reply" ref="d8abb6c7a760fe25a09ef39a2468ec14" args="(struct mesh_area *mesh, struct outbound_entry *e, struct comm_reply *reply, int what)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_report_reply           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structoutbound__entry.html">outbound_entry</a> *&nbsp;</td>
          <td class="paramname"> <em>e</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structcomm__reply.html">comm_reply</a> *&nbsp;</td>
          <td class="paramname"> <em>reply</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>what</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Handle new event from the wire. 
<p>
A serviced query has returned. The query state will be made runnable, and the <a class="el" href="structmesh__area.html" title="Mesh of query states.">mesh_area</a> will process query states until processing is complete.<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>mesh,:</em>&nbsp;</td><td>the query mesh. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>e,:</em>&nbsp;</td><td>outbound <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>, with query state to run and reply pointer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>reply,:</em>&nbsp;</td><td>the comm point reply info. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>what,:</em>&nbsp;</td><td>NETEVENT_* error code (if not 0, what is wrong, TIMEOUT). </td></tr>
  </table>
</dl>

<p>References <a class="el" href="module_8h_source.html#l00288">module_qstate::mesh_info</a>, <a class="el" href="mesh_8c_source.html#l00886">mesh_run()</a>, <a class="el" href="module_8h_source.html#l00252">module_event_capsfail</a>, <a class="el" href="module_8h_source.html#l00250">module_event_noreply</a>, <a class="el" href="module_8h_source.html#l00248">module_event_reply</a>, <a class="el" href="netevent_8h_source.html#l00083">NETEVENT_CAPSFAIL</a>, <a class="el" href="netevent_8h_source.html#l00077">NETEVENT_NOERROR</a>, <a class="el" href="outbound__list_8h_source.html#l00069">outbound_entry::qstate</a>, and <a class="el" href="module_8h_source.html#l00271">module_qstate::reply</a>.</p>

<p>Referenced by <a class="el" href="libworker_8c_source.html#l00699">libworker_handle_reply()</a>, <a class="el" href="libworker_8c_source.html#l00728">libworker_handle_service_reply()</a>, <a class="el" href="worker_8c_source.html#l00209">worker_handle_reply()</a>, and <a class="el" href="worker_8c_source.html#l00241">worker_handle_service_reply()</a>.</p>

</div>
</div><p>
<a class="anchor" name="fa9f7482b98dc7f11b5f09b0790103e7"></a><!-- doxytag: member="mesh.h::mesh_detach_subs" ref="fa9f7482b98dc7f11b5f09b0790103e7" args="(struct module_qstate *qstate)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_detach_subs           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *&nbsp;</td>
          <td class="paramname"> <em>qstate</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Detach-subqueries. 
<p>
Remove all sub-query references from this query state. Keeps super-references of those sub-queries correct. Updates stat items in <a class="el" href="structmesh__area.html" title="Mesh of query states.">mesh_area</a> structure. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>qstate,:</em>&nbsp;</td><td>used to find mesh state. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="mesh_8h_source.html#l00154">mesh_state::cb_list</a>, <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="module_8h_source.html#l00286">module_qstate::env</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="unbound-host_8c_source.html#l00364">lookup()</a>, <a class="el" href="module_8h_source.html#l00192">module_env::mesh</a>, <a class="el" href="module_8h_source.html#l00288">module_qstate::mesh_info</a>, <a class="el" href="mesh_8c_source.html#l00148">mesh_state_ref_compare()</a>, <a class="el" href="mesh_8h_source.html#l00182">mesh_state_ref::node</a>, <a class="el" href="mesh_8h_source.html#l00091">mesh_area::num_detached_states</a>, <a class="el" href="mesh_8h_source.html#l00087">mesh_area::num_reply_states</a>, <a class="el" href="rbtree_8c_source.html#l00326">rbtree_delete()</a>, <a class="el" href="rbtree_8h_source.html#l00173">RBTREE_FOR</a>, <a class="el" href="rbtree_8c_source.html#l00094">rbtree_init()</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="mesh_8h_source.html#l00184">mesh_state_ref::s</a>, <a class="el" href="mesh_8h_source.html#l00160">mesh_state::sub_set</a>, and <a class="el" href="mesh_8h_source.html#l00157">mesh_state::super_set</a>.</p>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00265">fptr_whitelist_modenv_detach_subs()</a>, <a class="el" href="libworker_8c_source.html#l00092">libworker_setup()</a>, <a class="el" href="mesh_8c_source.html#l00491">mesh_state_delete()</a>, and <a class="el" href="worker_8c_source.html#l00967">worker_init()</a>.</p>

</div>
</div><p>
<a class="anchor" name="16a48a50f24def50b64c792574631f47"></a><!-- doxytag: member="mesh.h::mesh_attach_sub" ref="16a48a50f24def50b64c792574631f47" args="(struct module_qstate *qstate, struct query_info *qinfo, uint16_t qflags, int prime, struct module_qstate **newq)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mesh_attach_sub           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *&nbsp;</td>
          <td class="paramname"> <em>qstate</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qflags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>prime</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structmodule__qstate.html">module_qstate</a> **&nbsp;</td>
          <td class="paramname"> <em>newq</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Attach subquery. 
<p>
Creates it if it does not exist already. Keeps sub and super references correct. Updates stat items in <a class="el" href="structmesh__area.html" title="Mesh of query states.">mesh_area</a> structure. Pass if it is priming query or not. return: o if error (malloc) happened. o need to initialise the new state (module init; it is a new state). so that the next run of the query with this module is successful. o no init needed, attachment successful.<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>qstate,:</em>&nbsp;</td><td>the state to find mesh state, and that wants to receive the results from the new subquery. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>what to query for (copied). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qflags,:</em>&nbsp;</td><td>what flags to use (RD / CD flag or not). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>prime,:</em>&nbsp;</td><td>if it is a (stub) priming query. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>newq,:</em>&nbsp;</td><td>If the new subquery needs initialisation, it is returned, otherwise NULL is returned. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: false on error, true if success (and init may be needed). </dd></dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="mesh_8h_source.html#l00154">mesh_state::cb_list</a>, <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="module_8h_source.html#l00286">module_qstate::env</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="module_8h_source.html#l00192">module_env::mesh</a>, <a class="el" href="mesh_8c_source.html#l00769">mesh_area_find()</a>, <a class="el" href="module_8h_source.html#l00288">module_qstate::mesh_info</a>, <a class="el" href="mesh_8c_source.html#l00583">mesh_state_attachment()</a>, <a class="el" href="mesh_8c_source.html#l00405">mesh_state_create()</a>, <a class="el" href="mesh_8h_source.html#l00145">mesh_state::node</a>, <a class="el" href="mesh_8h_source.html#l00091">mesh_area::num_detached_states</a>, <a class="el" href="rbtree_8c_source.html#l00227">rbtree_insert()</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="mesh_8h_source.html#l00078">mesh_area::run</a>, <a class="el" href="mesh_8h_source.html#l00147">mesh_state::run_node</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, and <a class="el" href="mesh_8h_source.html#l00157">mesh_state::super_set</a>.</p>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00273">fptr_whitelist_modenv_attach_sub()</a>, <a class="el" href="libworker_8c_source.html#l00092">libworker_setup()</a>, and <a class="el" href="worker_8c_source.html#l00967">worker_init()</a>.</p>

</div>
</div><p>
<a class="anchor" name="7f49c82bee5dd9a61c5870364ce6133c"></a><!-- doxytag: member="mesh.h::mesh_query_done" ref="7f49c82bee5dd9a61c5870364ce6133c" args="(struct mesh_state *mstate)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_query_done           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td>
          <td class="paramname"> <em>mstate</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Query state is done, send messages to reply entries. 
<p>
Encode messages using reply <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> values and the querystate (with original qinfo), using given <a class="el" href="structreply__info.html" title="Structure to store DNS query and the reply packet.">reply_info</a>. Pass errcode != 0 if an error reply is needed. If no reply entries, nothing is done. Must be called before a module can module_finished or return module_error. The module must handle the super query states itself as well.<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>mstate,:</em>&nbsp;</td><td>mesh state that is done. return_rcode and return_msg are used for replies. return_rcode: if not 0 (NOERROR) an error is sent back (and return_msg is ignored). return_msg: reply to encode and send back to clients. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00154">mesh_state::cb_list</a>, <a class="el" href="mesh_8c_source.html#l00614">mesh_do_callback()</a>, <a class="el" href="mesh_8c_source.html#l00662">mesh_send_reply()</a>, <a class="el" href="mesh_8h_source.html#l00218">mesh_cb::next</a>, <a class="el" href="mesh_8h_source.html#l00192">mesh_reply::next</a>, <a class="el" href="dns_8h_source.html#l00059">dns_msg::rep</a>, <a class="el" href="mesh_8h_source.html#l00173">mesh_state::replies_sent</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="module_8h_source.html#l00273">module_qstate::return_msg</a>, <a class="el" href="module_8h_source.html#l00275">module_qstate::return_rcode</a>, and <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00843">mesh_continue()</a>.</p>

</div>
</div><p>
<a class="anchor" name="d774abfdf40abc582511a9c86c435b0d"></a><!-- doxytag: member="mesh.h::mesh_walk_supers" ref="d774abfdf40abc582511a9c86c435b0d" args="(struct mesh_area *mesh, struct mesh_state *mstate)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_walk_supers           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td>
          <td class="paramname"> <em>mstate</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Call inform_super for the super query states that are interested in the results from this query state. 
<p>
These can then be changed for error or results. Called when a module is module_finished or returns module_error. The super query states become runnable with event module_event_pass.<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>mesh,:</em>&nbsp;</td><td>mesh area to add newly runnable modules to. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>mstate,:</em>&nbsp;</td><td>the state that has results, used to find mesh state. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="module_8h_source.html#l00280">module_qstate::curmod</a>, <a class="el" href="fptr__wlist_8h_source.html#l00067">fptr_ok</a>, <a class="el" href="fptr__wlist_8c_source.html#l00332">fptr_whitelist_mod_inform_super()</a>, <a class="el" href="structmodule__func__block.html#b46071616ec3d3e6f51bf52d5900a845">module_func_block::inform_super</a>, <a class="el" href="modstack_8h_source.html#l00054">module_stack::mod</a>, <a class="el" href="mesh_8h_source.html#l00073">mesh_area::mods</a>, <a class="el" href="rbtree_8h_source.html#l00173">RBTREE_FOR</a>, <a class="el" href="rbtree_8c_source.html#l00227">rbtree_insert()</a>, <a class="el" href="mesh_8h_source.html#l00078">mesh_area::run</a>, <a class="el" href="mesh_8h_source.html#l00147">mesh_state::run_node</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, <a class="el" href="mesh_8h_source.html#l00184">mesh_state_ref::s</a>, and <a class="el" href="mesh_8h_source.html#l00157">mesh_state::super_set</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00843">mesh_continue()</a>, and <a class="el" href="mesh_8c_source.html#l00234">mesh_make_new_space()</a>.</p>

</div>
</div><p>
<a class="anchor" name="6dc86381d61884ec319020aae256b0a5"></a><!-- doxytag: member="mesh.h::mesh_state_delete" ref="6dc86381d61884ec319020aae256b0a5" args="(struct module_qstate *qstate)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_state_delete           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *&nbsp;</td>
          <td class="paramname"> <em>qstate</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Delete mesh state, cleanup and also rbtrees and so on. 
<p>
Will detach from all super/subnodes. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>qstate,:</em>&nbsp;</td><td>to remove. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="mesh_8h_source.html#l00154">mesh_state::cb_list</a>, <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="module_8h_source.html#l00286">module_qstate::env</a>, <a class="el" href="mesh_8h_source.html#l00121">mesh_area::forever_first</a>, <a class="el" href="mesh_8h_source.html#l00123">mesh_area::forever_last</a>, <a class="el" href="mesh_8h_source.html#l00127">mesh_area::jostle_first</a>, <a class="el" href="mesh_8h_source.html#l00129">mesh_area::jostle_last</a>, <a class="el" href="rbtree_8h_source.html#l00063">rbnode_t::key</a>, <a class="el" href="structmesh__state.html#b37e83ad67595e1a4b9ba91ff4f85203">mesh_state::list_select</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="module_8h_source.html#l00192">module_env::mesh</a>, <a class="el" href="mesh_8c_source.html#l00528">mesh_detach_subs()</a>, <a class="el" href="module_8h_source.html#l00288">module_qstate::mesh_info</a>, <a class="el" href="mesh_8c_source.html#l01034">mesh_list_remove()</a>, <a class="el" href="mesh_8c_source.html#l00459">mesh_state_cleanup()</a>, <a class="el" href="mesh_8h_source.html#l00182">mesh_state_ref::node</a>, <a class="el" href="mesh_8h_source.html#l00091">mesh_area::num_detached_states</a>, <a class="el" href="mesh_8h_source.html#l00093">mesh_area::num_forever_states</a>, <a class="el" href="mesh_8h_source.html#l00087">mesh_area::num_reply_states</a>, <a class="el" href="rbtree_8c_source.html#l00326">rbtree_delete()</a>, <a class="el" href="rbtree_8h_source.html#l00173">RBTREE_FOR</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="mesh_8h_source.html#l00078">mesh_area::run</a>, <a class="el" href="mesh_8h_source.html#l00184">mesh_state_ref::s</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, <a class="el" href="mesh_8h_source.html#l00160">mesh_state::sub_set</a>, and <a class="el" href="mesh_8h_source.html#l00157">mesh_state::super_set</a>.</p>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00282">fptr_whitelist_modenv_kill_sub()</a>, <a class="el" href="libworker_8c_source.html#l00092">libworker_setup()</a>, <a class="el" href="mesh_8c_source.html#l00843">mesh_continue()</a>, <a class="el" href="mesh_8c_source.html#l00191">mesh_delete_helper()</a>, <a class="el" href="mesh_8c_source.html#l00234">mesh_make_new_space()</a>, <a class="el" href="mesh_8c_source.html#l00344">mesh_new_callback()</a>, <a class="el" href="mesh_8c_source.html#l00268">mesh_new_client()</a>, and <a class="el" href="worker_8c_source.html#l00967">worker_init()</a>.</p>

</div>
</div><p>
<a class="anchor" name="5461ab6fdac553fa8dd9851961deed69"></a><!-- doxytag: member="mesh.h::mesh_state_create" ref="5461ab6fdac553fa8dd9851961deed69" args="(struct module_env *env, struct query_info *qinfo, uint16_t qflags, int prime)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structmesh__state.html">mesh_state</a>* mesh_state_create           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__env.html">module_env</a> *&nbsp;</td>
          <td class="paramname"> <em>env</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qflags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>prime</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 and initialize a new mesh state and its query state Does not put the mesh state into rbtrees and so on. 
<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>env,:</em>&nbsp;</td><td>module environment to set. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query info that the mesh is for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qflags,:</em>&nbsp;</td><td>flags for query (RD / CD flag). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>prime,:</em>&nbsp;</td><td>if true, it is a priming query, set is_priming on mesh state. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: new mesh state or NULL on allocation error. </dd></dl>

<p>References <a class="el" href="module_8h_source.html#l00194">module_env::alloc</a>, <a class="el" href="alloc_8c_source.html#l00299">alloc_reg_obtain()</a>, <a class="el" href="alloc_8c_source.html#l00312">alloc_reg_release()</a>, <a class="el" href="net__help_8h_source.html#l00054">BIT_CD</a>, <a class="el" href="net__help_8h_source.html#l00062">BIT_RD</a>, <a class="el" href="module_8h_source.html#l00280">module_qstate::curmod</a>, <a class="el" href="module_8h_source.html#l00286">module_qstate::env</a>, <a class="el" href="module_8h_source.html#l00282">module_qstate::ext_state</a>, <a class="el" href="module_8h_source.html#l00268">module_qstate::is_priming</a>, <a class="el" href="rbtree_8h_source.html#l00063">rbnode_t::key</a>, <a class="el" href="structmesh__state.html#b37e83ad67595e1a4b9ba91ff4f85203">mesh_state::list_select</a>, <a class="el" href="module_8h_source.html#l00192">module_env::mesh</a>, <a class="el" href="module_8h_source.html#l00288">module_qstate::mesh_info</a>, <a class="el" href="mesh_8c_source.html#l00148">mesh_state_ref_compare()</a>, <a class="el" href="module_8h_source.html#l00284">module_qstate::minfo</a>, <a class="el" href="mesh_8h_source.html#l00073">mesh_area::mods</a>, <a class="el" href="module_8h_source.html#l00226">module_state_initial</a>, <a class="el" href="mesh_8h_source.html#l00145">mesh_state::node</a>, <a class="el" href="modstack_8h_source.html#l00052">module_stack::num</a>, <a class="el" href="mesh_8h_source.html#l00162">mesh_state::num_activated</a>, <a class="el" href="msgreply_8h_source.html#l00070">query_info::qclass</a>, <a class="el" href="module_8h_source.html#l00264">module_qstate::qinfo</a>, <a class="el" href="msgreply_8h_source.html#l00064">query_info::qname</a>, <a class="el" href="msgreply_8h_source.html#l00066">query_info::qname_len</a>, <a class="el" href="msgreply_8h_source.html#l00068">query_info::qtype</a>, <a class="el" href="module_8h_source.html#l00266">module_qstate::query_flags</a>, <a class="el" href="rbtree_8c_source.html#l00094">rbtree_init()</a>, <a class="el" href="rbtree_8h_source.html#l00069">RBTREE_NULL</a>, <a class="el" href="module_8h_source.html#l00277">module_qstate::region</a>, <a class="el" href="regional_8c_source.html#l00116">regional_alloc()</a>, <a class="el" href="regional_8c_source.html#l00146">regional_alloc_init()</a>, <a class="el" href="mesh_8h_source.html#l00173">mesh_state::replies_sent</a>, <a class="el" href="module_8h_source.html#l00271">module_qstate::reply</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="module_8h_source.html#l00273">module_qstate::return_msg</a>, <a class="el" href="module_8h_source.html#l00275">module_qstate::return_rcode</a>, <a class="el" href="mesh_8h_source.html#l00147">mesh_state::run_node</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, <a class="el" href="mesh_8h_source.html#l00160">mesh_state::sub_set</a>, and <a class="el" href="mesh_8h_source.html#l00157">mesh_state::super_set</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00548">mesh_attach_sub()</a>, <a class="el" href="mesh_8c_source.html#l00344">mesh_new_callback()</a>, and <a class="el" href="mesh_8c_source.html#l00268">mesh_new_client()</a>.</p>

</div>
</div><p>
<a class="anchor" name="f299eb48d6cd90e878d6af21d6d56ffd"></a><!-- doxytag: member="mesh.h::mesh_state_cleanup" ref="f299eb48d6cd90e878d6af21d6d56ffd" args="(struct mesh_state *mstate)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_state_cleanup           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td>
          <td class="paramname"> <em>mstate</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Cleanup a mesh state and its query state. 
<p>
Does not do rbtree or reference cleanup. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>mstate,:</em>&nbsp;</td><td>mesh state to cleanup. Its pointer may no longer be used afterwards. Cleanup rbtrees before calling this function. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="module_8h_source.html#l00194">module_env::alloc</a>, <a class="el" href="alloc_8c_source.html#l00312">alloc_reg_release()</a>, <a class="el" href="mesh_8h_source.html#l00231">mesh_cb::cb</a>, <a class="el" href="mesh_8h_source.html#l00233">mesh_cb::cb_arg</a>, <a class="el" href="mesh_8h_source.html#l00154">mesh_state::cb_list</a>, <a class="el" href="structmodule__func__block.html#04744c11b0973fa4e5d2c4945a166899">module_func_block::clear</a>, <a class="el" href="fake__event_8c_source.html#l00711">comm_point_drop_reply()</a>, <a class="el" href="module_8h_source.html#l00286">module_qstate::env</a>, <a class="el" href="module_8h_source.html#l00282">module_qstate::ext_state</a>, <a class="el" href="fptr__wlist_8h_source.html#l00067">fptr_ok</a>, <a class="el" href="fptr__wlist_8c_source.html#l00380">fptr_whitelist_mesh_cb()</a>, <a class="el" href="fptr__wlist_8c_source.html#l00344">fptr_whitelist_mod_clear()</a>, <a class="el" href="module_8h_source.html#l00192">module_env::mesh</a>, <a class="el" href="module_8h_source.html#l00284">module_qstate::minfo</a>, <a class="el" href="modstack_8h_source.html#l00054">module_stack::mod</a>, <a class="el" href="mesh_8h_source.html#l00073">mesh_area::mods</a>, <a class="el" href="module_8h_source.html#l00236">module_finished</a>, <a class="el" href="mesh_8h_source.html#l00218">mesh_cb::next</a>, <a class="el" href="mesh_8h_source.html#l00192">mesh_reply::next</a>, <a class="el" href="modstack_8h_source.html#l00052">module_stack::num</a>, <a class="el" href="mesh_8h_source.html#l00194">mesh_reply::query_reply</a>, <a class="el" href="module_8h_source.html#l00277">module_qstate::region</a>, <a class="el" href="mesh_8h_source.html#l00173">mesh_state::replies_sent</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, and <a class="el" href="packed__rrset_8h_source.html#l00159">sec_status_unchecked</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00491">mesh_state_delete()</a>.</p>

</div>
</div><p>
<a class="anchor" name="7ce7a6ad842e25531f44f4c433119e29"></a><!-- doxytag: member="mesh.h::mesh_delete_all" ref="7ce7a6ad842e25531f44f4c433119e29" args="(struct mesh_area *mesh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_delete_all           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Delete all mesh states from the mesh. 
<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>mesh,:</em>&nbsp;</td><td>the mesh area to clear </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="mesh_8h_source.html#l00121">mesh_area::forever_first</a>, <a class="el" href="mesh_8h_source.html#l00123">mesh_area::forever_last</a>, <a class="el" href="mesh_8h_source.html#l00127">mesh_area::jostle_first</a>, <a class="el" href="mesh_8h_source.html#l00129">mesh_area::jostle_last</a>, <a class="el" href="mesh_8c_source.html#l00191">mesh_delete_helper()</a>, <a class="el" href="mesh_8c_source.html#l00124">mesh_state_compare()</a>, <a class="el" href="mesh_8h_source.html#l00091">mesh_area::num_detached_states</a>, <a class="el" href="mesh_8h_source.html#l00093">mesh_area::num_forever_states</a>, <a class="el" href="mesh_8h_source.html#l00083">mesh_area::num_reply_addrs</a>, <a class="el" href="mesh_8h_source.html#l00087">mesh_area::num_reply_states</a>, <a class="el" href="rbtree_8c_source.html#l00094">rbtree_init()</a>, <a class="el" href="rbtree_8h_source.html#l00078">rbtree_t::root</a>, <a class="el" href="mesh_8h_source.html#l00078">mesh_area::run</a>, and <a class="el" href="mesh_8h_source.html#l00103">mesh_area::stats_dropped</a>.</p>

<p>Referenced by <a class="el" href="remote_8c_source.html#l01092">do_flush_requestlist()</a>, and <a class="el" href="remote_8c_source.html#l01295">do_forward()</a>.</p>

</div>
</div><p>
<a class="anchor" name="b31afaf42feefd1730cfe08cc4f51e8b"></a><!-- doxytag: member="mesh.h::mesh_area_find" ref="b31afaf42feefd1730cfe08cc4f51e8b" args="(struct mesh_area *mesh, struct query_info *qinfo, uint16_t qflags, int prime)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structmesh__state.html">mesh_state</a>* mesh_area_find           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qflags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>prime</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>
Find a mesh state in the mesh area. 
<p>
Pass relevant flags.<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>mesh,:</em>&nbsp;</td><td>the mesh area to look in. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>what query </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qflags,:</em>&nbsp;</td><td>if RD / CD bit is set or not. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>prime,:</em>&nbsp;</td><td>if it is a priming query. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: mesh state or NULL if not found. </dd></dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="module_8h_source.html#l00268">module_qstate::is_priming</a>, <a class="el" href="rbtree_8h_source.html#l00063">rbnode_t::key</a>, <a class="el" href="mesh_8h_source.html#l00145">mesh_state::node</a>, <a class="el" href="module_8h_source.html#l00264">module_qstate::qinfo</a>, <a class="el" href="module_8h_source.html#l00266">module_qstate::query_flags</a>, <a class="el" href="rbtree_8c_source.html#l00280">rbtree_search()</a>, and <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00548">mesh_attach_sub()</a>, <a class="el" href="mesh_8c_source.html#l01009">mesh_detect_cycle()</a>, <a class="el" href="mesh_8c_source.html#l00344">mesh_new_callback()</a>, and <a class="el" href="mesh_8c_source.html#l00268">mesh_new_client()</a>.</p>

</div>
</div><p>
<a class="anchor" name="957ce7a5453c385df6243868af78b0ef"></a><!-- doxytag: member="mesh.h::mesh_state_attachment" ref="957ce7a5453c385df6243868af78b0ef" args="(struct mesh_state *super, struct mesh_state *sub)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mesh_state_attachment           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td>
          <td class="paramname"> <em>super</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td>
          <td class="paramname"> <em>sub</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Setup attachment super/sub relation between super and sub mesh state. 
<p>
The relation must not be present when calling the function. Does not update stat items in <a class="el" href="structmesh__area.html" title="Mesh of query states.">mesh_area</a>. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>super,:</em>&nbsp;</td><td>super state. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>sub,:</em>&nbsp;</td><td>sub state. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on alloc error. </dd></dl>

<p>References <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="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="mesh_8h_source.html#l00182">mesh_state_ref::node</a>, <a class="el" href="rbtree_8c_source.html#l00227">rbtree_insert()</a>, <a class="el" href="module_8h_source.html#l00277">module_qstate::region</a>, <a class="el" href="regional_8c_source.html#l00116">regional_alloc()</a>, <a class="el" href="mesh_8h_source.html#l00184">mesh_state_ref::s</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, <a class="el" href="mesh_8h_source.html#l00160">mesh_state::sub_set</a>, and <a class="el" href="mesh_8h_source.html#l00157">mesh_state::super_set</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00548">mesh_attach_sub()</a>.</p>

</div>
</div><p>
<a class="anchor" name="5f5dd39ad7d400cb172304cf8f1c7a28"></a><!-- doxytag: member="mesh.h::mesh_state_add_reply" ref="5f5dd39ad7d400cb172304cf8f1c7a28" args="(struct mesh_state *s, struct edns_data *edns, struct comm_reply *rep, uint16_t qid, uint16_t qflags, uint8_t *qname)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mesh_state_add_reply           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td>
          <td class="paramname"> <em>s</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structedns__data.html">edns_data</a> *&nbsp;</td>
          <td class="paramname"> <em>edns</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structcomm__reply.html">comm_reply</a> *&nbsp;</td>
          <td class="paramname"> <em>rep</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qflags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>qname</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Create new reply structure and attach it to a mesh state. 
<p>
Does not update stat items in mesh area. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>s,:</em>&nbsp;</td><td>the mesh state. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>edns data for reply (bufsize). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rep,:</em>&nbsp;</td><td>comm point reply info. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qid,:</em>&nbsp;</td><td>ID of reply. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qflags,:</em>&nbsp;</td><td>original query flags. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qname,:</em>&nbsp;</td><td>original query name. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on alloc error. </dd></dl>

<p>References <a class="el" href="mesh_8h_source.html#l00196">mesh_reply::edns</a>, <a class="el" href="module_8h_source.html#l00286">module_qstate::env</a>, <a class="el" href="mesh_8h_source.html#l00192">mesh_reply::next</a>, <a class="el" href="module_8h_source.html#l00200">module_env::now_tv</a>, <a class="el" href="mesh_8h_source.html#l00202">mesh_reply::qflags</a>, <a class="el" href="mesh_8h_source.html#l00200">mesh_reply::qid</a>, <a class="el" href="module_8h_source.html#l00264">module_qstate::qinfo</a>, <a class="el" href="mesh_8h_source.html#l00204">mesh_reply::qname</a>, <a class="el" href="msgreply_8h_source.html#l00066">query_info::qname_len</a>, <a class="el" href="mesh_8h_source.html#l00194">mesh_reply::query_reply</a>, <a class="el" href="module_8h_source.html#l00277">module_qstate::region</a>, <a class="el" href="regional_8c_source.html#l00116">regional_alloc()</a>, <a class="el" href="regional_8c_source.html#l00146">regional_alloc_init()</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, and <a class="el" href="mesh_8h_source.html#l00198">mesh_reply::start_time</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00268">mesh_new_client()</a>.</p>

</div>
</div><p>
<a class="anchor" name="f83e17347339ccbd1e532d61ef0f999a"></a><!-- doxytag: member="mesh.h::mesh_state_add_cb" ref="f83e17347339ccbd1e532d61ef0f999a" args="(struct mesh_state *s, struct edns_data *edns, ldns_buffer *buf, mesh_cb_func_t cb, void *cb_arg, uint16_t qid, uint16_t qflags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mesh_state_add_cb           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td>
          <td class="paramname"> <em>s</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structedns__data.html">edns_data</a> *&nbsp;</td>
          <td class="paramname"> <em>edns</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="mesh_8h.html#a95ff1039f915363c90eb4d4034e6d43">mesh_cb_func_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>cb_arg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qflags</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Create new callback structure and attach it to a mesh state. 
<p>
Does not update stat items in mesh area. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>s,:</em>&nbsp;</td><td>the mesh state. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>edns data for reply (bufsize). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buf,:</em>&nbsp;</td><td>buffer for reply </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cb,:</em>&nbsp;</td><td>callback to call with results. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cb_arg,:</em>&nbsp;</td><td>callback user arg. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qid,:</em>&nbsp;</td><td>ID of reply. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qflags,:</em>&nbsp;</td><td>original query flags. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on alloc error. </dd></dl>

<p>References <a class="el" href="mesh_8h_source.html#l00226">mesh_cb::buf</a>, <a class="el" href="mesh_8h_source.html#l00231">mesh_cb::cb</a>, <a class="el" href="mesh_8h_source.html#l00233">mesh_cb::cb_arg</a>, <a class="el" href="mesh_8h_source.html#l00154">mesh_state::cb_list</a>, <a class="el" href="mesh_8h_source.html#l00220">mesh_cb::edns</a>, <a class="el" href="fptr__wlist_8c_source.html#l00380">fptr_whitelist_mesh_cb()</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="mesh_8h_source.html#l00218">mesh_cb::next</a>, <a class="el" href="mesh_8h_source.html#l00224">mesh_cb::qflags</a>, <a class="el" href="mesh_8h_source.html#l00222">mesh_cb::qid</a>, <a class="el" href="module_8h_source.html#l00277">module_qstate::region</a>, <a class="el" href="regional_8c_source.html#l00116">regional_alloc()</a>, and <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00344">mesh_new_callback()</a>.</p>

</div>
</div><p>
<a class="anchor" name="b496ccfc51cea7af08ad26ee964877d5"></a><!-- doxytag: member="mesh.h::mesh_run" ref="b496ccfc51cea7af08ad26ee964877d5" args="(struct mesh_area *mesh, struct mesh_state *mstate, enum module_ev ev, struct outbound_entry *e)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_run           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td>
          <td class="paramname"> <em>mstate</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">enum <a class="el" href="module_8h.html#3d7416154a3bc44d78e8a6e99efc4376">module_ev</a>&nbsp;</td>
          <td class="paramname"> <em>ev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structoutbound__entry.html">outbound_entry</a> *&nbsp;</td>
          <td class="paramname"> <em>e</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Run the mesh. 
<p>
Run all runnable mesh states. Which can create new runnable mesh states. Until completion. Automatically called by mesh_report_reply and mesh_new_client as needed. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>mesh,:</em>&nbsp;</td><td>mesh area. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>mstate,:</em>&nbsp;</td><td>first mesh state to run. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ev,:</em>&nbsp;</td><td>event the mstate. Others get event_pass. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>e,:</em>&nbsp;</td><td>if a reply, its outbound <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="module_8h_source.html#l00280">module_qstate::curmod</a>, <a class="el" href="module_8h_source.html#l00286">module_qstate::env</a>, <a class="el" href="module_8h_source.html#l00282">module_qstate::ext_state</a>, <a class="el" href="fptr__wlist_8h_source.html#l00067">fptr_ok</a>, <a class="el" href="fptr__wlist_8c_source.html#l00320">fptr_whitelist_mod_operate()</a>, <a class="el" href="rbtree_8h_source.html#l00063">rbnode_t::key</a>, <a class="el" href="mesh_8c_source.html#l00843">mesh_continue()</a>, <a class="el" href="mesh_8c_source.html#l00923">mesh_log_list()</a>, <a class="el" href="mesh_8c_source.html#l00943">mesh_stats()</a>, <a class="el" href="modstack_8h_source.html#l00054">module_stack::mod</a>, <a class="el" href="mesh_8h_source.html#l00073">mesh_area::mods</a>, <a class="el" href="module_8h_source.html#l00246">module_event_pass</a>, <a class="el" href="module_8h_source.html#l00296">module_func_block::name</a>, <a class="el" href="structmodule__func__block.html#1f55e1ef508cd62f0515eb01566eba3f">module_func_block::operate</a>, <a class="el" href="rbtree_8c_source.html#l00326">rbtree_delete()</a>, <a class="el" href="regional_8c_source.html#l00090">regional_free_all()</a>, <a class="el" href="module_8h_source.html#l00271">module_qstate::reply</a>, <a class="el" href="rbtree_8h_source.html#l00078">rbtree_t::root</a>, <a class="el" href="mesh_8h_source.html#l00078">mesh_area::run</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, <a class="el" href="module_8h_source.html#l00186">module_env::scratch</a>, <a class="el" href="module_8c_source.html#l00044">strextstate()</a>, <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>, <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>, and <a class="el" href="log_8c_source.html#l00062">verbosity</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00344">mesh_new_callback()</a>, <a class="el" href="mesh_8c_source.html#l00268">mesh_new_client()</a>, and <a class="el" href="mesh_8c_source.html#l00391">mesh_report_reply()</a>.</p>

</div>
</div><p>
<a class="anchor" name="6ff838f951c7eb26ce498400c6b10ae8"></a><!-- doxytag: member="mesh.h::mesh_stats" ref="6ff838f951c7eb26ce498400c6b10ae8" args="(struct mesh_area *mesh, const char *str)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_stats           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>str</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Print some stats about the mesh to the log. 
<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>mesh,:</em>&nbsp;</td><td>the mesh to print it for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>str,:</em>&nbsp;</td><td>descriptive string to go with it. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="mesh_8h_source.html#l00109">mesh_area::histogram</a>, <a class="el" href="log_8c_source.html#l00228">log_info()</a>, <a class="el" href="mesh_8h_source.html#l00091">mesh_area::num_detached_states</a>, <a class="el" href="mesh_8h_source.html#l00083">mesh_area::num_reply_addrs</a>, <a class="el" href="mesh_8h_source.html#l00087">mesh_area::num_reply_states</a>, <a class="el" href="mesh_8h_source.html#l00105">mesh_area::replies_sent</a>, <a class="el" href="mesh_8h_source.html#l00107">mesh_area::replies_sum_wait</a>, <a class="el" href="mesh_8h_source.html#l00103">mesh_area::stats_dropped</a>, <a class="el" href="mesh_8h_source.html#l00101">mesh_area::stats_jostled</a>, <a class="el" href="timehist_8c_source.html#l00159">timehist_log()</a>, <a class="el" href="mesh_8c_source.html#l00090">timeval_divide()</a>, <a class="el" href="log_8h_source.html#l00054">VERB_DETAIL</a>, and <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00886">mesh_run()</a>, <a class="el" href="worker_8c_source.html#l01115">worker_delete()</a>, and <a class="el" href="worker_8c_source.html#l00930">worker_stat_timer_cb()</a>.</p>

</div>
</div><p>
<a class="anchor" name="7d16010448f35bd5281253ea629ff8cc"></a><!-- doxytag: member="mesh.h::mesh_stats_clear" ref="7d16010448f35bd5281253ea629ff8cc" args="(struct mesh_area *mesh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_stats_clear           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Clear the stats that the mesh keeps (number of queries serviced). 
<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>mesh,:</em>&nbsp;</td><td>the mesh </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00113">mesh_area::ans_bogus</a>, <a class="el" href="mesh_8h_source.html#l00117">mesh_area::ans_nodata</a>, <a class="el" href="mesh_8h_source.html#l00115">mesh_area::ans_rcode</a>, <a class="el" href="mesh_8h_source.html#l00111">mesh_area::ans_secure</a>, <a class="el" href="mesh_8h_source.html#l00109">mesh_area::histogram</a>, <a class="el" href="mesh_8h_source.html#l00105">mesh_area::replies_sent</a>, <a class="el" href="mesh_8h_source.html#l00107">mesh_area::replies_sum_wait</a>, <a class="el" href="mesh_8h_source.html#l00103">mesh_area::stats_dropped</a>, <a class="el" href="mesh_8h_source.html#l00101">mesh_area::stats_jostled</a>, and <a class="el" href="timehist_8c_source.html#l00105">timehist_clear()</a>.</p>

<p>Referenced by <a class="el" href="worker_8c_source.html#l01201">worker_stats_clear()</a>.</p>

</div>
</div><p>
<a class="anchor" name="df4fd6696582e458d1bb3d3d7274078a"></a><!-- doxytag: member="mesh.h::mesh_log_list" ref="df4fd6696582e458d1bb3d3d7274078a" args="(struct mesh_area *mesh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_log_list           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Print all the states in the mesh to the log. 
<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>mesh,:</em>&nbsp;</td><td>the mesh to print all states of. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="net__help_8h_source.html#l00054">BIT_CD</a>, <a class="el" href="net__help_8h_source.html#l00062">BIT_RD</a>, <a class="el" href="mesh_8h_source.html#l00154">mesh_state::cb_list</a>, <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="module_8h_source.html#l00280">module_qstate::curmod</a>, <a class="el" href="module_8h_source.html#l00268">module_qstate::is_priming</a>, <a class="el" href="msgreply_8c_source.html#l00788">log_query_info()</a>, <a class="el" href="module_8h_source.html#l00264">module_qstate::qinfo</a>, <a class="el" href="module_8h_source.html#l00266">module_qstate::query_flags</a>, <a class="el" href="rbtree_8h_source.html#l00173">RBTREE_FOR</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, <a class="el" href="mesh_8h_source.html#l00160">mesh_state::sub_set</a>, <a class="el" href="mesh_8h_source.html#l00157">mesh_state::super_set</a>, and <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00886">mesh_run()</a>.</p>

</div>
</div><p>
<a class="anchor" name="31ac4a34e17a0832381ae5af27186bc8"></a><!-- doxytag: member="mesh.h::mesh_get_mem" ref="31ac4a34e17a0832381ae5af27186bc8" args="(struct mesh_area *mesh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t mesh_get_mem           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Calculate memory size in use by mesh and all queries inside it. 
<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>mesh,:</em>&nbsp;</td><td>the mesh to examine. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>size in bytes. </dd></dl>

<p>References <a class="el" href="mesh_8h_source.html#l00080">mesh_area::all</a>, <a class="el" href="mesh_8h_source.html#l00109">mesh_area::histogram</a>, <a class="el" href="timehist_8h_source.html#l00065">timehist::num</a>, <a class="el" href="rbtree_8h_source.html#l00173">RBTREE_FOR</a>, <a class="el" href="module_8h_source.html#l00277">module_qstate::region</a>, <a class="el" href="regional_8c_source.html#l00214">regional_get_mem()</a>, and <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>.</p>

<p>Referenced by <a class="el" href="worker_8c_source.html#l00131">worker_mem_report()</a>.</p>

</div>
</div><p>
<a class="anchor" name="330696aa316ca55e871c67f8ef19c6b9"></a><!-- doxytag: member="mesh.h::mesh_detect_cycle" ref="330696aa316ca55e871c67f8ef19c6b9" args="(struct module_qstate *qstate, struct query_info *qinfo, uint16_t flags, int prime)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mesh_detect_cycle           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *&nbsp;</td>
          <td class="paramname"> <em>qstate</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>prime</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Find cycle; see if the given mesh is in the targets sub, or sub-sub, . 
<p>
.. trees. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>qstate,:</em>&nbsp;</td><td>given mesh querystate. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query info for dependency. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flags,:</em>&nbsp;</td><td>query flags of dependency. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>prime,:</em>&nbsp;</td><td>if dependency is a priming query or not. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>true if the name,type,class exists and the given qstate mesh exists as a dependency of that name. Thus if qstate becomes dependent on name,type,class then a cycle is created. </dd></dl>

<p>References <a class="el" href="module_8h_source.html#l00286">module_qstate::env</a>, <a class="el" href="mesh_8c_source.html#l00998">find_in_subsub()</a>, <a class="el" href="module_8h_source.html#l00192">module_env::mesh</a>, <a class="el" href="mesh_8c_source.html#l00769">mesh_area_find()</a>, and <a class="el" href="module_8h_source.html#l00288">module_qstate::mesh_info</a>.</p>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00289">fptr_whitelist_modenv_detect_cycle()</a>, <a class="el" href="libworker_8c_source.html#l00092">libworker_setup()</a>, and <a class="el" href="worker_8c_source.html#l00967">worker_init()</a>.</p>

</div>
</div><p>
<a class="anchor" name="6291c4bc4bcb2d953dd51ffdb71ff981"></a><!-- doxytag: member="mesh.h::mesh_make_new_space" ref="6291c4bc4bcb2d953dd51ffdb71ff981" args="(struct mesh_area *mesh)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int mesh_make_new_space           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__area.html">mesh_area</a> *&nbsp;</td>
          <td class="paramname"> <em>mesh</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Make space for another recursion state for a reply in the mesh. 
<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>mesh,:</em>&nbsp;</td><td>mesh area </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>false if no space is available. </dd></dl>

<p>References <a class="el" href="rbtree_8h_source.html#l00081">rbtree_t::count</a>, <a class="el" href="mesh_8h_source.html#l00075">mesh_area::env</a>, <a class="el" href="mesh_8h_source.html#l00129">mesh_area::jostle_last</a>, <a class="el" href="mesh_8h_source.html#l00131">mesh_area::jostle_max</a>, <a class="el" href="structmesh__state.html#b37e83ad67595e1a4b9ba91ff4f85203">mesh_state::list_select</a>, <a class="el" href="net__help_8c_source.html#l00265">log_nametypeclass()</a>, <a class="el" href="mesh_8h_source.html#l00096">mesh_area::max_reply_states</a>, <a class="el" href="mesh_8c_source.html#l00491">mesh_state_delete()</a>, <a class="el" href="mesh_8c_source.html#l00754">mesh_walk_supers()</a>, <a class="el" href="module_8h_source.html#l00200">module_env::now_tv</a>, <a class="el" href="mesh_8h_source.html#l00087">mesh_area::num_reply_states</a>, <a class="el" href="msgreply_8h_source.html#l00070">query_info::qclass</a>, <a class="el" href="module_8h_source.html#l00264">module_qstate::qinfo</a>, <a class="el" href="msgreply_8h_source.html#l00064">query_info::qname</a>, <a class="el" href="msgreply_8h_source.html#l00068">query_info::qtype</a>, <a class="el" href="mesh_8h_source.html#l00152">mesh_state::reply_list</a>, <a class="el" href="module_8h_source.html#l00273">module_qstate::return_msg</a>, <a class="el" href="module_8h_source.html#l00275">module_qstate::return_rcode</a>, <a class="el" href="mesh_8h_source.html#l00150">mesh_state::s</a>, <a class="el" href="mesh_8h_source.html#l00198">mesh_reply::start_time</a>, <a class="el" href="mesh_8h_source.html#l00101">mesh_area::stats_jostled</a>, <a class="el" href="mesh_8h_source.html#l00157">mesh_state::super_set</a>, <a class="el" href="mesh_8c_source.html#l00109">timeval_smaller()</a>, <a class="el" href="mesh_8c_source.html#l00061">timeval_subtract()</a>, <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>, and <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00268">mesh_new_client()</a>.</p>

</div>
</div><p>
<a class="anchor" name="155d7740adc439218877b4d7a6d5a456"></a><!-- doxytag: member="mesh.h::mesh_list_insert" ref="155d7740adc439218877b4d7a6d5a456" args="(struct mesh_state *m, struct mesh_state **fp, struct mesh_state **lp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_list_insert           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td>
          <td class="paramname"> <em>m</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> **&nbsp;</td>
          <td class="paramname"> <em>fp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> **&nbsp;</td>
          <td class="paramname"> <em>lp</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Insert mesh state into a double linked list. 
<p>
Inserted at end. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>m,:</em>&nbsp;</td><td>mesh state. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>fp,:</em>&nbsp;</td><td>pointer to the first-elem-pointer of the list. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>lp,:</em>&nbsp;</td><td>pointer to the last-elem-pointer of the list. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00167">mesh_state::next</a>, and <a class="el" href="mesh_8h_source.html#l00165">mesh_state::prev</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00268">mesh_new_client()</a>.</p>

</div>
</div><p>
<a class="anchor" name="af73a8b7109115be23ce03348cf9c3e0"></a><!-- doxytag: member="mesh.h::mesh_list_remove" ref="af73a8b7109115be23ce03348cf9c3e0" args="(struct mesh_state *m, struct mesh_state **fp, struct mesh_state **lp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void mesh_list_remove           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> *&nbsp;</td>
          <td class="paramname"> <em>m</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> **&nbsp;</td>
          <td class="paramname"> <em>fp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structmesh__state.html">mesh_state</a> **&nbsp;</td>
          <td class="paramname"> <em>lp</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Remove mesh state from a double linked list. 
<p>
Remove from any position. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>m,:</em>&nbsp;</td><td>mesh state. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>fp,:</em>&nbsp;</td><td>pointer to the first-elem-pointer of the list. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>lp,:</em>&nbsp;</td><td>pointer to the last-elem-pointer of the list. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="mesh_8h_source.html#l00167">mesh_state::next</a>, and <a class="el" href="mesh_8h_source.html#l00165">mesh_state::prev</a>.</p>

<p>Referenced by <a class="el" href="mesh_8c_source.html#l00491">mesh_state_delete()</a>.</p>

</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 13 06:46:31 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>