       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を参照してください(苦笑)


