Sophie

Sophie

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

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.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>msgparse.c File Reference</h1>Routines for message parsing a packet buffer to a descriptive structure.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&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="net__help_8h.html">util/net_help.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="packed__rrset_8h.html">util/data/packed_rrset.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="lookup3_8h.html">util/storage/lookup3.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="regional_8h.html">util/regional.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ada7dce3435fb16d7192ed9a5a4af787"></a><!-- doxytag: member="msgparse.c::smart_compare" ref="ada7dce3435fb16d7192ed9a5a4af787" args="(ldns_buffer *pkt, uint8_t *dnow, uint8_t *dprfirst, uint8_t *dprlast)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#ada7dce3435fb16d7192ed9a5a4af787">smart_compare</a> (ldns_buffer *pkt, uint8_t *dnow, uint8_t *dprfirst, uint8_t *dprlast)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">smart comparison of (compressed, valid) dnames from packet <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1fbcb1bcad521c7cd1f7a74da80f6eca"></a><!-- doxytag: member="msgparse.c::new_rrset" ref="1fbcb1bcad521c7cd1f7a74da80f6eca" args="(struct msg_parse *msg, uint8_t *dname, size_t dnamelen, uint16_t type, uint16_t dclass, hashvalue_t hash, uint32_t rrset_flags, ldns_pkt_section section, struct regional *region)" -->
static struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#1fbcb1bcad521c7cd1f7a74da80f6eca">new_rrset</a> (struct <a class="el" href="structmsg__parse.html">msg_parse</a> *msg, uint8_t *dname, size_t dnamelen, uint16_t type, uint16_t dclass, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> hash, uint32_t rrset_flags, ldns_pkt_section section, struct <a class="el" href="structregional.html">regional</a> *region)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocate new rrset in region, fill with data. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1bab29f050860007baf191756035f39b"></a><!-- doxytag: member="msgparse.c::nsec_at_apex" ref="1bab29f050860007baf191756035f39b" args="(ldns_buffer *pkt)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#1bab29f050860007baf191756035f39b">nsec_at_apex</a> (ldns_buffer *pkt)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">See if next rrset is nsec at zone apex. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6ce8672d1703c32b0bf1426e4dcf913"></a><!-- doxytag: member="msgparse.c::pkt_rrset_flags" ref="f6ce8672d1703c32b0bf1426e4dcf913" args="(ldns_buffer *pkt, uint16_t type)" -->
static uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#f6ce8672d1703c32b0bf1426e4dcf913">pkt_rrset_flags</a> (ldns_buffer *pkt, uint16_t type)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate rrset flags. <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_8c.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"><a class="anchor" name="e6fbcb8268c2026563d2e8564bb1cd1d"></a><!-- doxytag: member="msgparse.c::pkt_hash_rrset_first" ref="e6fbcb8268c2026563d2e8564bb1cd1d" args="(ldns_buffer *pkt, uint8_t *dname)" -->
static <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#e6fbcb8268c2026563d2e8564bb1cd1d">pkt_hash_rrset_first</a> (ldns_buffer *pkt, uint8_t *dname)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">create partial dname hash for rrset hash <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3405b42f4abf0e6741885ccdb73c6229"></a><!-- doxytag: member="msgparse.c::pkt_hash_rrset_rest" ref="3405b42f4abf0e6741885ccdb73c6229" args="(hashvalue_t dname_h, uint16_t type, uint16_t dclass, uint32_t rrset_flags)" -->
static <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#3405b42f4abf0e6741885ccdb73c6229">pkt_hash_rrset_rest</a> (<a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> dname_h, uint16_t type, uint16_t dclass, uint32_t rrset_flags)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">create a rrset hash from a partial dname hash <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d494b43130ccb6a4b5a246ae28497839"></a><!-- doxytag: member="msgparse.c::rrset_parse_equals" ref="d494b43130ccb6a4b5a246ae28497839" args="(struct rrset_parse *p, ldns_buffer *pkt, hashvalue_t h, uint32_t rrset_flags, uint8_t *dname, size_t dnamelen, uint16_t type, uint16_t dclass)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#d494b43130ccb6a4b5a246ae28497839">rrset_parse_equals</a> (struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *p, 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">compare <a class="el" href="structrrset__parse.html" title="Data stored for an rrset during parsing.">rrset_parse</a> with data <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_8c.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"><a class="anchor" name="d40c890686aa920052b233fbfb6ffe90"></a><!-- doxytag: member="msgparse.c::pkt_rrsig_covered" ref="d40c890686aa920052b233fbfb6ffe90" args="(ldns_buffer *pkt, uint8_t *here, uint16_t *type)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#d40c890686aa920052b233fbfb6ffe90">pkt_rrsig_covered</a> (ldns_buffer *pkt, uint8_t *here, uint16_t *type)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return type networkformat that rrsig in packet covers <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="008e5422008c2f6a3d5f2a95e18ab743"></a><!-- doxytag: member="msgparse.c::pkt_rrsig_covered_equals" ref="008e5422008c2f6a3d5f2a95e18ab743" args="(ldns_buffer *pkt, uint8_t *here, uint16_t type)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#008e5422008c2f6a3d5f2a95e18ab743">pkt_rrsig_covered_equals</a> (ldns_buffer *pkt, uint8_t *here, uint16_t type)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">true if covered type equals prevtype <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_8c.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 class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c0c625228504a3c5bbd624a658776d53"></a><!-- doxytag: member="msgparse.c::change_section" ref="c0c625228504a3c5bbd624a658776d53" args="(struct msg_parse *msg, struct rrset_parse *rrset, ldns_pkt_section section)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#c0c625228504a3c5bbd624a658776d53">change_section</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, ldns_pkt_section section)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">change section of rrset from previous to current section <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3dac53b44fffc2ecba6448bffd34937"></a><!-- doxytag: member="msgparse.c::rrset_has_sigover" ref="e3dac53b44fffc2ecba6448bffd34937" args="(ldns_buffer *pkt, struct rrset_parse *rrset, uint16_t type, int *hasother)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#e3dac53b44fffc2ecba6448bffd34937">rrset_has_sigover</a> (ldns_buffer *pkt, struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *rrset, uint16_t type, int *hasother)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">see if rrset of type RRSIG contains sig over given type <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa0eaadfd4b7703143068e8c76df7343"></a><!-- doxytag: member="msgparse.c::moveover_rrsigs" ref="fa0eaadfd4b7703143068e8c76df7343" args="(ldns_buffer *pkt, struct regional *region, struct rrset_parse *sigset, struct rrset_parse *dataset, int duplicate)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#fa0eaadfd4b7703143068e8c76df7343">moveover_rrsigs</a> (ldns_buffer *pkt, struct <a class="el" href="structregional.html">regional</a> *region, struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *sigset, struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *dataset, int duplicate)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">move rrsigs from sigset to dataset <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d694dc4fd2c06d5bb25ed73a88c40e11"></a><!-- doxytag: member="msgparse.c::change_rrsig_rrset" ref="d694dc4fd2c06d5bb25ed73a88c40e11" args="(struct rrset_parse *sigset, struct msg_parse *msg, ldns_buffer *pkt, uint16_t datatype, uint32_t rrset_flags, int hasother, ldns_pkt_section section, struct regional *region)" -->
static struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#d694dc4fd2c06d5bb25ed73a88c40e11">change_rrsig_rrset</a> (struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *sigset, struct <a class="el" href="structmsg__parse.html">msg_parse</a> *msg, ldns_buffer *pkt, uint16_t datatype, uint32_t rrset_flags, int hasother, ldns_pkt_section section, struct <a class="el" href="structregional.html">regional</a> *region)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">change an rrsig rrset for use as data rrset <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="msgparse_8c.html#3daf026e5662e8673a834d582836aad6">find_rrset</a> (struct <a class="el" href="structmsg__parse.html">msg_parse</a> *msg, ldns_buffer *pkt, uint8_t *dname, size_t dnamelen, uint16_t type, uint16_t dclass, <a class="el" href="lruhash_8h.html#050c9ffcb4f555022a735896cdee3795">hashvalue_t</a> *hash, uint32_t *rrset_flags, uint8_t **prev_dname_first, uint8_t **prev_dname_last, size_t *prev_dnamelen, uint16_t *prev_type, uint16_t *prev_dclass, struct <a class="el" href="structrrset__parse.html">rrset_parse</a> **rrset_prev, ldns_pkt_section section, struct <a class="el" href="structregional.html">regional</a> *region)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find rrset.  <a href="#3daf026e5662e8673a834d582836aad6"></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="msgparse_8c.html#5b0dae12fd5c08419fad536cbba7dece">parse_query_section</a> (ldns_buffer *pkt, struct <a class="el" href="structmsg__parse.html">msg_parse</a> *msg)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parse query section.  <a href="#5b0dae12fd5c08419fad536cbba7dece"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.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"><a class="anchor" name="98f6725e4cb6aae2b65b4667682b65fa"></a><!-- doxytag: member="msgparse.c::calc_size" ref="98f6725e4cb6aae2b65b4667682b65fa" args="(ldns_buffer *pkt, uint16_t type, struct rr_parse *rr)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#98f6725e4cb6aae2b65b4667682b65fa">calc_size</a> (ldns_buffer *pkt, uint16_t type, struct <a class="el" href="structrr__parse.html">rr_parse</a> *rr)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">calculate the size of one rr <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fcdd8420363ed783ea8a2f5882ae84de"></a><!-- doxytag: member="msgparse.c::skip_ttl_rdata" ref="fcdd8420363ed783ea8a2f5882ae84de" args="(ldns_buffer *pkt)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#fcdd8420363ed783ea8a2f5882ae84de">skip_ttl_rdata</a> (ldns_buffer *pkt)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">skip rr ttl and rdata <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dd69ffaafbf50b796a50e51da3d66850"></a><!-- doxytag: member="msgparse.c::sig_is_double" ref="dd69ffaafbf50b796a50e51da3d66850" args="(ldns_buffer *pkt, struct rrset_parse *rrset, uint8_t *ttldata)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#dd69ffaafbf50b796a50e51da3d66850">sig_is_double</a> (ldns_buffer *pkt, struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *rrset, uint8_t *ttldata)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">see if RRSIG is a duplicate of another <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="392ba784995ea37ef8377cf6ab14a998"></a><!-- doxytag: member="msgparse.c::add_rr_to_rrset" ref="392ba784995ea37ef8377cf6ab14a998" args="(struct rrset_parse *rrset, ldns_buffer *pkt, struct msg_parse *msg, struct regional *region, ldns_pkt_section section, uint16_t type)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="msgparse_8c.html#392ba784995ea37ef8377cf6ab14a998">add_rr_to_rrset</a> (struct <a class="el" href="structrrset__parse.html">rrset_parse</a> *rrset, 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, ldns_pkt_section section, uint16_t type)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add rr (from packet here) to rrset, skips rr. <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="msgparse_8c.html#72470ced18de247ff8e62ebca056a03c">parse_section</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, ldns_pkt_section section, uint16_t num_rrs, size_t *num_rrsets)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parse packet RR section, for answer, authority and additional sections.  <a href="#72470ced18de247ff8e62ebca056a03c"></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_8c.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_8c.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_8c.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>
</table>
<hr><h2>Detailed Description</h2>
Routines for message parsing a packet buffer to a descriptive structure. 
<p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="66930546eb0b31199cf153a7c8511bb2"></a><!-- doxytag: member="msgparse.c::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.c::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.c::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>
<a class="anchor" name="3daf026e5662e8673a834d582836aad6"></a><!-- doxytag: member="msgparse.c::find_rrset" ref="3daf026e5662e8673a834d582836aad6" args="(struct msg_parse *msg, ldns_buffer *pkt, uint8_t *dname, size_t dnamelen, uint16_t type, uint16_t dclass, hashvalue_t *hash, uint32_t *rrset_flags, uint8_t **prev_dname_first, uint8_t **prev_dname_last, size_t *prev_dnamelen, uint16_t *prev_type, uint16_t *prev_dclass, struct rrset_parse **rrset_prev, ldns_pkt_section section, struct regional *region)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int find_rrset           </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">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>
        </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>hash</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>prev_dname_first</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t **&nbsp;</td>
          <td class="paramname"> <em>prev_dname_last</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>prev_dnamelen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t *&nbsp;</td>
          <td class="paramname"> <em>prev_type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t *&nbsp;</td>
          <td class="paramname"> <em>prev_dclass</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_prev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_pkt_section&nbsp;</td>
          <td class="paramname"> <em>section</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]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Find rrset. 
<p>
If equal to previous it is fast. hash if not so. <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>the message with hash table. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pkt,:</em>&nbsp;</td><td>the packet in wireformat (needed for compression ptrs). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dname,:</em>&nbsp;</td><td>pointer to start of dname (compressed) in packet. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dnamelen,:</em>&nbsp;</td><td>uncompressed wirefmt length of dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>type,:</em>&nbsp;</td><td>type of current rr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>dclass,:</em>&nbsp;</td><td>class of current rr. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>hash,:</em>&nbsp;</td><td>hash value is returned if the rrset could not be found. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrset_flags,:</em>&nbsp;</td><td>is returned if the rrset could not be found. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>prev_dname_first,:</em>&nbsp;</td><td>dname of last seen RR. First seen dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>prev_dname_last,:</em>&nbsp;</td><td>dname of last seen RR. Last seen dname. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>prev_dnamelen,:</em>&nbsp;</td><td>dname len of last seen RR. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>prev_type,:</em>&nbsp;</td><td>type of last seen RR. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>prev_dclass,:</em>&nbsp;</td><td>class of last seen RR. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>rrset_prev,:</em>&nbsp;</td><td>last seen RRset. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>section,:</em>&nbsp;</td><td>the current section in the packet. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>region,:</em>&nbsp;</td><td>used to allocate temporary parsing data. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>0 on out of memory. </dd></dl>

<p>References <a class="el" href="msgparse_8c_source.html#l00374">change_rrsig_rrset()</a>, <a class="el" href="msgparse_8c_source.html#l00211">msgparse_hashtable_lookup()</a>, <a class="el" href="packed__rrset_8h_source.html#l00053">PACKED_RRSET_NSEC_AT_APEX</a>, <a class="el" href="msgparse_8c_source.html#l00172">pkt_hash_rrset_first()</a>, <a class="el" href="msgparse_8c_source.html#l00184">pkt_hash_rrset_rest()</a>, <a class="el" href="msgparse_8c_source.html#l00147">pkt_rrset_flags()</a>, <a class="el" href="msgparse_8c_source.html#l00227">pkt_rrsig_covered()</a>, <a class="el" href="msgparse_8c_source.html#l00246">pkt_rrsig_covered_equals()</a>, <a class="el" href="msgparse_8c_source.html#l00314">rrset_has_sigover()</a>, and <a class="el" href="msgparse_8c_source.html#l00049">smart_compare()</a>.</p>

<p>Referenced by <a class="el" href="msgparse_8c_source.html#l00790">parse_section()</a>.</p>

</div>
</div><p>
<a class="anchor" name="5b0dae12fd5c08419fad536cbba7dece"></a><!-- doxytag: member="msgparse.c::parse_query_section" ref="5b0dae12fd5c08419fad536cbba7dece" args="(ldns_buffer *pkt, struct msg_parse *msg)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int parse_query_section           </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><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>
Parse query section. 
<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 query section. at end position is after query section. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>msg,:</em>&nbsp;</td><td>store results here. </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="log_8h_source.html#l00185">log_assert</a>, <a class="el" href="dname_8c_source.html#l00167">pkt_dname_len()</a>, <a class="el" href="msgparse_8h_source.html#l00112">msg_parse::qclass</a>, <a class="el" href="msgparse_8h_source.html#l00089">msg_parse::qdcount</a>, <a class="el" href="msgparse_8h_source.html#l00106">msg_parse::qname</a>, <a class="el" href="msgparse_8h_source.html#l00108">msg_parse::qname_len</a>, and <a class="el" href="msgparse_8h_source.html#l00110">msg_parse::qtype</a>.</p>

<p>Referenced by <a class="el" href="msgparse_8c_source.html#l00863">parse_packet()</a>.</p>

</div>
</div><p>
<a class="anchor" name="3e82b2f3e8221b91495881d330b2a56e"></a><!-- doxytag: member="msgparse.c::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="72470ced18de247ff8e62ebca056a03c"></a><!-- doxytag: member="msgparse.c::parse_section" ref="72470ced18de247ff8e62ebca056a03c" args="(ldns_buffer *pkt, struct msg_parse *msg, struct regional *region, ldns_pkt_section section, uint16_t num_rrs, size_t *num_rrsets)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int parse_section           </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>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_pkt_section&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&nbsp;</td>
          <td class="paramname"> <em>num_rrs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>num_rrsets</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>
Parse packet RR section, for answer, authority and additional sections. 
<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 section. at end position is after section. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>msg,:</em>&nbsp;</td><td>store results here. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>region,:</em>&nbsp;</td><td>how to alloc results. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>section,:</em>&nbsp;</td><td>section enum. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num_rrs,:</em>&nbsp;</td><td>how many rrs are in the section. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>num_rrsets,:</em>&nbsp;</td><td>returns number of rrsets in the section. </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_8c_source.html#l00718">add_rr_to_rrset()</a>, <a class="el" href="msgparse_8h_source.html#l00141">rrset_parse::dname</a>, <a class="el" href="dname_8c_source.html#l00337">dname_print()</a>, <a class="el" href="msgparse_8c_source.html#l00444">find_rrset()</a>, <a class="el" href="msgparse_8c_source.html#l00069">new_rrset()</a>, <a class="el" href="dname_8c_source.html#l00167">pkt_dname_len()</a>, and <a class="el" href="msgparse_8h_source.html#l00145">rrset_parse::type</a>.</p>

<p>Referenced by <a class="el" href="msgparse_8c_source.html#l00863">parse_packet()</a>.</p>

</div>
</div><p>
<a class="anchor" name="e401ab4e7b689d89748a2338c74b3a00"></a><!-- doxytag: member="msgparse.c::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.c::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.c::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>
</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>