apacheのソースコードをいくら漁れど、
ap_hook_pre_config関数が実装されている箇所が見つからなくて困っていたのだけど、
ようやく見つかったのでメモです。
学習途上で書いているエントリなので、ひょっとすると間違ってる箇所もあるかもしれません。
もし間違っている箇所があれば、ご指摘いただけるとうれしいです。
以下、httpd-2.2.24のソースコードであることが前提になっています。
ap_hook_pre_config関数というのは何なのかというと、
httpdの実装においてかなりの頻度で呼ばれる関数で、
ドキュメントだと以下のように説明されてます。
> do any setup required prior to processing configuration directives
本処理の前に必要なセットアップ処理を行う関数です。
なお、どうもこの関数の説明は、最新ドキュメントからはなくなっており、
ひょっとすると廃止になってるのかもしれません。
自分は、Googleのキャッシュから上記の説明文を見つけました。
で、この関数ですが、プリプロセッサで宣言・実装されていたのが、
見つけることを困難にさせました。
ap_hook_pre_configの宣言・実装がどこにあるかと言うと、
宣言はinclude/http_config.hに書かれていて、
実装はserver/config.cに書かれています。
これから実装を読んでいこうと思っています。
最後に話が変わりますが、httpd本体のコア系hookは、
support/list_hooks.plというプログラムがあるので、そいつを叩いてやると、
宣言と実装が一覧表示されてコードリーディングの良き助けとなります。
$ perl ./support/list_hooks.pl access_checker declared in ./include/http_request.h implemented in ./server/request.c type is RUN_ALL int access_checker(request_rec *r) auth_checker declared in ./include/http_request.h implemented in ./server/request.c type is RUN_FIRST int auth_checker(request_rec *r) check_user_id declared in ./include/http_request.h implemented in ./server/request.c type is RUN_FIRST int check_user_id(request_rec *r) child_init declared in ./include/http_config.h implemented in ./server/config.c type is VOID void child_init(apr_pool_t *pchild, server_rec *s) create_connection declared in ./include/http_connection.h implemented in ./server/connection.c type is RUN_FIRST conn_rec * create_connection(apr_pool_t *p, server_rec *server, apr_socket_t *csd, long conn_id, void *sbh, apr_bucket_alloc_t *alloc) create_request declared in ./include/http_request.h implemented in ./server/request.c type is RUN_ALL int create_request(request_rec *r) default_port declared in ./include/http_protocol.h implemented in ./server/protocol.c type is RUN_FIRST apr_port_t default_port(const request_rec *r) error_log declared in ./include/http_log.h implemented in ./server/log.c type is VOID void error_log(const char *file, int line, int level, apr_status_t status, const server_rec *s, const request_rec *r, apr_pool_t *pool, const char *errstr) fatal_exception declared in ./include/ap_mpm.h implemented in ./server/mpm_common.c type is RUN_ALL int fatal_exception(ap_exception_info_t *ei) fixups declared in ./include/http_request.h implemented in ./server/request.c type is RUN_ALL int fixups(request_rec *r) get_mgmt_items declared in ./include/http_core.h implemented in ./server/core.c type is RUN_ALL int get_mgmt_items(apr_pool_t *p, const char * val, apr_hash_t *ht) get_suexec_identity declared in ./os/unix/unixd.h implemented in ./os/unix/unixd.c type is RUN_FIRST ap_unix_identity_t * get_suexec_identity(const request_rec *r) handler declared in ./include/http_config.h implemented in ./server/config.c type is RUN_FIRST int handler(request_rec *r) header_parser declared in ./include/http_config.h implemented in ./server/config.c type is RUN_ALL int header_parser(request_rec *r) http_scheme declared in ./include/http_protocol.h implemented in ./server/protocol.c type is RUN_FIRST const char * http_scheme(const request_rec *r) insert_error_filter declared in ./include/http_protocol.h implemented in ./modules/http/http_protocol.c type is VOID void insert_error_filter(request_rec *r) insert_filter declared in ./include/http_request.h implemented in ./server/request.c type is VOID void insert_filter(request_rec *r) log_transaction declared in ./include/http_protocol.h implemented in ./server/protocol.c type is RUN_ALL int log_transaction(request_rec *r) map_to_storage declared in ./include/http_request.h implemented in ./server/request.c type is RUN_FIRST int map_to_storage(request_rec *r) monitor declared in ./include/mpm_common.h implemented in ./server/mpm_common.c type is RUN_ALL int monitor(apr_pool_t *p) open_logs declared in ./include/http_config.h implemented in ./server/config.c type is RUN_ALL int open_logs(apr_pool_t *pconf,apr_pool_t *plog, apr_pool_t *ptemp,server_rec *s) optional_fn_retrieve declared in ./include/http_config.h implemented in ./server/config.c type is VOID void optional_fn_retrieve(void) optional_hook_test declared in ./modules/test/mod_optional_hook_export.h implemented in ./modules/test/mod_optional_hook_export.c type is OPTIONAL RUN_ALL int optional_hook_test(const char *) post_config declared in ./include/http_config.h implemented in ./server/config.c type is RUN_ALL int post_config(apr_pool_t *pconf,apr_pool_t *plog, apr_pool_t *ptemp,server_rec *s) post_read_request declared in ./include/http_protocol.h implemented in ./server/protocol.c type is RUN_ALL int post_read_request(request_rec *r) pre_config declared in ./include/http_config.h implemented in ./server/config.c type is RUN_ALL int pre_config(apr_pool_t *pconf,apr_pool_t *plog, apr_pool_t *ptemp) pre_connection declared in ./include/http_connection.h implemented in ./server/connection.c type is RUN_ALL int pre_connection(conn_rec *c, void *csd) pre_mpm declared in ./include/scoreboard.h implemented in ./server/scoreboard.c type is RUN_ALL int pre_mpm(apr_pool_t *p, ap_scoreboard_e sb_type) process_connection declared in ./include/http_connection.h implemented in ./server/connection.c type is RUN_FIRST int process_connection(conn_rec *c) quick_handler declared in ./include/http_config.h implemented in ./server/config.c type is RUN_FIRST int quick_handler(request_rec *r, int lookup_uri) test_config declared in ./include/http_config.h implemented in ./server/config.c type is VOID void test_config(apr_pool_t *pconf, server_rec *s) translate_name declared in ./include/http_request.h implemented in ./server/request.c type is RUN_FIRST int translate_name(request_rec *r) type_checker declared in ./include/http_request.h implemented in ./server/request.c type is RUN_FIRST int type_checker(request_rec *r)