3 import sys, socket, SocketServer
6 import QueryParser, QueryProcessor, DirectiveProcessor, Rwhois
9 # server-wide variables
11 query_processor = None
12 directive_processor = None
14 class RwhoisTCPServer(SocketServer.ThreadingTCPServer):
15 def __init__(self, server_address, RequestHandlerClass):
16 self.allow_reuse_address = True
17 SocketServer.TCPServer.__init__(self, server_address,
20 def verify_request(self, request, client_address):
21 # implement access control here
24 class RwhoisHandler(SocketServer.StreamRequestHandler):
28 return self.rfile.readline().strip()[:1024]
29 except KeyboardInterrupt:
35 self.quit_flag = False
38 self.wfile.write(config.banner_string);
39 self.wfile.write("\r\n");
42 session = Session.Context()
43 session.rfile = self.rfile
44 session.wfile = self.wfile
47 line = self.readline()
49 while not self.rfile.closed:
51 line = self.readline()
54 if line.startswith("-"):
55 self.handle_directive(session, line)
57 self.handle_query(session, line)
58 if not session.holdconnect:
63 # check to see if we were asked to quit
64 if self.quit_flag: break
67 line = self.readline()
69 print "done with", self.client_address
71 def handle_directive(self, session, line):
72 if (line.startswith("-quit")):
74 self.wfile.write(Rwhois.ok())
76 directive_processor.process_directive(session, line)
78 def handle_query(self, session, line):
79 query_processor.process_query(session, line)
83 print """usage: %s schema_file data_file [data_file ...]""" % pname
89 if len(argv) < 3: usage(argv[0])
95 db.init_schema(schema_file)
102 global query_processor, directive_processor
104 query_processor = QueryProcessor.QueryProcessor(db)
105 directive_processor = DirectiveProcessor.DirectiveProcessor(db)
108 # initialize the TCP server
109 server = RwhoisTCPServer((config.server_address, config.port),
112 # and handle incoming connections
114 if not config.server_address:
115 print "listening on port %d" % config.port
117 print "listening on %s port %d" % \
118 (config.server_address, config.port)
119 server.serve_forever()
120 except (KeyboardInterrupt, SystemExit):
121 print "interrupted. exiting."
123 print "finished serving"
126 if __name__ == "__main__":