From 5fa7913c5c1dc842cf4b17e2f1224695b548f6d9 Mon Sep 17 00:00:00 2001
From: jkerdreu <jkerdreu@b32b6428-25c9-4566-ad07-03861ab6144f>
Date: Fri, 12 Jun 2020 15:05:51 +0000
Subject: [PATCH] Missing from 0.7 branch (not tested yet)

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2486 b32b6428-25c9-4566-ad07-03861ab6144f
---
 scripts/unreflector.py | 69 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)
 create mode 100644 scripts/unreflector.py

diff --git a/scripts/unreflector.py b/scripts/unreflector.py
new file mode 100644
index 00000000..3eff9a54
--- /dev/null
+++ b/scripts/unreflector.py
@@ -0,0 +1,69 @@
+from xaal.lib import NetworkConnector
+import socket
+import select
+import argparse
+import hashlib
+import collections
+
+class UDPConnector(object):
+    UDP_MAX_SIZE = 65507
+
+    def __init__(self,addr,port):
+        self.addr = addr
+        self.port = port
+
+    def connect(self):
+        self.__sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
+
+    def send(self,data):
+        self.__sock.sendto(data,(self.addr,self.port))
+    
+    def receive(self):
+        packt = self.__sock.recv(self.UDP_MAX_SIZE)
+        return packt
+
+    def get_data(self):
+        r = select.select([self.__sock, ], [], [], 0.02)
+        if r[0]:
+            return self.receive()
+        return None
+
+def run(u_addr,u_port,m_addr,m_port):
+    udp = UDPConnector(u_addr,u_port)
+    udp.connect()
+    #udp.send(b'hello')
+
+    mc = NetworkConnector(m_addr,m_port,10)
+    mc.connect()
+
+    queue = collections.deque(maxlen=50)
+
+    while 1:
+        data = udp.get_data()
+        if data:
+            h = hashlib.blake2b(data).hexdigest()
+            queue.append(h)
+            mc.send(data)
+           
+        data = mc.get_data()
+        if data:
+            h=hashlib.blake2b(data).hexdigest()
+            if h not in queue:
+                udp.send(data)
+
+def main():
+    ap = argparse.ArgumentParser(description="Simple un-reflector")
+    ap.add_argument('-a',action='store',dest='mcast_addr',required=True)
+    ap.add_argument('-p',type=int,action='store',dest='mcast_port',required=True)
+    ap.add_argument('-u',action='store',dest='udp_addr',required=True)
+    ap.add_argument('-r',type=int,action='store',dest='udp_port',required=True)
+    args = ap.parse_args()
+    run(args.udp_addr,args.udp_port,args.mcast_addr,args.mcast_port)
+
+
+if __name__ == '__main__':
+    try:
+        main()
+    except KeyboardInterrupt:
+        print("Bye bye")
+    
\ No newline at end of file
-- 
GitLab