Modules | |
group | Optional Hook Functions |
Defines | |
#define | APR_IMPLEMENT_HOOK_GET_PROTO(ns, link, name) link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void) |
#define | APR_DECLARE_EXTERNAL_HOOK(ns, link, ret, name, args) |
#define | APR_HOOK_STRUCT(members) static struct { members } _hooks; |
#define | APR_HOOK_LINK(name) apr_array_header_t *link_##name; |
#define | APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns, link, name) |
#define | APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ns, link, name, args_decl, args_use) |
#define | APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ns, link, ret, name, args_decl, args_use, ok, decline) |
#define | APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ns, link, ret, name, args_decl, args_use, decline) |
#define | APR_HOOK_REALLY_FIRST (-10) |
#define | APR_HOOK_FIRST 0 |
#define | APR_HOOK_MIDDLE 10 |
#define | APR_HOOK_LAST 20 |
#define | APR_HOOK_REALLY_LAST 30 |
Functions | |
void | apr_hook_sort_register (const char *szHookName, apr_array_header_t **aHooks) |
void | apr_hook_sort_all (void) |
void | apr_sort_hooks (void) |
void | apr_hook_debug_show (const char *szName, const char *const *aszPre, const char *const *aszSucc) |
void | apr_show_hook (const char *szName, const char *const *aszPre, const char *const *aszSucc) |
void | apr_hook_deregister_all (void) |
Variables | |
apr_pool_t * | apr_hook_global_pool |
apr_pool_t * | apr_global_hook_pool |
int | apr_hook_debug_enabled |
int | apr_debug_module_hooks |
const char * | apr_hook_debug_current |
const char * | apr_current_hooking_module |
|
Value: typedef ret ns##_HOOK_##name##_t args; \ link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf, \ const char * const *aszPre, \ const char * const *aszSucc, int nOrder); \ link##_DECLARE(ret) ns##_run_##name args; \ APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name); \ typedef struct ns##_LINK_##name##_t \ { \ ns##_HOOK_##name##_t *pFunc; \ const char *szName; \ const char * const *aszPredecessors; \ const char * const *aszSuccessors; \ int nOrder; \ } ns##_LINK_##name##_t; |
|
run this hook first |
|
run this hook after every other hook which is defined |
|
macro to link the hook structure |
|
run this hook somewhere |
|
run this hook first, before ANYTHING |
|
run this hook last, after EVERYTHING |
|
macro to declare the hook structure |
|
Value: link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf,const char * const *aszPre, \ const char * const *aszSucc,int nOrder) \ { \ ns##_LINK_##name##_t *pHook; \ if(!_hooks.link_##name) \ { \ _hooks.link_##name=apr_array_make(apr_hook_global_pool,1,sizeof(ns##_LINK_##name##_t)); \ apr_hook_sort_register(#name,&_hooks.link_##name); \ } \ pHook=apr_array_push(_hooks.link_##name); \ pHook->pFunc=pf; \ pHook->aszPredecessors=aszPre; \ pHook->aszSuccessors=aszSucc; \ pHook->nOrder=nOrder; \ pHook->szName=apr_hook_debug_current; \ if(apr_hook_debug_enabled) \ apr_hook_debug_show(#name,aszPre,aszSucc); \ } \ APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \ { \ return _hooks.link_##name; \ } |
|
Value: APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \ link##_DECLARE(ret) ns##_run_##name args_decl \ { \ ns##_LINK_##name##_t *pHook; \ int n; \ ret rv; \ \ if(!_hooks.link_##name) \ return ok; \ \ pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ { \ rv=pHook[n].pFunc args_use; \ \ if(rv != ok && rv != decline) \ return rv; \ } \ return ok; \ }
|
|
Value: APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \ link##_DECLARE(ret) ns##_run_##name args_decl \ { \ ns##_LINK_##name##_t *pHook; \ int n; \ ret rv; \ \ if(!_hooks.link_##name) \ return decline; \ \ pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ { \ rv=pHook[n].pFunc args_use; \ \ if(rv != decline) \ return rv; \ } \ return decline; \ }
|
|
Value: APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \ link##_DECLARE(void) ns##_run_##name args_decl \ { \ ns##_LINK_##name##_t *pHook; \ int n; \ \ if(!_hooks.link_##name) \ return; \ \ pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ pHook[n].pFunc args_use; \ }
|
|
macro to return the prototype of the hook function |
|
Print all of the information about the current hook. This is used for debugging purposes.
|
|
Remove all currently registered functions. |
|
Sort all of the registerd functions for a given hook |
|
Register a hook function to be sorted
|
|
|
|
|
|
|
|
|
|
|
|
The name of the module that is currently registering a function |
|
A global variable to determine if debugging information about the hooks functions should be printed |
|
The global pool used to allocate any memory needed by the hooks. |