http: Always use/require progress in requests.

This fixes several cases where we weren't passing cancel flags
consistently.
This commit is contained in:
Unknown W. Brackets 2021-05-01 10:19:27 -07:00
parent f762fbc53d
commit 3379f33882
9 changed files with 69 additions and 59 deletions

View file

@ -24,7 +24,7 @@
#include "Core/FileLoaders/HTTPFileLoader.h"
HTTPFileLoader::HTTPFileLoader(const std::string &filename)
: url_(filename), filename_(filename) {
: url_(filename), progress_(&cancel_), filename_(filename) {
}
void HTTPFileLoader::Prepare() {
@ -137,7 +137,7 @@ int HTTPFileLoader::SendHEAD(const Url &url, std::vector<std::string> &responseH
return -400;
}
int err = client_.SendRequest("HEAD", url.Resource().c_str());
int err = client_.SendRequest("HEAD", url.Resource().c_str(), nullptr, &progress_);
if (err < 0) {
ERROR_LOG(LOADER, "HTTP request failed, failed to send request: %s port %d", url.Host().c_str(), url.Port());
latestError_ = "Could not connect (could not request data)";
@ -146,7 +146,7 @@ int HTTPFileLoader::SendHEAD(const Url &url, std::vector<std::string> &responseH
}
net::Buffer readbuf;
return client_.ReadResponseHeaders(&readbuf, responseHeaders);
return client_.ReadResponseHeaders(&readbuf, responseHeaders, &progress_);
}
HTTPFileLoader::~HTTPFileLoader() {
@ -205,7 +205,7 @@ size_t HTTPFileLoader::ReadAt(s64 absolutePos, size_t bytes, void *data, Flags f
net::Buffer readbuf;
std::vector<std::string> responseHeaders;
int code = client_.ReadResponseHeaders(&readbuf, responseHeaders);
int code = client_.ReadResponseHeaders(&readbuf, responseHeaders, &progress_);
if (code != 206) {
ERROR_LOG(LOADER, "HTTP server did not respond with range, received code=%03d", code);
latestError_ = "Invalid response reading data";
@ -236,7 +236,7 @@ size_t HTTPFileLoader::ReadAt(s64 absolutePos, size_t bytes, void *data, Flags f
// TODO: Would be nice to read directly.
net::Buffer output;
int res = client_.ReadResponseEntity(&readbuf, responseHeaders, &output);
int res = client_.ReadResponseEntity(&readbuf, responseHeaders, &output, &progress_);
if (res != 0) {
ERROR_LOG(LOADER, "Unable to read HTTP response entity: %d", res);
// Let's take anything we got anyway. Not worse than returning nothing?
@ -259,8 +259,8 @@ size_t HTTPFileLoader::ReadAt(s64 absolutePos, size_t bytes, void *data, Flags f
void HTTPFileLoader::Connect() {
if (!connected_) {
cancelConnect_ = false;
cancel_ = false;
// Latency is important here, so reduce the timeout.
connected_ = client_.Connect(3, 10.0, &cancelConnect_);
connected_ = client_.Connect(3, 10.0, &cancel_);
}
}