diff --git a/docs/README.md b/docs/README.md index fe8de018..4fdecc63 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1622,8 +1622,8 @@ void fn(struct mg_connection *c, int ev, void *evd, void *fnd) { ### mg\_mqtt\_pub() ```c -void mg_mqtt_pub(struct mg_connection *c, struct mg_str *topic, - struct mg_str *data, int qos, bool retain); +void mg_mqtt_pub(struct mg_connection *c, struct mg_str topic, + struct mg_str data, int qos, bool retain); ``` Publish message. @@ -1640,15 +1640,13 @@ Return value: None Usage example: ```c -struct mg_str topic = mg_str("topic"); -struct mg_str data = mg_str("data"); -mg_mqtt_pub(c, &topic, &data, 1, false); +mg_mqtt_pub(c, mg_str("topic"), mg_str("my data"), 1, false); ``` ### mg\_mqtt\_sub() ```c -void mg_mqtt_sub(struct mg_connection *c, struct mg_str *topic, int qos); +void mg_mqtt_sub(struct mg_connection *c, struct mg_str topic, int qos); ``` Subscribe to topic. @@ -1661,8 +1659,7 @@ Parameters: Return value: none ```c -struct mg_str topic = mg_str("topic"); -mg_mqtt_sub(c, &topic, 1); +mg_mqtt_sub(c, mg_str("my/topic"), 1); ``` ### mg\_mqtt\_next\_sub() diff --git a/examples/mqtt-client-aws-iot/main.c b/examples/mqtt-client-aws-iot/main.c index d10b751c..c311005f 100644 --- a/examples/mqtt-client-aws-iot/main.c +++ b/examples/mqtt-client-aws-iot/main.c @@ -54,7 +54,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { struct mg_str topic = mg_str(s_rx_topic); LOG(LL_INFO, ("Connected to %s", s_url)); LOG(LL_INFO, ("Subscribing to %s", s_rx_topic)); - mg_mqtt_sub(c, &topic, s_qos); + mg_mqtt_sub(c, topic, s_qos); c->label[0] = 'X'; // Set a label that we're logged in } else if (ev == MG_EV_MQTT_MSG) { // When we receive MQTT message, print it @@ -67,7 +67,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { if (now_second != prev_second) { struct mg_str topic = mg_str(s_tx_topic), data = mg_str("{\"a\":123}"); LOG(LL_INFO, ("Publishing to %s", s_tx_topic)); - mg_mqtt_pub(c, &topic, &data, s_qos, false); + mg_mqtt_pub(c, topic, data, s_qos, false); prev_second = now_second; } } diff --git a/examples/mqtt-client/main.c b/examples/mqtt-client/main.c index a21468d0..acd429f9 100644 --- a/examples/mqtt-client/main.c +++ b/examples/mqtt-client/main.c @@ -43,10 +43,10 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { struct mg_str subt = mg_str(s_sub_topic); struct mg_str pubt = mg_str(s_pub_topic), data = mg_str("hello"); LOG(LL_INFO, ("CONNECTED to %s", s_url)); - mg_mqtt_sub(c, &subt, s_qos); + mg_mqtt_sub(c, subt, s_qos); LOG(LL_INFO, ("SUBSCRIBED to %.*s", (int) subt.len, subt.ptr)); - mg_mqtt_pub(c, &pubt, &data, s_qos, false); + mg_mqtt_pub(c, pubt, data, s_qos, false); LOG(LL_INFO, ("PUBSLISHED %.*s -> %.*s", (int) data.len, data.ptr, (int) pubt.len, pubt.ptr)); } else if (ev == MG_EV_MQTT_MSG) { diff --git a/examples/mqtt-over-ws-client/main.c b/examples/mqtt-over-ws-client/main.c index 419f29e2..26e98dd1 100644 --- a/examples/mqtt-over-ws-client/main.c +++ b/examples/mqtt-over-ws-client/main.c @@ -46,10 +46,10 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { struct mg_str topic = mg_str(s_topic), data = mg_str("hello"); size_t len = c->send.len; LOG(LL_INFO, ("CONNECTED to %s", s_url)); - mg_mqtt_sub(c, &topic, 1); + mg_mqtt_sub(c, topic, 1); mg_ws_wrap(c, len, WEBSOCKET_OP_BINARY); LOG(LL_INFO, ("SUBSCRIBED to %.*s", (int) topic.len, topic.ptr)); - mg_mqtt_pub(c, &topic, &data, 1, false); + mg_mqtt_pub(c, topic, data, 1, false); LOG(LL_INFO, ("PUBSLISHED %.*s -> %.*s", (int) data.len, data.ptr, (int) topic.len, topic.ptr)); len = mg_ws_wrap(c, c->send.len - len, WEBSOCKET_OP_BINARY); diff --git a/mongoose.c b/mongoose.c index 64f50aec..db0f1dfd 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2364,33 +2364,33 @@ void mg_mqtt_login(struct mg_connection *c, struct mg_mqtt_opts *opts) { } } -void mg_mqtt_pub(struct mg_connection *c, struct mg_str *topic, - struct mg_str *data, int qos, bool retain) { +void mg_mqtt_pub(struct mg_connection *c, struct mg_str topic, + struct mg_str data, int qos, bool retain) { uint8_t flags = (uint8_t) (((qos & 3) << 1) | (retain ? 1 : 0)); - uint32_t total_len = 2 + (uint32_t) topic->len + (uint32_t) data->len; - LOG(LL_DEBUG, ("%lu [%.*s] -> [%.*s]", c->id, (int) topic->len, - (char *) topic->ptr, (int) data->len, (char *) data->ptr)); + uint32_t total_len = 2 + (uint32_t) topic.len + (uint32_t) data.len; + LOG(LL_DEBUG, ("%lu [%.*s] -> [%.*s]", c->id, (int) topic.len, + (char *) topic.ptr, (int) data.len, (char *) data.ptr)); if (qos > 0) total_len += 2; mg_mqtt_send_header(c, MQTT_CMD_PUBLISH, flags, total_len); - mg_send_u16(c, mg_htons((uint16_t) topic->len)); - mg_send(c, topic->ptr, topic->len); + mg_send_u16(c, mg_htons((uint16_t) topic.len)); + mg_send(c, topic.ptr, topic.len); if (qos > 0) { static uint16_t s_id; if (++s_id == 0) s_id++; mg_send_u16(c, mg_htons(s_id)); } - mg_send(c, data->ptr, data->len); + mg_send(c, data.ptr, data.len); } -void mg_mqtt_sub(struct mg_connection *c, struct mg_str *topic, int qos) { +void mg_mqtt_sub(struct mg_connection *c, struct mg_str topic, int qos) { static uint16_t s_id; uint8_t qos_ = qos & 3; - uint32_t total_len = 2 + (uint32_t) topic->len + 2 + 1; + uint32_t total_len = 2 + (uint32_t) topic.len + 2 + 1; mg_mqtt_send_header(c, MQTT_CMD_SUBSCRIBE, 2, total_len); if (++s_id == 0) ++s_id; mg_send_u16(c, mg_htons(s_id)); - mg_send_u16(c, mg_htons((uint16_t) topic->len)); - mg_send(c, topic->ptr, topic->len); + mg_send_u16(c, mg_htons((uint16_t) topic.len)); + mg_send(c, topic.ptr, topic.len); mg_send(c, &qos_, sizeof(qos_)); } diff --git a/mongoose.h b/mongoose.h index f0abf996..af412d1b 100644 --- a/mongoose.h +++ b/mongoose.h @@ -1084,9 +1084,9 @@ struct mg_connection *mg_mqtt_connect(struct mg_mgr *, const char *url, struct mg_connection *mg_mqtt_listen(struct mg_mgr *mgr, const char *url, mg_event_handler_t fn, void *fn_data); void mg_mqtt_login(struct mg_connection *c, struct mg_mqtt_opts *opts); -void mg_mqtt_pub(struct mg_connection *c, struct mg_str *topic, - struct mg_str *data, int qos, bool retain); -void mg_mqtt_sub(struct mg_connection *, struct mg_str *topic, int qos); +void mg_mqtt_pub(struct mg_connection *c, struct mg_str topic, + struct mg_str data, int qos, bool retain); +void mg_mqtt_sub(struct mg_connection *, struct mg_str topic, int qos); int mg_mqtt_parse(const uint8_t *buf, size_t len, struct mg_mqtt_message *m); void mg_mqtt_send_header(struct mg_connection *, uint8_t cmd, uint8_t flags, uint32_t len); diff --git a/src/mqtt.c b/src/mqtt.c index a79c4948..22469c38 100644 --- a/src/mqtt.c +++ b/src/mqtt.c @@ -84,33 +84,33 @@ void mg_mqtt_login(struct mg_connection *c, struct mg_mqtt_opts *opts) { } } -void mg_mqtt_pub(struct mg_connection *c, struct mg_str *topic, - struct mg_str *data, int qos, bool retain) { +void mg_mqtt_pub(struct mg_connection *c, struct mg_str topic, + struct mg_str data, int qos, bool retain) { uint8_t flags = (uint8_t) (((qos & 3) << 1) | (retain ? 1 : 0)); - uint32_t total_len = 2 + (uint32_t) topic->len + (uint32_t) data->len; - LOG(LL_DEBUG, ("%lu [%.*s] -> [%.*s]", c->id, (int) topic->len, - (char *) topic->ptr, (int) data->len, (char *) data->ptr)); + uint32_t total_len = 2 + (uint32_t) topic.len + (uint32_t) data.len; + LOG(LL_DEBUG, ("%lu [%.*s] -> [%.*s]", c->id, (int) topic.len, + (char *) topic.ptr, (int) data.len, (char *) data.ptr)); if (qos > 0) total_len += 2; mg_mqtt_send_header(c, MQTT_CMD_PUBLISH, flags, total_len); - mg_send_u16(c, mg_htons((uint16_t) topic->len)); - mg_send(c, topic->ptr, topic->len); + mg_send_u16(c, mg_htons((uint16_t) topic.len)); + mg_send(c, topic.ptr, topic.len); if (qos > 0) { static uint16_t s_id; if (++s_id == 0) s_id++; mg_send_u16(c, mg_htons(s_id)); } - mg_send(c, data->ptr, data->len); + mg_send(c, data.ptr, data.len); } -void mg_mqtt_sub(struct mg_connection *c, struct mg_str *topic, int qos) { +void mg_mqtt_sub(struct mg_connection *c, struct mg_str topic, int qos) { static uint16_t s_id; uint8_t qos_ = qos & 3; - uint32_t total_len = 2 + (uint32_t) topic->len + 2 + 1; + uint32_t total_len = 2 + (uint32_t) topic.len + 2 + 1; mg_mqtt_send_header(c, MQTT_CMD_SUBSCRIBE, 2, total_len); if (++s_id == 0) ++s_id; mg_send_u16(c, mg_htons(s_id)); - mg_send_u16(c, mg_htons((uint16_t) topic->len)); - mg_send(c, topic->ptr, topic->len); + mg_send_u16(c, mg_htons((uint16_t) topic.len)); + mg_send(c, topic.ptr, topic.len); mg_send(c, &qos_, sizeof(qos_)); } diff --git a/src/mqtt.h b/src/mqtt.h index c78079ed..9b8ecc72 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -46,9 +46,9 @@ struct mg_connection *mg_mqtt_connect(struct mg_mgr *, const char *url, struct mg_connection *mg_mqtt_listen(struct mg_mgr *mgr, const char *url, mg_event_handler_t fn, void *fn_data); void mg_mqtt_login(struct mg_connection *c, struct mg_mqtt_opts *opts); -void mg_mqtt_pub(struct mg_connection *c, struct mg_str *topic, - struct mg_str *data, int qos, bool retain); -void mg_mqtt_sub(struct mg_connection *, struct mg_str *topic, int qos); +void mg_mqtt_pub(struct mg_connection *c, struct mg_str topic, + struct mg_str data, int qos, bool retain); +void mg_mqtt_sub(struct mg_connection *, struct mg_str topic, int qos); int mg_mqtt_parse(const uint8_t *buf, size_t len, struct mg_mqtt_message *m); void mg_mqtt_send_header(struct mg_connection *, uint8_t cmd, uint8_t flags, uint32_t len); diff --git a/test/unit_test.c b/test/unit_test.c index 3c5a9f68..482a81ce 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -324,8 +324,8 @@ static void test_mqtt(void) { c = mg_mqtt_connect(&mgr, url, NULL, mqtt_cb, buf); for (i = 0; i < 200 && buf[0] == 0; i++) mg_mgr_poll(&mgr, 10); ASSERT(buf[0] == 'X'); - mg_mqtt_sub(c, &topic, 1); - mg_mqtt_pub(c, &topic, &data, 1, false); + mg_mqtt_sub(c, topic, 1); + mg_mqtt_pub(c, topic, data, 1, false); for (i = 0; i < 300 && buf[1] == 0; i++) mg_mgr_poll(&mgr, 10); // LOG(LL_INFO, ("[%s]", buf)); ASSERT(strcmp(buf, "Xx/f12/hi") == 0); @@ -343,8 +343,8 @@ static void test_mqtt(void) { c = mg_mqtt_connect(&mgr, url, &opts, mqtt_cb, buf); for (i = 0; i < 300 && buf[0] == 0; i++) mg_mgr_poll(&mgr, 10); ASSERT(buf[0] == 'X'); - mg_mqtt_sub(c, &topic, 1); - mg_mqtt_pub(c, &topic, &data, 1, false); + mg_mqtt_sub(c, topic, 1); + mg_mqtt_pub(c, topic, data, 1, false); for (i = 0; i < 500 && buf[1] == 0; i++) mg_mgr_poll(&mgr, 10); ASSERT(strcmp(buf, "Xx/f12/hi") == 0);