From 43edb56f0f6d14eb7578ccfc39da801b906870e1 Mon Sep 17 00:00:00 2001 From: davidb Date: Tue, 22 Apr 2003 23:19:17 +0000 Subject: [PATCH] bunches of changes --- rwhoisd/RwhoisServer.py | 73 +++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/rwhoisd/RwhoisServer.py b/rwhoisd/RwhoisServer.py index 4b91d5f..cf3b8a7 100644 --- a/rwhoisd/RwhoisServer.py +++ b/rwhoisd/RwhoisServer.py @@ -24,14 +24,25 @@ class RwhoisTCPServer(SocketServer.ThreadingTCPServer): class RwhoisHandler(SocketServer.StreamRequestHandler): def readline(self): - try: - return self.rfile.readline().strip()[:1024] - except KeyboardInterrupt: - self.quit_flag = True - return - + """Read a line of input from the client.""" + # a simple way of doing this + # return self.rfile.readline() + + data = self.request.recv(1024) + if not data: return None + + lines = data.splitlines(True) + + # ugh. this totally defeats any pipelining, not that rwhois + # clients should be doing that. + if len(lines) > 1 and config.verbose: + print "%s discarding additional input lines: %r" \ + % (self.client_address, lines) + return lines[0] + def handle(self): + print repr(self.request) self.quit_flag = False # output a banner @@ -43,14 +54,19 @@ class RwhoisHandler(SocketServer.StreamRequestHandler): session.rfile = self.rfile session.wfile = self.wfile - # first line - line = self.readline() + if config.verbose: + print "%s accepted connection" % (self.client_address,) + + c = 0 + while 1: + line = self.readline() + if not line: break - while not self.rfile.closed: + line = line.strip() + # we can skip blank lines. if not line: - line = self.readline() continue - + if line.startswith("-"): self.handle_directive(session, line) else: @@ -63,12 +79,12 @@ class RwhoisHandler(SocketServer.StreamRequestHandler): # check to see if we were asked to quit if self.quit_flag: break - # next line of input - line = self.readline() - - print "done with", self.client_address + if config.verbose: + print "%s disconnected" % (self.client_address,) def handle_directive(self, session, line): + if config.verbose: + print "%s directive %s" % (self.client_address, line) if (line.startswith("-quit")): self.quit_flag = True self.wfile.write(Rwhois.ok()) @@ -76,20 +92,32 @@ class RwhoisHandler(SocketServer.StreamRequestHandler): directive_processor.process_directive(session, line) def handle_query(self, session, line): + if config.verbose: + print "%s query %s" % (self.client_address, line) query_processor.process_query(session, line) def usage(pname): - print """usage: %s schema_file data_file [data_file ...]""" % pname + print """\ +usage: %s [-v] schema_file data_file [data_file ...] + -v: verbose """ % pname sys.exit(64) def init(argv): import MemDB + import getopt - if len(argv) < 3: usage(argv[0]) - schema_file = argv[1] - data_files = argv[2:] + pname = argv[0] + opts, argv = getopt.getopt(argv[1:], 'v') + for o, a in opts: + if o == "-v": + config.verbose = True + if len(argv) < 2: usage(pname) + schema_file = argv[0] + data_files = argv[1:] + + db = MemDB.MemDB() db.init_schema(schema_file) @@ -110,17 +138,14 @@ def serve(): RwhoisHandler) # and handle incoming connections - try: + if config.verbose: if not config.server_address: print "listening on port %d" % config.port else: print "listening on %s port %d" % \ (config.server_address, config.port) - server.serve_forever() - except (KeyboardInterrupt, SystemExit): - print "interrupted. exiting." + server.serve_forever() - print "finished serving" sys.exit(0) if __name__ == "__main__": -- 2.36.6