Sophie

Sophie

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

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/msgparse.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="dir_4b581c88b01efb1cf178857b56f0f2fb.html">util</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_ee94850d65962e9d83c6a3a53d0a46bb.html">data</a>
  </div>
</div>
<div class="contents">
<h1>msgparse.h File Reference</h1>Contains message parsing data structures.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;<a class="el" href="lruhash_8h.html">util/storage/lruhash.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="structmsg__parse.html">msg_parse</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Data stored in scratch pad memory during parsing.  <a href="structmsg__parse.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrrset__parse.html">rrset_parse</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Data stored for an rrset during parsing.  <a href="structrrset__parse.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structrr__parse.html">rr_parse</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Data stored for an RR during parsing.  <a href="structrr__parse.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structedns__data.html">edns_data</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">EDNS data storage EDNS rdata is ignored.  <a href="structedns__data.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="msgparse_8h.html#3c7a00da9ed72de4136a75a95822342d">PARSE_TABLE_SIZE</a>&nbsp;&nbsp;&nbsp;32</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">number of buckets in parse rrset hash table.  <a href="#3c7a00da9ed72de4136a75a95822342d"></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="msgparse_8h.html#e7793db9efaf811b377c5ae656182879">NORR_TTL</a>&nbsp;&nbsp;&nbsp;5</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Negative cache time (for entries without any RRs.  <a href="#e7793db9efaf811b377c5ae656182879"></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="msgparse_8h.html#dd9447cae6c60304291bf07f3c923836">LABEL_IS_PTR</a>(x)&nbsp;&nbsp;&nbsp;( ((x)&amp;0xc0) == 0xc0 )</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if label length is first octet of a compression pointer, pass u8.  <a href="#dd9447cae6c60304291bf07f3c923836"></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="msgparse_8h.html#cfe95d3f6cd96f7c26daade2696f1ace">PTR_OFFSET</a>(x, y)&nbsp;&nbsp;&nbsp;( ((x)&amp;0x3f)&lt;&lt;8 | (y) )</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate destination offset of a compression pointer.  <a href="#cfe95d3f6cd96f7c26daade2696f1ace"></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="msgparse_8h.html#08b71f0e81babc376be0beb9f5b48e37">PTR_CREATE</a>(offset)&nbsp;&nbsp;&nbsp;((uint16_t)(0xc000 | (offset)))</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">create a compression pointer to the given offset.  <a href="#08b71f0e81babc376be0beb9f5b48e37"></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="msgparse_8h.html#6f13c1dcb0fdd3004247d09c4a7745b1">EDNS_RCODE_BADVERS</a>&nbsp;&nbsp;&nbsp;16</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">error codes, extended with EDNS, so &gt; 15.  <a href="#6f13c1dcb0fdd3004247d09c4a7745b1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bf7ba596a388ae51b433e73cb3572f8c"></a><!-- doxytag: member="msgparse.h::PTR_MAX_OFFSET" ref="bf7ba596a388ae51b433e73cb3572f8c" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8h.html#bf7ba596a388ae51b433e73cb3572f8c">PTR_MAX_OFFSET</a>&nbsp;&nbsp;&nbsp;0x3fff</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">largest valid compression offset <br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8h.html#3e82b2f3e8221b91495881d330b2a56e">get_rdf_size</a> (ldns_rdf_type rdf)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtain size in the packet of an rr type, that is before dname type.  <a href="#3e82b2f3e8221b91495881d330b2a56e"></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="msgparse_8h.html#e401ab4e7b689d89748a2338c74b3a00">parse_packet</a> (ldns_buffer *pkt, struct <a class="el" href="structmsg__parse.html">msg_parse</a> *msg, struct <a class="el" href="structregional.html">regional</a> *region)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parse the packet.  <a href="#e401ab4e7b689d89748a2338c74b3a00"></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="msgparse_8h.html#f679621c618720785b21731ba196707a">parse_extract_edns</a> (struct <a class="el" href="structmsg__parse.html">msg_parse</a> *msg, struct <a class="el" href="structedns__data.html">edns_data</a> *edns)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">After parsing the packet, extract EDNS data from packet.  <a href="#f679621c618720785b21731ba196707a"></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="msgparse_8h.html#63ad5f4ac98e84baf9a49655de5b0335">parse_edns_from_pkt</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">If EDNS data follows a query section, extract it and initialize edns struct.  <a href="#63ad5f4ac98e84baf9a49655de5b0335"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8h.html#66930546eb0b31199cf153a7c8511bb2">pkt_hash_rrset</a> (ldns_buffer *pkt, uint8_t *dname, uint16_t type, uint16_t dclass, uint32_t rrset_flags)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate hash value for rrset in packet.  <a href="#66930546eb0b31199cf153a7c8511bb2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8h.html#14b1fe22f49dff26f8a13e762d423abf">msgparse_hashtable_lookup</a> (struct <a class="el" href="structmsg__parse.html">msg_parse</a> *msg, ldns_buffer *pkt, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> h, uint32_t rrset_flags, uint8_t *dname, size_t dnamelen, uint16_t type, uint16_t dclass)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lookup in msg hashtable to find a rrset.  <a href="#14b1fe22f49dff26f8a13e762d423abf"></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="msgparse_8h.html#af7bdfef78ef602881c891507a6a02cc">msgparse_bucket_remove</a> (struct <a class="el" href="structmsg__parse.html">msg_parse</a> *msg, struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *rrset)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove rrset from hash table.  <a href="#af7bdfef78ef602881c891507a6a02cc"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8h.html#51b3b260d8fe0293597171d7c71394ba">MAX_TTL</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Maximum TTL that is allowed.  <a href="#51b3b260d8fe0293597171d7c71394ba"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8h.html#51386653eedf54099bfed21f77aac3a7">MIN_TTL</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Minimum TTL that is allowed.  <a href="#51386653eedf54099bfed21f77aac3a7"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
Contains message parsing data structures. 
<p>
These point back into the packet buffer.<p>
During parsing RRSIGS are put together with the rrsets they (claim to) sign. This process works as follows: o if RRSIG follows the data rrset, it is added to the rrset rrsig list. o if no matching data rrset is found, the RRSIG becomes a new rrset. o If the data rrset later follows the RRSIG o See if the RRSIG rrset contains multiple types, and needs to have the rrsig(s) for that data type split off. o Put the data rr as data type in the rrset and rrsig in list. o RRSIGs are allowed to move to a different section. The section of the data item is used for the final rrset. o multiple signatures over an RRset are possible.<p>
For queries of qtype=RRSIG, some special handling is needed, to avoid splitting the RRSIG in the answer section. o duplicate, not split, RRSIGs from the answer section, if qtype=RRSIG. o check for doubles in the rrsig list when adding an RRSIG to data, so that a data rrset is signed by RRSIGs with different rdata. when qtype=RRSIG. This will move the RRSIG from the answer section to sign the data further in the packet (if possible). If then after that, more RRSIGs are found that sign the data as well, doubles are removed. <hr><h2>Define Documentation</h2>
<a class="anchor" name="3c7a00da9ed72de4136a75a95822342d"></a><!-- doxytag: member="msgparse.h::PARSE_TABLE_SIZE" ref="3c7a00da9ed72de4136a75a95822342d" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define PARSE_TABLE_SIZE&nbsp;&nbsp;&nbsp;32          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
number of buckets in parse rrset hash table. 
<p>
Must be power of 2. 
<p>Referenced by <a class="el" href="msgparse_8c_source.html#l00374">change_rrsig_rrset()</a>, <a class="el" href="msgparse_8c_source.html#l00255">msgparse_bucket_remove()</a>, <a class="el" href="msgparse_8c_source.html#l00211">msgparse_hashtable_lookup()</a>, and <a class="el" href="msgparse_8c_source.html#l00069">new_rrset()</a>.</p>

</div>
</div><p>
<a class="anchor" name="e7793db9efaf811b377c5ae656182879"></a><!-- doxytag: member="msgparse.h::NORR_TTL" ref="e7793db9efaf811b377c5ae656182879" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NORR_TTL&nbsp;&nbsp;&nbsp;5          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Negative cache time (for entries without any RRs. 
<p>
) 
<p>Referenced by <a class="el" href="iterator_8c_source.html#l00241">error_response_cache()</a>, and <a class="el" href="msgreply_8c_source.html#l00371">parse_copy_decompress()</a>.</p>

</div>
</div><p>
<a class="anchor" name="dd9447cae6c60304291bf07f3c923836"></a><!-- doxytag: member="msgparse.h::LABEL_IS_PTR" ref="dd9447cae6c60304291bf07f3c923836" args="(x)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define LABEL_IS_PTR          </td>
          <td>(</td>
          <td class="paramtype">x&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td>&nbsp;&nbsp;&nbsp;( ((x)&amp;0xc0) == 0xc0 )</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Check if label length is first octet of a compression pointer, pass u8. 
<p>

<p>Referenced by <a class="el" href="dname_8c_source.html#l00605">dname_is_root()</a>, <a class="el" href="dname_8c_source.html#l00217">dname_pkt_compare()</a>, <a class="el" href="dname_8c_source.html#l00307">dname_pkt_copy()</a>, <a class="el" href="dname_8c_source.html#l00280">dname_pkt_hash()</a>, <a class="el" href="dname_8c_source.html#l00337">dname_print()</a>, <a class="el" href="dname_8c_source.html#l00615">dname_remove_label()</a>, <a class="el" href="dname_8c_source.html#l00167">pkt_dname_len()</a>, <a class="el" href="dname_8c_source.html#l00147">pkt_dname_tolower()</a>, <a class="el" href="outside__network_8c_source.html#l01265">serviced_check_qname()</a>, and <a class="el" href="msgparse_8c_source.html#l00049">smart_compare()</a>.</p>

</div>
</div><p>
<a class="anchor" name="cfe95d3f6cd96f7c26daade2696f1ace"></a><!-- doxytag: member="msgparse.h::PTR_OFFSET" ref="cfe95d3f6cd96f7c26daade2696f1ace" args="(x, y)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define PTR_OFFSET          </td>
          <td>(</td>
          <td class="paramtype">x,         <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">y&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td>&nbsp;&nbsp;&nbsp;( ((x)&amp;0x3f)&lt;&lt;8 | (y) )</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Calculate destination offset of a compression pointer. 
<p>
pass first and second octets of the compression pointer. 
<p>Referenced by <a class="el" href="dname_8c_source.html#l00217">dname_pkt_compare()</a>, <a class="el" href="dname_8c_source.html#l00307">dname_pkt_copy()</a>, <a class="el" href="dname_8c_source.html#l00280">dname_pkt_hash()</a>, <a class="el" href="dname_8c_source.html#l00337">dname_print()</a>, <a class="el" href="dname_8c_source.html#l00167">pkt_dname_len()</a>, <a class="el" href="dname_8c_source.html#l00147">pkt_dname_tolower()</a>, <a class="el" href="outside__network_8c_source.html#l01265">serviced_check_qname()</a>, and <a class="el" href="msgparse_8c_source.html#l00049">smart_compare()</a>.</p>

</div>
</div><p>
<a class="anchor" name="08b71f0e81babc376be0beb9f5b48e37"></a><!-- doxytag: member="msgparse.h::PTR_CREATE" ref="08b71f0e81babc376be0beb9f5b48e37" args="(offset)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define PTR_CREATE          </td>
          <td>(</td>
          <td class="paramtype">offset&nbsp;</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td>&nbsp;&nbsp;&nbsp;((uint16_t)(0xc000 | (offset)))</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
create a compression pointer to the given offset. 
<p>

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

</div>
</div><p>
<a class="anchor" name="6f13c1dcb0fdd3004247d09c4a7745b1"></a><!-- doxytag: member="msgparse.h::EDNS_RCODE_BADVERS" ref="6f13c1dcb0fdd3004247d09c4a7745b1" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define EDNS_RCODE_BADVERS&nbsp;&nbsp;&nbsp;16          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
error codes, extended with EDNS, so &gt; 15. 
<p>

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

</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="3e82b2f3e8221b91495881d330b2a56e"></a><!-- doxytag: member="msgparse.h::get_rdf_size" ref="3e82b2f3e8221b91495881d330b2a56e" args="(ldns_rdf_type rdf)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t get_rdf_size           </td>
          <td>(</td>
          <td class="paramtype">ldns_rdf_type&nbsp;</td>
          <td class="paramname"> <em>rdf</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Obtain size in the packet of an rr type, that is before dname type. 
<p>
Do TYPE_DNAME, and type STR, yourself. Gives size for most regular types. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>rdf,:</em>&nbsp;</td><td>the rdf type from the descriptor. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: size in octets. 0 on failure. </dd></dl>

<p>References <a class="el" href="log_8h_source.html#l00185">log_assert</a>.</p>

<p>Referenced by <a class="el" href="pktview_8c_source.html#l00086">analyze_rdata()</a>, <a class="el" href="msgparse_8c_source.html#l00605">calc_size()</a>, <a class="el" href="val__sigcrypt_8c_source.html#l00561">canonical_compare_byfield()</a>, <a class="el" href="msgencode_8c_source.html#l00360">compress_rdata()</a>, and <a class="el" href="msgreply_8c_source.html#l00154">rdata_copy()</a>.</p>

</div>
</div><p>
<a class="anchor" name="e401ab4e7b689d89748a2338c74b3a00"></a><!-- doxytag: member="msgparse.h::parse_packet" ref="e401ab4e7b689d89748a2338c74b3a00" args="(ldns_buffer *pkt, struct msg_parse *msg, struct regional *region)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int parse_packet           </td>
          <td>(</td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structmsg__parse.html">msg_parse</a> *&nbsp;</td>
          <td class="paramname"> <em>msg</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></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Parse the packet. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>packet, position at call must be at start of packet. at end position is after packet. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>msg,:</em>&nbsp;</td><td>where to store results. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>region,:</em>&nbsp;</td><td>how to alloc results. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 if OK, or rcode on error. </dd></dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00097">msg_parse::an_rrsets</a>, <a class="el" href="msgparse_8h_source.html#l00091">msg_parse::ancount</a>, <a class="el" href="msgparse_8h_source.html#l00101">msg_parse::ar_rrsets</a>, <a class="el" href="msgparse_8h_source.html#l00095">msg_parse::arcount</a>, <a class="el" href="msgparse_8h_source.html#l00087">msg_parse::flags</a>, <a class="el" href="msgparse_8h_source.html#l00085">msg_parse::id</a>, <a class="el" href="msgparse_8h_source.html#l00099">msg_parse::ns_rrsets</a>, <a class="el" href="msgparse_8h_source.html#l00093">msg_parse::nscount</a>, <a class="el" href="msgparse_8c_source.html#l00550">parse_query_section()</a>, <a class="el" href="msgparse_8c_source.html#l00790">parse_section()</a>, <a class="el" href="msgparse_8h_source.html#l00089">msg_parse::qdcount</a>, and <a class="el" href="msgparse_8h_source.html#l00103">msg_parse::rrset_count</a>.</p>

<p>Referenced by <a class="el" href="pythonmod__utils_8c_source.html#l00107">createResponse()</a>, <a class="el" href="libworker_8c_source.html#l00345">parse_reply()</a>, <a class="el" href="iterator_8c_source.html#l02011">process_response()</a>, and <a class="el" href="msgreply_8c_source.html#l00413">reply_info_parse()</a>.</p>

</div>
</div><p>
<a class="anchor" name="f679621c618720785b21731ba196707a"></a><!-- doxytag: member="msgparse.h::parse_extract_edns" ref="f679621c618720785b21731ba196707a" args="(struct msg_parse *msg, struct edns_data *edns)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int parse_extract_edns           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmsg__parse.html">msg_parse</a> *&nbsp;</td>
          <td class="paramname"> <em>msg</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>
After parsing the packet, extract EDNS data from packet. 
<p>
If not present this is noted in the data structure. If a parse error happens, an error code is returned.<p>
Quirks: o ignores OPT rdata. o ignores OPT owner name. o ignores extra OPT records, except the last one in the packet.<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>msg,:</em>&nbsp;</td><td>parsed message structure. Modified on exit, if EDNS was present it is removed from the additional section. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>the edns data is stored here. Does not have to be initialised. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on success. or an RCODE on an error. RCODE formerr if OPT in wrong section, and so on. </dd></dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00101">msg_parse::ar_rrsets</a>, <a class="el" href="msgparse_8h_source.html#l00095">msg_parse::arcount</a>, <a class="el" href="msgparse_8h_source.html#l00210">edns_data::bits</a>, <a class="el" href="msgparse_8h_source.html#l00141">rrset_parse::dname</a>, <a class="el" href="msgparse_8h_source.html#l00143">rrset_parse::dname_len</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>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="msgparse_8h_source.html#l00151">rrset_parse::rr_count</a>, <a class="el" href="msgparse_8h_source.html#l00155">rrset_parse::rr_first</a>, <a class="el" href="msgparse_8h_source.html#l00157">rrset_parse::rr_last</a>, <a class="el" href="msgparse_8h_source.html#l00133">rrset_parse::rrset_all_next</a>, <a class="el" href="msgparse_8h_source.html#l00147">rrset_parse::rrset_class</a>, <a class="el" href="msgparse_8h_source.html#l00103">msg_parse::rrset_count</a>, <a class="el" href="msgparse_8h_source.html#l00121">msg_parse::rrset_first</a>, <a class="el" href="msgparse_8h_source.html#l00123">msg_parse::rrset_last</a>, <a class="el" href="msgparse_8h_source.html#l00139">rrset_parse::section</a>, <a class="el" href="msgparse_8h_source.html#l00175">rr_parse::ttl_data</a>, <a class="el" href="msgparse_8h_source.html#l00145">rrset_parse::type</a>, and <a class="el" href="msgparse_8h_source.html#l00212">edns_data::udp_size</a>.</p>

<p>Referenced by <a class="el" href="pythonmod__utils_8c_source.html#l00107">createResponse()</a>, <a class="el" href="iterator_8c_source.html#l02011">process_response()</a>, and <a class="el" href="msgreply_8c_source.html#l00413">reply_info_parse()</a>.</p>

</div>
</div><p>
<a class="anchor" name="63ad5f4ac98e84baf9a49655de5b0335"></a><!-- doxytag: member="msgparse.h::parse_edns_from_pkt" ref="63ad5f4ac98e84baf9a49655de5b0335" args="(ldns_buffer *pkt, struct edns_data *edns)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int parse_edns_from_pkt           </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>
If EDNS data follows a query section, extract it and initialize edns struct. 
<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>the packet. position at start must be right after the query section. At end, right after EDNS data or no movement if failed. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>edns,:</em>&nbsp;</td><td>the edns data allocated by the caller. Does not have to be initialised. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: 0 on success, or an RCODE on error. RCODE formerr if OPT is badly formatted and so on. </dd></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>, <a class="el" href="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="dname_8c_source.html#l00167">pkt_dname_len()</a>, and <a class="el" href="msgparse_8h_source.html#l00212">edns_data::udp_size</a>.</p>

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

</div>
</div><p>
<a class="anchor" name="66930546eb0b31199cf153a7c8511bb2"></a><!-- doxytag: member="msgparse.h::pkt_hash_rrset" ref="66930546eb0b31199cf153a7c8511bb2" args="(ldns_buffer *pkt, uint8_t *dname, uint16_t type, uint16_t dclass, uint32_t rrset_flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> pkt_hash_rrset           </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">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>dname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>dclass</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>rrset_flags</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Calculate hash value for rrset in packet. 
<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>the packet. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>pointer to uncompressed dname, or compressed dname in packet. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>type,:</em>&nbsp;</td><td>rrset type in host order. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dclass,:</em>&nbsp;</td><td>rrset class in network order. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrset_flags,:</em>&nbsp;</td><td>rrset flags (same as <a class="el" href="structpacked__rrset.html" title="An RRset can be represented using both key and data together.">packed_rrset</a> flags). </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>hash value </dd></dl>

<p>References <a class="el" href="dname_8c_source.html#l00280">dname_pkt_hash()</a>.</p>

<p>Referenced by <a class="el" href="msgparse_8c_source.html#l00374">change_rrsig_rrset()</a>, <a class="el" href="iter__scrub_8c_source.html#l00150">mark_additional_rrset()</a>, and <a class="el" href="iter__scrub_8c_source.html#l00230">synth_cname_rrset()</a>.</p>

</div>
</div><p>
<a class="anchor" name="14b1fe22f49dff26f8a13e762d423abf"></a><!-- doxytag: member="msgparse.h::msgparse_hashtable_lookup" ref="14b1fe22f49dff26f8a13e762d423abf" args="(struct msg_parse *msg, ldns_buffer *pkt, hashvalue_t h, uint32_t rrset_flags, uint8_t *dname, size_t dnamelen, uint16_t type, uint16_t dclass)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structrrset__parse.html">rrset_parse</a>* msgparse_hashtable_lookup           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmsg__parse.html">msg_parse</a> *&nbsp;</td>
          <td class="paramname"> <em>msg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_buffer *&nbsp;</td>
          <td class="paramname"> <em>pkt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td>
          <td class="paramname"> <em>h</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>rrset_flags</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">size_t&nbsp;</td>
          <td class="paramname"> <em>dnamelen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>dclass</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Lookup in msg hashtable to find a rrset. 
<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>msg,:</em>&nbsp;</td><td>with the hashtable. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>packet for compressed names. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>h,:</em>&nbsp;</td><td>hash value </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrset_flags,:</em>&nbsp;</td><td>flags of rrset sought for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>name of rrset sought for. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dnamelen,:</em>&nbsp;</td><td>len of dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>type,:</em>&nbsp;</td><td>rrset type, host order. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dclass,:</em>&nbsp;</td><td>rrset class, network order. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>NULL or the <a class="el" href="structrrset__parse.html" title="Data stored for an rrset during parsing.">rrset_parse</a> if found. </dd></dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00118">msg_parse::hashtable</a>, <a class="el" href="msgparse_8h_source.html#l00071">PARSE_TABLE_SIZE</a>, <a class="el" href="msgparse_8h_source.html#l00131">rrset_parse::rrset_bucket_next</a>, and <a class="el" href="msgparse_8c_source.html#l00198">rrset_parse_equals()</a>.</p>

<p>Referenced by <a class="el" href="msgparse_8c_source.html#l00444">find_rrset()</a>, and <a class="el" href="iter__scrub_8c_source.html#l00150">mark_additional_rrset()</a>.</p>

</div>
</div><p>
<a class="anchor" name="af7bdfef78ef602881c891507a6a02cc"></a><!-- doxytag: member="msgparse.h::msgparse_bucket_remove" ref="af7bdfef78ef602881c891507a6a02cc" args="(struct msg_parse *msg, struct rrset_parse *rrset)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void msgparse_bucket_remove           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structmsg__parse.html">msg_parse</a> *&nbsp;</td>
          <td class="paramname"> <em>msg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *&nbsp;</td>
          <td class="paramname"> <em>rrset</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 rrset from hash table. 
<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>msg,:</em>&nbsp;</td><td>with hashtable. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrset,:</em>&nbsp;</td><td>with hash value and id info. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="msgparse_8h_source.html#l00135">rrset_parse::hash</a>, <a class="el" href="msgparse_8h_source.html#l00118">msg_parse::hashtable</a>, <a class="el" href="msgparse_8h_source.html#l00071">PARSE_TABLE_SIZE</a>, and <a class="el" href="msgparse_8h_source.html#l00131">rrset_parse::rrset_bucket_next</a>.</p>

<p>Referenced by <a class="el" href="msgparse_8c_source.html#l00374">change_rrsig_rrset()</a>, and <a class="el" href="iter__scrub_8c_source.html#l00062">remove_rrset()</a>.</p>

</div>
</div><p>
<hr><h2>Variable Documentation</h2>
<a class="anchor" name="51b3b260d8fe0293597171d7c71394ba"></a><!-- doxytag: member="msgparse.h::MAX_TTL" ref="51b3b260d8fe0293597171d7c71394ba" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t <a class="el" href="msgreply_8c.html#51b3b260d8fe0293597171d7c71394ba">MAX_TTL</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Maximum TTL that is allowed. 
<p>

<p>Referenced by <a class="el" href="config__file_8c_source.html#l00822">config_apply()</a>, <a class="el" href="msgreply_8c_source.html#l00371">parse_copy_decompress()</a>, and <a class="el" href="msgreply_8c_source.html#l00230">parse_rr_copy()</a>.</p>

</div>
</div><p>
<a class="anchor" name="51386653eedf54099bfed21f77aac3a7"></a><!-- doxytag: member="msgparse.h::MIN_TTL" ref="51386653eedf54099bfed21f77aac3a7" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t <a class="el" href="msgreply_8c.html#51386653eedf54099bfed21f77aac3a7">MIN_TTL</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Minimum TTL that is allowed. 
<p>

<p>Referenced by <a class="el" href="config__file_8c_source.html#l00822">config_apply()</a>, and <a class="el" href="msgreply_8c_source.html#l00154">rdata_copy()</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>