manually merge in official 0.9.0 version

This commit is contained in:
proddy
2021-07-27 21:43:17 +02:00
parent d5d75eee63
commit c5688ab632
5 changed files with 16 additions and 15 deletions

View File

@@ -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<AsyncMqttClientDisconnectReason>(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;
}

View File

@@ -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;

View File

@@ -1,6 +1,6 @@
#pragma once
enum class AsyncMqttClientDisconnectReason : int8_t {
enum class AsyncMqttClientDisconnectReason : uint8_t {
TCP_DISCONNECTED = 0,
MQTT_UNACCEPTABLE_PROTOCOL_VERSION = 1,

View File

@@ -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;