Commit c1a010a3a44953841de4801bee86b2edd33ae112
1 parent
25268f92
Add writeUint16() and use it
Showing
2 changed files
with
18 additions
and
18 deletions
mqttpacket.cpp
| ... | ... | @@ -128,8 +128,7 @@ MqttPacket::MqttPacket(const SubAck &subAck) : |
| 128 | 128 | { |
| 129 | 129 | packetType = PacketType::SUBACK; |
| 130 | 130 | first_byte = static_cast<char>(packetType) << 4; |
| 131 | - writeByte((subAck.packet_id & 0xFF00) >> 8); | |
| 132 | - writeByte(subAck.packet_id & 0x00FF); | |
| 131 | + writeUint16(subAck.packet_id); | |
| 133 | 132 | |
| 134 | 133 | std::vector<char> returnList; |
| 135 | 134 | for (SubAckReturnCodes code : subAck.responses) |
| ... | ... | @@ -146,8 +145,7 @@ MqttPacket::MqttPacket(const UnsubAck &unsubAck) : |
| 146 | 145 | { |
| 147 | 146 | packetType = PacketType::SUBACK; |
| 148 | 147 | first_byte = static_cast<char>(packetType) << 4; |
| 149 | - writeByte((unsubAck.packet_id & 0xFF00) >> 8); | |
| 150 | - writeByte(unsubAck.packet_id & 0x00FF); | |
| 148 | + writeUint16(unsubAck.packet_id); | |
| 151 | 149 | calculateRemainingLength(); |
| 152 | 150 | } |
| 153 | 151 | |
| ... | ... | @@ -168,10 +166,7 @@ MqttPacket::MqttPacket(const Publish &publish) : |
| 168 | 166 | first_byte |= (publish.qos << 1); |
| 169 | 167 | first_byte |= (static_cast<char>(publish.retain) & 0b00000001); |
| 170 | 168 | |
| 171 | - char topicLenMSB = (topic.length() & 0xFF00) >> 8; | |
| 172 | - char topicLenLSB = topic.length() & 0x00FF; | |
| 173 | - writeByte(topicLenMSB); | |
| 174 | - writeByte(topicLenLSB); | |
| 169 | + writeUint16(topic.length()); | |
| 175 | 170 | writeBytes(topic.c_str(), topic.length()); |
| 176 | 171 | |
| 177 | 172 | if (publish.qos) |
| ... | ... | @@ -204,11 +199,8 @@ void MqttPacket::pubCommonConstruct(const uint16_t packet_id, PacketType packetT |
| 204 | 199 | first_byte = (static_cast<uint8_t>(packetType) << 4) | firstByteDefaultBits; |
| 205 | 200 | writeByte(first_byte); |
| 206 | 201 | writeByte(2); // length is always 2. |
| 207 | - uint8_t packetIdMSB = (packet_id & 0xFF00) >> 8; | |
| 208 | - uint8_t packetIdLSB = (packet_id & 0x00FF); | |
| 209 | 202 | packet_id_pos = pos; |
| 210 | - writeByte(packetIdMSB); | |
| 211 | - writeByte(packetIdLSB); | |
| 203 | + writeUint16(packet_id); | |
| 212 | 204 | } |
| 213 | 205 | |
| 214 | 206 | MqttPacket::MqttPacket(const PubAck &pubAck) : |
| ... | ... | @@ -766,13 +758,8 @@ void MqttPacket::setPacketId(uint16_t packet_id) |
| 766 | 758 | assert(qos > 0); |
| 767 | 759 | |
| 768 | 760 | this->packet_id = packet_id; |
| 769 | - | |
| 770 | 761 | pos = packet_id_pos; |
| 771 | - | |
| 772 | - char topicLenMSB = (packet_id & 0xFF00) >> 8; | |
| 773 | - char topicLenLSB = (packet_id & 0x00FF); | |
| 774 | - writeByte(topicLenMSB); | |
| 775 | - writeByte(topicLenLSB); | |
| 762 | + writeUint16(packet_id); | |
| 776 | 763 | } |
| 777 | 764 | |
| 778 | 765 | uint16_t MqttPacket::getPacketId() const |
| ... | ... | @@ -901,6 +888,18 @@ void MqttPacket::writeByte(char b) |
| 901 | 888 | bites[pos++] = b; |
| 902 | 889 | } |
| 903 | 890 | |
| 891 | +void MqttPacket::writeUint16(uint16_t x) | |
| 892 | +{ | |
| 893 | + if (pos + 2 > bites.size()) | |
| 894 | + throw ProtocolError("Exceeding packet size"); | |
| 895 | + | |
| 896 | + const uint8_t a = static_cast<uint8_t>(x >> 8); | |
| 897 | + const uint8_t b = static_cast<uint8_t>(x); | |
| 898 | + | |
| 899 | + bites[pos++] = a; | |
| 900 | + bites[pos++] = b; | |
| 901 | +} | |
| 902 | + | |
| 904 | 903 | void MqttPacket::writeBytes(const char *b, size_t len) |
| 905 | 904 | { |
| 906 | 905 | if (pos + len > bites.size()) | ... | ... |
mqttpacket.h