diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 67f9b58c28f..d2d4b5fc324 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -2844,6 +2844,11 @@ QTlsBackend *QSslSocketPrivate::tlsBackendInUse() if (!activeBackendName.size()) activeBackendName = QTlsBackend::defaultBackendName(); + if (!activeBackendName.size()) { + qCWarning(lcSsl, "No functional TLS backend was found"); + return nullptr; + } + return tlsBackend = QTlsBackend::findBackend(activeBackendName); } diff --git a/src/network/ssl/qtlsbackend.cpp b/src/network/ssl/qtlsbackend.cpp index ac6d965bd3d..1df462e3627 100644 --- a/src/network/ssl/qtlsbackend.cpp +++ b/src/network/ssl/qtlsbackend.cpp @@ -110,8 +110,10 @@ public: return names; names.reserve(backends.size()); - for (const auto *factory : backends) - names.append(factory->backendName()); + for (const auto *backend : backends) { + if (backend->isValid()) + names.append(backend->backendName()); + } return names; } @@ -198,6 +200,11 @@ QTlsBackend::~QTlsBackend() backends->removeBackend(this); } +bool QTlsBackend::isValid() const +{ + return true; +} + QString QTlsBackend::backendName() const { return QStringLiteral("dummyTLS"); diff --git a/src/network/ssl/qtlsbackend_openssl.cpp b/src/network/ssl/qtlsbackend_openssl.cpp index b0dd920aedb..e288498820f 100644 --- a/src/network/ssl/qtlsbackend_openssl.cpp +++ b/src/network/ssl/qtlsbackend_openssl.cpp @@ -41,6 +41,10 @@ #include "qtlskey_openssl_p.h" #include "qx509_openssl_p.h" +// TLSTODO: Later, this code (ensure initialised, etc.) +// must move from the socket to backend. +#include "qsslsocket_p.h" +// #include "qsslsocket_openssl_symbols_p.h" #include @@ -83,6 +87,13 @@ QString QTlsBackendOpenSSL::backendName() const return builtinBackendNames[nameIndexOpenSSL]; } +bool QTlsBackendOpenSSL::isValid() const +{ + // TLSTODO: backend should do initialization, + // not socket. + return QSslSocket::supportsSsl(); +} + QList QTlsBackendOpenSSL::supportedProtocols() const { QList protocols; diff --git a/src/network/ssl/qtlsbackend_openssl_p.h b/src/network/ssl/qtlsbackend_openssl_p.h index 67472980af5..478e4762c29 100644 --- a/src/network/ssl/qtlsbackend_openssl_p.h +++ b/src/network/ssl/qtlsbackend_openssl_p.h @@ -68,6 +68,7 @@ public: static void clearErrorQueue(); private: QString backendName() const override; + bool isValid() const override; QList supportedProtocols() const override; QList supportedFeatures() const override; diff --git a/src/network/ssl/qtlsbackend_p.h b/src/network/ssl/qtlsbackend_p.h index e077521b32d..c1d5137ca35 100644 --- a/src/network/ssl/qtlsbackend_p.h +++ b/src/network/ssl/qtlsbackend_p.h @@ -195,6 +195,8 @@ public: QTlsBackend(); ~QTlsBackend() override; + virtual bool isValid() const; + virtual QString backendName() const = 0; virtual QList supportedProtocols() const = 0; virtual QList supportedFeatures() const = 0;