From 6b00baa2fb1690c096c2e2c8882265f6d35cd24f Mon Sep 17 00:00:00 2001 From: CIPop Date: Tue, 25 Jul 2023 22:09:21 +0000 Subject: [PATCH] WIP: v3 cleansession -> v5 cleanstart --- MQTTClient-C/src/MQTTClient.c | 1 + MQTTClient-C/src/V5/MQTTV5Client.h | 4 ++-- MQTTPacket/src/MQTTConnect.h | 8 ++++++-- MQTTPacket/src/MQTTConnectClient.c | 5 +++++ MQTTPacket/src/MQTTConnectServer.c | 5 +++++ MQTTPacket/src/MQTTFormat.c | 8 +++++++- 6 files changed, 26 insertions(+), 5 deletions(-) diff --git a/MQTTClient-C/src/MQTTClient.c b/MQTTClient-C/src/MQTTClient.c index 20151d73..78dd6362 100755 --- a/MQTTClient-C/src/MQTTClient.c +++ b/MQTTClient-C/src/MQTTClient.c @@ -345,6 +345,7 @@ int cycle(MQTTClient* c, Timer* timer) #if defined(MQTTV5) case DISCONNECT: // TODO: not implemented. + break; #endif } diff --git a/MQTTClient-C/src/V5/MQTTV5Client.h b/MQTTClient-C/src/V5/MQTTV5Client.h index 659f93c4..5118f85d 100755 --- a/MQTTClient-C/src/V5/MQTTV5Client.h +++ b/MQTTClient-C/src/V5/MQTTV5Client.h @@ -42,7 +42,7 @@ DLLExport void MQTTV5ClientInit(MQTTClient* client, Network* network, unsigned i * @param options - connect options * @return success code */ -DLLExport int MQTTV5ConnectWithResults(MQTTClient* client, MQTTV5Packet_connectData* options, +DLLExport int MQTTV5ConnectWithResults(MQTTClient* client, MQTTPacket_connectData* options, MQTTConnackData* data); /** MQTT Connect - send an MQTT connect packet down the network and wait for a Connack @@ -50,7 +50,7 @@ DLLExport int MQTTV5ConnectWithResults(MQTTClient* client, MQTTV5Packet_connectD * @param options - connect options * @return success code */ -DLLExport int MQTTV5Connect(MQTTClient* client, MQTTV5Packet_connectData* options); +DLLExport int MQTTV5Connect(MQTTClient* client, MQTTPacket_connectData* options); /** MQTT Publish - send an MQTT publish packet and wait for all acks to complete for all QoSs * @param client - the client object to use diff --git a/MQTTPacket/src/MQTTConnect.h b/MQTTPacket/src/MQTTConnect.h index 6ff78695..ed23fd1b 100644 --- a/MQTTPacket/src/MQTTConnect.h +++ b/MQTTPacket/src/MQTTConnect.h @@ -51,14 +51,14 @@ typedef union unsigned int willRetain : 1; /**< will retain setting */ unsigned int willQoS : 2; /**< will QoS value */ unsigned int will : 1; /**< will flag */ - unsigned int cleansession : 1; /**< clean session flag */ + unsigned int cleansession : 1; /**< V3 clean session or V5 clean start flag */ unsigned int : 1; /**< unused */ } bits; #else struct { unsigned int : 1; /**< unused */ - unsigned int cleansession : 1; /**< cleansession flag */ + unsigned int cleansession : 1; /**< V3 clean session or V5 cleanstart flag */ unsigned int will : 1; /**< will flag */ unsigned int willQoS : 2; /**< will QoS value */ unsigned int willRetain : 1; /**< will retain setting */ @@ -110,7 +110,11 @@ typedef struct unsigned char MQTTVersion; MQTTString clientID; unsigned short keepAliveInterval; +#if defined(MQTTV5) + unsigned char cleanstart; +#else unsigned char cleansession; +#endif unsigned char willFlag; MQTTPacket_willOptions will; MQTTString username; diff --git a/MQTTPacket/src/MQTTConnectClient.c b/MQTTPacket/src/MQTTConnectClient.c index 0a016c75..d46eaf8d 100644 --- a/MQTTPacket/src/MQTTConnectClient.c +++ b/MQTTPacket/src/MQTTConnectClient.c @@ -118,7 +118,12 @@ int MQTTSerialize_connect(unsigned char* buf, int32_t buflen, MQTTPacket_connect writeChar(&ptr, (char)options->MQTTVersion); flags.all = 0; +#if defined(MQTTV5) + flags.bits.cleansession = options->cleanstart; +#else flags.bits.cleansession = options->cleansession; +#endif + flags.bits.will = (options->willFlag) ? 1 : 0; if (flags.bits.will) { diff --git a/MQTTPacket/src/MQTTConnectServer.c b/MQTTPacket/src/MQTTConnectServer.c index 01b0008b..842e94fa 100644 --- a/MQTTPacket/src/MQTTConnectServer.c +++ b/MQTTPacket/src/MQTTConnectServer.c @@ -106,7 +106,12 @@ int32_t MQTTDeserialize_connect(MQTTPacket_connectData* data, unsigned char* buf if (MQTTPacket_checkVersion(&Protocol, data->MQTTVersion)) { flags.all = readChar(&curdata); +#if defined(MQTTV5) + data->cleanstart = flags.bits.cleansession; +#else data->cleansession = flags.bits.cleansession; +#endif + data->keepAliveInterval = readInt(&curdata); #if defined(MQTTV5) if (data->MQTTVersion == 5) diff --git a/MQTTPacket/src/MQTTFormat.c b/MQTTPacket/src/MQTTFormat.c index b9451785..f4f2d779 100644 --- a/MQTTPacket/src/MQTTFormat.c +++ b/MQTTPacket/src/MQTTFormat.c @@ -41,7 +41,13 @@ int MQTTStringFormat_connect(char* strbuf, int strbuflen, MQTTPacket_connectData strindex = snprintf(strbuf, strbuflen, "CONNECT MQTT version %d, client id %.*s, clean session %d, keep alive %d", (int)data->MQTTVersion, (int) data->clientID.lenstring.len, data->clientID.lenstring.data, - (int)data->cleansession, data->keepAliveInterval); +#if defined(MQTTV5) + (int)data->cleanstart, +#else + (int)data->cleansession, +#endif + data->keepAliveInterval); + if (data->willFlag) strindex += snprintf(&strbuf[strindex], strbuflen - strindex, ", will QoS %d, will retain %d, will topic %.*s, will message %.*s",