File indexing completed on 2024-05-05 16:13:21

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2007, 2008 Andreas Hartmetz <ahartmetz@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "ksslerroruidata.h"
0009 #include "ksslerroruidata_p.h"
0010 #include "ktcpsocket.h"
0011 
0012 #include <QHostAddress>
0013 #include <QNetworkReply>
0014 #include <QSslCipher>
0015 
0016 KSslErrorUiData::KSslErrorUiData()
0017     : d(new Private())
0018 {
0019     d->usedBits = 0;
0020     d->bits = 0;
0021 }
0022 
0023 #if KIOCORE_BUILD_DEPRECATED_SINCE(5, 65)
0024 KSslErrorUiData::KSslErrorUiData(const KTcpSocket *socket)
0025     : d(new Private())
0026 {
0027     d->certificateChain = socket->peerCertificateChain();
0028     const auto ksslErrors = socket->sslErrors();
0029     d->sslErrors.reserve(ksslErrors.size());
0030     for (const auto &error : ksslErrors) {
0031         d->sslErrors.push_back(error.sslError());
0032     }
0033     d->ip = socket->peerAddress().toString();
0034     d->host = socket->peerName();
0035     d->sslProtocol = socket->negotiatedSslVersionName();
0036     d->cipher = socket->sessionCipher().name();
0037     d->usedBits = socket->sessionCipher().usedBits();
0038     d->bits = socket->sessionCipher().supportedBits();
0039 }
0040 #endif
0041 
0042 KSslErrorUiData::KSslErrorUiData(const QSslSocket *socket)
0043     : d(new Private())
0044 {
0045     d->certificateChain = socket->peerCertificateChain();
0046     d->sslErrors = socket->sslHandshakeErrors();
0047     d->ip = socket->peerAddress().toString();
0048     d->host = socket->peerName();
0049     if (socket->isEncrypted()) {
0050         d->sslProtocol = socket->sessionCipher().protocolString();
0051     }
0052     d->cipher = socket->sessionCipher().name();
0053     d->usedBits = socket->sessionCipher().usedBits();
0054     d->bits = socket->sessionCipher().supportedBits();
0055 }
0056 
0057 KSslErrorUiData::KSslErrorUiData(const QNetworkReply *reply, const QList<QSslError> &sslErrors)
0058     : d(new Private())
0059 {
0060     const auto sslConfig = reply->sslConfiguration();
0061     d->certificateChain = sslConfig.peerCertificateChain();
0062     d->sslErrors = sslErrors;
0063     d->host = reply->request().url().host();
0064     d->sslProtocol = sslConfig.sessionCipher().protocolString();
0065     d->cipher = sslConfig.sessionCipher().name();
0066     d->usedBits = sslConfig.sessionCipher().usedBits();
0067     d->bits = sslConfig.sessionCipher().supportedBits();
0068 }
0069 
0070 KSslErrorUiData::KSslErrorUiData(const KSslErrorUiData &other)
0071     : d(new Private(*other.d))
0072 {
0073 }
0074 
0075 KSslErrorUiData::~KSslErrorUiData() = default;
0076 
0077 KSslErrorUiData &KSslErrorUiData::operator=(const KSslErrorUiData &other)
0078 {
0079     *d = *other.d;
0080     return *this;
0081 }