Sophie

Sophie

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

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/outside_network.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_d1ccb6fd7b4f0b6c4993c4e5b9d49242.html">services</a>
  </div>
</div>
<div class="contents">
<h1>outside_network.c File Reference</h1>This file has functions to send queries to authoritative servers and wait for the <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> answer events.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&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="listen__dnsport_8h.html">services/listen_dnsport.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="msgparse_8h.html">util/data/msgparse.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="msgreply_8h.html">util/data/msgreply.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="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="netevent_8h.html">util/netevent.h</a>&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="fptr__wlist_8h.html">util/fptr_wlist.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;fcntl.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">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#2faa038618cd70806a5a8d7ae56ba105">MAX_ID_RETRY</a>&nbsp;&nbsp;&nbsp;1000</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">number of times to retry making a random ID that is unique.  <a href="#2faa038618cd70806a5a8d7ae56ba105"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#5bd6b757513652bc4f72cc97d6e4a5a0">MAX_PORT_RETRY</a>&nbsp;&nbsp;&nbsp;10000</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">number of times to retry finding interface, port that can be opened.  <a href="#5bd6b757513652bc4f72cc97d6e4a5a0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="625a03d2c374b4f3dfbb3e76f8d2855c"></a><!-- doxytag: member="outside_network.c::OUTBOUND_UDP_RETRY" ref="625a03d2c374b4f3dfbb3e76f8d2855c" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#625a03d2c374b4f3dfbb3e76f8d2855c">OUTBOUND_UDP_RETRY</a>&nbsp;&nbsp;&nbsp;1</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">number of retries on outgoing UDP queries <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="b4d2200cc93c9b344135b83516699a8e"></a><!-- doxytag: member="outside_network.c::serviced_tcp_initiate" ref="b4d2200cc93c9b344135b83516699a8e" args="(struct outside_network *outnet, struct serviced_query *sq, ldns_buffer *buff)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#b4d2200cc93c9b344135b83516699a8e">serviced_tcp_initiate</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, struct <a class="el" href="structserviced__query.html">serviced_query</a> *sq, ldns_buffer *buff)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">initiate TCP transaction for serviced query <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="62bacde3ce33829da8810ecb3c94b304"></a><!-- doxytag: member="outside_network.c::randomize_and_send_udp" ref="62bacde3ce33829da8810ecb3c94b304" args="(struct outside_network *outnet, struct pending *pend, ldns_buffer *packet, int timeout)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#62bacde3ce33829da8810ecb3c94b304">randomize_and_send_udp</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, struct <a class="el" href="structpending.html">pending</a> *pend, ldns_buffer *packet, int timeout)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">with a fd available, randomize and send UDP <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1e4562f5d89d0d9eaa82f34a59286eb2"></a><!-- doxytag: member="outside_network.c::pending_cmp" ref="1e4562f5d89d0d9eaa82f34a59286eb2" args="(const void *key1, const void *key2)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#1e4562f5d89d0d9eaa82f34a59286eb2">pending_cmp</a> (const void *key1, const void *key2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare function of <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> rbtree <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3c656f254f7ff1c34aaa9b6dc5580db7"></a><!-- doxytag: member="outside_network.c::serviced_cmp" ref="3c656f254f7ff1c34aaa9b6dc5580db7" args="(const void *key1, const void *key2)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#3c656f254f7ff1c34aaa9b6dc5580db7">serviced_cmp</a> (const void *key1, const void *key2)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare function of serviced query rbtree <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="outside__network_8c.html#67c44d4ede78dd9d8e136e9c66da291a">waiting_tcp_delete</a> (struct <a class="el" href="structwaiting__tcp.html">waiting_tcp</a> *w)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">delete <a class="el" href="structwaiting__tcp.html" title="Query waiting for TCP buffer.">waiting_tcp</a> <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>.  <a href="#67c44d4ede78dd9d8e136e9c66da291a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f058275c7d86bea2b16b3b2267d2774"></a><!-- doxytag: member="outside_network.c::outnet_tcp_take_into_use" ref="7f058275c7d86bea2b16b3b2267d2774" args="(struct waiting_tcp *w, uint8_t *pkt, size_t pkt_len)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#7f058275c7d86bea2b16b3b2267d2774">outnet_tcp_take_into_use</a> (struct <a class="el" href="structwaiting__tcp.html">waiting_tcp</a> *w, uint8_t *pkt, size_t pkt_len)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">use next free buffer to service a tcp query <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7bd78d1190708c10419a8d995710a8ea"></a><!-- doxytag: member="outside_network.c::use_free_buffer" ref="7bd78d1190708c10419a8d995710a8ea" args="(struct outside_network *outnet)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#7bd78d1190708c10419a8d995710a8ea">use_free_buffer</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">see if buffers can be used to service TCP queries <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="33951bd98e80d0f4cd80a9f918bb8916"></a><!-- doxytag: member="outside_network.c::decomission_pending_tcp" ref="33951bd98e80d0f4cd80a9f918bb8916" args="(struct outside_network *outnet, struct pending_tcp *pend)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#33951bd98e80d0f4cd80a9f918bb8916">decomission_pending_tcp</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, struct <a class="el" href="structpending__tcp.html">pending_tcp</a> *pend)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">decomission a tcp buffer, closes commpoint and frees <a class="el" href="structwaiting__tcp.html" title="Query waiting for TCP buffer.">waiting_tcp</a> <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3a6159a3742f0d63fa62315ac4d6dac2"></a><!-- doxytag: member="outside_network.c::outnet_tcp_cb" ref="3a6159a3742f0d63fa62315ac4d6dac2" 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="outside__network_8c.html#3a6159a3742f0d63fa62315ac4d6dac2">outnet_tcp_cb</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">callback for <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> tcp connections <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="545176a6f28eb1c983ea36df97771b32"></a><!-- doxytag: member="outside_network.c::portcomm_loweruse" ref="545176a6f28eb1c983ea36df97771b32" args="(struct outside_network *outnet, struct port_comm *pc)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#545176a6f28eb1c983ea36df97771b32">portcomm_loweruse</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, struct <a class="el" href="structport__comm.html">port_comm</a> *pc)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">lower use count on pc, see if it can be closed <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9a8d178b1b1780f61041b3ac83884b95"></a><!-- doxytag: member="outside_network.c::outnet_send_wait_udp" ref="9a8d178b1b1780f61041b3ac83884b95" args="(struct outside_network *outnet)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#9a8d178b1b1780f61041b3ac83884b95">outnet_send_wait_udp</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">try to send waiting UDP queries <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="60a536f56eced390f24c6a1c0cb82a91"></a><!-- doxytag: member="outside_network.c::outnet_udp_cb" ref="60a536f56eced390f24c6a1c0cb82a91" 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="outside__network_8c.html#60a536f56eced390f24c6a1c0cb82a91">outnet_udp_cb</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">callback for incoming udp answers from the network <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="028bc1b030237679dc179c69d0e7df8c"></a><!-- doxytag: member="outside_network.c::calc_num46" ref="028bc1b030237679dc179c69d0e7df8c" args="(char **ifs, int num_ifs, int do_ip4, int do_ip6, int *num_ip4, int *num_ip6)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#028bc1b030237679dc179c69d0e7df8c">calc_num46</a> (char **ifs, int num_ifs, int do_ip4, int do_ip6, int *num_ip4, int *num_ip6)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">calculate number of ip4 and ip6 interfaces <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="83fe907b76868a2f25240a7a17a6ac15"></a><!-- doxytag: member="outside_network.c::pending_udp_timer_cb" ref="83fe907b76868a2f25240a7a17a6ac15" args="(void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#83fe907b76868a2f25240a7a17a6ac15">pending_udp_timer_cb</a> (void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">callback for udp timeout <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="01f77769fd55be73c323e616ab7ac4c7"></a><!-- doxytag: member="outside_network.c::create_pending_tcp" ref="01f77769fd55be73c323e616ab7ac4c7" args="(struct outside_network *outnet, size_t bufsize)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#01f77769fd55be73c323e616ab7ac4c7">create_pending_tcp</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, size_t bufsize)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">create <a class="el" href="structpending__tcp.html" title="Pending TCP query to server.">pending_tcp</a> buffers <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b61ff45d25015c0c43c000c480f5d74"></a><!-- doxytag: member="outside_network.c::setup_if" ref="4b61ff45d25015c0c43c000c480f5d74" args="(struct port_if *pif, const char *addrstr, int *avail, int numavail, size_t numfd)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#4b61ff45d25015c0c43c000c480f5d74">setup_if</a> (struct <a class="el" href="structport__if.html">port_if</a> *pif, const char *addrstr, int *avail, int numavail, size_t numfd)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">setup an outgoing interface, ready address <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structoutside__network.html">outside_network</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#7dae61f7536c7bca9417ca83d3a16924">outside_network_create</a> (struct <a class="el" href="structcomm__base.html">comm_base</a> *base, size_t bufsize, size_t num_ports, char **ifs, int num_ifs, int do_ip4, int do_ip6, size_t num_tcp, struct <a class="el" href="structinfra__cache.html">infra_cache</a> *infra, struct <a class="el" href="structub__randstate.html">ub_randstate</a> *rnd, int use_caps_for_id, int *availports, int numavailports, size_t unwanted_threshold, void(*unwanted_action)(void *), void *unwanted_param)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create <a class="el" href="structoutside__network.html" title="Send queries to outside servers and wait for answers from servers.">outside_network</a> structure with N udp ports.  <a href="#7dae61f7536c7bca9417ca83d3a16924"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3578f27a490c8bfcc065f64d6e108c7d"></a><!-- doxytag: member="outside_network.c::pending_node_del" ref="3578f27a490c8bfcc065f64d6e108c7d" args="(rbnode_t *node, void *arg)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#3578f27a490c8bfcc065f64d6e108c7d">pending_node_del</a> (<a class="el" href="structrbnode__t.html">rbnode_t</a> *node, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">helper <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> delete <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="81d01ba6d23e1d92ec5fd40ac3f44689"></a><!-- doxytag: member="outside_network.c::serviced_node_del" ref="81d01ba6d23e1d92ec5fd40ac3f44689" args="(rbnode_t *node, void *arg)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#81d01ba6d23e1d92ec5fd40ac3f44689">serviced_node_del</a> (<a class="el" href="structrbnode__t.html">rbnode_t</a> *node, void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">helper serviced delete <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#309e70fd2cf62db0a91c3555ba903688">outside_network_quit_prepare</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Prepare for quit.  <a href="#309e70fd2cf62db0a91c3555ba903688"></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="outside__network_8c.html#e5ba3c53d231337f43998b8e85bf11f3">outside_network_delete</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete <a class="el" href="structoutside__network.html" title="Send queries to outside servers and wait for answers from servers.">outside_network</a> structure.  <a href="#e5ba3c53d231337f43998b8e85bf11f3"></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="outside__network_8c.html#4bcaa60e4185cf2c77548c8b3754847e">pending_delete</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, struct <a class="el" href="structpending.html">pending</a> *p)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> answer.  <a href="#4bcaa60e4185cf2c77548c8b3754847e"></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="outside__network_8c.html#cce8e83c0e562ef04d5679eb7e524bd1">udp_sockport</a> (struct sockaddr_storage *addr, socklen_t addrlen, int port, int *inuse)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Try to open a UDP socket for outgoing communication.  <a href="#cce8e83c0e562ef04d5679eb7e524bd1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ce69f99698eaf3bda7a658f41f33d5a3"></a><!-- doxytag: member="outside_network.c::select_id" ref="ce69f99698eaf3bda7a658f41f33d5a3" args="(struct outside_network *outnet, struct pending *pend, ldns_buffer *packet)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#ce69f99698eaf3bda7a658f41f33d5a3">select_id</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, struct <a class="el" href="structpending.html">pending</a> *pend, ldns_buffer *packet)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Select random ID. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0c650d4135eccb967eaaa4078ea0ea9c"></a><!-- doxytag: member="outside_network.c::select_ifport" ref="0c650d4135eccb967eaaa4078ea0ea9c" args="(struct outside_network *outnet, struct pending *pend, int num_if, struct port_if *ifs)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#0c650d4135eccb967eaaa4078ea0ea9c">select_ifport</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, struct <a class="el" href="structpending.html">pending</a> *pend, int num_if, struct <a class="el" href="structport__if.html">port_if</a> *ifs)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Select random interface and port. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structpending.html">pending</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#5bcb4121b046ee5cea462169a6ee4b55">pending_udp_query</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, ldns_buffer *packet, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, <a class="el" href="netevent_8h.html#2ac6c8fe545b6f40c109a064ce17a24d">comm_point_callback_t</a> *cb, void *cb_arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send UDP query, create <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> answer.  <a href="#5bcb4121b046ee5cea462169a6ee4b55"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2ac58c9238d30c9d6fa56a6d6ff88447"></a><!-- doxytag: member="outside_network.c::outnet_tcptimer" ref="2ac58c9238d30c9d6fa56a6d6ff88447" args="(void *arg)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#2ac58c9238d30c9d6fa56a6d6ff88447">outnet_tcptimer</a> (void *arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">callback for outgoing TCP timer event <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structwaiting__tcp.html">waiting_tcp</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#f3d5512bd312f499b7f09bf8265077c1">pending_tcp_query</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, ldns_buffer *packet, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, <a class="el" href="netevent_8h.html#2ac6c8fe545b6f40c109a064ce17a24d">comm_point_callback_t</a> *callback, void *callback_arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send TCP query.  <a href="#f3d5512bd312f499b7f09bf8265077c1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c5bc340bb485465d3931e9fa3a06ec75"></a><!-- doxytag: member="outside_network.c::serviced_gen_query" ref="c5bc340bb485465d3931e9fa3a06ec75" args="(ldns_buffer *buff, uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#c5bc340bb485465d3931e9fa3a06ec75">serviced_gen_query</a> (ldns_buffer *buff, uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">create query for serviced queries <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd49ef277e5784e9c6a72c1b01b1eb31"></a><!-- doxytag: member="outside_network.c::lookup_serviced" ref="bd49ef277e5784e9c6a72c1b01b1eb31" args="(struct outside_network *outnet, ldns_buffer *buff, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen)" -->
static struct <a class="el" href="structserviced__query.html">serviced_query</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#bd49ef277e5784e9c6a72c1b01b1eb31">lookup_serviced</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, ldns_buffer *buff, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">lookup serviced query in serviced query rbtree <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1452a461b3c903e8b4f0d728b0ea22b"></a><!-- doxytag: member="outside_network.c::serviced_create" ref="a1452a461b3c903e8b4f0d728b0ea22b" args="(struct outside_network *outnet, ldns_buffer *buff, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen)" -->
static struct <a class="el" href="structserviced__query.html">serviced_query</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#a1452a461b3c903e8b4f0d728b0ea22b">serviced_create</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, ldns_buffer *buff, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create new serviced <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="388d5254c2fbd136082b1905ae9ce9e4"></a><!-- doxytag: member="outside_network.c::waiting_list_remove" ref="388d5254c2fbd136082b1905ae9ce9e4" args="(struct outside_network *outnet, struct waiting_tcp *w)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#388d5254c2fbd136082b1905ae9ce9e4">waiting_list_remove</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, struct <a class="el" href="structwaiting__tcp.html">waiting_tcp</a> *w)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">remove waiting tcp from the outnet waiting list <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd0b8a98d6768735f11d3400068ab9bf"></a><!-- doxytag: member="outside_network.c::serviced_delete" ref="dd0b8a98d6768735f11d3400068ab9bf" args="(struct serviced_query *sq)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#dd0b8a98d6768735f11d3400068ab9bf">serviced_delete</a> (struct <a class="el" href="structserviced__query.html">serviced_query</a> *sq)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">cleanup serviced query <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="21652d18644221fbd34c01d9f7ac2078"></a><!-- doxytag: member="outside_network.c::serviced_perturb_qname" ref="21652d18644221fbd34c01d9f7ac2078" args="(struct ub_randstate *rnd, uint8_t *qbuf, size_t len)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#21652d18644221fbd34c01d9f7ac2078">serviced_perturb_qname</a> (struct <a class="el" href="structub__randstate.html">ub_randstate</a> *rnd, uint8_t *qbuf, size_t len)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">perturb a dname capitalization randomly <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="33d98ef3ce1b25b08643e3d9494d49f0"></a><!-- doxytag: member="outside_network.c::serviced_encode" ref="33d98ef3ce1b25b08643e3d9494d49f0" args="(struct serviced_query *sq, ldns_buffer *buff, int with_edns)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#33d98ef3ce1b25b08643e3d9494d49f0">serviced_encode</a> (struct <a class="el" href="structserviced__query.html">serviced_query</a> *sq, ldns_buffer *buff, int with_edns)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">put serviced query into a buffer <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="outside__network_8c.html#4bcc5252555560612c9b5b2e39d79cf0">serviced_udp_send</a> (struct <a class="el" href="structserviced__query.html">serviced_query</a> *sq, ldns_buffer *buff)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Perform serviced query UDP sending operation.  <a href="#4bcc5252555560612c9b5b2e39d79cf0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="25e8062ccf10ef6444c89ab518dce29c"></a><!-- doxytag: member="outside_network.c::serviced_check_qname" ref="25e8062ccf10ef6444c89ab518dce29c" args="(ldns_buffer *pkt, uint8_t *qbuf, size_t qbuflen)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#25e8062ccf10ef6444c89ab518dce29c">serviced_check_qname</a> (ldns_buffer *pkt, uint8_t *qbuf, size_t qbuflen)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">check that perturbed qname is identical <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e72be11cbf822ffa4e7e2739dbb3fed6"></a><!-- doxytag: member="outside_network.c::serviced_callbacks" ref="e72be11cbf822ffa4e7e2739dbb3fed6" args="(struct serviced_query *sq, int error, struct comm_point *c, struct comm_reply *rep)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#e72be11cbf822ffa4e7e2739dbb3fed6">serviced_callbacks</a> (struct <a class="el" href="structserviced__query.html">serviced_query</a> *sq, int error, struct <a class="el" href="structcomm__point.html">comm_point</a> *c, struct <a class="el" href="structcomm__reply.html">comm_reply</a> *rep)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">call the callbacks for a serviced query <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4d57701d3d8f465fcf1fcabf7a5709d4"></a><!-- doxytag: member="outside_network.c::serviced_tcp_callback" ref="4d57701d3d8f465fcf1fcabf7a5709d4" args="(struct comm_point *c, void *arg, int error, struct comm_reply *rep)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#4d57701d3d8f465fcf1fcabf7a5709d4">serviced_tcp_callback</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> *rep)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">TCP reply or error callback for serviced queries. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b8f6d4944d98aa2cdc59425e875f86b6"></a><!-- doxytag: member="outside_network.c::serviced_udp_callback" ref="b8f6d4944d98aa2cdc59425e875f86b6" args="(struct comm_point *c, void *arg, int error, struct comm_reply *rep)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#b8f6d4944d98aa2cdc59425e875f86b6">serviced_udp_callback</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> *rep)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">callback for serviced query UDP answers <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9f009cfa6fc819e02a23408071f3d4ae"></a><!-- doxytag: member="outside_network.c::callback_list_find" ref="9f009cfa6fc819e02a23408071f3d4ae" args="(struct serviced_query *sq, void *cb_arg, int(*arg_compare)(void *, void *))" -->
static struct <a class="el" href="structservice__callback.html">service_callback</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#9f009cfa6fc819e02a23408071f3d4ae">callback_list_find</a> (struct <a class="el" href="structserviced__query.html">serviced_query</a> *sq, void *cb_arg, int(*arg_compare)(void *, void *))</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">find callback in list <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structserviced__query.html">serviced_query</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#7908708961b40556179845d57e495992">outnet_serviced_query</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet, uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen, <a class="el" href="netevent_8h.html#2ac6c8fe545b6f40c109a064ce17a24d">comm_point_callback_t</a> *callback, void *callback_arg, ldns_buffer *buff, int(*arg_compare)(void *, void *))</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Perform a serviced query to the authoritative servers.  <a href="#7908708961b40556179845d57e495992"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8be573b28a6400e824994bceefa1f82"></a><!-- doxytag: member="outside_network.c::callback_list_remove" ref="e8be573b28a6400e824994bceefa1f82" args="(struct serviced_query *sq, void *cb_arg)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#e8be573b28a6400e824994bceefa1f82">callback_list_remove</a> (struct <a class="el" href="structserviced__query.html">serviced_query</a> *sq, void *cb_arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">remove callback from list <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#fba22c3a1d3e71a3913b22511d54aae3">outnet_serviced_query_stop</a> (struct <a class="el" href="structserviced__query.html">serviced_query</a> *sq, void *cb_arg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove service query callback.  <a href="#fba22c3a1d3e71a3913b22511d54aae3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8fabcd8245c9b9f35078f7a2f2455791"></a><!-- doxytag: member="outside_network.c::waiting_tcp_get_mem" ref="8fabcd8245c9b9f35078f7a2f2455791" args="(struct waiting_tcp *w)" -->
static size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#8fabcd8245c9b9f35078f7a2f2455791">waiting_tcp_get_mem</a> (struct <a class="el" href="structwaiting__tcp.html">waiting_tcp</a> *w)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get memory used by waiting tcp <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> (in use or not) <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="89fd52af16017d99efdb918ed7650bf4"></a><!-- doxytag: member="outside_network.c::if_get_mem" ref="89fd52af16017d99efdb918ed7650bf4" args="(struct port_if *pif)" -->
static size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#89fd52af16017d99efdb918ed7650bf4">if_get_mem</a> (struct <a class="el" href="structport__if.html">port_if</a> *pif)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get memory used by port if <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ccc1d21b2437ba0c87d29fb8446a2066"></a><!-- doxytag: member="outside_network.c::waiting_udp_get_mem" ref="ccc1d21b2437ba0c87d29fb8446a2066" args="(struct pending *w)" -->
static size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="outside__network_8c.html#ccc1d21b2437ba0c87d29fb8446a2066">waiting_udp_get_mem</a> (struct <a class="el" href="structpending.html">pending</a> *w)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get memory used by waiting udp <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="outside__network_8c.html#2617256141980f2585958a8bf5ba9017">outnet_get_mem</a> (struct <a class="el" href="structoutside__network.html">outside_network</a> *outnet)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get memory size in use by outside network.  <a href="#2617256141980f2585958a8bf5ba9017"></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="outside__network_8c.html#45a55cb9fcf2079267798f9815b8a3cc">serviced_get_mem</a> (struct <a class="el" href="structserviced__query.html">serviced_query</a> *sq)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get memory size in use by serviced query while it is servicing callbacks.  <a href="#45a55cb9fcf2079267798f9815b8a3cc"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This file has functions to send queries to authoritative servers and wait for the <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> answer events. 
<p>
<hr><h2>Define Documentation</h2>
<a class="anchor" name="2faa038618cd70806a5a8d7ae56ba105"></a><!-- doxytag: member="outside_network.c::MAX_ID_RETRY" ref="2faa038618cd70806a5a8d7ae56ba105" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define MAX_ID_RETRY&nbsp;&nbsp;&nbsp;1000          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
number of times to retry making a random ID that is unique. 
<p>

<p>Referenced by <a class="el" href="outside__network_8c_source.html#l00769">select_id()</a>.</p>

</div>
</div><p>
<a class="anchor" name="5bd6b757513652bc4f72cc97d6e4a5a0"></a><!-- doxytag: member="outside_network.c::MAX_PORT_RETRY" ref="5bd6b757513652bc4f72cc97d6e4a5a0" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define MAX_PORT_RETRY&nbsp;&nbsp;&nbsp;10000          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
number of times to retry finding interface, port that can be opened. 
<p>

<p>Referenced by <a class="el" href="outside__network_8c_source.html#l00795">select_ifport()</a>.</p>

</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="67c44d4ede78dd9d8e136e9c66da291a"></a><!-- doxytag: member="outside_network.c::waiting_tcp_delete" ref="67c44d4ede78dd9d8e136e9c66da291a" args="(struct waiting_tcp *w)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void waiting_tcp_delete           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structwaiting__tcp.html">waiting_tcp</a> *&nbsp;</td>
          <td class="paramname"> <em>w</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
delete <a class="el" href="structwaiting__tcp.html" title="Query waiting for TCP buffer.">waiting_tcp</a> <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. 
<p>
Does not unlink from waiting list. <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>to delete. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="fake__event_8c_source.html#l01158">comm_timer_delete()</a>, and <a class="el" href="outside__network_8h_source.html#l00241">waiting_tcp::timer</a>.</p>

<p>Referenced by <a class="el" href="outside__network_8c_source.html#l00215">decomission_pending_tcp()</a>, <a class="el" href="outside__network_8c_source.html#l00949">outnet_tcptimer()</a>, <a class="el" href="outside__network_8c_source.html#l00624">outside_network_delete()</a>, <a class="el" href="outside__network_8c_source.html#l00985">pending_tcp_query()</a>, <a class="el" href="outside__network_8c_source.html#l01122">serviced_delete()</a>, and <a class="el" href="outside__network_8c_source.html#l00194">use_free_buffer()</a>.</p>

</div>
</div><p>
<a class="anchor" name="7dae61f7536c7bca9417ca83d3a16924"></a><!-- doxytag: member="outside_network.c::outside_network_create" ref="7dae61f7536c7bca9417ca83d3a16924" args="(struct comm_base *base, size_t bufsize, size_t num_ports, char **ifs, int num_ifs, int do_ip4, int do_ip6, size_t num_tcp, struct infra_cache *infra, struct ub_randstate *rnd, int use_caps_for_id, int *availports, int numavailports, size_t unwanted_threshold, void(*unwanted_action)(void *), void *unwanted_param)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structoutside__network.html">outside_network</a>* outside_network_create           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structcomm__base.html">comm_base</a> *&nbsp;</td>
          <td class="paramname"> <em>base</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>bufsize</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>num_ports</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>ifs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>num_ifs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>do_ip4</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>do_ip6</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>num_tcp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structinfra__cache.html">infra_cache</a> *&nbsp;</td>
          <td class="paramname"> <em>infra</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__randstate.html">ub_randstate</a> *&nbsp;</td>
          <td class="paramname"> <em>rnd</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>use_caps_for_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>availports</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>numavailports</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>unwanted_threshold</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void(*)(void *)&nbsp;</td>
          <td class="paramname"> <em>unwanted_action</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>unwanted_param</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 <a class="el" href="structoutside__network.html" title="Send queries to outside servers and wait for answers from servers.">outside_network</a> structure with N udp ports. 
<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>base,:</em>&nbsp;</td><td>the communication base to use for event handling. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>bufsize,:</em>&nbsp;</td><td>size for network buffers. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num_ports,:</em>&nbsp;</td><td>number of udp ports to open per interface. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>ifs,:</em>&nbsp;</td><td>interface names (or NULL for default interface). These interfaces must be able to access all authoritative servers. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num_ifs,:</em>&nbsp;</td><td>number of names in array ifs. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>do_ip4,:</em>&nbsp;</td><td>service IP4. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>do_ip6,:</em>&nbsp;</td><td>service IP6. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num_tcp,:</em>&nbsp;</td><td>number of outgoing tcp buffers to preallocate. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>infra,:</em>&nbsp;</td><td>pointer to infra cached used for serviced queries. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rnd,:</em>&nbsp;</td><td>stored to create random numbers for serviced queries. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>use_caps_for_id,:</em>&nbsp;</td><td>enable to use 0x20 bits to encode id randomness. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>availports,:</em>&nbsp;</td><td>array of available ports. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>numavailports,:</em>&nbsp;</td><td>number of available ports in array. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>unwanted_threshold,:</em>&nbsp;</td><td>when to take defensive action. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>unwanted_action,:</em>&nbsp;</td><td>the action to take. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>unwanted_param,:</em>&nbsp;</td><td>user parameter to action. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: the new structure (with no <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> answers) or NULL on error. </dd></dl>

<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="309e70fd2cf62db0a91c3555ba903688"></a><!-- doxytag: member="outside_network.c::outside_network_quit_prepare" ref="309e70fd2cf62db0a91c3555ba903688" args="(struct outside_network *outnet)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void outside_network_quit_prepare           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structoutside__network.html">outside_network</a> *&nbsp;</td>
          <td class="paramname"> <em>outnet</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Prepare for quit. 
<p>
Sends no more queries, even if queued up. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>outnet,:</em>&nbsp;</td><td>object to prepare for removal </td></tr>
  </table>
</dl>

<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="e5ba3c53d231337f43998b8e85bf11f3"></a><!-- doxytag: member="outside_network.c::outside_network_delete" ref="e5ba3c53d231337f43998b8e85bf11f3" args="(struct outside_network *outnet)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void outside_network_delete           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structoutside__network.html">outside_network</a> *&nbsp;</td>
          <td class="paramname"> <em>outnet</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Delete <a class="el" href="structoutside__network.html" title="Send queries to outside servers and wait for answers from servers.">outside_network</a> structure. 
<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>outnet,:</em>&nbsp;</td><td>object to delete. </td></tr>
  </table>
</dl>

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

</div>
</div><p>
<a class="anchor" name="4bcaa60e4185cf2c77548c8b3754847e"></a><!-- doxytag: member="outside_network.c::pending_delete" ref="4bcaa60e4185cf2c77548c8b3754847e" args="(struct outside_network *outnet, struct pending *p)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pending_delete           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structoutside__network.html">outside_network</a> *&nbsp;</td>
          <td class="paramname"> <em>outnet</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structpending.html">pending</a> *&nbsp;</td>
          <td class="paramname"> <em>p</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Delete <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> answer. 
<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>outnet,:</em>&nbsp;</td><td>outside network the <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> query is part of. Internal feature: if outnet is NULL, p is not unlinked from rbtree. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>p,:</em>&nbsp;</td><td>deleted </td></tr>
  </table>
</dl>

<p>References <a class="el" href="fake__event_8c_source.html#l01158">comm_timer_delete()</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="outside__network_8h_source.html#l00207">pending::next_waiting</a>, <a class="el" href="outside__network_8h_source.html#l00185">pending::node</a>, <a class="el" href="outside__network_8h_source.html#l00112">outside_network::pending</a>, <a class="el" href="outside__network_8h_source.html#l00211">pending::pkt</a>, <a class="el" href="rbtree_8c_source.html#l00326">rbtree_delete()</a>, <a class="el" href="outside__network_8h_source.html#l00197">pending::timer</a>, <a class="el" href="outside__network_8h_source.html#l00107">outside_network::udp_wait_first</a>, and <a class="el" href="outside__network_8h_source.html#l00109">outside_network::udp_wait_last</a>.</p>

<p>Referenced by <a class="el" href="outside__network_8c_source.html#l00276">outnet_send_wait_udp()</a>, <a class="el" href="outside__network_8c_source.html#l00303">outnet_udp_cb()</a>, <a class="el" href="outside__network_8c_source.html#l00624">outside_network_delete()</a>, <a class="el" href="outside__network_8c_source.html#l00592">pending_node_del()</a>, <a class="el" href="outside__network_8c_source.html#l00902">pending_udp_query()</a>, <a class="el" href="outside__network_8c_source.html#l00410">pending_udp_timer_cb()</a>, and <a class="el" href="outside__network_8c_source.html#l01122">serviced_delete()</a>.</p>

</div>
</div><p>
<a class="anchor" name="cce8e83c0e562ef04d5679eb7e524bd1"></a><!-- doxytag: member="outside_network.c::udp_sockport" ref="cce8e83c0e562ef04d5679eb7e524bd1" args="(struct sockaddr_storage *addr, socklen_t addrlen, int port, int *inuse)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int udp_sockport           </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>port</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>inuse</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>
Try to open a UDP socket for outgoing communication. 
<p>
Sets sockets options 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>addr,:</em>&nbsp;</td><td>socket address. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addrlen,:</em>&nbsp;</td><td>length of address. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>port,:</em>&nbsp;</td><td>port override for addr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>inuse,:</em>&nbsp;</td><td>if -1 is returned, this bool means the port was in use. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>fd or -1 </dd></dl>

<p>References <a class="el" href="net__help_8c_source.html#l00401">addr_is_ip6()</a>, and <a class="el" href="listen__dnsport_8c_source.html#l00091">create_udp_sock()</a>.</p>

<p>Referenced by <a class="el" href="outside__network_8c_source.html#l00795">select_ifport()</a>.</p>

</div>
</div><p>
<a class="anchor" name="5bcb4121b046ee5cea462169a6ee4b55"></a><!-- doxytag: member="outside_network.c::pending_udp_query" ref="5bcb4121b046ee5cea462169a6ee4b55" args="(struct outside_network *outnet, ldns_buffer *packet, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, comm_point_callback_t *cb, void *cb_arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structpending.html">pending</a>* pending_udp_query           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structoutside__network.html">outside_network</a> *&nbsp;</td>
          <td class="paramname"> <em>outnet</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>packet</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"><a class="el" href="netevent_8h.html#2ac6c8fe545b6f40c109a064ce17a24d">comm_point_callback_t</a> *&nbsp;</td>
          <td class="paramname"> <em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>callback_arg</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>
Send UDP query, create <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> answer. 
<p>
Changes the ID for the query to be random and unique for that destination. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>outnet,:</em>&nbsp;</td><td>provides the event handling </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>packet,:</em>&nbsp;</td><td>wireformat query to send to destination. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>address to send 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>in milliseconds from now. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>callback,:</em>&nbsp;</td><td>function to call on error, timeout or reply. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>callback_arg,:</em>&nbsp;</td><td>user argument for callback function. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: NULL on error for malloc or socket. Else the <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> query object. </dd></dl>

<p>Referenced by <a class="el" href="libworker_8c_source.html#l00654">libworker_send_packet()</a>, <a class="el" href="outside__network_8c_source.html#l01227">serviced_udp_send()</a>, and <a class="el" href="worker_8c_source.html#l01148">worker_send_packet()</a>.</p>

</div>
</div><p>
<a class="anchor" name="f3d5512bd312f499b7f09bf8265077c1"></a><!-- doxytag: member="outside_network.c::pending_tcp_query" ref="f3d5512bd312f499b7f09bf8265077c1" args="(struct outside_network *outnet, ldns_buffer *packet, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, comm_point_callback_t *callback, void *callback_arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structwaiting__tcp.html">waiting_tcp</a>* pending_tcp_query           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structoutside__network.html">outside_network</a> *&nbsp;</td>
          <td class="paramname"> <em>outnet</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>packet</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"><a class="el" href="netevent_8h.html#2ac6c8fe545b6f40c109a064ce17a24d">comm_point_callback_t</a> *&nbsp;</td>
          <td class="paramname"> <em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>callback_arg</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>
Send TCP query. 
<p>
May wait for TCP buffer. Selects ID to be random, and checks id. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>outnet,:</em>&nbsp;</td><td>provides the event handling. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>packet,:</em>&nbsp;</td><td>wireformat query to send to destination. copied from. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>address to send 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>in seconds from now. Timer starts running now. Timer may expire if all buffers are used, without any query been sent to the server yet. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>callback,:</em>&nbsp;</td><td>function to call on error, timeout or reply. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>callback_arg,:</em>&nbsp;</td><td>user argument for callback function. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: false on error for malloc or socket. Else the <a class="el" href="structpending.html" title="A query that has an answer pending for it.">pending</a> TCP object. </dd></dl>

<p>Referenced by <a class="el" href="libworker_8c_source.html#l00654">libworker_send_packet()</a>, <a class="el" href="outside__network_8c_source.html#l01425">serviced_tcp_initiate()</a>, and <a class="el" href="worker_8c_source.html#l01148">worker_send_packet()</a>.</p>

</div>
</div><p>
<a class="anchor" name="4bcc5252555560612c9b5b2e39d79cf0"></a><!-- doxytag: member="outside_network.c::serviced_udp_send" ref="4bcc5252555560612c9b5b2e39d79cf0" args="(struct serviced_query *sq, ldns_buffer *buff)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int serviced_udp_send           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structserviced__query.html">serviced_query</a> *&nbsp;</td>
          <td class="paramname"> <em>sq</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>buff</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>
Perform serviced query UDP sending operation. 
<p>
Sends UDP with EDNS, unless infra host marked non EDNS. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>sq,:</em>&nbsp;</td><td>query to send. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buff,:</em>&nbsp;</td><td>buffer scratch space. </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="outside__network_8h_source.html#l00293">serviced_query::addr</a>, <a class="el" href="outside__network_8h_source.html#l00295">serviced_query::addrlen</a>, <a class="el" href="outside__network_8h_source.html#l00322">serviced_query::edns_lame_known</a>, <a class="el" href="outside__network_8h_source.html#l00116">outside_network::infra</a>, <a class="el" href="infra_8c_source.html#l00227">infra_host()</a>, <a class="el" href="outside__network_8h_source.html#l00320">serviced_query::last_rtt</a>, <a class="el" href="outside__network_8h_source.html#l00318">serviced_query::last_sent_time</a>, <a class="el" href="outside__network_8h_source.html#l00066">outside_network::now_secs</a>, <a class="el" href="outside__network_8h_source.html#l00068">outside_network::now_tv</a>, <a class="el" href="outside__network_8h_source.html#l00324">serviced_query::outnet</a>, <a class="el" href="outside__network_8h_source.html#l00328">serviced_query::pending</a>, <a class="el" href="outside__network_8c_source.html#l00902">pending_udp_query()</a>, <a class="el" href="outside__network_8c_source.html#l01192">serviced_encode()</a>, <a class="el" href="outside__network_8c_source.html#l01441">serviced_udp_callback()</a>, <a class="el" href="structserviced__query.html#a157e7e4a16c7ccf367f0ccd5daea6cf">serviced_query::status</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="outside__network_8c_source.html#l01556">outnet_serviced_query()</a>, and <a class="el" href="outside__network_8c_source.html#l01441">serviced_udp_callback()</a>.</p>

</div>
</div><p>
<a class="anchor" name="7908708961b40556179845d57e495992"></a><!-- doxytag: member="outside_network.c::outnet_serviced_query" ref="7908708961b40556179845d57e495992" args="(struct outside_network *outnet, uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, struct sockaddr_storage *addr, socklen_t addrlen, comm_point_callback_t *callback, void *callback_arg, ldns_buffer *buff, int(*arg_compare)(void *, void *))" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structserviced__query.html">serviced_query</a>* outnet_serviced_query           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structoutside__network.html">outside_network</a> *&nbsp;</td>
          <td class="paramname"> <em>outnet</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></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"><a class="el" href="netevent_8h.html#2ac6c8fe545b6f40c109a064ce17a24d">comm_point_callback_t</a> *&nbsp;</td>
          <td class="paramname"> <em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>callback_arg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>buff</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int(*)(void *, void *)&nbsp;</td>
          <td class="paramname"> <em>arg_compare</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>
Perform a serviced query to the authoritative servers. 
<p>
Duplicate efforts are detected, and EDNS, TCP and UDP retry is performed. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>outnet,:</em>&nbsp;</td><td>outside network, with rbtree of serviced queries. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qname,:</em>&nbsp;</td><td>what qname to query. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qnamelen,:</em>&nbsp;</td><td>length of qname in octets including 0 root label. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qtype,:</em>&nbsp;</td><td>rrset type to query (host format) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qclass,:</em>&nbsp;</td><td>query class. (host format) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flags,:</em>&nbsp;</td><td>flags u16 (host format), includes opcode, CD bit. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dnssec,:</em>&nbsp;</td><td>if set, DO bit is set in EDNS queries. If the value includes BIT_CD, CD bit is set when in EDNS queries. If the value includes BIT_DO, DO bit is set when in EDNS queries. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>callback,:</em>&nbsp;</td><td>callback function. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>callback_arg,:</em>&nbsp;</td><td>user argument to callback function. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>addr,:</em>&nbsp;</td><td>to which server to send the query. </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>buff,:</em>&nbsp;</td><td>scratch buffer to create query contents in. Empty on exit. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>arg_compare,:</em>&nbsp;</td><td>function to compare callback args, return true if identical. It is given the callback_arg and args that are listed. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on error, or pointer to serviced query that is used to answer this serviced query may be shared with other callbacks as well. </dd></dl>

<p>Referenced by <a class="el" href="libworker_8c_source.html#l00677">libworker_send_query()</a>, and <a class="el" href="worker_8c_source.html#l01172">worker_send_query()</a>.</p>

</div>
</div><p>
<a class="anchor" name="fba22c3a1d3e71a3913b22511d54aae3"></a><!-- doxytag: member="outside_network.c::outnet_serviced_query_stop" ref="fba22c3a1d3e71a3913b22511d54aae3" args="(struct serviced_query *sq, void *cb_arg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void outnet_serviced_query_stop           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structserviced__query.html">serviced_query</a> *&nbsp;</td>
          <td class="paramname"> <em>sq</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>
Remove service query callback. 
<p>
If that leads to zero callbacks, the query is completely cancelled. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>sq,:</em>&nbsp;</td><td>serviced query to adjust. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cb_arg,:</em>&nbsp;</td><td>callback argument of callback that needs removal. same as the callback_arg to <a class="el" href="outside__network_8c.html#7908708961b40556179845d57e495992" title="Perform a serviced query to the authoritative servers.">outnet_serviced_query()</a>. </td></tr>
  </table>
</dl>

<p>Referenced by <a class="el" href="outbound__list_8c_source.html#l00053">outbound_list_clear()</a>, and <a class="el" href="outbound__list_8c_source.html#l00077">outbound_list_remove()</a>.</p>

</div>
</div><p>
<a class="anchor" name="2617256141980f2585958a8bf5ba9017"></a><!-- doxytag: member="outside_network.c::outnet_get_mem" ref="2617256141980f2585958a8bf5ba9017" args="(struct outside_network *outnet)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t outnet_get_mem           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structoutside__network.html">outside_network</a> *&nbsp;</td>
          <td class="paramname"> <em>outnet</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get memory size in use by outside network. 
<p>
Counts buffers and outstanding query (serviced queries) malloced data. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>outnet,:</em>&nbsp;</td><td>outside network structure. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>size in bytes. </dd></dl>

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

</div>
</div><p>
<a class="anchor" name="45a55cb9fcf2079267798f9815b8a3cc"></a><!-- doxytag: member="outside_network.c::serviced_get_mem" ref="45a55cb9fcf2079267798f9815b8a3cc" args="(struct serviced_query *sq)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t serviced_get_mem           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structserviced__query.html">serviced_query</a> *&nbsp;</td>
          <td class="paramname"> <em>sq</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Get memory size in use by serviced query while it is servicing callbacks. 
<p>
This takes into account the pre-deleted status of it; it will be deleted when the callbacks are done. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>sq,:</em>&nbsp;</td><td>serviced query. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>size in bytes. </dd></dl>

<p>Referenced by <a class="el" href="worker_8c_source.html#l00131">worker_mem_report()</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>