[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