Sophie

Sophie

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

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: testcode/ldns-testpkts.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_aae0f736e7b956edab2d753def1ee5b5.html">testcode</a>
  </div>
</div>
<div class="contents">
<h1>ldns-testpkts.c File Reference</h1>This is a debugging aid.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&quot;</code><br>
<code>#include &lt;ldns/ldns.h&gt;</code><br>
<code>#include &lt;errno.h&gt;</code><br>
<code>#include &quot;<a class="el" href="ldns-testpkts_8h.html">ldns-testpkts.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="842ed03f27719bc87666bfd1f75415b8"></a><!-- doxytag: member="ldns&#45;testpkts.c::MAX_LINE" ref="842ed03f27719bc87666bfd1f75415b8" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#842ed03f27719bc87666bfd1f75415b8">MAX_LINE</a>&nbsp;&nbsp;&nbsp;10240</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">max line length <br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a557e5b23b2833d7c1ec0415a1bdd2b1"></a><!-- doxytag: member="ldns&#45;testpkts.c::verbose" ref="a557e5b23b2833d7c1ec0415a1bdd2b1" args="(int lvl, const char *msg,...)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose</a> (int lvl, const char *msg,...)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">logging routine, provided by caller <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f0b095b4f78847cbb591cef0efb7e0a3"></a><!-- doxytag: member="ldns&#45;testpkts.c::error" ref="f0b095b4f78847cbb591cef0efb7e0a3" args="(const char *msg,...)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#f0b095b4f78847cbb591cef0efb7e0a3">error</a> (const char *msg,...)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">print error and exit <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ebc044d866c947af5b723b14aeee77ad"></a><!-- doxytag: member="ldns&#45;testpkts.c::isendline" ref="ebc044d866c947af5b723b14aeee77ad" args="(char c)" -->
static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#ebc044d866c947af5b723b14aeee77ad">isendline</a> (char c)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">return if string is empty or comment <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#44786ad9834844bc0edceaf77de55d2a">str_keyword</a> (char **str, const char *keyword)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">true if the string starts with the keyword given.  <a href="#44786ad9834844bc0edceaf77de55d2a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="246366e4417fbdd0413a58c1eab524f4"></a><!-- doxytag: member="ldns&#45;testpkts.c::entry_add_reply" ref="246366e4417fbdd0413a58c1eab524f4" args="(struct entry *entry)" -->
static struct <a class="el" href="structreply__packet.html">reply_packet</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#246366e4417fbdd0413a58c1eab524f4">entry_add_reply</a> (struct <a class="el" href="structentry.html">entry</a> *<a class="el" href="structentry.html">entry</a>)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add reply packet to <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a>. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6639add8194d2c48fdc107dc968f0b6a"></a><!-- doxytag: member="ldns&#45;testpkts.c::matchline" ref="6639add8194d2c48fdc107dc968f0b6a" args="(char *line, struct entry *e)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#6639add8194d2c48fdc107dc968f0b6a">matchline</a> (char *line, struct <a class="el" href="structentry.html">entry</a> *e)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">parse MATCH line <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c33f4fb16293afe653e0a5244db24b9d"></a><!-- doxytag: member="ldns&#45;testpkts.c::replyline" ref="c33f4fb16293afe653e0a5244db24b9d" args="(char *line, ldns_pkt *reply)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#c33f4fb16293afe653e0a5244db24b9d">replyline</a> (char *line, ldns_pkt *reply)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">parse REPLY line <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a5f651936252c6af3714d25075d52b9f"></a><!-- doxytag: member="ldns&#45;testpkts.c::adjustline" ref="a5f651936252c6af3714d25075d52b9f" args="(char *line, struct entry *e, struct reply_packet *pkt)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#a5f651936252c6af3714d25075d52b9f">adjustline</a> (char *line, struct <a class="el" href="structentry.html">entry</a> *e, struct <a class="el" href="structreply__packet.html">reply_packet</a> *pkt)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">parse ADJUST line <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d97e1e5727efa50dc45041106f8d6003"></a><!-- doxytag: member="ldns&#45;testpkts.c::new_entry" ref="d97e1e5727efa50dc45041106f8d6003" args="()" -->
static struct <a class="el" href="structentry.html">entry</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#d97e1e5727efa50dc45041106f8d6003">new_entry</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">create new <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#d46abf99e5448187324929f7d2f683ae">hexstr2bin</a> (char *hexstr, int len, uint8_t *buf, size_t offset, size_t buf_len)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Converts a hex string to binary data.  <a href="#d46abf99e5448187324929f7d2f683ae"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="79c8df3ce7d572b60b2c26f396d17499"></a><!-- doxytag: member="ldns&#45;testpkts.c::data_buffer2wire" ref="79c8df3ce7d572b60b2c26f396d17499" args="(ldns_buffer *data_buffer)" -->
static ldns_buffer *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#79c8df3ce7d572b60b2c26f396d17499">data_buffer2wire</a> (ldns_buffer *data_buffer)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">convert hex buffer to binary buffer <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2d88b2ae25e0bd44251f7290f069dfa3"></a><!-- doxytag: member="ldns&#45;testpkts.c::get_origin" ref="2d88b2ae25e0bd44251f7290f069dfa3" args="(const char *name, int lineno, ldns_rdf **origin, char *parse)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#2d88b2ae25e0bd44251f7290f069dfa3">get_origin</a> (const char *name, int lineno, ldns_rdf **origin, char *parse)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">parse ORIGIN <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structentry.html">entry</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#bcd2fbcab1e39cafb81bb1bc6fe9c1e4">read_entry</a> (FILE *in, const char *name, int *lineno, uint32_t *default_ttl, ldns_rdf **origin, ldns_rdf **prev_rr)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read one <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> from the data file.  <a href="#bcd2fbcab1e39cafb81bb1bc6fe9c1e4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5329e36907714ac4151b44b0e7fd7ba2"></a><!-- doxytag: member="ldns&#45;testpkts.c::read_datafile" ref="5329e36907714ac4151b44b0e7fd7ba2" args="(const char *name)" -->
struct <a class="el" href="structentry.html">entry</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#5329e36907714ac4151b44b0e7fd7ba2">read_datafile</a> (const char *name)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">reads the canned reply file and returns a list of structs does an exit on error. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e21a4e90d799cf0a8f5f39e90bf806c"></a><!-- doxytag: member="ldns&#45;testpkts.c::get_qtype" ref="7e21a4e90d799cf0a8f5f39e90bf806c" args="(ldns_pkt *p)" -->
static ldns_rr_type&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#7e21a4e90d799cf0a8f5f39e90bf806c">get_qtype</a> (ldns_pkt *p)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get qtype from rr <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="74572e5bd2a6474c111110dcb772d12d"></a><!-- doxytag: member="ldns&#45;testpkts.c::get_owner" ref="74572e5bd2a6474c111110dcb772d12d" args="(ldns_pkt *p)" -->
static ldns_rdf *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#74572e5bd2a6474c111110dcb772d12d">get_owner</a> (ldns_pkt *p)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">returns owner from rr <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c1664350d1d3c52022307af5dbc8db22"></a><!-- doxytag: member="ldns&#45;testpkts.c::get_serial" ref="c1664350d1d3c52022307af5dbc8db22" args="(ldns_pkt *p)" -->
static uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#c1664350d1d3c52022307af5dbc8db22">get_serial</a> (ldns_pkt *p)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get authority section SOA serial value <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9cfe1a8b615c041285f4a9509abbcec2"></a><!-- doxytag: member="ldns&#45;testpkts.c::match_list" ref="9cfe1a8b615c041285f4a9509abbcec2" args="(ldns_rr_list *q, ldns_rr_list *p, bool mttl)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#9cfe1a8b615c041285f4a9509abbcec2">match_list</a> (ldns_rr_list *q, ldns_rr_list *p, bool mttl)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">match two rr lists <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c95ec6abe9254010512751246eb7d46"></a><!-- doxytag: member="ldns&#45;testpkts.c::cmp_bool" ref="4c95ec6abe9254010512751246eb7d46" args="(int x, int y)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#4c95ec6abe9254010512751246eb7d46">cmp_bool</a> (int x, int y)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">compare two booleans <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="260c6e6382c518f53e872b5dd6d86b22"></a><!-- doxytag: member="ldns&#45;testpkts.c::match_all" ref="260c6e6382c518f53e872b5dd6d86b22" args="(ldns_pkt *q, ldns_pkt *p, bool mttl)" -->
static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#260c6e6382c518f53e872b5dd6d86b22">match_all</a> (ldns_pkt *q, ldns_pkt *p, bool mttl)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">match all of the packet <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="894c4d58286cfa530d4d3594aa55e33f"></a><!-- doxytag: member="ldns&#45;testpkts.c::find_match" ref="894c4d58286cfa530d4d3594aa55e33f" args="(struct entry *entries, ldns_pkt *query_pkt, enum transport_type transport)" -->
struct <a class="el" href="structentry.html">entry</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#894c4d58286cfa530d4d3594aa55e33f">find_match</a> (struct <a class="el" href="structentry.html">entry</a> *entries, ldns_pkt *query_pkt, enum <a class="el" href="ldns-testpkts_8h.html#86cdaffc49feb3f5e3f1ffacfc054427">transport_type</a> transport)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">finds <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> in list, or returns NULL. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6260d72e29d5aa690a64fe29737c90b"></a><!-- doxytag: member="ldns&#45;testpkts.c::adjust_packet" ref="a6260d72e29d5aa690a64fe29737c90b" args="(struct entry *match, ldns_pkt *answer_pkt, ldns_pkt *query_pkt)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#a6260d72e29d5aa690a64fe29737c90b">adjust_packet</a> (struct <a class="el" href="structentry.html">entry</a> *match, ldns_pkt *answer_pkt, ldns_pkt *query_pkt)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">copy &amp; adjust packet <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#8cd6cefa7f31efcaa416bb7770bdc3f5">handle_query</a> (uint8_t *inbuf, ssize_t inlen, struct <a class="el" href="structentry.html">entry</a> *entries, int *count, enum <a class="el" href="ldns-testpkts_8h.html#86cdaffc49feb3f5e3f1ffacfc054427">transport_type</a> transport, void(*sendfunc)(uint8_t *, size_t, void *), void *userdata, FILE *verbose_out)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parses data buffer to a query, finds the correct answer and calls the given function for every packet to send.  <a href="#8cd6cefa7f31efcaa416bb7770bdc3f5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e87ce9d9750cb6180f7776447408750f"></a><!-- doxytag: member="ldns&#45;testpkts.c::delete_replylist" ref="e87ce9d9750cb6180f7776447408750f" args="(struct reply_packet *replist)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#e87ce9d9750cb6180f7776447408750f">delete_replylist</a> (struct <a class="el" href="structreply__packet.html">reply_packet</a> *replist)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">delete the list of reply packets <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f78b6ebca38053a6184dc29e9928af3"></a><!-- doxytag: member="ldns&#45;testpkts.c::delete_entry" ref="8f78b6ebca38053a6184dc29e9928af3" args="(struct entry *list)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#8f78b6ebca38053a6184dc29e9928af3">delete_entry</a> (struct <a class="el" href="structentry.html">entry</a> *list)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete linked list of entries. <br></td></tr>
<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e4bfad5c94c8f74556d2b0a79450ff0"></a><!-- doxytag: member="ldns&#45;testpkts.c::prog_name" ref="7e4bfad5c94c8f74556d2b0a79450ff0" args="" -->
static const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="ldns-testpkts_8c.html#7e4bfad5c94c8f74556d2b0a79450ff0">prog_name</a> = &quot;ldns-testpkts&quot;</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">string to show in warnings and errors <br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
This is a debugging aid. 
<p>
It is not efficient, especially with a long config file, but it can give any reply to any query. This can help the developer pre-script replies for queries.<p>
You can specify a packet RR by RR with header flags to return.<p>
Missing features:<ul>
<li>matching content different from reply content.</li><li>find way to adjust mangled packets? </li></ul>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="44786ad9834844bc0edceaf77de55d2a"></a><!-- doxytag: member="ldns&#45;testpkts.c::str_keyword" ref="44786ad9834844bc0edceaf77de55d2a" args="(char **str, const char *keyword)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static bool str_keyword           </td>
          <td>(</td>
          <td class="paramtype">char **&nbsp;</td>
          <td class="paramname"> <em>str</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>keyword</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>
true if the string starts with the keyword given. 
<p>
Moves the str ahead. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>str,:</em>&nbsp;</td><td>before keyword, afterwards after keyword and spaces. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>keyword,:</em>&nbsp;</td><td>the keyword to match </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: true if keyword present. False otherwise, and str unchanged. </dd></dl>

<p>Referenced by <a class="el" href="ldns-testpkts_8c_source.html#l00201">adjustline()</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00095">matchline()</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00414">read_entry()</a>, and <a class="el" href="ldns-testpkts_8c_source.html#l00136">replyline()</a>.</p>

</div>
</div><p>
<a class="anchor" name="d46abf99e5448187324929f7d2f683ae"></a><!-- doxytag: member="ldns&#45;testpkts.c::hexstr2bin" ref="d46abf99e5448187324929f7d2f683ae" args="(char *hexstr, int len, uint8_t *buf, size_t offset, size_t buf_len)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static size_t hexstr2bin           </td>
          <td>(</td>
          <td class="paramtype">char *&nbsp;</td>
          <td class="paramname"> <em>hexstr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>len</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>buf_len</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>
Converts a hex string to binary data. 
<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>hexstr,:</em>&nbsp;</td><td>string of hex. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>len,:</em>&nbsp;</td><td>is the length of the string </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buf,:</em>&nbsp;</td><td>is the buffer to store the result in </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>offset,:</em>&nbsp;</td><td>is the starting position in the result buffer </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>buf_len,:</em>&nbsp;</td><td>is the length of buf.</td></tr>
  </table>
</dl>
This function returns the length of the result 
<p>Referenced by <a class="el" href="ldns-testpkts_8c_source.html#l00308">data_buffer2wire()</a>.</p>

</div>
</div><p>
<a class="anchor" name="bcd2fbcab1e39cafb81bb1bc6fe9c1e4"></a><!-- doxytag: member="ldns&#45;testpkts.c::read_entry" ref="bcd2fbcab1e39cafb81bb1bc6fe9c1e4" args="(FILE *in, const char *name, int *lineno, uint32_t *default_ttl, ldns_rdf **origin, ldns_rdf **prev_rr)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structentry.html">entry</a>* read_entry           </td>
          <td>(</td>
          <td class="paramtype">FILE *&nbsp;</td>
          <td class="paramname"> <em>in</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>lineno</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t *&nbsp;</td>
          <td class="paramname"> <em>default_ttl</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_rdf **&nbsp;</td>
          <td class="paramname"> <em>origin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ldns_rdf **&nbsp;</td>
          <td class="paramname"> <em>prev_rr</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>
Read one <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> from the data file. 
<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>in,:</em>&nbsp;</td><td>file to read from. Filepos must be at the start of a new line. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name,:</em>&nbsp;</td><td>name of the file for prettier errors. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>lineno,:</em>&nbsp;</td><td>line number in file, incremented as lines are read. for prettier errors. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>default_ttl,:</em>&nbsp;</td><td>on first call set to default TTL for entries, later it stores the $TTL value last seen. Try 3600 first call. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>origin,:</em>&nbsp;</td><td>domain name for origin appending. Can be &amp;NULL on first call. later it stores the $ORIGIN value last seen. Often &amp;NULL or the zone name on first call. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>prev_rr,:</em>&nbsp;</td><td>previous rr name for correcter parsing. &amp;NULL on first call. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: The <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> read (malloced) or NULL if no <a class="el" href="structentry.html" title="data structure to keep the canned queries in.">entry</a> could be read. </dd></dl>

<p>References <a class="el" href="ldns-testpkts_8c_source.html#l00201">adjustline()</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00308">data_buffer2wire()</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00078">entry_add_reply()</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00038">error()</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00389">get_origin()</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00051">isendline()</a>, <a class="el" href="ldns-testpkts_8h_source.html#l00191">entry::lineno</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00095">matchline()</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00030">MAX_LINE</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00227">new_entry()</a>, <a class="el" href="ldns-testpkts_8h_source.html#l00144">reply_packet::reply</a>, <a class="el" href="ldns-testpkts_8h_source.html#l00146">reply_packet::reply_from_hex</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00136">replyline()</a>, and <a class="el" href="ldns-testpkts_8c_source.html#l00064">str_keyword()</a>.</p>

<p>Referenced by <a class="el" href="ldns-testpkts_8c_source.html#l00518">read_datafile()</a>, <a class="el" href="replay_8c_source.html#l00188">replay_moment_read()</a>, and <a class="el" href="replay_8c_source.html#l00114">replay_range_read()</a>.</p>

</div>
</div><p>
<a class="anchor" name="8cd6cefa7f31efcaa416bb7770bdc3f5"></a><!-- doxytag: member="ldns&#45;testpkts.c::handle_query" ref="8cd6cefa7f31efcaa416bb7770bdc3f5" args="(uint8_t *inbuf, ssize_t inlen, struct entry *entries, int *count, enum transport_type transport, void(*sendfunc)(uint8_t *, size_t, void *), void *userdata, FILE *verbose_out)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void handle_query           </td>
          <td>(</td>
          <td class="paramtype">uint8_t *&nbsp;</td>
          <td class="paramname"> <em>inbuf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">ssize_t&nbsp;</td>
          <td class="paramname"> <em>inlen</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structentry.html">entry</a> *&nbsp;</td>
          <td class="paramname"> <em>entries</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&nbsp;</td>
          <td class="paramname"> <em>count</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">enum <a class="el" href="ldns-testpkts_8h.html#86cdaffc49feb3f5e3f1ffacfc054427">transport_type</a>&nbsp;</td>
          <td class="paramname"> <em>transport</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void(*)(uint8_t *, size_t, void *)&nbsp;</td>
          <td class="paramname"> <em>sendfunc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>userdata</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FILE *&nbsp;</td>
          <td class="paramname"> <em>verbose_out</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Parses data buffer to a query, finds the correct answer and calls the given function for every packet to send. 
<p>
if verbose_out filename is given, packets are dumped there. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>inbuf,:</em>&nbsp;</td><td>the packet that came in </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>inlen,:</em>&nbsp;</td><td>length of packet. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>entries,:</em>&nbsp;</td><td>entries read in from datafile. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>count,:</em>&nbsp;</td><td>is increased to count number of queries answered. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>transport,:</em>&nbsp;</td><td>set to UDP or TCP to match some types of entries. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>sendfunc,:</em>&nbsp;</td><td>called to send answer (buffer, size, userarg). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>userdata,:</em>&nbsp;</td><td>userarg to give to sendfunc. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>verbose_out,:</em>&nbsp;</td><td>if not NULL, verbose messages are printed there. </td></tr>
  </table>
</dl>

<p>References <a class="el" href="ldns-testpkts_8c_source.html#l00722">adjust_packet()</a>, <a class="el" href="ldns-testpkts_8h_source.html#l00184">entry::copy_id</a>, <a class="el" href="ldns-testpkts_8c_source.html#l00659">find_match()</a>, <a class="el" href="ldns-testpkts_8h_source.html#l00142">reply_packet::next</a>, <a class="el" href="ldns-testpkts_8h_source.html#l00148">reply_packet::packet_sleep</a>, <a class="el" href="ldns-testpkts_8h_source.html#l00144">reply_packet::reply</a>, <a class="el" href="ldns-testpkts_8h_source.html#l00146">reply_packet::reply_from_hex</a>, <a class="el" href="ldns-testpkts_8h_source.html#l00180">entry::reply_list</a>, and <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>.</p>

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