データサーバのプロトコル |
Last modified 7:09 PM UTC, June 09 2004 |
ファイルのダウンロードは、 FILE_INFO 要素に含まれる URLへ向けた GET 要求として実施されます。 もし、ファイルオフセットが必要なら、HTTP ヘッダの中の Range: ヘッダで与えられます。
ファイルのアップロードは、CGI プログラムへ向けた POST 操作によって実施されます。 セキュリティ機構が、データサーバに対し多量データのアップロードを 未認可で行うことを防止します。 2つの RPC 操作が使われています。
1) ファイルサイズ獲得(Get file size)
この要求は以下の例の形をしています。
<data_server_request>
<core_client_major_version>1</core_client_major_version>
<core_client_minor_version>1</core_client_minor_version>
<get_file_size>filename</get_file_size>
</data_server_request>
その応答メッセージの形の例は以下のとおりです:
<data_server_reply>
<status>x</status>
[ <message>text<message>
| <file_size>Nbytes</file_size> ]
</data_server_reply>
<status> 要素の内容は以下のとおりです。 | 0 | 成功を示します。 Nbytes の部分は、ファイルが[まだ]ないときは0です。 |
| 1 | 一時的なエラー。 クアイアントは別のデータサーバを試みるか、すこしたってからこのサーバを試すべきです。 |
| -1 | 永続的エラー。 クライアントはこのリザルトについては断念するべきです。 |
これらのうちエラーケースにおいては、 <file_size> 要素が省略され、 <message> 要素が説明を提供します。
2) ファイルのアップロード(Upload file)
要求メッセージの形式の例:
<data_server_request>
<core_client_major_version>1</core_client_major_version>
<core_client_minor_version>1</core_client_minor_version>
<file_upload>
<file_info>
...
<xml_signature>
...
</xml_signature>
</file_info>
<nbytes>x</nbytes>
<offset>x</offset>
<data>
... (nbytes バイトのデータ; ASCIIにないバイトを含みうる)
(終了タグは付きません)
<file_info> 要素は、スケジューリング・サーバが そのクライアントに送ったものと正確に一致したテキストです。 この要素には、そのプロジェクトのファイルアップロード認証の鍵ペアに基づく 署名を含みます。 <nbytes> は、そのファイルの大きさです。 <offset> は、そのファイルの中でのオフセットです。
応答メッセージの形の例は以下のとおり:
<data_server_reply>
<status>x</status>
<message>text</message>
</data_server_reply>
<status> 要素の内容は以下のとおりです。 | 0 | 成功 |
| 1 | 一時的エラー。 クアイアントは別のデータサーバを試みるか、すこしたってからこのサーバを試すべきです。 |
| -1 | 永続的エラー。 クライアントはこのリザルトについては断念するべきです。 |
これらのうちエラーケースにおいては、 <message> 要素が説明を提供します。
TODO: ヘッダー部分にエラーがあった場合 (署名が不正、あるいは、ファイルが大きすぎる) には、 クライアントは、実際にファイルをアップロードすることなく エラーを知ることができるべきです。