Skip to content

Commit

Permalink
Added a request for addon hashes
Browse files Browse the repository at this point in the history
  • Loading branch information
kabachuha authored and irydacea committed Oct 15, 2020
1 parent 74fda8e commit c146034
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
45 changes: 45 additions & 0 deletions src/server/campaignd/server.cpp
Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/server/campaignd/server.hpp
Expand Up @@ -174,6 +174,7 @@ class server : public server_base

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&);
Expand Down

0 comments on commit c146034

Please sign in to comment.