64
64
MQTT_SUB = b'\x82 '
65
65
MQTT_UNSUB = b'\xA2 '
66
66
MQTT_PUB = bytearray (b'\x30 \0 ' )
67
- MQTT_CON = bytearray (b"\x10 \x00 \x00 \x00 " )
68
67
# Variable CONNECT header [MQTT 3.1.2]
69
- MQTT_CON_HEADER = bytearray (b"\x04 MQTT\x04 \x02 \0 \0 " )
68
+ MQTT_VAR_HEADER = bytearray (b"\x04 MQTT\x04 \x02 \0 \0 " )
70
69
MQTT_DISCONNECT = b'\xe0 \0 '
71
70
72
71
CONNACK_ERRORS = {const (0x01 ) : 'Connection Refused - Incorrect Protocol Version' ,
@@ -238,22 +237,16 @@ def connect(self, clean_session=True):
238
237
self ._sock .connect (addr , TCP_MODE )
239
238
except RuntimeError as e :
240
239
raise MMQTTException ("Invalid broker address defined." , e )
241
-
242
- # Google core IOT Premsg
243
- #fixed_header = bytearray(b"\x10\x00\x00\x00")
244
- # Adafruit IO
245
- #fixed_header = bytearray(b'\x10\x00\x00')
246
240
247
241
# Fixed Header
248
242
fixed_header = bytearray ()
249
243
fixed_header .append (0x10 )
250
244
251
245
# Variable Header
252
- var_header = MQTT_CON_HEADER
246
+ var_header = MQTT_VAR_HEADER
253
247
var_header [6 ] = clean_session << 1
254
-
255
-
256
- # 12 + (protocol information, we're not supporting MQTTv311..)
248
+
249
+ # Set up variable header and remaining_length
257
250
remaining_length = 12 + len (self ._client_id )
258
251
if self ._user is not None :
259
252
remaining_length += 2 + len (self ._user ) + 2 + len (self ._pass )
@@ -266,65 +259,30 @@ def connect(self, clean_session=True):
266
259
remaining_length += 2 + len (self ._lw_topic ) + 2 + len (self ._lw_msg )
267
260
var_header [6 ] |= 0x4 | (self ._lw_qos & 0x1 ) << 3 | (self ._lw_qos & 0x2 ) << 3
268
261
var_header [6 ] |= self ._lw_retain << 5
269
-
270
262
271
- # Remaining length
272
- i = 1
273
- test_byte = 0
263
+ # Remaining length calculation
264
+ large_rel_length = False
274
265
if remaining_length > 0x7f :
266
+ large_rel_length = True
275
267
# Calculate Remaining Length [2.2.3]
276
- remaining_bytes = bytearray ()
277
268
while remaining_length > 0 :
278
- test_byte = 1
279
269
encoded_byte = remaining_length % 0x80
280
270
remaining_length = remaining_length // 0x80
281
271
# if there is more data to encode, set the top bit of the byte
282
272
if remaining_length > 0 :
283
273
encoded_byte |= 0x80
284
- print ('enc byte: ' , encoded_byte )
285
- remaining_bytes .append (encoded_byte )
286
274
fixed_header .append (encoded_byte )
287
- print ('_prl: packet' , fixed_header )
288
- print ('prl, rel.length: ' , remaining_length )
289
- print ('prl, byte: ' , encoded_byte )
290
- i += 1
291
- if test_byte :
275
+ if large_rel_length :
292
276
fixed_header .append (0x00 )
293
277
else :
294
- print (fixed_header )
295
- print (remaining_length )
296
- fixed_header .append (remaining_length )
297
- fixed_header .append (0x00 )
298
-
299
-
300
- """
301
- # Old, non-working MMQT/UMQTT IMPL
302
- i = 1
303
- print(remaining_length)
304
- while remaining_length > 0x7f:
305
- print("with variable header...")
306
- fixed_header[i] = (remaining_length & 0x7f) | 0x80
307
- remaining_length >>= 7
308
- i += 1
309
- print("i: ", i)
310
- fixed_header[i] = remaining_length
311
- print(fixed_header)
312
- print(remaining_length)
313
- """
278
+ fixed_header .append (remaining_length + 0x00 )
314
279
315
280
if self ._logger is not None :
316
- self ._logger .debug ('Sending CONNECT packet to broker' )
317
- print ("---fixed_header----" )
318
- print ("rel len: " , remaining_length )
319
- print (fixed_header )
281
+ self ._logger .debug ('Sending CONNECT to broker' )
282
+ self ._logger .debug ('Fixed Header: {}\n Variable Header: {}' .format (fixed_header ,
283
+ var_header ))
320
284
self ._sock .write (fixed_header )
321
- #print("remaining len: ", fixed_header[i])
322
- print ("---var_header----" )
323
- print (var_header )
324
285
self ._sock .write (var_header )
325
- print ("Keepalive Bytes:" )
326
- print (hex (var_header [7 ]))
327
- print (hex (var_header [8 ]))
328
286
# [MQTT-3.1.3-4]
329
287
self ._send_str (self ._client_id )
330
288
if self ._lw_topic :
@@ -765,4 +723,4 @@ def set_logger_level(self, log_level):
765
723
elif log_level == 'ERROR' :
766
724
self ._logger .setLevel (logging .CRITICIAL )
767
725
else :
768
- raise MMQTTException ('Incorrect logging level provided!' )
726
+ raise MMQTTException ('Incorrect logging level provided!' )
0 commit comments