summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/network/socket/qabstractsocket.cpp11
-rw-r--r--src/network/ssl/qsslsocket.cpp38
-rw-r--r--src/network/ssl/qsslsocket.h1
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;