diff --git a/src/network/core/http_curl.cpp b/src/network/core/http_curl.cpp index 2a363559b0..28ec6e0935 100644 --- a/src/network/core/http_curl.cpp +++ b/src/network/core/http_curl.cpp @@ -190,7 +190,7 @@ void HttpThread() /* Setup our (C-style) callback function which we pipe back into the callback. */ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, +[](char *ptr, size_t size, size_t nmemb, void *userdata) -> size_t { - Debug(net, 4, "HTTP callback: {} bytes", size * nmemb); + Debug(net, 6, "HTTP callback: {} bytes", size * nmemb); HTTPThreadSafeCallback *callback = static_cast(userdata); /* Copy the buffer out of CURL. OnReceiveData() will free it when done. */ diff --git a/src/network/core/http_winhttp.cpp b/src/network/core/http_winhttp.cpp index 8acab0a5a3..0efcbe69df 100644 --- a/src/network/core/http_winhttp.cpp +++ b/src/network/core/http_winhttp.cpp @@ -165,7 +165,7 @@ void NetworkHTTPRequest::WinHttpCallback(DWORD code, void *info, DWORD length) } break; case WINHTTP_CALLBACK_STATUS_READ_COMPLETE: - Debug(net, 4, "HTTP callback: {} bytes", length); + Debug(net, 6, "HTTP callback: {} bytes", length); this->callback.OnReceiveData(std::unique_ptr(static_cast(info)), length); diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 638c8860f8..caa437f2fe 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -611,8 +611,6 @@ void ClientNetworkContentSocketHandler::OnReceiveData(std::unique_ptr da return; } - this->lastActivity = std::chrono::steady_clock::now(); - if (this->http_response_index == -1) { if (data != nullptr) { /* Append the rest of the response. */ @@ -799,7 +797,6 @@ void ClientNetworkContentSocketHandler::Connect() */ NetworkRecvStatus ClientNetworkContentSocketHandler::CloseConnection(bool) { - this->isCancelled = true; NetworkContentSocketHandler::CloseConnection(); if (this->sock == INVALID_SOCKET) return NETWORK_RECV_STATUS_OKAY; @@ -810,6 +807,15 @@ NetworkRecvStatus ClientNetworkContentSocketHandler::CloseConnection(bool) return NETWORK_RECV_STATUS_OKAY; } +/** + * Cancel the current download. + */ +void ClientNetworkContentSocketHandler::Cancel(void) +{ + this->isCancelled = true; + this->CloseConnection(); +} + /** * Check whether we received/can send some data from/to the content server and * when that's the case handle it appropriately @@ -818,6 +824,7 @@ void ClientNetworkContentSocketHandler::SendReceive() { if (this->sock == INVALID_SOCKET || this->isConnecting) return; + /* Close the connection to the content server after inactivity; there can still be downloads pending via HTTP. */ if (std::chrono::steady_clock::now() > this->lastActivity + IDLE_TIMEOUT) { this->CloseConnection(); return; diff --git a/src/network/network_content.h b/src/network/network_content.h index 1d4764feed..741148ddf3 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -113,6 +113,7 @@ public: void Connect(); void SendReceive(); NetworkRecvStatus CloseConnection(bool error = true) override; + void Cancel(); void RequestContentList(ContentType type); void RequestContentList(uint count, const ContentID *content_ids); diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 6b16a91647..9b0229e116 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -291,7 +291,7 @@ public: { if (widget == WID_NCDS_CANCELOK) { if (this->downloaded_bytes != this->total_bytes) { - _network_content_client.CloseConnection(); + _network_content_client.Cancel(); this->Close(); } else { /* If downloading succeeded, close the online content window. This will close