From d4106b5cbd5c4c42c2741f4471a51ceb6116f310 Mon Sep 17 00:00:00 2001 From: Sergey Lyubka Date: Wed, 8 Jun 2022 19:51:03 +0100 Subject: [PATCH] Send puback for qos > 0 --- mongoose.c | 7 ++++++- src/mqtt.c | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/mongoose.c b/mongoose.c index c3cb7bf1..75ee5b89 100644 --- a/mongoose.c +++ b/mongoose.c @@ -1610,7 +1610,7 @@ static void listdir(struct mg_connection *c, struct mg_http_message *hm, MG_VERSION); n = mg_snprintf(tmp, sizeof(tmp), "%lu", (unsigned long) (c->send.len - off)); if (n > sizeof(tmp)) n = 0; - memcpy(c->send.buf + off - 10, tmp, n); // Set content length + memcpy(c->send.buf + off - 12, tmp, n); // Set content length } static void remove_double_dots(char *s) { @@ -3332,6 +3332,11 @@ static void mqtt_cb(struct mg_connection *c, int ev, void *ev_data, case MQTT_CMD_PUBLISH: { MG_DEBUG(("%lu [%.*s] -> [%.*s]", c->id, (int) mm.topic.len, mm.topic.ptr, (int) mm.data.len, mm.data.ptr)); + if (mm.qos > 0) { + uint16_t id = mg_htons(mm.id); + mg_mqtt_send_header(c, MQTT_CMD_PUBACK, 0, sizeof(id)); + mg_send(c, &id, sizeof(id)); + } mg_call(c, MG_EV_MQTT_MSG, &mm); break; } diff --git a/src/mqtt.c b/src/mqtt.c index 577f4da0..5d058c41 100644 --- a/src/mqtt.c +++ b/src/mqtt.c @@ -228,6 +228,11 @@ static void mqtt_cb(struct mg_connection *c, int ev, void *ev_data, case MQTT_CMD_PUBLISH: { MG_DEBUG(("%lu [%.*s] -> [%.*s]", c->id, (int) mm.topic.len, mm.topic.ptr, (int) mm.data.len, mm.data.ptr)); + if (mm.qos > 0) { + uint16_t id = mg_htons(mm.id); + mg_mqtt_send_header(c, MQTT_CMD_PUBACK, 0, sizeof(id)); + mg_send(c, &id, sizeof(id)); + } mg_call(c, MG_EV_MQTT_MSG, &mm); break; }