Skip to content

Commit 2bdf6f1

Browse files
Copilotithewei
andcommitted
Address review: use long long for package length, make mqtt_next_mid per-client and thread-safe
Co-authored-by: ithewei <26049660+ithewei@users.noreply.github.com>
1 parent d709bc0 commit 2bdf6f1

3 files changed

Lines changed: 19 additions & 10 deletions

File tree

event/unpack.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,15 @@ int hio_unpack_by_length_field(hio_t* io, void* buf, int readbytes) {
157157
hio_close(io);
158158
return -1;
159159
}
160-
int signed_package_len = (int)head_len + (int)body_len + setting->length_adjustment;
161-
if (signed_package_len <= 0 || signed_package_len > (int)setting->package_max_length) {
162-
hloge("Invalid package length %d!", signed_package_len);
160+
long long signed_package_len = (long long)head_len + (long long)body_len + setting->length_adjustment;
161+
if (signed_package_len <= 0) {
162+
hloge("Invalid package length %lld!", signed_package_len);
163+
io->error = ERR_INVALID_PACKAGE;
164+
hio_close(io);
165+
return -1;
166+
}
167+
if (signed_package_len > setting->package_max_length) {
168+
hloge("Package length over %u bytes!", setting->package_max_length);
163169
io->error = ERR_OVER_LIMIT;
164170
hio_close(io);
165171
return -1;

mqtt/mqtt_client.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
#include "hsocket.h"
77
#include "hmath.h"
88

9-
static unsigned short mqtt_next_mid() {
10-
static unsigned short s_mid = 0;
11-
if (++s_mid == 0) s_mid = 1;
12-
return s_mid;
9+
static unsigned short mqtt_next_mid(mqtt_client_t* cli) {
10+
hmutex_lock(&cli->mutex_);
11+
if (++cli->mid_ == 0) cli->mid_ = 1;
12+
unsigned short mid = cli->mid_;
13+
hmutex_unlock(&cli->mutex_);
14+
return mid;
1315
}
1416

1517
static int mqtt_client_send(mqtt_client_t* cli, const void* buf, int len) {
@@ -629,7 +631,7 @@ int mqtt_client_publish(mqtt_client_t* cli, mqtt_message_t* msg) {
629631
PUSH16(p, topic_len);
630632
PUSH_N(p, msg->topic, topic_len);
631633
if (msg->qos) {
632-
mid = mqtt_next_mid();
634+
mid = mqtt_next_mid(cli);
633635
PUSH16(p, mid);
634636
}
635637
// MQTT v5: publish properties (empty)
@@ -672,7 +674,7 @@ int mqtt_client_subscribe(mqtt_client_t* cli, const char* topic, int qos) {
672674
unsigned char* p = buf;
673675
int headlen = mqtt_head_pack(&head, p);
674676
p += headlen;
675-
unsigned short mid = mqtt_next_mid();
677+
unsigned short mid = mqtt_next_mid(cli);
676678
PUSH16(p, mid);
677679
// MQTT v5: subscribe properties (empty)
678680
if (cli->protocol_version == MQTT_PROTOCOL_V5) {
@@ -706,7 +708,7 @@ int mqtt_client_unsubscribe(mqtt_client_t* cli, const char* topic) {
706708
unsigned char* p = buf;
707709
int headlen = mqtt_head_pack(&head, p);
708710
p += headlen;
709-
unsigned short mid = mqtt_next_mid();
711+
unsigned short mid = mqtt_next_mid(cli);
710712
PUSH16(p, mid);
711713
// MQTT v5: unsubscribe properties (empty)
712714
if (cli->protocol_version == MQTT_PROTOCOL_V5) {

mqtt/mqtt_client.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ struct mqtt_client_s {
5353
hssl_ctx_t ssl_ctx;
5454
// thread-safe
5555
hmutex_t mutex_;
56+
unsigned short mid_;
5657
};
5758

5859
BEGIN_EXTERN_C

0 commit comments

Comments
 (0)