Module Initization
a. register_hooks(apr_pool_t *p)
在開始寫 module 時,必須以 hook 的方式向 Apache 註冊你的 module,跟 windows 滿像的。
Hook 的方式是使用 ap_hook_handler,而 hook 的位置可以是:
APR_HOOK_REALLY_FIRST、APR_HOOK_FIRST、APR_HOOK_MIDDLE、APR_HOOK_LAST、APR_HOOK_REALLY_LAST。
原則上可參考 撰寫 Apache module (二) - 模組架構及流程 裡面的流程圖,這幾項主要是在多個 modules 中處理的流程。
b. ap_register_output_filter
如果你的專案需要針對檔案輸出做控制的話,則你需要註冊一個 output_filter。透過這個 filter 來處理。好比說我需要做的 rate control 就需要註冊一個 filter。
c. ap_hook_post_config
如果你需要讀取 httpd.conf 或是 conf.d/ 下的設定檔的話,你就要使用 ap_hook_post_config 來處理設定檔的部分。
d. AP_MODULE_DECLARE_DATA
除了 hook 之外,也要描述一下你的 module 的定義:
a. register_hooks(apr_pool_t *p)
在開始寫 module 時,必須以 hook 的方式向 Apache 註冊你的 module,跟 windows 滿像的。
Hook 的方式是使用 ap_hook_handler,而 hook 的位置可以是:
APR_HOOK_REALLY_FIRST、APR_HOOK_FIRST、APR_HOOK_MIDDLE、APR_HOOK_LAST、APR_HOOK_REALLY_LAST。
原則上可參考 撰寫 Apache module (二) - 模組架構及流程 裡面的流程圖,這幾項主要是在多個 modules 中處理的流程。
b. ap_register_output_filter
如果你的專案需要針對檔案輸出做控制的話,則你需要註冊一個 output_filter。透過這個 filter 來處理。好比說我需要做的 rate control 就需要註冊一個 filter。
c. ap_hook_post_config
如果你需要讀取 httpd.conf 或是 conf.d/ 下的設定檔的話,你就要使用 ap_hook_post_config 來處理設定檔的部分。
d. AP_MODULE_DECLARE_DATA
除了 hook 之外,也要描述一下你的 module 的定義:
module AP_MODULE_DECLARE_DATA your_module = { STANDARD20_MODULE_STUFF, // stuff that needs to be declared in every 2.0 mod NULL, // create per-directory config structure NULL, // merge per-directory config structures NULL, // create per-server config structure NULL, // merge per-server config structures NULL, // command apr_table_t register_hooks // register hooks };
e. command_rec
這裡需要定義你在 httpd.conf 中所需要的參數,以及參數的個數。(以下是我的定義)。
static const command_rec mp4_d_cmds[] = { AP_INIT_FLAG("Mp4RateControl", mp4ratecontrol, NULL, RSRC_CONF | ACCESS_CONF, "On or Off to enable or disable (default) the Mp4RateControl"), AP_INIT_TAKE1("Mp4Ratio", mp4ratio, NULL, RSRC_CONF | ACCESS_CONF, "transfer ratio"), AP_INIT_TAKE1("Mp4FastStart", mp4faststart, NULL, RSRC_CONF | ACCESS_CONF, "transfer N seconds data of the first request (in second) "), {NULL} };