diff options
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/socket/qabstractsocket.cpp | 11 | ||||
-rw-r--r-- | src/network/ssl/qsslsocket.cpp | 38 | ||||
-rw-r--r-- | src/network/ssl/qsslsocket.h | 1 |
3 files changed, 11 insertions, 39 deletions
diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 21f1f742f7..cf6a7672fb 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -479,10 +479,6 @@ #include <qscopedvaluerollback.h> #include <qvarlengtharray.h> -#ifndef QT_NO_SSL -#include <QtNetwork/qsslsocket.h> -#endif - #include <private/qthread_p.h> #ifdef QABSTRACTSOCKET_DEBUG @@ -2406,13 +2402,6 @@ void QAbstractSocket::abort() qDebug("QAbstractSocket::abort()"); #endif d->setWriteChannelCount(0); -#ifndef QT_NO_SSL - if (QSslSocket *socket = qobject_cast<QSslSocket *>(this)) { - socket->abort(); - return; - } -#endif - d->abortCalled = true; close(); } diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 19ab903d36..9d8fa035e2 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -899,13 +899,19 @@ void QSslSocket::close() #endif Q_D(QSslSocket); - // We don't want any CA roots fetched anymore. + // On Windows, CertGetCertificateChain is probably still doing its + // job, if the socket is re-used, we want to ignore its reported + // root CA. d->caToFetch = QSslCertificate{}; - if (encryptedBytesToWrite() || !d->writeBuffer.isEmpty()) + if (!d->abortCalled && (encryptedBytesToWrite() || !d->writeBuffer.isEmpty())) flush(); - if (d->plainSocket) - d->plainSocket->close(); + if (d->plainSocket) { + if (d->abortCalled) + d->plainSocket->abort(); + else + d->plainSocket->close(); + } QTcpSocket::close(); // must be cleared, reading/writing not possible on closed socket: @@ -939,29 +945,6 @@ void QSslSocket::setReadBufferSize(qint64 size) } /*! - Aborts the current connection and resets the socket. Unlike - disconnectFromHost(), this function immediately closes the socket, - clearing any pending data in the write buffer. - - \sa disconnectFromHost(), close() -*/ -void QSslSocket::abort() -{ - Q_D(QSslSocket); -#ifdef QSSLSOCKET_DEBUG - qCDebug(lcSsl) << "QSslSocket::abort()"; -#endif - // On Windows, CertGetCertificateChain is probably still doing its - // job, if the socket is re-used, we want to ignore its reported - // root CA. - d->caToFetch = QSslCertificate{}; - - if (d->plainSocket) - d->plainSocket->abort(); - close(); -} - -/*! \since 4.4 Returns the socket's SSL configuration state. The default SSL @@ -1883,6 +1866,7 @@ void QSslSocketPrivate::init() connectionEncrypted = false; ignoreAllSslErrors = false; shutdown = false; + abortCalled = false; pendingClose = false; flushTriggered = false; ocspResponses.clear(); diff --git a/src/network/ssl/qsslsocket.h b/src/network/ssl/qsslsocket.h index 4a576b1784..a808efbfdf 100644 --- a/src/network/ssl/qsslsocket.h +++ b/src/network/ssl/qsslsocket.h @@ -117,7 +117,6 @@ public: bool canReadLine() const override; void close() override; bool atEnd() const override; - void abort(); // From QAbstractSocket: void setReadBufferSize(qint64 size) override; |