From fe39ffb8b90ae4e002ed73fe98617cd590abb467 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 08:33:50 +0200 Subject: Adding upstream version 2.4.56. Signed-off-by: Daniel Baumann --- modules/test/.indent.pro | 54 ++++++ modules/test/Makefile.in | 3 + modules/test/NWGNUmakefile | 257 +++++++++++++++++++++++++++ modules/test/NWGNUoptfnexport | 256 ++++++++++++++++++++++++++ modules/test/NWGNUoptfnimport | 256 ++++++++++++++++++++++++++ modules/test/NWGNUopthookexport | 256 ++++++++++++++++++++++++++ modules/test/NWGNUopthookimport | 256 ++++++++++++++++++++++++++ modules/test/README | 1 + modules/test/config.m4 | 13 ++ modules/test/mod_dialup.c | 306 ++++++++++++++++++++++++++++++++ modules/test/mod_optional_fn_export.c | 48 +++++ modules/test/mod_optional_fn_export.h | 19 ++ modules/test/mod_optional_fn_import.c | 55 ++++++ modules/test/mod_optional_hook_export.c | 44 +++++ modules/test/mod_optional_hook_export.h | 24 +++ modules/test/mod_optional_hook_import.c | 45 +++++ 16 files changed, 1893 insertions(+) create mode 100644 modules/test/.indent.pro create mode 100644 modules/test/Makefile.in create mode 100644 modules/test/NWGNUmakefile create mode 100644 modules/test/NWGNUoptfnexport create mode 100644 modules/test/NWGNUoptfnimport create mode 100644 modules/test/NWGNUopthookexport create mode 100644 modules/test/NWGNUopthookimport create mode 100644 modules/test/README create mode 100644 modules/test/config.m4 create mode 100644 modules/test/mod_dialup.c create mode 100644 modules/test/mod_optional_fn_export.c create mode 100644 modules/test/mod_optional_fn_export.h create mode 100644 modules/test/mod_optional_fn_import.c create mode 100644 modules/test/mod_optional_hook_export.c create mode 100644 modules/test/mod_optional_hook_export.h create mode 100644 modules/test/mod_optional_hook_import.c (limited to 'modules/test') diff --git a/modules/test/.indent.pro b/modules/test/.indent.pro new file mode 100644 index 0000000..a9fbe9f --- /dev/null +++ b/modules/test/.indent.pro @@ -0,0 +1,54 @@ +-i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1 +-TBUFF +-TFILE +-TTRANS +-TUINT4 +-T_trans +-Tallow_options_t +-Tapache_sfio +-Tarray_header +-Tbool_int +-Tbuf_area +-Tbuff_struct +-Tbuffy +-Tcmd_how +-Tcmd_parms +-Tcommand_rec +-Tcommand_struct +-Tconn_rec +-Tcore_dir_config +-Tcore_server_config +-Tdir_maker_func +-Tevent +-Tglobals_s +-Thandler_func +-Thandler_rec +-Tjoblist_s +-Tlisten_rec +-Tmerger_func +-Tmode_t +-Tmodule +-Tmodule_struct +-Tmutex +-Tn_long +-Tother_child_rec +-Toverrides_t +-Tparent_score +-Tpid_t +-Tpiped_log +-Tpool +-Trequest_rec +-Trequire_line +-Trlim_t +-Tscoreboard +-Tsemaphore +-Tserver_addr_rec +-Tserver_rec +-Tserver_rec_chain +-Tshort_score +-Ttable +-Ttable_entry +-Tthread +-Tu_wide_int +-Tvtime_t +-Twide_int diff --git a/modules/test/Makefile.in b/modules/test/Makefile.in new file mode 100644 index 0000000..7c5c149 --- /dev/null +++ b/modules/test/Makefile.in @@ -0,0 +1,3 @@ +# a modules Makefile has no explicit targets -- they will be defined by +# whatever modules are enabled. just grab special.mk to deal with this. +include $(top_srcdir)/build/special.mk diff --git a/modules/test/NWGNUmakefile b/modules/test/NWGNUmakefile new file mode 100644 index 0000000..006a519 --- /dev/null +++ b/modules/test/NWGNUmakefile @@ -0,0 +1,257 @@ +# +# Declare the sub-directories to be built here +# + +SUBDIRS = \ + $(EOLIST) + +# +# Get the 'head' of the build environment. This includes default targets and +# paths to tools +# + +include $(AP_WORK)/build/NWGNUhead.inc + +# +# build this level's files + +# +# Make sure all needed macro's are defined +# + +# +# These directories will be at the beginning of the include list, followed by +# INCDIRS +# +XINCDIRS += \ + $(EOLIST) + +# +# These flags will come after CFLAGS +# +XCFLAGS += \ + $(EOLIST) + +# +# These defines will come after DEFINES +# +XDEFINES += \ + $(EOLIST) + +# +# These flags will be added to the link.opt file +# +XLFLAGS += \ + $(EOLIST) + +# +# These values will be appended to the correct variables based on the value of +# RELEASE +# +ifeq "$(RELEASE)" "debug" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "noopt" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "release" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +# +# These are used by the link target if an NLM is being generated +# This is used by the link 'name' directive to name the nlm. If left blank +# TARGET_nlm (see below) will be used. +# +NLM_NAME = + +# +# This is used by the link '-desc ' directive. +# If left blank, NLM_NAME will be used. +# +NLM_DESCRIPTION = + +# +# This is used by the '-threadname' directive. If left blank, +# NLM_NAME Thread will be used. +# +NLM_THREAD_NAME = + +# +# If this is specified, it will override VERSION value in +# $(AP_WORK)/build/NWGNUenvironment.inc +# +NLM_VERSION = + +# +# If this is specified, it will override the default of 64K +# +NLM_STACK_SIZE = + + +# +# If this is specified it will be used by the link '-entry' directive +# +NLM_ENTRY_SYM = + +# +# If this is specified it will be used by the link '-exit' directive +# +NLM_EXIT_SYM = + +# +# If this is specified it will be used by the link '-check' directive +# +NLM_CHECK_SYM = + +# +# If these are specified it will be used by the link '-flags' directive +# +NLM_FLAGS = + +# +# If this is specified it will be linked in with the XDCData option in the def +# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled +# by setting APACHE_UNIPROC in the environment +# +XDCDATA = + +# +# If there is an NLM target, put it here +# +# If there is only one element to build it needs to be included twice +# in the below target list. +# Normally if there is only one element to be built within a +# directory, the makefile for the single element would be called NWGNUmakefile. +# But if there are multiples, the parent NWGNUmakefile must reference more +# than one submakefile. Because the experimental directory might vary in the +# number of submakefiles, but for the moment only contains one, we reference +# it twice to allow it parent NWGNUmakefile to work properly. If another +# submakefile is added, the extra reference to the first NLM should be removed. +TARGET_nlm = \ + $(OBJDIR)/optfnexport.nlm \ + $(OBJDIR)/optfnimport.nlm \ + $(OBJDIR)/opthookexport.nlm \ + $(OBJDIR)/opthookimport.nlm \ + $(EOLIST) + +# +# If there is an LIB target, put it here +# +TARGET_lib = \ + $(EOLIST) + +# +# These are the OBJ files needed to create the NLM target above. +# Paths must all use the '/' character +# +FILES_nlm_objs = \ + $(EOLIST) + +# +# These are the LIB files needed to create the NLM target above. +# These will be added as a library command in the link.opt file. +# +FILES_nlm_libs = \ + $(EOLIST) + +# +# These are the modules that the above NLM target depends on to load. +# These will be added as a module command in the link.opt file. +# +FILES_nlm_modules = \ + $(EOLIST) + +# +# If the nlm has a msg file, put it's path here +# +FILE_nlm_msg = + +# +# If the nlm has a hlp file put it's path here +# +FILE_nlm_hlp = + +# +# If this is specified, it will override $(NWOS)\copyright.txt. +# +FILE_nlm_copyright = + +# +# Any additional imports go here +# +FILES_nlm_Ximports = \ + $(EOLIST) + +# +# Any symbols exported to here +# +FILES_nlm_exports = \ + $(EOLIST) + +# +# These are the OBJ files needed to create the LIB target above. +# Paths must all use the '/' character +# +FILES_lib_objs = \ + $(EOLIST) + +# +# implement targets and dependancies (leave this section alone) +# + +libs :: $(OBJDIR) $(TARGET_lib) + +nlms :: libs $(TARGET_nlm) + +# +# Updated this target to create necessary directories and copy files to the +# correct place. (See $(AP_WORK)/build/NWGNUhead.inc for examples) +# +install :: nlms FORCE + $(call COPY,$(OBJDIR)/*.nlm, $(INSTALLBASE)/modules/) + +# +# Any specialized rules here +# + +# +# Include the 'tail' makefile that has targets that depend on variables defined +# in this makefile +# + +include $(APBUILD)/NWGNUtail.inc + + diff --git a/modules/test/NWGNUoptfnexport b/modules/test/NWGNUoptfnexport new file mode 100644 index 0000000..449d26e --- /dev/null +++ b/modules/test/NWGNUoptfnexport @@ -0,0 +1,256 @@ +# +# Declare the sub-directories to be built here +# + +SUBDIRS = \ + $(EOLIST) + +# +# Get the 'head' of the build environment. This includes default targets and +# paths to tools +# + +include $(AP_WORK)/build/NWGNUhead.inc + +# +# build this level's files + +# +# Make sure all needed macro's are defined +# + +# +# These directories will be at the beginning of the include list, followed by +# INCDIRS +# +XINCDIRS += \ + $(APR)/include \ + $(APRUTIL)/include \ + $(AP_WORK)/include \ + $(NWOS) \ + $(EOLIST) + +# +# These flags will come after CFLAGS +# +XCFLAGS += \ + $(EOLIST) + +# +# These defines will come after DEFINES +# +XDEFINES += \ + $(EOLIST) + +# +# These flags will be added to the link.opt file +# +XLFLAGS += \ + $(EOLIST) + +# +# These values will be appended to the correct variables based on the value of +# RELEASE +# +ifeq "$(RELEASE)" "debug" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "noopt" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "release" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +# +# These are used by the link target if an NLM is being generated +# This is used by the link 'name' directive to name the nlm. If left blank +# TARGET_nlm (see below) will be used. +# +NLM_NAME = optfnexport + +# +# This is used by the link '-desc ' directive. +# If left blank, NLM_NAME will be used. +# +NLM_DESCRIPTION = Apache $(VERSION_STR) OptionalFunction Export Module + +# +# This is used by the '-threadname' directive. If left blank, +# NLM_NAME Thread will be used. +# +NLM_THREAD_NAME = $(NLM_NAME) Module + +# +# If this is specified, it will override VERSION value in +# $(AP_WORK)/build/NWGNUenvironment.inc +# +NLM_VERSION = + +# +# If this is specified, it will override the default of 64K +# +NLM_STACK_SIZE = 8192 + + +# +# If this is specified it will be used by the link '-entry' directive +# +NLM_ENTRY_SYM = + +# +# If this is specified it will be used by the link '-exit' directive +# +NLM_EXIT_SYM = + +# +# If this is specified it will be used by the link '-check' directive +# +NLM_CHECK_SYM = + +# +# If these are specified it will be used by the link '-flags' directive +# +NLM_FLAGS = + +# +# If this is specified it will be linked in with the XDCData option in the def +# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled +# by setting APACHE_UNIPROC in the environment +# +XDCDATA = + +# +# If there is an NLM target, put it here +# +TARGET_nlm = \ + $(OBJDIR)/$(NLM_NAME).nlm \ + $(EOLIST) + +# +# If there is an LIB target, put it here +# +TARGET_lib = \ + $(EOLIST) + +# +# These are the OBJ files needed to create the NLM target above. +# Paths must all use the '/' character +# +FILES_nlm_objs = \ + $(OBJDIR)/mod_optional_fn_export.o \ + $(EOLIST) + +# +# These are the LIB files needed to create the NLM target above. +# These will be added as a library command in the link.opt file. +# +FILES_nlm_libs = \ + $(PRELUDE) \ + $(EOLIST) + +# +# These are the modules that the above NLM target depends on to load. +# These will be added as a module command in the link.opt file. +# +FILES_nlm_modules = \ + aprlib \ + libc \ + $(EOLIST) + +# +# If the nlm has a msg file, put it's path here +# +FILE_nlm_msg = + +# +# If the nlm has a hlp file put it's path here +# +FILE_nlm_hlp = + +# +# If this is specified, it will override $(NWOS)\copyright.txt. +# +FILE_nlm_copyright = + +# +# Any additional imports go here +# +FILES_nlm_Ximports = \ + @aprlib.imp \ + @httpd.imp \ + @libc.imp \ + $(EOLIST) + +# +# Any symbols exported to here +# +FILES_nlm_exports = \ + optional_fn_export_module \ + $(EOLIST) + +# +# These are the OBJ files needed to create the LIB target above. +# Paths must all use the '/' character +# +FILES_lib_objs = \ + $(EOLIST) + +# +# implement targets and dependancies (leave this section alone) +# + +libs :: $(OBJDIR) $(TARGET_lib) + +nlms :: libs $(TARGET_nlm) + +# +# Updated this target to create necessary directories and copy files to the +# correct place. (See $(AP_WORK)/build/NWGNUhead.inc for examples) +# +install :: nlms FORCE + +# +# Any specialized rules here +# + +# +# Include the 'tail' makefile that has targets that depend on variables defined +# in this makefile +# + +include $(APBUILD)/NWGNUtail.inc + + diff --git a/modules/test/NWGNUoptfnimport b/modules/test/NWGNUoptfnimport new file mode 100644 index 0000000..cd09d39 --- /dev/null +++ b/modules/test/NWGNUoptfnimport @@ -0,0 +1,256 @@ +# +# Declare the sub-directories to be built here +# + +SUBDIRS = \ + $(EOLIST) + +# +# Get the 'head' of the build environment. This includes default targets and +# paths to tools +# + +include $(AP_WORK)/build/NWGNUhead.inc + +# +# build this level's files + +# +# Make sure all needed macro's are defined +# + +# +# These directories will be at the beginning of the include list, followed by +# INCDIRS +# +XINCDIRS += \ + $(APR)/include \ + $(APRUTIL)/include \ + $(AP_WORK)/include \ + $(NWOS) \ + $(EOLIST) + +# +# These flags will come after CFLAGS +# +XCFLAGS += \ + $(EOLIST) + +# +# These defines will come after DEFINES +# +XDEFINES += \ + $(EOLIST) + +# +# These flags will be added to the link.opt file +# +XLFLAGS += \ + $(EOLIST) + +# +# These values will be appended to the correct variables based on the value of +# RELEASE +# +ifeq "$(RELEASE)" "debug" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "noopt" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "release" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +# +# These are used by the link target if an NLM is being generated +# This is used by the link 'name' directive to name the nlm. If left blank +# TARGET_nlm (see below) will be used. +# +NLM_NAME = optfnimport + +# +# This is used by the link '-desc ' directive. +# If left blank, NLM_NAME will be used. +# +NLM_DESCRIPTION = Apache $(VERSION_STR) OptionalFunction Import Module + +# +# This is used by the '-threadname' directive. If left blank, +# NLM_NAME Thread will be used. +# +NLM_THREAD_NAME = $(NLM_NAME) Module + +# +# If this is specified, it will override VERSION value in +# $(AP_WORK)/build/NWGNUenvironment.inc +# +NLM_VERSION = + +# +# If this is specified, it will override the default of 64K +# +NLM_STACK_SIZE = 8192 + + +# +# If this is specified it will be used by the link '-entry' directive +# +NLM_ENTRY_SYM = + +# +# If this is specified it will be used by the link '-exit' directive +# +NLM_EXIT_SYM = + +# +# If this is specified it will be used by the link '-check' directive +# +NLM_CHECK_SYM = + +# +# If these are specified it will be used by the link '-flags' directive +# +NLM_FLAGS = + +# +# If this is specified it will be linked in with the XDCData option in the def +# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled +# by setting APACHE_UNIPROC in the environment +# +XDCDATA = + +# +# If there is an NLM target, put it here +# +TARGET_nlm = \ + $(OBJDIR)/$(NLM_NAME).nlm \ + $(EOLIST) + +# +# If there is an LIB target, put it here +# +TARGET_lib = \ + $(EOLIST) + +# +# These are the OBJ files needed to create the NLM target above. +# Paths must all use the '/' character +# +FILES_nlm_objs = \ + $(OBJDIR)/mod_optional_fn_import.o \ + $(EOLIST) + +# +# These are the LIB files needed to create the NLM target above. +# These will be added as a library command in the link.opt file. +# +FILES_nlm_libs = \ + $(PRELUDE) \ + $(EOLIST) + +# +# These are the modules that the above NLM target depends on to load. +# These will be added as a module command in the link.opt file. +# +FILES_nlm_modules = \ + aprlib \ + libc \ + $(EOLIST) + +# +# If the nlm has a msg file, put it's path here +# +FILE_nlm_msg = + +# +# If the nlm has a hlp file put it's path here +# +FILE_nlm_hlp = + +# +# If this is specified, it will override $(NWOS)\copyright.txt. +# +FILE_nlm_copyright = + +# +# Any additional imports go here +# +FILES_nlm_Ximports = \ + @aprlib.imp \ + @httpd.imp \ + @libc.imp \ + $(EOLIST) + +# +# Any symbols exported to here +# +FILES_nlm_exports = \ + optional_fn_import_module \ + $(EOLIST) + +# +# These are the OBJ files needed to create the LIB target above. +# Paths must all use the '/' character +# +FILES_lib_objs = \ + $(EOLIST) + +# +# implement targets and dependancies (leave this section alone) +# + +libs :: $(OBJDIR) $(TARGET_lib) + +nlms :: libs $(TARGET_nlm) + +# +# Updated this target to create necessary directories and copy files to the +# correct place. (See $(AP_WORK)/build/NWGNUhead.inc for examples) +# +install :: nlms FORCE + +# +# Any specialized rules here +# + +# +# Include the 'tail' makefile that has targets that depend on variables defined +# in this makefile +# + +include $(APBUILD)/NWGNUtail.inc + + diff --git a/modules/test/NWGNUopthookexport b/modules/test/NWGNUopthookexport new file mode 100644 index 0000000..0472386 --- /dev/null +++ b/modules/test/NWGNUopthookexport @@ -0,0 +1,256 @@ +# +# Declare the sub-directories to be built here +# + +SUBDIRS = \ + $(EOLIST) + +# +# Get the 'head' of the build environment. This includes default targets and +# paths to tools +# + +include $(AP_WORK)/build/NWGNUhead.inc + +# +# build this level's files + +# +# Make sure all needed macro's are defined +# + +# +# These directories will be at the beginning of the include list, followed by +# INCDIRS +# +XINCDIRS += \ + $(APR)/include \ + $(APRUTIL)/include \ + $(AP_WORK)/include \ + $(NWOS) \ + $(EOLIST) + +# +# These flags will come after CFLAGS +# +XCFLAGS += \ + $(EOLIST) + +# +# These defines will come after DEFINES +# +XDEFINES += \ + $(EOLIST) + +# +# These flags will be added to the link.opt file +# +XLFLAGS += \ + $(EOLIST) + +# +# These values will be appended to the correct variables based on the value of +# RELEASE +# +ifeq "$(RELEASE)" "debug" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "noopt" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "release" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +# +# These are used by the link target if an NLM is being generated +# This is used by the link 'name' directive to name the nlm. If left blank +# TARGET_nlm (see below) will be used. +# +NLM_NAME = opthookexport + +# +# This is used by the link '-desc ' directive. +# If left blank, NLM_NAME will be used. +# +NLM_DESCRIPTION = Apache $(VERSION_STR) OptionalHook Export Module + +# +# This is used by the '-threadname' directive. If left blank, +# NLM_NAME Thread will be used. +# +NLM_THREAD_NAME = $(NLM_NAME) Module + +# +# If this is specified, it will override VERSION value in +# $(AP_WORK)/build/NWGNUenvironment.inc +# +NLM_VERSION = + +# +# If this is specified, it will override the default of 64K +# +NLM_STACK_SIZE = 8192 + + +# +# If this is specified it will be used by the link '-entry' directive +# +NLM_ENTRY_SYM = + +# +# If this is specified it will be used by the link '-exit' directive +# +NLM_EXIT_SYM = + +# +# If this is specified it will be used by the link '-check' directive +# +NLM_CHECK_SYM = + +# +# If these are specified it will be used by the link '-flags' directive +# +NLM_FLAGS = + +# +# If this is specified it will be linked in with the XDCData option in the def +# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled +# by setting APACHE_UNIPROC in the environment +# +XDCDATA = + +# +# If there is an NLM target, put it here +# +TARGET_nlm = \ + $(OBJDIR)/$(NLM_NAME).nlm \ + $(EOLIST) + +# +# If there is an LIB target, put it here +# +TARGET_lib = \ + $(EOLIST) + +# +# These are the OBJ files needed to create the NLM target above. +# Paths must all use the '/' character +# +FILES_nlm_objs = \ + $(OBJDIR)/mod_optional_hook_export.o \ + $(EOLIST) + +# +# These are the LIB files needed to create the NLM target above. +# These will be added as a library command in the link.opt file. +# +FILES_nlm_libs = \ + $(PRELUDE) \ + $(EOLIST) + +# +# These are the modules that the above NLM target depends on to load. +# These will be added as a module command in the link.opt file. +# +FILES_nlm_modules = \ + aprlib \ + libc \ + $(EOLIST) + +# +# If the nlm has a msg file, put it's path here +# +FILE_nlm_msg = + +# +# If the nlm has a hlp file put it's path here +# +FILE_nlm_hlp = + +# +# If this is specified, it will override $(NWOS)\copyright.txt. +# +FILE_nlm_copyright = + +# +# Any additional imports go here +# +FILES_nlm_Ximports = \ + @aprlib.imp \ + @httpd.imp \ + @libc.imp \ + $(EOLIST) + +# +# Any symbols exported to here +# +FILES_nlm_exports = \ + optional_hook_export_module \ + $(EOLIST) + +# +# These are the OBJ files needed to create the LIB target above. +# Paths must all use the '/' character +# +FILES_lib_objs = \ + $(EOLIST) + +# +# implement targets and dependancies (leave this section alone) +# + +libs :: $(OBJDIR) $(TARGET_lib) + +nlms :: libs $(TARGET_nlm) + +# +# Updated this target to create necessary directories and copy files to the +# correct place. (See $(AP_WORK)/build/NWGNUhead.inc for examples) +# +install :: nlms FORCE + +# +# Any specialized rules here +# + +# +# Include the 'tail' makefile that has targets that depend on variables defined +# in this makefile +# + +include $(APBUILD)/NWGNUtail.inc + + diff --git a/modules/test/NWGNUopthookimport b/modules/test/NWGNUopthookimport new file mode 100644 index 0000000..ef4d3dc --- /dev/null +++ b/modules/test/NWGNUopthookimport @@ -0,0 +1,256 @@ +# +# Declare the sub-directories to be built here +# + +SUBDIRS = \ + $(EOLIST) + +# +# Get the 'head' of the build environment. This includes default targets and +# paths to tools +# + +include $(AP_WORK)/build/NWGNUhead.inc + +# +# build this level's files + +# +# Make sure all needed macro's are defined +# + +# +# These directories will be at the beginning of the include list, followed by +# INCDIRS +# +XINCDIRS += \ + $(APR)/include \ + $(APRUTIL)/include \ + $(AP_WORK)/include \ + $(NWOS) \ + $(EOLIST) + +# +# These flags will come after CFLAGS +# +XCFLAGS += \ + $(EOLIST) + +# +# These defines will come after DEFINES +# +XDEFINES += \ + $(EOLIST) + +# +# These flags will be added to the link.opt file +# +XLFLAGS += \ + $(EOLIST) + +# +# These values will be appended to the correct variables based on the value of +# RELEASE +# +ifeq "$(RELEASE)" "debug" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "noopt" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +ifeq "$(RELEASE)" "release" +XINCDIRS += \ + $(EOLIST) + +XCFLAGS += \ + $(EOLIST) + +XDEFINES += \ + $(EOLIST) + +XLFLAGS += \ + $(EOLIST) +endif + +# +# These are used by the link target if an NLM is being generated +# This is used by the link 'name' directive to name the nlm. If left blank +# TARGET_nlm (see below) will be used. +# +NLM_NAME = opthookimport + +# +# This is used by the link '-desc ' directive. +# If left blank, NLM_NAME will be used. +# +NLM_DESCRIPTION = Apache $(VERSION_STR) OptionalHook Import Module + +# +# This is used by the '-threadname' directive. If left blank, +# NLM_NAME Thread will be used. +# +NLM_THREAD_NAME = $(NLM_NAME) Module + +# +# If this is specified, it will override VERSION value in +# $(AP_WORK)/build/NWGNUenvironment.inc +# +NLM_VERSION = + +# +# If this is specified, it will override the default of 64K +# +NLM_STACK_SIZE = 8192 + + +# +# If this is specified it will be used by the link '-entry' directive +# +NLM_ENTRY_SYM = + +# +# If this is specified it will be used by the link '-exit' directive +# +NLM_EXIT_SYM = + +# +# If this is specified it will be used by the link '-check' directive +# +NLM_CHECK_SYM = + +# +# If these are specified it will be used by the link '-flags' directive +# +NLM_FLAGS = + +# +# If this is specified it will be linked in with the XDCData option in the def +# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled +# by setting APACHE_UNIPROC in the environment +# +XDCDATA = + +# +# If there is an NLM target, put it here +# +TARGET_nlm = \ + $(OBJDIR)/$(NLM_NAME).nlm \ + $(EOLIST) + +# +# If there is an LIB target, put it here +# +TARGET_lib = \ + $(EOLIST) + +# +# These are the OBJ files needed to create the NLM target above. +# Paths must all use the '/' character +# +FILES_nlm_objs = \ + $(OBJDIR)/mod_optional_hook_import.o \ + $(EOLIST) + +# +# These are the LIB files needed to create the NLM target above. +# These will be added as a library command in the link.opt file. +# +FILES_nlm_libs = \ + $(PRELUDE) \ + $(EOLIST) + +# +# These are the modules that the above NLM target depends on to load. +# These will be added as a module command in the link.opt file. +# +FILES_nlm_modules = \ + aprlib \ + libc \ + $(EOLIST) + +# +# If the nlm has a msg file, put it's path here +# +FILE_nlm_msg = + +# +# If the nlm has a hlp file put it's path here +# +FILE_nlm_hlp = + +# +# If this is specified, it will override $(NWOS)\copyright.txt. +# +FILE_nlm_copyright = + +# +# Any additional imports go here +# +FILES_nlm_Ximports = \ + @aprlib.imp \ + @httpd.imp \ + @libc.imp \ + $(EOLIST) + +# +# Any symbols exported to here +# +FILES_nlm_exports = \ + optional_hook_import_module \ + $(EOLIST) + +# +# These are the OBJ files needed to create the LIB target above. +# Paths must all use the '/' character +# +FILES_lib_objs = \ + $(EOLIST) + +# +# implement targets and dependancies (leave this section alone) +# + +libs :: $(OBJDIR) $(TARGET_lib) + +nlms :: libs $(TARGET_nlm) + +# +# Updated this target to create necessary directories and copy files to the +# correct place. (See $(AP_WORK)/build/NWGNUhead.inc for examples) +# +install :: nlms FORCE + +# +# Any specialized rules here +# + +# +# Include the 'tail' makefile that has targets that depend on variables defined +# in this makefile +# + +include $(APBUILD)/NWGNUtail.inc + + diff --git a/modules/test/README b/modules/test/README new file mode 100644 index 0000000..f122368 --- /dev/null +++ b/modules/test/README @@ -0,0 +1 @@ +test modules have moved to httpd-test/perl-framework/c-modules diff --git a/modules/test/config.m4 b/modules/test/config.m4 new file mode 100644 index 0000000..dfcd321 --- /dev/null +++ b/modules/test/config.m4 @@ -0,0 +1,13 @@ + +APACHE_MODPATH_INIT(test) + +APACHE_MODULE(optional_hook_export, example optional hook exporter, , , no) +APACHE_MODULE(optional_hook_import, example optional hook importer, , , no) +APACHE_MODULE(optional_fn_import, example optional function importer, , , no) +APACHE_MODULE(optional_fn_export, example optional function exporter, , , no) + +APACHE_MODULE(dialup, rate limits static files to dialup modem speeds, , , ) + +APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/$modpath_current]) + +APACHE_MODPATH_FINISH diff --git a/modules/test/mod_dialup.c b/modules/test/mod_dialup.c new file mode 100644 index 0000000..d018d9a --- /dev/null +++ b/modules/test/mod_dialup.c @@ -0,0 +1,306 @@ +/* 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. + */ + + + +#include "httpd.h" +#include "http_core.h" + +#include "util_filter.h" +#include "http_log.h" +#include "http_config.h" +#include "http_request.h" +#include "http_protocol.h" + + + +#include "ap_mpm.h" + +module AP_MODULE_DECLARE_DATA dialup_module; + +typedef struct dialup_dcfg_t { + apr_size_t bytes_per_second; +} dialup_dcfg_t; + +typedef struct dialup_baton_t { + apr_size_t bytes_per_second; + request_rec *r; + apr_file_t *fd; + apr_bucket_brigade *bb; + apr_bucket_brigade *tmpbb; +} dialup_baton_t; + +static int +dialup_send_pulse(dialup_baton_t *db) +{ + int status; + apr_off_t len = 0; + apr_size_t bytes_sent = 0; + + while (!APR_BRIGADE_EMPTY(db->bb) && bytes_sent < db->bytes_per_second) { + apr_bucket *e; + + if (db->r->connection->aborted) { + return HTTP_INTERNAL_SERVER_ERROR; + } + + status = apr_brigade_partition(db->bb, db->bytes_per_second, &e); + + if (status != APR_SUCCESS && status != APR_INCOMPLETE) { + /* XXXXXX: Log me. */ + return HTTP_INTERNAL_SERVER_ERROR; + } + + if (e != APR_BRIGADE_SENTINEL(db->bb)) { + apr_bucket *f; + apr_bucket *b = APR_BUCKET_PREV(e); + f = APR_RING_FIRST(&db->bb->list); + APR_RING_UNSPLICE(f, b, link); + APR_RING_SPLICE_HEAD(&db->tmpbb->list, f, b, apr_bucket, link); + } + else { + APR_BRIGADE_CONCAT(db->tmpbb, db->bb); + } + + e = apr_bucket_flush_create(db->r->connection->bucket_alloc); + + APR_BRIGADE_INSERT_TAIL(db->tmpbb, e); + + apr_brigade_length(db->tmpbb, 1, &len); + bytes_sent += len; + status = ap_pass_brigade(db->r->output_filters, db->tmpbb); + + apr_brigade_cleanup(db->tmpbb); + + if (status != APR_SUCCESS) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, status, db->r, APLOGNO(01867) + "dialup: pulse: ap_pass_brigade failed:"); + return AP_FILTER_ERROR; + } + } + + if (APR_BRIGADE_EMPTY(db->bb)) { + return DONE; + } + else { + return SUSPENDED; + } +} + +static void +dialup_callback(void *baton) +{ + int status; + dialup_baton_t *db = (dialup_baton_t *)baton; + + apr_thread_mutex_lock(db->r->invoke_mtx); + + status = dialup_send_pulse(db); + + if (status == SUSPENDED) { + ap_mpm_register_timed_callback(apr_time_from_sec(1), dialup_callback, baton); + } + else if (status == DONE) { + apr_thread_mutex_unlock(db->r->invoke_mtx); + ap_finalize_request_protocol(db->r); + ap_process_request_after_handler(db->r); + return; + } + else { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, db->r, APLOGNO(01868) + "dialup: pulse returned: %d", status); + db->r->status = HTTP_OK; + ap_die(status, db->r); + } + + apr_thread_mutex_unlock(db->r->invoke_mtx); +} + +static int +dialup_handler(request_rec *r) +{ + int status; + apr_status_t rv; + dialup_dcfg_t *dcfg; + core_dir_config *ccfg; + apr_file_t *fd; + dialup_baton_t *db; + apr_bucket *e; + + + /* See core.c, default handler for all of the cases we just decline. */ + if (r->method_number != M_GET || + r->finfo.filetype == APR_NOFILE || + r->finfo.filetype == APR_DIR) { + return DECLINED; + } + + dcfg = ap_get_module_config(r->per_dir_config, + &dialup_module); + + if (dcfg->bytes_per_second == 0) { + return DECLINED; + } + + ccfg = ap_get_core_module_config(r->per_dir_config); + + + rv = apr_file_open(&fd, r->filename, APR_READ | APR_BINARY +#if APR_HAS_SENDFILE + | AP_SENDFILE_ENABLED(ccfg->enable_sendfile) +#endif + , 0, r->pool); + + if (rv) { + return DECLINED; + } + + /* copied from default handler: */ + ap_update_mtime(r, r->finfo.mtime); + ap_set_last_modified(r); + ap_set_etag_fd(r, fd); + ap_set_accept_ranges(r); + ap_set_content_length(r, r->finfo.size); + + status = ap_meets_conditions(r); + if (status != OK) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01869) + "dialup: declined, meets conditions, good luck core handler"); + return DECLINED; + } + + db = apr_palloc(r->pool, sizeof(dialup_baton_t)); + + db->bb = apr_brigade_create(r->pool, r->connection->bucket_alloc); + db->tmpbb = apr_brigade_create(r->pool, r->connection->bucket_alloc); + + e = apr_brigade_insert_file(db->bb, fd, 0, r->finfo.size, r->pool); + +#if APR_HAS_MMAP + if (ccfg->enable_mmap == ENABLE_MMAP_OFF) { + apr_bucket_file_enable_mmap(e, 0); + } +#endif + + + db->bytes_per_second = dcfg->bytes_per_second; + db->r = r; + db->fd = fd; + + e = apr_bucket_eos_create(r->connection->bucket_alloc); + + APR_BRIGADE_INSERT_TAIL(db->bb, e); + + status = dialup_send_pulse(db); + if (status != SUSPENDED && status != DONE) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01870) + "dialup: failed, send pulse"); + return status; + } + + ap_mpm_register_timed_callback(apr_time_from_sec(1), dialup_callback, db); + + return SUSPENDED; +} + + + +#ifndef APR_HOOK_ALMOST_LAST +#define APR_HOOK_ALMOST_LAST (APR_HOOK_REALLY_LAST - 1) +#endif + +static void +dialup_register_hooks(apr_pool_t *p) +{ + ap_hook_handler(dialup_handler, NULL, NULL, APR_HOOK_ALMOST_LAST); +} + +typedef struct modem_speed_t { + const char *name; + apr_size_t bytes_per_second; +} modem_speed_t; + +#ifndef BITRATE_TO_BYTES +#define BITRATE_TO_BYTES(x) ((1000 * x)/8) +#endif + +static const modem_speed_t modem_bitrates[] = +{ + {"V.21", BITRATE_TO_BYTES(0.1)}, + {"V.26bis", BITRATE_TO_BYTES(2.4)}, + {"V.32", BITRATE_TO_BYTES(9.6)}, + {"V.34", BITRATE_TO_BYTES(28.8)}, + {"V.92", BITRATE_TO_BYTES(56.0)}, + {"i-was-rich-and-got-a-leased-line", BITRATE_TO_BYTES(1500)}, + {NULL, 0} +}; + +static const char * +cmd_modem_standard(cmd_parms *cmd, + void *dconf, + const char *input) +{ + const modem_speed_t *standard; + int i = 0; + dialup_dcfg_t *dcfg = (dialup_dcfg_t*)dconf; + + dcfg->bytes_per_second = 0; + + while (modem_bitrates[i].name != NULL) { + standard = &modem_bitrates[i]; + if (strcasecmp(standard->name, input) == 0) { + dcfg->bytes_per_second = standard->bytes_per_second; + break; + } + i++; + } + + if (dcfg->bytes_per_second == 0) { + return "mod_dialup: Unknown Modem Standard specified."; + } + + return NULL; +} + +static void * +dialup_dcfg_create(apr_pool_t *p, char *dummy) +{ + dialup_dcfg_t *cfg = apr_palloc(p, sizeof(dialup_dcfg_t)); + + cfg->bytes_per_second = 0; + + return cfg; +} + + +static const command_rec dialup_cmds[] = +{ + AP_INIT_TAKE1("ModemStandard", cmd_modem_standard, NULL, ACCESS_CONF, + "Modem Standard to.. simulate. " + "Must be one of: 'V.21', 'V.26bis', 'V.32', 'V.34', or 'V.92'"), + {NULL} +}; + +AP_DECLARE_MODULE(dialup) = +{ + STANDARD20_MODULE_STUFF, + dialup_dcfg_create, + NULL, + NULL, + NULL, + dialup_cmds, + dialup_register_hooks +}; diff --git a/modules/test/mod_optional_fn_export.c b/modules/test/mod_optional_fn_export.c new file mode 100644 index 0000000..5dccfc9 --- /dev/null +++ b/modules/test/mod_optional_fn_export.c @@ -0,0 +1,48 @@ +/* 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. + */ + +#include "httpd.h" +#include "http_config.h" +#include "http_log.h" +#include "mod_optional_fn_export.h" + +/* The alert will note a strange mirror-image style resemblance to + * mod_optional_hook_import.c. Yes, I _did_ mean import. Think about it. + */ + +static int TestOptionalFn(const char *szStr) +{ + ap_log_error(APLOG_MARK,APLOG_ERR,OK,NULL, APLOGNO(01871) + "Optional function test said: %s",szStr); + + return OK; +} + +static void ExportRegisterHooks(apr_pool_t *p) +{ + APR_REGISTER_OPTIONAL_FN(TestOptionalFn); +} + +AP_DECLARE_MODULE(optional_fn_export) = +{ + STANDARD20_MODULE_STUFF, + NULL, + NULL, + NULL, + NULL, + NULL, + ExportRegisterHooks +}; diff --git a/modules/test/mod_optional_fn_export.h b/modules/test/mod_optional_fn_export.h new file mode 100644 index 0000000..f30c0b6 --- /dev/null +++ b/modules/test/mod_optional_fn_export.h @@ -0,0 +1,19 @@ +/* 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. + */ + +#include "apr_optional.h" + +APR_DECLARE_OPTIONAL_FN(int,TestOptionalFn,(const char *)); diff --git a/modules/test/mod_optional_fn_import.c b/modules/test/mod_optional_fn_import.c new file mode 100644 index 0000000..aba70e1 --- /dev/null +++ b/modules/test/mod_optional_fn_import.c @@ -0,0 +1,55 @@ +/* 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. + */ + +#include "httpd.h" +#include "http_config.h" +#include "mod_optional_fn_export.h" +#include "http_protocol.h" + +/* The alert will note a strange mirror-image style resemblance to + * mod_optional_hook_export.c. Yes, I _did_ mean export. Think about it. + */ + +static APR_OPTIONAL_FN_TYPE(TestOptionalFn) *pfn; + +static int ImportLogTransaction(request_rec *r) +{ + if (pfn) + return pfn(r->the_request); + return DECLINED; +} + +static void ImportFnRetrieve(void) +{ + pfn = APR_RETRIEVE_OPTIONAL_FN(TestOptionalFn); +} + +static void ImportRegisterHooks(apr_pool_t *p) +{ + ap_hook_log_transaction(ImportLogTransaction,NULL,NULL,APR_HOOK_MIDDLE); + ap_hook_optional_fn_retrieve(ImportFnRetrieve,NULL,NULL,APR_HOOK_MIDDLE); +} + +AP_DECLARE_MODULE(optional_fn_import) = +{ + STANDARD20_MODULE_STUFF, + NULL, + NULL, + NULL, + NULL, + NULL, + ImportRegisterHooks +}; diff --git a/modules/test/mod_optional_hook_export.c b/modules/test/mod_optional_hook_export.c new file mode 100644 index 0000000..bb61b43 --- /dev/null +++ b/modules/test/mod_optional_hook_export.c @@ -0,0 +1,44 @@ +/* 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. + */ + +#include "httpd.h" +#include "http_config.h" +#include "mod_optional_hook_export.h" +#include "http_protocol.h" + +AP_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(int,optional_hook_test,(const char *szStr), + (szStr),OK,DECLINED) + +static int ExportLogTransaction(request_rec *r) +{ + return ap_run_optional_hook_test(r->the_request); +} + +static void ExportRegisterHooks(apr_pool_t *p) +{ + ap_hook_log_transaction(ExportLogTransaction,NULL,NULL,APR_HOOK_MIDDLE); +} + +AP_DECLARE_MODULE(optional_hook_export) = +{ + STANDARD20_MODULE_STUFF, + NULL, + NULL, + NULL, + NULL, + NULL, + ExportRegisterHooks +}; diff --git a/modules/test/mod_optional_hook_export.h b/modules/test/mod_optional_hook_export.h new file mode 100644 index 0000000..223f591 --- /dev/null +++ b/modules/test/mod_optional_hook_export.h @@ -0,0 +1,24 @@ +/* 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. + */ + +#ifndef MOD_OPTIONAL_HOOK_EXPORT_H +#define MOD_OPTIONAL_HOOK_EXPORT_H + +#include "ap_config.h" + +AP_DECLARE_HOOK(int,optional_hook_test,(const char *)) + +#endif /* def MOD_OPTIONAL_HOOK_EXPORT_H */ diff --git a/modules/test/mod_optional_hook_import.c b/modules/test/mod_optional_hook_import.c new file mode 100644 index 0000000..f921d64 --- /dev/null +++ b/modules/test/mod_optional_hook_import.c @@ -0,0 +1,45 @@ +/* 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. + */ + +#include "httpd.h" +#include "http_config.h" +#include "http_log.h" +#include "mod_optional_hook_export.h" + +static int ImportOptionalHookTestHook(const char *szStr) +{ + ap_log_error(APLOG_MARK,APLOG_DEBUG,OK,NULL, APLOGNO(01866) + "Optional hook test said: %s", szStr); + + return OK; +} + +static void ImportRegisterHooks(apr_pool_t *p) +{ + AP_OPTIONAL_HOOK(optional_hook_test,ImportOptionalHookTestHook,NULL, + NULL,APR_HOOK_MIDDLE); +} + +AP_DECLARE_MODULE(optional_hook_import) = +{ + STANDARD20_MODULE_STUFF, + NULL, + NULL, + NULL, + NULL, + NULL, + ImportRegisterHooks +}; -- cgit v1.2.3