enhydraの日記: 邪道のような王道のような
日記 by
enhydra
仕事でとあるApacheモジュールのハンドラを機能拡張したいのだが、その既存の関数が無駄に大きく機能分解されていないのでフツーに再利用できない。。。ヽ(`Д´)ノ
認証後、指定したURL+認証情報にredirectするハンドラだったので、このハンドラをラップして
int rc;
char *org_url, *new_url;/* 元になるハンドラを実行して、認証が完了して無いならそのままreturn */
rc = old_handler(r, url);
org_url = ap_table_get(r->headers_out, "Location");
if (strncmp(url, org_url, strlen(url)) != 0) {
return rc;
}/* 新しい付加情報を追加してredirect */
new_url = ap_pstrcat(r->pool, org_url, "&", new_args, NULL);
ap_table_set(h->headers_out, "Location", new_url);
return REDIRECT;
これで元のハンドラをまったく弄らずに機能を追加できるし、元のハンドラが変更されても基本的に無関係。デコレータパターンですとか言えば聞こえはいいが、この場合は裏技的な気もしなくは無い。。。う~~~~~ん。
あぁ、新参者(ひらしゃいん)は辛し。
邪道のような王道のような More ログイン