Data server protocol

Core client communicate with data servers using HTTP. A data server is typically implemented using a web server together with a BOINC-supplied CGI program, file_upload_handler.

Download

File download is done by a GET request to a URL from the FILE_INFO element. The file offset, if any, is given in Range: attribute of the HTTP header.

Upload

File upload is done using POST operations to a CGI program. A security mechanism prevents unauthorized upload of large amounts of data to the server. Two RPC operations are used.

1) Get file size

The request message has the form:

<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>

The reply message has the form:

<data_server_reply>
    <status>x</status>
    [ <message>text</message>
    | <file_size>nbytes</file_size> ]
</data_server_reply>
The <file_size> element is omitted in error cases; nbytes is -1 if the file doesn't exist. There are no security mechanisms. TODO: should distinguish between permanent and transient errors (i.e. whether should retry or give up).

2) Upload file

Request message format:

<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 bytes of data; may be binary)
</data>

The <file_info> element is the exact text sent from the scheduling server to the client. It includes a signature based on the project's file upload authentication key pair. <nbytes> is the amount of data being uploaded. <offset> is the offset within the file.

Reply message format:

<data_server_reply>
    <status>x</status>
    <message>x</message>
</data_server_reply>
The status is zero if the operation succeeded. TODO: should distinguish between permanent and transient errors (i.e. whether should retry or give up).