add set-save-files

This commit is contained in:
Martin Michelsen
2022-03-29 23:37:56 -07:00
parent 2e839fe70a
commit 5848beb6c2
3 changed files with 31 additions and 35 deletions
+20 -20
View File
@@ -45,7 +45,7 @@ static void flush_and_free_bufferevent(struct bufferevent* bev) {
ProxyServer::ProxyServer(
shared_ptr<struct event_base> base,
shared_ptr<ServerState> state)
: save_quests(false),
: save_files(false),
base(base),
state(state) { }
@@ -333,7 +333,7 @@ void ProxyServer::LinkedSession::resume(
this->server_input_crypt.reset();
this->server_output_crypt.reset();
this->saving_quest_files.clear();
this->saving_files.clear();
// Connect to the remote server. The command handlers will do the login steps
// and set up forwarding
@@ -368,7 +368,7 @@ void ProxyServer::LinkedSession::resume(
ProxyServer::LinkedSession::SavingQuestFile::SavingQuestFile(
ProxyServer::LinkedSession::SavingFile::SavingFile(
const std::string& basename,
const std::string& output_filename,
uint32_t remaining_bytes)
@@ -773,7 +773,7 @@ void ProxyServer::LinkedSession::on_server_input() {
case 0x44:
case 0xA6: {
if (!this->server->save_quests) {
if (!this->server->save_files) {
break;
}
@@ -804,16 +804,16 @@ void ProxyServer::LinkedSession::on_server_input() {
output_filename[0] = '_';
}
SavingQuestFile sqf(cmd->filename, output_filename, cmd->file_size);
this->saving_quest_files.emplace(cmd->filename, move(sqf));
log(INFO, "[ProxyServer/%08" PRIX32 "] Opened quest file %s",
SavingFile sf(cmd->filename, output_filename, cmd->file_size);
this->saving_files.emplace(cmd->filename, move(sf));
log(INFO, "[ProxyServer/%08" PRIX32 "] Opened file %s",
this->license->serial_number, output_filename.c_str());
break;
}
case 0x13:
case 0xA7: {
if (!this->server->save_quests) {
if (!this->server->save_files) {
break;
}
@@ -829,11 +829,11 @@ void ProxyServer::LinkedSession::on_server_input() {
}
const auto* cmd = reinterpret_cast<const WriteFileCommand*>(data.data());
SavingQuestFile* sqf = nullptr;
SavingFile* sf = nullptr;
try {
sqf = &this->saving_quest_files.at(cmd->filename);
sf = &this->saving_files.at(cmd->filename);
} catch (const out_of_range&) {
log(WARNING, "[ProxyServer/%08" PRIX32 "] Can\'t find saving quest file %s",
log(WARNING, "[ProxyServer/%08" PRIX32 "] Received data for non-open file %s",
this->license->serial_number, cmd->filename);
break;
}
@@ -847,26 +847,26 @@ void ProxyServer::LinkedSession::on_server_input() {
log(INFO, "[ProxyServer/%08" PRIX32 "] Writing %zu bytes to %s",
this->license->serial_number, bytes_to_write,
sqf->output_filename.c_str());
fwritex(sqf->f.get(), cmd->data, bytes_to_write);
if (bytes_to_write > sqf->remaining_bytes) {
sf->output_filename.c_str());
fwritex(sf->f.get(), cmd->data, bytes_to_write);
if (bytes_to_write > sf->remaining_bytes) {
log(WARNING, "[ProxyServer/%08" PRIX32 "] Chunk size extends beyond original file size; file may be truncated",
this->license->serial_number);
sqf->remaining_bytes = 0;
sf->remaining_bytes = 0;
} else {
sqf->remaining_bytes -= bytes_to_write;
sf->remaining_bytes -= bytes_to_write;
}
if (sqf->remaining_bytes == 0) {
if (sf->remaining_bytes == 0) {
log(INFO, "[ProxyServer/%08" PRIX32 "] File %s is complete",
this->license->serial_number, sqf->output_filename.c_str());
this->saving_quest_files.erase(cmd->filename);
this->license->serial_number, sf->output_filename.c_str());
this->saving_files.erase(cmd->filename);
}
break;
}
case 0xB8: {
if (!this->server->save_quests) {
if (!this->server->save_files) {
break;
}
if (data.size() < 4) {