Apache httpdフレームワークに、Apache構成ファイルからカスタムApacheモジュール(C APIを使用して記述)にカスタムパラメーターを渡すことができるメカニズムはありますか?本当に必要なのはキーと値のペアだけです。
confファイルのようなもの:
ConfigParameter foo bar
そして、コードで:
string foo = GetApacheConfigParameter("foo"); // = "bar"
いいえ; 直接ではありません。汚いハックは
SetEnv foo bar
設定ファイル内-そして
char * bar = getenv("foo");
モジュール内。それを超えるものはすべて、ディレクトリ、サーバーなどごとに適切な構造を使用する必要があります。通常、その構造には多くの特定のものが含まれます。あなたの場合、それはただ一つのテーブルになります。
したがって、ややクリーンな方法は、単にテーブルを使用することです-そしてそれをそのままにしておきます:
static const command_rec xxx_cmds[] = {
AP_INIT_TAKE2("ConfigParameter", add_configparam, NULL, RSRC_CONF,
"Arbitrary key value pair"),
{NULL}
};
static void * create_dir_config(apr_pool_t *p, char *dirspec ) {
return ap_table_palloc(p);
}
static const char *add_configparam(cmd_parms *cmd, void *mconfig,
char *key, char *val)
{
ap_table_t *pairs = (ap_table_rec *) mconfig;
ap_table_set(pairs, key, val);
return NULL;
}
AP_DECLARE_MODULE(xxxx_module) =
{
STANDARD20_MODULE_STUFF,
xxx_create_dir_config, /* per-directory config creator */
...
xxx_cmds, /* command table */
そして、これを使用したいすべての場所で次のことを行います。
apr_table_t * pairs = (apr_table_p *) ap_get_module_config(r->request_config, &xxxx_module);
また
apr_table_t * pairs = ap_get_module_config(s->module_config, &xxxx_module);
使用した場所に応じて、次を使用します。
char * bar = apr_table_get(pairs,"foo");
または類似。ポインタを取得するには、mod_example_hooksおよびさまざまなour_*呼び出しを参照してください。上記の例では、サーバーレベルの構成と構成のマージが省略されています。必要に応じてそれらを追加します-対応するテーブルのマージ呼び出しがあります。mod_alias.c et.al. 良い例があります。