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