|
61 | 61 | MQTT_PINGRESP = const(0xD0) |
62 | 62 | MQTT_PUBLISH = const(0x30) |
63 | 63 | MQTT_SUB = const(0x82) |
64 | | -MQTT_UNSUB = b"\xA2" |
| 64 | +MQTT_UNSUB = const(0xA2) |
65 | 65 | MQTT_DISCONNECT = b"\xe0\0" |
66 | 66 |
|
67 | 67 | MQTT_PKT_TYPE_MASK = const(0xF0) |
@@ -911,18 +911,25 @@ def unsubscribe(self, topic: str) -> None: |
911 | 911 | "Topic must be subscribed to before attempting unsubscribe." |
912 | 912 | ) |
913 | 913 | # Assemble packet |
| 914 | + self.logger.debug("Sending UNSUBSCRIBE to broker...") |
| 915 | + fixed_header = bytearray([MQTT_UNSUB]) |
914 | 916 | packet_length = 2 + (2 * len(topics)) |
915 | 917 | packet_length += sum(len(topic.encode("utf-8")) for topic in topics) |
916 | | - packet_length_byte = packet_length.to_bytes(1, "big") |
| 918 | + self.encode_remaining_length(fixed_header, remaining_length=packet_length) |
| 919 | + self.logger.debug(f"Fixed Header: {fixed_header}") |
| 920 | + self._sock.send(fixed_header) |
917 | 921 | self._pid = self._pid + 1 if self._pid < 0xFFFF else 1 |
918 | 922 | packet_id_bytes = self._pid.to_bytes(2, "big") |
919 | | - packet = MQTT_UNSUB + packet_length_byte + packet_id_bytes |
| 923 | + var_header = packet_id_bytes |
| 924 | + self.logger.debug(f"Variable Header: {var_header}") |
| 925 | + self._sock.send(var_header) |
| 926 | + payload = bytes() |
920 | 927 | for t in topics: |
921 | 928 | topic_size = len(t.encode("utf-8")).to_bytes(2, "big") |
922 | | - packet += topic_size + t.encode() |
| 929 | + payload += topic_size + t.encode() |
923 | 930 | for t in topics: |
924 | | - self.logger.debug("UNSUBSCRIBING from topic %s", t) |
925 | | - self._sock.send(packet) |
| 931 | + self.logger.debug(f"UNSUBSCRIBING from topic {t}") |
| 932 | + self._sock.send(payload) |
926 | 933 | self.logger.debug("Waiting for UNSUBACK...") |
927 | 934 | while True: |
928 | 935 | stamp = self.get_monotonic_time() |
|
0 commit comments