<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Portable Runtime Utility Library: Hook Functions</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.5.4 --> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> </ul> </div> <h1>Hook Functions<br> <small> [<a class="el" href="group___a_p_r___util.html">APR Utility Functions</a>]</small> </h1><table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Modules</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___o_p_t___h_o_o_k.html">Optional Hook Functions</a></td></tr> <tr><td colspan="2"><br><h2>Defines</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g832a6d3b73a43b3f7c58c5702ddccce9">APR_IMPLEMENT_HOOK_GET_PROTO</a>(ns, link, name) link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g69298243d3c4ffb4627fd3d04b522f44">APR_DECLARE_EXTERNAL_HOOK</a>(ns, link, ret, name, args)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga936f5a0d1164d301aa157de6023fae5">APR_HOOK_STRUCT</a>(members) static struct { members } _hooks;</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g5699f73166bae88b6f6ac0bf7618b0f6">APR_HOOK_LINK</a>(name) apr_array_header_t *link_##name;</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g2500abadaa54b3a9d6ec25ff33a6b0cc">APR_IMPLEMENT_EXTERNAL_HOOK_BASE</a>(ns, link, name)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g2d11a43b6431ec568cc1647da4a2079c">APR_IMPLEMENT_EXTERNAL_HOOK_VOID</a>(ns, link, name, args_decl, args_use)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#gb466280bdabe0cc2ee5880cbb512fa3d">APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL</a>(ns, link, ret, name, args_decl, args_use, ok, decline)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g0420a2aa9ca6b3c1638bdb76025ecc57">APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST</a>(ns, link, ret, name, args_decl, args_use, decline)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#gb004dcbfff32997deb15040e48f07e92">APR_HOOK_REALLY_FIRST</a> (-10)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g564dea4803813674cb6b742f65a3d2b2">APR_HOOK_FIRST</a> 0</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#gb9a5d50c3478c4d640deccec6b0ce879">APR_HOOK_MIDDLE</a> 10</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ga610a95f03d7b4aee922c28b0919f028">APR_HOOK_LAST</a> 20</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#ge3c7d2cf35e8c89828dfff7a85b0ed77">APR_HOOK_REALLY_LAST</a> 30</td></tr> <tr><td colspan="2"><br><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g04843fe00dc3c08c23130fef3ba1260c">apr_hook_sort_register</a> (const char *szHookName, apr_array_header_t **aHooks)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g1e0b6cf91dac5417c1b9cbd1b46b8991">apr_hook_sort_all</a> (void)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g1de31557683f53c2a07f73990962c585">apr_hook_debug_show</a> (const char *szName, const char *const *aszPre, const char *const *aszSucc)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g5d20451da75574c8433feb1bd5b2ce10">apr_hook_deregister_all</a> (void)</td></tr> <tr><td colspan="2"><br><h2>Variables</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">apr_pool_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g8911bb699a5f03ad3c36d579ca0eca23">apr_hook_global_pool</a></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g59309caeb9b47d921727530494f264be">apr_hook_debug_enabled</a></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group___a_p_r___util___hook.html#g37be3c217439ceddbda16054b020a658">apr_hook_debug_current</a></td></tr> </table> <hr><h2>Define Documentation</h2> <a class="anchor" name="g69298243d3c4ffb4627fd3d04b522f44"></a><!-- doxytag: member="apr_hooks.h::APR_DECLARE_EXTERNAL_HOOK" ref="g69298243d3c4ffb4627fd3d04b522f44" args="(ns, link, ret, name, args)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_DECLARE_EXTERNAL_HOOK </td> <td>(</td> <td class="paramtype">ns, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">link, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">ret, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">name, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">args </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">typedef</span> ret ns##_HOOK_##name##_t args; \ link##_DECLARE(<span class="keywordtype">void</span>) ns<span class="preprocessor">##_hook_##name(ns##_HOOK_##name##_t *pf, \</span> <span class="preprocessor"> const char * const *aszPre, \</span> <span class="preprocessor"> const char * const *aszSucc, int nOrder); \</span> <span class="preprocessor">link##_DECLARE(ret) ns##_run_##name args; \</span> <span class="preprocessor">APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name); \</span> <span class="preprocessor">typedef struct ns##_LINK_##name##_t \</span> <span class="preprocessor"> { \</span> <span class="preprocessor"> ns##_HOOK_##name##_t *pFunc; \</span> <span class="preprocessor"> const char *szName; \</span> <span class="preprocessor"> const char * const *aszPredecessors; \</span> <span class="preprocessor"> const char * const *aszSuccessors; \</span> <span class="preprocessor"> int nOrder; \</span> <span class="preprocessor"> } ns##_LINK_##name##_t;</span> </pre></div>macro to declare the hook correctly </div> </div><p> <a class="anchor" name="g564dea4803813674cb6b742f65a3d2b2"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_FIRST" ref="g564dea4803813674cb6b742f65a3d2b2" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_HOOK_FIRST 0 </td> </tr> </table> </div> <div class="memdoc"> <p> run this hook first </div> </div><p> <a class="anchor" name="ga610a95f03d7b4aee922c28b0919f028"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_LAST" ref="ga610a95f03d7b4aee922c28b0919f028" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_HOOK_LAST 20 </td> </tr> </table> </div> <div class="memdoc"> <p> run this hook after every other hook which is defined </div> </div><p> <a class="anchor" name="g5699f73166bae88b6f6ac0bf7618b0f6"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_LINK" ref="g5699f73166bae88b6f6ac0bf7618b0f6" args="(name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_HOOK_LINK </td> <td>(</td> <td class="paramtype">name </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> apr_array_header_t *link_##name;</td> </tr> </table> </div> <div class="memdoc"> <p> macro to link the hook structure </div> </div><p> <a class="anchor" name="gb9a5d50c3478c4d640deccec6b0ce879"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_MIDDLE" ref="gb9a5d50c3478c4d640deccec6b0ce879" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_HOOK_MIDDLE 10 </td> </tr> </table> </div> <div class="memdoc"> <p> run this hook somewhere </div> </div><p> <a class="anchor" name="gb004dcbfff32997deb15040e48f07e92"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_REALLY_FIRST" ref="gb004dcbfff32997deb15040e48f07e92" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_HOOK_REALLY_FIRST (-10) </td> </tr> </table> </div> <div class="memdoc"> <p> run this hook first, before ANYTHING </div> </div><p> <a class="anchor" name="ge3c7d2cf35e8c89828dfff7a85b0ed77"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_REALLY_LAST" ref="ge3c7d2cf35e8c89828dfff7a85b0ed77" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_HOOK_REALLY_LAST 30 </td> </tr> </table> </div> <div class="memdoc"> <p> run this hook last, after EVERYTHING </div> </div><p> <a class="anchor" name="ga936f5a0d1164d301aa157de6023fae5"></a><!-- doxytag: member="apr_hooks.h::APR_HOOK_STRUCT" ref="ga936f5a0d1164d301aa157de6023fae5" args="(members)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_HOOK_STRUCT </td> <td>(</td> <td class="paramtype">members </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> static struct { members } _hooks;</td> </tr> </table> </div> <div class="memdoc"> <p> macro to declare the hook structure </div> </div><p> <a class="anchor" name="g2500abadaa54b3a9d6ec25ff33a6b0cc"></a><!-- doxytag: member="apr_hooks.h::APR_IMPLEMENT_EXTERNAL_HOOK_BASE" ref="g2500abadaa54b3a9d6ec25ff33a6b0cc" args="(ns, link, name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_IMPLEMENT_EXTERNAL_HOOK_BASE </td> <td>(</td> <td class="paramtype">ns, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">link, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">name </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment">link##_DECLARE(<span class="keywordtype">void</span>) ns<span class="preprocessor">##_hook_##name(ns##_HOOK_##name##_t *pf,const char * const *aszPre, \</span> <span class="preprocessor"> const char * const *aszSucc,int nOrder) \</span> <span class="preprocessor"> { \</span> <span class="preprocessor"> ns##_LINK_##name##_t *pHook; \</span> <span class="preprocessor"> if(!_hooks.link_##name) \</span> <span class="preprocessor"> { \</span> <span class="preprocessor"> _hooks.link_##name=apr_array_make(apr_hook_global_pool,1,sizeof(ns##_LINK_##name##_t)); \</span> <span class="preprocessor"> apr_hook_sort_register(#name,&_hooks.link_##name); \</span> <span class="preprocessor"> } \</span> <span class="preprocessor"> pHook=apr_array_push(_hooks.link_##name); \</span> <span class="preprocessor"> pHook->pFunc=pf; \</span> <span class="preprocessor"> pHook->aszPredecessors=aszPre; \</span> <span class="preprocessor"> pHook->aszSuccessors=aszSucc; \</span> <span class="preprocessor"> pHook->nOrder=nOrder; \</span> <span class="preprocessor"> pHook->szName=apr_hook_debug_current; \</span> <span class="preprocessor"> if(apr_hook_debug_enabled) \</span> <span class="preprocessor"> apr_hook_debug_show(#name,aszPre,aszSucc); \</span> <span class="preprocessor"> } \</span> <span class="preprocessor"> APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \</span> <span class="preprocessor"> { \</span> <span class="preprocessor"> return _hooks.link_##name; \</span> <span class="preprocessor"> }</span> </pre></div>macro to implement the hook </div> </div><p> <a class="anchor" name="gb466280bdabe0cc2ee5880cbb512fa3d"></a><!-- doxytag: member="apr_hooks.h::APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL" ref="gb466280bdabe0cc2ee5880cbb512fa3d" args="(ns, link, ret, name, args_decl, args_use, ok, decline)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL </td> <td>(</td> <td class="paramtype">ns, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">link, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">ret, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">name, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">args_decl, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">args_use, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">ok, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">decline </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group___a_p_r___util___hook.html#g2500abadaa54b3a9d6ec25ff33a6b0cc">APR_IMPLEMENT_EXTERNAL_HOOK_BASE</a>(ns,link,name) \ link##_DECLARE(ret) ns<span class="preprocessor">##_run_##name args_decl \</span> <span class="preprocessor"> { \</span> <span class="preprocessor"> ns##_LINK_##name##_t *pHook; \</span> <span class="preprocessor"> int n; \</span> <span class="preprocessor"> ret rv; \</span> <span class="preprocessor">\</span> <span class="preprocessor"> if(!_hooks.link_##name) \</span> <span class="preprocessor"> return ok; \</span> <span class="preprocessor">\</span> <span class="preprocessor"> pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \</span> <span class="preprocessor"> for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \</span> <span class="preprocessor"> { \</span> <span class="preprocessor"> rv=pHook[n].pFunc args_use; \</span> <span class="preprocessor">\</span> <span class="preprocessor"> if(rv != ok && rv != decline) \</span> <span class="preprocessor"> return rv; \</span> <span class="preprocessor"> } \</span> <span class="preprocessor"> return ok; \</span> <span class="preprocessor"> }</span> </pre></div>Implement a hook that runs until one of the functions returns something other than OK or DECLINE <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ns</em> </td><td>The namespace prefix of the hook functions </td></tr> <tr><td valign="top"></td><td valign="top"><em>link</em> </td><td>The linkage declaration prefix of the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>ret</em> </td><td>Type to return </td></tr> <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The name of the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>args_decl</em> </td><td>The declaration of the arguments for the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>args_use</em> </td><td>The names for the arguments for the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>ok</em> </td><td>Success value </td></tr> <tr><td valign="top"></td><td valign="top"><em>decline</em> </td><td>Decline value </td></tr> </table> </dl> <dl class="note" compact><dt><b>Note:</b></dt><dd>The link prefix FOO corresponds to FOO_DECLARE() macros, which provide export linkage from the module that IMPLEMENTs the hook, and import linkage from external modules that link to the hook's module. </dd></dl> </div> </div><p> <a class="anchor" name="g0420a2aa9ca6b3c1638bdb76025ecc57"></a><!-- doxytag: member="apr_hooks.h::APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST" ref="g0420a2aa9ca6b3c1638bdb76025ecc57" args="(ns, link, ret, name, args_decl, args_use, decline)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST </td> <td>(</td> <td class="paramtype">ns, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">link, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">ret, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">name, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">args_decl, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">args_use, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">decline </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group___a_p_r___util___hook.html#g2500abadaa54b3a9d6ec25ff33a6b0cc">APR_IMPLEMENT_EXTERNAL_HOOK_BASE</a>(ns,link,name) \ link##_DECLARE(ret) ns<span class="preprocessor">##_run_##name args_decl \</span> <span class="preprocessor"> { \</span> <span class="preprocessor"> ns##_LINK_##name##_t *pHook; \</span> <span class="preprocessor"> int n; \</span> <span class="preprocessor"> ret rv; \</span> <span class="preprocessor">\</span> <span class="preprocessor"> if(!_hooks.link_##name) \</span> <span class="preprocessor"> return decline; \</span> <span class="preprocessor">\</span> <span class="preprocessor"> pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \</span> <span class="preprocessor"> for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \</span> <span class="preprocessor"> { \</span> <span class="preprocessor"> rv=pHook[n].pFunc args_use; \</span> <span class="preprocessor">\</span> <span class="preprocessor"> if(rv != decline) \</span> <span class="preprocessor"> return rv; \</span> <span class="preprocessor"> } \</span> <span class="preprocessor"> return decline; \</span> <span class="preprocessor"> }</span> </pre></div>Implement a hook that runs until the first function returns something other than the value of decline <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ns</em> </td><td>The namespace prefix of the hook functions </td></tr> <tr><td valign="top"></td><td valign="top"><em>link</em> </td><td>The linkage declaration prefix of the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The name of the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>ret</em> </td><td>Type to return </td></tr> <tr><td valign="top"></td><td valign="top"><em>args_decl</em> </td><td>The declaration of the arguments for the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>args_use</em> </td><td>The names for the arguments for the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>decline</em> </td><td>Decline value </td></tr> </table> </dl> <dl class="note" compact><dt><b>Note:</b></dt><dd>The link prefix FOO corresponds to FOO_DECLARE() macros, which provide export linkage from the module that IMPLEMENTs the hook, and import linkage from external modules that link to the hook's module. </dd></dl> </div> </div><p> <a class="anchor" name="g2d11a43b6431ec568cc1647da4a2079c"></a><!-- doxytag: member="apr_hooks.h::APR_IMPLEMENT_EXTERNAL_HOOK_VOID" ref="g2d11a43b6431ec568cc1647da4a2079c" args="(ns, link, name, args_decl, args_use)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_IMPLEMENT_EXTERNAL_HOOK_VOID </td> <td>(</td> <td class="paramtype">ns, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">link, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">name, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">args_decl, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">args_use </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> <b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="group___a_p_r___util___hook.html#g2500abadaa54b3a9d6ec25ff33a6b0cc">APR_IMPLEMENT_EXTERNAL_HOOK_BASE</a>(ns,link,name) \ link##_DECLARE(<span class="keywordtype">void</span>) ns<span class="preprocessor">##_run_##name args_decl \</span> <span class="preprocessor"> { \</span> <span class="preprocessor"> ns##_LINK_##name##_t *pHook; \</span> <span class="preprocessor"> int n; \</span> <span class="preprocessor">\</span> <span class="preprocessor"> if(!_hooks.link_##name) \</span> <span class="preprocessor"> return; \</span> <span class="preprocessor">\</span> <span class="preprocessor"> pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \</span> <span class="preprocessor"> for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \</span> <span class="preprocessor"> pHook[n].pFunc args_use; \</span> <span class="preprocessor"> }</span> </pre></div>Implement a hook that has no return code, and therefore runs all of the registered functions <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>ns</em> </td><td>The namespace prefix of the hook functions </td></tr> <tr><td valign="top"></td><td valign="top"><em>link</em> </td><td>The linkage declaration prefix of the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>The name of the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>args_decl</em> </td><td>The declaration of the arguments for the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>args_use</em> </td><td>The names for the arguments for the hook </td></tr> </table> </dl> <dl class="note" compact><dt><b>Note:</b></dt><dd>The link prefix FOO corresponds to FOO_DECLARE() macros, which provide export linkage from the module that IMPLEMENTs the hook, and import linkage from external modules that link to the hook's module. </dd></dl> </div> </div><p> <a class="anchor" name="g832a6d3b73a43b3f7c58c5702ddccce9"></a><!-- doxytag: member="apr_hooks.h::APR_IMPLEMENT_HOOK_GET_PROTO" ref="g832a6d3b73a43b3f7c58c5702ddccce9" args="(ns, link, name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define APR_IMPLEMENT_HOOK_GET_PROTO </td> <td>(</td> <td class="paramtype">ns, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">link, <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">name </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void)</td> </tr> </table> </div> <div class="memdoc"> <p> macro to return the prototype of the hook function </div> </div><p> <hr><h2>Function Documentation</h2> <a class="anchor" name="g1de31557683f53c2a07f73990962c585"></a><!-- doxytag: member="apr_hooks.h::apr_hook_debug_show" ref="g1de31557683f53c2a07f73990962c585" args="(const char *szName, const char *const *aszPre, const char *const *aszSucc)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void apr_hook_debug_show </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"> <em>szName</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char *const * </td> <td class="paramname"> <em>aszPre</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char *const * </td> <td class="paramname"> <em>aszSucc</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Print all of the information about the current hook. This is used for debugging purposes. <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>szName</em> </td><td>The name of the hook </td></tr> <tr><td valign="top"></td><td valign="top"><em>aszPre</em> </td><td>All of the functions in the predecessor array </td></tr> <tr><td valign="top"></td><td valign="top"><em>aszSucc</em> </td><td>All of the functions in the successor array </td></tr> </table> </dl> </div> </div><p> <a class="anchor" name="g5d20451da75574c8433feb1bd5b2ce10"></a><!-- doxytag: member="apr_hooks.h::apr_hook_deregister_all" ref="g5d20451da75574c8433feb1bd5b2ce10" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void apr_hook_deregister_all </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Remove all currently registered functions. </div> </div><p> <a class="anchor" name="g1e0b6cf91dac5417c1b9cbd1b46b8991"></a><!-- doxytag: member="apr_hooks.h::apr_hook_sort_all" ref="g1e0b6cf91dac5417c1b9cbd1b46b8991" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void apr_hook_sort_all </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Sort all of the registerd functions for a given hook </div> </div><p> <a class="anchor" name="g04843fe00dc3c08c23130fef3ba1260c"></a><!-- doxytag: member="apr_hooks.h::apr_hook_sort_register" ref="g04843fe00dc3c08c23130fef3ba1260c" args="(const char *szHookName, apr_array_header_t **aHooks)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void apr_hook_sort_register </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"> <em>szHookName</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">apr_array_header_t ** </td> <td class="paramname"> <em>aHooks</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Register a hook function to be sorted <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>szHookName</em> </td><td>The name of the Hook the function is registered for </td></tr> <tr><td valign="top"></td><td valign="top"><em>aHooks</em> </td><td>The array which stores all of the functions for this hook </td></tr> </table> </dl> </div> </div><p> <hr><h2>Variable Documentation</h2> <a class="anchor" name="g37be3c217439ceddbda16054b020a658"></a><!-- doxytag: member="apr_hooks.h::apr_hook_debug_current" ref="g37be3c217439ceddbda16054b020a658" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">const char* <a class="el" href="group___a_p_r___util___hook.html#g37be3c217439ceddbda16054b020a658">apr_hook_debug_current</a> </td> </tr> </table> </div> <div class="memdoc"> <p> The name of the module that is currently registering a function </div> </div><p> <a class="anchor" name="g59309caeb9b47d921727530494f264be"></a><!-- doxytag: member="apr_hooks.h::apr_hook_debug_enabled" ref="g59309caeb9b47d921727530494f264be" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int <a class="el" href="group___a_p_r___util___hook.html#g59309caeb9b47d921727530494f264be">apr_hook_debug_enabled</a> </td> </tr> </table> </div> <div class="memdoc"> <p> A global variable to determine if debugging information about the hooks functions should be printed </div> </div><p> <a class="anchor" name="g8911bb699a5f03ad3c36d579ca0eca23"></a><!-- doxytag: member="apr_hooks.h::apr_hook_global_pool" ref="g8911bb699a5f03ad3c36d579ca0eca23" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">apr_pool_t* <a class="el" href="group___a_p_r___util___hook.html#g8911bb699a5f03ad3c36d579ca0eca23">apr_hook_global_pool</a> </td> </tr> </table> </div> <div class="memdoc"> <p> The global pool used to allocate any memory needed by the hooks. </div> </div><p> <hr size="1"><address style="text-align: right;"><small>Generated on Thu Jan 24 02:22:55 2008 for Apache Portable Runtime Utility Library by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.4 </small></address> </body> </html>