kopia lustrzana https://github.com/micropython/micropython-lib
umqtt.simple: Handle CONNECT messages longer than 127 bytes.
rodzic
30c2ac5601
commit
2164c88483
|
@ -57,20 +57,31 @@ class MQTTClient:
|
||||||
if self.ssl:
|
if self.ssl:
|
||||||
import ussl
|
import ussl
|
||||||
self.sock = ussl.wrap_socket(self.sock, **self.ssl_params)
|
self.sock = ussl.wrap_socket(self.sock, **self.ssl_params)
|
||||||
msg = bytearray(b"\x10\0\0\x04MQTT\x04\x02\0\0")
|
premsg = bytearray(b"\x10\0\0\0\0\0")
|
||||||
msg[1] = 10 + 2 + len(self.client_id)
|
msg = bytearray(b"\x04MQTT\x04\x02\0\0")
|
||||||
msg[9] = clean_session << 1
|
|
||||||
|
sz = 10 + 2 + len(self.client_id)
|
||||||
|
msg[6] = clean_session << 1
|
||||||
if self.user is not None:
|
if self.user is not None:
|
||||||
msg[1] += 2 + len(self.user) + 2 + len(self.pswd)
|
sz += 2 + len(self.user) + 2 + len(self.pswd)
|
||||||
msg[9] |= 0xC0
|
msg[6] |= 0xC0
|
||||||
if self.keepalive:
|
if self.keepalive:
|
||||||
assert self.keepalive < 65536
|
assert self.keepalive < 65536
|
||||||
msg[10] |= self.keepalive >> 8
|
msg[7] |= self.keepalive >> 8
|
||||||
msg[11] |= self.keepalive & 0x00FF
|
msg[8] |= self.keepalive & 0x00FF
|
||||||
if self.lw_topic:
|
if self.lw_topic:
|
||||||
msg[1] += 2 + len(self.lw_topic) + 2 + len(self.lw_msg)
|
sz += 2 + len(self.lw_topic) + 2 + len(self.lw_msg)
|
||||||
msg[9] |= 0x4 | (self.lw_qos & 0x1) << 3 | (self.lw_qos & 0x2) << 3
|
msg[6] |= 0x4 | (self.lw_qos & 0x1) << 3 | (self.lw_qos & 0x2) << 3
|
||||||
msg[9] |= self.lw_retain << 5
|
msg[6] |= self.lw_retain << 5
|
||||||
|
|
||||||
|
i = 1
|
||||||
|
while sz > 0x7f:
|
||||||
|
premsg[i] = (sz & 0x7f) | 0x80
|
||||||
|
sz >>= 7
|
||||||
|
i += 1
|
||||||
|
premsg[i] = sz
|
||||||
|
|
||||||
|
self.sock.write(premsg, i + 2)
|
||||||
self.sock.write(msg)
|
self.sock.write(msg)
|
||||||
#print(hex(len(msg)), hexlify(msg, ":"))
|
#print(hex(len(msg)), hexlify(msg, ":"))
|
||||||
self._send_str(self.client_id)
|
self._send_str(self.client_id)
|
||||||
|
|
Ładowanie…
Reference in New Issue