[MqttMessage] Rewrite of the length encoding

This commit is contained in:
hsaturn
2022-10-30 13:24:05 +01:00
parent d5d27c8020
commit 4eb8f18ebf
2 changed files with 115 additions and 8 deletions

View File

@@ -768,12 +768,21 @@ void MqttMessage::add(const char* p, size_t len, bool addLength)
void MqttMessage::encodeLength()
{
if (state != Complete)
{
int length = buffer.size()-3; // 3 = 1 byte for header + 2 bytes for pre-reserved length field.
buffer[1] = 0x80 | (length & 0x7F);
buffer[2] = (length >> 7);
vheader = 3;
if (state != Complete)
{
int length = buffer.size()-3; // 3 = 1 byte for header + 2 bytes for pre-reserved length field.
if (length <= 0x7F)
{
buffer.erase(1,1);
buffer[1] = length;
vheader = 2;
}
else
{
buffer[1] = 0x80 | (length & 0x7F);
buffer[2] = (length >> 7);
vheader = 3;
}
// We could check that buffer[2] < 128 (end of length encoding)
state = Complete;