libipmsg - IP Messenger library for UNIX - 仕様

目次


プロトコル


プロトコルフォーマット

プロトコルの基本フォーマットは以下の通りです。
No項目説明libipmsgでは。。。
1バージョン現在のところ1固定
2パケット番号IPアドレス、ポート別にパケットの一意性を保証できるユニークな値。random(3)で生成しています。
3ユーザ名送信ホストのIPメッセンジャーを起動しているログオンユーザ名getpwuid_r(3)で取得される文字列
4ホスト名送信ホストのコンピュータ名gethostname(2)で取得される文字列
5コマンド番号メッセージIDとメッセージオプションの論理和を指定します。メッセージオプションはメッセージIDにより異なります。
6オプション部メッセージ固有のオプション文字列を設定します。オプション部はコマンドにより異なります。

メッセージ

No 項目 説明
1 メッセージID(値) IPMSG_NOOPERATION (0x00000000UL)
メッセージ 無操作
送信時補足説明 通信できることを確認するためにパケットを送信します。
受信時補足説明 受信時は何もしません。
コマンド番号
オプション文字列の説明
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:1738739518:root:falcon:0:(\00)
2 メッセージID(値) IPMSG_BR_ENTRY (0x00000001UL)
メッセージ サービスにエントリ
送信時補足説明 サービスにログインしたい場合に送信します。
受信時補足説明 このメッセージを受け取ったホストはパケットを元に自らのホストリストに追加し送信元のホストにIPMSG_ANSENTRYを送信します。
コマンド番号
オプション文字列の説明
  • グループの設定がない場合、
    ニックネーム\0
  • グループの設定がある場合、
    ニックネーム\0グループ名\0
  • ニックネームの設定がない場合はログインユーザ名になります。
関連API IpMessengerAgent::Login()
プロトコル UDP(ブロードキャスト)
libipmsgでのサポート
送信電文の例 1:131835229:nikikuni:falcon:6291713:nikikuni(\00)Group1(\00)
3 メッセージID(値) IPMSG_BR_EXIT (0x00000002UL)
メッセージ サービスから抜ける
送信時補足説明 サービスからログアウトしたい場合に送信します。
受信時補足説明 このメッセージを受け取ったホストはパケットを元に自らのホストリストから送信元のホストを削除します。
コマンド番号
オプション文字列の説明
関連API IpMessengerAgent::Logout()
プロトコル UDP(ブロードキャスト)
libipmsgでのサポート
送信電文の例 1:861706453:nikikuni:falcon:6291714:(\00)
4 メッセージID(値) IPMSG_ANSENTRY (0x00000003UL)
メッセージ エントリを認識したことを通知
送信時補足説明 IPMSG_BE_ENTRYへの応答として送信元のホストに送信します。
受信時補足説明 このメッセージを受け取ったホストは同一サービスにログインしているホストとしてパケットを元に自らのホストリストに追加します。
コマンド番号
オプション文字列の説明
  • グループの設定がない場合、
    ニックネーム\0
  • グループの設定がある場合、
    ニックネーム\0グループ名\0
  • ニックネームの設定がない場合はログインユーザ名になります。
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:400575632:root:falcon:6291459:nikikuni(\00)Group1(\00)
5 メッセージID(値) IPMSG_BR_ABSENCE (0x00000004UL)
メッセージ 不在モード変更
送信時補足説明 不在モードに設定したい場合に送信します。
受信時補足説明 このメッセージを受け取ったホストはパケットを元に自らのホストリストを不在に更新します。
コマンド番号
オプション文字列の説明
  • グループの設定がない場合、
    ニックネーム[不在モード文字列]\0
  • グループの設定がある場合、
    ニックネーム[不在モード文字列]\0グループ名\0
  • ニックネームの設定がない場合はログインユーザ名になります。
関連API IpMessengerAgent::SetAbsence(),IpMessengerAgent::ResetAbsence()
プロトコル UDP(ブロードキャスト)
libipmsgでのサポート
送信電文の例 1:1174981878:root:falcon:6291716:nikikuni[(\89)(\ef)(\8b)c(\92)(\86)](\00)Group1(\00)
6 メッセージID(値) IPMSG_BR_ISGETLIST2 (0x00000018UL)
メッセージ ホストリスト送出可能メンバの探索
送信時補足説明 ホストリストを取得したい場合に送信します。
受信時補足説明 このメッセージを受け取ったホストはIPMSG_OKGETLISTを送信元のホストに送信します。
コマンド番号
オプション文字列の説明
関連API IpMessengerAgent::UpdateHostList()
プロトコル UDP(ブロードキャスト)
libipmsgでのサポート
送信電文の例 1:801798212:root:falcon:6291480:(\00)
7 メッセージID(値) IPMSG_OKGETLIST (0x00000011UL)
メッセージ ホストリスト送出可能通知
送信時補足説明 IPMSG_BR_ISGETLIST2への応答としてホストリストを送出可能であることを送信元のホストに送信します。
受信時補足説明 このメッセージを受け取ったホストは送信元のホストに開始位置を"0"としてIPMSG_GETLISTを送信します。
コマンド番号
オプション文字列の説明
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:801798212:root:falcon:6291480:(\00)
8 メッセージID(値) IPMSG_GETLIST (0x00000012UL)
メッセージ ホストリスト送出要求
送信時補足説明 IPMSG_OKGETLISTへの応答として送信元のホストにホストリストを要求するメッセージを送信します。
受信時補足説明 このメッセージを受け取ったホストは送信元のホストにIPMSG_ANSLISTに乗せてホストリストを送信します。
コマンド番号
オプション文字列の説明
ホストリスト開始位置
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:1611859237:root:falcon:6291474:(\00)
9 メッセージID(値) IPMSG_ANSLIST (0x00000013UL)
メッセージ ホストリスト送出
送信時補足説明 IPMSG_GETLISTへの応答として自ホストのホストリストを送信します。
受信時補足説明 このメッセージを受け取ったホストはパケットで受け取ったホストリストを元に自らのホストリストに追加します。またホストリスト個数がゼロになるまでの間、ホストリスト開始位置をホストリスト個数分すすめた値をIPMSG_GETLISTを通じて送信します。
コマンド番号
オプション文字列の説明 まず、このパケットで送出するホストリストの位置/個数情報がきて、
ホストリスト開始位置(\a)ホストリスト個数(\a)
続けて自ホストが保持しているホストリストの要素を送出する要素分、以下のフォーマットで繰り返す。
ログイン名(\a)ホスト名(\a)コマンド番号(\a)IPアドレス(\a)ポート番号(リトルエンディアン)(\a)ニックネーム(\a)グループ
各要素とも空の場合は(\b)が一文字設定されます。
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:1187183369:Administrator:ABCDEFGHOST:19: 0(\07) 2(\07)
Administrator(\07)ABCDEFGHOST(\07)6291456(\07)192.168.1.158(\07)30985(\07)nickname(\07)(\08)
(\07)root(\07)falcon(\07)6291456(\07)192.168.1.2(\07)30985(\07)nikikuni(\07)Group1(\07)(\00)実際には一行
10 メッセージID(値) IPMSG_SENDMSG (0x00000020UL)
メッセージ メッセージの送信
送信時補足説明 メッセージを送信したい場合に送信します。
受信時補足説明 このメッセージを受け取ったホストは送信元のホストに受信したIPMSG_SENDMSGのパケット番号をIPMSG_RECVMSGに乗せて送信します。
コマンド番号 メッセージIDの他に
  • IPMSG_SECRETOPT(封書)
  • IPMSG_NOLOGOPT(ログに残さない(ことを推奨))
  • IPMSG_READCHECKOPT(封書確認(8 版から追加))
  • IPMSG_PASSWORDOPT(錠前)
  • IPMSG_AUTORETOPT(自動応答(ピンポン防止用))
が指定できます。
オプション文字列の説明
  • 送信メッセージ。
  • メッセージが暗号化されている場合は暗号化メッセージの16進表現。
送信/暗号化メッセージには添付ファイルの情報を含みません。添付ファイルは送信/暗号化メッセージに続いて以下のようなフォーマットで設定します。
送信/暗号化メッセージ(\00)ファイルID:ファイル名:サイズ():タイムスタンプ(16進表現):属性:拡張属性(\a)
以下添付個数分繰り返し。。。
  • ファイルIDは一意な番号
  • ファイル名はディレクトリを含まないファイル名またはディレクトリ名そのもの
  • サイズは16進表現で送付されます。
  • タイムスタンプは1970/1/1 0:0:0からの秒数(UNIXでは一般的)の16進表現です。
  • 属性には以下の物があります。(16進表現です。拡張属性が無い場合は属性の直後の":"(コロン)は含まれません。)
    • IPMSG_FILE_DIR(ディレクトリ)
    • IPMSG_FILE_REGULAR(レギュラーファイル)
    • IPMSG_FILE_RETPARENT(親ディレクトリに戻る)
    • IPMSG_FILE_SYMLINK(シンボリックリンク:未サポート)
    • IPMSG_FILE_CDEV(キャラクタデバイス:未サポート)
    • IPMSG_FILE_BDEV(ブロックデバイス:未サポート)
    • IPMSG_FILE_FIFO(FIFO:未サポート)
    • IPMSG_FILE_RESFORK(リソースフォーク(Mac OS専用):未サポート)
  • 拡張属性は任意です。無い場合があります。(libipmsgから送信することはありません。)以下のフォーマットとなります。
    [:extAttr1=val1[,val2]][:extAttr2=val3[,val4]]
libipmsgでは暗号強度に合わせてなるべく強い暗号化をかけるように暗号化方法を自動選択します。
IPMSG_RECVMSGが受信されるまで最大5回のリトライを行います。リトライ回数を超えた場合の動作はアプリケーションに依ります。
関連API IpMessengerAgent::SendMsg
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:1187100869:Administrator:ABCDEFGHOST:4194592:20002:a89e9106f64b99585a
7578b8c46521f5e4a58286ecbb9a1c4336dd5f0757ea5628b057a2ca666be949336563
8bd1bb2fee05e17a2a1cb77958d8b7ea183f5fea45b53d79d444416cc3540f51313678b
ffcee6c18e52450ca93106bf1393b9b9c010e20fd04ed0edb3d22d27ae14e6e7c2d9e19
655c07d567a3b151b2ee427eae:0afefbcdfbbf314ef9eb646e8b723fdb(\00)
実際には一行
11 メッセージID(値) IPMSG_RECVMSG (0x00000021UL)
メッセージ メッセージの受信確認
送信時補足説明 IPMSG_SENDMSGの応答として自動的に送信します。
受信時補足説明 このメッセージを受け取ったホストはパケット番号に対応するIPMSG_SENDMSGのリトライを中止してメッセージを送信済みメッセージと認識します。
コマンド番号
オプション文字列の説明
パケット番号
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:1187100873:Administrator:ABCDEFGHOST:33:400259212(\00)
12 メッセージID(値) IPMSG_READMSG (0x00000030UL)
メッセージ 封書の開封通知
送信時補足説明 封書メッセージを開封したときに、IPMSG_SENDMSGの応答として送信します。
受信時補足説明 このメッセージを受け取ったホストはパケット番号に対応するIPMSG_SENDMSGのメッセージを開封済みメッセージと認識します。また、IPMSG_READCHECKOPTがついている場合はIPMSG_ANSREADMSGを自動的に送信します。
コマンド番号
オプション文字列の説明
パケット番号
関連API IpMessengerAgent::ConformMessage()
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:1187100872:Administrator:ABCDEFGHOST:48:1428346209(\00)
13 メッセージID(値) IPMSG_DELMSG (0x00000031UL)
メッセージ 封書破棄通知
送信時補足説明 メッセージを破棄したときに、IPMSG_SENDMSGの応答として送信します。
受信時補足説明 このメッセージを受け取ったホストはパケット番号に対応するIPMSG_SENDMSGのメッセージを破棄します。
コマンド番号
オプション文字列の説明
パケット番号
関連API IpMessengerAgent::DeleteNotify()
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:625365700:root:falcon:49:20002(\00)
14 メッセージID(値) IPMSG_ANSREADMSG (0x00000032UL)
メッセージ 封書の開封確認(8 版から追加)
送信時補足説明 IPMSG_READCHECKOPTがついている場合、IPMSG_READMSGの応答として自動的に送信します。
受信時補足説明 受信時は特に何もしません。
コマンド番号
オプション文字列の説明
パケット番号
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例
15 メッセージID(値) IPMSG_GETFILEDATA (0x00000060UL)
メッセージ 添付ファイル要求
送信時補足説明 ファイルをダウンロードしたいときにTCPソケットを通じて送信します。応答としてファイルの内容がソケットを通じて受信されるので、アプリケーションはファイルに保存します。
受信時補足説明 このメッセージを受け取ったホストはパケット番号、ファイルIDに対応するファイルの内容を開始位置から送信します。
コマンド番号
オプション文字列の説明
パケット番号:ファイルID:開始位置
関連API RecievedMessage::DownloadFile()
プロトコル TCP
libipmsgでのサポート △(自ホストからダウンロードできません)
送信電文の例
16 メッセージID(値) IPMSG_RELEASEFILES (0x00000061UL)
メッセージ 添付ファイル破棄
送信時補足説明 ダウンロードが完了した等の理由でファイルが不要になった場合、送信します。
受信時補足説明 このメッセージを受け取ったホストはパケット番号、ファイルIDに対応するファイル要素を送信済みメッセージから廃棄します。
コマンド番号
オプション文字列の説明
パケット番号:ファイルID
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例
17 メッセージID(値) IPMSG_GETDIRFILES (0x00000062UL)
メッセージ 添付階層ファイル要求
送信時補足説明 ディレクトリをダウンロードしたいときにTCPソケットを通じて送信します。応答としてディレクトリの構成情報/内容がソケットを通じて受信されるので、アプリケーションはファイルに保存します。
構成情報は以下のフォーマットで送信します。
ヘッダーサイズ:ファイル名:サイズ:タイムスタンプ:属性:拡張属性:ファイル内容
以下ディレクトリ構成を再帰的に繰り返し全てのファイルに対しダウンロード操作を行う。
  • ヘッダーサイズはヘッダーサイズからファイル内容の直前の":"までの長さです。
  • ファイル名はディレクトリを含まないファイル名またはディレクトリ名そのもの
  • サイズは16進表現で送付されます。
  • タイムスタンプは1970/1/1 0:0:0からの秒数(UNIXでは一般的)の16進表現です。
  • 属性には以下の物があります。(16進表現です。拡張属性が無い場合は属性の直後の":"(コロン)は含まれません。)
    • IPMSG_FILE_DIR(ディレクトリ)
    • IPMSG_FILE_REGULAR(レギュラーファイル)
    • IPMSG_FILE_RETPARENT(親ディレクトリに戻る)
    • IPMSG_FILE_SYMLINK(シンボリックリンク:未サポート)
    • IPMSG_FILE_CDEV(キャラクタデバイス:未サポート)
    • IPMSG_FILE_BDEV(ブロックデバイス:未サポート)
    • IPMSG_FILE_FIFO(FIFO:未サポート)
    • IPMSG_FILE_RESFORK(リソースフォーク(Mac OS専用):未サポート)
  • 属性に応じて以下の処理を行わなければなりません。(libipmsgでは自動的に行います。)
    • 属性にIPMSG_FILE_DIRが指定されている場合は、ディレクトリに既に潜ったものとして後続のファイルの構成情報が続く。
    • 属性にIPMSG_FILE_REGULARが指定されている場合は、ファイル内容の保存を行う。
    • 属性にIPMSG_FILE_RETPARENTが指定されている場合は、上位のディレクトリに既に戻ったものとして後続のファイルの構成情報が続く。
  • 拡張属性は任意です。無い場合があります。(libipmsgから送信することはありません。)以下のフォーマットとなります。
    [:extAttr1=val1[,val2]][:extAttr2=val3[,val4]]
受信時補足説明 このメッセージを受け取ったホストはパケット番号、ファイルIDに対応するディレクトリの構成情報/内容を送信します。
コマンド番号
オプション文字列の説明
パケット番号:ファイルID
関連API RecievedMessage::DownloadDir()
プロトコル TCP
libipmsgでのサポート △(自ホストからダウンロードできません)
送信電文の例
18 メッセージID(値) IPMSG_GETINFO (0x00000040UL)
メッセージ IPMSGバージョン情報取得
送信時補足説明 特定のホストのバージョン情報が取得したい場合に送信します。
受信時補足説明 このメッセージを受け取ったホストはIPMSG_SENDINFOを送信元のホストに自動的に送信します。
コマンド番号
オプション文字列の説明
関連API IpMessengerAgent::GetInfo()
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:943428094:root:falcon:64:(\00)
19 メッセージID(値) IPMSG_SENDINFO (0x00000041UL)
メッセージ IPMSGバージョン情報応答
送信時補足説明 IPMSG_GETINFOの応答として自動的にバージョン情報を送信します。
受信時補足説明 このメッセージを受け取ったホストはバージョン情報を得られます。プログラムの振る舞いはアプリケーションに依ります。
コマンド番号
オプション文字列の説明
バージョン情報
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:1480910763:root:falcon:6291521:IpMessengerAgent for C++ Unix Version 0.1.5(\00)
20 メッセージID(値) IPMSG_GETABSENCEINFO (0x00000050UL)
メッセージ 不在通知文取得
送信時補足説明 特定のホストの不在詳細文字列が取得したい場合に送信します。
受信時補足説明 このメッセージを受け取ったホストはIPMSG_SENDABSENCEINFOを送信元のホストに自動的に送信します。
コマンド番号
オプション文字列の説明
関連API IpMessengerAgent::GetAbsenceInfo()
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:2033493194:root:falcon:80:(\00)
21 メッセージID(値) IPMSG_SENDABSENCEINFO (0x00000051UL)
メッセージ 不在通知文応答
送信時補足説明 IPMSG_GETABSENCEINFOの応答として自動的に不在詳細文字列を送信します。
受信時補足説明 このメッセージを受け取ったホストは不在詳細文字列を得られます。プログラムの振る舞いはアプリケーションに依ります。
コマンド番号
オプション文字列の説明
不在詳細文字列
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:137419912:root:falcon:6291537:Not Absence mode(\00)
22 メッセージID(値) IPMSG_GETPUBKEY (0x00000072UL)
メッセージ RSA 公開鍵取得
送信時補足説明 新たにホストリストが追加されたときに自動的に送信します。
受信時補足説明 このメッセージを受け取ったホストはIPMSG_ANSPUBKEYを送信元ホストに自動的に送信します。
コマンド番号
オプション文字列の説明
暗号化能力
暗号化能力として以下のオプションを相手の暗号強度に合わせて
  • IPMSG_RSA_512
  • IPMSG_RSA_1024
  • IPMSG_RSA_2048
  • IPMSG_RC2_40
  • IPMSG_RC2_128
  • IPMSG_RC2_256
  • IPMSG_BLOWFISH_128
  • IPMSG_BLOWFISH_256
が指定できる仕様となっていますが、Windows版での実装は以下のオプションしか使用できません。
  • IPMSG_RSA_512
  • IPMSG_RSA_1024
  • IPMSG_RC2_40
  • IPMSG_BLOWFISH_128
libipmsgではCrypt.cpp内の"#define WINCOMPAT"を削除してリコンパイルすることで以下のオプションも使えるようになります。
  • IPMSG_RSA_2048
  • IPMSG_RC2_128
  • IPMSG_RC2_256
  • IPMSG_BLOWFISH_256
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:1597161013:nikikuni:falcon:114:21003(\00)
23 メッセージID(値) IPMSG_ANSPUBKEY (0x00000073UL)
メッセージ RSA 公開鍵応答
送信時補足説明 IPMSG_GETPUBKEY の応答として暗号化メソッドと公開鍵を送信元のホストに送信します。
受信時補足説明 このメッセージを受け取ったホストは送信元のホストの暗号化メソッドと公開鍵を得られます。ホストリストの対応ホストの公開鍵情報に自動的に更新されます。
コマンド番号
オプション文字列の説明
暗号化能力:メソッド-公開鍵
暗号化能力として以下のオプションを相手の暗号強度に合わせて
  • IPMSG_RSA_512
  • IPMSG_RSA_1024
  • IPMSG_RSA_2048
  • IPMSG_RC2_40
  • IPMSG_RC2_128
  • IPMSG_RC2_256
  • IPMSG_BLOWFISH_128
  • IPMSG_BLOWFISH_256
が指定できる仕様となっていますが、Windows版での実装は以下のオプションしか使用できません。
  • IPMSG_RSA_512
  • IPMSG_RSA_1024
  • IPMSG_RC2_40
  • IPMSG_BLOWFISH_128
libipmsgではCrypt.cpp内の"#define WINCOMPAT"を削除してリコンパイルすることで以下のオプションも使えるようになります。
  • IPMSG_RSA_2048
  • IPMSG_RC2_128
  • IPMSG_RC2_256
  • IPMSG_BLOWFISH_256
続けて、メソッド、公開鍵を16進表現で送信します。
関連API
プロトコル UDP
libipmsgでのサポート
送信電文の例 1:1652553544:root:falcon:115:21003:010001-C1E36732DD8B3A53A05CD7F9B6525E65B9DF
F5CF7DD92086CDD2711932F45DE77ECB3F7031C92DA6F133A6069C13422EA85EE472CA
0A4576D41DFE648A0494233F7064AA11316E1FB7F8C0DDB14629922D584BE224F7EEF5A
1931270BAF3B73E1D7B8F7EE88840C081B0ED627B280FF324DECC747FFFD794BE50A2E
784FDE913(\00)実際には一行

プロトコルフロー

ログイン

ホスト1 メッセージ ホスト2
サービスにログイン IPMSG_BR_ENTRY
(ブロードキャスト)
ホストリストに追加し、ホスト2の情報を送出
ホストリストに追加 IPMSG_ANSENTRY

ログアウト

ホスト1 メッセージ ホスト2
サービスからログアウト IPMSG_BR_EXIT
(ブロードキャスト)
ホストリストから削除

ホストリストの取得

ホスト1 メッセージ ホスト2
ホストリスト要求 IPMSG_BR_GETLIST2
(ブロードキャスト)
送出可能なホストリストがあるか確認し送出可能であることを通知
送出可能であることを確認し、ホストリストを要求 IPMSG_OKGETLIST
IPMSG_GETLIST
要求に応じてホストリストを返信
ホストリストに追加 IPMSG_ANSLIST

メッセージの送信(通常)

ホスト1 メッセージ ホスト2
メッセージの送信 IPMSG_SENDMSG 受信できたら受信通知を行う
メッセージを送信済みメッセージとして認識 IPMSG_RECVMSG
送信済みメッセージを廃棄 IPMSG_DELMSG
受信メッセージを破棄した

メッセージの送信(封書)

ホスト1 メッセージ ホスト2
メッセージの送信 IPMSG_SENDMSG 受信できたら受信通知を行う
メッセージを送信済みメッセージとして認識 IPMSG_RECVMSG
送信済みメッセージを開封済みメッセージとして認識 IPMSG_READMSG
封書メッセージを開封した
開封済みメッセージを廃棄 IPMSG_DELMSG
受信メッセージを破棄した

不在モード通知

ホスト1 メッセージ ホスト2
不在モードになった IPMSG_BR_ABSENCE
(ブロードキャスト)
ホストリストの対象ホストを不在モードに設定

バージョン情報取得

ホスト1 メッセージ ホスト2
バージョン情報要求 IPMSG_GETINFO 要求を受けてバージョン情報送出
バージョン情報取得 IPMSG_SENDINFO

不在詳細情報取得

ホスト1 メッセージ ホスト2
不在詳細情報要求 IPMSG_GETABSENCEINFO 要求を受けて不在詳細情報送出
不在詳細情報取得 IPMSG_SENDABSENCEINFO

RSA 公開鍵取得

ホスト1 メッセージ ホスト2
RSA 公開鍵要求 IPMSG_GETPUBKEY 要求を受けてRSA 公開鍵送出
RSA 公開鍵取得 IPMSG_ANSPUBKEY

ファイルのダウンロード

ホスト1 メッセージ ホスト2
受信したメッセージからファイルダウンロード要求 IPMSG_GETFILEDATA
(TCP/IP)
要求を受けてファイルを受信したストリームに送出
ファイル保存 ファイルデータ

ディレクトリのダウンロード

ホスト1 メッセージ ホスト2
受信したメッセージからディレクトリダウンロード要求 IPMSG_GETFILEDATA
(TCP/IP)
要求を受けて指定ディレクトリのファイルヘッダー、ファイルデータを受信したストリームに送出
ファイル保存 ファイルヘッダー、ファイルデータ

API

libipmsgにはエージェント(代理人)と呼ばれるオブジェクトがアプリケーションに代わって処理を代行します。
また、イベントを通じて今、何が発生しているかをイベントパラメータを通じて情報を取得することが出来ます。
libipmsgアプリケーションプログラミングとはプログラムからのエージェントへの依頼とイベントの実装することで実現されます。
メッセージの受信は非同期に発生しますが、メッセージはキューイングされ順次処理されます。
※メッセージの受信に付随して発生するイベントも非同期となりますので注意が必要です。

エージェント

まだ書きかけの項目です。

イベント

libipmsgを使用するアプリケーションはIpMessengerEventを継承して処理を実装します。
まだ書きかけの項目です。