diff --git a/tools/uhub-adc-redirector.py b/tools/uhub-adc-redirector.py new file mode 100755 index 0000000..85f336f --- /dev/null +++ b/tools/uhub-adc-redirector.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python +""" +A simple ADC redirector service. +""" + +import SocketServer + +# The target hub we want to redirect clients to +redirect_uri = "adcs://adcs.uhub.org:1511" + +# A message to be sent to users while they are being redirected. +message = "This hub has been permanently moved." + +# The chat name of the message. +bot_name = "Redirector" + +# The local address and port to bind the redirector to. +bind_addr = "0.0.0.0" +bind_port = 1411 + +class AdcRedirector(SocketServer.BaseRequestHandler): + + def escape(self, str): + modified = str.replace("\\", "\\\\").replace(" ", "\\s").replace("\n", "\\n") + return modified; + + def handle(self): + supports = False; + while True: + data = self.request.recv(1024) + if (data.startswith("HSUP") and not supports): + self.request.sendall("ISUP ADBASE ADTIGR\nISID AAAX\nIINF CT32 NI%(botname)s VEuhub-adc-redirector/0.1\n" % { "address": redirect_uri, "botname": self.escape(bot_name), "message": self.escape(message) }) + supports = True + elif (data.startswith("BINF") and supports): + self.request.sendall("IMSG %(message)s\nIQUI AAAX RD%(address)s\n" % {"message": self.escape(message), "address": redirect_uri }) + break + else: + break + +if __name__ == "__main__": + server = SocketServer.TCPServer((bind_addr, bind_port), AdcRedirector) + server.allow_reuse_address = True + server.serve_forever()