Small fixes in AWS connection

* Fix uncategorized debug print
* Disable the mqtt lib's autoreconnect feature as AWS doesn't support that
* Manually reconnect on errors too
This commit is contained in:
Michael Zanetti 2019-01-07 21:50:27 +01:00
parent 73200c3c67
commit 1094f589d1
2 changed files with 11 additions and 16 deletions

View File

@ -1,6 +1,6 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * *
* Copyright (C) 2017-2018 Michael Zanetti <michael.zanetti@guh.io> * * Copyright (C) 2017-2019 Michael Zanetti <michael.zanetti@guh.io> *
* * * *
* This file is part of nymea. * * This file is part of nymea. *
* * * *
@ -31,6 +31,7 @@
#include <QSslCertificate> #include <QSslCertificate>
#include <QFile> #include <QFile>
#include <QSslKey> #include <QSslKey>
#include <QMetaEnum>
AWSConnector::AWSConnector(QObject *parent) : QObject(parent) AWSConnector::AWSConnector(QObject *parent) : QObject(parent)
{ {
@ -58,7 +59,6 @@ void AWSConnector::connect2AWS(const QString &endpoint, const QString &clientId,
m_clientName = clientName; m_clientName = clientName;
if (m_client) { if (m_client) {
m_shouldReconnect = true;
m_client->disconnectFromHost(); m_client->disconnectFromHost();
qCDebug(dcAWS()) << "Disconnecting from AWS"; qCDebug(dcAWS()) << "Disconnecting from AWS";
return; return;
@ -93,14 +93,15 @@ void AWSConnector::doConnect()
m_client = new MqttClient(m_clientId, this); m_client = new MqttClient(m_clientId, this);
m_client->setKeepAlive(30); m_client->setKeepAlive(30);
m_client->setAutoReconnect(true); m_client->setAutoReconnect(false);
qWarning() << "Connecting MQTT to" << m_currentEndpoint; qCDebug(dcAWS()).nospace().noquote() << "Connecting MQTT to " << m_currentEndpoint << " as " << m_clientId << " with certificate " << getCertificateFingerprint(certificate);
m_client->connectToHost(m_currentEndpoint, 8883, true, true, sslConfig); m_client->connectToHost(m_currentEndpoint, 8883, true, true, sslConfig);
connect(m_client, &MqttClient::connected, this, &AWSConnector::onConnected); connect(m_client, &MqttClient::connected, this, &AWSConnector::onConnected);
connect(m_client, &MqttClient::disconnected, this, &AWSConnector::onDisconnected); connect(m_client, &MqttClient::disconnected, this, &AWSConnector::onDisconnected);
connect(m_client, &MqttClient::error, this, [](const QAbstractSocket::SocketError error){ connect(m_client, &MqttClient::error, this, [this](const QAbstractSocket::SocketError error){
qCWarning(dcAWS()) << "An error happened in the MQTT transport" << error; qCWarning(dcAWS()) << "An error happened in the MQTT transport" << error << QMetaEnum::fromType<QAbstractSocket::SocketError>().valueToKey(error);
onDisconnected();
}); });
connect(m_client, &MqttClient::subscribed, this, &AWSConnector::onSubscribed); connect(m_client, &MqttClient::subscribed, this, &AWSConnector::onSubscribed);
@ -530,16 +531,10 @@ QString AWSConnector::readSyncedNameCache()
return settings.value("syncedName", QString()).toString(); return settings.value("syncedName", QString()).toString();
} }
QString AWSConnector::getCertificateFingerprint(const QString &certificateFile) const QString AWSConnector::getCertificateFingerprint(const QSslCertificate &certificate) const
{ {
QFile certFile(certificateFile);
if (!certFile.open(QFile::ReadOnly)) {
qCWarning(dcAWS()) << "Error opening certificate file" << certificateFile;
return QString();
}
QSslCertificate crt = QSslCertificate(certFile.readAll());
QByteArray output; QByteArray output;
QByteArray digest = crt.digest(QCryptographicHash::Sha256); QByteArray digest = certificate.digest(QCryptographicHash::Sha256);
for (int i = 0; i < digest.length(); i++) { for (int i = 0; i < digest.length(); i++) {
if (output.length() > 0) { if (output.length() > 0) {
output.append(":"); output.append(":");

View File

@ -1,6 +1,6 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * *
* Copyright (C) 2017-2018 Michael Zanetti <michael.zanetti@guh.io> * * Copyright (C) 2017-2019 Michael Zanetti <michael.zanetti@guh.io> *
* * * *
* This file is part of nymea. * * This file is part of nymea. *
* * * *
@ -93,7 +93,7 @@ private:
void storeSyncedNameCache(const QString &syncedName); void storeSyncedNameCache(const QString &syncedName);
QString readSyncedNameCache(); QString readSyncedNameCache();
QString getCertificateFingerprint(const QString &certificateFilePath) const; QString getCertificateFingerprint(const QSslCertificate &certificate) const;
private: private:
MqttClient *m_client = nullptr; MqttClient *m_client = nullptr;