summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--src/mqtt/qmqttclient.cpp20
-rw-r--r--src/mqtt/qmqttclient.h8
-rw-r--r--src/mqtt/qmqttconnection.cpp2
-rw-r--r--src/mqtt/qmqttconnection_p.h3
-rw-r--r--tests/manual/sslconfiguration/main.cpp81
-rw-r--r--tests/manual/sslconfiguration/sslconfiguration.pro15
7 files changed, 129 insertions, 2 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 7b49e2c..879fb0f 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,4 +1,4 @@
load(qt_build_config)
CONFIG += warning_clean
-MODULE_VERSION = 5.13.0
+MODULE_VERSION = 5.14.0
diff --git a/src/mqtt/qmqttclient.cpp b/src/mqtt/qmqttclient.cpp
index c8fc73f..11d3af3 100644
--- a/src/mqtt/qmqttclient.cpp
+++ b/src/mqtt/qmqttclient.cpp
@@ -509,17 +509,37 @@ void QMqttClient::connectToHost()
}
/*!
+ \obsolete
+
Initiates an encrypted connection to the MQTT broker.
\a sslPeerName specifies the peer name to be passed to the socket.
+
+ This function has been deprecated. Use
+ \l QMqttClient::connectToHostEncrypted(const QSslConfiguration &conf) instead.
*/
#ifndef QT_NO_SSL
+#if QT_DEPRECATED_SINCE(5, 14)
void QMqttClient::connectToHostEncrypted(const QString &sslPeerName)
{
connectToHost(true, sslPeerName);
}
#endif
+/*!
+ \since 5.14
+ Initiates an encrypted connection to the MQTT broker.
+
+ \a conf specifies the SSL configuration to be used for the connection
+ */
+void QMqttClient::connectToHostEncrypted(const QSslConfiguration &conf)
+{
+ Q_D(QMqttClient);
+ d->m_connection.m_sslConfiguration = conf;
+ connectToHost(true, QString());
+}
+#endif
+
void QMqttClient::connectToHost(bool encrypted, const QString &sslPeerName)
{
Q_D(QMqttClient);
diff --git a/src/mqtt/qmqttclient.h b/src/mqtt/qmqttclient.h
index 92e114b..478c7e8 100644
--- a/src/mqtt/qmqttclient.h
+++ b/src/mqtt/qmqttclient.h
@@ -42,6 +42,9 @@
#include <QtCore/QObject>
#include <QtCore/QSharedPointer>
#include <QtNetwork/QTcpSocket>
+#ifndef QT_NO_SSL
+#include <QtNetwork/QSslConfiguration>
+#endif
QT_BEGIN_NAMESPACE
@@ -127,7 +130,10 @@ public:
Q_INVOKABLE void connectToHost();
#ifndef QT_NO_SSL
- Q_INVOKABLE void connectToHostEncrypted(const QString &sslPeerName = QString());
+#if QT_DEPRECATED_SINCE(5, 14)
+ QT_DEPRECATED Q_INVOKABLE void connectToHostEncrypted(const QString &sslPeerName = QString()); /// ### Qt 6: remove
+#endif
+ void connectToHostEncrypted(const QSslConfiguration &conf);
#endif
Q_INVOKABLE void disconnectFromHost();
diff --git a/src/mqtt/qmqttconnection.cpp b/src/mqtt/qmqttconnection.cpp
index 483e6f4..bb27f66 100644
--- a/src/mqtt/qmqttconnection.cpp
+++ b/src/mqtt/qmqttconnection.cpp
@@ -204,6 +204,8 @@ bool QMqttConnection::ensureTransportOpen(const QString &sslPeerName)
return sendControlConnect();
m_internalState = BrokerConnecting;
+ if (!m_sslConfiguration.isNull())
+ socket->setSslConfiguration(m_sslConfiguration);
socket->connectToHostEncrypted(m_clientPrivate->m_hostname, m_clientPrivate->m_port, sslPeerName);
if (!socket->waitForConnected()) {
diff --git a/src/mqtt/qmqttconnection_p.h b/src/mqtt/qmqttconnection_p.h
index a14f914..626addc 100644
--- a/src/mqtt/qmqttconnection_p.h
+++ b/src/mqtt/qmqttconnection_p.h
@@ -107,6 +107,9 @@ public:
QMqttClient::TransportType m_transportType{QMqttClient::IODevice};
bool m_ownTransport{false};
QMqttClientPrivate *m_clientPrivate{nullptr};
+#ifndef QT_NO_SSL
+ QSslConfiguration m_sslConfiguration;
+#endif
private:
Q_DISABLE_COPY(QMqttConnection)
void finalize_auth();
diff --git a/tests/manual/sslconfiguration/main.cpp b/tests/manual/sslconfiguration/main.cpp
new file mode 100644
index 0000000..61862ec
--- /dev/null
+++ b/tests/manual/sslconfiguration/main.cpp
@@ -0,0 +1,81 @@
+/******************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtMqtt module.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+******************************************************************************/
+
+#include <QCoreApplication>
+#include <QtMqtt>
+#include <QtNetwork>
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication a(argc, argv);
+
+ const bool support = QSslSocket::supportsSsl();
+ if (!support) {
+ qWarning() << "This test requires a Qt build with SSL support.";
+ return -1;
+ }
+
+ QSslConfiguration sslConfig;
+
+ // You must download the current certificate from the mosquitto test page
+ // http://test.mosquitto.org and place it next to the binary.
+ const auto certs = QSslCertificate::fromPath("mosquitto.org.crt");
+
+ if (certs.isEmpty()) {
+ qWarning() << "Could not load certificates";
+ return -2;
+ }
+
+ sslConfig.setCaCertificates(certs);
+
+ QMqttClient client;
+
+ client.setHostname("test.mosquitto.org");
+ client.setPort(8883);
+
+ a.connect(&client, &QMqttClient::connected, [&client]() {
+ qDebug() << "MQTT Client connected, subscribing";
+ auto sub = client.subscribe(QLatin1String("some/Topic/foo"), 1);
+ client.connect(sub, &QMqttSubscription::stateChanged, [] (QMqttSubscription::SubscriptionState s) {
+ qDebug() << "MQTT Subscription new state:" << s;
+ if (s == QMqttSubscription::Subscribed)
+ qInfo() << "Connection and Subscription succeeded, test done.";
+ });
+ });
+
+ a.connect(&client, &QMqttClient::stateChanged, [](QMqttClient::ClientState s) {
+ qDebug() << "MQTT State:" << s;
+ });
+ a.connect(&client, &QMqttClient::errorChanged, [](QMqttClient::ClientError e) {
+ qDebug() << "MQTT Error:" << e;
+ });
+
+ client.connectToHostEncrypted(sslConfig);
+
+ return a.exec();
+}
diff --git a/tests/manual/sslconfiguration/sslconfiguration.pro b/tests/manual/sslconfiguration/sslconfiguration.pro
new file mode 100644
index 0000000..a9e744c
--- /dev/null
+++ b/tests/manual/sslconfiguration/sslconfiguration.pro
@@ -0,0 +1,15 @@
+QT -= gui
+QT += network mqtt
+
+CONFIG += c++11 console
+CONFIG -= app_bundle
+
+DEFINES += QT_DEPRECATED_WARNINGS
+
+SOURCES += \
+ main.cpp
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target