From 1dabb4377d0e2d20cb5adcefecff7312a8e3f6f4 Mon Sep 17 00:00:00 2001 From: Andreas Schultz Date: Thu, 23 Oct 2014 14:10:18 +0200 Subject: [PATCH 1/2] update ZRE packet encoding to be ZRE v2 compatible --- zre_msg.py | 51 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/zre_msg.py b/zre_msg.py index 4c47246..960d3bb 100644 --- a/zre_msg.py +++ b/zre_msg.py @@ -87,6 +87,11 @@ def recv(self, input_socket): self.id = self._get_number1(); #print("ZreMsg id: %i" % self.id) + version = self._get_number1() + if version != 2: + logger.debug("Invalid version {0}".format(version)) + return None + if self.id == ZreMsg.HELLO: self.unpack_hello() elif self.id == ZreMsg.WHISPER: @@ -125,6 +130,9 @@ def send(self, output_socket): #print("ZreMsg: ", self.id) self._put_number1(self.id) #print(self.struct_data) + # add version + self._put_number1(2) + if self.id == ZreMsg.HELLO: self.pack_hello() elif self.id == ZreMsg.WHISPER: @@ -339,10 +347,6 @@ def _put_long_string(self, s): d = struct.pack('%is' %len(s), s.encode('UTF-8')) self.struct_data += d - def _zre_dictstring_to_dict(self, s): - l = s.split("=") - return { l[0]: l[1] } - def unpack_hello(self): """unpack a zre hello packet @@ -370,11 +374,12 @@ def unpack_hello(self): #print("post_group: needle is at: %i"% self._needle ) self.status = self._get_number1() self.name = self._get_string() - headers_len = self._get_number1() + headers_len = self._get_number4() self.headers = {} for x in range(headers_len): - hdr_item = self._get_string() - self.headers.update(self._zre_dictstring_to_dict(hdr_item)) + key = self._get_string() + val = self._get_long_string() + self.headers.update({key: val}) #import ast #for hdr in hdrlist: # # TODO: safer to use ast.literal_eval @@ -405,22 +410,27 @@ def pack_hello(self): self._put_string(self.name) self._put_number4(len(self.headers)) for key, val in self.headers.items(): - self._put_long_string("%s=%s" %(key, val)) + self._put_string(key) + self._put_long_string(val) if __name__ == '__main__': - testdata = struct.pack('Hb3sHbb2sb2sb2sbbb3sb3s', - 11, # sequence - 3, # str length + testdata = struct.pack('>Hb9sII2sI2sI2sbb4sIb1sI1sb1sI1s', + 11, # sequence + 9, # str length b"192:20123", # endpoint - 3, # groups len - 2,b"g1", # length + groupname - 2,b"g2", # length + groupname - 2,b"g3", # length + groupname - 4, # status - 2, # header len - 3,b"a=z", # length + dict - 3,b"b=x" # length + dict - ) + 3, # groups len + 2, b"g1", # length + groupname + 2, b"g2", # length + groupname + 2, b"g3", # length + groupname + 4, # status + 4, b"NAME", # name + 2, # header len + 1, b"a", # length + dict + 1, b"z", # length + dict + 1, b"b", # length + dict + 1, b"b" # length + dict + ) + print("New ZRE HELLO message") m = ZreMsg(ZreMsg.HELLO, data=testdata) print("Unpack a HELLO message") @@ -429,4 +439,3 @@ def pack_hello(self): m.pack_hello() print("Unpack the packed HELLO message") m.unpack_hello() - From db0c86ad5e16fa4c7bbe8bf9975db02e424cbecd Mon Sep 17 00:00:00 2001 From: Andreas Schultz Date: Thu, 23 Oct 2014 14:24:22 +0200 Subject: [PATCH 2/2] fixed wrong iterator in leave_group - this is fixed upstream already, drop before merge --- pyre.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyre.py b/pyre.py index 64653a4..263a226 100644 --- a/pyre.py +++ b/pyre.py @@ -350,7 +350,7 @@ def recv_api(self): msg.set_group(grpname) self.status += 1 msg.set_status(self.status) - for peer in self.peers: + for peer in self.peers.values(): peer.send(msg) self.own_groups.pop(grpname) print("Node is leaving group %s" % grpname)