Skip to content

Commit 2bc4d20

Browse files
committed
Copy technique from publish(...)
1 parent 1e166ee commit 2bc4d20

File tree

1 file changed

+22
-33
lines changed

1 file changed

+22
-33
lines changed

umqtt.simple/umqtt/simple.py

+22-33
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ def __init__(self, client_id, server, port=0, user=None, password=None, keepaliv
1313
port = 8883 if ssl else 1883
1414
self.client_id = client_id
1515
self.sock = None
16-
self.server = server
17-
self.port = port
16+
self.addr = socket.getaddrinfo(server, port)[0][-1]
1817
self.ssl = ssl
1918
self.ssl_params = ssl_params
2019
self.pid = 0
@@ -54,45 +53,35 @@ def set_last_will(self, topic, msg, retain=False, qos=0):
5453

5554
def connect(self, clean_session=True):
5655
self.sock = socket.socket()
57-
self.addr = socket.getaddrinfo(self.server, self.port)[0][-1]
5856
self.sock.connect(self.addr)
5957
if self.ssl:
6058
import ussl
6159
self.sock = ussl.wrap_socket(self.sock, **self.ssl_params)
60+
premsg = bytearray(b"\x10\0\0\0\0\0")
61+
msg = bytearray(b"\x04MQTT\x04\x02\0\0")
62+
6263
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:
6466
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\x04MQTT\x04\x02\0\0")
70-
elif sz < 16384:
71-
msg = bytearray(b"\x10\0\0\0\x04MQTT\x04\x02\0\0")
72-
elif sz < 2097152:
73-
msg = bytearray(b"\x10\0\0\0\0\x04MQTT\x04\x02\0\0")
74-
else:
75-
msg = bytearray(b"\x10\0\0\0\0\0\x04MQTT\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
8968
if self.keepalive:
9069
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)
9685
self.sock.write(msg)
9786
#print(hex(len(msg)), hexlify(msg, ":"))
9887
self._send_str(self.client_id)

0 commit comments

Comments
 (0)