filetransfer: drop errorSink

just accumulate error data into result.data as we would for successful
transfers without a dataCallback. errorSink and data would contain the
same data in error cases anyway, so splitting them is not very useful.

Change-Id: I00e449866454389ac6a564ab411c903fd357dabf
This commit is contained in:
eldritch horrors 2024-04-25 01:27:29 +02:00
parent 5e69f8aa3d
commit 5420b3afd6

View file

@ -90,19 +90,12 @@ struct curlFileTransfer : public FileTransfer
{request.uri}, request.parentAct) {request.uri}, request.parentAct)
, callback(std::move(callback)) , callback(std::move(callback))
, finalSink([this](std::string_view data) { , finalSink([this](std::string_view data) {
if (errorSink) { auto httpStatus = getHTTPStatus();
(*errorSink)(data);
}
if (this->request.dataCallback) {
auto httpStatus = getHTTPStatus();
/* Only write data to the sink if this is a /* Only write data to the sink if this is a
successful response. */ successful response. */
if (successfulStatuses.count(httpStatus)) { if (successfulStatuses.count(httpStatus) && this->request.dataCallback) {
writtenToSink += data.size(); writtenToSink += data.size();
this->request.dataCallback(data); this->request.dataCallback(data);
}
} else } else
this->result.data.append(data); this->result.data.append(data);
}) })
@ -148,7 +141,6 @@ struct curlFileTransfer : public FileTransfer
LambdaSink finalSink; LambdaSink finalSink;
std::shared_ptr<FinishSink> decompressionSink; std::shared_ptr<FinishSink> decompressionSink;
std::optional<StringSink> errorSink;
std::exception_ptr writeException; std::exception_ptr writeException;
@ -184,13 +176,6 @@ struct curlFileTransfer : public FileTransfer
if (!decompressionSink) { if (!decompressionSink) {
decompressionSink = makeDecompressionSink(encoding, finalSink); decompressionSink = makeDecompressionSink(encoding, finalSink);
if (! successfulStatuses.count(getHTTPStatus())) {
// In this case we want to construct a TeeSink, to keep
// the response around (which we figure won't be big
// like an actual download should be) to improve error
// messages.
errorSink = StringSink { };
}
} }
(*decompressionSink)({(char *) contents, realSize}); (*decompressionSink)({(char *) contents, realSize});
@ -448,8 +433,8 @@ struct curlFileTransfer : public FileTransfer
attempt++; attempt++;
std::optional<std::string> response; std::optional<std::string> response;
if (errorSink) if (!successfulStatuses.count(httpStatus))
response = std::move(errorSink->s); response = std::move(result.data);
auto exc = auto exc =
code == CURLE_ABORTED_BY_CALLBACK && _isInterrupted code == CURLE_ABORTED_BY_CALLBACK && _isInterrupted
? FileTransferError(Interrupted, std::move(response), "%s of '%s' was interrupted", request.verb(), request.uri) ? FileTransferError(Interrupted, std::move(response), "%s of '%s' was interrupted", request.verb(), request.uri)