Hook Functions
[APR Utility Functions]


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_hook_debug_show (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
int apr_hook_debug_enabled
const char * apr_hook_debug_current

Define Documentation

#define APR_DECLARE_EXTERNAL_HOOK ( ns,
link,
ret,
name,
args   ) 

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;
macro to declare the hook correctly

#define APR_HOOK_FIRST   0

run this hook first

#define APR_HOOK_LAST   20

run this hook after every other hook which is defined

#define APR_HOOK_LINK ( name   )     apr_array_header_t *link_##name;

macro to link the hook structure

#define APR_HOOK_MIDDLE   10

run this hook somewhere

#define APR_HOOK_REALLY_FIRST   (-10)

run this hook first, before ANYTHING

#define APR_HOOK_REALLY_LAST   30

run this hook last, after EVERYTHING

#define APR_HOOK_STRUCT ( members   )     static struct { members } _hooks;

macro to declare the hook structure

#define APR_IMPLEMENT_EXTERNAL_HOOK_BASE ( ns,
link,
name   ) 

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; \
    }
macro to implement the hook

#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL ( ns,
link,
ret,
name,
args_decl,
args_use,
ok,
decline   ) 

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; \
    }
Implement a hook that runs until one of the functions returns something other than OK or DECLINE
Parameters:
ns The namespace prefix of the hook functions
link The linkage declaration prefix of the hook
ret Type to return
name The name of the hook
args_decl The declaration of the arguments for the hook
args_use The names for the arguments for the hook
ok Success value
decline Decline value
Note:
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.

#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST ( ns,
link,
ret,
name,
args_decl,
args_use,
decline   ) 

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; \
    }
Implement a hook that runs until the first function returns something other than the value of decline
Parameters:
ns The namespace prefix of the hook functions
link The linkage declaration prefix of the hook
name The name of the hook
ret Type to return
args_decl The declaration of the arguments for the hook
args_use The names for the arguments for the hook
decline Decline value
Note:
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.

#define APR_IMPLEMENT_EXTERNAL_HOOK_VOID ( ns,
link,
name,
args_decl,
args_use   ) 

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; \
    }
Implement a hook that has no return code, and therefore runs all of the registered functions
Parameters:
ns The namespace prefix of the hook functions
link The linkage declaration prefix of the hook
name The name of the hook
args_decl The declaration of the arguments for the hook
args_use The names for the arguments for the hook
Note:
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.

#define APR_IMPLEMENT_HOOK_GET_PROTO ( ns,
link,
name   )     link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void)

macro to return the prototype of the hook function


Function Documentation

void apr_hook_debug_show ( const char *  szName,
const char *const *  aszPre,
const char *const *  aszSucc 
)

Print all of the information about the current hook. This is used for debugging purposes.

Parameters:
szName The name of the hook
aszPre All of the functions in the predecessor array
aszSucc All of the functions in the successor array

void apr_hook_deregister_all ( void   ) 

Remove all currently registered functions.

void apr_hook_sort_all ( void   ) 

Sort all of the registerd functions for a given hook

void apr_hook_sort_register ( const char *  szHookName,
apr_array_header_t **  aHooks 
)

Register a hook function to be sorted

Parameters:
szHookName The name of the Hook the function is registered for
aHooks The array which stores all of the functions for this hook


Variable Documentation

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

apr_pool_t* apr_hook_global_pool

The global pool used to allocate any memory needed by the hooks.


Generated on Sat Aug 16 19:14:10 2008 for Apache Portable Runtime Utility Library by  doxygen 1.5.6