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
7568class 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