From: Jim Jagielski Date: Mon, 9 May 2011 15:36:22 +0000 (+0000) Subject: Start of ap_hooks.h setup X-Git-Tag: 2.3.12~11 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=901d35fe8067fa13a0ca902a02ae748a18ea553c;p=apache Start of ap_hooks.h setup git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1101066 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/configure.in b/configure.in index 417ab25397..9a565550b0 100644 --- a/configure.in +++ b/configure.in @@ -510,6 +510,12 @@ esac APACHE_SUBST(DTRACE) +AC_ARG_ENABLE(hook-probes,APACHE_HELP_STRING(--enable-hook-probes,Enable APR hook probes), +[ + AC_DEFINE(APR_HOOK_PROBES_ENABLED, 1, + [Enable the APR hook probes capability, reading from ap_hook_probes.h]) +])dnl + AC_ARG_ENABLE(exception-hook,APACHE_HELP_STRING(--enable-exception-hook,Enable fatal exception hook), [ AC_DEFINE(AP_ENABLE_EXCEPTION_HOOK, 1, diff --git a/include/ap_config.h b/include/ap_config.h index 1eba92532c..0f67c3f07f 100644 --- a/include/ap_config.h +++ b/include/ap_config.h @@ -22,13 +22,11 @@ #ifndef AP_CONFIG_H #define AP_CONFIG_H -#include "apr.h" -#include "apr_hooks.h" -#include "apr_optional_hooks.h" +#include "ap_hooks.h" -/* Although this file doesn't declare any hooks, declare the hook group here */ +/* Although this file doesn't declare any hooks, declare the exports group here */ /** - * @defgroup hooks Apache Hooks + * @defgroup exports Apache exports * @ingroup APACHE_CORE */ @@ -135,100 +133,6 @@ #define AP_MODULE_DECLARE_DATA __declspec(dllexport) #endif -/** - * Declare a hook function - * @param ret The return type of the hook - * @param name The hook's name (as a literal) - * @param args The arguments the hook function takes, in brackets. - */ -#define AP_DECLARE_HOOK(ret,name,args) \ - APR_DECLARE_EXTERNAL_HOOK(ap,AP,ret,name,args) - -/** @internal */ -#define AP_IMPLEMENT_HOOK_BASE(name) \ - APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ap,AP,name) - -/** - * Implement an Apache core hook that has no return code, and - * therefore runs all of the registered functions. The implementation - * is called ap_run_name. - * - * @param name The name of the hook - * @param args_decl The declaration of the arguments for the hook, for example - * "(int x,void *y)" - * @param args_use The arguments for the hook as used in a call, for example - * "(x,y)" - * @note If IMPLEMENTing a hook that is not linked into the Apache core, - * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_VOID. - */ -#define AP_IMPLEMENT_HOOK_VOID(name,args_decl,args_use) \ - APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ap,AP,name,args_decl,args_use) - -/** - * Implement an Apache core hook that runs until one of the functions - * returns something other than ok or decline. That return value is - * then returned from the hook runner. If the hooks run to completion, - * then ok is returned. Note that if no hook runs it would probably be - * more correct to return decline, but this currently does not do - * so. The implementation is called ap_run_name. - * - * @param ret The return type of the hook (and the hook runner) - * @param name The name of the hook - * @param args_decl The declaration of the arguments for the hook, for example - * "(int x,void *y)" - * @param args_use The arguments for the hook as used in a call, for example - * "(x,y)" - * @param ok The "ok" return value - * @param decline The "decline" return value - * @return ok, decline or an error. - * @note If IMPLEMENTing a hook that is not linked into the Apache core, - * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL. - */ -#define AP_IMPLEMENT_HOOK_RUN_ALL(ret,name,args_decl,args_use,ok,decline) \ - APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ap,AP,ret,name,args_decl, \ - args_use,ok,decline) - -/** - * Implement a hook that runs until a function returns something other than - * decline. If all functions return decline, the hook runner returns decline. - * The implementation is called ap_run_name. - * - * @param ret The return type of the hook (and the hook runner) - * @param name The name of the hook - * @param args_decl The declaration of the arguments for the hook, for example - * "(int x,void *y)" - * @param args_use The arguments for the hook as used in a call, for example - * "(x,y)" - * @param decline The "decline" return value - * @return decline or an error. - * @note If IMPLEMENTing a hook that is not linked into the Apache core - * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST. - */ -#define AP_IMPLEMENT_HOOK_RUN_FIRST(ret,name,args_decl,args_use,decline) \ - APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ap,AP,ret,name,args_decl, \ - args_use,decline) - -/* Note that the other optional hook implementations are straightforward but - * have not yet been needed - */ - -/** - * Implement an optional hook. This is exactly the same as a standard hook - * implementation, except the hook is optional. - * @see AP_IMPLEMENT_HOOK_RUN_ALL - */ -#define AP_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ret,name,args_decl,args_use,ok, \ - decline) \ - APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ap,AP,ret,name,args_decl, \ - args_use,ok,decline) - -/** - * Hook an optional hook. Unlike static hooks, this uses a macro instead of a - * function. - */ -#define AP_OPTIONAL_HOOK(name,fn,pre,succ,order) \ - APR_OPTIONAL_HOOK(ap,name,fn,pre,succ,order) - #include "os.h" #if (!defined(WIN32) && !defined(NETWARE)) || defined(__MINGW32__) #include "ap_config_auto.h" diff --git a/include/ap_hooks.h b/include/ap_hooks.h new file mode 100644 index 0000000000..f3ab51a933 --- /dev/null +++ b/include/ap_hooks.h @@ -0,0 +1,158 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file ap_hooks.h + * @brief ap hook functions and macros + */ + +#ifndef AP_HOOKS_H +#define AP_HOOKS_H + +/* Although this file doesn't declare any hooks, declare the hook group here */ +/** + * @defgroup hooks Apache Hooks + * @ingroup APACHE_CORE + */ + +#ifdef APR_HOOK_PROBES_ENABLED +#include "ap_hook_probes.h" +#endif + +#include "apr.h" +#include "apr_hooks.h" +#include "apr_optional_hooks.h" + +#ifdef DOXYGEN +/* define these just so doxygen documents them */ + +/** + * AP_DECLARE_STATIC is defined when including Apache's Core headers, + * to provide static linkage when the dynamic library may be unavailable. + * + * @see AP_DECLARE_EXPORT + * + * AP_DECLARE_STATIC and AP_DECLARE_EXPORT are left undefined when + * including Apache's Core headers, to import and link the symbols from the + * dynamic Apache Core library and assure appropriate indirection and calling + * conventions at compile time. + */ +# define AP_DECLARE_STATIC +/** + * AP_DECLARE_EXPORT is defined when building the Apache Core dynamic + * library, so that all public symbols are exported. + * + * @see AP_DECLARE_STATIC + */ +# define AP_DECLARE_EXPORT + +#endif /* def DOXYGEN */ + +/** + * Declare a hook function + * @param ret The return type of the hook + * @param name The hook's name (as a literal) + * @param args The arguments the hook function takes, in brackets. + */ +#define AP_DECLARE_HOOK(ret,name,args) \ + APR_DECLARE_EXTERNAL_HOOK(ap,AP,ret,name,args) + +/** @internal */ +#define AP_IMPLEMENT_HOOK_BASE(name) \ + APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ap,AP,name) + +/** + * Implement an Apache core hook that has no return code, and + * therefore runs all of the registered functions. The implementation + * is called ap_run_name. + * + * @param name The name of the hook + * @param args_decl The declaration of the arguments for the hook, for example + * "(int x,void *y)" + * @param args_use The arguments for the hook as used in a call, for example + * "(x,y)" + * @note If IMPLEMENTing a hook that is not linked into the Apache core, + * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_VOID. + */ +#define AP_IMPLEMENT_HOOK_VOID(name,args_decl,args_use) \ + APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ap,AP,name,args_decl,args_use) + +/** + * Implement an Apache core hook that runs until one of the functions + * returns something other than ok or decline. That return value is + * then returned from the hook runner. If the hooks run to completion, + * then ok is returned. Note that if no hook runs it would probably be + * more correct to return decline, but this currently does not do + * so. The implementation is called ap_run_name. + * + * @param ret The return type of the hook (and the hook runner) + * @param name The name of the hook + * @param args_decl The declaration of the arguments for the hook, for example + * "(int x,void *y)" + * @param args_use The arguments for the hook as used in a call, for example + * "(x,y)" + * @param ok The "ok" return value + * @param decline The "decline" return value + * @return ok, decline or an error. + * @note If IMPLEMENTing a hook that is not linked into the Apache core, + * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL. + */ +#define AP_IMPLEMENT_HOOK_RUN_ALL(ret,name,args_decl,args_use,ok,decline) \ + APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ap,AP,ret,name,args_decl, \ + args_use,ok,decline) + +/** + * Implement a hook that runs until a function returns something other than + * decline. If all functions return decline, the hook runner returns decline. + * The implementation is called ap_run_name. + * + * @param ret The return type of the hook (and the hook runner) + * @param name The name of the hook + * @param args_decl The declaration of the arguments for the hook, for example + * "(int x,void *y)" + * @param args_use The arguments for the hook as used in a call, for example + * "(x,y)" + * @param decline The "decline" return value + * @return decline or an error. + * @note If IMPLEMENTing a hook that is not linked into the Apache core + * (e.g. within a dso) see APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST. + */ +#define AP_IMPLEMENT_HOOK_RUN_FIRST(ret,name,args_decl,args_use,decline) \ + APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ap,AP,ret,name,args_decl, \ + args_use,decline) + +/* Note that the other optional hook implementations are straightforward but + * have not yet been needed + */ + +/** + * Implement an optional hook. This is exactly the same as a standard hook + * implementation, except the hook is optional. + * @see AP_IMPLEMENT_HOOK_RUN_ALL + */ +#define AP_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ret,name,args_decl,args_use,ok, \ + decline) \ + APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ap,AP,ret,name,args_decl, \ + args_use,ok,decline) + +/** + * Hook an optional hook. Unlike static hooks, this uses a macro instead of a + * function. + */ +#define AP_OPTIONAL_HOOK(name,fn,pre,succ,order) \ + APR_OPTIONAL_HOOK(ap,name,fn,pre,succ,order) + +#endif /* AP_HOOKS_H */