Skip to content

Commit

Permalink
fix: mqtt的connect报文的数据长度超过256时会出错,导致无法连接服务器
Browse files Browse the repository at this point in the history
  • Loading branch information
wendal committed May 1, 2024
1 parent a43fc17 commit 87b64dd
Showing 1 changed file with 22 additions and 18 deletions.
40 changes: 22 additions & 18 deletions components/network/libemqtt/libemqtt.c
Expand Up @@ -235,37 +235,41 @@ int mqtt_connect(mqtt_broker_handle_t* broker)


// Fixed header
uint8_t fixedHeaderSize = 2; // Default size = one byte Message Type + one byte Remaining Length
uint8_t remainLen = sizeof(var_header)+payload_len;
if (remainLen > 127) {
fixedHeaderSize++; // add an additional byte for Remaining Length
}
uint8_t fixed_header[3];
// uint16_t fixedHeaderSize = 2; // Default size = one byte Message Type + one byte Remaining Length
uint16_t remainLen = sizeof(var_header)+payload_len;
uint8_t buf[4] = {0};
int rc = 0;
uint32_t length = remainLen;
do
{
char d = length % 128;
length /= 128;
/* if there are more digits to encode, set the top bit of this digit */
if (length > 0)
d |= 0x80;
buf[rc++] = d;
} while (length > 0);
size_t fixed_header_len = rc + 1;

// Allocate memory for the fixed header (3 bytes
uint8_t fixed_header[8] = {0};

// Message Type
fixed_header[0] = MQTT_MSG_CONNECT;

// Remaining Length
if (remainLen <= 127) {
fixed_header[1] = remainLen;
} else {
// first byte is remainder (mod) of 128, then set the MSB to indicate more bytes
fixed_header[1] = remainLen % 128;
fixed_header[1] = fixed_header[1] | 0x80;
// second byte is number of 128s
fixed_header[2] = remainLen / 128;
}
memcpy(fixed_header + 1, buf, fixed_header_len - 1);

uint16_t offset = 0;
uint32_t packet_size = fixedHeaderSize+sizeof(var_header)+payload_len;
uint32_t packet_size = fixed_header_len+sizeof(var_header)+payload_len;
uint8_t *packet = luat_heap_malloc(packet_size);
if (packet == NULL) {
LLOGE("out of memory when malloc connect packet");
return -2;
}
memset(packet, 0, packet_size);
memcpy(packet, fixed_header, fixedHeaderSize);
offset += fixedHeaderSize;
memcpy(packet, fixed_header, fixed_header_len);
offset += fixed_header_len;
memcpy(packet+offset, var_header, sizeof(var_header));
offset += sizeof(var_header);
// Client ID - UTF encoded
Expand Down

0 comments on commit 87b64dd

Please sign in to comment.