From 452bcc68a4c5fecce2ca6ad5c9b60beca9b0214f Mon Sep 17 00:00:00 2001 From: cpq Date: Tue, 9 Mar 2021 11:29:53 +0000 Subject: [PATCH] Add mg_mqtt_next_unsub() signature --- docs/README.md | 35 +++++++++++++++++++++++++++++++++++ mongoose.h | 2 ++ src/mqtt.h | 2 ++ 3 files changed, 39 insertions(+) diff --git a/docs/README.md b/docs/README.md index d6bc09bf..c175e401 100644 --- a/docs/README.md +++ b/docs/README.md @@ -948,6 +948,41 @@ void mg_mqtt_sub(struct mg_connection *, struct mg_str *topic); Subscribe to topic `topic`. +### mg\_mqtt\_next\_sub() + +```c +int mg_mqtt_next_sub(struct mg_mqtt_message *msg, struct mg_str *topic, + uint8_t *qos, int pos); +``` + +Traverse list of subscribed topics. +Used to implement MQTT server when `MQTT_CMD_SUBSCRIBE` is received. +Return next position. Initial position `pos` should be 4. Example: + +```c +if (ev == MG_EV_MQTT_CMD) { + struct mg_mqtt_message *mm = (struct mg_mqtt_message *) ev_data; + if (mm->cmd == MQTT_CMD_SUBSCRIBE) { + int pos = 4; + uint8_t qos; + struct mg_str topic; + while ((pos = mg_mqtt_next_sub(mm, &topic, &qos, pos)) > 0) { + LOG(LL_INFO, ("SUB [%.*s]", c->id, (int) topic.len, topic.ptr)); + } + } +} +``` + +### mg\_mqtt\_next\_unsub() + +```c +int mg_mqtt_next_unsub(struct mg_mqtt_message *msg, struct mg_str *topic, + int pos); +``` + +Same as `mg_mqtt_next_sub()`, but for unsubscribed topics. The difference +is that there is no QoS in unsubscribe request. + ## TLS diff --git a/mongoose.h b/mongoose.h index 75c119f4..4aaf433d 100644 --- a/mongoose.h +++ b/mongoose.h @@ -827,6 +827,8 @@ void mg_mqtt_send_header(struct mg_connection *, uint8_t cmd, uint8_t flags, uint32_t len); int mg_mqtt_next_sub(struct mg_mqtt_message *msg, struct mg_str *topic, uint8_t *qos, int pos); +int mg_mqtt_next_unsub(struct mg_mqtt_message *msg, struct mg_str *topic, + int pos); void mg_mqtt_ping(struct mg_connection *); void mg_mqtt_pong(struct mg_connection *); void mg_mqtt_disconnect(struct mg_connection *); diff --git a/src/mqtt.h b/src/mqtt.h index 00ec6213..ede64c60 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -55,6 +55,8 @@ void mg_mqtt_send_header(struct mg_connection *, uint8_t cmd, uint8_t flags, uint32_t len); int mg_mqtt_next_sub(struct mg_mqtt_message *msg, struct mg_str *topic, uint8_t *qos, int pos); +int mg_mqtt_next_unsub(struct mg_mqtt_message *msg, struct mg_str *topic, + int pos); void mg_mqtt_ping(struct mg_connection *); void mg_mqtt_pong(struct mg_connection *); void mg_mqtt_disconnect(struct mg_connection *);