The BOINC scheduling 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>
    <core_client_major_version>1</core_client_major_version>
    <core_client_minor_version>1</core_client_minor_version>
    ... 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>

Each 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>
<code_sign_key>
    1024
    ec8b7f60fa494ce65d70afa98f91f2ab08fb5fac3931a27524e0eb954d587846
    29e94ce79d61f4d4bc4f9660578a06e941ca271646f11ef4d2be67f4a155e0a9
    9908b6c814d08f0f59e9dc85afcc9d65f89a33d329d963e3fd359351ee25ca7f
    71c3bd49a88ae609152559984b3fd7cdc4937d416a43c3357a59e7ed6cf3d30d
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000010001
    .
</code_sign_key>
<prefs_mod_time>123123</prefs_mod_time>
<preferences>
    <low_water_days>1.2</low_water_days>
    <high_water_days>2.5</high_water_days>
    <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>