Skip to content

Commit 29485e7

Browse files
authored
Return disconnect reason to user (#245)
1 parent 16e5ede commit 29485e7

File tree

3 files changed

+8
-19
lines changed

3 files changed

+8
-19
lines changed

src/AsyncMqttClient.cpp

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
AsyncMqttClient::AsyncMqttClient()
44
: _connected(false)
5-
, _connectPacketNotEnoughSpace(false)
65
, _disconnectOnPoll(false)
7-
, _tlsBadFingerprint(false)
6+
, _disconnectReason(AsyncMqttClientDisconnectReason::TCP_DISCONNECTED)
87
, _lastClientActivity(0)
98
, _lastServerActivity(0)
109
, _lastPingRequestTime(0)
@@ -159,8 +158,7 @@ void AsyncMqttClient::_clear() {
159158
_lastPingRequestTime = 0;
160159
_connected = false;
161160
_disconnectOnPoll = false;
162-
_connectPacketNotEnoughSpace = false;
163-
_tlsBadFingerprint = false;
161+
_disconnectReason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED; // reset any previous
164162
_freeCurrentParsedPacket();
165163

166164
_pendingPubRels.clear();
@@ -190,7 +188,7 @@ void AsyncMqttClient::_onConnect(AsyncClient* client) {
190188
}
191189

192190
if (!sslFoundFingerprint) {
193-
_tlsBadFingerprint = true;
191+
_disconnectReason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT;
194192
_client.close(true);
195193
return;
196194
}
@@ -304,7 +302,7 @@ void AsyncMqttClient::_onConnect(AsyncClient* client) {
304302

305303
SEMAPHORE_TAKE();
306304
if (_client.space() < neededSpace) {
307-
_connectPacketNotEnoughSpace = true;
305+
_disconnectReason = AsyncMqttClientDisconnectReason::ESP8266_NOT_ENOUGH_SPACE;
308306
_client.close(true);
309307
SEMAPHORE_GIVE();
310308
return;
@@ -354,16 +352,7 @@ void AsyncMqttClient::_onConnect(AsyncClient* client) {
354352

355353
void AsyncMqttClient::_onDisconnect(AsyncClient* client) {
356354
(void)client;
357-
AsyncMqttClientDisconnectReason reason;
358-
359-
if (_connectPacketNotEnoughSpace) {
360-
reason = AsyncMqttClientDisconnectReason::ESP8266_NOT_ENOUGH_SPACE;
361-
} else if (_tlsBadFingerprint) {
362-
reason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT;
363-
} else {
364-
reason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED;
365-
}
366-
355+
AsyncMqttClientDisconnectReason reason = _disconnectReason;
367356
_clear();
368357

369358
for (auto callback : _onDisconnectUserCallbacks) callback(reason);
@@ -501,6 +490,7 @@ void AsyncMqttClient::_onConnAck(bool sessionPresent, uint8_t connectReturnCode)
501490
for (auto callback : _onConnectUserCallbacks) callback(sessionPresent);
502491
} else {
503492
// Callbacks are handled by the ondisconnect function which is called from the AsyncTcp lib
493+
_disconnectReason = static_cast<AsyncMqttClientDisconnectReason>(connectReturnCode);
504494
}
505495
}
506496

src/AsyncMqttClient.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,8 @@ class AsyncMqttClient {
8484
AsyncClient _client;
8585

8686
bool _connected;
87-
bool _connectPacketNotEnoughSpace;
8887
bool _disconnectOnPoll;
89-
bool _tlsBadFingerprint;
88+
AsyncMqttClientDisconnectReason _disconnectReason;
9089
uint32_t _lastClientActivity;
9190
uint32_t _lastServerActivity;
9291
uint32_t _lastPingRequestTime;

src/AsyncMqttClient/DisconnectReasons.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
enum class AsyncMqttClientDisconnectReason : int8_t {
3+
enum class AsyncMqttClientDisconnectReason : uint8_t {
44
TCP_DISCONNECTED = 0,
55

66
MQTT_UNACCEPTABLE_PROTOCOL_VERSION = 1,

0 commit comments

Comments
 (0)