<html>
<head>
  <link rel="stylesheet" type="text/css" href="dox.css" />
  <title>libapreq2-2.16: include/apreq_parser.h File Reference</title> 
</head>
<body>
<div id="page-header">
<p class="menu">
   <a href="http://www.apache.org/">Apache Software Foundation</a> &gt; <a href="http://httpd.apache.org">HTTP Server Project</a> &gt;
<a href="http://httpd.apache.org/apreq/">Request Library Subproject</a></p>
<p class="apache">Apache HTTP Server Request Library</p>
<img alt="" src="feather.gif" /></div>
<!-- Generated by Doxygen 1.8.20 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">apreq_parser.h File Reference<div class="ingroups"><a class="el" href="group__libapreq2.html">Apache Request Library</a></div></div>  </div>
</div><!--header-->
<div class="contents">

<p>Request body parser API.  
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="apreq__param_8h_source.html">apreq_param.h</a>&quot;</code><br />
</div>
<p><a href="apreq__parser_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapreq__hook__t.html">apreq_hook_t</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapreq__parser__t.html">apreq_parser_t</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structapreq__hook__find__param__ctx__t.html">apreq_hook_find_param_ctx_t</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:af39d2adfdd09c2fe0c8c6a3c1ea1437e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#af39d2adfdd09c2fe0c8c6a3c1ea1437e">APREQ_PARSER_ARGS</a></td></tr>
<tr class="separator:af39d2adfdd09c2fe0c8c6a3c1ea1437e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a61c8b1c319752bde3cc35e98247707bf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a61c8b1c319752bde3cc35e98247707bf">APREQ_HOOK_ARGS</a></td></tr>
<tr class="separator:a61c8b1c319752bde3cc35e98247707bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a855c07ea7fc9e240c8620d29eea4a019"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a855c07ea7fc9e240c8620d29eea4a019">APREQ_DECLARE_PARSER</a>(f)</td></tr>
<tr class="separator:a855c07ea7fc9e240c8620d29eea4a019"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abaa196498d8cf959e07b4c84d5264f7f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#abaa196498d8cf959e07b4c84d5264f7f">APREQ_DECLARE_HOOK</a>(f)</td></tr>
<tr class="separator:abaa196498d8cf959e07b4c84d5264f7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a2c35885676cec315fc7dea19a6d1d870"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structapreq__hook__t.html">apreq_hook_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a2c35885676cec315fc7dea19a6d1d870">apreq_hook_t</a></td></tr>
<tr class="separator:a2c35885676cec315fc7dea19a6d1d870"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade5e15a40b9e1ec626ee56c494c7cdbb"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structapreq__parser__t.html">apreq_parser_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#ade5e15a40b9e1ec626ee56c494c7cdbb">apreq_parser_t</a></td></tr>
<tr class="separator:ade5e15a40b9e1ec626ee56c494c7cdbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:affb8f3ab5b29a4e09f3aa3bde8630118"><td class="memItemLeft" align="right" valign="top">typedef apr_status_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#affb8f3ab5b29a4e09f3aa3bde8630118">apreq_parser_function_t</a>) (<a class="el" href="apreq__parser_8h.html#af39d2adfdd09c2fe0c8c6a3c1ea1437e">APREQ_PARSER_ARGS</a>)</td></tr>
<tr class="separator:affb8f3ab5b29a4e09f3aa3bde8630118"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ff78d9001f60363061d0608b52afbe0"><td class="memItemLeft" align="right" valign="top">typedef apr_status_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a6ff78d9001f60363061d0608b52afbe0">apreq_hook_function_t</a>) (<a class="el" href="apreq__parser_8h.html#a61c8b1c319752bde3cc35e98247707bf">APREQ_HOOK_ARGS</a>)</td></tr>
<tr class="separator:a6ff78d9001f60363061d0608b52afbe0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9e03fd28359c5a82771a25d806c2165"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structapreq__hook__find__param__ctx__t.html">apreq_hook_find_param_ctx_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#ab9e03fd28359c5a82771a25d806c2165">apreq_hook_find_param_ctx_t</a></td></tr>
<tr class="separator:ab9e03fd28359c5a82771a25d806c2165"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a3c00aa3a31daba2c06110d5fc8edf1fe"><td class="memItemLeft" align="right" valign="top">static APR_INLINE apr_status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a3c00aa3a31daba2c06110d5fc8edf1fe">apreq_parser_run</a> (struct <a class="el" href="structapreq__parser__t.html">apreq_parser_t</a> *psr, apr_table_t *t, apr_bucket_brigade *bb)</td></tr>
<tr class="separator:a3c00aa3a31daba2c06110d5fc8edf1fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14d03a414fc4a0663af55fbb1f532bab"><td class="memItemLeft" align="right" valign="top">static APR_INLINE apr_status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a14d03a414fc4a0663af55fbb1f532bab">apreq_hook_run</a> (struct <a class="el" href="structapreq__hook__t.html">apreq_hook_t</a> *h, <a class="el" href="structapreq__param__t.html">apreq_param_t</a> *param, apr_bucket_brigade *bb)</td></tr>
<tr class="separator:a14d03a414fc4a0663af55fbb1f532bab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fd1ffe554941172fce54217c35f9db3"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a6fd1ffe554941172fce54217c35f9db3">APREQ_DECLARE_PARSER</a> (apreq_parse_headers)</td></tr>
<tr class="separator:a6fd1ffe554941172fce54217c35f9db3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec4b20f646ea57ad84d6a3391c548838"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#aec4b20f646ea57ad84d6a3391c548838">APREQ_DECLARE_PARSER</a> (apreq_parse_urlencoded)</td></tr>
<tr class="separator:aec4b20f646ea57ad84d6a3391c548838"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3bb6d9580fcbaf11cef33072ed3b14cb"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a3bb6d9580fcbaf11cef33072ed3b14cb">APREQ_DECLARE_PARSER</a> (apreq_parse_multipart)</td></tr>
<tr class="separator:a3bb6d9580fcbaf11cef33072ed3b14cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2833122bb6995f056a96df80a9f5a45f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a2833122bb6995f056a96df80a9f5a45f">APREQ_DECLARE_PARSER</a> (apreq_parse_generic)</td></tr>
<tr class="separator:a2833122bb6995f056a96df80a9f5a45f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adda61d873abf1c0ed1857bda405baa49"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#adda61d873abf1c0ed1857bda405baa49">APREQ_DECLARE_HOOK</a> (apreq_hook_apr_xml_parser)</td></tr>
<tr class="separator:adda61d873abf1c0ed1857bda405baa49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a562191171c5df0a83360435d0fe1a667"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structapreq__parser__t.html">apreq_parser_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a562191171c5df0a83360435d0fe1a667">apreq_parser_make</a> (apr_pool_t *pool, apr_bucket_alloc_t *ba, const char *content_type, <a class="el" href="apreq__parser_8h.html#affb8f3ab5b29a4e09f3aa3bde8630118">apreq_parser_function_t</a> pfn, apr_size_t brigade_limit, const char *temp_dir, <a class="el" href="structapreq__hook__t.html">apreq_hook_t</a> *hook, void *ctx)</td></tr>
<tr class="separator:a562191171c5df0a83360435d0fe1a667"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3cf15457eea6991b36f47f6139ab163c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structapreq__hook__t.html">apreq_hook_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a3cf15457eea6991b36f47f6139ab163c">apreq_hook_make</a> (apr_pool_t *pool, <a class="el" href="apreq__parser_8h.html#a6ff78d9001f60363061d0608b52afbe0">apreq_hook_function_t</a> hook, <a class="el" href="structapreq__hook__t.html">apreq_hook_t</a> *next, void *ctx)</td></tr>
<tr class="separator:a3cf15457eea6991b36f47f6139ab163c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97972c08b20917465b745c8b8eec95ed"><td class="memItemLeft" align="right" valign="top">apr_status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a97972c08b20917465b745c8b8eec95ed">apreq_parser_add_hook</a> (<a class="el" href="structapreq__parser__t.html">apreq_parser_t</a> *p, <a class="el" href="structapreq__hook__t.html">apreq_hook_t</a> *h)</td></tr>
<tr class="separator:a97972c08b20917465b745c8b8eec95ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a73013ecad087f14075d319a4a983dd82"><td class="memItemLeft" align="right" valign="top"><a class="el" href="apreq__parser_8h.html#affb8f3ab5b29a4e09f3aa3bde8630118">apreq_parser_function_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a73013ecad087f14075d319a4a983dd82">apreq_parser</a> (const char *enctype)</td></tr>
<tr class="separator:a73013ecad087f14075d319a4a983dd82"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a595f05be3d241a5b339fd6ef948bfbc8"><td class="memItemLeft" align="right" valign="top">apr_status_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a595f05be3d241a5b339fd6ef948bfbc8">apreq_register_parser</a> (const char *enctype, <a class="el" href="apreq__parser_8h.html#affb8f3ab5b29a4e09f3aa3bde8630118">apreq_parser_function_t</a> pfn)</td></tr>
<tr class="separator:a595f05be3d241a5b339fd6ef948bfbc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a162c74d59738663d7cb2109ee0b87c0a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a162c74d59738663d7cb2109ee0b87c0a">APREQ_DECLARE_HOOK</a> (apreq_hook_disable_uploads)</td></tr>
<tr class="separator:a162c74d59738663d7cb2109ee0b87c0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad169b0ac7b7b1a66d3df3ae66c96a16c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#ad169b0ac7b7b1a66d3df3ae66c96a16c">APREQ_DECLARE_HOOK</a> (apreq_hook_discard_brigade)</td></tr>
<tr class="separator:ad169b0ac7b7b1a66d3df3ae66c96a16c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5deeed0646b3d61cafe4eb5b6e40b16c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="apreq__parser_8h.html#a5deeed0646b3d61cafe4eb5b6e40b16c">APREQ_DECLARE_HOOK</a> (apreq_hook_find_param)</td></tr>
<tr class="separator:a5deeed0646b3d61cafe4eb5b6e40b16c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Request body parser API. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="abaa196498d8cf959e07b4c84d5264f7f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abaa196498d8cf959e07b4c84d5264f7f">&#9670;&nbsp;</a></span>APREQ_DECLARE_HOOK</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APREQ_DECLARE_HOOK</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">f</td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">                                <a class="code" href="apreq_8h.html#a8a1e7333187fdbc476473ac72d2ff38b">APREQ_DECLARE_NONSTD</a>(apr_status_t) \</div>
<div class="line">                                (f) (<a class="code" href="apreq__parser_8h.html#a61c8b1c319752bde3cc35e98247707bf">APREQ_HOOK_ARGS</a>)</div>
</div><!-- fragment --><p>Declares an API hook. </p>

</div>
</div>
<a id="a855c07ea7fc9e240c8620d29eea4a019"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a855c07ea7fc9e240c8620d29eea4a019">&#9670;&nbsp;</a></span>APREQ_DECLARE_PARSER</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APREQ_DECLARE_PARSER</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">f</td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">                                <a class="code" href="apreq_8h.html#a8a1e7333187fdbc476473ac72d2ff38b">APREQ_DECLARE_NONSTD</a>(apr_status_t) \</div>
<div class="line">                                (f) (<a class="code" href="apreq__parser_8h.html#af39d2adfdd09c2fe0c8c6a3c1ea1437e">APREQ_PARSER_ARGS</a>)</div>
</div><!-- fragment --><p>Declares a API parser. </p>

</div>
</div>
<a id="a61c8b1c319752bde3cc35e98247707bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a61c8b1c319752bde3cc35e98247707bf">&#9670;&nbsp;</a></span>APREQ_HOOK_ARGS</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APREQ_HOOK_ARGS</td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">                           <a class="code" href="structapreq__hook__t.html">apreq_hook_t</a> *hook,         \</div>
<div class="line">                           apreq_param_t *param,       \</div>
<div class="line">                           apr_bucket_brigade *bb</div>
</div><!-- fragment --><p>Hook arguments </p>

</div>
</div>
<a id="af39d2adfdd09c2fe0c8c6a3c1ea1437e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af39d2adfdd09c2fe0c8c6a3c1ea1437e">&#9670;&nbsp;</a></span>APREQ_PARSER_ARGS</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define APREQ_PARSER_ARGS</td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">                           <a class="code" href="structapreq__parser__t.html">apreq_parser_t</a> *parser,     \</div>
<div class="line">                           apr_table_t *t,             \</div>
<div class="line">                           apr_bucket_brigade *bb</div>
</div><!-- fragment --><p>Parser arguments. </p>

</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a id="ab9e03fd28359c5a82771a25d806c2165"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab9e03fd28359c5a82771a25d806c2165">&#9670;&nbsp;</a></span>apreq_hook_find_param_ctx_t</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structapreq__hook__find__param__ctx__t.html">apreq_hook_find_param_ctx_t</a> <a class="el" href="structapreq__hook__find__param__ctx__t.html">apreq_hook_find_param_ctx_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Context struct for the apreq_hook_find_param hook. </p>

</div>
</div>
<a id="a6ff78d9001f60363061d0608b52afbe0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ff78d9001f60363061d0608b52afbe0">&#9670;&nbsp;</a></span>apreq_hook_function_t</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef apr_status_t(* apreq_hook_function_t) (<a class="el" href="apreq__parser_8h.html#a61c8b1c319752bde3cc35e98247707bf">APREQ_HOOK_ARGS</a>)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>The callback function of a hook. See <a class="el" href="structapreq__hook__t.html">apreq_hook_t</a>. </p>

</div>
</div>
<a id="a2c35885676cec315fc7dea19a6d1d870"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2c35885676cec315fc7dea19a6d1d870">&#9670;&nbsp;</a></span>apreq_hook_t</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structapreq__hook__t.html">apreq_hook_t</a> <a class="el" href="structapreq__hook__t.html">apreq_hook_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>A hook is called by the parser whenever data arrives in a file upload parameter of the request body. You may associate any number of hooks with a parser instance with <a class="el" href="apreq__parser_8h.html#a97972c08b20917465b745c8b8eec95ed">apreq_parser_add_hook()</a>. </p>

</div>
</div>
<a id="affb8f3ab5b29a4e09f3aa3bde8630118"></a>
<h2 class="memtitle"><span class="permalink"><a href="#affb8f3ab5b29a4e09f3aa3bde8630118">&#9670;&nbsp;</a></span>apreq_parser_function_t</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef apr_status_t(* apreq_parser_function_t) (<a class="el" href="apreq__parser_8h.html#af39d2adfdd09c2fe0c8c6a3c1ea1437e">APREQ_PARSER_ARGS</a>)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>The callback function implementing a request body parser. </p>

</div>
</div>
<a id="ade5e15a40b9e1ec626ee56c494c7cdbb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ade5e15a40b9e1ec626ee56c494c7cdbb">&#9670;&nbsp;</a></span>apreq_parser_t</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structapreq__parser__t.html">apreq_parser_t</a> <a class="el" href="structapreq__parser__t.html">apreq_parser_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>A request body parser instance. </p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="adda61d873abf1c0ed1857bda405baa49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adda61d873abf1c0ed1857bda405baa49">&#9670;&nbsp;</a></span>APREQ_DECLARE_HOOK() <span class="overload">[1/4]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">APREQ_DECLARE_HOOK </td>
          <td>(</td>
          <td class="paramtype">apreq_hook_apr_xml_parser&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>apr_xml_parser hook. It will parse until EOS appears. The parsed document isn't available until parsing has completed successfully. The hook's ctx pointer may be cast as (apr_xml_doc **) to retrieve the parsed document. </p>

</div>
</div>
<a id="a162c74d59738663d7cb2109ee0b87c0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a162c74d59738663d7cb2109ee0b87c0a">&#9670;&nbsp;</a></span>APREQ_DECLARE_HOOK() <span class="overload">[2/4]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">APREQ_DECLARE_HOOK </td>
          <td>(</td>
          <td class="paramtype">apreq_hook_disable_uploads&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Returns APREQ_ERROR_GENERAL. Effectively disables mfd parser if a file-upload field is present. </p>

</div>
</div>
<a id="ad169b0ac7b7b1a66d3df3ae66c96a16c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad169b0ac7b7b1a66d3df3ae66c96a16c">&#9670;&nbsp;</a></span>APREQ_DECLARE_HOOK() <span class="overload">[3/4]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">APREQ_DECLARE_HOOK </td>
          <td>(</td>
          <td class="paramtype">apreq_hook_discard_brigade&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Calls apr_brigade_cleanup on the incoming brigade after passing the brigade to any subsequent hooks. </p>

</div>
</div>
<a id="a5deeed0646b3d61cafe4eb5b6e40b16c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5deeed0646b3d61cafe4eb5b6e40b16c">&#9670;&nbsp;</a></span>APREQ_DECLARE_HOOK() <span class="overload">[4/4]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">APREQ_DECLARE_HOOK </td>
          <td>(</td>
          <td class="paramtype">apreq_hook_find_param&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Special purpose utility for locating a parameter during parsing. The hook's ctx shoud be initialized to an <a class="el" href="structapreq__hook__find__param__ctx__t.html">apreq_hook_find_param_ctx_t</a> *, with the name attribute set to the sought parameter name, the param attribute set to NULL, and the prev attribute set to the address of the previous hook. The param attribute will be reassigned to the first param found, and once that happens this hook is immediately removed from the chain.</p>
<dl class="section remark"><dt>Remarks</dt><dd>When used, this should always be the first hook invoked, so add it manually with ctx-&gt;prev = &amp;parser-&gt;hook instead of using apreq_parser_add_hook. </dd></dl>

</div>
</div>
<a id="a2833122bb6995f056a96df80a9f5a45f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2833122bb6995f056a96df80a9f5a45f">&#9670;&nbsp;</a></span>APREQ_DECLARE_PARSER() <span class="overload">[1/4]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">APREQ_DECLARE_PARSER </td>
          <td>(</td>
          <td class="paramtype">apreq_parse_generic&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Generic parser. No table entries will be added to the req-&gt;body table by this parser. The parser creates a dummy <a class="el" href="structapreq__param__t.html">apreq_param_t</a> to pass to any configured hooks. If no hooks are configured, the dummy param's bb slot will contain a copy of the request body. It can be retrieved by casting the parser's ctx pointer to (<a class="el" href="structapreq__param__t.html">apreq_param_t</a> **). </p>

</div>
</div>
<a id="a6fd1ffe554941172fce54217c35f9db3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6fd1ffe554941172fce54217c35f9db3">&#9670;&nbsp;</a></span>APREQ_DECLARE_PARSER() <span class="overload">[2/4]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">APREQ_DECLARE_PARSER </td>
          <td>(</td>
          <td class="paramtype">apreq_parse_headers&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>RFC 822 Header parser. It will reject all data after the first CRLF CRLF sequence (an empty line). See <a class="el" href="apreq__parser_8h.html#a3c00aa3a31daba2c06110d5fc8edf1fe">apreq_parser_run()</a> for more info on rejected data. </p>

</div>
</div>
<a id="a3bb6d9580fcbaf11cef33072ed3b14cb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3bb6d9580fcbaf11cef33072ed3b14cb">&#9670;&nbsp;</a></span>APREQ_DECLARE_PARSER() <span class="overload">[3/4]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">APREQ_DECLARE_PARSER </td>
          <td>(</td>
          <td class="paramtype">apreq_parse_multipart&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>RFC 2388 multipart/form-data (and XForms 1.0 multipart/related) parser. It will reject any buckets representing preamble and postamble text (this is normal behavior, not an error condition). See <a class="el" href="apreq__parser_8h.html#a3c00aa3a31daba2c06110d5fc8edf1fe">apreq_parser_run()</a> for more info on rejected data. </p>

</div>
</div>
<a id="aec4b20f646ea57ad84d6a3391c548838"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec4b20f646ea57ad84d6a3391c548838">&#9670;&nbsp;</a></span>APREQ_DECLARE_PARSER() <span class="overload">[4/4]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">APREQ_DECLARE_PARSER </td>
          <td>(</td>
          <td class="paramtype">apreq_parse_urlencoded&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>RFC 2396 application/x-www-form-urlencoded parser. </p>

</div>
</div>
<a id="a3cf15457eea6991b36f47f6139ab163c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3cf15457eea6991b36f47f6139ab163c">&#9670;&nbsp;</a></span>apreq_hook_make()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structapreq__hook__t.html">apreq_hook_t</a>* apreq_hook_make </td>
          <td>(</td>
          <td class="paramtype">apr_pool_t *&#160;</td>
          <td class="paramname"><em>pool</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="apreq__parser_8h.html#a6ff78d9001f60363061d0608b52afbe0">apreq_hook_function_t</a>&#160;</td>
          <td class="paramname"><em>hook</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structapreq__hook__t.html">apreq_hook_t</a> *&#160;</td>
          <td class="paramname"><em>next</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>ctx</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Construct a hook.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">pool</td><td>used to allocate the hook. </td></tr>
    <tr><td class="paramname">hook</td><td>The hook function. </td></tr>
    <tr><td class="paramname">next</td><td>List of other hooks for this hook to call on. </td></tr>
    <tr><td class="paramname">ctx</td><td>Hook's internal scratch pad. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>New hook. </dd></dl>

</div>
</div>
<a id="a14d03a414fc4a0663af55fbb1f532bab"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14d03a414fc4a0663af55fbb1f532bab">&#9670;&nbsp;</a></span>apreq_hook_run()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static APR_INLINE apr_status_t apreq_hook_run </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structapreq__hook__t.html">apreq_hook_t</a> *&#160;</td>
          <td class="paramname"><em>h</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structapreq__param__t.html">apreq_param_t</a> *&#160;</td>
          <td class="paramname"><em>param</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">apr_bucket_brigade *&#160;</td>
          <td class="paramname"><em>bb</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Run the hook with the current parameter and the incoming bucket brigade. The hook may modify the brigade if necessary. Once all hooks have completed, the contents of the brigade will be added to the parameter's bb attribute. </p><dl class="section return"><dt>Returns</dt><dd>APR_SUCCESS on success. All other values represent errors. </dd></dl>

</div>
</div>
<a id="a73013ecad087f14075d319a4a983dd82"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a73013ecad087f14075d319a4a983dd82">&#9670;&nbsp;</a></span>apreq_parser()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="apreq__parser_8h.html#affb8f3ab5b29a4e09f3aa3bde8630118">apreq_parser_function_t</a> apreq_parser </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>enctype</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Fetch the default parser function associated with the given MIME type. </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">enctype</td><td>The desired enctype (can also be a full "Content-Type" header). </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The parser function, or NULL if the enctype is unrecognized. </dd></dl>

</div>
</div>
<a id="a97972c08b20917465b745c8b8eec95ed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a97972c08b20917465b745c8b8eec95ed">&#9670;&nbsp;</a></span>apreq_parser_add_hook()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">apr_status_t apreq_parser_add_hook </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structapreq__parser__t.html">apreq_parser_t</a> *&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structapreq__hook__t.html">apreq_hook_t</a> *&#160;</td>
          <td class="paramname"><em>h</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Add a new hook to the end of the parser's hook list.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>Parser. </td></tr>
    <tr><td class="paramname">h</td><td>Hook to append. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a562191171c5df0a83360435d0fe1a667"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a562191171c5df0a83360435d0fe1a667">&#9670;&nbsp;</a></span>apreq_parser_make()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structapreq__parser__t.html">apreq_parser_t</a>* apreq_parser_make </td>
          <td>(</td>
          <td class="paramtype">apr_pool_t *&#160;</td>
          <td class="paramname"><em>pool</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">apr_bucket_alloc_t *&#160;</td>
          <td class="paramname"><em>ba</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>content_type</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="apreq__parser_8h.html#affb8f3ab5b29a4e09f3aa3bde8630118">apreq_parser_function_t</a>&#160;</td>
          <td class="paramname"><em>pfn</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">apr_size_t&#160;</td>
          <td class="paramname"><em>brigade_limit</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>temp_dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structapreq__hook__t.html">apreq_hook_t</a> *&#160;</td>
          <td class="paramname"><em>hook</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>ctx</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Construct a parser.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">pool</td><td>Pool used to allocate the parser. </td></tr>
    <tr><td class="paramname">ba</td><td>bucket allocator used to create bucket brigades </td></tr>
    <tr><td class="paramname">content_type</td><td>Content-type that this parser can deal with. </td></tr>
    <tr><td class="paramname">pfn</td><td>The parser function. </td></tr>
    <tr><td class="paramname">brigade_limit</td><td>the maximum in-memory bytes a brigade may use </td></tr>
    <tr><td class="paramname">temp_dir</td><td>the directory used by the parser for temporary files </td></tr>
    <tr><td class="paramname">hook</td><td>Hooks to associate this parser with. </td></tr>
    <tr><td class="paramname">ctx</td><td>Parser's internal scratch pad. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>New parser. </dd></dl>

</div>
</div>
<a id="a3c00aa3a31daba2c06110d5fc8edf1fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c00aa3a31daba2c06110d5fc8edf1fe">&#9670;&nbsp;</a></span>apreq_parser_run()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static APR_INLINE apr_status_t apreq_parser_run </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structapreq__parser__t.html">apreq_parser_t</a> *&#160;</td>
          <td class="paramname"><em>psr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">apr_table_t *&#160;</td>
          <td class="paramname"><em>t</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">apr_bucket_brigade *&#160;</td>
          <td class="paramname"><em>bb</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Parse the incoming brigade into a table. Parsers normally consume all the buckets of the brigade during parsing. However parsers may leave "rejected" data in the brigade, even during a successful parse, so callers may need to clean up the brigade themselves (in particular, rejected buckets should not be passed back to the parser again). </p><dl class="section remark"><dt>Remarks</dt><dd>bb == NULL is valid: the parser should return its public status: APR_INCOMPLETE, APR_SUCCESS, or an error code. </dd></dl>

</div>
</div>
<a id="a595f05be3d241a5b339fd6ef948bfbc8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a595f05be3d241a5b339fd6ef948bfbc8">&#9670;&nbsp;</a></span>apreq_register_parser()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">apr_status_t apreq_register_parser </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>enctype</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="apreq__parser_8h.html#affb8f3ab5b29a4e09f3aa3bde8630118">apreq_parser_function_t</a>&#160;</td>
          <td class="paramname"><em>pfn</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Register a new parsing function with a MIME enctype. Registered parsers are added to <a class="el" href="apreq__parser_8h.html#a73013ecad087f14075d319a4a983dd82">apreq_parser()</a>'s internal lookup table.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">enctype</td><td>The MIME type. </td></tr>
    <tr><td class="paramname">pfn</td><td>The function to use during parsing. Setting parser == NULL will remove an existing parser.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>APR_SUCCESS or error. </dd></dl>

</div>
</div>
</div><!-- contents -->
<div class="ttc" id="aapreq__parser_8h_html_a61c8b1c319752bde3cc35e98247707bf"><div class="ttname"><a href="apreq__parser_8h.html#a61c8b1c319752bde3cc35e98247707bf">APREQ_HOOK_ARGS</a></div><div class="ttdeci">#define APREQ_HOOK_ARGS</div><div class="ttdef"><b>Definition:</b> apreq_parser.h:52</div></div>
<div class="ttc" id="astructapreq__hook__t_html"><div class="ttname"><a href="structapreq__hook__t.html">apreq_hook_t</a></div><div class="ttdef"><b>Definition:</b> apreq_parser.h:83</div></div>
<div class="ttc" id="aapreq_8h_html_a8a1e7333187fdbc476473ac72d2ff38b"><div class="ttname"><a href="apreq_8h.html#a8a1e7333187fdbc476473ac72d2ff38b">APREQ_DECLARE_NONSTD</a></div><div class="ttdeci">#define APREQ_DECLARE_NONSTD(d)</div><div class="ttdef"><b>Definition:</b> apreq.h:60</div></div>
<div class="ttc" id="astructapreq__parser__t_html"><div class="ttname"><a href="structapreq__parser__t.html">apreq_parser_t</a></div><div class="ttdef"><b>Definition:</b> apreq_parser.h:93</div></div>
<div class="ttc" id="aapreq__parser_8h_html_af39d2adfdd09c2fe0c8c6a3c1ea1437e"><div class="ttname"><a href="apreq__parser_8h.html#af39d2adfdd09c2fe0c8c6a3c1ea1437e">APREQ_PARSER_ARGS</a></div><div class="ttdeci">#define APREQ_PARSER_ARGS</div><div class="ttdef"><b>Definition:</b> apreq_parser.h:47</div></div>
<div id="footer">
<p class="apache">
Copyright &copy; 2003-2006 <a href="http://www.apache.org">The Apache Software Foundation</a>.<br/>
See <a href="apreq_license.html">LICENSE</a>.</p>
<p class="menu">
<span style="color:#aaa">page generated by <a href="http://www.doxygen.org/"><code>doxygen</code></a>
version 1.8.20 on Wed Mar 10 2021</span>
</p>
</div>
</body>
</html>