The Battle for Wesnoth  1.17.0-dev
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
addons_client Class Reference

Add-ons (campaignd) client class. More...

#include <client.hpp>

Classes

struct  install_result
 Contains the outcome of an add-on install operation. More...
 
struct  invalid_server_address
 
struct  not_connected_to_server
 
struct  user_disconnect
 
struct  user_exit
 

Public Types

enum  install_outcome { install_outcome::success, install_outcome::failure, install_outcome::abort }
 Installation outcome values. More...
 

Public Member Functions

 addons_client (const addons_client &)=delete
 
addons_clientoperator= (const addons_client &)=delete
 
 addons_client (const std::string &address)
 Constructor. More...
 
void connect ()
 Tries to establish a connection to the add-ons server. More...
 
void disconnect ()
 Disconnects from the add-on server. More...
 
const std::string & addr () const
 Returns the current hostname:port used for this connection. More...
 
const std::string & get_last_server_error () const
 Returns the last error message sent by the server, or an empty string. More...
 
const std::string & get_last_server_error_data () const
 Returns the last error message extra data sent by the server, or an empty string. More...
 
bool is_connected ()
 Returns true if the client is connected to the server. More...
 
bool request_addons_list (config &cfg)
 Request the add-ons list from the server. More...
 
const std::string & server_url () const
 Retrieves the add-ons server web URL if available. More...
 
bool request_distribution_terms (std::string &terms)
 Request the add-ons server distribution terms message. More...
 
install_result install_addon_with_checks (const addons_list &addons, const addon_info &addon)
 Performs an add-on download and install cycle. More...
 
bool upload_addon (const std::string &id, std::string &response_message, config &cfg, bool local_only)
 Uploads an add-on to the server. More...
 
bool delete_remote_addon (const std::string &id, std::string &response_message)
 Requests the specified add-on to be removed from the server. More...
 
bool server_supports (const std::string &cap_id) const
 Returns whether the server supports the given named capability. More...
 
bool server_supports_delta () const
 Returns whether the server supports incremental (delta) downloads and uploads. More...
 
bool server_supports_legacy_auth () const
 Returns whether the server supports passphrase authentication on an add-on basis. More...
 
bool using_tls () const
 Returns whether the current connection uses TLS. More...
 

Private Types

enum  transfer_mode { transfer_mode::download, transfer_mode::connect, transfer_mode::upload }
 

Private Member Functions

bool download_addon (config &archive_cfg, const std::string &id, const std::string &title, const version_info &version, bool increase_downloads=true)
 Downloads the specified add-on from the server. More...
 
bool install_addon (config &archive_cfg, const addon_info &info)
 Installs the specified add-on using an archive received from the server. More...
 
bool try_fetch_addon (const addon_info &addon)
 
install_result do_resolve_addon_dependencies (const addons_list &addons, const addon_info &addon)
 Warns the user about unresolved dependencies and installs them if they choose to do so. More...
 
bool do_check_before_overwriting_addon (const addon_info &addon)
 Checks whether the given add-on has local .pbl or VCS information and asks before overwriting it. More...
 
void check_connected () const
 Makes sure the add-ons server connection is working. More...
 
void send_request (const config &request, config &response)
 Sends a request to the add-ons server. More...
 
void send_simple_request (const std::string &request_string, config &response)
 Sends a simple request message to the add-ons server. More...
 
void wait_for_transfer_done (const std::string &status_message, transfer_mode mode=transfer_mode::download)
 Waits for a network transfer, displaying a status window. More...
 
bool update_last_error (config &response_cfg)
 
void clear_last_error ()
 
void clear_server_info ()
 

Private Attributes

std::string addr_
 
std::string host_
 
std::string port_
 
std::unique_ptr< network_asio::connectionconn_
 
std::string last_error_
 
std::string last_error_data_
 
std::string server_id_
 
std::string server_version_
 
std::set< std::string > server_capabilities_
 
std::string server_url_
 
std::string license_notice_
 

Detailed Description

Add-ons (campaignd) client class.

This class encapsulates much of the logic behind the campaignd add-ons server interaction for the client-side. Most networking operations with it are implemented here.

Definition at line 40 of file client.hpp.

Member Enumeration Documentation

◆ install_outcome

Installation outcome values.

Enumerator
success 

The add-on was correctly installed.

failure 

The add-on could not be downloaded from the server.

abort 

User aborted the operation because of an issue with dependencies or chose not to overwrite the add-on.

Definition at line 111 of file client.hpp.

◆ transfer_mode

enum addons_client::transfer_mode
strongprivate
Enumerator
download 
connect 
upload 

Definition at line 222 of file client.hpp.

Constructor & Destructor Documentation

◆ addons_client() [1/2]

addons_client::addons_client ( const addons_client )
delete

◆ addons_client() [2/2]

addons_client::addons_client ( const std::string &  address)
explicit

Constructor.

Parameters
addressServer address (e.g. "localhost:15999").

Definition at line 48 of file client.cpp.

References addr_, default_campaignd_port, host_, parse_network_address(), and port_.

Member Function Documentation

◆ addr()

const std::string& addons_client::addr ( ) const
inline

Returns the current hostname:port used for this connection.

Definition at line 74 of file client.hpp.

References addr_.

Referenced by gui2::dialogs::addon_manager::pre_show().

◆ check_connected()

void addons_client::check_connected ( ) const
private

Makes sure the add-ons server connection is working.

Definition at line 615 of file client.cpp.

References conn_, and ERR_ADDONS.

Referenced by send_request(), and wait_for_transfer_done().

◆ clear_last_error()

void addons_client::clear_last_error ( )
private

Definition at line 600 of file client.cpp.

References last_error_, and last_error_data_.

Referenced by connect(), and disconnect().

◆ clear_server_info()

void addons_client::clear_server_info ( )
private

Definition at line 606 of file client.cpp.

References license_notice_, server_capabilities_, server_id_, server_url_, and server_version_.

Referenced by disconnect().

◆ connect()

void addons_client::connect ( )

◆ delete_remote_addon()

bool addons_client::delete_remote_addon ( const std::string &  id,
std::string &  response_message 
)

Requests the specified add-on to be removed from the server.

This method reads the add-on upload passphrase from the associated .pbl file.

Returns
true on success, false on failure. Retrieve the error message with get_last_server_error.
Parameters
idId. of the add-on to take down.
response_messageThe server response message on success, such as "add-on accepted".

Definition at line 264 of file client.cpp.

References config::add_child(), config::child(), dummy, error(), font::escape_text(), get_addon_pbl_info(), id, LOG_ADDONS, make_addon_title(), send_request(), update_last_error(), VGETTEXT, and wait_for_transfer_done().

Referenced by gui2::dialogs::addon_manager::delete_addon().

◆ disconnect()

void addons_client::disconnect ( )
inline

Disconnects from the add-on server.

Definition at line 66 of file client.hpp.

References clear_last_error(), clear_server_info(), and conn_.

◆ do_check_before_overwriting_addon()

bool addons_client::do_check_before_overwriting_addon ( const addon_info addon)
private

Checks whether the given add-on has local .pbl or VCS information and asks before overwriting it.

Definition at line 522 of file client.cpp.

References _(), utils::bullet_list(), font::escape_text(), have_addon_in_vcs_tree(), have_addon_pbl_info(), addon_info::id, gui2::OK, gui2::show_message(), addon_info::title, VGETTEXT, and gui2::dialogs::message::yes_no_buttons.

Referenced by install_addon_with_checks().

◆ do_resolve_addon_dependencies()

addons_client::install_result addons_client::do_resolve_addon_dependencies ( const addons_list addons,
const addon_info addon 
)
private

Warns the user about unresolved dependencies and installs them if they choose to do so.

Returns: outcome: abort in case the user chose to abort because of an issue success otherwise wml_change: indicates if new wml content was installed

Definition at line 415 of file client.cpp.

References _(), _n(), abort, ADDON_INSTALLED_UPGRADABLE, ADDON_NONE, utils::bullet_list(), get_addon_tracking_info(), lg::info(), addon_tracking_info::installed_version, is_addon_installed(), make_addon_title(), gui2::OK, preferences::options(), addons_client::install_result::outcome, addon_info::resolve_dependencies(), gui2::show_message(), addon_tracking_info::state, success, addon_info::title, try_fetch_addon(), font::unicode_bullet, cursor::WAIT, addons_client::install_result::wml_changed, and gui2::dialogs::message::yes_no_buttons.

Referenced by install_addon_with_checks().

◆ download_addon()

bool addons_client::download_addon ( config archive_cfg,
const std::string &  id,
const std::string &  title,
const version_info version,
bool  increase_downloads = true 
)
private

Downloads the specified add-on from the server.

Returns
true on success, false on failure. Retrieve the error message with get_last_server_error.
Parameters
archive_cfgConfig object to hold the downloaded add-on archive data.
idAdd-on id.
titleAdd-on title, used for status display.
versionSpecifies an add-on version to download.
increase_downloadsWhether to request the server to increase the add-on's download count or not (e.g. when upgrading).

Definition at line 306 of file client.cpp.

References config::add_child(), config::clear(), font::escape_text(), get_addon_version_info(), id, LOG_ADDONS, send_request(), version_info::str(), update_last_error(), VGETTEXT, and wait_for_transfer_done().

Referenced by try_fetch_addon().

◆ get_last_server_error()

const std::string& addons_client::get_last_server_error ( ) const
inline

Returns the last error message sent by the server, or an empty string.

Definition at line 77 of file client.hpp.

References last_error_.

Referenced by gui2::dialogs::addon_manager::delete_addon(), gui2::dialogs::addon_manager::publish_addon(), and try_fetch_addon().

◆ get_last_server_error_data()

const std::string& addons_client::get_last_server_error_data ( ) const
inline

Returns the last error message extra data sent by the server, or an empty string.

Definition at line 80 of file client.hpp.

References last_error_data_.

Referenced by gui2::dialogs::addon_manager::publish_addon().

◆ install_addon()

bool addons_client::install_addon ( config archive_cfg,
const addon_info info 
)
private

Installs the specified add-on using an archive received from the server.

An _info.cfg file will be added to the local directory for the add-on to keep track of version and dependency information.

Definition at line 329 of file client.cpp.

References config::all_children_range(), check_case_insensitive_duplicates(), check_names_legal(), font::escape_text(), config::has_child(), addon_info::id, LOG_ADDONS, purge_addon(), remove_local_addon(), gui2::show_error_message(), addon_info::title, unarchive_addon(), VGETTEXT, cursor::WAIT, write_addon_install_info(), addon_info::write_minimal(), and WRN_ADDONS.

Referenced by try_fetch_addon().

◆ install_addon_with_checks()

addons_client::install_result addons_client::install_addon_with_checks ( const addons_list addons,
const addon_info addon 
)

Performs an add-on download and install cycle.

This checks and prompts the user through the UI before overwriting an existing add-on with a .pbl file or version control system files (.git/, .svn/, etc.). It also resolves add-on dependencies and downloads them using the same system before downloading the original target add-on.

Parameters
addonsAdd-ons list used for resolving dependencies.
addonIdentity of the singular add-on that will be downloaded.
Returns
An install_result with the outcome of the operation.

Definition at line 555 of file client.cpp.

References abort, do_check_before_overwriting_addon(), do_resolve_addon_dependencies(), failure, addons_client::install_result::outcome, success, try_fetch_addon(), and addons_client::install_result::wml_changed.

Referenced by ad_hoc_addon_fetch_session(), gui2::dialogs::addon_manager::install_addon(), and gui2::dialogs::addon_manager::update_all_addons().

◆ is_connected()

bool addons_client::is_connected ( )
inline

Returns true if the client is connected to the server.

Definition at line 83 of file client.hpp.

References conn_, and request_addons_list().

◆ operator=()

addons_client& addons_client::operator= ( const addons_client )
delete

◆ request_addons_list()

bool addons_client::request_addons_list ( config cfg)

Request the add-ons list from the server.

Returns
true on success, false on failure. Retrieve the error message with get_last_server_error.
Parameters
cfgA config object whose contents are replaced with the server's list if available, cleared otherwise.
Todo:
FIXME: get rid of this legacy "campaign"/"campaigns" silliness

Definition at line 114 of file client.cpp.

References _(), config::child(), config::clear(), send_simple_request(), swap(), update_last_error(), and wait_for_transfer_done().

Referenced by gui2::dialogs::addon_manager::fetch_addons_list(), and is_connected().

◆ request_distribution_terms()

bool addons_client::request_distribution_terms ( std::string &  terms)

Request the add-ons server distribution terms message.

Definition at line 131 of file client.cpp.

References _(), config::child(), license_notice_, send_simple_request(), update_last_error(), and wait_for_transfer_done().

Referenced by gui2::dialogs::addon_manager::publish_addon(), and server_url().

◆ send_request()

void addons_client::send_request ( const config request,
config response 
)
private

Sends a request to the add-ons server.

Note
This is an asynchronous operation. display_status_window should be called afterwards to wait for it to finish.
Parameters
requestThe client request WML.
responseA config object whose contents are replaced with the server response WML.

Definition at line 624 of file client.cpp.

References check_connected(), config::clear(), and conn_.

Referenced by delete_remote_addon(), download_addon(), send_simple_request(), and upload_addon().

◆ send_simple_request()

void addons_client::send_simple_request ( const std::string &  request_string,
config response 
)
private

Sends a simple request message to the add-ons server.

The real request sent consists of a WML object with an empty child node whose name corresponds to request_string

Note
This is an asynchronous operation. display_status_window should be called afterwards to wait for it to finish.
Parameters
request_stringThe client request string.
responseA config object whose contents are replaced with the server response WML.

Definition at line 632 of file client.cpp.

References config::add_child(), and send_request().

Referenced by connect(), request_addons_list(), and request_distribution_terms().

◆ server_supports()

bool addons_client::server_supports ( const std::string &  cap_id) const
inline

Returns whether the server supports the given named capability.

Definition at line 192 of file client.hpp.

References server_capabilities_.

Referenced by server_supports_delta(), and server_supports_legacy_auth().

◆ server_supports_delta()

bool addons_client::server_supports_delta ( ) const
inline

Returns whether the server supports incremental (delta) downloads and uploads.

Definition at line 200 of file client.hpp.

References server_supports().

◆ server_supports_legacy_auth()

bool addons_client::server_supports_legacy_auth ( ) const
inline

Returns whether the server supports passphrase authentication on an add-on basis.

Definition at line 208 of file client.hpp.

References server_supports().

◆ server_url()

const std::string& addons_client::server_url ( ) const
inline

Retrieves the add-ons server web URL if available.

Definition at line 98 of file client.hpp.

References request_distribution_terms(), and server_url_.

◆ try_fetch_addon()

bool addons_client::try_fetch_addon ( const addon_info addon)
private

◆ update_last_error()

bool addons_client::update_last_error ( config response_cfg)
private

◆ upload_addon()

bool addons_client::upload_addon ( const std::string &  id,
std::string &  response_message,
config cfg,
bool  local_only 
)

Uploads an add-on to the server.

This method reads the add-on upload passphrase and other data from the associated .pbl file. If the .pbl file doesn't have a passphrase, a new, random one will be automatically generated and written to the file for the user.

Todo:
Notify the user about the automatic passphrase.
Returns
true on success, false on failure. Retrieve the error message with get_last_server_error.
Parameters
idId. of the add-on to upload.
response_messageThe server response message on success, such as "add-on accepted".
cfgThe pbl config of the add-on with the specified id.
local_onlyWhether the addon is not present on the server.

Definition at line 154 of file client.cpp.

References _(), config::add_child(), addon_name_legal(), config::append(), archive_addon(), check_case_insensitive_duplicates(), check_names_legal(), config::child(), contains_hashlist(), font::escape_text(), id, utils::join(), last_error_, last_error_data_, LOG_ADDONS, make_addon_title(), make_updatepack(), send_request(), update_last_error(), upload, VGETTEXT, and wait_for_transfer_done().

Referenced by gui2::dialogs::addon_manager::publish_addon().

◆ using_tls()

bool addons_client::using_tls ( ) const
inline

Returns whether the current connection uses TLS.

Definition at line 216 of file client.hpp.

References conn_.

Referenced by gui2::dialogs::addon_manager::pre_show().

◆ wait_for_transfer_done()

void addons_client::wait_for_transfer_done ( const std::string &  status_message,
transfer_mode  mode = transfer_mode::download 
)
private

Waits for a network transfer, displaying a status window.

The window is displayed with the specified contents. This method doesn't return until the network transfer is complete. It will throw a user_exit exception if the user cancels the transfer by canceling the status window.

Definition at line 674 of file client.cpp.

References _(), check_connected(), conn_, connect, download, gui2::dialogs::modal_dialog::show(), and upload.

Referenced by connect(), delete_remote_addon(), download_addon(), request_addons_list(), request_distribution_terms(), and upload_addon().

Member Data Documentation

◆ addr_

std::string addons_client::addr_
private

Definition at line 224 of file client.hpp.

Referenced by addons_client(), addr(), and connect().

◆ conn_

std::unique_ptr<network_asio::connection> addons_client::conn_
private

◆ host_

std::string addons_client::host_
private

Definition at line 225 of file client.hpp.

Referenced by addons_client(), and connect().

◆ last_error_

std::string addons_client::last_error_
private

◆ last_error_data_

std::string addons_client::last_error_data_
private

◆ license_notice_

std::string addons_client::license_notice_
private

Definition at line 235 of file client.hpp.

Referenced by clear_server_info(), connect(), and request_distribution_terms().

◆ port_

std::string addons_client::port_
private

Definition at line 226 of file client.hpp.

Referenced by addons_client(), and connect().

◆ server_capabilities_

std::set<std::string> addons_client::server_capabilities_
private

Definition at line 233 of file client.hpp.

Referenced by clear_server_info(), connect(), and server_supports().

◆ server_id_

std::string addons_client::server_id_
private

Definition at line 231 of file client.hpp.

Referenced by clear_server_info(), and connect().

◆ server_url_

std::string addons_client::server_url_
private

Definition at line 234 of file client.hpp.

Referenced by clear_server_info(), connect(), and server_url().

◆ server_version_

std::string addons_client::server_version_
private

Definition at line 232 of file client.hpp.

Referenced by clear_server_info(), and connect().


The documentation for this class was generated from the following files: