mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-02 13:03:31 +00:00
Added a request for addon hashes
This commit is contained in:
parent
74fda8e103
commit
c146034bd1
@ -648,6 +648,7 @@ void server::register_handlers()
|
||||
{
|
||||
REGISTER_CAMPAIGND_HANDLER(request_campaign_list);
|
||||
REGISTER_CAMPAIGND_HANDLER(request_campaign);
|
||||
REGISTER_CAMPAIGND_HANDLER(request_campaign_hash);
|
||||
REGISTER_CAMPAIGND_HANDLER(request_terms);
|
||||
REGISTER_CAMPAIGND_HANDLER(upload);
|
||||
REGISTER_CAMPAIGND_HANDLER(delete);
|
||||
@ -871,6 +872,50 @@ void server::handle_request_campaign(const server::request& req)
|
||||
}
|
||||
}
|
||||
|
||||
void server::handle_request_campaign_hash(const server::request& req)
|
||||
{
|
||||
config& campaign = get_addon(req.cfg["name"]);
|
||||
|
||||
if(!campaign || campaign["hidden"].to_bool()) {
|
||||
send_error("Add-on '" + req.cfg["name"].str() + "' not found.", req.sock);
|
||||
return;
|
||||
}
|
||||
|
||||
std::string to = req.cfg["version"].str();
|
||||
if(to.empty()) {
|
||||
send_error("No version of the add-on '" + req.cfg["name"].str() + "' was specified for a hash list request.", req.sock);
|
||||
return;
|
||||
}
|
||||
|
||||
std::string filename = campaign["filename"].str();
|
||||
|
||||
auto version_map = get_version_map(campaign);
|
||||
|
||||
if(version_map.empty()) {
|
||||
send_error("No versions of the add-on '" + req.cfg["name"].str() + "' are available on the server.", req.sock);
|
||||
return;
|
||||
} else {
|
||||
auto version = version_map.find(version_info(to));
|
||||
if(version != version_map.end()) {
|
||||
filename += version->second["filename"].str();
|
||||
} else {
|
||||
send_error("The selected version (" + to + ") of the add-on '" + req.cfg["name"].str() + "' has not been found by the server.", req.sock);
|
||||
return;
|
||||
}
|
||||
|
||||
filename += ".hash";
|
||||
int file_size = filesystem::file_size(filename);
|
||||
|
||||
if(file_size < 0) {
|
||||
send_error("No pregenerated hash file for the add-on '" + req.cfg["name"].str() + "' has been found by the server.", req.sock);
|
||||
return;
|
||||
}
|
||||
|
||||
LOG_CS << "sending the hash list of the campaign '" << req.cfg["name"] << "' to " << req.addr << " size: " << file_size / 1024 << "KiB\n";
|
||||
async_send_file(req.sock, filename, std::bind(&server::handle_new_client, this, _1), null_handler);
|
||||
}
|
||||
}
|
||||
|
||||
void server::handle_request_terms(const server::request& req)
|
||||
{
|
||||
// This usually means the client wants to upload content, so tell it
|
||||
|
@ -174,6 +174,7 @@ private:
|
||||
|
||||
void handle_request_campaign_list(const request&);//#TODO: rename with 'addon' later?
|
||||
void handle_request_campaign(const request&);
|
||||
void handle_request_campaign_hash(const request&);
|
||||
void handle_request_terms(const request&);
|
||||
void handle_upload(const request&);
|
||||
void handle_delete(const request&);
|
||||
|
Loading…
x
Reference in New Issue
Block a user