Sophie

Sophie

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

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: util/data/msgencode.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_4b581c88b01efb1cf178857b56f0f2fb.html">util</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_ee94850d65962e9d83c6a3a53d0a46bb.html">data</a>
  </div>
</div>
<div class="contents">
<h1>msgencode.c File Reference</h1>This file contains a routines to encode DNS messages.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&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="msgreply_8h.html">util/data/msgreply.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="dname_8h.html">util/data/dname.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="regional_8h.html">util/regional.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="net__help_8h.html">util/net_help.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcompress__tree__node.html">compress_tree_node</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Data structure to help domain name compression in outgoing messages.  <a href="structcompress__tree__node.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#72a8d9590f53b06ba8f34ffae1d3a10b">RETVAL_OUTMEM</a>&nbsp;&nbsp;&nbsp;-2</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return code that means the function ran out of memory.  <a href="#72a8d9590f53b06ba8f34ffae1d3a10b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3a46cb1d101b92ca4d9da23c97bcf56"></a><!-- doxytag: member="msgencode.c::RETVAL_TRUNC" ref="e3a46cb1d101b92ca4d9da23c97bcf56" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#e3a46cb1d101b92ca4d9da23c97bcf56">RETVAL_TRUNC</a>&nbsp;&nbsp;&nbsp;-4</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return code that means the data did not fit (completely) in the packet <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#41aa8f63c944487a160a242622deb61e">RETVAL_OK</a>&nbsp;&nbsp;&nbsp;0</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return code that means all is peachy keen.  <a href="#41aa8f63c944487a160a242622deb61e"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#233da161e5523191a09079e50f16c112">compress_tree_search</a> (struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **tree, uint8_t *dname, int labs, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **match, int *matchlabels, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> ***insertpt)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find domain name in tree, returns exact and closest match.  <a href="#233da161e5523191a09079e50f16c112"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#bf17608145863827990e4125578863af">compress_tree_lookup</a> (struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **tree, uint8_t *dname, int labs, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> ***insertpt)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lookup a domain name in compression tree.  <a href="#bf17608145863827990e4125578863af"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#ce56bf5dc895d917cf29b2428db4413e">compress_tree_newnode</a> (uint8_t *dname, int labs, size_t offset, struct <a class="el" href="structregional.html">regional</a> *region)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create node for domain name compression tree.  <a href="#ce56bf5dc895d917cf29b2428db4413e"></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="msgencode_8c.html#152f8b76775f482f2311849474b1fa87">compress_tree_store</a> (uint8_t *dname, int labs, size_t offset, struct <a class="el" href="structregional.html">regional</a> *region, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> *closest, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **insertpt)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Store domain name and ancestors into compression tree.  <a href="#152f8b76775f482f2311849474b1fa87"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d08861df71f091f240542b15fc85565e"></a><!-- doxytag: member="msgencode.c::write_compressed_dname" ref="d08861df71f091f240542b15fc85565e" args="(ldns_buffer *pkt, uint8_t *dname, int labs, struct compress_tree_node *p)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#d08861df71f091f240542b15fc85565e">write_compressed_dname</a> (ldns_buffer *pkt, uint8_t *dname, int labs, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> *p)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compress a domain name <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="83850c81e13dbc1966e7c086f3a0d59f"></a><!-- doxytag: member="msgencode.c::compress_owner" ref="83850c81e13dbc1966e7c086f3a0d59f" args="(struct ub_packed_rrset_key *key, ldns_buffer *pkt, struct regional *region, struct compress_tree_node **tree, size_t owner_pos, uint16_t *owner_ptr, int owner_labs)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#83850c81e13dbc1966e7c086f3a0d59f">compress_owner</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *key, ldns_buffer *pkt, struct <a class="el" href="structregional.html">regional</a> *region, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **tree, size_t owner_pos, uint16_t *owner_ptr, int owner_labs)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compress owner name of RR, return RETVAL_OUTMEM RETVAL_TRUNC <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e42c5eba30ed57abbc03c6c04eb30901"></a><!-- doxytag: member="msgencode.c::compress_any_dname" ref="e42c5eba30ed57abbc03c6c04eb30901" args="(uint8_t *dname, ldns_buffer *pkt, int labs, struct regional *region, struct compress_tree_node **tree)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#e42c5eba30ed57abbc03c6c04eb30901">compress_any_dname</a> (uint8_t *dname, ldns_buffer *pkt, int labs, struct <a class="el" href="structregional.html">regional</a> *region, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **tree)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compress any domain name to the packet, return RETVAL_* <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7b18e09a50ac3e52821857cb10a1b91d"></a><!-- doxytag: member="msgencode.c::type_rdata_compressable" ref="7b18e09a50ac3e52821857cb10a1b91d" args="(struct ub_packed_rrset_key *key)" -->
static const ldns_rr_descriptor *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#7b18e09a50ac3e52821857cb10a1b91d">type_rdata_compressable</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *key)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return true if type needs domain name compression in rdata <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6eea9c5996568c0e51a9c9a3887c9e7c"></a><!-- doxytag: member="msgencode.c::compress_rdata" ref="6eea9c5996568c0e51a9c9a3887c9e7c" args="(ldns_buffer *pkt, uint8_t *rdata, size_t todolen, struct regional *region, struct compress_tree_node **tree, const ldns_rr_descriptor *desc)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#6eea9c5996568c0e51a9c9a3887c9e7c">compress_rdata</a> (ldns_buffer *pkt, uint8_t *rdata, size_t todolen, struct <a class="el" href="structregional.html">regional</a> *region, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **tree, const ldns_rr_descriptor *desc)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compress domain names in rdata, return RETVAL_* <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78e2421004eacce6e39501e75c7252a1"></a><!-- doxytag: member="msgencode.c::rrset_belongs_in_reply" ref="78e2421004eacce6e39501e75c7252a1" args="(ldns_pkt_section s, uint16_t rrtype, uint16_t qtype, int dnssec)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#78e2421004eacce6e39501e75c7252a1">rrset_belongs_in_reply</a> (ldns_pkt_section s, uint16_t rrtype, uint16_t qtype, int dnssec)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns true if RR type should be included. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b03d7a6adbcfb1b8e60847c099179de"></a><!-- doxytag: member="msgencode.c::packed_rrset_encode" ref="4b03d7a6adbcfb1b8e60847c099179de" args="(struct ub_packed_rrset_key *key, ldns_buffer *pkt, uint16_t *num_rrs, uint32_t timenow, struct regional *region, int do_data, int do_sig, struct compress_tree_node **tree, ldns_pkt_section s, uint16_t qtype, int dnssec)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#4b03d7a6adbcfb1b8e60847c099179de">packed_rrset_encode</a> (struct <a class="el" href="structub__packed__rrset__key.html">ub_packed_rrset_key</a> *key, ldns_buffer *pkt, uint16_t *num_rrs, uint32_t timenow, struct <a class="el" href="structregional.html">regional</a> *region, int do_data, int do_sig, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **tree, ldns_pkt_section s, uint16_t qtype, int dnssec)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">store rrset in buffer in wireformat, return RETVAL_* <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="600e5c5b3402db18b7ab7fce19410333"></a><!-- doxytag: member="msgencode.c::insert_section" ref="600e5c5b3402db18b7ab7fce19410333" args="(struct reply_info *rep, size_t num_rrsets, uint16_t *num_rrs, ldns_buffer *pkt, size_t rrsets_before, uint32_t timenow, struct regional *region, struct compress_tree_node **tree, ldns_pkt_section s, uint16_t qtype, int dnssec)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#600e5c5b3402db18b7ab7fce19410333">insert_section</a> (struct <a class="el" href="structreply__info.html">reply_info</a> *rep, size_t num_rrsets, uint16_t *num_rrs, ldns_buffer *pkt, size_t rrsets_before, uint32_t timenow, struct <a class="el" href="structregional.html">regional</a> *region, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **tree, ldns_pkt_section s, uint16_t qtype, int dnssec)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">store msg section in wireformat buffer, return RETVAL_* <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6a4bc23cf2f5dfed1ac0e04ced44f7db"></a><!-- doxytag: member="msgencode.c::insert_query" ref="6a4bc23cf2f5dfed1ac0e04ced44f7db" args="(struct query_info *qinfo, struct compress_tree_node **tree, ldns_buffer *buffer, struct regional *region)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#6a4bc23cf2f5dfed1ac0e04ced44f7db">insert_query</a> (struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **tree, ldns_buffer *buffer, struct <a class="el" href="structregional.html">regional</a> *region)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">store query section in wireformat buffer, return RETVAL <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#aa1a517a935ecda1e3cb8f7a8ad11212">reply_info_encode</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, ldns_buffer *buffer, uint32_t timenow, struct <a class="el" href="structregional.html">regional</a> *region, uint16_t udpsize, int dnssec)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Regenerate the wireformat from the stored msg reply.  <a href="#aa1a517a935ecda1e3cb8f7a8ad11212"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgencode_8c.html#ca36749b4e65a1a7371f0e222520589e">calc_edns_field_size</a> (struct <a class="el" href="structedns__data.html">edns_data</a> *edns)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Estimate size of EDNS record in packet.  <a href="#ca36749b4e65a1a7371f0e222520589e"></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="msgencode_8c.html#e83b857eb3434b44696e90c368bdb144">attach_edns_record</a> (ldns_buffer *pkt, struct <a class="el" href="structedns__data.html">edns_data</a> *edns)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Attach EDNS record to buffer.  <a href="#e83b857eb3434b44696e90c368bdb144"></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="msgencode_8c.html#288e9d8364474d648df326decd4b9fe5">reply_info_answer_encode</a> (struct <a class="el" href="structquery__info.html">query_info</a> *qinf, struct <a class="el" href="structreply__info.html">reply_info</a> *rep, uint16_t id, uint16_t qflags, ldns_buffer *pkt, uint32_t timenow, int cached, struct <a class="el" href="structregional.html">regional</a> *region, uint16_t udpsize, struct <a class="el" href="structedns__data.html">edns_data</a> *edns, int dnssec, int secure)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate answer from <a class="el" href="structreply__info.html" title="Structure to store DNS query and the reply packet.">reply_info</a>.  <a href="#288e9d8364474d648df326decd4b9fe5"></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="msgencode_8c.html#3604016562601cb6d2b42b276e3b9da6">qinfo_query_encode</a> (ldns_buffer *pkt, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encode query packet.  <a href="#3604016562601cb6d2b42b276e3b9da6"></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="msgencode_8c.html#2d0675b3f08e52142580fdf3bae5c80f">error_encode</a> (ldns_buffer *buf, int r, struct <a class="el" href="structquery__info.html">query_info</a> *qinfo, uint16_t qid, uint16_t qflags, struct <a class="el" href="structedns__data.html">edns_data</a> *edns)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encode an error.  <a href="#2d0675b3f08e52142580fdf3bae5c80f"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This file contains a routines to encode DNS messages. 
<p>
<hr><h2>Define Documentation</h2>
<a class="anchor" name="72a8d9590f53b06ba8f34ffae1d3a10b"></a><!-- doxytag: member="msgencode.c::RETVAL_OUTMEM" ref="72a8d9590f53b06ba8f34ffae1d3a10b" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define RETVAL_OUTMEM&nbsp;&nbsp;&nbsp;-2          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
return code that means the function ran out of memory. 
<p>
negative so it does not conflict with DNS rcodes. 
<p>Referenced by <a class="el" href="msgencode_8c_source.html#l00329">compress_any_dname()</a>, <a class="el" href="msgencode_8c_source.html#l00280">compress_owner()</a>, and <a class="el" href="msgencode_8c_source.html#l00578">insert_query()</a>.</p>

</div>
</div><p>
<a class="anchor" name="41aa8f63c944487a160a242622deb61e"></a><!-- doxytag: member="msgencode.c::RETVAL_OK" ref="41aa8f63c944487a160a242622deb61e" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define RETVAL_OK&nbsp;&nbsp;&nbsp;0          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
return code that means all is peachy keen. 
<p>
Equal to DNS rcode NOERROR 
<p>Referenced by <a class="el" href="msgencode_8c_source.html#l00329">compress_any_dname()</a>, <a class="el" href="msgencode_8c_source.html#l00280">compress_owner()</a>, <a class="el" href="msgencode_8c_source.html#l00360">compress_rdata()</a>, <a class="el" href="msgencode_8c_source.html#l00578">insert_query()</a>, <a class="el" href="msgencode_8c_source.html#l00527">insert_section()</a>, <a class="el" href="msgencode_8c_source.html#l00442">packed_rrset_encode()</a>, and <a class="el" href="msgencode_8c_source.html#l00598">reply_info_encode()</a>.</p>

</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="233da161e5523191a09079e50f16c112"></a><!-- doxytag: member="msgencode.c::compress_tree_search" ref="233da161e5523191a09079e50f16c112" args="(struct compress_tree_node **tree, uint8_t *dname, int labs, struct compress_tree_node **match, int *matchlabels, struct compress_tree_node ***insertpt)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int compress_tree_search           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **&nbsp;</td>
          <td class="paramname"> <em>tree</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>labs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **&nbsp;</td>
          <td class="paramname"> <em>match</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>matchlabels</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> ***&nbsp;</td>
          <td class="paramname"> <em>insertpt</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>
Find domain name in tree, returns exact and closest match. 
<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>tree,:</em>&nbsp;</td><td>root of tree. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>pointer to uncompressed dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>labs,:</em>&nbsp;</td><td>number of labels in domain name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>match,:</em>&nbsp;</td><td>closest or exact match. guaranteed to be smaller or equal to the sought dname. can be null if the tree is empty. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>matchlabels,:</em>&nbsp;</td><td>number of labels that match with closest match. can be zero is there is no match. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>insertpt,:</em>&nbsp;</td><td>insert location for dname, if not found. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 if no exact match. </dd></dl>

<p>References <a class="el" href="msgencode_8c_source.html#l00079">compress_tree_node::dname</a>, <a class="el" href="dname_8c_source.html#l00424">dname_lab_cmp()</a>, <a class="el" href="msgencode_8c_source.html#l00081">compress_tree_node::labs</a>, <a class="el" href="msgencode_8c_source.html#l00072">compress_tree_node::left</a>, and <a class="el" href="msgencode_8c_source.html#l00074">compress_tree_node::right</a>.</p>

<p>Referenced by <a class="el" href="msgencode_8c_source.html#l00140">compress_tree_lookup()</a>.</p>

</div>
</div><p>
<a class="anchor" name="bf17608145863827990e4125578863af"></a><!-- doxytag: member="msgencode.c::compress_tree_lookup" ref="bf17608145863827990e4125578863af" args="(struct compress_tree_node **tree, uint8_t *dname, int labs, struct compress_tree_node ***insertpt)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a>* compress_tree_lookup           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **&nbsp;</td>
          <td class="paramname"> <em>tree</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>labs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> ***&nbsp;</td>
          <td class="paramname"> <em>insertpt</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static, read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Lookup a domain name in compression tree. 
<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>tree,:</em>&nbsp;</td><td>root of tree (not the node with '.'). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>pointer to uncompressed dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>labs,:</em>&nbsp;</td><td>number of labels in domain name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>insertpt,:</em>&nbsp;</td><td>insert location for dname, if not found. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 if not found or compress treenode with best compression. </dd></dl>

<p>References <a class="el" href="msgencode_8c_source.html#l00100">compress_tree_search()</a>, <a class="el" href="msgencode_8c_source.html#l00081">compress_tree_node::labs</a>, and <a class="el" href="msgencode_8c_source.html#l00077">compress_tree_node::parent</a>.</p>

<p>Referenced by <a class="el" href="msgencode_8c_source.html#l00329">compress_any_dname()</a>, and <a class="el" href="msgencode_8c_source.html#l00280">compress_owner()</a>.</p>

</div>
</div><p>
<a class="anchor" name="ce56bf5dc895d917cf29b2428db4413e"></a><!-- doxytag: member="msgencode.c::compress_tree_newnode" ref="ce56bf5dc895d917cf29b2428db4413e" args="(uint8_t *dname, int labs, size_t offset, struct regional *region)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a>* compress_tree_newnode           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>labs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structregional.html">regional</a> *&nbsp;</td>
          <td class="paramname"> <em>region</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static, read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Create node for domain name compression tree. 
<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>dname,:</em>&nbsp;</td><td>pointer to uncompressed dname (stored in tree). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>labs,:</em>&nbsp;</td><td>number of labels in dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>offset,:</em>&nbsp;</td><td>offset into packet for dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>region,:</em>&nbsp;</td><td>how to allocate memory for new node. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>new node or 0 on malloc failure. </dd></dl>

<p>References <a class="el" href="msgencode_8c_source.html#l00079">compress_tree_node::dname</a>, <a class="el" href="msgencode_8c_source.html#l00081">compress_tree_node::labs</a>, <a class="el" href="msgencode_8c_source.html#l00072">compress_tree_node::left</a>, <a class="el" href="msgencode_8c_source.html#l00083">compress_tree_node::offset</a>, <a class="el" href="msgencode_8c_source.html#l00077">compress_tree_node::parent</a>, <a class="el" href="regional_8c_source.html#l00116">regional_alloc()</a>, and <a class="el" href="msgencode_8c_source.html#l00074">compress_tree_node::right</a>.</p>

<p>Referenced by <a class="el" href="msgencode_8c_source.html#l00199">compress_tree_store()</a>.</p>

</div>
</div><p>
<a class="anchor" name="152f8b76775f482f2311849474b1fa87"></a><!-- doxytag: member="msgencode.c::compress_tree_store" ref="152f8b76775f482f2311849474b1fa87" args="(uint8_t *dname, int labs, size_t offset, struct regional *region, struct compress_tree_node *closest, struct compress_tree_node **insertpt)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int compress_tree_store           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>labs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structregional.html">regional</a> *&nbsp;</td>
          <td class="paramname"> <em>region</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> *&nbsp;</td>
          <td class="paramname"> <em>closest</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structcompress__tree__node.html">compress_tree_node</a> **&nbsp;</td>
          <td class="paramname"> <em>insertpt</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>
Store domain name and ancestors into compression tree. 
<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>dname,:</em>&nbsp;</td><td>pointer to uncompressed dname (stored in tree). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>labs,:</em>&nbsp;</td><td>number of labels in dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>offset,:</em>&nbsp;</td><td>offset into packet for dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>region,:</em>&nbsp;</td><td>how to allocate memory for new node. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>closest,:</em>&nbsp;</td><td>match from previous lookup, used to compress dname. may be NULL if no previous match. if the tree has an ancestor of dname already, this must be it. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>insertpt,:</em>&nbsp;</td><td>where to insert the dname in tree. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on memory error. </dd></dl>

<p>References <a class="el" href="msgencode_8c_source.html#l00171">compress_tree_newnode()</a>, <a class="el" href="msgencode_8c_source.html#l00081">compress_tree_node::labs</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="msgencode_8c_source.html#l00077">compress_tree_node::parent</a>, <a class="el" href="msgparse_8h_source.html#l00196">PTR_MAX_OFFSET</a>, and <a class="el" href="msgencode_8c_source.html#l00074">compress_tree_node::right</a>.</p>

<p>Referenced by <a class="el" href="msgencode_8c_source.html#l00329">compress_any_dname()</a>, <a class="el" href="msgencode_8c_source.html#l00280">compress_owner()</a>, and <a class="el" href="msgencode_8c_source.html#l00578">insert_query()</a>.</p>

</div>
</div><p>
<a class="anchor" name="aa1a517a935ecda1e3cb8f7a8ad11212"></a><!-- doxytag: member="msgencode.c::reply_info_encode" ref="aa1a517a935ecda1e3cb8f7a8ad11212" args="(struct query_info *qinfo, struct reply_info *rep, uint16_t id, uint16_t flags, ldns_buffer *buffer, uint32_t timenow, struct regional *region, uint16_t udpsize, int dnssec)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int reply_info_encode           </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="structreply__info.html">reply_info</a> *&nbsp;</td>
          <td class="paramname"> <em>rep</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>id</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">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>buffer</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>timenow</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structregional.html">regional</a> *&nbsp;</td>
          <td class="paramname"> <em>region</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>udpsize</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>dnssec</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Regenerate the wireformat from the stored msg reply. 
<p>
If the buffer is too small then the message is truncated at a whole rrset and the TC bit set, or whole rrsets are left out of the additional and the TC bit is not set. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query info to store. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rep,:</em>&nbsp;</td><td>reply to store. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>id,:</em>&nbsp;</td><td>id value to store, network order. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flags,:</em>&nbsp;</td><td>flags value to store, host order. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buffer,:</em>&nbsp;</td><td>buffer to store the packet into. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>time now, to adjust ttl values. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>region,:</em>&nbsp;</td><td>to store temporary data in. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>udpsize,:</em>&nbsp;</td><td>size of the answer, 512, from EDNS, or 64k for TCP. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dnssec,:</em>&nbsp;</td><td>if 0 DNSSEC records are omitted from the answer. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: nonzero is success, or 0 on error: malloc failure (no log_err has been done). </dd></dl>

<p>References <a class="el" href="msgreply_8h_source.html#l00133">reply_info::an_numrrsets</a>, <a class="el" href="msgreply_8h_source.html#l00138">reply_info::ar_numrrsets</a>, <a class="el" href="msgencode_8c_source.html#l00578">insert_query()</a>, <a class="el" href="msgencode_8c_source.html#l00527">insert_section()</a>, <a class="el" href="msgreply_8h_source.html#l00136">reply_info::ns_numrrsets</a>, <a class="el" href="msgreply_8h_source.html#l00113">reply_info::qdcount</a>, <a class="el" href="msgreply_8h_source.html#l00068">query_info::qtype</a>, <a class="el" href="msgencode_8c_source.html#l00057">RETVAL_OK</a>, and <a class="el" href="msgencode_8c_source.html#l00055">RETVAL_TRUNC</a>.</p>

<p>Referenced by <a class="el" href="msgreply_8c_source.html#l00755">log_dns_msg()</a>, <a class="el" href="unitmsgparse_8c_source.html#l00252">perf_encode()</a>, <a class="el" href="msgencode_8c_source.html#l00714">reply_info_answer_encode()</a>, and <a class="el" href="unitmsgparse_8c_source.html#l00322">testpkt()</a>.</p>

</div>
</div><p>
<a class="anchor" name="ca36749b4e65a1a7371f0e222520589e"></a><!-- doxytag: member="msgencode.c::calc_edns_field_size" ref="ca36749b4e65a1a7371f0e222520589e" args="(struct edns_data *edns)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint16_t calc_edns_field_size           </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;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Estimate size of EDNS record in packet. 
<p>
EDNS record will be no larger. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>edns data or NULL. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>octets to reserve for EDNS. </dd></dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00204">edns_data::edns_present</a>.</p>

<p>Referenced by <a class="el" href="msgencode_8c_source.html#l00769">error_encode()</a>, <a class="el" href="msgencode_8c_source.html#l00714">reply_info_answer_encode()</a>, and <a class="el" href="unitmsgparse_8c_source.html#l00322">testpkt()</a>.</p>

</div>
</div><p>
<a class="anchor" name="e83b857eb3434b44696e90c368bdb144"></a><!-- doxytag: member="msgencode.c::attach_edns_record" ref="e83b857eb3434b44696e90c368bdb144" args="(ldns_buffer *pkt, struct edns_data *edns)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void attach_edns_record           </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="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></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Attach EDNS record to buffer. 
<p>
Buffer has complete packet. There must be enough room left for the EDNS record. <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 added to. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>if NULL or present=0, nothing is added to the packet. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00210">edns_data::bits</a>, <a class="el" href="msgparse_8h_source.html#l00204">edns_data::edns_present</a>, <a class="el" href="msgparse_8h_source.html#l00208">edns_data::edns_version</a>, <a class="el" href="msgparse_8h_source.html#l00206">edns_data::ext_rcode</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#l00598">chaos_replystr()</a>, <a class="el" href="msgencode_8c_source.html#l00769">error_encode()</a>, <a class="el" href="fake__event_8c_source.html#l00861">outnet_serviced_query()</a>, <a class="el" href="unitmsgparse_8c_source.html#l00252">perf_encode()</a>, <a class="el" href="perf_8c_source.html#l00458">qlist_parse_line()</a>, <a class="el" href="msgencode_8c_source.html#l00714">reply_info_answer_encode()</a>, <a class="el" href="outside__network_8c_source.html#l01192">serviced_encode()</a>, <a class="el" href="unitmsgparse_8c_source.html#l00322">testpkt()</a>, and <a class="el" href="worker_8c_source.html#l00681">worker_handle_request()</a>.</p>

</div>
</div><p>
<a class="anchor" name="288e9d8364474d648df326decd4b9fe5"></a><!-- doxytag: member="msgencode.c::reply_info_answer_encode" ref="288e9d8364474d648df326decd4b9fe5" args="(struct query_info *qinf, struct reply_info *rep, uint16_t id, uint16_t qflags, ldns_buffer *pkt, uint32_t timenow, int cached, struct regional *region, uint16_t udpsize, struct edns_data *edns, int dnssec, int secure)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int reply_info_answer_encode           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structreply__info.html">reply_info</a> *&nbsp;</td>
          <td class="paramname"> <em>rep</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qflags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>dest</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>timenow</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>cached</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structregional.html">regional</a> *&nbsp;</td>
          <td class="paramname"> <em>region</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>udpsize</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">int&nbsp;</td>
          <td class="paramname"> <em>dnssec</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>secure</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Generate answer from <a class="el" href="structreply__info.html" title="Structure to store DNS query and the reply packet.">reply_info</a>. 
<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>qinf,:</em>&nbsp;</td><td>query information that provides query section in packet. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rep,:</em>&nbsp;</td><td>reply to fill in. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>id,:</em>&nbsp;</td><td>id word from the query. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qflags,:</em>&nbsp;</td><td>flags word from the query. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dest,:</em>&nbsp;</td><td>buffer to put message into; will truncate if it does not fit. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timenow,:</em>&nbsp;</td><td>time to subtract. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>cached,:</em>&nbsp;</td><td>set true if a cached reply (so no AA bit). set false for the first reply. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>region,:</em>&nbsp;</td><td>where to allocate temp variables (for compression). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>udpsize,:</em>&nbsp;</td><td>size of the answer, 512, from EDNS, or 64k for TCP. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>EDNS data included in the answer, NULL for none. or if edns_present = 0, it is not included. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dnssec,:</em>&nbsp;</td><td>if 0 DNSSEC records are omitted from the answer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>secure,:</em>&nbsp;</td><td>if 1, the AD bit is set in the reply. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on error (server failure). </dd></dl>

<p>References <a class="el" href="msgencode_8c_source.html#l00691">attach_edns_record()</a>, <a class="el" href="msgreply_8h_source.html#l00105">reply_info::authoritative</a>, <a class="el" href="net__help_8h_source.html#l00066">BIT_AA</a>, <a class="el" href="net__help_8h_source.html#l00056">BIT_AD</a>, <a class="el" href="net__help_8h_source.html#l00054">BIT_CD</a>, <a class="el" href="net__help_8h_source.html#l00068">BIT_QR</a>, <a class="el" href="net__help_8h_source.html#l00062">BIT_RD</a>, <a class="el" href="msgencode_8c_source.html#l00682">calc_edns_field_size()</a>, <a class="el" href="msgreply_8h_source.html#l00099">reply_info::flags</a>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="log_8c_source.html#l00241">log_err()</a>, and <a class="el" href="msgencode_8c_source.html#l00598">reply_info_encode()</a>.</p>

<p>Referenced by <a class="el" href="worker_8c_source.html#l00501">answer_from_cache()</a>, <a class="el" href="worker_8c_source.html#l00416">answer_norec_from_cache()</a>, <a class="el" href="localzone_8c_source.html#l00983">local_encode()</a>, <a class="el" href="mesh_8c_source.html#l00614">mesh_do_callback()</a>, and <a class="el" href="mesh_8c_source.html#l00662">mesh_send_reply()</a>.</p>

</div>
</div><p>
<a class="anchor" name="3604016562601cb6d2b42b276e3b9da6"></a><!-- doxytag: member="msgencode.c::qinfo_query_encode" ref="3604016562601cb6d2b42b276e3b9da6" args="(ldns_buffer *pkt, struct query_info *qinfo)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void qinfo_query_encode           </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="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Encode query packet. 
<p>
Assumes the buffer is large enough. <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>where to store the packet. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>query info. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="msgreply_8h_source.html#l00070">query_info::qclass</a>, <a class="el" href="msgreply_8h_source.html#l00064">query_info::qname</a>, <a class="el" href="msgreply_8h_source.html#l00066">query_info::qname_len</a>, and <a class="el" href="msgreply_8h_source.html#l00068">query_info::qtype</a>.</p>

<p>Referenced by <a class="el" href="perf_8c_source.html#l00458">qlist_parse_line()</a>, and <a class="el" href="streamtcp_8c_source.html#l00099">write_q()</a>.</p>

</div>
</div><p>
<a class="anchor" name="2d0675b3f08e52142580fdf3bae5c80f"></a><!-- doxytag: member="msgencode.c::error_encode" ref="2d0675b3f08e52142580fdf3bae5c80f" args="(ldns_buffer *buf, int r, struct query_info *qinfo, uint16_t qid, uint16_t qflags, struct edns_data *edns)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void error_encode           </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">int&nbsp;</td>
          <td class="paramname"> <em>r</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structquery__info.html">query_info</a> *&nbsp;</td>
          <td class="paramname"> <em>qinfo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>qflags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">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></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Encode an error. 
<p>
With QR and RA set.<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>where to store the packet. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>r,:</em>&nbsp;</td><td>RCODE value to encode. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qinfo,:</em>&nbsp;</td><td>if not NULL, the query is included. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qid,:</em>&nbsp;</td><td>query ID to set in packet. network order. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>qflags,:</em>&nbsp;</td><td>original query flags (to copy RD and CD bits). host order. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>if not NULL, this is the query edns info, and an edns reply is attached. Only attached if EDNS record fits reply. </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#l00054">BIT_CD</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="net__help_8h_source.html#l00062">BIT_RD</a>, <a class="el" href="msgparse_8h_source.html#l00210">edns_data::bits</a>, <a class="el" href="msgencode_8c_source.html#l00682">calc_edns_field_size()</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="msgparse_8h_source.html#l00206">edns_data::ext_rcode</a>, <a class="el" href="msgreply_8h_source.html#l00070">query_info::qclass</a>, <a class="el" href="msgreply_8h_source.html#l00064">query_info::qname</a>, <a class="el" href="msgreply_8h_source.html#l00066">query_info::qname_len</a>, <a class="el" href="msgreply_8h_source.html#l00068">query_info::qtype</a>, 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#l00501">answer_from_cache()</a>, <a class="el" href="worker_8c_source.html#l00416">answer_norec_from_cache()</a>, <a class="el" href="libworker_8c_source.html#l00577">libworker_bg_done_cb()</a>, <a class="el" href="localzone_8c_source.html#l00983">local_encode()</a>, <a class="el" href="localzone_8c_source.html#l01063">lz_zone_answer()</a>, <a class="el" href="mesh_8c_source.html#l00268">mesh_new_client()</a>, <a class="el" href="mesh_8c_source.html#l00662">mesh_send_reply()</a>, and <a class="el" href="worker_8c_source.html#l00681">worker_handle_request()</a>.</p>

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