Sophie

Sophie

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

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: daemon/worker.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="dir_25e37f0a75013b615a5ba63405adf018.html">daemon</a>
  </div>
</div>
<div class="contents">
<h1>worker.c File Reference</h1>This file implements the <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> that handles callbacks on events, for <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> requests.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&quot;</code><br>
<code>#include &quot;<a class="el" href="log_8h.html">util/log.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="net__help_8h.html">util/net_help.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="random_8h.html">util/random.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="worker_8h.html">daemon/worker.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="daemon_8h.html">daemon/daemon.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="remote_8h.html">daemon/remote.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="acl__list_8h.html">daemon/acl_list.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="config__file_8h.html">util/config_file.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="regional_8h.html">util/regional.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="slabhash_8h.html">util/storage/slabhash.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="listen__dnsport_8h.html">services/listen_dnsport.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="outside__network_8h.html">services/outside_network.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="outbound__list_8h.html">services/outbound_list.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="rrset_8h.html">services/cache/rrset.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="infra_8h.html">services/cache/infra.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="dns_8h.html">services/cache/dns.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="mesh_8h.html">services/mesh.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="localzone_8h.html">services/localzone.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="msgparse_8h.html">util/data/msgparse.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="msgencode_8h.html">util/data/msgencode.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="dname_8h.html">util/data/dname.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="fptr__wlist_8h.html">util/fptr_wlist.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="tube_8h.html">util/tube.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="iter__fwd_8h.html">iterator/iter_fwd.h</a>&quot;</code><br>
<code>#include &lt;sys/types.h&gt;</code><br>
<code>#include &lt;netdb.h&gt;</code><br>
<code>#include &lt;signal.h&gt;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="22754c1495413e0defc1b246cc88c4d4"></a><!-- doxytag: member="worker.c::NORMAL_UDP_SIZE" ref="22754c1495413e0defc1b246cc88c4d4" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#22754c1495413e0defc1b246cc88c4d4">NORMAL_UDP_SIZE</a>&nbsp;&nbsp;&nbsp;512</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Size of an UDP datagram. <br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f89ced7e7b0bca118608e2a8f1fe0e37"></a><!-- doxytag: member="worker.c::worker_mem_report" ref="f89ced7e7b0bca118608e2a8f1fe0e37" args="(struct worker *worker, struct serviced_query *cur_serv)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#f89ced7e7b0bca118608e2a8f1fe0e37">worker_mem_report</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>, struct <a class="el" href="structserviced__query.html">serviced_query</a> *cur_serv)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Report on memory usage by this thread and global. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#20c6c3a978c553b7c09cf8651b1930d1">worker_send_cmd</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>, enum <a class="el" href="worker_8h.html#4c2a7afc8f343d819621f6eea201a0e9">worker_commands</a> cmd)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a command to a <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>.  <a href="#20c6c3a978c553b7c09cf8651b1930d1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0f46f9b79354d9e2512c8f6bb3c91891"></a><!-- doxytag: member="worker.c::worker_handle_reply" ref="0f46f9b79354d9e2512c8f6bb3c91891" args="(struct comm_point *c, void *arg, int error, struct comm_reply *reply_info)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#0f46f9b79354d9e2512c8f6bb3c91891">worker_handle_reply</a> (struct <a class="el" href="structcomm__point.html">comm_point</a> *c, void *arg, int error, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *<a class="el" href="structreply__info.html">reply_info</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">process incoming replies from the network <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0a3c5d60a3451c6ec97532b3ed3de1ca"></a><!-- doxytag: member="worker.c::worker_handle_service_reply" ref="0a3c5d60a3451c6ec97532b3ed3de1ca" args="(struct comm_point *c, void *arg, int error, struct comm_reply *reply_info)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#0a3c5d60a3451c6ec97532b3ed3de1ca">worker_handle_service_reply</a> (struct <a class="el" href="structcomm__point.html">comm_point</a> *c, void *arg, int error, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *<a class="el" href="structreply__info.html">reply_info</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">process incoming serviced query replies from the network <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#14c042e98a3e8850861d7125be9aa724">worker_check_request</a> (ldns_buffer *pkt, struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">check request sanity.  <a href="#14c042e98a3e8850861d7125be9aa724"></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="worker_8c.html#653c06d4fc9f40247b615f29c1fb60e3">worker_handle_control_cmd</a> (struct <a class="el" href="structtube.html">tube</a> *<a class="el" href="structtube.html">tube</a>, uint8_t *msg, size_t len, int error, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">process control messages from the main thread.  <a href="#653c06d4fc9f40247b615f29c1fb60e3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a8c4a533304f60ab7b28cd7025e87b5b"></a><!-- doxytag: member="worker.c::check_delegation_secure" ref="a8c4a533304f60ab7b28cd7025e87b5b" args="(struct reply_info *rep)" -->
static enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#a8c4a533304f60ab7b28cd7025e87b5b">check_delegation_secure</a> (struct <a class="el" href="structreply__info.html">reply_info</a> *rep)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">check if a delegation is secure <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="43762e945f5f2f72cacd5ac0292879bc"></a><!-- doxytag: member="worker.c::deleg_remove_nonsecure_additional" ref="43762e945f5f2f72cacd5ac0292879bc" args="(struct reply_info *rep)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#43762e945f5f2f72cacd5ac0292879bc">deleg_remove_nonsecure_additional</a> (struct <a class="el" href="structreply__info.html">reply_info</a> *rep)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">remove nonsecure from a delegation referral additional section <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e564849320fe60d5d98a7e31957d0d1c"></a><!-- doxytag: member="worker.c::answer_norec_from_cache" ref="e564849320fe60d5d98a7e31957d0d1c" args="(struct worker *worker, struct query_info *qinfo, uint16_t id, uint16_t flags, struct comm_reply *repinfo, struct edns_data *edns)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#e564849320fe60d5d98a7e31957d0d1c">answer_norec_from_cache</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, uint16_t id, uint16_t flags, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *repinfo, struct <a class="el" href="structedns__data.html">edns_data</a> *edns)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">answer nonrecursive query from the cache <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1761ce6e1398095be8e15c120ee1fbcf"></a><!-- doxytag: member="worker.c::answer_from_cache" ref="1761ce6e1398095be8e15c120ee1fbcf" args="(struct worker *worker, struct query_info *qinfo, struct reply_info *rep, uint16_t id, uint16_t flags, struct comm_reply *repinfo, struct edns_data *edns)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#1761ce6e1398095be8e15c120ee1fbcf">answer_from_cache</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, struct <a class="el" href="structreply__info.html">reply_info</a> *rep, uint16_t id, uint16_t flags, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *repinfo, struct <a class="el" href="structedns__data.html">edns_data</a> *edns)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">answer query from the cache <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#21f7e3069cbf9cff2025567f583e1610">chaos_replystr</a> (ldns_buffer *pkt, const char *str, struct <a class="el" href="structedns__data.html">edns_data</a> *edns)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fill CH class answer into buffer.  <a href="#21f7e3069cbf9cff2025567f583e1610"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#a64fa754b22aa75fa442649d422f0158">answer_chaos</a> (struct <a class="el" href="structworker.html">worker</a> *w, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, struct <a class="el" href="structedns__data.html">edns_data</a> *edns, ldns_buffer *pkt)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Answer CH class queries.  <a href="#a64fa754b22aa75fa442649d422f0158"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fcf378607bb10215edcbf7f6408c82f9"></a><!-- doxytag: member="worker.c::worker_handle_request" ref="fcf378607bb10215edcbf7f6408c82f9" args="(struct comm_point *c, void *arg, int error, struct comm_reply *repinfo)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#fcf378607bb10215edcbf7f6408c82f9">worker_handle_request</a> (struct <a class="el" href="structcomm__point.html">comm_point</a> *c, void *arg, int error, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *repinfo)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">handles callbacks from listening event interface <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#2512a22356a01381239789f1a2b8011d">worker_sighandler</a> (int sig, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Worker signal handler function.  <a href="#2512a22356a01381239789f1a2b8011d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="20658542f63e7f7edc29bb7472399350"></a><!-- doxytag: member="worker.c::worker_restart_timer" ref="20658542f63e7f7edc29bb7472399350" args="(struct worker *worker)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#20658542f63e7f7edc29bb7472399350">worker_restart_timer</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">restart statistics timer for <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>, if enabled <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b1fedeb0e7538a35d461df5508d7269"></a><!-- doxytag: member="worker.c::worker_stat_timer_cb" ref="4b1fedeb0e7538a35d461df5508d7269" args="(void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#4b1fedeb0e7538a35d461df5508d7269">worker_stat_timer_cb</a> (void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">statistics timer callback handler <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structworker.html">worker</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#0e249173d75ad3e0eb85792d045b03d0">worker_create</a> (struct <a class="el" href="structdaemon.html">daemon</a> *<a class="el" href="structdaemon.html">daemon</a>, int id, int *ports, int n)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create the <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> structure.  <a href="#0e249173d75ad3e0eb85792d045b03d0"></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="worker_8c.html#b9337f2a0a91aa88b32759a677944690">worker_init</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>, struct <a class="el" href="structconfig__file.html">config_file</a> *cfg, struct <a class="el" href="structlisten__port.html">listen_port</a> *ports, int do_sigs)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>.  <a href="#b9337f2a0a91aa88b32759a677944690"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8b33ce1079686fec713881470d718b88"></a><!-- doxytag: member="worker.c::worker_work" ref="8b33ce1079686fec713881470d718b88" args="(struct worker *worker)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#8b33ce1079686fec713881470d718b88">worker_work</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Make <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> work. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d1b320ceb21d98cf6306f46b74e0bf86"></a><!-- doxytag: member="worker.c::worker_delete" ref="d1b320ceb21d98cf6306f46b74e0bf86" args="(struct worker *worker)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#d1b320ceb21d98cf6306f46b74e0bf86">worker_delete</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</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="worker_8c.html#ef1a7162094526a35c2023152ff01023">worker_send_packet</a> (ldns_buffer *pkt, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *q, int use_tcp)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Worker service routine to send udp messages for modules.  <a href="#ef1a7162094526a35c2023152ff01023"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f5b9c2ed1fbc90f9c34e07261f66306c"></a><!-- doxytag: member="worker.c::outbound_entry_compare" ref="f5b9c2ed1fbc90f9c34e07261f66306c" args="(void *a, void *b)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#f5b9c2ed1fbc90f9c34e07261f66306c">outbound_entry_compare</a> (void *a, void *b)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare outbound <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> qstates <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structoutbound__entry.html">outbound_entry</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#8e3f0c71d6b2179c5c474da448eefc94">worker_send_query</a> (uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen, struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *q)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Worker service routine to send serviced queries to authoritative servers.  <a href="#8e3f0c71d6b2179c5c474da448eefc94"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1b9c9e5b70ff27da19aa164deb836d48"></a><!-- doxytag: member="worker.c::worker_alloc_cleanup" ref="1b9c9e5b70ff27da19aa164deb836d48" args="(void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#1b9c9e5b70ff27da19aa164deb836d48">worker_alloc_cleanup</a> (void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">cleanup the cache to remove all rrset IDs from it, arg is <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</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="worker_8c.html#b33c9e344462613b68129de114adb6b7">worker_stats_clear</a> (struct <a class="el" href="structworker.html">worker</a> *<a class="el" href="structworker.html">worker</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Init <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> stats - includes server_stats_init, outside network and mesh.  <a href="#b33c9e344462613b68129de114adb6b7"></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="worker_8c.html#89bbf813f6ca06398f65f38c39cf4d0e">libworker_send_packet</a> (ldns_buffer *pkt, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *q, int use_tcp)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Worker service routine to send udp messages for modules.  <a href="#89bbf813f6ca06398f65f38c39cf4d0e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structoutbound__entry.html">outbound_entry</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#b24e8e1d8bd73e2450110d278a274383">libworker_send_query</a> (uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen, struct <a class="el" href="structmodule__qstate.html">module_qstate</a> *q)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Worker service routine to send serviced queries to authoritative servers.  <a href="#b24e8e1d8bd73e2450110d278a274383"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="deeeb1bfacd3fb0769af71c6789ed01c"></a><!-- doxytag: member="worker.c::libworker_handle_reply" ref="deeeb1bfacd3fb0769af71c6789ed01c" args="(struct comm_point *c, void *arg, int error, struct comm_reply *reply_info)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#deeeb1bfacd3fb0769af71c6789ed01c">libworker_handle_reply</a> (struct <a class="el" href="structcomm__point.html">comm_point</a> *c, void *arg, int error, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *<a class="el" href="structreply__info.html">reply_info</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">process incoming replies from the network <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6359e59371e5a36aa61bdceaa758b39b"></a><!-- doxytag: member="worker.c::libworker_handle_service_reply" ref="6359e59371e5a36aa61bdceaa758b39b" args="(struct comm_point *c, void *arg, int error, struct comm_reply *reply_info)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#6359e59371e5a36aa61bdceaa758b39b">libworker_handle_service_reply</a> (struct <a class="el" href="structcomm__point.html">comm_point</a> *c, void *arg, int error, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *<a class="el" href="structreply__info.html">reply_info</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">process incoming serviced query replies from the network <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="13200a93317728b8885c4f1b8d9c5b5b"></a><!-- doxytag: member="worker.c::libworker_handle_control_cmd" ref="13200a93317728b8885c4f1b8d9c5b5b" args="(struct tube *tube, uint8_t *buffer, size_t len, int error, void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#13200a93317728b8885c4f1b8d9c5b5b">libworker_handle_control_cmd</a> (struct <a class="el" href="structtube.html">tube</a> *<a class="el" href="structtube.html">tube</a>, uint8_t *buffer, size_t len, int error, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">handle control command coming into server <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="93c5911c6d2fee65de98783486087607"></a><!-- doxytag: member="worker.c::libworker_fg_done_cb" ref="93c5911c6d2fee65de98783486087607" args="(void *arg, int rcode, ldns_buffer *buf, enum sec_status s)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#93c5911c6d2fee65de98783486087607">libworker_fg_done_cb</a> (void *arg, int rcode, ldns_buffer *buf, enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a> s)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">mesh callback with fg results <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="054233c7ba5bd6406025b89c6049fc50"></a><!-- doxytag: member="worker.c::libworker_bg_done_cb" ref="054233c7ba5bd6406025b89c6049fc50" args="(void *arg, int rcode, ldns_buffer *buf, enum sec_status s)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#054233c7ba5bd6406025b89c6049fc50">libworker_bg_done_cb</a> (void *arg, int rcode, ldns_buffer *buf, enum <a class="el" href="packed__rrset_8h.html#ecbbb9607758922722abc9a49d1097bb">sec_status</a> s)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">mesh callback with bg results <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7bdd8a1e5283b181bc198b423dba85b8"></a><!-- doxytag: member="worker.c::context_query_cmp" ref="7bdd8a1e5283b181bc198b423dba85b8" args="(const void *a, const void *b)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#7bdd8a1e5283b181bc198b423dba85b8">context_query_cmp</a> (const void *a, const void *b)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare two <a class="el" href="structctx__query.html" title="The queries outstanding for the libunbound resolver.">ctx_query</a> elements <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="worker_8c.html#064389992b366439d303efdaa985287c">order_lock_cmp</a> (const void *e1, const void *e2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Due to module breakage by fptr wlist, these test app declarations are presented here.  <a href="#064389992b366439d303efdaa985287c"></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="worker_8c.html#323f985b88ca5d4902caa79428dbe899">codeline_cmp</a> (const void *a, const void *b)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare two <a class="el" href="structcodeline.html" title="The allocation statistics block.">codeline</a> structs for rbtree from memstats test app  <a href="#323f985b88ca5d4902caa79428dbe899"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This file implements the <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> that handles callbacks on events, for <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> requests. 
<p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="20c6c3a978c553b7c09cf8651b1930d1"></a><!-- doxytag: member="worker.c::worker_send_cmd" ref="20c6c3a978c553b7c09cf8651b1930d1" args="(struct worker *worker, enum worker_commands cmd)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void worker_send_cmd           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structworker.html">worker</a> *&nbsp;</td>
          <td class="paramname"> <em>worker</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">enum <a class="el" href="worker_8h.html#4c2a7afc8f343d819621f6eea201a0e9">worker_commands</a>&nbsp;</td>
          <td class="paramname"> <em>cmd</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Send a command to a <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>. 
<p>
Uses blocking writes. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>,:</em>&nbsp;</td><td><a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> to send command to. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cmd,:</em>&nbsp;</td><td>command to send. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="worker_8h_source.html#l00087">worker::cmd</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, and <a class="el" href="tube_8c_source.html#l00281">tube_write_msg()</a>.</p>

<p>Referenced by <a class="el" href="daemon_8c_source.html#l00377">daemon_stop_others()</a>, <a class="el" href="remote_8c_source.html#l01464">distribute_cmd()</a>, and <a class="el" href="stats_8c_source.html#l00151">server_stats_obtain()</a>.</p>

</div>
</div><p>
<a class="anchor" name="14c042e98a3e8850861d7125be9aa724"></a><!-- doxytag: member="worker.c::worker_check_request" ref="14c042e98a3e8850861d7125be9aa724" args="(ldns_buffer *pkt, struct worker *worker)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int worker_check_request           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structworker.html">worker</a> *&nbsp;</td>
          <td class="paramname"> <em>worker</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
check request sanity. 
<p>
Returns error code, 0 OK, or -1 discard. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>the wire packet to examine for sanity. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>,:</em>&nbsp;</td><td>parameters for checking. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="daemon_8h_source.html#l00068">daemon::cfg</a>, <a class="el" href="worker_8h_source.html#l00083">worker::daemon</a>, <a class="el" href="config__file_8h_source.html#l00145">config_file::harden_large_queries</a>, <a class="el" href="worker_8c_source.html#l00082">NORMAL_UDP_SIZE</a>, <a class="el" href="log_8h_source.html#l00056">VERB_QUERY</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="653c06d4fc9f40247b615f29c1fb60e3"></a><!-- doxytag: member="worker.c::worker_handle_control_cmd" ref="653c06d4fc9f40247b615f29c1fb60e3" args="(struct tube *tube, uint8_t *msg, size_t len, int error, void *arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void worker_handle_control_cmd           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structtube.html">tube</a> *&nbsp;</td>
          <td class="paramname"> <em>tube</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>msg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>error</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>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>
process control messages from the main thread. 
<p>
Frees the control command message. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structtube.html" title="A pipe.">tube</a>,:</em>&nbsp;</td><td><a class="el" href="structtube.html" title="A pipe.">tube</a> control message came on. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>msg,:</em>&nbsp;</td><td>message contents. Is freed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</td><td>length of message. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>error,:</em>&nbsp;</td><td>if error (NETEVENT_*) happened. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>arg,:</em>&nbsp;</td><td>user argument </td></tr>
  </table>
</dl>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00373">fptr_whitelist_tube_listen()</a>, and <a class="el" href="worker_8c_source.html#l00967">worker_init()</a>.</p>

</div>
</div><p>
<a class="anchor" name="21f7e3069cbf9cff2025567f583e1610"></a><!-- doxytag: member="worker.c::chaos_replystr" ref="21f7e3069cbf9cff2025567f583e1610" args="(ldns_buffer *pkt, const char *str, struct edns_data *edns)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void chaos_replystr           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>str</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><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Fill CH class answer into buffer. 
<p>
Keeps query. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>buffer </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>str,:</em>&nbsp;</td><td>string to put into text record (&lt;255). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>edns reply information. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="msgencode_8c_source.html#l00691">attach_edns_record()</a>, <a class="el" href="net__help_8h_source.html#l00068">BIT_QR</a>, <a class="el" href="net__help_8h_source.html#l00060">BIT_RA</a>, <a class="el" href="msgparse_8h_source.html#l00210">edns_data::bits</a>, <a class="el" href="net__help_8h_source.html#l00081">EDNS_ADVERTISED_SIZE</a>, <a class="el" href="net__help_8h_source.html#l00079">EDNS_ADVERTISED_VERSION</a>, <a class="el" href="net__help_8h_source.html#l00083">EDNS_DO</a>, <a class="el" href="msgparse_8h_source.html#l00208">edns_data::edns_version</a>, <a class="el" href="dname_8c_source.html#l00050">query_dname_len()</a>, and <a class="el" href="msgparse_8h_source.html#l00212">edns_data::udp_size</a>.</p>

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

</div>
</div><p>
<a class="anchor" name="a64fa754b22aa75fa442649d422f0158"></a><!-- doxytag: member="worker.c::answer_chaos" ref="a64fa754b22aa75fa442649d422f0158" args="(struct worker *w, struct query_info *qinfo, struct edns_data *edns, ldns_buffer *pkt)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int answer_chaos           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structworker.html">worker</a> *&nbsp;</td>
          <td class="paramname"> <em>w</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">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>pkt</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Answer CH class queries. 
<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>w,:</em>&nbsp;</td><td><a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query info. Pointer into packet buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>edns info from query. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>packet buffer. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: true if a reply is to be sent. </dd></dl>

<p>References <a class="el" href="module_8h_source.html#l00073">module_env::cfg</a>, <a class="el" href="worker_8c_source.html#l00598">chaos_replystr()</a>, <a class="el" href="worker_8h_source.html#l00120">worker::env</a>, <a class="el" href="config__file_8h_source.html#l00178">config_file::hide_identity</a>, <a class="el" href="config__file_8h_source.html#l00180">config_file::hide_version</a>, <a class="el" href="config__file_8h_source.html#l00182">config_file::identity</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</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="dname_8c_source.html#l00096">query_dname_compare()</a>, and <a class="el" href="config__file_8h_source.html#l00184">config_file::version</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="2512a22356a01381239789f1a2b8011d"></a><!-- doxytag: member="worker.c::worker_sighandler" ref="2512a22356a01381239789f1a2b8011d" args="(int sig, void *arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void worker_sighandler           </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>sig</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>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>
Worker signal handler function. 
<p>
User argument is the <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> itself. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>sig,:</em>&nbsp;</td><td>signal number. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>arg,:</em>&nbsp;</td><td>the <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> (main <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>) that handles signals. </td></tr>
  </table>
</dl>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00113">fptr_whitelist_comm_signal()</a>, <a class="el" href="daemon_8c_source.html#l00134">signal_handling_playback()</a>, and <a class="el" href="worker_8c_source.html#l00967">worker_init()</a>.</p>

</div>
</div><p>
<a class="anchor" name="0e249173d75ad3e0eb85792d045b03d0"></a><!-- doxytag: member="worker.c::worker_create" ref="0e249173d75ad3e0eb85792d045b03d0" args="(struct daemon *daemon, int id, int *ports, int n)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structworker.html">worker</a>* worker_create           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structdaemon.html">daemon</a> *&nbsp;</td>
          <td class="paramname"> <em>daemon</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>ports</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>n</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 the <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> structure. 
<p>
Bare bones version, zeroed struct, with backpointers only. Use worker_init on it later. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structdaemon.html" title="Structure holding worker list.">daemon</a>,:</em>&nbsp;</td><td>the <a class="el" href="structdaemon.html" title="Structure holding worker list.">daemon</a> that this <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> thread is part of. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>id,:</em>&nbsp;</td><td>the thread number from 0.. numthreads-1. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ports,:</em>&nbsp;</td><td>the ports it is allowed to use, array. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>n,:</em>&nbsp;</td><td>the number of ports. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: the new <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> or NULL on alloc failure. </dd></dl>

<p>References <a class="el" href="worker_8h_source.html#l00087">worker::cmd</a>, <a class="el" href="worker_8h_source.html#l00083">worker::daemon</a>, <a class="el" href="net__help_8c_source.html#l00138">memdup()</a>, <a class="el" href="worker_8h_source.html#l00097">worker::numports</a>, <a class="el" href="worker_8h_source.html#l00095">worker::ports</a>, <a class="el" href="worker_8h_source.html#l00081">worker::thread_num</a>, and <a class="el" href="tube_8c_source.html#l00051">tube_create()</a>.</p>

<p>Referenced by <a class="el" href="daemon_8c_source.html#l00276">daemon_create_workers()</a>.</p>

</div>
</div><p>
<a class="anchor" name="b9337f2a0a91aa88b32759a677944690"></a><!-- doxytag: member="worker.c::worker_init" ref="b9337f2a0a91aa88b32759a677944690" args="(struct worker *worker, struct config_file *cfg, struct listen_port *ports, int do_sigs)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int worker_init           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structworker.html">worker</a> *&nbsp;</td>
          <td class="paramname"> <em>worker</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structconfig__file.html">config_file</a> *&nbsp;</td>
          <td class="paramname"> <em>cfg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlisten__port.html">listen_port</a> *&nbsp;</td>
          <td class="paramname"> <em>ports</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>do_sigs</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Initialize <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>. 
<p>
Allocates event base, listens to ports <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>,:</em>&nbsp;</td><td><a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> to initialize, created with worker_create. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cfg,:</em>&nbsp;</td><td>configuration settings. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ports,:</em>&nbsp;</td><td>list of shared query ports. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>do_sigs,:</em>&nbsp;</td><td>if true, <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> installs signal handlers. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: false on error. </dd></dl>

<p>References <a class="el" href="module_8h_source.html#l00194">module_env::alloc</a>, <a class="el" href="worker_8h_source.html#l00113">worker::alloc</a>, <a class="el" href="alloc_8c_source.html#l00097">alloc_init()</a>, <a class="el" href="alloc_8c_source.html#l00326">alloc_set_id_cleanup()</a>, <a class="el" href="structmodule__env.html#40f3519285e6f6a44648463e777f869f">module_env::attach_sub</a>, <a class="el" href="worker_8h_source.html#l00093">worker::back</a>, <a class="el" href="worker_8h_source.html#l00089">worker::base</a>, <a class="el" href="module_8h_source.html#l00073">module_env::cfg</a>, <a class="el" href="worker_8h_source.html#l00087">worker::cmd</a>, <a class="el" href="fake__event_8c_source.html#l00599">comm_base_create()</a>, <a class="el" href="fake__event_8c_source.html#l00633">comm_base_timept()</a>, <a class="el" href="fake__event_8c_source.html#l00671">comm_signal_bind()</a>, <a class="el" href="fake__event_8c_source.html#l00661">comm_signal_create()</a>, <a class="el" href="fake__event_8c_source.html#l01142">comm_timer_create()</a>, <a class="el" href="worker_8h_source.html#l00099">worker::comsig</a>, <a class="el" href="worker_8h_source.html#l00083">worker::daemon</a>, <a class="el" href="remote_8c_source.html#l00358">daemon_remote_open_accept()</a>, <a class="el" href="structmodule__env.html#aa6a1207abf26c0bc196b2733b5f53d7">module_env::detach_subs</a>, <a class="el" href="structmodule__env.html#e51393ea363c9fdd4239e2816f140e21">module_env::detect_cycle</a>, <a class="el" href="config__file_8h_source.html#l00069">config_file::do_ip4</a>, <a class="el" href="config__file_8h_source.html#l00071">config_file::do_ip6</a>, <a class="el" href="config__file_8h_source.html#l00075">config_file::do_tcp</a>, <a class="el" href="worker_8h_source.html#l00120">worker::env</a>, <a class="el" href="daemon_8h_source.html#l00094">daemon::env</a>, <a class="el" href="iter__fwd_8c_source.html#l00297">forwards_apply_cfg()</a>, <a class="el" href="iter__fwd_8c_source.html#l00067">forwards_create()</a>, <a class="el" href="worker_8h_source.html#l00091">worker::front</a>, <a class="el" href="module_8h_source.html#l00214">module_env::fwds</a>, <a class="el" href="config__file_8h_source.html#l00082">config_file::incoming_num_tcp</a>, <a class="el" href="module_8h_source.html#l00079">module_env::infra_cache</a>, <a class="el" href="structmodule__env.html#61f27ef3c7bf98b6d7e6642719c3b91d">module_env::kill_sub</a>, <a class="el" href="listen__dnsport_8c_source.html#l00534">listen_create()</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="log_8c_source.html#l00150">log_set_time()</a>, <a class="el" href="module_8h_source.html#l00192">module_env::mesh</a>, <a class="el" href="mesh_8c_source.html#l00548">mesh_attach_sub()</a>, <a class="el" href="mesh_8c_source.html#l00156">mesh_create()</a>, <a class="el" href="mesh_8c_source.html#l00528">mesh_detach_subs()</a>, <a class="el" href="mesh_8c_source.html#l01009">mesh_detect_cycle()</a>, <a class="el" href="mesh_8c_source.html#l00491">mesh_state_delete()</a>, <a class="el" href="daemon_8h_source.html#l00096">daemon::mods</a>, <a class="el" href="config__file_8h_source.html#l00087">config_file::msg_buffer_size</a>, <a class="el" href="worker_8h_source.html#l00111">worker::need_to_exit</a>, <a class="el" href="module_8h_source.html#l00198">module_env::now</a>, <a class="el" href="module_8h_source.html#l00200">module_env::now_tv</a>, <a class="el" href="config__file_8h_source.html#l00125">config_file::num_out_ifs</a>, <a class="el" href="config__file_8h_source.html#l00093">config_file::num_queries_per_thread</a>, <a class="el" href="worker_8h_source.html#l00097">worker::numports</a>, <a class="el" href="config__file_8h_source.html#l00127">config_file::out_ifs</a>, <a class="el" href="config__file_8h_source.html#l00078">config_file::outgoing_num_ports</a>, <a class="el" href="config__file_8h_source.html#l00080">config_file::outgoing_num_tcp</a>, <a class="el" href="outside__network_8c_source.html#l00468">outside_network_create()</a>, <a class="el" href="worker_8h_source.html#l00095">worker::ports</a>, <a class="el" href="daemon_8h_source.html#l00082">daemon::rc</a>, <a class="el" href="daemon_8h_source.html#l00080">daemon::rc_ports</a>, <a class="el" href="regional_8c_source.html#l00079">regional_create_custom()</a>, <a class="el" href="worker_8h_source.html#l00106">worker::request_size</a>, <a class="el" href="module_8h_source.html#l00196">module_env::rnd</a>, <a class="el" href="worker_8h_source.html#l00109">worker::rndstate</a>, <a class="el" href="module_8h_source.html#l00186">module_env::scratch</a>, <a class="el" href="module_8h_source.html#l00188">module_env::scratch_buffer</a>, <a class="el" href="worker_8h_source.html#l00117">worker::scratchpad</a>, <a class="el" href="structmodule__env.html#b4388c4289bb9df8ab5ecf8e4f9480c8">module_env::send_packet</a>, <a class="el" href="structmodule__env.html#02d9f870e4ff311be7f51180cd71890d">module_env::send_query</a>, <a class="el" href="stats_8c_source.html#l00068">server_stats_init()</a>, <a class="el" href="config__file_8h_source.html#l00057">config_file::stat_interval</a>, <a class="el" href="worker_8h_source.html#l00103">worker::stat_timer</a>, <a class="el" href="worker_8h_source.html#l00115">worker::stats</a>, <a class="el" href="daemon_8h_source.html#l00092">daemon::superalloc</a>, <a class="el" href="worker_8h_source.html#l00081">worker::thread_num</a>, <a class="el" href="tube_8c_source.html#l00407">tube_setup_bg_listen()</a>, <a class="el" href="random_8c_source.html#l00154">ub_initstate()</a>, <a class="el" href="locks_8c_source.html#l00074">ub_thread_sig_unblock()</a>, <a class="el" href="config__file_8h_source.html#l00159">config_file::unwanted_threshold</a>, <a class="el" href="config__file_8h_source.html#l00153">config_file::use_caps_bits_for_id</a>, <a class="el" href="log_8h_source.html#l00058">VERB_ALGO</a>, <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>, <a class="el" href="module_8h_source.html#l00190">module_env::worker</a>, <a class="el" href="worker_8c_source.html#l01194">worker_alloc_cleanup()</a>, <a class="el" href="worker_8c_source.html#l01115">worker_delete()</a>, <a class="el" href="worker_8c_source.html#l00326">worker_handle_control_cmd()</a>, <a class="el" href="worker_8c_source.html#l00681">worker_handle_request()</a>, <a class="el" href="worker_8c_source.html#l00131">worker_mem_report()</a>, <a class="el" href="worker_8c_source.html#l00920">worker_restart_timer()</a>, <a class="el" href="worker_8c_source.html#l01148">worker_send_packet()</a>, <a class="el" href="worker_8c_source.html#l01172">worker_send_query()</a>, <a class="el" href="worker_8c_source.html#l00881">worker_sighandler()</a>, <a class="el" href="worker_8c_source.html#l00930">worker_stat_timer_cb()</a>, and <a class="el" href="testbound_8c_source.html#l00335">wsvc_setup_worker()</a>.</p>

<p>Referenced by <a class="el" href="daemon_8c_source.html#l00397">daemon_fork()</a>, and <a class="el" href="daemon_8c_source.html#l00334">thread_start()</a>.</p>

</div>
</div><p>
<a class="anchor" name="ef1a7162094526a35c2023152ff01023"></a><!-- doxytag: member="worker.c::worker_send_packet" ref="ef1a7162094526a35c2023152ff01023" args="(ldns_buffer *pkt, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, struct module_qstate *q, int use_tcp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int worker_send_packet           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>timeout</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>q</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>use_tcp</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Worker service routine to send udp messages for modules. 
<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>pkt,:</em>&nbsp;</td><td>packet to send. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>where to. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout,:</em>&nbsp;</td><td>seconds to wait until timeout. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>q,:</em>&nbsp;</td><td>wich query state to reactivate upon return. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>use_tcp,:</em>&nbsp;</td><td>true to use TCP, false for UDP. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: false on failure (memory or socket related). no query was sent. </dd></dl>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00244">fptr_whitelist_modenv_send_packet()</a>, and <a class="el" href="worker_8c_source.html#l00967">worker_init()</a>.</p>

</div>
</div><p>
<a class="anchor" name="8e3f0c71d6b2179c5c474da448eefc94"></a><!-- doxytag: member="worker.c::worker_send_query" ref="8e3f0c71d6b2179c5c474da448eefc94" args="(uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen, struct module_qstate *q)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structoutbound__entry.html">outbound_entry</a>* worker_send_query           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>qname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>qnamelen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qclass</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>dnssec</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</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>q</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>
Worker service routine to send serviced queries to authoritative servers. 
<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>qname,:</em>&nbsp;</td><td>query name. (host order) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qnamelen,:</em>&nbsp;</td><td>length in bytes of qname, including trailing 0. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qtype,:</em>&nbsp;</td><td>query type. (host order) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qclass,:</em>&nbsp;</td><td>query class. (host order) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flags,:</em>&nbsp;</td><td>host order flags word, with opcode and CD bit. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dnssec,:</em>&nbsp;</td><td>if set, EDNS record will have DO bit set. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>where to. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>q,:</em>&nbsp;</td><td>wich query state to reactivate upon return. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: false on failure (memory or socket related). no query was sent. </dd></dl>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00254">fptr_whitelist_modenv_send_query()</a>, and <a class="el" href="worker_8c_source.html#l00967">worker_init()</a>.</p>

</div>
</div><p>
<a class="anchor" name="b33c9e344462613b68129de114adb6b7"></a><!-- doxytag: member="worker.c::worker_stats_clear" ref="b33c9e344462613b68129de114adb6b7" args="(struct worker *worker)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void worker_stats_clear           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structworker.html">worker</a> *&nbsp;</td>
          <td class="paramname"> <em>worker</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Init <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> stats - includes server_stats_init, outside network and 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><a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a>,:</em>&nbsp;</td><td>the <a class="el" href="structworker.html" title="Structure holding working information for unbound.">worker</a> to init </td></tr>
  </table>
</dl>

<p>References <a class="el" href="worker_8h_source.html#l00093">worker::back</a>, <a class="el" href="module_8h_source.html#l00073">module_env::cfg</a>, <a class="el" href="worker_8h_source.html#l00120">worker::env</a>, <a class="el" href="module_8h_source.html#l00192">module_env::mesh</a>, <a class="el" href="mesh_8c_source.html#l00967">mesh_stats_clear()</a>, <a class="el" href="stats_8c_source.html#l00068">server_stats_init()</a>, <a class="el" href="worker_8h_source.html#l00115">worker::stats</a>, and <a class="el" href="outside__network_8h_source.html#l00082">outside_network::unwanted_replies</a>.</p>

<p>Referenced by <a class="el" href="remote_8c_source.html#l01084">do_flush_stats()</a>, <a class="el" href="stats_8c_source.html#l00118">server_stats_compile()</a>, and <a class="el" href="worker_8c_source.html#l00930">worker_stat_timer_cb()</a>.</p>

</div>
</div><p>
<a class="anchor" name="89bbf813f6ca06398f65f38c39cf4d0e"></a><!-- doxytag: member="worker.c::libworker_send_packet" ref="89bbf813f6ca06398f65f38c39cf4d0e" args="(ldns_buffer *pkt, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, struct module_qstate *q, int use_tcp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int libworker_send_packet           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>timeout</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>q</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>use_tcp</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Worker service routine to send udp messages for modules. 
<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>pkt,:</em>&nbsp;</td><td>packet to send. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>where to. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout,:</em>&nbsp;</td><td>seconds to wait until timeout. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>q,:</em>&nbsp;</td><td>wich query state to reactivate upon return. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>use_tcp,:</em>&nbsp;</td><td>true to use TCP, false for UDP. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: false on failure (memory or socket related). no query was sent. </dd></dl>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00244">fptr_whitelist_modenv_send_packet()</a>, and <a class="el" href="libworker_8c_source.html#l00092">libworker_setup()</a>.</p>

</div>
</div><p>
<a class="anchor" name="b24e8e1d8bd73e2450110d278a274383"></a><!-- doxytag: member="worker.c::libworker_send_query" ref="b24e8e1d8bd73e2450110d278a274383" args="(uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen, struct module_qstate *q)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structoutbound__entry.html">outbound_entry</a>* libworker_send_query           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>qname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>qnamelen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qtype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qclass</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>dnssec</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct sockaddr_storage *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">socklen_t&nbsp;</td>
          <td class="paramname"> <em>addrlen</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>q</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>
Worker service routine to send serviced queries to authoritative servers. 
<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>qname,:</em>&nbsp;</td><td>query name. (host order) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qnamelen,:</em>&nbsp;</td><td>length in bytes of qname, including trailing 0. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qtype,:</em>&nbsp;</td><td>query type. (host order) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qclass,:</em>&nbsp;</td><td>query class. (host order) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flags,:</em>&nbsp;</td><td>host order flags word, with opcode and CD bit. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dnssec,:</em>&nbsp;</td><td>if set, EDNS record will have DO bit set. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>where to. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>q,:</em>&nbsp;</td><td>wich query state to reactivate upon return. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: false on failure (memory or socket related). no query was sent. </dd></dl>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00254">fptr_whitelist_modenv_send_query()</a>, and <a class="el" href="libworker_8c_source.html#l00092">libworker_setup()</a>.</p>

</div>
</div><p>
<a class="anchor" name="064389992b366439d303efdaa985287c"></a><!-- doxytag: member="worker.c::order_lock_cmp" ref="064389992b366439d303efdaa985287c" args="(const void *e1, const void *e2)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int order_lock_cmp           </td>
          <td>(</td>
          <td class="paramtype">const void *&nbsp;</td>
          <td class="paramname"> <em>e1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&nbsp;</td>
          <td class="paramname"> <em>e2</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Due to module breakage by fptr wlist, these test app declarations are presented here. 
<p>
compare two order_ids from lock-verify test app <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>e1,:</em>&nbsp;</td><td>first <a class="el" href="structorder__id.html" title="keep track of lock id in lock-verify application">order_id</a> </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>e2,:</em>&nbsp;</td><td>second <a class="el" href="structorder__id.html" title="keep track of lock id in lock-verify application">order_id</a> </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>compare code -1, 0, +1 (like memcmp). </dd></dl>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00164">fptr_whitelist_rbtree_cmp()</a>, <a class="el" href="lock__verify_8c_source.html#l00210">insert_lock()</a>, <a class="el" href="lock__verify_8c_source.html#l00389">main()</a>, and <a class="el" href="lock__verify_8c_source.html#l00181">read_create()</a>.</p>

</div>
</div><p>
<a class="anchor" name="323f985b88ca5d4902caa79428dbe899"></a><!-- doxytag: member="worker.c::codeline_cmp" ref="323f985b88ca5d4902caa79428dbe899" args="(const void *a, const void *b)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int codeline_cmp           </td>
          <td>(</td>
          <td class="paramtype">const void *&nbsp;</td>
          <td class="paramname"> <em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&nbsp;</td>
          <td class="paramname"> <em>b</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
compare two <a class="el" href="structcodeline.html" title="The allocation statistics block.">codeline</a> structs for rbtree from memstats test app 
<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>a,:</em>&nbsp;</td><td><a class="el" href="structcodeline.html" title="The allocation statistics block.">codeline</a> </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>b,:</em>&nbsp;</td><td><a class="el" href="structcodeline.html" title="The allocation statistics block.">codeline</a> </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>compare code -1, 0, +1 (like memcmp). </dd></dl>

<p>Referenced by <a class="el" href="fptr__wlist_8c_source.html#l00164">fptr_whitelist_rbtree_cmp()</a>, and <a class="el" href="memstats_8c_source.html#l00232">main()</a>.</p>

</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 13 06:46:30 2009 for unbound by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>