Apache HTTP サームãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.2
ã“ã®æ–‡æ›¸ã¯ mod_mmap_static
モジュールを Apache 2.0 用ã«ç§»æ¤ã—ãŸæ™‚ã«
å¦ã‚“ã 経験をもã¨ã«æ›¸ã„ãŸã€æœ€åˆã®æ‰‹å¼•ãæ›¸ã§ã™ã€‚ã¾ã ã¾ã 完全ã˜ã‚ƒãªã„ã—ã€
ã²ã‚‡ã£ã¨ã™ã‚‹ã¨é–“é•ã£ã¦ã„る部分もã‚ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€
å–ã£æŽ›ã‚Šã«ã¯ãªã‚‹ã§ã—ょã†ã€‚
クリーンナップルーãƒãƒ³ã¯ apr_status_t
åž‹ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
ãã—ã¦ã€apr_status_t åž‹ã®å€¤ã‚’è¿”ã•ãªãã¦ã¯ãªã‚Šã¾ã›ã‚“。
クリーンナップä¸ã®ã‚¨ãƒ©ãƒ¼ã‚’通知ã™ã‚‹å¿…è¦ãŒãªã‘れã°ã€è¿”ã‚Šå€¤ã¯æ™®é€šã€
ARP_SUCCESS
ã§ã™ã€‚ãŸã¨ãˆã‚¨ãƒ©ãƒ¼ã‚’通知ã—ãŸã¨ã—ã¦ã‚‚ã€
ã™ã¹ã¦ã®ã‚³ãƒ¼ãƒ‰ãŒãã®é€šçŸ¥ã‚’ãƒã‚§ãƒƒã‚¯ã—ãŸã‚Šã€
エラーã«å¿œã˜ãŸå‹•作をã™ã‚‹ã‚ã‘ã§ã¯ãªã„ã“ã¨ã«æ°—ã‚’ã¤ã‘ã¦ãã ã•ã„。
åˆæœŸåŒ–ルーãƒãƒ³ã¯å‡¦ç†å…¨ä½“ã‹ã‚‰è¦‹ã¦ã—ã£ãりãるよã†ãªæ„味を表ã™ã‚ˆã†ã«ã€
åå‰ãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚ã§ã™ã‹ã‚‰ã€mmap_init
ã‹ã‚‰ mmap_post_config
ã®ã‚ˆã†ã«ã¡ã‚‡ã£ã¨å¤‰æ›´ã•れã¾ã—ãŸã€‚
渡ã•れる引数ã¯å¤§å¹…ã«å¤‰æ›´ã•ã‚Œã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚
apr_pool_t *p
apr_pool_t *plog
apr_pool_t *ptemp
server_rec *s
データ型ã®ã»ã¨ã‚“ã©ã¯ APR ã«ç§»ã•れã¾ã—ãŸã€‚ã¤ã¾ã‚Šã€ ã„ãã¤ã‹ã®åå‰ãŒå‰è¿°ã®ã‚ˆã†ã«å¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚ æ–½ã™ã¹ã変更点ã®ç°¡å˜ãªä¸€è¦§ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚
pool
becomes apr_pool_t
table
becomes apr_table_t
æ–°ã—ã„アーã‚テクãƒãƒ£ã§ã¯ä½œæˆã—ãŸé–¢æ•°ã‚’呼ã³å‡ºã™ã®ã«
一連ã®ãƒ•ックを使用ã—ã¾ã™ã€‚ã“ã®ãƒ•ックã¯ã€æ–°ã—ã„関数
static void register_hooks(void)
を使ã£ã¦ç™»éŒ²ã™ã‚‹ã‚ˆã†ã€
ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«æ›¸ãè¶³ã•ãªãã¦ã¯ãªã‚Šã¾ã›ã‚“。
ã“ã®é–¢æ•°ã¯ã€ãªã«ã‚’ã™ã¹ãã‹ä¸€æ—¦ç†è§£ã—ã¦ã—ã¾ãˆã°ã€
å分ã«ã‚ã‹ã‚Šã‚„ã™ã„ã‚‚ã®ã§ã™ã€‚
リクエストã®å‡¦ç†ã®ã‚るステージã§å‘¼ã³å‡ºã•ãªãã¦ã¯ãªã‚‰ãªã„
関数ã¯ç™»éŒ²ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãƒãƒ³ãƒ‰ãƒ©ã¯ç™»éŒ²ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。
関数を登録ã§ãるフェーズã¯ãŸãã•ã‚“ã‚りã¾ã™ã€‚
ãれãžã‚Œã®ãƒ•ェーズã§ã€é–¢æ•°ã‚’呼ã³å‡ºã™ç›¸å¯¾çš„ãªé †ç•ªã¯ã€
ã‹ãªã‚Šã®ç¨‹åº¦åˆ¶å¾¡ã§ãã¾ã™ã€‚
以下ã¯ã€mod_mmap_static
ã«è¿½åŠ ã—ãŸã‚³ãƒ¼ãƒ‰ã§ã™:
static void register_hooks(void) { static const char * const aszPre[]={ "http_core.c",NULL }; ap_hook_post_config(mmap_post_config,NULL,NULL,HOOK_MIDDLE); ap_hook_translate_name(mmap_static_xlat,aszPre,NULL,HOOK_LAST); };
ã“ã“ã§ã¯å‘¼ã³ã ã™ã¹ã二ã¤ã®é–¢æ•°ã‚’登録ã—ã¦ã„ã¾ã™ã€‚一ã¤ã¯
post_config
ステージ用 (ã»ã¨ã‚“ã©ã™ã¹ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«
ã¯ã“れãŒå¿…è¦ã§ã™) ã§ã€ã‚‚ã†ä¸€ã¤ã¯ translate_name
フェーズ用ã§ã™ã€‚
ãれãžã‚Œã®é–¢æ•°ã¯åå‰ã¯é•ã†ã‘れã©ã‚‚å½¢å¼ã¯åŒã˜ã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
ãれã§ã¯ã€å½¢å¼ã¯ã©ã®ã‚ˆã†ã«ãªã£ã¦ã„ã‚‹ã§ã—ょã†ã‹?
ap_hook_phase_name(function_name,
predecessors, successors, position);
三ã¤ã®ä½ç½®ãŒå®šç¾©ã•れã¦ã„ã¾ã™â€¦
HOOK_FIRST
HOOK_MIDDLE
HOOK_LAST
ä½ç½®ã‚’定義ã™ã‚‹ã«ã¯ã€ä¸Šè¨˜ã®ã€Œä½ç½®ã€ã‚’指定ã—〠修飾åã§ã‚る「先行ã€ã¨ã€Œå¾Œè¡Œã€ã§æ‰‹ã‚’åŠ ãˆã¾ã™ã€‚ 「先行ã€ã€Œå¾Œè¡Œã€ã¯ã€å‘¼ã°ã‚Œã‚‹ã¹ã関数ã®ãƒªã‚¹ãƒˆã§ã™ã€‚ 「先行ã€ã¯é–¢æ•°ã®å®Ÿè¡Œå‰ã«å‘¼ã°ã‚Œã‚‹ã‚‚ã®ã§ã€ 「後行ã€ã¯å®Ÿè¡Œå¾Œã«å‘¼ã°ã‚Œã‚‹ã‚‚ã®ã§ã™ã€‚
mod_mmap_static
ã®å ´åˆã€post_config
ステージã§ã¯å¿…è¦ã‚りã¾ã›ã‚“ãŒã€
mmap_static_xlat
㌠core モジュールãŒåå‰ã®å¤‰æ›ã‚’実行ã—ãŸå¾Œã«
呼ã°ã‚Œãªã‘れã°ãªã‚Šã¾ã›ã‚“。
ãã“ã§ aszPre を使ã£ã¦ HOOK_LAST
ã®ä¿®é£¾åを定義ã—ã¦ã„ã¾ã™ã€‚
モジュールã®å®šç¾©ã‚’作æˆã™ã‚‹éš›ã«æ³¨æ„ã—ãªã‘れã°ãªã‚‰ãªã„ ã‚¹ãƒ†ãƒ¼ã‚¸ã®æ•°ã¯æ¿€æ¸›ã—ã¦ã„ã¾ã™ã€‚å¤ã„å®šç¾©ã¯æ¬¡ã®ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã—ãŸã€‚
module MODULE_VAR_EXPORT module_name_module = { STANDARD_MODULE_STUFF, /* initializer */ /* dir config creater */ /* dir merger --- default is to override */ /* server config */ /* merge server config */ /* command handlers */ /* handlers */ /* filename translation */ /* check_user_id */ /* check auth */ /* check access */ /* type_checker */ /* fixups */ /* logger */ /* header parser */ /* child_init */ /* child_exit */ /* post read-request */ };
æ–°ã—ã„æ§‹é€ 体ã¯ã¨ã£ã¦ã‚‚シンプルã§ã™â€¦
module MODULE_VAR_EXPORT module_name_module = { STANDARD20_MODULE_STUFF, /* create per-directory config structures */ /* merge per-directory config structures */ /* create per-server config structures */ /* merge per-server config structures */ /* command handlers */ /* handlers */ /* register hooks */ };
ã“ã®ã†ã¡ã®ã„ãã¤ã‹ã¯å¤ã„ã‚‚ã®ã‹ã‚‰æ–°ã—ã„ã‚‚ã®ã«ç›´æŽ¥èªã¿æ›¿ãˆã‚‰ã‚Œã‚‹ã‚‚ã®ã§ã€ ã„ãã¤ã‹ã¯ãã†ã§ã¯ã‚りã¾ã›ã‚“。ã©ã†ã™ã‚Œã°ã„ã„ã®ã‹ã‚’è¦ç´„ã—ã¦ã¿ã¾ã™ã€‚
直接èªã¿æ›¿ãˆã‚‰ã‚Œã‚‹ã‚¹ãƒ†ãƒ¼ã‚¸:
/* ディレクトリè¨å®šä½œæˆé–¢æ•° */
/* ディレクトリ毎è¨å®šæ§‹é€ ä½“ä½œæˆ */
/* サーãƒè¨å®šä½œæˆé–¢æ•° */
/* ã‚µãƒ¼ãƒæ¯Žè¨å®šæ§‹é€ ä½“ä½œæˆ */
/* ディレクトリè¨å®šãƒžãƒ¼ã‚¸é–¢æ•° */
/* ディレクトリ毎è¨å®šæ§‹é€ 体マージ */
/* サーãƒè¨å®šãƒžãƒ¼ã‚¸é–¢æ•° */
/* ã‚µãƒ¼ãƒæ¯Žè¨å®šæ§‹é€ 体作æˆãƒžãƒ¼ã‚¸ */
/* コマンド・テーブル */
/* コマンド apr_table_t */
/* ãƒãƒ³ãƒ‰ãƒ© */
/* ãƒãƒ³ãƒ‰ãƒ© */
å¤ã„é–¢æ•°ã®æ®‹ã‚Šã®ã‚‚ã®ã¯ãƒ•ックã¨ã—ã¦ç™»éŒ²ã•れるã¹ãã§ã™ã€‚ ç¾æ™‚ç‚¹ã§æ¬¡ã®ã‚ˆã†ãªãƒ•ック・ステージãŒå®šç¾©ã•れã¦ã„ã¾ã™â€¦
ap_hook_post_config
_init
ルーãƒãƒ³ãŒç™»éŒ²ã•れるã¹ãå ´æ‰€ã§ã™)ap_hook_http_method
ap_hook_open_logs
ap_hook_auth_checker
ap_hook_access_checker
ap_hook_check_user_id
ap_hook_default_port
ap_hook_pre_connection
ap_hook_process_connection
ap_hook_child_init
ap_hook_create_request
ap_hook_fixups
ap_hook_handler
ap_hook_header_parser
ap_hook_insert_filter
ap_hook_log_transaction
ap_hook_optional_fn_retrieve
ap_hook_post_read_request
ap_hook_quick_handler
ap_hook_translate_name
ap_hook_type_checker