IP Messenger 通信プロトコル仕様(ドラフト4版) 96/02/21 Modify 97/02/10 H.Shirouzu shirouzu@ntt-it.co.jp 概要 UDP Portを使用した、メッセージ送受信サービスです 特徴 TCP/IPが使えれば、OSの種類を問いません。自分のいるネットワーク 内(および指定のネットワーク)で、動的なメンバ認識ができます。 メッセージ送信そのものは、IP接続している全メンバに対し行えます。 また、送信時も固まることなく、軽快です。 詳細 UDPポート(default:2425)を使用して、以下の方法で処理します。 1.コマンド 1) コマンド種類( command & 0xff ) IPMSG_NOOPERATION 無操作 IPMSG_BR_ENTRY サービスにエントリー(起動時にBroadcast) IPMSG_BR_EXIT サービスから抜ける(終了時にBroadcast) IPMSG_ANSENTRY サービスにエントリーを認識 IPMSG_BR_ABSENCE 不在モード変更 IPMSG_BR_ISGETLIST ホストリスト送出可能メンバの探索 IPMSG_OKGETLIST ホストリスト送出可能通知 IPMSG_GETLIST ホストリスト送出要求 IPMSG_ANSLIST ホストリスト送出 IPMSG_SENDMSG メッセージの送信 IPMSG_RECVMSG メッセージの受信確認 IPMSG_READMSG 封書の開封通知 IPMSG_DELMSG 封書破棄通知 IPMSG_GETINFO IPMSGバージョン情報取得 IPMSG_SETINFO IPMSGバージョン情報応答 2) オプションフラグ種類( command & 0xffffff00 ) IPMSG_SENDCHECKOPT 送信チェック IPMSG_SECRETOPT 封書 IPMSG_BROADCASTOPT ブロードキャスト(同報) IPMSG_MULTICASTOPT マルチキャスト(複数選択) IPMSG_NOPOPUPOPT ノンポップアップ受信(受信側が送信側へ) IPMSG_AUTORETOPT 自動応答(ピンポン防止用) IPMSG_RETRYOPT 再送フラグ IPMSG_PASSWORDOPT 錠前 IPMSG_DIALUPOPT ダイアルアップ IPMSG_NOLOGOPT ログに残さない IPMSG_NEWMUTIOPT ニューバージョンマルチキャスト IPMSG_ABSENCEOPT 不在モード IPMSG_SERVEROPT サーバー IPMSG_NOADDLISTOPT BR_ENTRYしていない一時メンバ 2.コマンドフォーマット(すべて文字列として表現) 1) コマンド(フォーマットバージョン1) Ver(1):Packet番号 : 自User名 : 自Host名 : Command番号 : 追加部 2) 現在のコマンドフォーマットによるメッセージの送信文字列例 "1:0:shirouzu:jupiter:32:Hello" 3.コマンド処理概要 起動時に、IPMSG_BR_ENTRYコマンドをブロードキャストし、すでに立 ち上がっているIP Messengerに、新規参加を知らせます。 このブロードキャストにより、すでに立ち上がっているメンバは、 自分の送信先リストに新規参加メンバの情報を追加します。さらに、 IPMSG_ANSENTRYコマンドを新規参加メンバに対し、返信します。 新規参加メンバは、IPMSG_ANSENTRYを受信することにより、すでに 立ち上がっている全メンバの情報を得ることができます。 したがい、IPパケットが失われない限りは、全てのIP Messengerが 同一の送信先リストを保持できるというわけです。 IPMSG_BR_ENTRY, IPMSG_ANSENTRY, IPMSG_BR_ABSENCEコマンドでは、 不在モードにあわせて、IPMSG_ABSENCEOPTを立てます。さらに、 コマンドの追加部にはニックネームを入れます。IPMSG_BR_ABSENCEは、 不在モードが変化した時にブロードキャストします。 (グループ化拡張)上記コマンド群の'\0'終端につづいて、所属する グループ名を入れることができます。 メッセージの送信には、IPMSG_SENDMSGを使用し、受信した側は、確認 フラグが立っている場合に限り、IPMSG_RECVMSGを返します。 ブロードキャストによるメッセージ送信は、IPMSG_BOADCASTOPTを立て た IPMSG_SENDMSGを使用します。ブロードキャストもしくは自動応答 チェックが立っているパケットを受け取った場合、基本的にパケット を返しません。 封書チェックが立っているパケットを受け取った場合、開封され次第、 IPMSG_READMSGを送出します。 なお、一定時間以内にIPMSG_ANSENTRYなどの確認パケットが受け取れ ない場合、同一のパケットを再送出できます。リトライの回数・間隔 については、実装依存です。 なお、IPMSG_RECVMSG, IPMSG_READMSGなど、確認・応答パケットには、 その元となったパケットの番号を拡張部に入れます。 4. その他 1) 改行について 送出メッセージ内の改行文字は、UNIX形式に統一します('0x0a')。 必要に応じて、変換を行ってください。 2) デリミタ デリミタに':'を使っている関係上、ユーザ名、ホスト名領域には、 ':'を含む名前は、使えません。万一、自ホスト名が':'を含んでいる 場合、他の文字(たとえば';')などに置き換えて使用してください。 とくに必要性があるとは思えませんが、何か理由があれば、エスケー プシーケンスでも考えたいと思います。 3) 漢字コード 漢字コードは、SJISの使用を想定していますが、将来、UNIX対応など を考えるとまずいので、いずれ対応を考えたいと思います。 5. 連絡先 E-Mail shirouzu@ntt-it.co.jp まで。 附記 コマンドコードは、ipmsg.hを参照してください(苦笑)