All pastes #837261 Raw Edit

timmeh

public python v1 · immutable
#837261 ·published 2007-12-29 14:05 UTC
rendered paste body
import 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')