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をキャンセルする。
該当ユーザに対して特定ポートを開示していた場合特定ポートの閉鎖を行なう