Home > Apache

Apache Archive

【Apache】hello_world_handlerとhello_world_register_hooksについて

前回書いたApacheモジュールの関数に関しての説明がなかったので、調べて説明してみる。

hello_world_handler

実際の処理をするハンドラ。
モジュール内ではハンドラ名を判定したり、Content-Typeを決めたり、文字列を設定して返却したりしている。

hello_world_register_hooks

Apache本体に登録されてここからhello_world_hanlerを呼び出す為のもの(かな)。

【実際のコード】

ap_hook_handler(hello_world_handler, NULL, NULL, APR_HOOK_MIDDLE);

ap_hook_handler

フック関数の登録処理を行うもの。

http://blog.livedoor.jp/matssaku/archives/50421540.html

【Apache】モジュールを作成

サンプルでモジュールを作成したのでコードを貼付けて解析していきます。
mod_hello_worldを作成しました。

#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"

/* The sample content handler */
static int hello_world_handler(request_rec *r)
{
    if (strcmp(r->handler, "hello_world")) {
        return DECLINED;
    }
    r->content_type = "text/html";      

    if (!r->header_only)
        ap_rputs("The sample page from mod_hello_world.c\n", r);
    return OK;
}

static void hello_world_register_hooks(apr_pool_t *p)
{
    ap_hook_handler(hello_world_handler, NULL, NULL, APR_HOOK_MIDDLE);
}

/* Dispatch list for API hooks */
module AP_MODULE_DECLARE_DATA hello_world_module = {
    STANDARD20_MODULE_STUFF,
    NULL,                  /* create per-dir    config structures */
    NULL,                  /* merge  per-dir    config structures */
    NULL,                  /* create per-server config structures */
    NULL,                  /* merge  per-server config structures */
    NULL,                  /* table of config file commands       */
    hello_world_register_hooks  /* register hooks                      */
};

request_rec *r

構造体でinclude/httpd.hの中で定義されている。
下記に記載されていないものでは
r->pool(リクエスト毎のメモリプール)、r->args(QUERY_STRINGの値)などがある。

r->handler

処理するハンドラの名前

strcmp(a, b)

aとbの文字列を比較している。

DECLINED

次のモジュールに処理を任せるということらしい。

r->content_type

Content-Typeヘッダ

r->header_only

HEADリクエストかどうかの判定

ap_rputs

文字を出力する為の関数

return OK

処理成功

【Apache】Apacheをもうちょっと理解してみる

Apacheをもっと深く理解したいと思い、以下の記事を読んでいます。


井上の日誌 -Apacheの話-

Apacheのソースコードにも触れていてまだよくわからないですが、とりあえず読んでいます。

目標は自分でApacheモジュールを作れればよいなと。

ほぼ挫折すること120%な気もしますが、、、とりあえず時間見つけてやっていきます。

ホーム > Apache

Search
Feeds
Meta

Return to page top