The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
=encoding utf-8

=head1 おなまえ

Moxy::Manual::HackingJA - Moxy hacking guide(ニホンゴ)

=head1 この文書はなにか

Moxy を Hack しようと考える人のための文書なのであって一般ユーザ向けではなく云々。

=head1 モジュール構成

=head2 Moxy.pm

コア。コンテキスト。

=head2 Moxy::Plugin.pm

プラグインのベースクラス。継承するとちょっと便利な機能が使えるようになるけど
必ず継承しなくちゃいけないってわけでもなかったりする。

=head2 Moxy::Plugin::*

いろいろ register_hook 呼ぶの人。load_plugins の段階で  register メソッドが呼ばれる
あたりは Plagger をまるぱくりしてるといえる。

=head2 Moxy::Plugin::*

HTTP::Request または HTTP::Response に対してなんらかの処理をする系のプラグイン。ほとんど
のものはこれ。

=head2 Moxy::Plugin::Server::*

サーバーとしてうごく部分。HTTP::Proxy のみ現在はサポートされています。他のもののサポートは
誰かつくってくれると嬉しいな。たとえば POE::Component::Server::HTTP とか。

=head2 Moxy::Storage.pm

ストレージ系のベースクラス。

=head2 Moxy::Storage::*

ストレージ。ストレージってのは、単なるハッシュのことだったりする。Storage の利用用途は
現在の UserAgent 情報を保存することだったりするので別に DBM_File とか使う必要はない。本質的には。
でも、HTTP::Proxy は都度 fork 実装なので、プロセス間での通信手段を適当に実装する手段として
DBM_File を使ってるというだけだったり。このへんは今後変化する可能性が高そうだ。

=head2 Moxy::Util

ユーティリティ関数が入るところ。が、今のところは文字コードの判別が入ってるだけ。しかも code は
Plagger::Util からのまるぱくりだったりするw

=head1 フックポイントについて

Moxy は Plagger や qpsmtpd のようなプラガブルな構成になっている。
プラグインを入れない状態では単なるプロキシサーバーとして動作する。

というわけで、フックポイントは Moxy のキモである。

現在 Moxy に設けられているフックポイントは大別すると2種類ある。
Moxy::Plugin::Server::* の中で設定されているフックポイントと
Moxy::Plugin::ControlPanel で設定されているフックポイントである。

Moxy::Plugin::Server::* で呼ばれるフックは

  リクエスト
    request_filter_process_agent ユーザーエージェントの設定
    request_filter               リクエストの処理
    request_filter_E             リクエストに対する処理(特定キャリヤ用)
  レスポンス
    response_filter              レスポンスボディに対する処理
    response_filter_E            レスポンスボディに対する処理(特定キャリヤ用)

といったところ。HTTP::Request と HTTP::Response に対して処理を行っている。

Moxy::Plugin::ControlPanel で呼ばれるのは control_panel というフックのみ。
これはコントロールパネルを生成する人なのでちょっと他のとは赴きが違う。

=head1 いいわけ

基本的に今日現在の情報を書いただけなので作者の気紛れによってフックポイントやらなんやらは
まだまだ変わる可能性があるし、この文書も obsolete になる可能性が多々あることを
いいわけしておく。

=head1 AUTHOR

Tokuhiro Matsuno.