From c5688ab632948464a1114f79c956c2ab595a58d7 Mon Sep 17 00:00:00 2001 From: proddy Date: Tue, 27 Jul 2021 21:43:17 +0200 Subject: [PATCH] manually merge in official 0.9.0 version --- lib/async-mqtt-client/LICENSE | 2 +- lib/async-mqtt-client/src/AsyncMqttClient.cpp | 23 ++++++++++--------- lib/async-mqtt-client/src/AsyncMqttClient.hpp | 3 ++- .../src/AsyncMqttClient/DisconnectReasons.hpp | 2 +- .../AsyncMqttClient/Packets/Out/PubAck.cpp | 1 - 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/lib/async-mqtt-client/LICENSE b/lib/async-mqtt-client/LICENSE index a6183c687..a3ee21720 100644 --- a/lib/async-mqtt-client/LICENSE +++ b/lib/async-mqtt-client/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 Marvin Roger +Copyright (c) 2015-2021 Marvin Roger Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/lib/async-mqtt-client/src/AsyncMqttClient.cpp b/lib/async-mqtt-client/src/AsyncMqttClient.cpp index 68ea0c5fd..98f0e5f29 100644 --- a/lib/async-mqtt-client/src/AsyncMqttClient.cpp +++ b/lib/async-mqtt-client/src/AsyncMqttClient.cpp @@ -6,7 +6,7 @@ AsyncMqttClient::AsyncMqttClient() , _tail(nullptr) , _sent(0) , _state(DISCONNECTED) -, _tlsBadFingerprint(false) +, _disconnectReason(AsyncMqttClientDisconnectReason::TCP_DISCONNECTED) , _lastClientActivity(0) , _lastServerActivity(0) , _lastPingRequestTime(0) @@ -194,7 +194,6 @@ void AsyncMqttClient::_freeCurrentParsedPacket() { void AsyncMqttClient::_clear() { _lastPingRequestTime = 0; - _tlsBadFingerprint = false; _freeCurrentParsedPacket(); _clearQueue(true); // keep session data for now @@ -219,7 +218,7 @@ void AsyncMqttClient::_onConnect() { } if (!sslFoundFingerprint) { - _tlsBadFingerprint = true; + _disconnectReason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT; _client.close(true); return; } @@ -243,17 +242,10 @@ void AsyncMqttClient::_onConnect() { void AsyncMqttClient::_onDisconnect() { log_i("TCP disconn"); _state = DISCONNECTED; - AsyncMqttClientDisconnectReason reason; - - if (_tlsBadFingerprint) { - reason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT; - } else { - reason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED; - } _clear(); - for (auto callback : _onDisconnectUserCallbacks) callback(reason); + for (auto callback : _onDisconnectUserCallbacks) callback(_disconnectReason); } /* @@ -541,6 +533,8 @@ void AsyncMqttClient::_onConnAck(bool sessionPresent, uint8_t connectReturnCode) for (auto callback : _onConnectUserCallbacks) callback(sessionPresent); } else { // Callbacks are handled by the onDisconnect function which is called from the AsyncTcp lib + _disconnectReason = static_cast(connectReturnCode); + return; } _handleQueue(); // send any remaining data from continued session } @@ -710,6 +704,7 @@ void AsyncMqttClient::connect() { if (_state != DISCONNECTED) return; log_i("CONNECTING"); _state = CONNECTING; + _disconnectReason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED; // reset any previous _client.setRxTimeout(_keepAlive); @@ -770,6 +765,12 @@ uint16_t AsyncMqttClient::publish(const char* topic, uint8_t qos, bool retain, c return msg->packetId(); } +bool AsyncMqttClient::clearQueue() { + if (_state != DISCONNECTED) return false; + _clearQueue(false); + return true; +} + const char* AsyncMqttClient::getClientId() const { return _clientId; } diff --git a/lib/async-mqtt-client/src/AsyncMqttClient.hpp b/lib/async-mqtt-client/src/AsyncMqttClient.hpp index de42cd25a..fc2462601 100644 --- a/lib/async-mqtt-client/src/AsyncMqttClient.hpp +++ b/lib/async-mqtt-client/src/AsyncMqttClient.hpp @@ -82,6 +82,7 @@ class AsyncMqttClient { uint16_t subscribe(const char* topic, uint8_t qos); uint16_t unsubscribe(const char* topic); uint16_t publish(const char* topic, uint8_t qos, bool retain, const char* payload = nullptr, size_t length = 0, bool dup = false, uint16_t message_id = 0); + bool clearQueue(); // Not MQTT compliant! const char* getClientId() const; @@ -96,7 +97,7 @@ class AsyncMqttClient { DISCONNECTING, DISCONNECTED } _state; - bool _tlsBadFingerprint; + AsyncMqttClientDisconnectReason _disconnectReason; uint32_t _lastClientActivity; uint32_t _lastServerActivity; uint32_t _lastPingRequestTime; diff --git a/lib/async-mqtt-client/src/AsyncMqttClient/DisconnectReasons.hpp b/lib/async-mqtt-client/src/AsyncMqttClient/DisconnectReasons.hpp index f4cbda8af..a15114000 100644 --- a/lib/async-mqtt-client/src/AsyncMqttClient/DisconnectReasons.hpp +++ b/lib/async-mqtt-client/src/AsyncMqttClient/DisconnectReasons.hpp @@ -1,6 +1,6 @@ #pragma once -enum class AsyncMqttClientDisconnectReason : int8_t { +enum class AsyncMqttClientDisconnectReason : uint8_t { TCP_DISCONNECTED = 0, MQTT_UNACCEPTABLE_PROTOCOL_VERSION = 1, diff --git a/lib/async-mqtt-client/src/AsyncMqttClient/Packets/Out/PubAck.cpp b/lib/async-mqtt-client/src/AsyncMqttClient/Packets/Out/PubAck.cpp index 3352bd0d2..634607ba5 100644 --- a/lib/async-mqtt-client/src/AsyncMqttClient/Packets/Out/PubAck.cpp +++ b/lib/async-mqtt-client/src/AsyncMqttClient/Packets/Out/PubAck.cpp @@ -10,7 +10,6 @@ PubAckOutPacket::PubAckOutPacket(PendingAck pendingAck) { _packetId = pendingAck.packetId; _data[2] = pendingAck.packetId >> 8; _data[3] = pendingAck.packetId & 0xFF; - // _released = false; if (packetType() == AsyncMqttClientInternals::PacketType.PUBREL || packetType() == AsyncMqttClientInternals::PacketType.PUBREC) { _released = false;