diff options
Diffstat (limited to 'src/serialize.c')
| -rw-r--r-- | src/serialize.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/serialize.c b/src/serialize.c index b6c8cbc..3378b80 100644 --- a/src/serialize.c +++ b/src/serialize.c @@ -42,7 +42,16 @@ static size_t MqttPacketConnectGetRemainingLength(const MqttPacketConnect *packe static size_t MqttPacketSubscribeGetRemainingLength(const MqttPacketSubscribe *packet) { - return 2 + MqttStringLengthSerialized(packet->topicFilter) + 1; + size_t remaining = 2; + int i; + + for (i = 0; i < packet->topicFilters->qty; ++i) + { + remaining += MqttStringLengthSerialized(packet->topicFilters->entry[i]); + remaining += 1; + } + + return remaining; } static size_t MqttPacketUnsubscribeGetRemainingLength(const MqttPacketUnsubscribe *packet) @@ -197,14 +206,21 @@ static int MqttPacketConnectSerialize(const MqttPacketConnect *packet, Stream *s static int MqttPacketSubscribeSerialize(const MqttPacketSubscribe *packet, Stream *stream) { + int i; + if (MqttPacketWithIdSerialize((const MqttPacket *) packet, stream) == -1) return -1; - if (StreamWriteMqttString(packet->topicFilter, stream) == -1) - return -1; + for (i = 0; i < packet->topicFilters->qty; ++i) + { + unsigned char qos = (unsigned char) packet->qos[i]; - if (StreamWrite(&packet->qos, 1, stream) == -1) - return -1; + if (StreamWriteMqttString(packet->topicFilters->entry[i], stream) == -1) + return -1; + + if (StreamWrite(&qos, 1, stream) == -1) + return -1; + } return 0; } |
