From 7cbed3dc9de99c60d136aff8e4da62eb4d1640e4 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Tue, 15 May 2001 04:25:16 +0000 Subject: [PATCH] add "Request Phase Participation" info to mod_info PR: Obtained from: Submitted by: dougm Reviewed by: gstein git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89116 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 2 + modules/generators/mod_info.c | 91 ++++++++++++++++++++++++++++++++++- 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 0c6d756cf6..cf4da22287 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,6 @@ Changes with Apache 2.0.18-dev + *) add "Request Phase Participation" info to mod_info + [Doug MacEachern] *) Make first phase changes to the scoreboard data structures in preparation for the rewriting of the scoreboard per my posted diff --git a/modules/generators/mod_info.c b/modules/generators/mod_info.c index 3c5e014fcf..9e22c22c55 100644 --- a/modules/generators/mod_info.c +++ b/modules/generators/mod_info.c @@ -92,6 +92,7 @@ #include "http_log.h" #include "http_main.h" #include "http_protocol.h" +#include "http_request.h" #include "util_script.h" #include "apr_strings.h" #include "apr_lib.h" @@ -247,6 +248,86 @@ static void mod_info_module_cmds(request_rec * r, const command_rec * cmds, } } + +typedef struct { /*XXX: should get something from apr_hooks.h instead */ + void (*pFunc)(void); /* just to get the right size */ + const char *szName; + const char * const *aszPredecessors; + const char * const *aszSuccessors; + int nOrder; +} hook_struct_t; + +typedef apr_array_header_t * (*hook_get_t)(void); + +typedef struct { + const char *name; + hook_get_t get; +} hook_lookup_t; + +static hook_lookup_t request_hooks[] = { + {"Post-Read Request", ap_hook_get_post_read_request}, + {"Header Parse", ap_hook_get_header_parser}, + {"Translate Path", ap_hook_get_translate_name}, + {"Check Access", ap_hook_get_access_checker}, + {"Verify User ID", ap_hook_get_check_user_id}, + {"Verify User Access", ap_hook_get_auth_checker}, + {"Check Type", ap_hook_get_type_checker}, + {"Fixups", ap_hook_get_fixups}, + {"Logging", ap_hook_get_log_transaction}, + {NULL}, +}; + +static int module_find_hook(module *modp, + hook_get_t hook_get) +{ + int i; + apr_array_header_t *hooks = hook_get(); + hook_struct_t *elts; + + if (!hooks) { + return 0; + } + + elts = (hook_struct_t *)hooks->elts; + + for (i=0; i< hooks->nelts; i++) { + if (strcmp(elts[i].szName, modp->name) == 0) { + return 1; + } + } + + return 0; +} + +static void module_participate(request_rec *r, + module *modp, + hook_lookup_t *lookup, + int *comma) +{ + if (module_find_hook(modp, lookup->get)) { + if (*comma) { + ap_rputs(", ", r); + } + ap_rvputs(r, "", lookup->name, "", NULL); + *comma = 1; + } +} + +static void module_request_hook_participate(request_rec *r, module *modp) +{ + int i, comma=0; + + ap_rputs("
Request Phase Participation: \n", r); + + for (i=0; request_hooks[i].name; i++) { + module_participate(r, modp, &request_hooks[i], &comma); + } + + if (!comma) { + ap_rputs(" none", r); + } +} + static const char *find_more_info(server_rec *s, const char *module_name) { int i; @@ -364,7 +445,12 @@ static int display_info(request_rec *r) ap_rputs(" none", r); } #else - ap_rputs(" (code broken)", r); + if (module_find_hook(modp, ap_hook_get_handler)) { + ap_rputs(" yes", r); + } + else { + ap_rputs(" none", r); + } #endif ap_rputs("
Configuration Phase Participation: \n", r); @@ -399,6 +485,9 @@ static int display_info(request_rec *r) if (!comma) ap_rputs(" none", r); comma = 0; + + module_request_hook_participate(r, modp); + ap_rputs("
Module Directives: ", r); cmd = modp->cmds; if (cmd) { -- 2.40.0