Commit deace4939e7a2333a0588878af6521b427154c3d

Authored by Wiebe Cazemier
1 parent 96c1dd91

Some suback mqtt5 stuff

mqttpacket.cpp
@@ -63,6 +63,11 @@ MqttPacket::MqttPacket(const SubAck &subAck) : @@ -63,6 +63,11 @@ MqttPacket::MqttPacket(const SubAck &subAck) :
63 first_byte = static_cast<char>(packetType) << 4; 63 first_byte = static_cast<char>(packetType) << 4;
64 writeUint16(subAck.packet_id); 64 writeUint16(subAck.packet_id);
65 65
  66 + if (subAck.protocol_version >= ProtocolVersion::Mqtt5)
  67 + {
  68 + writeProperties(subAck.propertyBuilder);
  69 + }
  70 +
66 std::vector<char> returnList; 71 std::vector<char> returnList;
67 for (SubAckReturnCodes code : subAck.responses) 72 for (SubAckReturnCodes code : subAck.responses)
68 { 73 {
@@ -665,7 +670,7 @@ void MqttPacket::handleSubscribe() @@ -665,7 +670,7 @@ void MqttPacket::handleSubscribe()
665 throw ProtocolError("No topics specified to subscribe to."); 670 throw ProtocolError("No topics specified to subscribe to.");
666 } 671 }
667 672
668 - SubAck subAck(packet_id, subs_reponse_codes); 673 + SubAck subAck(this->protocolVersion, packet_id, subs_reponse_codes);
669 MqttPacket response(subAck); 674 MqttPacket response(subAck);
670 sender->writeMqttPacket(response); 675 sender->writeMqttPacket(response);
671 } 676 }
types.cpp
@@ -82,7 +82,8 @@ size_t ConnAck::getLengthWithoutFixedHeader() const @@ -82,7 +82,8 @@ size_t ConnAck::getLengthWithoutFixedHeader() const
82 return result; 82 return result;
83 } 83 }
84 84
85 -SubAck::SubAck(uint16_t packet_id, const std::list<char> &subs_qos_reponses) : 85 +SubAck::SubAck(const ProtocolVersion protVersion, uint16_t packet_id, const std::list<char> &subs_qos_reponses) :
  86 + protocol_version(protVersion),
86 packet_id(packet_id) 87 packet_id(packet_id)
87 { 88 {
88 assert(!subs_qos_reponses.empty()); 89 assert(!subs_qos_reponses.empty());
@@ -97,6 +98,12 @@ size_t SubAck::getLengthWithoutFixedHeader() const @@ -97,6 +98,12 @@ size_t SubAck::getLengthWithoutFixedHeader() const
97 { 98 {
98 size_t result = responses.size(); 99 size_t result = responses.size();
99 result += 2; // Packet ID 100 result += 2; // Packet ID
  101 +
  102 + if (this->protocol_version >= ProtocolVersion::Mqtt5)
  103 + {
  104 + const size_t proplen = propertyBuilder ? propertyBuilder->getLength() : 1;
  105 + result += proplen;
  106 + }
100 return result; 107 return result;
101 } 108 }
102 109
@@ -175,9 +175,12 @@ enum class SubAckReturnCodes @@ -175,9 +175,12 @@ enum class SubAckReturnCodes
175 class SubAck 175 class SubAck
176 { 176 {
177 public: 177 public:
  178 + const ProtocolVersion protocol_version;
178 uint16_t packet_id; 179 uint16_t packet_id;
179 std::list<SubAckReturnCodes> responses; 180 std::list<SubAckReturnCodes> responses;
180 - SubAck(uint16_t packet_id, const std::list<char> &subs_qos_reponses); 181 + std::shared_ptr<Mqtt5PropertyBuilder> propertyBuilder;
  182 +
  183 + SubAck(const ProtocolVersion protVersion, uint16_t packet_id, const std::list<char> &subs_qos_reponses);
181 size_t getLengthWithoutFixedHeader() const; 184 size_t getLengthWithoutFixedHeader() const;
182 }; 185 };
183 186