diff options
| author | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2025-01-16 20:54:09 +0200 |
|---|---|---|
| committer | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2025-01-16 20:54:09 +0200 |
| commit | a62a93331ff59e762b0f7d26051a8cb6afdd2ce5 (patch) | |
| tree | 6745bacbe14b85a4d81000e8770d34a248165dea /tests/auto/httpserver/httpsserver.h | |
| parent | 77c4670a926c461d182db33242edac779f9e44d2 (diff) | |
| parent | 45c01c6e389f639948db46d627b0b378565aeda6 (diff) | |
Merge branch 'tqtc/lts-6.2-opensource' into 6.2.116.2.11
Change-Id: If9d6d39031d7d306dbfa0321c10d70846e7286ef
Diffstat (limited to 'tests/auto/httpserver/httpsserver.h')
| -rw-r--r-- | tests/auto/httpserver/httpsserver.h | 71 |
1 files changed, 33 insertions, 38 deletions
diff --git a/tests/auto/httpserver/httpsserver.h b/tests/auto/httpserver/httpsserver.h index 10deeb322..d064c1416 100644 --- a/tests/auto/httpserver/httpsserver.h +++ b/tests/auto/httpserver/httpsserver.h @@ -7,56 +7,51 @@ #include "httpserver.h" #include <QDebug> -#include <QtCore/qfile.h> -#include <QtNetwork/qsslkey.h> -#include <QtNetwork/qsslsocket.h> -#include <QtNetwork/qsslconfiguration.h> -#include <QtNetwork/qsslserver.h> +#include <QFile> +#include <QSslKey> +#include <QSslSocket> +#include <QSslConfiguration> +#include <QTcpServer> -static QSslServer *createServer(const QString &certificateFileName, const QString &keyFileName, - const QString &ca) +struct SslTcpServer : QTcpServer { - QSslConfiguration configuration(QSslConfiguration::defaultConfiguration()); + SslTcpServer(const QString &certPath, const QString &keyPath) { + sslconf.setLocalCertificateChain(QSslCertificate::fromPath(certPath)); + sslconf.setPrivateKey(readKey(keyPath)); + } + + void incomingConnection(qintptr d) override { + auto socket = new QSslSocket(this); + socket->setSslConfiguration(sslconf); - QFile keyFile(keyFileName); - if (keyFile.open(QIODevice::ReadOnly)) { - QSslKey key(keyFile.readAll(), QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey); - if (!key.isNull()) { - configuration.setPrivateKey(key); - } else { - qCritical() << "Could not parse key: " << keyFileName; + if (!socket->setSocketDescriptor(d)) { + qWarning() << "Failed to setup ssl socket!"; + delete socket; + return; } - } else { - qCritical() << "Could not find key: " << keyFileName; - } - QList<QSslCertificate> localCerts = QSslCertificate::fromPath(certificateFileName); - if (!localCerts.isEmpty()) { - configuration.setLocalCertificateChain(localCerts); - } else { - qCritical() << "Could not find certificate: " << certificateFileName; + connect(socket, QOverload<QSslSocket::SocketError>::of(&QSslSocket::errorOccurred), + [] (QSslSocket::SocketError e) { qWarning() << "! Socket Error:" << e; }); + connect(socket, QOverload<const QList<QSslError> &>::of(&QSslSocket::sslErrors), + [] (const QList<QSslError> &le) { qWarning() << "! SSL Errors:\n" << le; }); + + addPendingConnection(socket); + socket->startServerEncryption(); } - if (!ca.isEmpty()) { - QList<QSslCertificate> caCerts = QSslCertificate::fromPath(ca); - if (!caCerts.isEmpty()) { - configuration.addCaCertificates(caCerts); - configuration.setPeerVerifyMode(QSslSocket::VerifyPeer); - } else { - qCritical() << "Could not find certificate: " << certificateFileName; - } + QSslKey readKey(const QString &path) const { + QFile file(path); + file.open(QIODevice::ReadOnly); + return QSslKey(file.readAll(), QSsl::Rsa, QSsl::Pem); } - QSslServer *server = new QSslServer(); - server->setSslConfiguration(configuration); - return server; -} + QSslConfiguration sslconf; +}; struct HttpsServer : HttpServer { - HttpsServer(const QString &certPath, const QString &keyPath, const QString &ca, - QObject *parent = nullptr) - : HttpServer(createServer(certPath, keyPath, ca), "https", QHostAddress::LocalHost, 0, + HttpsServer(const QString &certPath, const QString &keyPath, QObject *parent = nullptr) + : HttpServer(new SslTcpServer(certPath, keyPath), "https", QHostAddress::LocalHost, 0, parent) { } |
