From d07d9418670f97fe06409828db61e60a7a25dc69 Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Fri, 18 Dec 2020 09:36:12 +0100 Subject: [PATCH 1/3] net/mqttsn: add flag definition for QoS -1 --- sys/include/net/mqttsn.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/include/net/mqttsn.h b/sys/include/net/mqttsn.h index 5cc48e5172..ccc046c5ed 100644 --- a/sys/include/net/mqttsn.h +++ b/sys/include/net/mqttsn.h @@ -50,6 +50,7 @@ enum { MQTTSN_QOS_MASK = 0x60, /**< QoS level mask */ MQTTSN_QOS_2 = 0x40, /**< QoS level 2 */ MQTTSN_QOS_1 = 0x20, /**< QoS level 1 */ + MQTTSN_QOS_NEG1 = 0x60, /**< QoS level -1 (negative 1) */ MQTTSN_QOS_0 = 0x00, /**< QoS level 0 */ MQTTSN_RETAIN = 0x10, /**< retain flag */ MQTTSN_WILL = 0x08, /**< will flag, used during CONNECT */ From f8ceccbca4e659682eefbe57cdb323e2cea7e433 Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Fri, 18 Dec 2020 09:36:54 +0100 Subject: [PATCH 2/3] net/asymcute: add doc that QoS -1 is not supported --- sys/include/net/asymcute.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/include/net/asymcute.h b/sys/include/net/asymcute.h index 748fddd296..75d4ded323 100644 --- a/sys/include/net/asymcute.h +++ b/sys/include/net/asymcute.h @@ -30,6 +30,7 @@ * - Gateway discovery process not implemented * - Last will feature not implemented * - No support for QoS level 2 + * - No support for QoS level -1 * - No support for wildcard characters in topic names when subscribing * - Actual granted QoS level on subscription is ignored * From 5ff526f92808bb2a434da0a5d3f4dda2ec2facf4 Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Wed, 16 Dec 2020 23:33:05 +0100 Subject: [PATCH 3/3] net/asymcute: fix msgId when publishing QOS0 --- sys/net/application_layer/asymcute/asymcute.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sys/net/application_layer/asymcute/asymcute.c b/sys/net/application_layer/asymcute/asymcute.c index 122e3837fc..440fea119b 100644 --- a/sys/net/application_layer/asymcute/asymcute.c +++ b/sys/net/application_layer/asymcute/asymcute.c @@ -879,8 +879,14 @@ int asymcute_publish(asymcute_con_t *con, asymcute_req_t *req, goto end; } - /* get message id */ - req->msg_id = _msg_id_next(con); + /* set MsgId only for QoS 1 and 2, else it must be set to 0 */ + if (((flags & MQTTSN_QOS_MASK) == MQTTSN_QOS_1) || + ((flags & MQTTSN_QOS_MASK) == MQTTSN_QOS_2)) { + req->msg_id = _msg_id_next(con); + } + else { + req->msg_id = 0; + } /* assemble message */ size_t pos = _len_set(req->data, data_len + 6);