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

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

Move ipp error handling out of the server and into server/requests

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