diff --git a/src/core/ktcpsocket.h b/src/core/ktcpsocket.h --- a/src/core/ktcpsocket.h +++ b/src/core/ktcpsocket.h @@ -26,6 +26,8 @@ #include "kiocore_export.h" +class QNetworkReply; + /* Notes on QCA::TLS compatibility In order to check for all validation problems as far as possible we need to use: @@ -410,6 +412,12 @@ * Create an instance and initialize it with SSL error data from @p socket. */ KSslErrorUiData(const QSslSocket *socket); + /** + * Create an instance and initialize it with SSL error data from @p reply. + * @since 5.62 + */ + KSslErrorUiData(const QNetworkReply *reply, const QList &sslErrors); + KSslErrorUiData(const KSslErrorUiData &other); KSslErrorUiData &operator=(const KSslErrorUiData &); /** diff --git a/src/core/ktcpsocket.cpp b/src/core/ktcpsocket.cpp --- a/src/core/ktcpsocket.cpp +++ b/src/core/ktcpsocket.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include static KTcpSocket::SslVersion kSslVersionFromQ(QSsl::SslProtocol protocol) @@ -1097,6 +1098,24 @@ d->bits = socket->sessionCipher().supportedBits(); } +KSslErrorUiData::KSslErrorUiData(const QNetworkReply *reply, const QList &sslErrors) + : d(new Private()) +{ + const auto sslConfig = reply->sslConfiguration(); + d->certificateChain = sslConfig.peerCertificateChain(); + + d->sslErrors.reserve(sslErrors.size()); + for (const QSslError &e : sslErrors) { + d->sslErrors.append(KSslError(e)); + } + + d->host = reply->request().url().host(); + d->sslProtocol = sslConfig.sessionCipher().protocolString(); + d->cipher = sslConfig.sessionCipher().name(); + d->usedBits = sslConfig.sessionCipher().usedBits(); + d->bits = sslConfig.sessionCipher().supportedBits(); +} + KSslErrorUiData::KSslErrorUiData(const KSslErrorUiData &other) : d(new Private(*other.d)) {}