INTERNET-DRAFT
有効期限: February 7, 1999

G. Mohr, Activerse
S. Aggarwal, Microsoft
M. Day, Lotus
A. Houri, Ubique
Y. Kohda, Fujitsu
D. Marvit, Fujitsu

7 August 1998

PIP-DEMO: An Interoperable Presence Information Protocol
draft-mohr-pip-pipdemo-00.txt

1. このメモの状態

このドキュメントは、インターネットドラフトである。インターネットドラフトはインターネット技術作業団体 (IETF)、その分野、作業グループの作業ドキュメントである。他のグループもまた、インターネットドラフトとして作業ドキュメントを配布しているかもしれないことに注意されたい。

インターネットドラフトは、最大 6 ヶ月有効なドラフトドキュメントであり、如何なる時でも更新、差し替え、他のドキュメントによる上書きが行われるかもしれない。インターネットドラフトを参照資料として使用したり、"作業中" として以外に引用することは不適切である。

現在のインターネットドラフト全体のリストを見るには、ftp.is.co.za (アフリカ)、ftp.nordu.net (ヨーロッパ)、munnari.oz.au (太平洋岸)、ftp.ietf.org (アメリカ東海岸)、ftp.isi.edu (アメリカ西海岸) 上にある、インターネットドラフトシャドウディレクトリ中の "1id-abstracts.txt" をチェックされたい。

このドキュメントの配布は制限されない。pip@iastate.edu の PIP 議論グループに、コメントを送られたい。そのグループの議論は、http://lists.fsck.com/cgi-bin/wilma/pip で遂行されている。

2. Abstract

PIP/0.2 は率直で、協調可能な方法で 'プレゼンス情報プロトコル' 要件を適えることに関する、あるアイデアのためのテストベッドとして設計されたデモンストレーションプロトコルである。この分野における以前の提案から抜き出すと、PIP/0.2 は以下を狙いとする。

  1. 基本的な 'プレゼンス情報' の共有を可能にする。
  2. 簡単なテキストメッセージングを可能にする。
  3. 理解や実装を容易なままにする。

PIP/0.2 は、特に以下を試みてはいない。

  1. 安全性
  2. スケーラブル/効率性
  3. 厳密な規定化

3. 内容

1. このメモの状態
2. Abstract
3. 内容
4. 導入
5. 名前付け
6. メッセージ形式
7. トランスポート
8. 文字符号化
9. メソッド
 9.1 SUBSCRIBE
 9.2 UNSUBSCRIBE
 9.3 CHANGE
 9.4 NOTIFY
 9.5 FETCH
10. 応答コード
11. ヘッダ
 11.1 HTTP/1.1 からの変更無しで採用されたヘッダ
 11.2 Duration
 11.3 Renew-Duration
 11.4 From
 11.5 Origin
 11.6 Sendback
 11.7 Subscription-ID
 11.8 Notify-class
 11.9 Regarding
12. リース
13. 購読
14. リダイレクション
15. ドメイン規約
 15.1 プレゼンス情報
 15.2 メッセージ交換
 15.3 リダイレクションの確立 (オプション)
16. プロクシ
17. セキュリティ
18.
 18.1 有効性の確立
 18.2 他者の購読
 18.3 インスタントメッセージ交換
 18.4 リダイレクションによる他者からの発行
19. 参照
20. 作者のアドレス


4. 導入

如何なる瞬間も、世界中の何百万人もの人々がインターネットと相互作用している。しかし、彼らはお互いに相互作用できるか。

大抵、それらはできない。なぜなら、インターネットは、人間がオンライン状態に関する動的な情報を宣伝したり、簡単なエンドポイントツーエンドポイントメッセージを交換するための標準や、広く導入されたメカニズムが欠如しているからである。

"バディリスト", "ピープルブラウザ", "ページャー", "同僚認識ツール" として知られているアプリケーションの急成長している分野は、これらの機能を提供することを目指している。しかしこれまでのところ、そうしたアプリケーションは専有のスキーム: ドキュメント化されていないプロトコル、閉じた名前空間、集中監視サービスセンターを使用している。

数多くの企業や個人は、"プレゼンス情報プロトコル", "PIP" という名前の、基本的なプレゼンスやメッセージング機能のための、オープンで相互作用可能な標準の採用に取り組み始めた。その取り組みは進行中であり、そのような標準が適合すべき要件を正式に列挙し、既存の技術や標準の適用性を調査し、この分野に焦点を絞った IETF 作業グループを開始した。

PIP/0.2 は率直で、協調可能な方法で "プレゼンス情報プロトコル" 要件を適えることに関する、あるアイデアのためのテストベッドとして設計されたデモンストレーションプロトコルである。この分野における以前の提案から抜き出すと、PIP/0.2 は以下を狙いとする。

  1. 基本的な "プレゼンス情報" の共有を可能にする。
  2. 簡単なテキストメッセージングを可能にする。
  3. 理解や実装を容易なままにする。

PIP/0.2 は、特に以下を試みてはいない。

  1. 安全性
  2. スケーラブル/効率性
  3. 厳密な規定化

作者は、それぞれの企業によって独立して開発され、このプロトコルに基づいて相互動作するテストソフトウェアを実演することを意図しているが、PIP/0.2 ソフトウェアは実際の製品提供の示唆であると考えるべきではない。

PIP/0.2 は、クライアントとサーバ間の特定の責任分割を義務づけることなく、エンドユーザとエンドユーザの相互作用性を実演することを狙っている。特に、クライアントが外部のサーバに直接購読したり、内部のサーバを外部のサーバへのプロクシとして使用したり、その二つを混在させることを受け入れるべきである。外部サーバは、その購読が "実際に" クライアントからかのものか否かを気にすることはなく、いずれにせよ単に購読を管理し、通知を配送するだけなので、この融通性は可能である。

これを記述している時点では、このプロトコルの個々の実装が進行中であるが、完全な機能性と相互作用性はベンダー間試験ではまだ確認されていない。従って、更なる実装と試験から得られる教訓により、このプロトコルの規定がここで文書化されているものを超えて徐々に変わり続けるかもしれない。

5. 名前付け

人間やメッセージを送る手段を表現する資源は、URL によって識別される。これらの URL はプロトコル識別子 'pip' を持つ。例えば、"pip://pip.lotus.com/JR_Ewing" である。これらの URL はシステム主幹の識別と、メッセージが向けられるネットワーク所在地の記述の両方をまかなう。

アイデンティティ URL は、ある通信タスクが試みるデフォルト所在地の役割を持つ一方、しばしば代替の一時的 URL 所在地が代わりに使用される。例えば、人 "pip://pip.lotus.com/JR_Ewing" は実際には、彼が開始する如何なる購読も、それらの情報を "pip://dallas.xyz.lotus.com/" に配送することを要求し、彼に直ちにメッセージを送る試みは "pip://dallas.xyz.lotus.com/iibox" に向けることを要求する。

デモンストレーションプロトコルのこのバージョンでは、PIP URL は常に大文字小文字を区別しない。さもなくば、それらは RFC 1738 で記述されている URL "共通インターネットスキーム記法" に従う。

6. メッセージ形式

全てのメッセージは、HTTP/1.1 [HTTP/1.1] で確立された形式に従う。このデモプロトコルに従うメッセージのためのプロトコル識別子は、"PIP/0.2" を読まなければならない。

7. トランスポート

このデモプロトコルでは、全てのトランザクションはコネクションがクローズされる前に一つの要求と応答が完了する、短命の TCP ヒットを通じて可能だろう。

HTTP/1.1 スタイルのパイプライン化を実装してもよい。なぜなら、そのメカニズムはコネクションオープンを保持するために両側の同意を必要とするからである。パイプラインする幾つかのプログラムの追加された機能は、パイプラインできないプログラムに対して如何なる問題も引き起こすべきではない。

PIP/0.2 トランザクションのデフォルトポートは、321 [IANA] である。

8. 文字符号化

要求行、応答行、ヘッダは、HTTP/1.1 に従って符号化しなければならない。PRESENCE 更新とインスタントメッセージの内容の文字符号化は、デフォルトで (セクション14 で定義されているように) UTF-8 (ユニコード) を想定している。他の符号化は、以下の例のように Content-type 中の "charset" 属性によって指定してもよい。

Content-Type: text/plain; charset="ISO-2022-JP"

9. メソッド

9.1 SUBSCRIBE

SUBSCRIBE メソッドは、リモート資源に対する持続的な興味を表現するために使用され、その資源で発生する変更や、その資源で配送される通知を含む。もし SUBSCRIBE 要求が、'Subscription-ID' ヘッダを含むならば、既存の購読を更新するために使用され、'Renew-Duration' ヘッダも含むべきである。

SUBSCRIBE 要求は 'From' ヘッダを含むべきであり、それは購読を要求している主幹 (PIP URL によって) を識別する。'Sendback' ヘッダを含んでもよく、それはこの購読上で後続してもよい一連の NOTIFY を向けなければならない PIP 所在地を示す。SUBSCRIBE 要求は、'Duration' ヘッダを含んでもよく、それは通知や更新トラフィックが無い場合でも、購読者がその購読を持続したい時間の長さを示す。

SUBSCRIBE 要求が成功すると、201 Created 応答を生成する。それは、'Duration' ヘッダを含まなければならない。トラフィックが無い場合にどのくらい購読を持続するかを指示する。'Subscription-ID' ヘッダを含むかもしれない。。それは提供する資源においてユニークな名前を購読に付与する。応答内容はターゲット資源の現在可視の状態である。

9.2 UNSUBSCRIBE

UNSUBSCRIBE メソッドは、以前に確立した購読を終了する。それは、キャンセルする購読を識別するために 'Subscription-ID' を含まなければならない。それは、購読者によって送信されたものでも発行者によって送信されたものでも、どちらでもよい。

発行者からの UNSUBSCRIBE 要求は 'Location' ヘッダを含んでもよく、それは購読を試みる代わりの所在地を示す。そしてこの購読は終了する。(パート10 リダイレクション参照)

9.3 CHANGE

CHANGE メソッドは、与えられた資源に格納された内容を変更するために使用される。これは、その資源の購読者に NOTIFY を送信し、格納されたそのサーバの資源の内容に少なくとも一時的な変更をもたらす。

CHANGE 要求は 'Duration' ヘッダを含んでもよく、それは、現在の資源の持続値を置き換えずに、与えられた持続時間の間 'overlay' か 'lease' を代わりに提供することを示す。その時間が満了するまで、'lease value' が唯一の外部操作である。

資源に対して一回に一つの 'lease' のみ活性であってもよく、最も最近のものが常に優先される。同じ内容と置き換える CHANGE は、依然として NOTIFY を生成する。

9.4 NOTIFY

NOTIFY メソッドは (1) 購読内の CHANGE を報告するために使用され、(2) 潜在的な受諾か遅延に対し、購読外で任意の内容を資源に配送するために使用され、(3) 購読内の CHANGE を中継するために使用される。

CHANGE を報告するために使用する時、NOTIFY は CHANGE される資源を示す 'From' ヘッダと 'Subscription-ID' ヘッダ、'value' の 'Notify-class' ヘッダ値が付いて、購読者の 'Sendback' 所在地に配送される。受信側は正しい購読上の NOTIFY の受信に対して、200 OK 応答で受信確認しなければならない。

任意の内容を資源に配送するために使用する時、NOTIFY 要求は、その通知を起動した主幹を示す 'From' ヘッダと 'transient' の値を持つ 'Notify-class' ヘッダを含むべきである。そのような NOTIFY は、'Subscription-ID' ヘッダを持ってはならない。もし NOTIFY が意味的に受諾されるか中継されるならば、200 OK 応答を生成しなければならない。もし今中継できないならば (例えば正しい資源の購読者が現在いない)、505 service unavailable 応答が適切である。

その資源に対する購読の中で、任意の内容の資源への配送を中継するために使用する時、NOTIFY 要求は 'Subscription-ID' と 'transient' の値を持つ 'Notify-class' ヘッダを含まなければならない。NOTIFY 指示の起動元によって提供される 'From' ヘッダは、'Origin' ヘッダで通知し、資源を中継者を示す新しい 'From' ヘッダを挿入しなければならない。受信側は (もしエラーが発生しなければ) その NOTIFY に、200 OK で肯定応答しなければならない。

購読内で発生した何かを通知する NOTIFY (つまり上記の (1) か (2) を意味) は、常に 'Subscription-ID' ヘッダを持ち、それを任意の内容を資源に配送する NOTIFY ((2) を意味) であるかのように扱ってはならない。従って、ある購読から来る NOTIFY や、特定の PIP 資源に行く NOTIFY は、中間資源の他の購読上に更なる NOTIFY を生成することはできない。

9.5 FETCH

FETCH メソッドは、購読を開始せずに資源の現在の内容を取り込むために使用される。(それは本質的に HTTP の GET である。全ての GET ファシリティ、例えば 'If-Modified-Since' などをサポートしているという誤った印象を避けるために別の名前にしている)。

FETCH に対する正常応答は 200 OK 応答を使用し、その内容としてターゲットの資源の内容を含む。

10. 応答コード

PIP/0.2 は、適切である場合は常に HTTP/1.1の応答コードを再利用する。

404 Not Found 応答は、たとえリクエスト URI によって識別される資源を見つけられても、'Subscription-ID' を持つ要求が受信側で未知の購読を識別する時に適切である。

ソフトウェアは、エラーを生み出した要求をリトライしてもよいか否かを決定する時、HTTP/1.1 の取り決めに従うべきである。

412 Precondition Failed 応答は、ある未サポートな、あるいは現在不適切なヘッダが要求上に現れた時に使用される。これは、HTTP/1.1 での応答の意味と正確に同一ではない。

11. ヘッダ

どんな HTTP/1.1 ヘッダも含めてよいが、ここにリスト化されているか説明されているものしか、PIP/0.2 相互動作プログラムに意味を持つことが保証されない。

11.1 HTTP/1.1 からの変更無しで採用されたヘッダ

Host
Location
User-Agent
Content-Type
Content-Length

11.2 Duration

整数の秒数。SUBSCRIBE 要求では購読期間を提案するために使用され、SUBSCRIBE 応答では購読期間を指示するために使用され、CHANGE 要求ではリース期間を提案するために使用され、CHANGE 応答ではリース期間を指示するために使用される。

11.3 Renew-Duration

整数の秒数で、既存のリースや購読を付与した時間に再更新することを要求するために、CHANGE 要求と SUBSCRIBE 要求で使用される。

11.4 From

要求か応答を起動した主幹/資源を識別する。ほぼどこにでも現われてよい。

11.5 Origin

元の 'From' が中継する資源の名前に置き換えられる時に、中継された NOTIFY の元の起動者を識別する。

11.6 Sendback

購読中の通知に対して、購読者のデフォルトの識別所在地と異なる配送所在地を指定するために、SUBSCRIBE 要求で使用される。

11.7 Subscription-ID

発行資源において購読をユニークに識別するトークン。購読に後で参照する名前を与えるために、最初の SUBSCRIBE に対する応答で使用される。関心のある購読を識別するために、NOTIFY で使用される。再更新する購読を識別するために、再更新する SUBSCRIBE で使用される。

Subscription-ID は、HTTP/1.1 で定義された 'トークン' である。

11.8 Notify-class

CHANGE の通知を、中継する任意の内容の通知と区別するために、NOTIFY 要求で使用される。'value' か 'transient' の値を持ってもよい。

11.9 Regarding

資源の主内容以外の何かに適用するメソッドを示すために使用してもよい。受諾できる値は "content" と "control" であり、もし省略されている場合は "content" の値 (デフォルト振る舞い) を意味する。もし "Regarding: control" を指定するヘッダが要求に現れ、その要求の受信側がリモート資源制御を供給しないならば、412 Precondition Failed 応答を返却するべきである。

"Regarding: control" が CHANGE に現れた時、それはその内容ではなく、資源の制御情報を変更する。(これは別箇所で説明されているように、後でその資源の振る舞いに影響する)。"Regarding: control" が FETCH に現れた時、返却される内容はその内容ではなく、与えられた資源の制御情報であるべきである。"Regarding: control" が SUBSCRIBE に現れた時、購読はその内容ではなく、制御情報の状態についての通知を承認すべきである。その購読上の NOTIFY もまた、"Regarding: control" ヘッダ行を持つべきである。

12. リース

リースは、'Duration' ヘッダを持つ CHANGE 要求を資源に発行することによって確立される。要求に含まれる 'Duration' 値は、もしその応答が異なる 'Duration'を指示していなければ、リース期間を含む。唯一一つのリース (最も最近確立されたもの) のみが資源に 1 回存在する。

もしリースする値が設定されたら、それは資源の外部ビューアに唯一見える値である (例えば、SUBSCRIBE に対する正常応答の内容)。リース値が満了すると、たとえ復帰された持続値が満了したリース値と同じであっても、NOTIFY が生成される。

'Duration' ヘッダのない CHANGE は、資源の "永久の" バージョンを変更する。もし現在のリース実施されているならば、そのような永久の変更は、リースが満了するまで NOTIFY を生成しないかもしれない。

リースは、'Duration' 0 を持つ別のリースを発行することによってキャンセルしてもよい。リースの適切な使用法は、リースの保持者が、永久の値に戻ることが適切の場合はすぐに、'Duration' 0 を持つ CHANGE 要求で明示的にキャンセルすべきであることを指示する。リース保持者は、廃止した値を修正する意味としてリースの即座の満了に頼るべきではない。

リースは、'Renew-Duration' ヘッダを持つ CHANGE 要求を発行することによってリフレッシュしてもよい。その要求の内容は無視される。その要求に対する応答が異なる 'Duration' を指示していなければ、要求された生存期間は尊重される。更新が要求された時点で、もし何のリースも実施されていなければ、412 Precondition Failed 応答を返却すべきである。

13. 購読

購読は、SUBSCRIBE 要求で開始する。購読は、(1) 購読者からの 一致する UNSUBSCRIBE 要求、(2) 発行者によって購読者に配送された UNSUBSCRIBE 要求、(3) 購読上で正常な SUBSCRIBE か NOTIFY トラフィックが無く、最後の発行者指定の 'Duration' 値に相当する期間の経過、のいずれかにより明確に終了する。

その試み、あるいは 200 OK 応答を受信していない購読上で NOTIFY を配送する試みにより、発行者はその購読を破棄するかもしれないが、発行者は 'Duration' が別途満了するまで NOTIFY を配送する試みを継続すべきである。

14. リダイレクション

リダイレクション (代替アドレスへの自動トランザクションの結果による 302 moved temporarily 応答) は、最初の SUBSCRIBE と FETCH でのみサポートされる。

もし最初の SUBSCRIBE に対する応答が 302 moved elsewhere 応答を含むならば、その SUBSCRIBE は、含まれている 'Location' ヘッダで提案された URL に試みなければならない。もし与えられた所在地で遂行され、代替所在地での購読が終了していないならば、元の所在地に再度試みる必要はない。

15. ドメイン規約

15.1 プレゼンス情報

オンライン状態情報を共有するための共通形式は、よく形成された XML ドキュメントである。このドキュメントのルート要素は、'PRESENCE' という名前でなければならない。

もしこのデータによって表現されたユーザが、'オンライン' ならば、'PRESENCE' ルートは 'ONLINE' という名前の子要素を含まなければならない。もし表現されるユーザが 'オフライン' ならば、それは 'OFFLINE' という名前の要素を含んでもよい。('ONLINE' か 'OFFLINE' のいずれも表れない場合は、'OFFLINE' であると仮定される)。これらの要素は、如何なる内容も持つ必要はない。

以下の追加のプレゼンス情報の一部は、オプションである。クライアントは、判らない <PRESENCE> 内の情報は優しく無視すべきである。

'ONLINE' 要素は 'AWAY' か 'BUSY' のいずれかの名前の子要素を含んでもよい。それぞれ、'ONLINE' 端末の近くにいない (恐らくプログラムに基づいたアイドル感知から引き出される) か、邪魔されないことを望むと表明するかを示す。

'PRESENCE' ルートは 'NOTE' という名前の子要素を含んでもよい。内容は現在の状態に関するフリー形式のテキスト掲示である。

'PRESENT' ルートは 'NICKNAME' という名前の子要素を含んでもよい。内容はユーザインタフェースにおいてユーザが好む短い形式の象徴的な表現である。

例:

誰かがオフラインであることを示す最小限の正しいプレゼンスドキュメントは:

  <PRESENCE />

誰かがオンラインであることを示す最小限の正しいプレゼンスドキュメントは:

  <PRESENCE>
    <ONLINE />
  </PRESENCE>

全てのクライアントが理解する必要はないオプションのエンティティを使用した場合、以下は誰かがオンラインであるが、不在で "昼食中" であることを示す。

  <PRESENCE>
    <ONLINE>
      <AWAY />
    </ONLINE>
    <NOTE>out to lunch</NOTE>
  </PRESENCE>

15.2 メッセージ交換

アプリケーションは、URL 'X/iibox' ("インスタント受信箱" を表す) への NOTIFY を実行することによって、PIP URL 'X' で表現されるエンティティへのインスタント通信の送信を試みなければならない。すなわちメッセージを配送するための URL は、URL を購読するための取り決めを適用することによって確立される。もし非標準的な所在地にあるエンティティを購読するならば、そのメッセージ交換 URL は現在の購読所在地から取り込まなければならない。

NOTIFY は、'transient' の値を持つ 'Notify-class' ヘッダを含まなければならない。そのコンテントタイプは 'text/plain' か 'text/html' であってもよい。NOTIFY が送信されるその URL は、(1) 意図した受信者へのメッセージを直接表示できる所在地、(2) 意図した受信者が購読する所在地、のいずれかであることが期待される。それにより、NOTIFY は意図した受信側へのメッセージを直接表示できる最終宛先に効率的に中継される。

もしそのメッセージが、メッセージを "消費する" エンドポイントに適切に配送されたならば、その NOTIFY に対して 200 OK で応答しなければならない。もし NOTIFY を配送した所在地が、そのメッセージが適切に最終宛先に到達したと信じない、例えば主幹がその資源を購読していないサーバの '/iibox' 資源である、ならば、その NOTIFY に対して 505 Retry later などのエラーで応答しなければならない。

15.3 リダイレクションの確立 (オプション)

資源は CHANGE 要求を使用することによる全ての要求に対して、指定されたリモート資源に対してリダイレクション指示を確立するために、"Regarding: control" ヘッダを持つ 302 Moved Temporarily redirecting 応答を発行するよう設定してもよい。これらの指示は、ルートが 'REDIRECT' という名前で、その内容がリダイレクションによって提供される URL である、単一の要素を持つ XML ドキュメントによって提供すべきである。例えば、

  <REDIRECT>pip://ws0013.activerse.com/</REDIRECT>

制御情報の変更は内容の変更同様、リースの適用を受けてもよい。資源に対する制御情報は、適切な 'Regarding' ヘッダを持つ FETCH か、適切な 'Regarding' ヘッダを持つ SUBSCRIBE による購読によって見えるかもしれない。

16. プロクシ

PIP アプリケーションは、メッセージの最終的な宛先についての情報を、Request-URI や 'Host' ヘッダに含めることによって、ローカルマシンを通じてメッセージを中継する、HTTP と同様のプロクシ戦略を採用してもよい。

しかし、プロクシされるメッセージを受信する最終宛先のプロセスは、特別にそれを扱う必要はなく、トラフィックがプロクシされているという注記を付けてもよい。そして、相互作用デモプログラムは自身の宛先でプロクシする実装を試みても試みなくてもよい。

プロクシの詳細例は、サンプルの写しに示されている。

17. セキュリティ

セキュリティの問題は、このデモの目的とは明確に別に置かれている。最終的な標準は、ベンダ/セキュリティ領域 (HTTP 'Digest' パスワード認証との互換性への寄与に類似している) に渡って、認証する通信相手のために提案された低水準共通分母メカニズムだけでなく、互換ソフトウェア間の相互の同意によって上積みされた、より強い認証/暗号化メカニズムをも含む。

18. サンプルの写し

18.1 リースとインスタント入力ボックスの購読を通じた有効性の確立。

PIP URL "pip://pip.fujitsu.com/alice" を持つアリスについて考える。彼女は、自分のデスクトップマシン "aardvark.fujitsu.com" 上で PIP クライアントを起動する。そのマシンは、入力通信のためにローカルユーザポート 1321 を確保している。

何か行う前に、彼女は自分が世界でどのように見えるかを確認したいかもしれない。

        [open TCP from aardvark.fujitsu.com to pip.fujitsu.com:321]
out>    FETCH /alice PIP/0.2
out>    Host: pip.fujitsu.com

 in<    PIP/0.2 200 OK
 in<    Content-type: text/xml
 in<    Content-length: 12
 in<
 in<    <PRESENCE />
        [socket closes]

そして、彼女は世界にオンラインで表れたいと思う。しかし、ネットワークかクライアントにトラブルがある場合、彼女はこの状態をいつまでも持続したいと思わない。そこで、彼女は 20 秒のリースを要求する。

        [open TCP from aardvark.fujitsu.com to pip.fujitsu.com:321]
out>    CHANGE /alice PIP/0.2
out>    Host: pip.fujitsu.com
out>    From: pip://pip.fujitsu.com/alice
out>    Duration: 20
out>    Content-type: text/xml
out>    Content-length: 34
out>
out>    <PRESENCE>
out>     <ONLINE />
out>    </PRESENCE>

 in<    PIP/0.2 200 OK
 in<    Duration: 40
        [socket closes]

サーバは、恐らく更新トラフィックの頻度を制限したいので、要求された 'Duration'値を上書きしていることに注意されたい。(もしサーバがアリスの資源向けの現在の購読を維持し続けていたら、彼女の CHANGE は沢山の NOTIFY を購読者に送る起因になる。例は後にある)。

アリスはさらにインスタントメッセージを受信したいと思う。PIP/0.2 の取り決めにより、彼女にメッセージを送りたい人は "pip://pip.fujitsu.com/alice/iibox" に NOTIFY を送信するだろう。そして、アリスはその所在地を購読し、中継されたメッセージを受信したいと思う。

        [open TCP from aardvark.fujitsu.com to pip.fujitsu.com:321]
out>    SUBSCRIBE /alice/iibox PIP/0.2
out>    Host: pip.fujitsu.com
out>    From: pip://pip.fujitsu.com/alice
out>    Sendback: pip://aardvark.fujitsu.com:1321
out>    Duration: 30

 in<    PIP/0.2 201 subscription created
 in<    Duration: 60
 in<    Subscription-ID: aaii
        [socket closes]

アリスはその購読を認められ、代替の接続時間で再度購読する。多くの購読許可応答はターゲット資源の現在の内容を含んでもよいが、この購読応答は内容を持たない。

アリスはいつまでもオンラインにいる。そして、間もなく 40 秒の内容リースが満了し、彼女はリースの再更新を発行し、サーバはそれを承認する。

        [open TCP from aardvark.fujitsu.com to pip.fujitsu.com:321]
out>    CHANGE /alice PIP/0.2
out>    Host: pip.fujitsu.com
out>    From: pip://pip.fujitsu.com/alice
out>    Renew-Duration: 40

 in<    PIP/0.2 200 renewed
 in<    Duration: 40
        [socket closes]

60 秒間の 'iibox' 購読が間もなく満了すると、彼女はさらに再購読も発行する。

        [open TCP from aardvark.fujitsu.com to pip.fujitsu.com:321]
out>    SUBSCRIBE /alice/iibox PIP/0.2
out>    Host: pip.fujitsu.com
out>    From: pip://pip.fujitsu.com/alice
out>    Subscription-ID: aaii
out>    Renew-Duration: 60

 in<    PIP/0.2 200 renewed
 in<    Duration: 60
        [socket closes]

これらの更新は、アリスがオンラインでメッセージ交換可能のままでいたいと望む限り継続される。その購読に対して配送され、購読者によって確認される NOTIFY は、最後に通知された 'Duration' に対して購読を再更新するのに役立つ。

アリスが最終的にオフラインになることを決定した時、彼女はリースした値と彼女のインスタント受信箱の購読の両方をキャンセルする。(これらの関係の最終的な満了に頼ることは推奨されない)。

        [open TCP from aardvark.fujitsu.com to pip.fujitsu.com:321]
out>    CHANGE /alice PIP/0.2
out>    Host: pip.fujitsu.com
out>    From: pip://pip.fujitsu.com/alice
out>    Renew-Duration: 0

 in<    PIP/0.2 200 lease terminated
 in<    Duration: 0
        [socket closes]

        [open TCP from aardvark.fujitsu.com to pip.fujitsu.com:321]
out>    UNSUBSCRIBE /alice/iibox PIP/0.2
out>    Host: pip.fujitsu.com
out>    From: pip://pip.fujitsu.com/alice
out>    Subscription-ID: aaii

 in<    PIP/0.2 200 cancelled
        [socket closes]

18.2 他者の購読

アリスがオンラインであると仮定する。彼女は通常、彼女がそのオンライン状態に興味を抱く数多くの同僚を購読する。彼女は主にボブ (pip://pip.microsoft.com/bob) とカール (pip://pip.activerse.com/carl) に興味を持つと仮定しよう。彼女はボブを購読する。

        [open TCP from aardvark.fujitsu.com to pip.microsoft.com:321]
out>    SUBSCRIBE /bob PIP/0.2
out>    Host: pip.fujitsu.com
out>    From: pip://pip.fujitsu.com/alice
out>    Sendback: pip://aardvark.fujitsu.com:1321
out>    Duration: 60

 in<    PIP/0.2 201 granted
 in<    Subscription-ID: a2b
 in<    Duration: 60
 in<    Content-type: text/xml
 in<    Content-length: 12
 in<
 in<    <PRESENCE />
        [socket closes]

そして、カールを購読する。

        [open TCP from aardvark.fujitsu.com to pip.activerse.com:321]
out>    SUBSCRIBE /carl PIP/0.2
out>    Host: pip.fujitsu.com
out>    From: pip://pip.fujitsu.com/alice
out>    Sendback: pip://aardvark.fujitsu.com:1321
out>    Duration: 60

 in<    PIP/0.2 201 granted
 in<    Subscription-ID: a2c
 in<    Duration: 60
 in<    Content-type: text/xml
 in<    Content-length: 22
 in<
 in<    <PRESENCE></PRESENCE>
        [socket closes]

アリスは、自分のインスタント受信箱を購読したのと同様にこれらの購読を再更新する。

そして、ボブがオンラインに入った。彼はアリスが最初に変更したように CHANGE を発行する (例示はしない)。その結果、アリスは彼女が前に指定した 'Sendback' で以下の通知を受信する。

        [open TCP from pip.microsoft.com to aardvark.fujitsu.com:1321]
out>    NOTIFY / PIP/0.2
out>    From: pip://pip.microsoft.com/bob
out>    Subscription-ID: a2b
out>    Notify-class: value
out>    Content-type: text/xml
out>    Content-length: 31
out>
out>    <PRESENCE><ONLINE /></PRESENCE>

 in<    PIP/0.2 200 ok
        [socket closes]

同様にもしオンラインのまましばらく経過した後、ボブが現在の活動が一見して分かる自由形式の注記を供給するオプションの <NOTE> 要素を追加したら、アリスは同様の通知を受信するだろう。

        [open TCP from pip.microsoft.com to aardvark.fujitsu.com:1321]
out>    NOTIFY / PIP/0.2
out>    From: pip://pip.microsoft.com/bob
out>    Subscription-ID: a2b
out>    Notify-class: value
out>    Content-type: text/xml
out>    Content-length: 67
out>
out>    <PRESENCE>
out>     <ONLINE />
out>     <NOTE>about to head home</NOTE>
out>    </PRESENCE>

 in<    PIP/0.2 200 ok
        [socket closes]

ボブが最終的にオフラインになる時、アリスは元の最小値に対して彼の状態を返却する通知を受信するだろう。もしアリスが最初にオフラインになるなら、彼女はもし可能ならば、以下のように明示的に自分の購読をキャンセルすべきである。

        [open TCP from aardvark.fujitsu.com to pip.microsoft.com:321]
out>    UNSUBSCRIBE /bob PIP/0.2
out>    Host: pip.microsoft.com
out>    From: pip://pip.fujitsu.com/alice
out>    Subscription-ID: a2b

 in<    PIP/0.2 200 cancelled
        [socket closes]

18.3 インスタントメッセージ交換

アリスとボブがオンラインにいてお互いに購読し、アリスはボブにメッセージを送信したいと思うと仮定する。彼女はボブのインスタンと受信箱向けの NOTIFY を生成することによってそれを行う。

        [open TCP from aardvark.fujitsu.com to pip.microsoft.com:321]
out>    NOTIFY /bob/iibox PIP/0.2
out>    Host: pip.microsoft.com
out>    From: pip://pip.fujitsu.com/alice
out>    Notify-class: transient
out>    Content-type: text/plain
out>    Content-length: 42
out>
out>    When do you arrive at the IETF conference? 

ボブは、中継されたインスタントメッセージを受信するために、事前に "pip://pip.microsoft.com/bob/iibox" の資源を購読している (例示はしない)。(もし誰もこの資源を購読していなければ、アリスの上記のメッセージにより、例えば 505 Retry later 等のエラーが即座に生成されるだろう)。従って、アリスの NOTIFY は、ボブが直前の購読で指定した 'Sendback' 所在地に中継される。それは "pip://bear.microsoft.com:1321" であると仮定する。

        [open TCP from pip.microsoft.com to bear.microsoft.com:1321]
out>    NOTIFY / PIP/0.2
out>    Origin: pip://pip.fujitsu.com/alice
out>    From: pip://pip.microsoft.com/bob/iibox
out>    Notify-class: transient
out>    Subscription-ID: iibb
out>    Content-type: text/plain
out>    Content-length: 42
out>
out>    When do you arrive at the IETF conference? 

 in<    PIP/0.2 200 ok
        [socket from pip.microsoft.com to bear.microsoft.com closes]

この正常購読配送により、アリスは最初の NOTIFY に対する応答として、彼女のメッセージの配送の確認を受信できる。

        [on already-open socket from aardvark to pip.microsoft.com]
 in<    PIP/0.2 200 ok
        [socket from aardvark.fujiotsu.com to pip.microsoft.com closes]

18.4 リダイレクションによる他者からの発行

カールがオンラインになり、彼はいつオンラインなりいつオフラインになったかを、異なる所在地から発行するためにリダイレクションを使用できるクライアント/サーバを使用すると仮定する。彼は "pip://pip.activerse.com/carl" 資源の内容にリースせずに、その制御設定にリースを確立する。

        [open TCP from cat.activerse.com to pip.activerse.com:321]
out>    CHANGE /carl PIP/0.2
out>    Host: pip.activerse.com
out>    From: pip://pip.activerse.com/carl
out>    Regarding: control
out>    Duration: 30
out>    Content-type: text/xml
out>    Content-length: 49
out>
out>    <REDIRECT>pip://cat.activerse.com:1321</REDIRECT>

 in<    PIP/0.2 200 OK
 in<    Duration: 30
        [socket closes]

結果的に、この制御リースの間、カールの標準的な URL の将来の購読は "cat.activerse.com" にある彼の現在の所在地にリダイレクトされるだろう。アリスが "pip.activerse.com" をまだ購読していると仮定する。彼女の購読はサーバによってキャンセルされる。


それはアリスに購読をリトライさせるだろうが、その試みは承認されずリダイレクトされる。

        [open TCP from aardvark.fujitsu.com to pip.activerse.com:321]
out>    SUBSCRIBE /carl PIP/0.2
out>    Host: pip.fujitsu.com
out>    From: pip://pip.fujitsu.com/alice
out>    Sendback: pip://aardvark.fujitsu.com:1321
out>    Duration: 60

 in<    PIP/0.2 302 elsewhere
 in<    Location: pip://cat.activerse.com:1321
        [socket closes]

そして、アリスはリダイレクトされた所在地でカールを購読する。

        [open TCP from aardvark.fujitsu.com to cat.activerse.com:1321]
out>    SUBSCRIBE / PIP/0.2
out>    Host: cat.activerse.com
out>    From: pip://pip.fujitsu.com/alice
out>    Sendback: pip://aardvark.fujitsu.com:1321
out>    Duration: 60

 in<    PIP/0.2 201 granted
 in<    Subscription-ID: a2cc
 in<    Duration: 60
 in<    Content-type: text/xml
 in<    Content-length: 32
 in<
 in<    <PRESENCE><ONLINE /></PRESENCE>
        [socket closes]

この購読上での将来の NOTIFY は、"cat.activerse.com" から "aardvark.fujitsu.com:1321" に直接向けられるだろう。もしアリスがインスタントメッセージをカールに送りたいと思うならば、彼女は現在のカール向けの購読に関係する NOTIFY を、"pip.activerse.com" にある URL を通じてではなく、"pip://cat.activerse.com:1321/iibox" に指示するだろう。

19. 参照

[HTTP/1.1]R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1":

http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-rev-03.txt

[IANA]
IANA Protocol Numbers and Assignment Services, Port Numbers

http://www.isi.edu/in-notes/iana/assignments/port-numbers

20. 作者のアドレス

  Gordon Mohr
  Activerse, Inc.
  1301 W. 25th St Suite 500
  Austin, TX 78705
  gojomo@activerse.com

  Sonu Aggarwal
  Microsoft Corporation
  One Microsoft Way
  Redmond, WA 98052-6399
  sonuag@microsoft.com

  Mark Day
  Lotus Development Corporation
  55 Cambridge Parkway
  Cambridge, MA 02142
  Mark_Day@lotus.com

  Avshalom Houri
  Ubique
  Building 18/D, Science Park
  POB: 2523
  Rehovot 76123, Israel
  avshalom@ubique.com

  Youji Kohda
  Fujitsu Laboratories Ltd.
  64 Nishiwaki, Ohkubo-cho
  Akashi, 674-8555, Japan
  kohda@flab.fujitsu.co.jp

  Dave Marvit
  Fujitsu Labs America
  595 Lawrence Expressway,
  Sunnyvale, CA 94086-3922
  dave@marvit.org