Changes between Version 27 and Version 28 of GuiRpcProtocol


Ignore:
Timestamp:
Jul 2, 2018, 4:52:52 AM (6 years ago)
Author:
lfield
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GuiRpcProtocol

    v27 v28  
    1 = GUI RPC protocol =
     1= GUI RPC Protocol =
    22
    33The GUI RPC protocol lets GUIs like the BOINC Manager communicate with the core client.
    44
    5 Note that the RPC '''server''' is the core client, and the RPC '''client''' is a GUI or add-on communicating with it (such as BOINC Manager). This may seem confusing. This terminology will be used on the rest of the page.
    6 
    7 == Basic structure ==
     5Note that the RPC server is the core client, and the RPC client is a GUI or add-on communicating with it (such as BOINC Manager). This may seem confusing but this terminology will be used on the rest of the page.
     6
     7== Basic Structure ==
    88
    99The protocol is based on XML, and it's strictly request-reply. The client sends requests to the server, and waits for a reply; the server never sends anything without getting a request from the client first. Both requests and replies are terminated with the control character `0x03`.
    1010
    11 Self-closing tags must not have a space before the slash, or current client and server will not parse it correctly. For example, send {{{<authorized/>}}}, not {{{<authorized />}}}.
    12 
    13 Requests are inside `<boinc_gui_rpc_request>` elements, and replies from the RPC server are inside `<boinc_gui_rpc_reply>` elements (in both cases there is a `0x03` byte after the closing tag). The current RPC server implementation doesn't require the `<boinc_gui_rpc_request>` tag, which is handy for debugging (you can connect via [http://netcat.sourceforge.net/ netcat] and just type `<auth1/>`); however, clients must not rely on this, and must always send the `<boinc_gui_rpc_request>` root tag.
     11Self-closing tags must not have a space before the slash, or current client and server will not parse it correctly. For example, send `<authorized/>`, not `<authorized />`.
     12
     13Requests are inside `<boinc_gui_rpc_request>` elements, and replies from the RPC server are inside `<boinc_gui_rpc_reply>` elements (in both cases there is a `0x03` byte after the closing tag). The current RPC server implementation doesn't require the `<boinc_gui_rpc_request>` tag, which is handy for debugging (you can connect via ​[netcat](http://netcat.sourceforge.net) and just type `<auth1/>`); however, clients must not rely on this, and must always send the `<boinc_gui_rpc_request>` root tag.
    1414
    1515The current RPC server doesn't support pipelining of requests (pipelining means sending a batch of multiple requests without waiting for a reply, then getting all the replies together; this improves latency). For compatibility, pipelining must not be used.
    1616
    17 To terminate the RPC session, just close the connection on the client side. Warning: some protocols have a specific "quit" command for this. The GUI RPC protocol has a {{{<quit/>}}} command, but it has a completely different purpose: telling the core client to quit!
     17To terminate the RPC session, just close the connection on the client side. Warning: some protocols have a specific "quit" command for this. The GUI RPC protocol has a `<quit/>` command, but it has a completely different purpose: telling the core client to quit!
     18
     19Every request has the following structure:
     20
     21{{{
     22#!xml
     23<boinc_gui_rpc_request>
     24  <request>
     25  </request>
     26</boinc_gui_rpc_request>003
     27}}}
     28where `<request>` is a placeholder for one of the actual requests that are listed [later](#requests-and-replies)
     29
     30Self-closing tags could also be used for requests that do not require data to be passed to the client. Their structure is the following:
     31
     32{{{
     33#!xml
     34<boinc_gui_rpc_request>
     35  <request/>
     36</boinc_gui_rpc_request>003
     37}}}
    1838
    1939== Common replies ==
    2040
    21 If a command requires [#auth authentication] but the client hasn't authenticated yet, the RPC server will reply
     41If a command requires [authentication](#authentication) but the client hasn't authenticated yet, the RPC server will reply
     42
    2243{{{
    2344#!xml
    2445<boinc_gui_rpc_reply>
    25     <unauthorized/>
    26 </boinc_gui_rpc_reply>
    27 }}}
     46  <unauthorized/>
     47</boinc_gui_rpc_reply>003
     48}}}
     49
    2850The client should be prepared to receive this in reply to any command.
    2951
    3052Successful commands usually get the reply:
     53
    3154{{{
    3255#!xml
    3356<boinc_gui_rpc_reply>
    3457    <success/>
    35 </boinc_gui_rpc_reply>
    36 }}}
    37 although individual commands, especially those that retrieve data, may return the requested information ''instead of'' {{{<success/>}}}.
     58</boinc_gui_rpc_reply>003
     59}}}
     60
     61although individual commands, especially those that retrieve data, may return the requested information instead of `<success/>`.
    3862
    3963If a command isn't successful, the reply is:
     64
    4065{{{
    4166#!xml
    4267<boinc_gui_rpc_reply>
    4368    <error>human-readable error message</error>
    44 </boinc_gui_rpc_reply>
     69</boinc_gui_rpc_reply>003
    4570}}}
    4671Clients should not try to parse the error message. The current gui_rpc_client.cpp library sometimes tries to parse errors, but this is very unreliable, since the message wording can change (and has changed) between RPC server versions. (r15942 even changed "unrecognized op")
    4772
    48 == Authentication == #auth
     73
     74== Authentication ==
    4975
    5076The RPC protocol allows the RPC client to authenticate itself using a password. Most RPC operations can only be done by an authenticated client. Some can be done without authentication, but only by a client running on the same machine.
    5177
    52 Authentication on the RPC protocol is password-based, and negotiated with a challenge-response system. To initiate the authentication process, send an {{{<auth1/>}}} command:
     78Authentication on the RPC protocol is password-based, and negotiated with a challenge-response system. To initiate the authentication process, send an `<auth1/>` command:
     79
    5380{{{
    5481#!xml
    5582<boinc_gui_rpc_request>
    5683    <auth1/>
    57 </boinc_gui_rpc_request>
     84</boinc_gui_rpc_request>003
    5885}}}
    5986
    6087The response will be the authentication challenge:
     88
    6189{{{
    6290#!xml
    6391<boinc_gui_rpc_reply>
    6492    <nonce>1198959933.057125</nonce>
    65 </boinc_gui_rpc_reply>
    66 }}}
    67 
    68 The value of `nonce` is to be used as a salt with the password. It is randomly generated for each request. To calculate the response, concatenate the nonce and the password (nonce first), then calculate the MD5 hash of the result, i.e: {{{md5(nonce+password)}}}. Finally, send an `<auth2>` request with the calculated hash, in ''lowercase'' hexadecimal format.
     93</boinc_gui_rpc_reply>003
     94}}}
     95
     96The value of `nonce` is to be used as a salt with the password. It is randomly generated for each request. To calculate the response, concatenate the nonce and the password (nonce first), then calculate the MD5 hash of the result, i.e: `md5(nonce+password)`. Finally, send an `<auth2>` request with the calculated hash, in *lowercase* hexadecimal format.
     97
    6998{{{
    7099#!xml
     
    73102        <nonce_hash>d41d8cd98f00b204e9800998ecf8427e</nonce_hash>
    74103    </auth2>
    75 </boinc_gui_rpc_request>
    76 }}}
    77 The reply will be either {{{<authorized/>}}} or {{{<unauthorized/>}}}.
    78 
    79 If the client hasn't authenticated yet, and it is connecting remotely (ie. not via localhost), {{{<auth1/>}}} is the only command that can be sent, and all other commands will return {{{<unauthorized/>}}}.
     104</boinc_gui_rpc_request>003
     105}}}
     106
     107The reply will be either `<authorized/>` or `<unauthorized/>`.
     108
     109If the client hasn't authenticated yet, and it is connecting remotely (ie. not via localhost), `<auth1/>` is the only command that can be sent, and all other commands will return `<unauthorized/>`.
    80110
    81111== Common XML elements ==
    82 There are some XML elements (like {{{<project>}}}, {{{<result>}}}, {{{<workunit>}}}, and {{{<app>}}}) that are common to many command replies. Such elements ~~are~~ will be documented in this section.
    83 
    84 The XML responses are relatively flat, and are parsed in one pass. The relationship between XML elements is determined by what was parsed before it, instead of based on the tree hierarchy like other XML formats do. For example, {{{<result>}}} elements that come ''after'' a particular {{{<project>}}} element are results that belong to that project. They won't be ''inside'' the {{{<project>}}} element.
     112
     113There are some XML elements (like `<project>`, `<result>`, `<workunit>`, and `<app>`) that are common to many command replies. Such elements will be documented in this section.
     114
     115The XML responses are relatively flat, and are parsed in one pass. The relationship between XML elements is determined by what was parsed before it, instead of based on the tree hierarchy like other XML formats do. For example, `<result>` elements that come after a particular `<project>` element are results that belong to that project. They won't be inside the `<project>` element.
     116
     117== Requests and Replies ==
     118
     119These are the requests that can be issued to the client and the replies that are expected. The requests are placed between the opening and closing `<boinc_gui_rpc_request>` tags. The replies are described without the enclosing `<boinc_gui_rpc_reply>` tags.   
     120***
     121
     122* Requests not requiring authentication
     123    * [exchange_versions](#exchange_versions)
     124    * [get_all\_projects_list](#get_all_projects_list)
     125    * [get_cc_status](#get_cc_status)
     126    * [get_disk_usage](#get_disk_usage)
     127    * [get_daily\_xfer_history](#get_daily_xfer_history)
     128    * [get_file_transfers](#get_file_transfers)
     129    * [get_host_info](#get_host_info)
     130    * [get_messages](#get_messages)
     131    * [get_message_count](#get_message_count)
     132    * [get_newer_version](#get_newer_version)
     133    * [get_notices_public](#get_notices_public)
     134    * [get_old_results](#get_old_results)
     135    * [get_project_status](#get_project_status)
     136    * [get_results](#get_results)
     137    * [get_screensaver_tasks](#get_screensaver_tasks)
     138    * [get_simple\_gui_info](#get_simple_gui_info)
     139    * [get_state](#get_state)
     140    * [get_statistics](#get_statistics)
     141 
     142* Requests requiring authentication
     143    * [File transfer operations](#file-transfer-operations)
     144        * [abort_file_transfer](#abort_file_transfer)
     145        * [retry_file_transfer](#retry_file_transfer)
     146    * [Task operations](#task-operations)
     147        * [abort_result](#abort_result)
     148        * [suspend_result](#suspend_result)
     149        * [resume_result](#resume_result)
     150    * [Project operations](#project-operations)
     151        * [project_reset](#project_reset)
     152        * [project_detach](#project_detach)
     153        * [project_update](#project_update)
     154        * [project_suspend](#project_suspend)
     155        * [project_resume](#project_resume)
     156        * [project_nomorework](#project_nomorework)
     157        * [project_allowmorework](#project_allowmorework)
     158        * [project_detach\_when_done](#project_detach_when_done)
     159        * [project_dont\_detach\_when_done](#project_dont_detach_when_done)
     160        * [project_attach](#project_attach)
     161        * [project_attach_poll](#project_attach_poll)
     162        * [get_project\_init_status](#get_project_init_status)
     163        * [get_project_config](#get_project_config)
     164        * [get_project\_config_poll](#get_project_config_poll)
     165    * [Account operations](#account-operations)
     166        * [create_account](#create_account)
     167        * [create_account_poll](#create_account_poll)
     168        * [lookup_account](#lookup_account)
     169        * [lookup_account_poll](#lookup_account_poll)
     170    * [Account Manager operations](#account-manager-operations)
     171        * [acct_mgr_info](#acct_mgr_info)
     172        * [acct_mgr_rpc](#acct_mgr_rpc)
     173        * [acct_mgr\_rpc_poll](#acct_mgr_rpc_poll)       
     174    * [Global preferences operations](#global-preferences-operations)
     175        * [get_global\_prefs_file](#get_global_prefs_file)
     176        * [get_global\_prefs_override](#get_global_prefs_override)
     177        * [set_global\_prefs_override](#set_global_prefs_override)
     178        * [read_global\_prefs_override](#read_global_prefs_override)
     179        * [get_global\_prefs_working](#get_global_prefs_working)
     180    * [Other operations](#other-operations)
     181        * [get_notices](#get_notices)
     182        * [set_host_info](#set_host_info)
     183        * [run_benchmarks](#run_benchmarks)
     184        * [get_proxy_settings](#get_proxy_settings)
     185        * [network_available](#network_available)
     186        * [quit](#quit)
     187        * [set_language](#set_language)
     188        * [set_network_mode](#set_network_mode)
     189        * [set_gpu_mode](#set_gpu_mode)
     190        * [set_run_mode](#set_run_mode)
     191        * [set_proxy_settings](#set_proxy_settings)
     192        * [get_cc_config](#get_cc_config)
     193        * [read_cc_config](#read_cc_config)
     194        * [set_cc_config](#set_cc_config)
     195        * [get_app_config](#get_app_config)
     196        * [set_app_config](#set_app_config)
     197        * [report_device_status](#report_device_status)
     198   
     199   
     200&nbsp;
     201
     202
     203=== The following requests do not require local authorisation. ===
     204---
     205&nbsp;
     206
     207
     208==== `exchange_versions` ====
     209
     210Used to get the version of the running core client and send the version of the request's source.
     211
     212Request:
     213
     214{{{
     215#!xml
     216<exchange_versions>
     217    <major></major>
     218    <minor></minor>
     219    <release></release>
     220</exchange_versions>
     221}}}
     222The sending of the source's version is optional and a simple:
     223
     224{{{
     225#!xml
     226</exchange_versions>
     227}}}
     228would suffice to get the version of the running core client.
     229
     230Reply:
     231
     232{{{
     233#!xml
     234<server_version>
     235    <major></major>
     236    <minor></minor>
     237    <release></release>
     238 </server_version>
     239}}}
     240
     241&nbsp;
     242
     243==== `get_all_projects_list` ====
     244Used to get a list of all the projects as found in the all_projects_list.xml file.
     245
     246Request:
     247
     248{{{
     249#!xml
     250<get_all_projects_list/>
     251}}}
     252
     253Reply:
     254
     255{{{
     256#!xml
     257<?xml version="1.0" encoding="ISO-8859-1" ?>
     258<projects>
     259    <project>
     260        <name></name>
     261        <url></url>
     262        <general_area></general_area>
     263        <specific_area></specific_area>
     264        <description><![CDATA[]]></description>
     265        <home></home>
     266    <platforms>
     267        <name></name>
     268        <name></name>
     269        <name></name>
     270        .
     271        .
     272        .
     273    </platforms>
     274      <summary></summary>
     275    </project>
     276    .
     277    .
     278    .
     279</projects>
     280}}}
     281
     282&nbsp;
     283
     284==== `get_cc_status` ====
     285Show CPU/GPU/network run modes and network connection status (version 6.12+)
     286
     287Request:
     288
     289{{{
     290#!xml
     291<get_cc_status/>
     292}}}
     293
     294Reply:
     295
     296{{{
     297#!xml
     298<cc_status>
     299    <network_status></network_status>
     300    <ams_password_error></ams_password_error>
     301    <task_suspend_reason></task_suspend_reason>
     302    <task_mode></task_mode>
     303    <task_mode_perm></task_mode_perm>
     304    <task_mode_delay></task_mode_delay>
     305    <gpu_suspend_reason></gpu_suspend_reason>
     306    <gpu_mode></gpu_mode>
     307    <gpu_mode_perm></gpu_mode_perm>
     308    <gpu_mode_delay></gpu_mode_delay>
     309    <network_suspend_reason></network_suspend_reason>
     310    <network_mode></network_mode>
     311    <network_mode_perm></network_mode_perm>
     312    <network_mode_delay></network_mode_delay>
     313    <disallow_attach></disallow_attach>
     314    <simple_gui_only></simple_gui_only>
     315    <max_event_log_lines></max_event_log_lines>
     316</cc_status>
     317}}}
     318&nbsp;
     319
     320==== `get_disk_usage` ====
     321Show disk usage by project
     322
     323Request:
     324
     325{{{
     326#!xml
     327<get_disk_usage/>
     328}}}
     329
     330Reply:
     331
     332{{{
     333#!xml
     334<disk_usage_summary>
     335    <project>
     336        <master_url></master_url>
     337        <disk_usage></disk_usage>
     338    </project>
     339    <d_total></d_total>
     340    <d_free></d_free>
     341    <d_boinc></d_boinc>
     342    <d_allowed></d_allowed>
     343</disk_usage_summary>
     344}}}
     345&nbsp;
     346
     347==== `get_daily_xfer_history` ====
     348Show network traffic history of the BOINC client. Read from daily_xfer\_history.xml
     349
     350Request:
     351{{{
     352#!xml
     353<get_daily_xfer_history/>
     354}}}
     355
     356Reply:
     357
     358{{{
     359#!xml
     360<daily_xfers>
     361    <dx>
     362        <when></when>
     363        <up></up>
     364        <down></down>
     365    </dx>
     366    .
     367    .
     368    .
     369</daily_xfers>
     370}}}
     371&nbsp;
     372
     373==== `get_file_transfers` ====
     374Show all current file transfers
     375
     376Request:
     377{{{
     378#!xml
     379<get_file_transfers/>
     380}}}
     381
     382Reply:
     383{{{
     384#!xml
     385<file_transfers>
     386    <file_transfer>
     387        <project_url></project_url>
     388        <project_name></project_name>
     389        <name></name>
     390        <nbytes></nbytes>
     391        <max_nbytes></max_nbytes>
     392        <status></status>
     393        <persistent_file_xfer>
     394            <num_retries></num_retries>
     395            <first_request_time></first_request_time>
     396            <next_request_time></next_request_time>
     397            <time_so_far></time_so_far>
     398            <last_bytes_xferred></last_bytes_xferred>
     399            <is_upload></is_upload>
     400        </persistent_file_xfer>
     401        <file_xfer>
     402            <bytes_xferred></bytes_xferred>
     403            <file_offset></file_offset>
     404            <xfer_speed></xfer_speed>
     405            <url></url>
     406        </file_xfer>
     407    </file_transfer>
     408    .
     409    .
     410    .
     411</file_transfers>
     412}}}
     413
     414&nbsp;
     415
     416==== `get_host_info` ====
     417Get information about host hardware and usage
     418
     419Request:
     420{{{
     421#!xml
     422<get_host_info/>
     423}}}
     424
     425Reply:
     426
     427{{{
     428#!xml
     429<host_info>
     430    <timezone></timezone>
     431    <domain_name></domain_name>
     432    <ip_addr></ip_addr>
     433    <host_cpid></host_cpid>
     434    <p_ncpus></p_ncpus>
     435    <p_vendor></p_vendor>
     436    <p_model></p_model>
     437    <p_features></p_features>
     438    <p_fpops></p_fpops>
     439    <p_iops></p_iops>
     440    <p_membw></p_membw>
     441    <p_calculated></p_calculated>
     442    <p_vm_extensions_disabled></p_vm_extensions_disabled>
     443    <m_nbytes></m_nbytes>
     444    <m_cache></m_cache>
     445    <m_swap></m_swap>
     446    <d_total></d_total>
     447    <d_free></d_free>
     448    <os_name></os_name>
     449    <os_version></os_version>
     450    <product_name></product_name>
     451    <virtualbox_version></virtualbox_version>
     452    <coprocs>
     453        <coproc_intel_gpu>
     454            <count></count>
     455            <name></name>
     456            <available_ram></available_ram>
     457            <have_opencl></have_opencl>
     458            <peak_flops></peak_flops>
     459            <version></version>
     460            <coproc_opencl>
     461                <name></name>
     462                <vendor></vendor>
     463                <vendor_id></vendor_id>
     464                <available></available>
     465                <half_fp_config></half_fp_config>
     466                <single_fp_config></single_fp_config>
     467                <double_fp_config></double_fp_config>
     468                <endian_little></endian_little>
     469                <execution_capabilities></execution_capabilities>
     470                <extensions></extensions>
     471                <global_mem_size></global_mem_size>
     472                <local_mem_size></local_mem_size>
     473                <max_clock_frequency></max_clock_frequency>
     474                <max_compute_units></max_compute_units>
     475                <nv_compute_capability_major></nv_compute_capability_major>
     476                <nv_compute_capability_minor></nv_compute_capability_minor>
     477                <amd_simd_per_compute_unit></amd_simd_per_compute_unit>
     478                <amd_simd_width></amd_simd_width>
     479                <amd_simd_instruction_width></amd_simd_instruction_width>
     480                <opencl_platform_version></opencl_platform_version>
     481                <opencl_device_version></opencl_device_version>
     482                <opencl_driver_version></opencl_driver_version>
     483            </coproc_opencl>
     484        </coproc_intel_gpu>
     485    </coprocs>
     486    <opencl_cpu_prop>
     487        <platform_vendor></platform_vendor>
     488        <opencl_cpu_info>
     489            <name></name>
     490            <vendor></vendor>
     491            <vendor_id></vendor_id>
     492            <available></available>
     493            <half_fp_config></half_fp_config>
     494            <single_fp_config></single_fp_config>
     495            <double_fp_config></double_fp_config>
     496            <endian_little></endian_little>
     497            <execution_capabilities></execution_capabilities>
     498            <extensions></extensions>
     499            <global_mem_size></global_mem_size>
     500            <local_mem_size></local_mem_size>
     501            <max_clock_frequency></max_clock_frequency>
     502            <max_compute_units></max_compute_units>
     503            <nv_compute_capability_major></nv_compute_capability_major>
     504            <nv_compute_capability_minor></nv_compute_capability_minor>
     505            <amd_simd_per_compute_unit></amd_simd_per_compute_unit>
     506            <amd_simd_width></amd_simd_width>
     507            <amd_simd_instruction_width></amd_simd_instruction_width>
     508            <opencl_platform_version></opencl_platform_version>
     509            <opencl_device_version></opencl_device_version>
     510            <opencl_driver_version></opencl_driver_version>
     511        </opencl_cpu_info>
     512    </opencl_cpu_prop>
     513</host_info>
     514}}}
     515&nbsp;
     516
     517==== `get_messages` ====
     518Show messages with sequence numbers beyond the given `seqno`
     519
     520Request:
     521
     522}}}`XML
     523<get_messages>
     524    <seqno></seqno>
     525    <translatable/>
     526</get_messages>
     527}}}`
     528The `<translatable/>` tag is optional.
     529
     530Reply:
     531
     532{{{
     533#!xml
     534<msgs>
     535    <msg>
     536        <project></project>
     537        <pri></pri>
     538        <seqno></seqno>
     539        <body><![CDATA[]]></body>
     540        <time></time>
     541    </msg>
     542    .
     543    .
     544    .
     545</msgs>
     546}}}
     547
     548&nbsp;
     549
     550==== `get_message_count` ====
     551
     552Show largest message seqno
     553
     554Request:
     555
     556{{{
     557#!xml
     558<get_message_count/>
     559}}}
     560
     561Reply:
     562
     563{{{
     564#!xml
     565<seqno></seqno>
     566}}}
     567
     568&nbsp;
     569
     570==== `get_newer_version` ====
     571Get newer version number, if any, and download url
     572
     573Request:
     574
     575{{{
     576#!xml
     577<get_newer_version/>
     578}}}
     579
     580Reply:
     581
     582{{{
     583#!xml
     584<newer_version></newer_version>
     585<download_url></download_url>
     586}}}
     587&nbsp;
     588
     589==== `get_notices_public` ====
     590Returns only non-private notices, doesn't require authentication
     591
     592Request:
     593
     594{{{
     595#!xml
     596<get_notices_public>
     597    <seqno></seqno>
     598</get_notices_public>
     599}}}
     600
     601Reply:
     602
     603{{{
     604#!xml
     605<notices>
     606    <notice>
     607        <title></title>
     608        <description><![CDATA[]]></description>
     609        <create_time></create_time>
     610        <arrival_time></arrival_time>
     611        <is_private></is_private>
     612        <project_name></project_name>
     613        <category></category>
     614        <link></link>
     615        <seqno></seqno>
     616    </notice>
     617    .
     618    .
     619    .
     620</notices>
     621}}}
     622&nbsp;
     623
     624==== `get_old_results` ====
     625Show old tasks
     626
     627Request:
     628
     629{{{
     630#!xml
     631<get_old_results/>
     632}}}
     633
     634Reply:
     635
     636{{{
     637#!xml
     638<old_results>
     639    <old_result>
     640        <project_url></project_url>
     641        <result_name></result_name>
     642        <app_name></app_name>
     643        <exit_status></exit_status>
     644        <elapsed_time></elapsed_time>
     645        <cpu_time></cpu_time>
     646        <completed_time></completed_time>
     647        <create_time></create_time>
     648    </old_result>
     649    .
     650    .
     651    .
     652</old_results>
     653}}}
     654&nbsp;
     655
     656==== `get_project_status` ====
     657Show status of all attached projects
     658
     659Request:
     660
     661{{{
     662#!xml
     663<get_project_status/>
     664}}}
     665Reply:
     666
     667{{{
     668#!xml
     669<projects>
     670    <project>
     671        <master_url></master_url>
     672        <project_name></project_name>
     673        <symstore></symstore>
     674        <user_name></user_name>
     675        <team_name></team_name>
     676        <host_venue></host_venue>
     677        <email_hash></email_hash>
     678        <cross_project_id></cross_project_id>
     679        <external_cpid></external_cpid>
     680        <cpid_time></cpid_time>
     681        <user_total_credit></user_total_credit>
     682        <user_expavg_credit></user_expavg_credit>
     683        <user_create_time></user_create_time>
     684        <rpc_seqno></rpc_seqno>
     685        <userid></userid>
     686        <teamid></teamid>
     687        <hostid></hostid>
     688        <host_total_credit></host_total_credit>
     689        <host_expavg_credit></host_expavg_credit>
     690        <host_create_time></host_create_time>
     691        <nrpc_failures></nrpc_failures>
     692        <master_fetch_failures></master_fetch_failures>
     693        <min_rpc_time></min_rpc_time>
     694        <next_rpc_time></next_rpc_time>
     695        <rec></rec>
     696        <rec_time></rec_time>
     697        <resource_share></resource_share>
     698        <desired_disk_usage></desired_disk_usage>
     699        <duration_correction_factor></duration_correction_factor>
     700        <sched_rpc_pending></sched_rpc_pending>
     701        <send_time_stats_log></send_time_stats_log>
     702        <send_job_log></send_job_log>
     703        <njobs_success></njobs_success>
     704        <njobs_error></njobs_error>
     705        <elapsed_time></elapsed_time>
     706        <last_rpc_time></last_rpc_time>
     707       
     708        (<anonymous_platform/>)
     709        (<master_url_fetch_pending/>)
     710        (<trickle_up_pending/>)
     711        (<send_full_workload/>)
     712        (<dont_use_dcf/>)
     713        (<non_cpu_intensive/>)
     714        (<verify_files_on_app_start/>)
     715        (<suspended_via_gui/>)
     716        (<dont_request_more_work/>)
     717        (<detach_when_done/>)
     718        (<ended/>)
     719        (<attached_via_acct_mgr/>)
     720        (<scheduler_rpc_in_progress/>)
     721        (<use_symlinks/>)       
     722       
     723        <rsc_backoff_time>
     724            <name>intel_gpu</name>
     725            <value></value>
     726        </rsc_backoff_time>
     727        <rsc_backoff_interval>
     728            <name></name>
     729            <value></value>
     730        </rsc_backoff_interval>
     731        .
     732        .
     733        .
     734        <no_rsc_ams></no_rsc_ams>
     735        <no_rsc_apps></no_rsc_apps>
     736        <no_rsc_pref></no_rsc_pref>
     737        <no_rsc_config></no_rsc_config>
     738        <ams_resource_share_new></ams_resource_share_new>
     739        <gui_urls>
     740            <gui_url>
     741                <name></name>
     742                <description></description>
     743                <url></url>
     744            </gui_url>
     745            .
     746            .
     747            .
     748        </gui_urls>
     749        <sched_priority></sched_priority>
     750        <project_files_downloaded_time></project_files_downloaded_time>
     751        <download_backoff></download_backoff>
     752        <upload_backoff></upload_backoff>
     753        <venue></venue>
     754        <project_dir></project_dir>
     755        <scheduler_url></scheduler_url>
     756        <code_sign_key></code_sign_key>
     757        <trickle_up_url></trickle_up_url>
     758        <cpu_ec></cpu_ec>
     759        <cpu_time></cpu_time>
     760        <gpu_ec></gpu_ec>
     761        <gpu_time></gpu_time>
     762    </project>
     763    .
     764    .
     765    .
     766</projects>
     767}}}
     768&nbsp;
     769
     770==== `get_results` ====
     771Show tasks
     772
     773Request:
     774
     775{{{
     776#!xml
     777<get_results>
     778    <active_only></active_only>
     779</get_results>
     780}}}
     781
     782Reply:
     783
     784{{{
     785#!xml
     786<results>
     787    <result>
     788        <name></name>
     789        <wu_name></wu_name>
     790        <platform></platform>
     791        <version_num></version_num>
     792        <plan_class></plan_class>
     793        <project_url></project_url>
     794        <final_cpu_time></final_cpu_time>
     795        <final_elapsed_time></final_elapsed_time>
     796        <exit_status></exit_status>
     797        <state></state>
     798        <report_deadline></report_deadline>
     799        <received_time></received_time>
     800        <estimated_cpu_time_remaining></estimated_cpu_time_remaining>
     801        <project_suspended_via_gui/>
     802        <report_immediately/>
     803        <active_task>
     804            <active_task_state></active_task_state>
     805            <app_version_num></app_version_num>
     806            <slot></slot>
     807            <pid></pid>
     808            <scheduler_state></scheduler_state>
     809            <checkpoint_cpu_time></checkpoint_cpu_time>
     810            <fraction_done></fraction_done>
     811            <current_cpu_time></current_cpu_time>
     812            <elapsed_time></elapsed_time>
     813            <swap_size></swap_size>
     814            <working_set_size></working_set_size>
     815            <working_set_size_smoothed></working_set_size_smoothed>
     816            <page_fault_rate></page_fault_rate>
     817            <bytes_sent></bytes_sent>
     818            <bytes_received></bytes_received>
     819            <progress_rate></progress_rate>
     820        </active_task>
     821        .
     822        .
     823        .
     824        <resources></resources>
     825    </result>
     826    .
     827    .
     828    .
     829</results>
     830}}}
     831
     832&nbsp;
     833
     834==== `get_screensaver_tasks` ====
     835Show suspend reason and active tasks
     836
     837Request:
     838
     839{{{
     840#!xml
     841<get_screensaver_tasks/>
     842}}}
     843
     844Reply:
     845
     846{{{
     847#!xml
     848<handle_get_screensaver_tasks>
     849    <suspend_reason></suspend_reason>
     850    <active_task>
     851            <active_task_state></active_task_state>
     852            <app_version_num></app_version_num>
     853            <slot></slot>
     854            <pid></pid>
     855            <scheduler_state></scheduler_state>
     856            <checkpoint_cpu_time></checkpoint_cpu_time>
     857            <fraction_done></fraction_done>
     858            <current_cpu_time></current_cpu_time>
     859            <elapsed_time></elapsed_time>
     860            <swap_size></swap_size>
     861            <working_set_size></working_set_size>
     862            <working_set_size_smoothed></working_set_size_smoothed>
     863            <page_fault_rate></page_fault_rate>
     864            <bytes_sent></bytes_sent>
     865            <bytes_received></bytes_received>
     866            <progress_rate></progress_rate>
     867        </active_task>
     868        .
     869        .
     870        .
     871</handle_get_screensaver_tasks>
     872}}}
     873
     874&nbsp;
     875
     876==== `get_simple_gui_info` ====
     877Show status of projects and active tasks
     878
     879Request:
     880
     881{{{
     882#!xml
     883<get_simple_gui_info/>
     884}}}
     885
     886Reply:
     887
     888{{{
     889#!xml
     890<simple_gui_info>
     891    <project>
     892        .
     893        .
     894        .
     895    </project>
     896    <result>
     897        .
     898        .
     899        .
     900    </result>
     901</simple_gui_info>
     902}}}
     903
     904&nbsp;
     905
     906==== `get_state` ====
     907Get the entire state
     908
     909Request:
     910
     911{{{
     912#!xml
     913<get_state/>
     914}}}
     915
     916Reply:
     917
     918{{{
     919#!xml
     920<client_state>
     921    <host_info>
     922    </host_info>
     923    <net_stats>
     924    </net_stats>
     925    <time_stats>
     926    </time_stats>
     927    <project>
     928    </project>
     929    .
     930    .
     931    .
     932    <app>
     933    </app>
     934    .
     935    .
     936    .
     937    <app_version>
     938    </app_version>
     939    .
     940    .
     941    .
     942    <workunit>
     943    </workunit>
     944    .
     945    .
     946    .
     947    <result>
     948        <active_task>
     949        </active_task>
     950    </result>
     951    .
     952    .
     953    .
     954    platform_name></platform_name>
     955    <core_client_major_version></core_client_major_version>
     956    <core_client_minor_version></core_client_minor_version>
     957    <core_client_release></core_client_release>
     958    <executing_as_daemon></executing_as_daemon>
     959    <platform></platform>
     960    <global_preferences>
     961        .
     962        .
     963        .
     964    </global_preferences>
     965</client_state>
     966}}}
     967
     968&nbsp;
     969
     970==== `get_statistics` ====
     971Get statistics for the projects the client is attached to
     972
     973Request:
     974
     975{{{
     976#!xml
     977<get_statistics/>
     978}}}
     979
     980Reply:
     981
     982{{{
     983#!xml
     984<statistics>
     985<project_statistics>
     986        <master_url></master_url>
     987        <daily_statistics>
     988            <day></day>
     989            <user_total_credit></user_total_credit>
     990            <user_expavg_credit></user_expavg_credit>
     991            <host_total_credit></host_total_credit>
     992            <host_expavg_credit></host_expavg_credit>
     993        </daily_statistics>
     994        .
     995        .
     996        .
     997    </project_statistics>
     998    .
     999    .
     1000    .
     1001</statistics>
     1002}}}
     1003&nbsp;
     1004
     1005---
     1006=== The following requests require local authentication ===
     1007
     1008
     1009In this section the replies fall in one of three categories. For requests that retrieve data the replies depend on the kind of data that is retrieved. For _control of the client_ operations they are either:
     1010
     1011{{{
     1012#!xml
     1013<success/>
     1014}}}
     1015
     1016upon a successful request, or:
     1017
     1018{{{
     1019#!xml
     1020<error>human-readable error message</error>
     1021}}}
     1022
     1023upon an unsuccessful request.
     1024
     1025If the request retrieves data the reply will be documented.
     1026Otherwise only requests will be documented.
     1027
     1028See also ( [Common Replies](#common-replies) )
     1029
     1030
     1031&nbsp;
     1032
     1033=== File transfer operations ===
     1034---
     1035 
     1036==== `abort_file_transfer` ====
     1037Abort a pending file transfer
     1038
     1039Request:
     1040
     1041{{{
     1042#!xml
     1043<abort_file_transfer>
     1044    <project_url></project_url>
     1045    <filename></filename>
     1046</abort_file_transfer>
     1047}}}
     1048&nbsp;
     1049
     1050==== `retry_file_transfer` ====
     1051Retry a file transfer (Client will need temporary network access)
     1052
     1053Request:
     1054
     1055{{{
     1056#!xml
     1057<retry_file_transfer>
     1058    <project_url></project_url>
     1059    <filename></filename>
     1060</retry_file_transfer>
     1061}}}
     1062
     1063
     1064&nbsp;
     1065
     1066=== Task operations ===
     1067---
     1068==== `abort_result` ====
     1069Abort a task
     1070
     1071Request:
     1072
     1073{{{
     1074#!xml
     1075<abort_result>
     1076    <project_url></project_url>
     1077    <name></name>
     1078</abort_result>
     1079}}}
     1080&nbsp;
     1081
     1082==== `suspend_result` ====
     1083Suspend a running task (Note: Even if a task is already suspended the request will return success)
     1084
     1085Request:
     1086
     1087{{{
     1088#!xml
     1089<suspend_result>
     1090    <project_url></project_url>
     1091    <name></name>
     1092</suspend_result>
     1093}}}
     1094&nbsp;
     1095
     1096==== `resume_result` ====
     1097Resume a suspended task (Note: Even if a task is already running the request will return success)
     1098
     1099Request:
     1100
     1101{{{
     1102#!xml
     1103<resume_result>
     1104    <project_url></project_url>
     1105    <name></name>
     1106</resume_result>
     1107}}}
     1108
     1109&nbsp;
     1110
     1111=== Project operations ===
     1112---
     1113
     1114&nbsp;
     1115==== `project_reset` ====
     1116Reset a project (Client will need temporary network access)
     1117
     1118Request:
     1119
     1120{{{
     1121#!xml
     1122<project_reset>
     1123    <project_url></project_url>
     1124</project_reset>
     1125}}}
     1126
     1127&nbsp;
     1128==== `project_detach` ====
     1129Detach from a project
     1130
     1131Request:
     1132
     1133{{{
     1134#!xml
     1135<project_detach>
     1136    <project_url></project_url>
     1137</project_detach>
     1138}}}
     1139
     1140&nbsp;
     1141==== `project_update` ====
     1142Update a project (Client will need temporary network access)
     1143
     1144Request:
     1145
     1146{{{
     1147#!xml
     1148<project_update>
     1149    <project_url></project_url>
     1150</project_update>
     1151}}}
     1152
     1153&nbsp;
     1154==== `project_suspend` ====
     1155Suspend a project
     1156
     1157Request:
     1158
     1159{{{
     1160#!xml
     1161<project_suspend>
     1162    <project_url></project_url>
     1163</project_suspend>
     1164}}}
     1165
     1166&nbsp;
     1167==== `project_resume` ====
     1168Resume a project
     1169
     1170Request:
     1171
     1172{{{
     1173#!xml
     1174<project_resume>
     1175    <project_url></project_url>
     1176</project_resume>
     1177}}}
     1178
     1179&nbsp;
     1180==== `project_nomorework` ====
     1181Stop getting new tasks for a project
     1182
     1183Request:
     1184
     1185{{{
     1186#!xml
     1187<project_nomorework>
     1188    <project_url></project_url>
     1189</project_nomorework>
     1190}}}
     1191
     1192&nbsp;
     1193==== `project_allowmorework` ====
     1194Receive new tasks for a project. Reverse `project_nomorework`.
     1195
     1196Request:
     1197
     1198{{{
     1199#!xml
     1200<project_allowmorework>
     1201    <project_url></project_url>
     1202</project_allowmorework>
     1203}}}
     1204
     1205&nbsp;
     1206==== `project_detach_when_done` ====
     1207Detach from a project after all it's tasks are finished.
     1208
     1209Request:
     1210
     1211{{{
     1212#!xml
     1213<project_detach_when_done>
     1214    <project_url></project_url>
     1215</project_detach_ahen_done>
     1216}}}
     1217&nbsp;
     1218==== `project_dont_detach_when_done` ====
     1219Don't detach from a project after all it's tasks are finished. Reverse `project_detach_when_done`
     1220
     1221Request:
     1222
     1223{{{
     1224#!xml
     1225<project_dont_detach_when_done>
     1226    <project_url></project_url>
     1227</project_dont_detach_ahen_done>
     1228}}}
     1229&nbsp;
     1230==== `project_attach` ====
     1231Attach the client to a project. There are two kinds of requests. One using a project_init.xml file with all the necessary data and one not. (Client will need temporary network access)
     1232
     1233Request using file:
     1234
     1235{{{
     1236#!xml
     1237<project_attach>
     1238    <use_config_file/>
     1239</project_attach>
     1240}}}
     1241
     1242Request not using file:
     1243
     1244{{{
     1245#!xml
     1246<project_attach>
     1247    <project_url></project_url>
     1248    <authenticator></authenticator>
     1249    <project_name></project_name>
     1250</project_attach>
     1251}}}
     1252
     1253This request is asynchronous. This means that it will reply immediately with either `<success/>` or an error concerning missing or malformated input. Another kind of possible error is: `<error>Already attached to project</error>`.
     1254
     1255**Note:** `<success/>` does not mean that the attachment was successful but that the request was made successfuly.
     1256
     1257To see if the attachment was successful the request `<project_attach_poll/>` has to be made.
     1258
     1259&nbsp;
     1260==== `project_attach_poll` ====
     1261The aforementioned request. (Client will need temporary network access)
     1262
     1263Request:
     1264
     1265{{{
     1266#!xml
     1267<project_attach_poll/>
     1268}}}
     1269
     1270Reply:
     1271
     1272{{{
     1273#!xml
     1274<project_attach_reply>
     1275    [<message></message>]
     1276    [         .         ]
     1277    [         .         ]
     1278    [         .         ]
     1279    <error_num></error_num>
     1280</project_attach_reply>
     1281}}}
     1282
     1283**Note:** A source of confusion could be the fact that the `<project_attach_poll>`request will only return errors associated with the attachment process. If a user attaches to a non existing project or uses an invalid authenticator but the attachment per se has no errors the request will return with 0 exit code. In that case the client's messages will have to be checked.
     1284
     1285&nbsp;
     1286==== `get_project_init_status` ====
     1287Get the contents of the project_init.xml file if present
     1288
     1289Request:
     1290
     1291{{{
     1292#!xml
     1293<get_project_init_status/>
     1294}}}
     1295Reply:
     1296
     1297{{{
     1298#!xml
     1299<get_project_init_status>
     1300    <url></url>
     1301    <name></name>
     1302    <team_name></team_name>
     1303    <setup_cookie></setup_cookie>
     1304</get_project_init_status>
     1305}}}
     1306&nbsp;
     1307==== `get_project_config` ====
     1308Fetch the project configuration file from the specified url. Asynchronous request. (Client will need temporary network access)
     1309
     1310Request:
     1311
     1312{{{
     1313#!xml
     1314<get_project_config>
     1315    <url></url>
     1316</get_project_config>
     1317}}}
     1318&nbsp;
     1319==== `get_project_config_poll` ====
     1320The polling call for the previous request. Not a check for the successful fetching of the file but of the successful request. (Client will need temporary network access) 
     1321
     1322Request:
     1323
     1324{{{
     1325#!xml
     1326<get_project_config_poll/>
     1327}}}
     1328
     1329Reply:
     1330
     1331Successful request:
     1332
     1333{{{
     1334#!xml
     1335[<project_config>]
     1336[        .       ]
     1337[        .       ]
     1338[        .       ]
     1339</project_config>
     1340}}}
     1341Unsuccessful request:
     1342
     1343{{{
     1344#!xml
     1345<project_config>
     1346    <error_num></error_num>
     1347</project_config>
     1348}}}
     1349
     1350
     1351&nbsp;
     1352
     1353=== Account operations (all require network access) ===
     1354---
     1355
     1356==== `create_account` ====
     1357Create an account for a given project. Asynchronous call
     1358
     1359Request:
     1360
     1361{{{
     1362#!xml
     1363<create_account>
     1364    <url></url>
     1365    <email_addr></email_addr>
     1366    <passwd_hash></passwd_hash>
     1367    <user_name></user_name>
     1368    <team_name></team_name>
     1369</create_account>
     1370}}}
     1371
     1372&nbsp;
     1373==== `create_account_poll` ====
     1374The polling call for the previous request
     1375
     1376Request:
     1377
     1378{{{
     1379#!xml
     1380<create_account_poll/>
     1381}}}
     1382
     1383&nbsp;
     1384==== `lookup_account` ====
     1385Look for an account in a given project. Asynchronous call.
     1386
     1387Request:
     1388
     1389{{{
     1390#!xml
     1391<lookup_account>
     1392    <url></url>
     1393    <email_addr></email_addr>
     1394    <passwd_hash></passwd_hash>
     1395    <ldap_auth></ldap_auth>
     1396    <server_assigned_cookie></server_assigned_cookie>
     1397    <server_cookie></server_cookie>
     1398</lookup_account>
     1399}}}
     1400
     1401&nbsp;
     1402==== `lookup_account_poll` ====
     1403The polling call for the previous request. This request is designed to be used within the context of a function (e.g. inside boinccmd's `--lookup_account`) and the results to be printed by an appropriate function (e.g. `ACCOUNT_OUT::print()`) so it will not be very useful as a standalone RPC call. To get the same functionality as the above command within the context of an RPC the [lookup_account.php](https://boinc.berkeley.edu/trac/wiki/WebRpc) script can be used.
     1404
     1405Request:
     1406
     1407{{{
     1408#!xml
     1409<lookup_account_poll/>
     1410}}}
     1411
     1412
     1413
     1414&nbsp;
     1415
     1416=== Account manager operations ===
     1417---
     1418
     1419==== `acct_mgr_info` ====
     1420Retrieve account manager information
     1421
     1422Request:
     1423
     1424{{{
     1425#!xml
     1426<acct_mgr_info/>
     1427}}}
     1428
     1429Reply:
     1430
     1431{{{
     1432#!xml
     1433<acct_mgr_info>
     1434   <acct_mgr_url></acct_mgr_url>
     1435   <acct_mgr_name></acct_mgr_name>
     1436   (<have_credentials/>)
     1437   (<cookie_required/>)
     1438   (<cookie_failure_url></cookie_failure_url>)
     1439</acct_mgr_info>
     1440}}}
     1441&nbsp;
     1442
     1443==== `acct_mgr_rpc` ====
     1444Make an rpc to an account manager. (Client will need temporary network access). It has three uses. Used by the `--join_acct_mgr` command of the [boinccmd](http://boinc.berkeley.edu/wiki/Boinccmd_tool) tool to join an account manager. Used by the same tool's `--quit_acct_mgr`command with null arguments to quit an account manager. And lastly used to trigger an RPC to the current account manager.
     1445
     1446There are two requests depending on whether there is a file with the necessary data or not.
     1447
     1448Using said file:
     1449
     1450{{{
     1451#!xml
     1452<acct_mgr_rpc>
     1453    <use_config_file/>
     1454</acct_mgr_rpc>
     1455}}}
     1456
     1457Not using it:
     1458
     1459{{{
     1460#!xml
     1461<acct_mgr_rpc>
     1462    <url></url>
     1463    <name></name>
     1464    <password></password>
     1465</acct_mgr_rpc>
     1466}}}
     1467
     1468This request is asynchronous. It returns immediately with either `<success/>`or one of the following errors: `<error>bad arg</error>` or `<error>unrecognized op: act_mgr_rpc</error>`. To get the results of the request a call to `<acct_mgr_rpc_poll/>` has to be made.
     1469
     1470&nbsp;
     1471
     1472==== `acct_mgr_rpc_poll` ====
     1473The previously mentioned call. (Client will need temporary network access)
     1474
     1475Request:
     1476
     1477{{{
     1478#!xml
     1479<acct_mgr_rpc_poll/>
     1480}}}
     1481
     1482Reply:
     1483
     1484{{{
     1485#!xml
     1486<acct_mgr_rpc_reply>
     1487    [<message></message>]
     1488    <error_num></error_num>
     1489</acct_mgr_rpc_reply>
     1490}}}
     1491
     1492&nbsp;
     1493
     1494=== Global preferences operations ===
     1495---
     1496
     1497==== `get_global_prefs_file` ====
     1498Get the contents of the `global_prefs.xml` file if present
     1499
     1500Request:
     1501
     1502{{{
     1503#!xml
     1504<get_global_prefs_file/>
     1505}}}
     1506
     1507Reply:
     1508
     1509{{{
     1510#!xml
     1511<global_preferences>
     1512         .
     1513         .
     1514         .
     1515</global_preferences>
     1516}}}
     1517
     1518&nbsp;
     1519
     1520==== `get_global_prefs_override` ====
     1521Get the contents of the `global_prefs_override.xml` file if present
     1522
     1523Request:
     1524
     1525{{{
     1526#!xml
     1527<get_global_prefs_override/>
     1528}}}
     1529
     1530Reply:
     1531
     1532{{{
     1533#!xml
     1534<global_preferences>
     1535         .
     1536         .
     1537         .
     1538</global_preferences>
     1539}}}
     1540&nbsp;
     1541
     1542==== `set_global_prefs_override` ====
     1543Write the `global_prefs_override.xml` file
     1544
     1545Request:
     1546
     1547{{{
     1548#!xml
     1549<set_global_prefs_override>
     1550    <global_preferences>
     1551             .
     1552             .
     1553             .
     1554    </global_preferences>
     1555</set_global_prefs_override>
     1556}}}
     1557
     1558&nbsp;
     1559
     1560==== `read_global_prefs_override` ====
     1561Read the `global_prefs_override.xml` file and set the preferences accordingly
     1562
     1563Request:
     1564
     1565{{{
     1566#!xml
     1567<read_global_prefs_override/>
     1568}}}
     1569
     1570&nbsp;
     1571
     1572==== `get_global_prefs_working` ====
     1573Get the currently used `global_prefs`
     1574
     1575Request:
     1576
     1577{{{
     1578#!xml
     1579<get_global_prefs_working/>
     1580}}}
     1581
     1582Reply:
     1583
     1584{{{
     1585#!xml
     1586<global_preferences>
     1587         .
     1588         .
     1589         .
     1590</global_preferences>
     1591}}}
     1592
     1593&nbsp;
     1594
     1595=== Other operations ===
     1596---
     1597
     1598==== `get_notices` ====
     1599Returns both private and non-private notices
     1600
     1601Request:
     1602
     1603{{{
     1604#!xml
     1605<get_notices>
     1606    <seqno></seqno>
     1607</get_notices>
     1608}}}
     1609
     1610Reply:
     1611
     1612{{{
     1613#!xml
     1614<notices>
     1615    <notice>
     1616        <title></title>
     1617        <description><![CDATA[]]></description>
     1618        <create_time></create_time>
     1619        <arrival_time></arrival_time>
     1620        <is_private></is_private>
     1621        <project_name></project_name>
     1622        <category></category>
     1623        <link></link>
     1624        <seqno></seqno>
     1625    </notice>
     1626    .
     1627    .
     1628    .
     1629</notices>
     1630}}}
     1631&nbsp;
     1632
     1633==== `set_host_info` ====
     1634Set the `product_name` field of `host_info`
     1635
     1636Request:
     1637
     1638{{{
     1639#!xml
     1640<set_host_info>
     1641    <host_info>
     1642        <product_name></product_name>
     1643    </host_info>
     1644</set_host_info>
     1645}}}
     1646&nbsp;
     1647
     1648==== `run_benchmarks` ====
     1649Run benchmarks
     1650
     1651Request:
     1652
     1653{{{
     1654#!xml
     1655<run_benchmarks/>
     1656}}}
     1657&nbsp;
     1658
     1659==== `get_proxy_settings` ====
     1660Get the proxy settings
     1661
     1662Request:
     1663
     1664{{{
     1665#!xml
     1666<get_proxy_settings/>
     1667}}}
     1668
     1669Reply:
     1670
     1671{{{
     1672#!xml
     1673<proxy_info>
     1674    [<use_http_proxy/>]
     1675    [<use_socks_proxy/>]
     1676    [<use_http_auth/>]
     1677    <socks_server_name></socks_server_name>
     1678    <socks_server_port></socks_server_port>
     1679    <http_server_name></http_server_name>
     1680    <http_server_port></http_server_port>
     1681    <socks5_user_name></socks5_user_name>
     1682    <socks5_user_passwd></socks5_user_passwd>
     1683    <socks5_remote_dns></socks5_remote_dns>
     1684    <http_user_name></http_user_name>
     1685    <http_user_passwd></http_user_passwd>
     1686    <no_autodetect></no_autodetect>
     1687    <no_proxy></no_proxy>
     1688    [<autodetect_protocol></autodetect_protocol>]
     1689    [<autodetect_server_name></autodetect_server_name>]
     1690    [<autodetect_port></autodetect_port>]
     1691</proxy_info>
     1692}}}
     1693
     1694&nbsp;
     1695
     1696==== `network_available` ====
     1697Retry deferred network communication
     1698
     1699Request:
     1700
     1701{{{
     1702#!xml
     1703<network_available/>
     1704}}}
     1705
     1706&nbsp;
     1707
     1708==== `quit` ====
     1709Tell client to exit
     1710
     1711Request:
     1712
     1713{{{
     1714#!xml
     1715<quit/>
     1716}}}
     1717
     1718&nbsp;
     1719
     1720==== `set_language` ====
     1721Set the language field in the client_state.xml file to append it in any subsequent GET calls to the original URL and translate notices
     1722
     1723Request:
     1724
     1725{{{
     1726#!xml
     1727<set_language>
     1728    <language></language>
     1729</set_language>
     1730}}}
     1731&nbsp;
     1732
     1733==== `set_network_mode` ====
     1734Set the network mode for given duration (in seconds)
     1735
     1736Request:
     1737
     1738{{{
     1739#!xml
     1740<set_network_mode>
     1741    [<always/>]
     1742    [<never/>]
     1743    [<auto/>]
     1744    [<restore/>]
     1745    <duration></duration>
     1746</set_network_mode>
     1747}}}
     1748
     1749&nbsp;
     1750
     1751==== `set_gpu_mode` ====
     1752Set GPU run mode for given duration (in seconds)
     1753
     1754Request:
     1755
     1756{{{
     1757#!xml
     1758<set_gpu_mode>
     1759    [<always/>]
     1760    [<never/>]
     1761    [<auto/>]
     1762    [<restore/>]
     1763    <duration></duration>
     1764</set_gpu_mode>
     1765}}}
     1766
     1767&nbsp;
     1768
     1769==== `set_run_mode` ====
     1770Set run mode for given duration (in seconds)
     1771
     1772Request:
     1773
     1774{{{
     1775#!xml
     1776<set_run_mode>
     1777    [<always/>]
     1778    [<never/>]
     1779    [<auto/>]
     1780    [<restore/>]
     1781    <duration></duration>
     1782</set_run_mode>
     1783}}}
     1784
     1785&nbsp;
     1786
     1787==== `set_proxy_settings` ====
     1788Set the proxy settings
     1789
     1790Request:
     1791
     1792{{{
     1793#!xml
     1794<set_proxy_settings>
     1795    <proxy_info>
     1796        [<use_http_proxy/>]
     1797        [<use_socks_proxy/>]
     1798        [<use_http_auth/>]
     1799        <http_server_name></http_server_name>
     1800        <http_server_port></http_server_port>
     1801        <http_user_name></http_user_name>
     1802        <http_user_passwd></http_user_passwd>
     1803        <socks_server_name></socks_server_name>
     1804        <socks_server_port></socks_server_port>
     1805        <socks5_user_name></socks5_user_name>
     1806        <socks5_user_passwd></socks5_user_passwd>
     1807        <socks5_remote_dns></socks5_remote_dns>
     1808        <no_proxy></no_proxy>
     1809    </proxy_info>
     1810</set_proxy_settings>
     1811}}}
     1812
     1813&nbsp;
     1814
     1815==== `get_cc_config` ====
     1816Get the contents of the cc_config.xml file if present
     1817
     1818Request:
     1819
     1820{{{
     1821#!xml
     1822<get_cc_config/>
     1823}}}
     1824
     1825Reply: The contents of the file.
     1826
     1827&nbsp;
     1828
     1829==== `read_cc_config` ====
     1830Read the `cc_config.xml` file and set the configuration accordingly. If no such file is present or it's contents are not formatted correctly the defaults are used.
     1831
     1832Request:
     1833
     1834{{{
     1835#!xml
     1836<read_cc_config/>
     1837}}}
     1838
     1839&nbsp;
     1840
     1841==== `set_cc_config` ====
     1842Write a new cc_config.xml file
     1843
     1844Request:
     1845
     1846{{{
     1847#!xml
     1848<set_cc_config>
     1849      .
     1850      .
     1851      .
     1852</set_cc_config>
     1853}}}
     1854&nbsp;
     1855
     1856==== `get_app_config` ====
     1857Get the contents of the app_config.xml file if present
     1858
     1859Request:
     1860
     1861{{{
     1862#!xml
     1863<get_app_config/>
     1864}}}
     1865
     1866Reply: The contents of the file.
     1867
     1868&nbsp;
     1869
     1870==== `set_app_config` ====
     1871Write a new app_config.xml file
     1872
     1873Request:
     1874
     1875{{{
     1876#!xml
     1877<set_app_config>
     1878    <url></url>
     1879      .   
     1880      .
     1881      .
     1882</set_app_config>
     1883}}}
     1884
     1885&nbsp;
     1886
     1887==== `report_device_status` ====
     1888Used to report the status of an android device to the client. This is used to more easily access the status of the device. It essentially extracts the information using the, written in JAVA, Android GUI and using the RPC passes them to the client (a kind of bridge between Android's JAVA interface and the client's C++ one). It is therefore not of any use to be documented here.