byte-encoded properties issue fixed

This commit is contained in:
Ubuntu authored and robert committed 2023-06-07 10:13:21 -04:00
1 parent c8f5f85635
commit a0dd3ecd68
3 files changed
+46 -21

No files matched your search

+19 -9
View File
@@ -1,8 +1,8 @@
#include "mqtt.h"
#include "arch.h"
#include "base64.h"
#include "event.h"
#include "log.h"
#include "mqtt.h"
#include "url.h"
#include "util.h"
@@ -134,9 +134,17 @@ static size_t get_properties_length(struct mg_mqtt_prop *props, size_t count) {
case MQTT_PROP_TYPE_VARIABLE_INT:
size += compute_variable_length_size((uint32_t) props[i].iv);
break;
case MQTT_PROP_TYPE_INT: size += (uint32_t) sizeof(uint32_t); break;
case MQTT_PROP_TYPE_SHORT: size += (uint32_t) sizeof(uint16_t); break;
default: return size; // cannot parse further down
case MQTT_PROP_TYPE_INT:
size += (uint32_t) sizeof(uint32_t);
break;
case MQTT_PROP_TYPE_SHORT:
size += (uint32_t) sizeof(uint16_t);
break;
case MQTT_PROP_TYPE_BYTE:
size += (uint32_t) sizeof(uint8_t);
break;
default:
return size; // cannot parse further down
}
}
@@ -240,7 +248,8 @@ size_t mg_mqtt_next_prop(struct mg_mqtt_message *msg, struct mg_mqtt_prop *prop,
prop->iv = decode_variable_length((char *) i, &bytes_consumed);
new_pos += bytes_consumed;
break;
default: new_pos = 0;
default:
new_pos = 0;
}
return new_pos;
@@ -412,7 +421,8 @@ int mg_mqtt_parse(const uint8_t *buf, size_t len, uint8_t version,
m->data.len = (size_t) (end - p);
break;
}
default: break;
default:
break;
}
return MQTT_OK;
}
@@ -447,7 +457,7 @@ static void mqtt_cb(struct mg_connection *c, int ev, void *ev_data,
if (mm.qos > 0) {
uint16_t id = mg_ntohs(mm.id);
uint32_t remaining_len = sizeof(id);
if (c->is_mqtt5) remaining_len += 2; // 3.4.2
if (c->is_mqtt5) remaining_len += 2; // 3.4.2
mg_mqtt_send_header(
c, mm.qos == 2 ? MQTT_CMD_PUBREC : MQTT_CMD_PUBACK, 0,
@@ -462,14 +472,14 @@ static void mqtt_cb(struct mg_connection *c, int ev, void *ev_data,
mg_call(c, MG_EV_MQTT_MSG, &mm); // let the app handle qos stuff
break;
}
case MQTT_CMD_PUBREC: { // MQTT5: 3.5.2-1 TODO(): variable header rc
case MQTT_CMD_PUBREC: { // MQTT5: 3.5.2-1 TODO(): variable header rc
uint16_t id = mg_ntohs(mm.id);
uint32_t remaining_len = sizeof(id); // MQTT5 3.6.2-1
mg_mqtt_send_header(c, MQTT_CMD_PUBREL, 2, remaining_len);
mg_send(c, &id, sizeof(id)); // MQTT5 3.6.1-1, flags = 2
break;
}
case MQTT_CMD_PUBREL: { // MQTT5: 3.6.2-1 TODO(): variable header rc
case MQTT_CMD_PUBREL: { // MQTT5: 3.6.2-1 TODO(): variable header rc
uint16_t id = mg_ntohs(mm.id);
uint32_t remaining_len = sizeof(id); // MQTT5 3.7.2-1
mg_mqtt_send_header(c, MQTT_CMD_PUBCOMP, 0, remaining_len);