3
3
AsyncMqttClient::AsyncMqttClient ()
4
4
: _connected(false )
5
5
, _connectPacketNotEnoughSpace(false )
6
- , _disconnectFlagged (false )
6
+ , _disconnectOnPoll (false )
7
7
, _tlsBadFingerprint(false )
8
8
, _lastClientActivity(0 )
9
9
, _lastServerActivity(0 )
@@ -37,10 +37,10 @@ AsyncMqttClient::AsyncMqttClient()
37
37
_client.onPoll ([](void * obj, AsyncClient* c) { (static_cast <AsyncMqttClient*>(obj))->_onPoll (c); }, this );
38
38
39
39
#ifdef ESP32
40
- sprintf (_generatedClientId, " esp32%06x " , ESP.getEfuseMac ());
40
+ sprintf (_generatedClientId, " esp32-%06llx " , ESP.getEfuseMac ());
41
41
_xSemaphore = xSemaphoreCreateMutex ();
42
42
#elif defined(ESP8266)
43
- sprintf (_generatedClientId, " esp8266%06x" , ESP.getChipId ());
43
+ sprintf (_generatedClientId, " esp8266- %06x" , ESP.getChipId ());
44
44
#endif
45
45
_clientId = _generatedClientId;
46
46
@@ -158,7 +158,7 @@ void AsyncMqttClient::_freeCurrentParsedPacket() {
158
158
void AsyncMqttClient::_clear () {
159
159
_lastPingRequestTime = 0 ;
160
160
_connected = false ;
161
- _disconnectFlagged = false ;
161
+ _disconnectOnPoll = false ;
162
162
_connectPacketNotEnoughSpace = false ;
163
163
_tlsBadFingerprint = false ;
164
164
_freeCurrentParsedPacket ();
@@ -311,12 +311,26 @@ void AsyncMqttClient::_onConnect(AsyncClient* client) {
311
311
}
312
312
313
313
_client.add (fixedHeader, 1 + remainingLengthLength);
314
- _client.add (protocolNameLengthBytes, 2 );
315
- _client.add (" MQTT" , protocolNameLength);
316
- _client.add (protocolLevel, 1 );
317
- _client.add (connectFlags, 1 );
318
- _client.add (keepAliveBytes, 2 );
319
- _client.add (clientIdLengthBytes, 2 );
314
+
315
+ // Using a sendbuffer to fix bug setwill on SSL not working
316
+ char sendbuffer[12 ];
317
+ sendbuffer[0 ] = protocolNameLengthBytes[0 ];
318
+ sendbuffer[1 ] = protocolNameLengthBytes[1 ];
319
+
320
+ sendbuffer[2 ] = ' M' ;
321
+ sendbuffer[3 ] = ' Q' ;
322
+ sendbuffer[4 ] = ' T' ;
323
+ sendbuffer[5 ] = ' T' ;
324
+
325
+ sendbuffer[6 ] = protocolLevel[0 ];
326
+ sendbuffer[7 ] = connectFlags[0 ];
327
+ sendbuffer[8 ] = keepAliveBytes[0 ];
328
+ sendbuffer[9 ] = keepAliveBytes[1 ];
329
+ sendbuffer[10 ] = clientIdLengthBytes[0 ];
330
+ sendbuffer[11 ] = clientIdLengthBytes[1 ];
331
+
332
+ _client.add (sendbuffer, 12 );
333
+
320
334
_client.add (_clientId, clientIdLength);
321
335
if (_willTopic != nullptr ) {
322
336
_client.add (willTopicLengthBytes, 2 );
@@ -340,19 +354,19 @@ void AsyncMqttClient::_onConnect(AsyncClient* client) {
340
354
341
355
void AsyncMqttClient::_onDisconnect (AsyncClient* client) {
342
356
(void )client;
343
- if (!_disconnectFlagged) {
344
- AsyncMqttClientDisconnectReason reason;
357
+ AsyncMqttClientDisconnectReason reason;
345
358
346
- if (_connectPacketNotEnoughSpace) {
347
- reason = AsyncMqttClientDisconnectReason::ESP8266_NOT_ENOUGH_SPACE;
348
- } else if (_tlsBadFingerprint) {
349
- reason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT;
350
- } else {
351
- reason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED;
352
- }
353
- for (auto callback : _onDisconnectUserCallbacks) callback (reason);
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;
354
365
}
366
+
355
367
_clear ();
368
+
369
+ for (auto callback : _onDisconnectUserCallbacks) callback (reason);
356
370
}
357
371
358
372
void AsyncMqttClient::_onError (AsyncClient* client, int8_t error) {
@@ -460,13 +474,14 @@ void AsyncMqttClient::_onPoll(AsyncClient* client) {
460
474
_sendPing ();
461
475
}
462
476
477
+
463
478
// handle to send ack packets
464
479
465
480
_sendAcks ();
466
481
467
482
// handle disconnect
468
483
469
- if (_disconnectFlagged ) {
484
+ if (_disconnectOnPoll ) {
470
485
_sendDisconnect ();
471
486
}
472
487
}
@@ -485,8 +500,7 @@ void AsyncMqttClient::_onConnAck(bool sessionPresent, uint8_t connectReturnCode)
485
500
_connected = true ;
486
501
for (auto callback : _onConnectUserCallbacks) callback (sessionPresent);
487
502
} else {
488
- for (auto callback : _onDisconnectUserCallbacks) callback (static_cast <AsyncMqttClientDisconnectReason>(connectReturnCode));
489
- _disconnectFlagged = true ;
503
+ // Callbacks are handled by the ondisconnect function which is called from the AsyncTcp lib
490
504
}
491
505
}
492
506
@@ -672,7 +686,7 @@ bool AsyncMqttClient::_sendDisconnect() {
672
686
_client.send ();
673
687
_client.close (true );
674
688
675
- _disconnectFlagged = false ;
689
+ _disconnectOnPoll = false ;
676
690
677
691
SEMAPHORE_GIVE ();
678
692
return true ;
@@ -715,8 +729,8 @@ void AsyncMqttClient::disconnect(bool force) {
715
729
if (force) {
716
730
_client.close (true );
717
731
} else {
718
- _disconnectFlagged = true ;
719
732
_sendDisconnect ();
733
+ _disconnectOnPoll = false ;
720
734
}
721
735
}
722
736
@@ -875,3 +889,7 @@ uint16_t AsyncMqttClient::publish(const char* topic, uint8_t qos, bool retain, c
875
889
return 1 ;
876
890
}
877
891
}
892
+
893
+ const char * AsyncMqttClient::getClientId () {
894
+ return _clientId;
895
+ }
0 commit comments