class Client(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.printer = Printer("client") def run(self): sock = socket.create_connection((Config.monitor_ip, Config.monitor_port)) for line in sock.makefile(): response = self.generate_response(line) self.printer.command(response) sock.send(response) sock.close() def generate_response(self, line): line = line.strip() directive, args = [x.strip() for x in line.split(':', 1)] self.printer.directive(line) if directive == "REQUIRE": if args == "IDENT": return "IDENT %s\n" % Config.ident elif args == "PASSWORD": return "PASSWORD %s\n" % Config.password elif args == "ALIVE": if Config.cookie == "": self.printer.info("Alive request but we don't know the cookie!") else: return "ALIVE %s\n" % Config.cookie elif args == "HOST_PORT": return "HOST_PORT %s %s\n" % (Config.host_ip, Config.host_port) else: self.printer.error("Unknown require: " + line) elif directive == "RESULT": args = args.split(' ', 1) if args[0] == "PASSWORD": Config.cookie = args[1] self.printer.info("Got cookie: " + Config.cookie) elif args[0] == "HOST_PORT": self.printer.info("Login successful! (%s)" % args[1]) else: self.printer.error("Unknown result: " + line) elif directive == "WAITING": pass elif directive == "COMMENT": pass elif directive == "COMMAND_ERROR": if "unable to connect to host" in args: return "" else: self.printer.error(line) else: self.printer.error("Unknown directive: " + line) return ""
class tcp_handler(SocketServer.StreamRequestHandler): def setup(self): self.printer = Printer("server") SocketServer.StreamRequestHandler.setup(self) def generate_response(self, line): line = line.strip() directive, args = [x.strip() for x in line.split(':', 1)] self.printer.directive(line) if directive == "REQUIRE": if args == "IDENT": return "IDENT %s\n" % Config.ident elif args == "ALIVE": if Config.cookie == "": self.printer.info("Alive request but we don't know the cookie!") else: return "ALIVE %s\n" % Config.cookie elif args == "QUIT": return "QUIT\n" else: self.printer.error("Unknown require: " + line) elif directive == "RESULT": args = args.split(' ', 1) if args[0] == "ALIVE" and args[1] == "Identity has been verified.": self.printer.info("Alive verified") elif args[0] == "QUIT": self.printer.info("server has quit") else: self.printer.error("Unknown result") elif directive == "PARTICIPANT_PASSWORD_CHECKSUM": self.printer.info("Got checksum: %s" % args) elif directive == "WAITING": pass elif directive == "COMMENT": pass else: self.printer.error("Unknown directive: " + line) return "" def handle(self): for line in self.rfile: response = self.generate_response(line) self.printer.command(response) self.wfile.write(response)