source: server/lib/gutenbach/server/server.py @ ee8e6d0

no-cups
Last change on this file since ee8e6d0 was ee8e6d0, checked in by Jessica B. Hamrick <jhamrick@…>, 12 years ago

Fix error with HTTP server recreating printer objects

  • Property mode set to 100644
File size: 1.4 KB
RevLine 
[7bd1035]1from gutenbach.server.requests import GutenbachRequestHandler
[738d179]2import BaseHTTPServer
[7bd1035]3import gutenbach.ipp as ipp
[738d179]4import logging
[dc40fe9]5import sys
[aef164a]6import traceback
[7bd1035]7
8# initialize logger
9logger = logging.getLogger(__name__)
10
[ee8e6d0]11# initialize handler
12handler = GutenbachRequestHandler()
[7bd1035]13
[ee8e6d0]14class GutenbachIPPServer(BaseHTTPServer.BaseHTTPRequestHandler):
15    def do_POST(self):
[7bd1035]16        # Receive a request
17        length = int(self.headers.getheader('content-length', 0))
[ee8e6d0]18        if length == 0:
19            logger.warning("content-length == 0")
20            return
[7bd1035]21        request = ipp.Request(request=self.rfile, length=length)
22
[dc40fe9]23        # Get the handler and pass it the request and response
24        # objects.  It will fill in values for the response object or
[aef164a]25        # throw a fatal error.
26        logger.debug("Received request: %s" % repr(request))
[7bd1035]27        try:
[ee8e6d0]28            response = handler.handle(request)
[aef164a]29        except:
30            logger.fatal(traceback.format_exc())
31            sys.exit(1)
[7bd1035]32
33        # Send the response across HTTP
34        logger.debug("Sending response: %s" % repr(response))
[6effd50]35        try:
36            binary = response.packed_value
37        except:
38            logger.fatal(traceback.format_exc())
39            sys.exit(1)
40           
[7bd1035]41        self.send_response(200, "Gutenbach IPP Response")
42        self.send_header("Content-Type", "application/ipp")
43        self.send_header("Connection", "close")
44        self.end_headers()
[6effd50]45        self.wfile.write(binary)
Note: See TracBrowser for help on using the repository browser.