Changeset 7c143c9 for server/lib/gutenbach/server
- Timestamp:
- Dec 27, 2011, 10:20:10 PM (12 years ago)
- Branches:
- no-cups
- Children:
- e58af05
- Parents:
- ee8e6d0
- git-author:
- Jessica B. Hamrick <jhamrick@…> (12/27/11 22:20:10)
- git-committer:
- Jessica B. Hamrick <jhamrick@…> (12/27/11 22:20:10)
- Location:
- server/lib/gutenbach/server
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
server/lib/gutenbach/server/printer.py
ree8e6d0 r7c143c9 67 67 self.jobs = {} 68 68 69 self._next_jobid = 0 69 # cups ignores jobs with id 0, so we have to start at 1 70 self._next_jobid = 1 70 71 71 72 def __getattr__(self, attr): … … 218 219 self.jobs[job_id] = job 219 220 self.active_jobs.append(job_id) 220 print self.active_jobs221 221 return job 222 222 -
server/lib/gutenbach/server/requests.py
ree8e6d0 r7c143c9 41 41 42 42 def __init__(self): 43 print "init"44 43 self.printers = { 45 44 "test": GutenbachPrinter(name="test") … … 89 88 # actually get the handler 90 89 handler = getattr(self, handler_name) 91 logger.info(" Handling request of type'%s'" % handler_name)90 logger.info("request is '%s'" % handler_name) 92 91 93 92 # try to handle the request … … 116 115 117 116 def unknown_operation(self, request, response): 118 logger.warning(" Receivedunknown operation 0x%x" % request.operation_id)117 logger.warning("unknown operation 0x%x" % request.operation_id) 119 118 response = make_empty_response(request) 120 119 response.operation_id = ipp.StatusCodes.OPERATION_NOT_SUPPORTED -
server/lib/gutenbach/server/server.py
ree8e6d0 r7c143c9 5 5 import sys 6 6 import traceback 7 import tempfile 7 8 8 9 # initialize logger … … 13 14 14 15 class GutenbachIPPServer(BaseHTTPServer.BaseHTTPRequestHandler): 16 def send_continue(self): 17 self.send_response(100, "continue") 18 self.send_header("Content-Type", "application/ipp") 19 self.end_headers() 20 21 def send_ok(self, response): 22 logger.debug(repr(response)) 23 binary, data_file = response.packed_value 24 25 self.send_response(200, "ok") 26 self.send_header("Content-Type", "application/ipp") 27 self.send_header("Connection", "close") 28 self.end_headers() 29 30 self.wfile.write(binary) 31 if data_file is not None: 32 data = data_file.read(1024) 33 while data != '': 34 self.wfile.write(data) 35 data = data_file.read(1024) 36 37 def log_request(self, code=0, size=0): 38 logger.info("response (%s)" % code) 39 40 def log_message(self, fmt, *args): 41 logger.info(fmt % args) 42 43 def read_chunks(self): 44 size = sys.maxint 45 totalsize = 0 46 47 with tempfile.SpooledTemporaryFile() as tmp: 48 while size > 0: 49 a, b = self.rfile.read(2) 50 size = a + b 51 while not (a == "\r" and b == "\n"): 52 a = b 53 b = self.rfile.read(1) 54 size += b 55 size = int(size[:-2], base=16) 56 totalsize += size 57 chunk = self.rfile.read(size) 58 clrf = self.rfile.read(2) 59 assert clrf == "\r\n" 60 tmp.write(chunk) 61 62 tmp.seek(0) 63 request = ipp.Request(request=tmp, length=totalsize) 64 65 return request 66 15 67 def do_POST(self): 16 # Receive a request17 68 length = int(self.headers.getheader('content-length', 0)) 18 if length == 0: 19 logger.warning("content-length == 0") 20 return 21 request = ipp.Request(request=self.rfile, length=length) 69 expect = self.headers.getheader('expect', None) 70 encoding = self.headers.getheader('transfer-encoding', None) 71 72 logger.info("request %s (%d bytes)" % (self.command, length)) 73 logger.debug(str(self.headers)) 74 75 # Parse the request 76 if length == 0 and encoding == "chunked": 77 request = self.read_chunks() 78 else: 79 request = ipp.Request(request=self.rfile, length=length) 22 80 23 81 # Get the handler and pass it the request and response 24 82 # objects. It will fill in values for the response object or 25 83 # throw a fatal error. 26 logger.debug("Received request: %s" % repr(request)) 27 try: 28 response = handler.handle(request) 29 except: 30 logger.fatal(traceback.format_exc()) 31 sys.exit(1) 32 33 # Send the response across HTTP 34 logger.debug("Sending response: %s" % repr(response)) 35 try: 36 binary = response.packed_value 37 except: 38 logger.fatal(traceback.format_exc()) 39 sys.exit(1) 40 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() 45 self.wfile.write(binary) 84 logger.debug("request: %s" % repr(request)) 85 response = handler.handle(request) 86 self.send_ok(response)
Note: See TracChangeset
for help on using the changeset viewer.