3

Apache httpdフレームワークに、Apache構成ファイルからカスタムApacheモジュール(C APIを使用して記述)にカスタムパラメーターを渡すことができるメカニズムはありますか?本当に必要なのはキーと値のペアだけです。

confファイルのようなもの:

ConfigParameter foo bar

そして、コードで:

string foo = GetApacheConfigParameter("foo"); // = "bar"
4

1 に答える 1

5

いいえ; 直接ではありません。汚いハックは

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. 良い例があります。

于 2012-11-19T20:42:45.617 に答える