The BOINC client/server protocol

Protocol nucleus

The core client communicates with scheduling servers using HTTP. The following "nucleus" of the protocol should be considered immutable. This will allow any version of the core client to talk to any version of the scheduling server, and for the server, if needed, to tell the core client that it's out of date. The form of the request is:

<scheduler_request>
    <platform>intel-linux</platform>
    <version_num>1</version_num>
    ... other elements
</scheduler_request>
The "platform" and "version_num" elements identify the version of the core client originating the request.

The form of the reply is:

<scheduler_reply>
    [ <message priority="low"> arbitrary text </message> ... ]
    [ <request_delay>3600</request_delay> ]
    [ <redirect>URL</redirect> ]
    ... other elements
</scheduler_reply>

message element is a message to the participant.

A reply message can contain multiple message elements.

A request_delay element instructs the client to not issue another request until the indicated number of seconds has elapsed.

A redirect element gives the URL for a scheduling server for this project. If present, the core client should replace its list of scheduling servers for this project. The reply may contain multiple redirect elements.

Extensible protocol

The remaining protocol may evolve over time. Request elements include

<prefs_mod_time>0</prefs_mod_time>
<authenticator>3f7b90793a0175ad0bda68684e8bd136</authenticator>
<hostid>1</hostid>
<work_req_seconds>1000</work_req_seconds>
<host_info>
    <timezone>28800</timezone>
    <domain_name>localhost.localdomain</domain_name>
    <ip_addr>127.0.0.1</ip_addr>
    <conn_frac>0.000000</conn_frac>
    <on_frac>0.000000</on_frac>
    <p_ncpus>1</p_ncpus>
    <p_vendor>GenuineIntel</p_vendor>
    <p_model>Pentium</p_model>
    <p_fpops>0.000000</p_fpops>
    <p_iops>0.000000</p_iops>
    <p_membw>0.000000</p_membw>
    <p_calculated>0.000000</p_calculated>
    <os_name>Linux</os_name>
    <os_version>2.2.14-5.0</os_version>
    <m_nbytes>197427200.000000</m_nbytes>
    <m_cache>131072.000000</m_cache>
    <m_swap>178012160.000000</m_swap>
    <d_total>22108344320.000000</d_total>
    <d_free>18332545024.000000</d_free>
    <n_bwup>0.000000</n_bwup>
    <n_bwdown>0.000000</n_bwdown>
</host_info>
<result>
    <name>uc_wu_0</name>
    <exit_status>0</exit_status>
    <cpu_time>0.020000</cpu_time>
    <output_file>
        <md5_cksum>3f7b90793a0175ad0bda68684e8bd136</md5_cksum>
        <file_name>uc_wu_0_0</file_name>
    </output_file>
</result>

Reply elements include

<request_delay>10</request_delay>
<message priority="low">no work available</message>
<prefs_mod_time>123123</prefs_mod_time>
<preferences>
    <low_water>1.2</low_water>
    <high_water>2.5</high_water>
    <disk_max_used_gb>0.4</disk_max_used_gb>
    <disk_max_used_pct>50</disk_max_used_pct>
    <disk_min_free_gb>0.4</disk_min_free_gb>
    <project>
        <master_url>http://localhost.localdomain</master_url>
        <email_addr>david@localdomain</email_addr>
        <authenticator>123892398</authenticator>
        <resource_share>10</resource_share>
        <project_specific>
            <color-scheme>Tahiti Sunset</color-scheme>
        </project_specific>
    </project>
</preferences>
<result_ack>
    <name>uc_wu_0</name>
</result_ack>