@@ -87,6 +87,11 @@ def recv(self, input_socket):
87
87
self .id = self ._get_number1 ();
88
88
#print("ZreMsg id: %i" % self.id)
89
89
90
+ version = self ._get_number1 ()
91
+ if version != 2 :
92
+ logger .debug ("Invalid version {0}" .format (version ))
93
+ return None
94
+
90
95
if self .id == ZreMsg .HELLO :
91
96
self .unpack_hello ()
92
97
elif self .id == ZreMsg .WHISPER :
@@ -125,6 +130,9 @@ def send(self, output_socket):
125
130
#print("ZreMsg: ", self.id)
126
131
self ._put_number1 (self .id )
127
132
#print(self.struct_data)
133
+ # add version
134
+ self ._put_number1 (2 )
135
+
128
136
if self .id == ZreMsg .HELLO :
129
137
self .pack_hello ()
130
138
elif self .id == ZreMsg .WHISPER :
@@ -339,10 +347,6 @@ def _put_long_string(self, s):
339
347
d = struct .pack ('%is' % len (s ), s .encode ('UTF-8' ))
340
348
self .struct_data += d
341
349
342
- def _zre_dictstring_to_dict (self , s ):
343
- l = s .split ("=" )
344
- return { l [0 ]: l [1 ] }
345
-
346
350
def unpack_hello (self ):
347
351
"""unpack a zre hello packet
348
352
@@ -370,11 +374,12 @@ def unpack_hello(self):
370
374
#print("post_group: needle is at: %i"% self._needle )
371
375
self .status = self ._get_number1 ()
372
376
self .name = self ._get_string ()
373
- headers_len = self ._get_number1 ()
377
+ headers_len = self ._get_number4 ()
374
378
self .headers = {}
375
379
for x in range (headers_len ):
376
- hdr_item = self ._get_string ()
377
- self .headers .update (self ._zre_dictstring_to_dict (hdr_item ))
380
+ key = self ._get_string ()
381
+ val = self ._get_long_string ()
382
+ self .headers .update ({key : val })
378
383
#import ast
379
384
#for hdr in hdrlist:
380
385
# # TODO: safer to use ast.literal_eval
@@ -405,22 +410,27 @@ def pack_hello(self):
405
410
self ._put_string (self .name )
406
411
self ._put_number4 (len (self .headers ))
407
412
for key , val in self .headers .items ():
408
- self ._put_long_string ("%s=%s" % (key , val ))
413
+ self ._put_string (key )
414
+ self ._put_long_string (val )
409
415
410
416
if __name__ == '__main__' :
411
- testdata = struct .pack ('Hb3sHbb2sb2sb2sbbb3sb3s ' ,
412
- 11 , # sequence
413
- 3 , # str length
417
+ testdata = struct .pack ('>Hb9sII2sI2sI2sbb4sIb1sI1sb1sI1s ' ,
418
+ 11 , # sequence
419
+ 9 , # str length
414
420
b"192:20123" , # endpoint
415
- 3 , # groups len
416
- 2 ,b"g1" , # length + groupname
417
- 2 ,b"g2" , # length + groupname
418
- 2 ,b"g3" , # length + groupname
419
- 4 , # status
420
- 2 , # header len
421
- 3 ,b"a=z" , # length + dict
422
- 3 ,b"b=x" # length + dict
423
- )
421
+ 3 , # groups len
422
+ 2 , b"g1" , # length + groupname
423
+ 2 , b"g2" , # length + groupname
424
+ 2 , b"g3" , # length + groupname
425
+ 4 , # status
426
+ 4 , b"NAME" , # name
427
+ 2 , # header len
428
+ 1 , b"a" , # length + dict
429
+ 1 , b"z" , # length + dict
430
+ 1 , b"b" , # length + dict
431
+ 1 , b"b" # length + dict
432
+ )
433
+
424
434
print ("New ZRE HELLO message" )
425
435
m = ZreMsg (ZreMsg .HELLO , data = testdata )
426
436
print ("Unpack a HELLO message" )
@@ -429,4 +439,3 @@ def pack_hello(self):
429
439
m .pack_hello ()
430
440
print ("Unpack the packed HELLO message" )
431
441
m .unpack_hello ()
432
-
0 commit comments