フックポイントの一覧
Apache httpdで用意されているフックポイントにはどんなものがあるか。あるフック関数の実行関数 ap_run_hogehoge()の実行箇所は一か所とは限らず、また必ず実行されるわけでもないので、どういった条件で実行されるかを明確にするのは難しいケースがある。
ひとまずは、httpd-2.4.9でAP_IMPLEMENT_HOOK_RUN_ALL/RUN_FIRST/VOID で定義されているフックポイントの一覧を作成した。
比較として、httpd-2.2.27からも同じマクロで定義されているフックポイントを並べている。
減ったフックポイントは見当たらない。追加されたポイントが、17あった。
分類は、下記で説明するmod_infoでの分類を書いた。が、もう少し細かく分類してもいいと思う。
seq | フックポイント | 処理タイプ | フックポイント(2.2.27) | 分類(mod_info) |
1 | access_checker | RUN_ALL | access_checker | リクエスト処理系 |
2 | access_checker_ex | RUN_FIRST | リクエスト処理系 | |
3 | auth_checker | RUN_FIRST | auth_checker | リクエスト処理系 |
4 | check_config | RUN_ALL | 起動処理系 | |
5 | check_user_id | RUN_FIRST | check_user_id | リクエスト処理系 |
6 | child_init | VOID | child_init | 起動処理系 |
7 | child_status | VOID | その他 | |
8 | create_connection | RUN_FIRST | create_connection | リクエスト処理系 |
9 | create_request | RUN_ALL | create_request | リクエスト処理系 |
10 | default_port | RUN_FIRST | default_port | リクエスト処理系 |
11 | dirwalk_stat | RUN_FIRST | (なし) | |
12 | drop_privileges | RUN_ALL | 起動処理系 | |
13 | end_generation | VOID | その他 | |
14 | error_log | VOID | error_log | その他 |
15 | expr_lookup | RUN_FIRST | その他 | |
16 | fatal_exception | RUN_ALL | fatal_exception | その他 |
17 | fixups | RUN_ALL | fixups | リクエスト処理系 |
18 | generate_log_id | RUN_FIRST | リクエスト処理系 | |
19 | get_mgmt_items | RUN_FIRST | get_mgmt_items | その他 |
20 | get_suexec_identity | RUN_FIRST | get_suexec_identity | (なし) |
21 | handler | RUN_FIRST | handler | リクエスト処理系 |
22 | header_parser | RUN_ALL | header_parser | リクエスト処理系 |
23 | http_scheme | RUN_FIRST | http_scheme, | リクエスト処理系 |
24 | insert_error_filter | VOID | insert_error_filter | リクエスト処理系 |
25 | insert_filter | VOID | insert_filter | リクエスト処理系 |
26 | insert_network_bucket | RUN_FIRST | (なし) | |
27 | log_transaction | RUN_ALL | log_transaction | リクエスト処理系 |
28 | map_to_storage | RUN_FIRST | map_to_storage | リクエスト処理系 |
29 | monitor | RUN_ALL | monitor | その他 |
30 | mpm | RUN_FIRST | 起動処理系 | |
31 | mpm_get_name | RUN_FIRST | その他 | |
32 | mpm_query | RUN_FIRST | その他 | |
33 | mpm_register_timed_callback | RUN_FIRST | その他 | |
34 | note_auth_failure | RUN_FIRST | リクエスト処理系 | |
35 | open_htaccess | RUN_FIRST | (なし) | |
36 | open_logs | RUN_ALL | open_logs | 起動処理系 |
37 | optional_fn_retrieve | VOID | optional_fn_retrieve | 起動処理系 |
38 | post_config | RUN_ALL | post_config | 起動処理系 |
39 | post_perdir_config | RUN_ALL | (なし) | |
40 | post_read_request | RUN_ALL | post_read_request | リクエスト処理系 |
41 | pre_config | RUN_ALL | pre_config | 起動処理系 |
42 | pre_connection | RUN_ALL | pre_connection | リクエスト処理系 |
43 | pre_mpm | RUN_ALL | pre_mpm | 起動処理系 |
44 | pre_read_request | VOID | リクエスト処理系 | |
45 | process_connection | RUN_FIRST | process_connection | リクエスト処理系 |
46 | quick_handler | RUN_FIRST | quick_handler | リクエスト処理系 |
47 | test_config | VOID | test_config | 起動処理系 |
48 | translate_name | RUN_FIRST | translate_name | リクエスト処理系 |
49 | type_checker | RUN_FIRST | type_checker | リクエスト処理系 |
mod_infoで見るフック関数情報
mod_infoで各フックポイントに登録されているフック関数の情報を一覧することができる。http://localhost/server-info?hooksただ、調べてみると、出力されるフックポイントは一部欠けている(上の表で「(なし)」と書いたのが欠けているフックポイント)。
関数も関数名が一覧されるわけではなく、その関数を登録したファイル名が出力されている。
処理を見ると、ap_hook_get_hogehoge()でhogehogeフックポイントの登録情報(apr_array_header_t情報)を取得する。
apr_array_header_t情報は、配列情報の管理情報で、内部にメモリプールの情報なども持っているが、基本的には、apr_array_header_t.nelts 個の有効な要素を持つ配列 apr_array_header_t.elts の格納庫だ。
このapr_array_header_t構造体自体は汎用で フック関数の登録先に利用する場合にはapr_array_header_t.eltsには、各フック関数用の構造体 ap_LINK_hogehoge_t が格納される。
mod_infoで出力されるのは、ap_LINK_hogehoge_t.szNameで、ここにはモジュールのCファイル名が入っている。
各モジュールごとにフック関数の型が異なるので、この構造体の個々の定義は異なっているが、その辺気にしなければ(実際に関数をを呼び出すのでなければ)、ダミーの構造体で処理可能らしい。mod_infoでは、処理用の構造体を用意してこのモジュールCファイル名と、実行時の順序を制御するための値 ap_LINK_hogehoge_t.nOrder を出力している。
引き続き、主なフック関数を確認すれば、フック関数の全体のイメージが把握できるのではないか。
0 件のコメント:
コメントを投稿