diff options
author | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2018-11-15 08:29:37 +0100 |
---|---|---|
committer | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2018-11-15 10:43:14 +0000 |
commit | a9e5d36f31878e6a7c1c79137b466a92168134ec (patch) | |
tree | 97ad44da523f178eccc2c72f263cfcd3910ed61d | |
parent | 4a239e34c7f191ba69211d2a8aa369452dedb93f (diff) |
Take transport errors into account
If an error occures during the initial connection request,
this was not reflected in the state changes. Hence, we
close the connection on any type of error occurring.
Change-Id: I871be4600978f403af3637eac1ada70ff6ba06c3
Fixes: QTBUG-71795
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r-- | src/mqtt/qmqttconnection.cpp | 9 | ||||
-rw-r--r-- | src/mqtt/qmqttconnection_p.h | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/mqtt/qmqttconnection.cpp b/src/mqtt/qmqttconnection.cpp index fc27a24..f1ad7ec 100644 --- a/src/mqtt/qmqttconnection.cpp +++ b/src/mqtt/qmqttconnection.cpp @@ -162,6 +162,9 @@ bool QMqttConnection::ensureTransport(bool createSecureIfNeeded) connect(socket, &QAbstractSocket::connected, this, &QMqttConnection::transportConnectionEstablished); connect(socket, &QAbstractSocket::disconnected, this, &QMqttConnection::transportConnectionClosed); + connect(socket, static_cast<void (QAbstractSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error), + this, &QMqttConnection::transportError); + connect(m_transport, &QIODevice::aboutToClose, this, &QMqttConnection::transportConnectionClosed); connect(m_transport, &QIODevice::readyRead, this, &QMqttConnection::transportReadReady); return true; @@ -681,6 +684,12 @@ void QMqttConnection::transportReadReady() processData(); } +void QMqttConnection::transportError(QAbstractSocket::SocketError e) +{ + qCDebug(lcMqttConnection) << Q_FUNC_INFO << e; + closeConnection(QMqttClient::TransportInvalid); +} + void QMqttConnection::readBuffer(char *data, quint64 size) { memcpy(data, m_readBuffer.constData() + m_readPosition, size); diff --git a/src/mqtt/qmqttconnection_p.h b/src/mqtt/qmqttconnection_p.h index cfe1641..84dc875 100644 --- a/src/mqtt/qmqttconnection_p.h +++ b/src/mqtt/qmqttconnection_p.h @@ -100,6 +100,7 @@ public Q_SLOTS: void transportConnectionEstablished(); void transportConnectionClosed(); void transportReadReady(); + void transportError(QAbstractSocket::SocketError e); public: QIODevice *m_transport{nullptr}; |