summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-11-17 03:02:02 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-11-17 03:02:02 +0100
commitc493980cc726de4a40782476433b463154d27700 (patch)
tree97ad44da523f178eccc2c72f263cfcd3910ed61d
parentbd073101acc9d30e0067c9c75d5cdab7511deedf (diff)
parenta9e5d36f31878e6a7c1c79137b466a92168134ec (diff)
Merge remote-tracking branch 'origin/5.12' into dev
-rw-r--r--src/mqtt/qmqttclient.cpp5
-rw-r--r--src/mqtt/qmqttconnection.cpp9
-rw-r--r--src/mqtt/qmqttconnection_p.h1
3 files changed, 15 insertions, 0 deletions
diff --git a/src/mqtt/qmqttclient.cpp b/src/mqtt/qmqttclient.cpp
index fd6ca5d..0ea0f1e 100644
--- a/src/mqtt/qmqttclient.cpp
+++ b/src/mqtt/qmqttclient.cpp
@@ -521,6 +521,11 @@ void QMqttClient::connectToHost(bool encrypted, const QString &sslPeerName)
{
Q_D(QMqttClient);
+ if (state() == QMqttClient::Connecting) {
+ qCDebug(lcMqttClient) << "Connection request currently ongoing.";
+ return;
+ }
+
if (state() == QMqttClient::Connected) {
qCDebug(lcMqttClient) << "Already connected to a broker. Rejecting connection request.";
return;
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};