Skip to content

Commit 3980b5a

Browse files
committed
Update adafruit_minimqtt.py
1 parent 8f1f897 commit 3980b5a

File tree

1 file changed

+12
-19
lines changed

1 file changed

+12
-19
lines changed

adafruit_minimqtt/adafruit_minimqtt.py

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,6 @@
6464
_default_sock = None # pylint: disable=invalid-name
6565
_fake_context = None # pylint: disable=invalid-name
6666

67-
# Override default len() method
68-
len_overrided = len
69-
def len(object):
70-
if isinstance(object, str):
71-
return len_overrided(object.encode('utf-8'))
72-
else:
73-
return len_overrided(object)
7467

7568
class MMQTTException(Exception):
7669
"""MiniMQTT Exception class."""
@@ -188,7 +181,7 @@ def __init__(
188181
randint(0, int(time.monotonic() * 100) % 1000), randint(0, 99)
189182
)
190183
# generated client_id's enforce spec.'s length rules
191-
if len(self.client_id) > 23 or not self.client_id:
184+
if len(self.client_id.encode("utf-8")) > 23 or not self.client_id:
192185
raise ValueError("MQTT Client ID must be between 1 and 23 bytes")
193186

194187
# LWT
@@ -457,16 +450,16 @@ def connect(self, clean_session=True, host=None, port=None, keep_alive=None):
457450
var_header[6] = clean_session << 1
458451

459452
# Set up variable header and remaining_length
460-
remaining_length = 12 + len(self.client_id)
453+
remaining_length = 12 + len(self.client_id.encode("utf-8"))
461454
if self._username:
462-
remaining_length += 2 + len(self._username) + 2 + len(self._password)
455+
remaining_length += 2 + len(self._username.encode("utf-8")) + 2 + len(self._password.encode("utf-8"))
463456
var_header[6] |= 0xC0
464457
if self.keep_alive:
465458
assert self.keep_alive < MQTT_TOPIC_LENGTH_LIMIT
466459
var_header[7] |= self.keep_alive >> 8
467460
var_header[8] |= self.keep_alive & 0x00FF
468461
if self._lw_topic:
469-
remaining_length += 2 + len(self._lw_topic) + 2 + len(self._lw_msg)
462+
remaining_length += 2 + len(self._lw_topic.encode("utf-8")) + 2 + len(self._lw_msg.encode("utf-8"))
470463
var_header[6] |= 0x4 | (self._lw_qos & 0x1) << 3 | (self._lw_qos & 0x2) << 3
471464
var_header[6] |= self._lw_retain << 5
472465

@@ -583,7 +576,7 @@ def publish(self, topic, msg, retain=False, qos=0):
583576
pass
584577
else:
585578
raise MMQTTException("Invalid message data type.")
586-
if len(msg) > MQTT_MSG_MAX_SZ:
579+
if len(msg.encode("utf-8")) > MQTT_MSG_MAX_SZ:
587580
raise MMQTTException("Message size larger than %d bytes." % MQTT_MSG_MAX_SZ)
588581
assert (
589582
0 <= qos <= 1
@@ -593,10 +586,10 @@ def publish(self, topic, msg, retain=False, qos=0):
593586
pub_hdr_fixed = bytearray([0x30 | retain | qos << 1])
594587

595588
# variable header = 2-byte Topic length (big endian)
596-
pub_hdr_var = bytearray(struct.pack(">H", len(topic)))
589+
pub_hdr_var = bytearray(struct.pack(">H", len(topic.encode("utf-8"))))
597590
pub_hdr_var.extend(topic.encode("utf-8")) # Topic name
598591

599-
remaining_length = 2 + len(msg) + len(topic)
592+
remaining_length = 2 + len(msg.encode("utf-8")) + len(topic.encode("utf-8"))
600593
if qos > 0:
601594
# packet identifier where QoS level is 1 or 2. [3.3.2.2]
602595
remaining_length += 2
@@ -675,15 +668,15 @@ def subscribe(self, topic, qos=0):
675668
topics.append((t, q))
676669
# Assemble packet
677670
packet_length = 2 + (2 * len(topics)) + (1 * len(topics))
678-
packet_length += sum(len(topic) for topic, qos in topics)
671+
packet_length += sum(len(topic.encode("utf-8")) for topic, qos in topics)
679672
packet_length_byte = packet_length.to_bytes(1, "big")
680673
self._pid = self._pid + 1 if self._pid < 0xFFFF else 1
681674
packet_id_bytes = self._pid.to_bytes(2, "big")
682675
# Packet with variable and fixed headers
683676
packet = MQTT_SUB + packet_length_byte + packet_id_bytes
684677
# attaching topic and QOS level to the packet
685678
for t, q in topics:
686-
topic_size = len(t).to_bytes(2, "big")
679+
topic_size = len(t.encode("utf-8")).to_bytes(2, "big")
687680
qos_byte = q.to_bytes(1, "big")
688681
packet += topic_size + t.encode() + qos_byte
689682
if self.logger:
@@ -724,13 +717,13 @@ def unsubscribe(self, topic):
724717
)
725718
# Assemble packet
726719
packet_length = 2 + (2 * len(topics))
727-
packet_length += sum(len(topic) for topic in topics)
720+
packet_length += sum(len(topic.encode("utf-8")) for topic in topics)
728721
packet_length_byte = packet_length.to_bytes(1, "big")
729722
self._pid = self._pid + 1 if self._pid < 0xFFFF else 1
730723
packet_id_bytes = self._pid.to_bytes(2, "big")
731724
packet = MQTT_UNSUB + packet_length_byte + packet_id_bytes
732725
for t in topics:
733-
topic_size = len(t).to_bytes(2, "big")
726+
topic_size = len(t.encode("utf-8")).to_bytes(2, "big")
734727
packet += topic_size + t.encode()
735728
if self.logger:
736729
for t in topics:
@@ -921,7 +914,7 @@ def _send_str(self, string):
921914
:param str string: String to write to the socket.
922915
923916
"""
924-
self._sock.send(struct.pack("!H", len(string)))
917+
self._sock.send(struct.pack("!H", len(string.encode("utf-8"))))
925918
if isinstance(string, str):
926919
self._sock.send(str.encode(string, "utf-8"))
927920
else:

0 commit comments

Comments
 (0)