@@ -13,8 +13,7 @@ def __init__(self, client_id, server, port=0, user=None, password=None, keepaliv
13
13
port = 8883 if ssl else 1883
14
14
self .client_id = client_id
15
15
self .sock = None
16
- self .server = server
17
- self .port = port
16
+ self .addr = socket .getaddrinfo (server , port )[0 ][- 1 ]
18
17
self .ssl = ssl
19
18
self .ssl_params = ssl_params
20
19
self .pid = 0
@@ -54,45 +53,35 @@ def set_last_will(self, topic, msg, retain=False, qos=0):
54
53
55
54
def connect (self , clean_session = True ):
56
55
self .sock = socket .socket ()
57
- self .addr = socket .getaddrinfo (self .server , self .port )[0 ][- 1 ]
58
56
self .sock .connect (self .addr )
59
57
if self .ssl :
60
58
import ussl
61
59
self .sock = ussl .wrap_socket (self .sock , ** self .ssl_params )
60
+ premsg = bytearray (b"\x10 \0 \0 \0 \0 \0 " )
61
+ msg = bytearray (b"\x04 MQTT\x04 \x02 \0 \0 " )
62
+
62
63
sz = 10 + 2 + len (self .client_id )
63
- if self .user is not None :
64
+ msg [6 ] = clean_session << 1
65
+ if user is not None :
64
66
sz += 2 + len (self .user ) + 2 + len (self .pswd )
65
- if self .lw_topic :
66
- sz += 2 + len (self .lw_topic ) + 2 + len (self .lw_msg )
67
-
68
- if sz < 128 :
69
- msg = bytearray (b"\x10 \0 \0 \x04 MQTT\x04 \x02 \0 \0 " )
70
- elif sz < 16384 :
71
- msg = bytearray (b"\x10 \0 \0 \0 \x04 MQTT\x04 \x02 \0 \0 " )
72
- elif sz < 2097152 :
73
- msg = bytearray (b"\x10 \0 \0 \0 \0 \x04 MQTT\x04 \x02 \0 \0 " )
74
- else :
75
- msg = bytearray (b"\x10 \0 \0 \0 \0 \0 \x04 MQTT\x04 \x02 \0 \0 " )
76
-
77
- indexOfSize = 0
78
- while (sz > 0 ):
79
- enc_byte = sz % 128
80
- sz = int (sz / 128 )
81
- if (sz > 0 ):
82
- enc_byte |= 128
83
- indexOfSize += 1
84
- msg [indexOfSize ] = enc_byte
85
-
86
- msg [8 + indexOfSize ] = clean_session << 1
87
- if self .user is not None :
88
- msg [8 + indexOfSize ] |= 0xC0
67
+ msg [6 ] |= 0xC0
89
68
if self .keepalive :
90
69
assert self .keepalive < 65536
91
- msg [9 + indexOfSize ] |= self .keepalive >> 8
92
- msg [10 + indexOfSize ] |= self .keepalive & 0x00FF
93
- if self .lw_topic :
94
- msg [8 + indexOfSize ] |= 0x4 | (self .lw_qos & 0x1 ) << 3 | (self .lw_qos & 0x2 ) << 3
95
- msg [8 + indexOfSize ] |= self .lw_retain << 5
70
+ msg [7 ] |= self .keepalive >> 8
71
+ msg [8 ] |= self .keepalive & 0x00FF
72
+ if lw_topic :
73
+ sz += 2 + len (self .lw_topic ) + 2 + len (self .lw_msg )
74
+ msg [6 ] |= 0x4 | (self .lw_qos & 0x1 ) << 3 | (self .lw_qos & 0x2 ) << 3
75
+ msg [6 ] |= self .lw_retain << 5
76
+
77
+ i = 1
78
+ while sz > 0x7f :
79
+ premsg [i ] = (sz & 0x7f ) | 0x80
80
+ sz >>= 7
81
+ i += 1
82
+ premsg [i ] = sz
83
+
84
+ self .sock .write (premsg , i + 1 )
96
85
self .sock .write (msg )
97
86
#print(hex(len(msg)), hexlify(msg, ":"))
98
87
self ._send_str (self .client_id )
0 commit comments