diff options
Diffstat (limited to '')
-rw-r--r-- | server/util_debug.c | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/server/util_debug.c b/server/util_debug.c new file mode 100644 index 0000000..a75fdda --- /dev/null +++ b/server/util_debug.c @@ -0,0 +1,236 @@ +/* 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. + */ + +#define APR_WANT_STRFUNC +#include "apr_want.h" + +#include "httpd.h" +#include "http_config.h" +#include "http_core.h" + +/* Possibly get rid of the macros we defined in httpd.h */ +#if defined(strchr) +#undef strchr +#endif + +#if defined (strrchr) +#undef strrchr +#endif + +#if defined (strstr) +#undef strstr +#endif + + +#if defined(ap_strchr) +#undef ap_strchr +AP_DECLARE(char *) ap_strchr(char *s, int c); +#endif + +AP_DECLARE(char *) ap_strchr(char *s, int c) +{ + return strchr(s,c); +} + +#if defined(ap_strchr_c) +#undef ap_strchr_c +AP_DECLARE(const char *) ap_strchr_c(const char *s, int c); +#endif + +AP_DECLARE(const char *) ap_strchr_c(const char *s, int c) +{ + return strchr(s,c); +} + +#if defined(ap_strrchr) +#undef ap_strrchr +AP_DECLARE(char *) ap_strrchr(char *s, int c); +#endif + +AP_DECLARE(char *) ap_strrchr(char *s, int c) +{ + return strrchr(s,c); +} + +#if defined(ap_strrchr_c) +#undef ap_strrchr_c +AP_DECLARE(const char *) ap_strrchr_c(const char *s, int c); +#endif + +AP_DECLARE(const char *) ap_strrchr_c(const char *s, int c) +{ + return strrchr(s,c); +} + +#if defined(ap_strstr) +#undef ap_strstr +AP_DECLARE(char *) ap_strstr(char *s, const char *c); +#endif + +AP_DECLARE(char *) ap_strstr(char *s, const char *c) +{ + return strstr(s,c); +} + +#if defined(ap_strstr_c) +#undef ap_strstr_c +AP_DECLARE(const char *) ap_strstr_c(const char *s, const char *c); +#endif + +AP_DECLARE(const char *) ap_strstr_c(const char *s, const char *c) +{ + return strstr(s,c); +} + +#if defined(ap_get_module_config) +#undef ap_get_module_config +AP_DECLARE(void *) ap_get_module_config(const ap_conf_vector_t *cv, + const module *m); +#endif + +AP_DECLARE(void *) ap_get_module_config(const ap_conf_vector_t *cv, + const module *m) +{ + return ((void **)cv)[m->module_index]; +} + +AP_DECLARE(int) ap_get_module_flags(const module *m) +{ + if (m->version < AP_MODULE_FLAGS_MMN_MAJOR + || (m->version == AP_MODULE_FLAGS_MMN_MAJOR + && (m->minor_version < AP_MODULE_FLAGS_MMN_MINOR))) { + return 0; + } + + return m->flags; +} + +#if defined(ap_get_core_module_config) +#undef ap_get_core_module_config +AP_DECLARE(void *) ap_get_core_module_config(const ap_conf_vector_t *cv); +#endif + +AP_DECLARE(void *) ap_get_core_module_config(const ap_conf_vector_t *cv) +{ + return ((void **)cv)[AP_CORE_MODULE_INDEX]; +} + + +#if defined(ap_get_server_module_loglevel) +#undef ap_get_server_module_loglevel +AP_DECLARE(int) ap_get_server_module_loglevel(const server_rec *s, int module_index); +#endif + +AP_DECLARE(int) ap_get_server_module_loglevel(const server_rec *s, int module_index) +{ + if (module_index < 0 || s->log.module_levels == NULL || + s->log.module_levels[module_index] < 0) + { + return s->log.level; + } + + return s->log.module_levels[module_index]; +} + +#if defined(ap_get_conn_module_loglevel) +#undef ap_get_conn_module_loglevel +AP_DECLARE(int) ap_get_conn_module_loglevel(const conn_rec *c, int module_index); +#endif + +AP_DECLARE(int) ap_get_conn_module_loglevel(const conn_rec *c, int module_index) +{ + const struct ap_logconf *l = (c)->log ? (c)->log : &(c)->base_server->log; + if (module_index < 0 || l->module_levels == NULL || + l->module_levels[module_index] < 0) + { + return l->level; + } + + return l->module_levels[module_index]; +} + +#if defined(ap_get_conn_server_module_loglevel) +#undef ap_get_conn_server_module_loglevel +AP_DECLARE(int) ap_get_conn_server_module_loglevel(const conn_rec *c, + const server_rec *s, + int module_index); +#endif + +AP_DECLARE(int) ap_get_conn_server_module_loglevel(const conn_rec *c, + const server_rec *s, + int module_index) +{ + const struct ap_logconf *l = (c->log && c->log != &c->base_server->log) ? + c->log : &s->log; + if (module_index < 0 || l->module_levels == NULL || + l->module_levels[module_index] < 0) + { + return l->level; + } + + return l->module_levels[module_index]; +} + +#if defined(ap_get_request_module_loglevel) +#undef ap_get_request_module_loglevel +AP_DECLARE(int) ap_get_request_module_loglevel(const request_rec *c, int module_index); +#endif + +AP_DECLARE(int) ap_get_request_module_loglevel(const request_rec *r, int module_index) +{ + const struct ap_logconf *l = r->log ? r->log : + r->connection->log ? r->connection->log : + &r->server->log; + if (module_index < 0 || l->module_levels == NULL || + l->module_levels[module_index] < 0) + { + return l->level; + } + + return l->module_levels[module_index]; +} + +/** + * Generic accessors for other modules to set at their own module-specific + * data + * @param conf_vector The vector in which the modules configuration is stored. + * usually r->per_dir_config or s->module_config + * @param m The module to set the data for. + * @param val The module-specific data to set + * @fn void ap_set_module_config(ap_conf_vector_t *cv, const module *m, void *val) + */ +#if defined(ap_set_module_config) +#undef ap_set_module_config +AP_DECLARE(void) ap_set_module_config(ap_conf_vector_t *cv, const module *m, + void *val); +#endif + +AP_DECLARE(void) ap_set_module_config(ap_conf_vector_t *cv, const module *m, + void *val) +{ + ((void **)cv)[m->module_index] = val; +} + + +#if defined(ap_set_core_module_config) +#undef ap_set_core_module_config +AP_DECLARE(void) ap_set_core_module_config(ap_conf_vector_t *cv, void *val); +#endif + +AP_DECLARE(void) ap_set_core_module_config(ap_conf_vector_t *cv, void *val) +{ + ((void **)cv)[AP_CORE_MODULE_INDEX] = val; +} |