aboutsummaryrefslogtreecommitdiff
path: root/src/deserialize.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/deserialize.c')
-rw-r--r--src/deserialize.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/deserialize.c b/src/deserialize.c
index aaff490..96d7789 100644
--- a/src/deserialize.c
+++ b/src/deserialize.c
@@ -46,19 +46,24 @@ static int MqttPacketConnAckDeserialize(MqttPacketConnAck **packet, Stream *stre
static int MqttPacketSubAckDeserialize(MqttPacketSubAck **packet, Stream *stream)
{
size_t remainingLength = 0;
+ size_t i;
if (StreamReadRemainingLength(&remainingLength, stream) == -1)
return -1;
- /* 2 bytes for packet id and 1 byte for single return code */
- if (remainingLength != 3)
- return -1;
-
if (StreamReadUint16Be(&((*packet)->base.id), stream) == -1)
return -1;
- if (StreamRead(&((*packet)->returnCode), 1, stream) == -1)
- return -1;
+ remainingLength -= 2;
+
+ (*packet)->returnCode = (unsigned char *) malloc(
+ sizeof(*(*packet)->returnCode) * remainingLength);
+
+ for (i = 0; i < remainingLength; ++i)
+ {
+ if (StreamRead(&((*packet)->returnCode[i]), 1, stream) == -1)
+ return -1;
+ }
return 0;
}