rendered paste bodyimport SocketServerimport loggingimport syslogging.basicConfig(level=logging.DEBUG, format='%(asctime)s - [%(levelname)s %(name)s.%(funcName)s: %(message)s',)class ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): def __init__(self, addr, handler_class=HTTPRequestHandler): '''Initialise TCP Socket Server''' self.logger = logging.getLogger('HTTPServer') self.logger.debug('Initialising threaded HTTP Server') SocketServer.TCPServer.__init__(self, addr, handler_class) def server_activate(self): '''Called by constructor to start server''' self.logger.debug('Server activated') SocketServer.TCPServer.server_activate(self) def serve_forever(self): '''Start server''' self.logger.debug('Listening...') self.logger.info('Handling requests, <Ctrl-C> to quit') while(1): self.handle_request() return def handle_request(self): '''Handle one request, possibly blocking''' self.logger.debug('Request received') return SocketServer.TCPServer.handle_request(self) def verify_request(self, req, addr): '''Verify the request - return True to continue handline''' #put stuff here to deal with blocked IP adresses self.logger.debug('Verifying request from %s...' % addr) verified = SocketServer.TCPServer.verify_request(self, req, addr) if not verified: self.logger.debug('Verification failed! [End process]') return 0 self.logger.debug('Verification succeeded!') return 1 def process_request(self, req, addr): '''Actually process the request''' self.logger.debug('Processing request...') try: processed = SocketServer.ThreadingMixIn.process_request(self, req, addr) except: exc, exc_str = sys.exc_info() self.logger.critical('%s whilst processing request from %s' % (exc_str, addr)) return 0 else: return processed def finish_request(self, req, addr): '''Finalise anything to do with this request''' self.logger.debug('Finalised processing') class HTTPRequestHandler(SocketServer.BaseRequestHandler): def __init__(self, request, addr, server): '''Initialise HTTPRequestHandler''' self.logger = logging.getLogger('HTTPRequestHandler') self.logger.debug('Initialising HTTPRequestHandler') self.logger.debug('Connection to %s accepted' % addr) SocketServer.BaseRequestHandler.__init__(self, request, addr, server) def setup(self): '''Any setup for the request handler goes here''' self.logger.debug('Setting up HTTPRequestHandler') SocketServer.BaseRequestHandler.setup(self) def handle(self): '''Handle the HTTP request''' self.logger.debug('Handling request') data = '' while(recv = self.request.recv(1024)): data += recv header, body = data.split('\r\n\r\n') #for now just echo back the header self.request.send(header) def finish(self): '''Finalise any cleanup needed''' self.logger.debug('Finalise request')