Skip to content

Commit

Permalink
Return disconnect reason to user (#245)
Browse files Browse the repository at this point in the history
  • Loading branch information
dudanov committed May 24, 2021
1 parent 16e5ede commit 29485e7
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 19 deletions.
22 changes: 6 additions & 16 deletions src/AsyncMqttClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@

AsyncMqttClient::AsyncMqttClient()
: _connected(false)
, _connectPacketNotEnoughSpace(false)
, _disconnectOnPoll(false)
, _tlsBadFingerprint(false)
, _disconnectReason(AsyncMqttClientDisconnectReason::TCP_DISCONNECTED)
, _lastClientActivity(0)
, _lastServerActivity(0)
, _lastPingRequestTime(0)
Expand Down Expand Up @@ -159,8 +158,7 @@ void AsyncMqttClient::_clear() {
_lastPingRequestTime = 0;
_connected = false;
_disconnectOnPoll = false;
_connectPacketNotEnoughSpace = false;
_tlsBadFingerprint = false;
_disconnectReason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED; // reset any previous
_freeCurrentParsedPacket();

_pendingPubRels.clear();
Expand Down Expand Up @@ -190,7 +188,7 @@ void AsyncMqttClient::_onConnect(AsyncClient* client) {
}

if (!sslFoundFingerprint) {
_tlsBadFingerprint = true;
_disconnectReason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT;
_client.close(true);
return;
}
Expand Down Expand Up @@ -304,7 +302,7 @@ void AsyncMqttClient::_onConnect(AsyncClient* client) {

SEMAPHORE_TAKE();
if (_client.space() < neededSpace) {
_connectPacketNotEnoughSpace = true;
_disconnectReason = AsyncMqttClientDisconnectReason::ESP8266_NOT_ENOUGH_SPACE;
_client.close(true);
SEMAPHORE_GIVE();
return;
Expand Down Expand Up @@ -354,16 +352,7 @@ void AsyncMqttClient::_onConnect(AsyncClient* client) {

void AsyncMqttClient::_onDisconnect(AsyncClient* client) {
(void)client;
AsyncMqttClientDisconnectReason reason;

if (_connectPacketNotEnoughSpace) {
reason = AsyncMqttClientDisconnectReason::ESP8266_NOT_ENOUGH_SPACE;
} else if (_tlsBadFingerprint) {
reason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT;
} else {
reason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED;
}

AsyncMqttClientDisconnectReason reason = _disconnectReason;
_clear();

for (auto callback : _onDisconnectUserCallbacks) callback(reason);
Expand Down Expand Up @@ -501,6 +490,7 @@ 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);
}
}

Expand Down
3 changes: 1 addition & 2 deletions src/AsyncMqttClient.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,8 @@ class AsyncMqttClient {
AsyncClient _client;

bool _connected;
bool _connectPacketNotEnoughSpace;
bool _disconnectOnPoll;
bool _tlsBadFingerprint;
AsyncMqttClientDisconnectReason _disconnectReason;
uint32_t _lastClientActivity;
uint32_t _lastServerActivity;
uint32_t _lastPingRequestTime;
Expand Down
2 changes: 1 addition & 1 deletion src/AsyncMqttClient/DisconnectReasons.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma once

enum class AsyncMqttClientDisconnectReason : int8_t {
enum class AsyncMqttClientDisconnectReason : uint8_t {
TCP_DISCONNECTED = 0,

MQTT_UNACCEPTABLE_PROTOCOL_VERSION = 1,
Expand Down

0 comments on commit 29485e7

Please sign in to comment.