[Scummvm-git-logs] scummvm master -> a670a174807eb0f9b42360138a1d05c48fbcf649
sev-
noreply at scummvm.org
Mon Oct 10 20:37:40 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
a670a17480 NETWORKING: Properly process TLS errors.
Commit: a670a174807eb0f9b42360138a1d05c48fbcf649
https://github.com/scummvm/scummvm/commit/a670a174807eb0f9b42360138a1d05c48fbcf649
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2022-10-10T22:37:22+02:00
Commit Message:
NETWORKING: Properly process TLS errors.
Now, when HTTPS is not supported, we will indicate it to the user.
Changed paths:
backends/networking/curl/networkreadstream.cpp
backends/networking/curl/networkreadstream.h
backends/networking/curl/sessionrequest.cpp
diff --git a/backends/networking/curl/networkreadstream.cpp b/backends/networking/curl/networkreadstream.cpp
index 64d96fdd581..d3f4ef1accc 100644
--- a/backends/networking/curl/networkreadstream.cpp
+++ b/backends/networking/curl/networkreadstream.cpp
@@ -193,19 +193,19 @@ void NetworkReadStream::setupFormMultipart(Common::HashMap<Common::String, Commo
}
NetworkReadStream::NetworkReadStream(const char *url, curl_slist *headersList, Common::String postFields, bool uploading, bool usingPatch, bool keepAlive, long keepAliveIdle, long keepAliveInterval):
- _backingStream(DisposeAfterUse::YES), _keepAlive(keepAlive), _keepAliveIdle(keepAliveIdle), _keepAliveInterval(keepAliveInterval), _errorBuffer(nullptr) {
+ _backingStream(DisposeAfterUse::YES), _keepAlive(keepAlive), _keepAliveIdle(keepAliveIdle), _keepAliveInterval(keepAliveInterval), _errorBuffer(nullptr), _errorCode(CURLE_OK) {
initCurl(url, headersList);
setupBufferContents((const byte *)postFields.c_str(), postFields.size(), uploading, usingPatch, false);
}
NetworkReadStream::NetworkReadStream(const char *url, curl_slist *headersList, Common::HashMap<Common::String, Common::String> formFields, Common::HashMap<Common::String, Common::String> formFiles, bool keepAlive, long keepAliveIdle, long keepAliveInterval):
- _backingStream(DisposeAfterUse::YES), _keepAlive(keepAlive), _keepAliveIdle(keepAliveIdle), _keepAliveInterval(keepAliveInterval), _errorBuffer(nullptr) {
+ _backingStream(DisposeAfterUse::YES), _keepAlive(keepAlive), _keepAliveIdle(keepAliveIdle), _keepAliveInterval(keepAliveInterval), _errorBuffer(nullptr), _errorCode(CURLE_OK) {
initCurl(url, headersList);
setupFormMultipart(formFields, formFiles);
}
NetworkReadStream::NetworkReadStream(const char *url, curl_slist *headersList, const byte *buffer, uint32 bufferSize, bool uploading, bool usingPatch, bool post, bool keepAlive, long keepAliveIdle, long keepAliveInterval):
- _backingStream(DisposeAfterUse::YES), _keepAlive(keepAlive), _keepAliveIdle(keepAliveIdle), _keepAliveInterval(keepAliveInterval), _errorBuffer(nullptr) {
+ _backingStream(DisposeAfterUse::YES), _keepAlive(keepAlive), _keepAliveIdle(keepAliveIdle), _keepAliveInterval(keepAliveInterval), _errorBuffer(nullptr), _errorCode(CURLE_OK) {
initCurl(url, headersList);
setupBufferContents(buffer, bufferSize, uploading, usingPatch, post);
}
@@ -266,14 +266,23 @@ void NetworkReadStream::finished(uint32 errorCode) {
char *url = nullptr;
curl_easy_getinfo(_easy, CURLINFO_EFFECTIVE_URL, &url);
- if (errorCode == CURLE_OK) {
+ _errorCode = errorCode;
+
+ if (_errorCode == CURLE_OK) {
debug(9, "NetworkReadStream: %s - Request succeeded", url);
} else {
- warning("NetworkReadStream: %s - Request failed (%d - %s)", url, errorCode,
- strlen(_errorBuffer) ? _errorBuffer : curl_easy_strerror((CURLcode)errorCode));
+ warning("NetworkReadStream: %s - Request failed (%d - %s)", url, _errorCode, getError());
}
}
+bool NetworkReadStream::hasError() const {
+ return _errorCode != CURLE_OK;
+}
+
+const char *NetworkReadStream::getError() const {
+ return strlen(_errorBuffer) ? _errorBuffer : curl_easy_strerror((CURLcode)_errorCode);
+}
+
long NetworkReadStream::httpResponseCode() const {
long responseCode = -1;
if (_easy)
diff --git a/backends/networking/curl/networkreadstream.h b/backends/networking/curl/networkreadstream.h
index ddcf88deab0..e90c3b60b26 100644
--- a/backends/networking/curl/networkreadstream.h
+++ b/backends/networking/curl/networkreadstream.h
@@ -40,6 +40,7 @@ class NetworkReadStream: public Common::ReadStream {
long _keepAliveIdle, _keepAliveInterval;
bool _eos, _requestComplete;
char *_errorBuffer;
+ uint32 _errorCode;
const byte *_sendingContentsBuffer;
uint32 _sendingContentsSize;
uint32 _sendingContentsPos;
@@ -168,6 +169,11 @@ public:
void setProgress(uint64 downloaded, uint64 total);
bool keepAlive() const { return _keepAlive; }
+
+ bool hasError() const;
+ uint32 getErrorCode() const { return _errorCode; }
+ const char *getError() const;
+
};
} // End of namespace Networking
diff --git a/backends/networking/curl/sessionrequest.cpp b/backends/networking/curl/sessionrequest.cpp
index 9f13b07b0ec..fd5c96e2bad 100644
--- a/backends/networking/curl/sessionrequest.cpp
+++ b/backends/networking/curl/sessionrequest.cpp
@@ -183,6 +183,12 @@ void SessionRequest::handle() {
}
if (_stream->eos()) {
+ if (_stream->hasError()) {
+ ErrorResponse error(this, false, true, Common::String::format("TLS stream response code is not CURLE_OK OK: %s", _stream->getError()), _stream->getErrorCode());
+ finishError(error);
+ return;
+ }
+
finishSuccess();
}
}
More information about the Scummvm-git-logs
mailing list