Apache 2.x での設定部分の実装
http://module.jp/book/table_of_contents.html
「第5章 設定ファイルのカスタマイズ」のsimple_confをApache 2.xで。結構時間かかかったヨ。
#include "httpd.h" #include "http_config.h" #include "http_protocol.h" #include "ap_config.h" module AP_MODULE_DECLARE_DATA simple_conf_module; typedef struct { char *message; } simple_dir_config ; static void *create_per_dir_config(apr_pool_t *p, char *arg ) { simple_dir_config *conf; conf = apr_pcalloc( p , sizeof(simple_dir_config) ); conf->message = apr_pstrdup(p , "default" ); return (void *)conf; } static const char *cmd_set_message(cmd_parms *parms ,void *mconfig, char *arg ){ simple_dir_config *conf; if( strlen(arg) > 256 ) { return "message is too long >_<"; } conf = mconfig; conf->message = apr_pstrdup( parms->pool ,arg ); return NULL; } static const command_rec cmds[] = { AP_INIT_TAKE1( "SetMessage", cmd_set_message, NULL, OR_ALL, "Set Message"), { NULL } }; static int simple_conf_handler( request_rec *r ) { simple_dir_config *conf; if (strcmp(r->handler, "simple_conf")) { return DECLINED; } conf = ap_get_module_config( r->per_dir_config , &simple_conf_module ); r->content_type = "text/html"; if( !r->header_only ) { ap_rputs(conf->message, r); } return OK; } static void simple_conf_register_hooks(apr_pool_t *p) { ap_hook_handler(simple_conf_handler, NULL, NULL, APR_HOOK_MIDDLE); } module AP_MODULE_DECLARE_DATA simple_conf_module = { STANDARD20_MODULE_STUFF, create_per_dir_config, /* create per-dir config structures */ NULL, /* merge per-dir config structures */ NULL, /* create per-server config structures */ NULL, /* merge per-server config structures */ cmds, /* table of config file commands */ simple_conf_register_hooks /* register hooks */ };
これは良い本だなぁ。