Modules | |
| 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. |
1.2.14 written by Dimitri van Heesch,
© 1997-2002