diff --git a/mqttpacket.cpp b/mqttpacket.cpp index 12b62e9..a9eae05 100644 --- a/mqttpacket.cpp +++ b/mqttpacket.cpp @@ -196,19 +196,20 @@ void MqttPacket::handleSubscribe(std::shared_ptr &subscriptio { uint16_t packet_id = readTwoBytesToUInt16(); - std::list subs; // TODO: list of tuples, probably - while (remainingAfterPos() > 1) + std::list subs_reponse_codes; + while (remainingAfterPos() > 0) { uint16_t topicLength = readTwoBytesToUInt16(); std::string topic(readBytes(topicLength), topicLength); + char qos = readByte(); + if (qos > 0) + throw NotImplementedException("QoS not implemented"); std::cout << sender->repr() << " Subscribed to " << topic << std::endl; subscriptionStore->addSubscription(sender, topic); - subs.push_back(std::move(topic)); + subs_reponse_codes.push_back(qos); } - char flags = readByte(); - - SubAck subAck(packet_id, subs); + SubAck subAck(packet_id, subs_reponse_codes); MqttPacket response(subAck); sender->writeMqttPacket(response); } diff --git a/types.cpp b/types.cpp index feaf5d1..207782e 100644 --- a/types.cpp +++ b/types.cpp @@ -6,13 +6,12 @@ ConnAck::ConnAck(ConnAckReturnCodes return_code) : } -SubAck::SubAck(uint16_t packet_id, const std::list &subs) : +SubAck::SubAck(uint16_t packet_id, const std::list &subs_qos_reponses) : packet_id(packet_id) { - // dummy - for(size_t i = 0; i < subs.size(); i++) + for (char ack_code : subs_qos_reponses) { - responses.push_back(SubAckReturnCodes::MaxQoS0); + responses.push_back(static_cast(ack_code)); } } diff --git a/types.h b/types.h index ef824da..befb53a 100644 --- a/types.h +++ b/types.h @@ -64,7 +64,7 @@ class SubAck public: uint16_t packet_id; std::list responses; - SubAck(uint16_t packet_id, const std::list &subs); + SubAck(uint16_t packet_id, const std::list &subs_qos_reponses); }; class Publish