diff --git a/src/network/core/http_curl.cpp b/src/network/core/http_curl.cpp --- 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 --- a/src/network/core/http_winhttp.cpp +++ b/src/network/core/http_winhttp.cpp @@ -165,7 +165,7 @@ void NetworkHTTPRequest::WinHttpCallback } 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 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -611,8 +611,6 @@ void ClientNetworkContentSocketHandler:: 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:: */ NetworkRecvStatus ClientNetworkContentSocketHandler::CloseConnection(bool) { - this->isCancelled = true; NetworkContentSocketHandler::CloseConnection(); if (this->sock == INVALID_SOCKET) return NETWORK_RECV_STATUS_OKAY; @@ -811,6 +808,15 @@ NetworkRecvStatus ClientNetworkContentSo } /** + * 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:: { 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 --- 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 --- 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