summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaurice Kalinowski <maurice.kalinowski@qt.io>2018-11-15 08:29:37 +0100
committerMaurice Kalinowski <maurice.kalinowski@qt.io>2018-11-15 10:43:14 +0000
commita9e5d36f31878e6a7c1c79137b466a92168134ec (patch)
tree97ad44da523f178eccc2c72f263cfcd3910ed61d
parent4a239e34c7f191ba69211d2a8aa369452dedb93f (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.cpp9
-rw-r--r--src/mqtt/qmqttconnection_p.h1
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};