2004年06月16日(水) [過去の今日]
#1 irchat-pj の DCC
なんかしらん、kernelを2.6系列にあげてからチャット専用に突っ込んであるmuleでDCC SENDできなくなった。ポートとアドレスを固定するためにかなり怪しいhackを仕込んだのでそのせいかしら。
というわけで現実逃避がてらirchat-pjのDCC周りを再点検。特にCで書かれたdccプログラムのソースや挙動を調べて行くと、前回意味のわからなかった、四つ目と五つ目の引数がようやく理解できた。
Usage: dcc file send <filename> <port> <ircserver>
usageにはこうある。四つ目の引数である<port>はDCCにおいて自分がlistenするポート、ircserverは恐らく自分のIPアドレスを調べるために、繋いでるIRCサーバを指定するのだろう。つまり、IPアドレスに関してはこのdccプログラムに任せて、NAT BOXというか、ルータのの内側からDCCをするためにはポートさえ固定してやればいい、ということになる。 *1
しかし、オプショナルな四つ目五つ目の引数はirchat-pjでは利用されてないようだ。せっかくだからきっちり利用させていただき、 DCCポート固定パッチ を作ってみた。
(setq irchat-dcc-port "6667")
とかいう感じでポートを指定してそこに穴を開けておいてやれば、DCC SENDが通る。普通に繋ぐ分にはこれで充分なはずだ。
うちの場合、変な位置にplumを挟んで繋いでいるのでこれだけではダメで、plum.confに、
+ ctcp/dcc/nat.plm ctcp.dcc.nat.mapping: 192.168.xxx.xxx xxx.xxx.xxx.xxx
という感じでローカルアドレスをグローバルアドレスにマッピングしてやる必要があった。他のマシンからplumに繋いでいる場合でも、それぞれにポートを転送してやり、マッピングしてやればちゃんとDCCが通る。便利便利。
というわけで見事解決、と思いきや、これでもmuleでは動かない。dccプロセスは上がってるのだが、どうにもDCC SENDをサーバに送ってくれないようだ。思い切ってノーマルなirchat-pjを突っ込んでも見たのだが、やはりダメ。要するに2.6カーネル系列上でのmuleの挙動の問題なのかもしれない。コンパイルしなおせば動くのかなあ。まあ、メイン環境がemcws21になっているので、チャット専用Emacsをemacs20-dlにしちゃってもいいのだけども。マルチバイト文字が入ったファイルをDCCできない問題も解決するだろうし。
(@404)