2004-06-09 19:09:16 +00:00
|
|
|
<?php
|
2004-02-09 05:11:05 +00:00
|
|
|
require_once("docutil.php");
|
2005-04-18 04:32:22 +00:00
|
|
|
page_head("Controlling the core client via RPC");
|
2004-02-09 05:11:05 +00:00
|
|
|
echo "
|
|
|
|
<p>
|
2004-02-28 19:11:40 +00:00
|
|
|
The BOINC core client provides a set of RPCs
|
|
|
|
(remote procedure calls) for control and state interrogation.
|
2005-04-18 04:32:22 +00:00
|
|
|
This enables the development of GUI (graphical user interface)
|
2004-02-28 19:11:40 +00:00
|
|
|
programs separately from the core client.
|
2006-08-11 22:56:41 +00:00
|
|
|
These RPCs send XML request and reply messages over a TCP connection.
|
|
|
|
The XML formats are not documented, but can be deduced from the source code.
|
2004-07-13 23:51:09 +00:00
|
|
|
<p>
|
2006-08-11 22:56:41 +00:00
|
|
|
BOINC provides a C++ interface to these RPCs,
|
|
|
|
consisting of the <code>GUI_RPC</code> class.
|
|
|
|
The interface is in <code>lib/gui_rpc_client.h</code>,
|
|
|
|
and the program <code>boinc_cmd.C</code> gives a usage example).
|
|
|
|
All member functions return an integer error code.
|
|
|
|
To create an RPC connection, call
|
|
|
|
|
2004-02-28 19:11:40 +00:00
|
|
|
";
|
|
|
|
list_start();
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
|
|
|
"init(char* host)",
|
|
|
|
"Establish RPC connection to the given host"
|
|
|
|
);
|
2006-08-11 22:56:41 +00:00
|
|
|
list_end();
|
|
|
|
echo "
|
|
|
|
<h2>Dealing with versions</h2>
|
|
|
|
<p>
|
|
|
|
The GUI RPC protocol changes over time.
|
|
|
|
If you're writing a GUI program that needs to communicate with
|
|
|
|
older versions of the BOINC core client,
|
|
|
|
here's what to do:
|
|
|
|
<ul>
|
2006-08-31 18:31:28 +00:00
|
|
|
<li> Create a GUI_RPC object and connect.
|
|
|
|
Call exchange_versions() to get the client version.
|
2006-08-11 22:56:41 +00:00
|
|
|
<li>
|
2006-08-31 18:31:28 +00:00
|
|
|
If exchange_versions() fails (it's not suppored in pre-5.6 clients)
|
|
|
|
do a get_state() RPC, and get the client version from CC_STATE::version_info.
|
2006-08-11 22:56:41 +00:00
|
|
|
<li>
|
2006-08-31 18:31:28 +00:00
|
|
|
Use the client version number to decide what subsequent RPCs to make
|
2006-08-11 22:56:41 +00:00
|
|
|
(version info is included in the RPC list below).
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<h2>Authorization</h2>
|
|
|
|
<p>
|
2006-12-12 23:23:53 +00:00
|
|
|
GUI RPC authorization is described <a href=gui_rpc_auth.php>here</a>.
|
|
|
|
The RPC protocol allows the GUI program to authenticate itself using a password.
|
2006-08-11 22:56:41 +00:00
|
|
|
Some of the RPC operations can be done without authentication;
|
|
|
|
others can be done without authentication, but only by a GUI program
|
|
|
|
running on the same machine.
|
|
|
|
";
|
|
|
|
list_start();
|
2005-03-08 00:23:58 +00:00
|
|
|
list_item_func(
|
|
|
|
"authorize(char* password)",
|
|
|
|
"Do authorization sequence with the peer, using given password"
|
|
|
|
);
|
2006-08-11 22:56:41 +00:00
|
|
|
list_end();
|
|
|
|
echo "
|
|
|
|
<p>
|
|
|
|
<h2>RPC list</h2>
|
|
|
|
The following functions require authorization for remote clients,
|
|
|
|
but not for local clients.
|
|
|
|
Note: for core client versions 5.5.12 and earlier,
|
|
|
|
all functions except get_state(), get_results(),
|
|
|
|
get_screensaver_mode(), and set_screensaver_mode() require authorization.
|
|
|
|
";
|
|
|
|
list_start();
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
|
|
|
"get_state(CC_STATE&)",
|
2004-07-21 21:30:25 +00:00
|
|
|
"Get the core client's 'static' state,
|
|
|
|
i.e. its projects, apps, app_versions, workunits and results.
|
|
|
|
This call is relatively slow and should only
|
|
|
|
be done initially, and when needed later (see below).
|
|
|
|
"
|
2004-02-28 19:11:40 +00:00
|
|
|
);
|
2006-08-31 18:31:28 +00:00
|
|
|
list_item_func(
|
|
|
|
"exchange_versions(VERSION_INFO&)",
|
|
|
|
"Exchange version info with the core client.
|
|
|
|
The core client's version info is returned."
|
|
|
|
);
|
2006-08-11 22:56:41 +00:00
|
|
|
list_item_func(
|
2006-11-21 18:41:27 +00:00
|
|
|
"get_cc_status(CC_STATUS&);
|
|
|
|
struct CC_STATUS {
|
|
|
|
int network_status;
|
|
|
|
bool ams_password_error;
|
|
|
|
int task_suspend_reason;
|
|
|
|
int network_suspend_reason;
|
|
|
|
int task_mode;
|
|
|
|
int network_mode;
|
|
|
|
int task_mode_perm;
|
|
|
|
int network_mode_perm;
|
|
|
|
double task_mode_delay;
|
|
|
|
double network_mode_delay;
|
|
|
|
};
|
|
|
|
",
|
2006-08-11 22:56:41 +00:00
|
|
|
"Return a structure containing the network status,
|
2006-11-21 18:41:27 +00:00
|
|
|
a flag if there was an account manager password error,
|
|
|
|
and data about task and network suspension."
|
2006-08-11 22:56:41 +00:00
|
|
|
);
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
|
|
|
"get_results(RESULTS&)",
|
2004-07-21 21:30:25 +00:00
|
|
|
"Get a list of results.
|
|
|
|
Those that are in progress will have information
|
|
|
|
such as CPU time and fraction done.
|
|
|
|
Each result includes a name;
|
|
|
|
use CC_STATE::lookup_result() to find this result in
|
|
|
|
the current static state;
|
|
|
|
if it's not there, call get_state() again.
|
|
|
|
"
|
|
|
|
);
|
2006-08-11 22:56:41 +00:00
|
|
|
list_item_func(
|
|
|
|
"get_screensaver_mode(int& status)",
|
|
|
|
"Return screensaver mode (values listed in ss_logic.h)"
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"set_screensaver_mode(
|
|
|
|
bool enabled, double blank_time, DISPLAY_INFO&
|
|
|
|
)",
|
|
|
|
"If enabled is true, the core client should try to get
|
|
|
|
an application to provide screensaver graphics.
|
|
|
|
Blank screen after blank_time seconds.
|
|
|
|
"
|
|
|
|
);
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
|
|
|
"get_file_transfers(FILE_TRANSFERS&)",
|
2004-07-21 21:30:25 +00:00
|
|
|
"Get a list of file transfers in progress.
|
|
|
|
Each is linked by name to a project;
|
2004-09-27 04:26:51 +00:00
|
|
|
use CC_STATE::lookup_project() to find this project in the current state;
|
2004-07-21 21:30:25 +00:00
|
|
|
if it's not there, call get_state() again."
|
|
|
|
);
|
2006-06-27 21:46:50 +00:00
|
|
|
list_item_func(
|
|
|
|
"get_simple_gui_info(SIMPLE_GUI_INFO&)",
|
|
|
|
"Return the list of projects and of active results."
|
|
|
|
);
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
|
|
|
"get_project_status(vector<PROJECT>&)",
|
|
|
|
"Get a list of projects, with only basic fields filled in."
|
2004-06-17 17:00:14 +00:00
|
|
|
);
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
|
|
|
"get_disk_usage(vector<PROJECT>&)",
|
|
|
|
"Get a list of projects, with disk usage fields filled in."
|
|
|
|
);
|
2006-08-11 22:56:41 +00:00
|
|
|
list_item_func(
|
|
|
|
"get_proxy_settings(PROXY_INFO&)",
|
|
|
|
"Get proxy settings"
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"get_activity_state(ACTIVITY_STATE&)",
|
|
|
|
"Return bitmap of reasons why computation and network are suspended.
|
|
|
|
Deprecated - for 5.5.13 and later, use cc_status() instead.
|
|
|
|
In 5.5.10 and earlier, it returns bool (suspended) rather than bitmap.
|
|
|
|
"
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"get_messages(int seqno, MESSAGES&)",
|
|
|
|
"Returns a list of messages to be displayed to the user.
|
|
|
|
Each message has a sequence number (1, 2, ...),
|
|
|
|
a priority (1=informational, 2=error) and a timestamp.
|
|
|
|
The RPC requests the messages with sequence numbers greater than 'seqno',
|
|
|
|
in order of increasing sequence number."
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"get_host_info(HOST_INFO&)",
|
|
|
|
"Get information about host hardware and usage"
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"get_statistics(PROJECTS&)",
|
|
|
|
"Get information about project credit history
|
|
|
|
(the PROJECT::statistics field is populated)"
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"network_status(int&)",
|
|
|
|
"Find whether the core client has, needs, or is done with
|
|
|
|
a physical network connection.
|
|
|
|
Deprecated - for 5.5.13 and later, use cc_status() instead.
|
|
|
|
"
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"get_newer_versions(std::string&)",
|
|
|
|
"Get a string describing newer versions of the core client, if any."
|
|
|
|
);
|
|
|
|
list_end();
|
|
|
|
|
|
|
|
echo "
|
|
|
|
The following operations require authentication
|
|
|
|
for both local and remote clients:
|
|
|
|
";
|
|
|
|
|
|
|
|
list_start();
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
2004-07-21 21:30:25 +00:00
|
|
|
"show_graphics(char* result_name, bool full_screen)",
|
2004-02-28 19:11:40 +00:00
|
|
|
"Request that the application processing the given result
|
|
|
|
create a graphics window"
|
|
|
|
);
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
2004-09-27 04:26:51 +00:00
|
|
|
"project_op(PROJECT&, char* op)",
|
|
|
|
"Perform a control operation on the given project.
|
|
|
|
<code>op</code> is one of
|
|
|
|
\"suspend\",
|
|
|
|
\"resume\",
|
|
|
|
\"reset\",
|
|
|
|
\"detach\", or
|
|
|
|
\"update\".
|
|
|
|
"
|
2004-02-28 19:11:40 +00:00
|
|
|
);
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
2005-09-26 20:01:01 +00:00
|
|
|
"project_attach(
|
|
|
|
char* url,
|
|
|
|
char* account_id,
|
2006-12-26 00:37:25 +00:00
|
|
|
bool use_config_file
|
2005-09-26 20:01:01 +00:00
|
|
|
)",
|
2006-12-26 00:37:25 +00:00
|
|
|
"Attach to the given project.
|
|
|
|
If 'use_config_file' is true,
|
|
|
|
use the project URL (and account key, if present) in the
|
2005-09-22 08:55:03 +00:00
|
|
|
<a href=client_startup.php>project_init.xml</a> file."
|
2004-02-28 19:11:40 +00:00
|
|
|
);
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
2006-11-10 17:55:22 +00:00
|
|
|
"set_run_mode(int mode, double duration)",
|
|
|
|
"Set the run mode (never/auto/always).
|
|
|
|
If duration is zero, mode is permanent.
|
|
|
|
Otherwise revert to last permanent mode
|
|
|
|
after duration seconds elapse."
|
2004-09-05 18:46:19 +00:00
|
|
|
);
|
|
|
|
list_item_func(
|
2006-11-10 17:55:22 +00:00
|
|
|
"set_network_mode(int mode, double duration)",
|
2004-09-05 18:46:19 +00:00
|
|
|
"Set the network mode (never/auto/always)."
|
|
|
|
);
|
|
|
|
list_item_func(
|
2004-07-21 21:30:25 +00:00
|
|
|
"run_benchmarks()",
|
2004-02-28 19:11:40 +00:00
|
|
|
"Run benchmarks"
|
|
|
|
);
|
2004-09-05 18:46:19 +00:00
|
|
|
list_item_func(
|
2004-07-21 21:30:25 +00:00
|
|
|
"set_proxy_settings(PROXY_INFO&)",
|
2004-02-28 19:11:40 +00:00
|
|
|
"Set proxy settings"
|
|
|
|
);
|
2004-09-27 04:26:51 +00:00
|
|
|
list_item_func(
|
2006-08-11 22:56:41 +00:00
|
|
|
"network_available()",
|
|
|
|
"Tells the core client that a network connection is available,
|
|
|
|
and that it should do as much network activity as it can."
|
2004-09-05 18:46:19 +00:00
|
|
|
);
|
|
|
|
list_item_func(
|
2004-09-27 04:26:51 +00:00
|
|
|
"file_transfer_op(FILE_TRANSFER&, char* op)",
|
|
|
|
"Perform a control operation on a file transfer.
|
|
|
|
<code>op</code> is one of
|
|
|
|
\"abort\" or
|
|
|
|
\"retry\".
|
|
|
|
"
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"result_op(FILE_TRANSFER&, char* op)",
|
|
|
|
"Perform a control operation on an active result.
|
|
|
|
<code>op</code> is one of
|
|
|
|
\"suspend\",
|
|
|
|
\"resume\", or
|
|
|
|
\"abort\".
|
|
|
|
"
|
2004-09-05 18:46:19 +00:00
|
|
|
);
|
2006-08-11 22:56:41 +00:00
|
|
|
list_item_func(
|
|
|
|
"quit()",
|
|
|
|
"Tell the core client to exit."
|
|
|
|
);
|
2005-06-29 00:10:49 +00:00
|
|
|
list_item_func(
|
2005-09-26 20:01:01 +00:00
|
|
|
"acct_mgr_rpc(
|
|
|
|
const char* url,
|
|
|
|
const char* name,
|
|
|
|
const char* passwd,
|
|
|
|
bool use_cached_credentials
|
|
|
|
)",
|
2005-06-29 00:10:49 +00:00
|
|
|
"Do an <a href=acct_mgt.php>Account Manager RPC</a>
|
|
|
|
to the given URL, passing the given name/password.
|
2005-09-22 08:55:03 +00:00
|
|
|
If use_cached_credentials is true, then the existing url, username,
|
|
|
|
and password are used and the core client updates the project
|
|
|
|
information from the account manager.
|
2005-06-29 00:10:49 +00:00
|
|
|
If the RPC is successful, save the account info on disk
|
|
|
|
(it can be retrieved later using acct_mgr_info(), see below).
|
|
|
|
If URL is the empty string, remove account manager info from disk.
|
|
|
|
"
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"acct_mgr_info(ACCT_MGR_INFO&)",
|
|
|
|
"Return the URL/name of the current account manager (if any),
|
|
|
|
and the user name and password."
|
|
|
|
);
|
2006-02-07 22:43:14 +00:00
|
|
|
list_item_func(
|
|
|
|
"read_global_prefs_override()",
|
|
|
|
"Tells the core client to reread the 'global_prefs_override.xml' file,
|
|
|
|
modifying the global preferences according to its contents."
|
|
|
|
);
|
2006-08-07 16:55:56 +00:00
|
|
|
list_item_func(
|
|
|
|
"get_global_prefs_override(std::string&)",
|
2006-08-16 19:45:43 +00:00
|
|
|
"Reads the contents of the
|
|
|
|
<a href=prefs_override.php>global preferences override file</a>
|
|
|
|
into the given string.
|
|
|
|
Return an error code if the file is not present."
|
2006-08-07 16:55:56 +00:00
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"set_global_prefs_override(std::string&)",
|
|
|
|
"Write the given contents to the
|
2006-08-16 19:45:43 +00:00
|
|
|
<a href=prefs_override.php>global preferences override file</a>.
|
|
|
|
If the argment is an empty string, delete the file.
|
|
|
|
Otherwise the argument must be a valid
|
|
|
|
<global_preferences> element."
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"get_global_prefs_override_struct(GLOBAL_PREFS&)",
|
|
|
|
"Return the contents of the
|
|
|
|
<a href=prefs_override.php>global preferences override file</a>,
|
|
|
|
parsed into a structure.
|
|
|
|
Default values are zero.
|
|
|
|
Returns an error code if the file is not present."
|
|
|
|
);
|
|
|
|
list_item_func(
|
|
|
|
"set_global_prefs_override_struct(GLOBAL_PREFS&)",
|
|
|
|
"Convert the given structure to XML and write it to the
|
2006-08-07 16:55:56 +00:00
|
|
|
<a href=prefs_override.php>global preferences override file</a>."
|
|
|
|
);
|
2006-08-16 19:45:43 +00:00
|
|
|
|
2004-02-28 19:11:40 +00:00
|
|
|
list_end();
|
|
|
|
echo "
|
2004-02-09 05:11:05 +00:00
|
|
|
<p>
|
2004-07-21 21:30:25 +00:00
|
|
|
The RPC mechanism uses XML requests and replies.
|
|
|
|
It should be easy fairly easy to generate client
|
|
|
|
interfaces in languages other than C++.
|
|
|
|
GUI programs connect to the core client by opening a TCP socket at port 31416.
|
|
|
|
They can then do repeated RPCs over this connection.
|
|
|
|
Each reply message ends with the character '\\003.
|
2005-04-11 19:29:36 +00:00
|
|
|
|
|
|
|
|
2004-02-09 05:11:05 +00:00
|
|
|
";
|
2005-04-11 19:29:36 +00:00
|
|
|
|
2004-02-09 05:11:05 +00:00
|
|
|
page_tail();
|
|
|
|
?>
|