CTCPに付いての解説って少ないよな...

  • Client To Client Protocol

CTCP USERINFO

CTCP TIME
nick!user@addr PRIVMSG :\001TIME\001
nick!user@addr NOTICE :\001TIME time-infomation\001
ローカルの時間を返します。

CTCP PING
nick!user@addr PRIVMSG :\001PING\001
nick!user@addr NOTICE :\001PING\001
nick!user@addr NOTICE :\001PING time-signature\001
時差を得るために使用する
任意の数値(localtime?)をNoticeで返答する

CTCP PART
nick!user@addr PRIVMSG :\001PART channel\001
plum等に実装されている
channelから抜ける

CTCP FINGER
ユーザ情報/時差を取得する

CTCP ECHO
nick!user@addr PRIVMSG :\001ECHO\001
nick!user@addr NOTICE :\001ECHO hogeogoeog\001
ECHO実装。タイムラグ測定。Flood用

CTCP COMMENT
ユーザ情報(つぶやき)を取得する

CTCP CLIENTINFO
クライアントが使用できるCTCPコマンド一覧を帰す。

CTCP VERSION
クライアントの情報を返す。

CTCP ACTION
nick!user@addr PRIVMSG :\001ACTION\001
行動してる内容等を発言するときに使う。

  • Direct Client Connection

CTCP DCC CHAT
nick!user@addr PRIVMSG :\001CHAT chat ip port\001
P2Pによるチャット要求

CTCP DCC SEND
nick!user@addr PRIVMSG :\001DCC SEND name ip port size\001
P2Pによるファイル送信
送信元が発行する
問題発生回避のためname にはCTCPエンコードしたファイル名を入れる
しかし、メッセージ後ろから解析すると問題は起こらない
ipにはx.x.x.x形式も利用できるが、これが利用できるクライアントは少ない。
通常ネットワークオーダに変換した10進の32bit数値が使用される
またほぼすべてのクライアントでipにはFQDNによるHost.domain記述は使用できない。
送信側はファイル送信とACKの確認
受信側はACK送信を行なう。ACKはCTCPレベルでの物でファイルサイズをネットオーダにしたもの。
ACK 0 の時はACKを送信しない。ACKに0を送ると異常終了するクライアントもある。

CTCP DCC RESUME
nick!user@addr PRIVMSG :\001DCC RESUME name port size\001
DCC SEND元にファイルを続きから送ってほしいと伝える。
送信元にsize分ファイルをseekしてもらう。
ファイル送信元は nick!user@addrとportがsendの時と一致した場合にのに作動する。
一致しない場合直ちにDCC CANCELを発行する。
基本的にnameにはファイル名を入れなくても良い。またクライアントによってはファイル名を固定(FILE等)にしないと動作しない物も有る。
送信先はDCC ACCEPTを待つ

CTCP DCC ACCEPT
nick!user@addr PRIVMSG :\001DCC ACCEPT name port size\001
RESUME要求に対する許可応答
ファイルを目的位置までseek後に送信先に送る
portはlistenしてる番号

CTCP DCC CANCEL
nick!user@addr PRIVMSG :\001DCC CANCEL name ip port\001
DCCをキャンセルする。
該当ユーザに対して特定ポートを開示していた場合特定ポートの閉鎖を行なう