Changeset 9eeab06 for server/lib
- Timestamp:
- Dec 18, 2011, 11:31:27 PM (12 years ago)
- Branches:
- no-cups
- Children:
- 0ede474
- Parents:
- b2e077a
- git-author:
- Jessica B. Hamrick <jhamrick@…> (12/18/11 23:31:27)
- git-committer:
- Jessica B. Hamrick <jhamrick@…> (12/18/11 23:31:27)
- Location:
- server/lib/gutenbach
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
server/lib/gutenbach/ipp/request.py
rd04a689 r9eeab06 238 238 239 239 def __repr__(self): 240 return '<IPPRequest (version=%r, operation_id=%x, request_id=%r, attribute_groups=%r)>' % (self.version, self.operation_id, self.request_id, self.attribute_groups) 240 val = '<IPPRequest (version=%r, ' % self.version 241 val += 'operation_id=%x, ' % self.operation_id 242 val += 'request_id=%r, ' % self.request_id 243 val += 'attribute_groups=%r)>' % self.attribute_groups 244 return val -
server/lib/gutenbach/server/requests.py
rb2e077a r9eeab06 32 32 # look up the handler 33 33 handler = None 34 handler_name = None 34 35 for d in dir(self): 35 36 if getattr(getattr(self, d), "ipp_operation", None) == request.operation_id: 36 handler = getattr(self, d)37 handler_name = d 37 38 break 38 39 # we couldn't find a handler, so default to unknown operation 39 if handler is None:40 handler = self.unknown_operation40 if handler_name is None: 41 handler_name = "unknown_operation" 41 42 # call the handler 43 handler = getattr(self, handler_name) 44 logger.debug("Sending request to handler '%s'" % handler_name) 42 45 handler(request, response) 43 46 44 47 def unknown_operation(self, request, response): 45 print "Received unknown operation %x" % request.operation_id48 logger.warning("Received unknown operation 0x%x" % request.operation_id) 46 49 response.operation_id = const.StatusCodes.OPERATION_NOT_SUPPORTED 50 51 ##### Helper functions 47 52 48 53 def _get_printer_attributes(self, printer, request, response): … … 64 69 65 70 # make sure the printer-uri value is appropriate 66 printer name_attr = request.attribute_groups[0]['printer-uri']67 printer name_value_tag = printername_attr.values[0].value_tag68 if printer name_value_tag != const.CharacterStringTags.URI:71 printer_name_attr = request.attribute_groups[0]['printer-uri'] 72 printer_name_value_tag = printer_name_attr.values[0].value_tag 73 if printer_name_value_tag != const.CharacterStringTags.URI: 69 74 raise MalformedIPPRequestException, \ 70 "Expected URI value tag, got %s" % printer name_value_tag75 "Expected URI value tag, got %s" % printer_name_value_tag 71 76 72 77 # actually get the printer name 73 printer name_value = printername_attr.values[0].value78 printer_name_value = printer_name_attr.values[0].value 74 79 # XXX: hack -- CUPS will strip the port from the request, so 75 80 # we can't do an exact comparison (also the hostname might be 76 81 # different, depending on the CNAME or whether it's localhost) 77 printername = printername_value.split("/")[-1] 78 79 # make sure the printername is valid 80 if printername not in self.printers: 81 raise ValueError, "Invalid printer uri: %s" % printername_value 82 83 return printername 82 printer_name = printer_name_value.split("/")[-1] 83 84 # make sure the printer name is valid 85 if printer_name not in self.printers: 86 raise ValueError, "Invalid printer uri: %s" % printer_name_value 87 88 return printer_name 89 90 ##### Printer Commands 91 92 def print_job(self, request, response): 93 pass 94 95 def validate_job(self, request, response): 96 pass 97 98 @handler_for(const.Operations.GET_JOBS) 99 def get_jobs(self, request, response): 100 printer_name = self._get_printer_name(request) 101 # Each job will append a new job attribute group. 102 for job in self.printers[printer_name].get_jobs(): 103 self._get_job_attributes(job, request, response) 104 response.operation_id = const.StatusCodes.OK 105 106 def print_uri(self, request, response): 107 pass 108 109 def create_job(self, request, response): 110 pass 111 112 def pause_printer(self, request, response): 113 pass 114 115 def resume_printer(self, request, response): 116 pass 117 118 @handler_for(const.Operations.GET_PRINTER_ATTRIBUTES) 119 def get_printer_attributes(self, request, response): 120 # this is just like cups_get_default, except the printer name 121 # is given 122 printer_name = self._get_printer_name(request) 123 self._get_printer_attributes(self.printers[printer_name], request, response) 124 response.operation_id = const.StatusCodes.OK 125 126 def set_printer_attributes(self, request, response): 127 pass 128 129 ##### Job Commands 130 131 def cancel_job(self, request, response): 132 pass 133 134 def send_document(self, request, response): 135 pass 136 137 def send_uri(self, request, response): 138 pass 139 140 def get_job_attributes(self, request, response): 141 printer_name = self._get_printer_name(request) 142 job_id = self._get_job_id(request) 143 self._get_job_attributes( 144 self.printers[printer_name].get_job(job_id), request, response) 145 146 def set_job_attributes(self, request, response): 147 pass 148 149 def cups_get_document(self, request, response): 150 pass 151 152 def restart_job(self, request, response): 153 pass 154 155 def promote_job(self, request, response): 156 pass 157 158 159 ##### CUPS Specific Commands 84 160 85 161 @handler_for(const.Operations.CUPS_GET_DEFAULT) 86 162 def cups_get_default(self, request, response): 87 print "get_default called"88 163 self._get_printer_attributes(self.printers[self.default], request, response) 89 response.operation_id = const.StatusCodes.OK90 91 @handler_for(const.Operations.GET_PRINTER_ATTRIBUTES)92 def get_printer_attributes(self, request, response):93 print "get_printer_attributes called"94 95 # this is just like cups_get_default, except the printer name96 # is given97 printername = self._get_printer_name(request)98 self._get_printer_attributes(self.printers[printername], request, response)99 164 response.operation_id = const.StatusCodes.OK 100 165 101 166 @handler_for(const.Operations.CUPS_GET_PRINTERS) 102 167 def cups_get_printers(self, request, response): 103 print "get_printers called"104 105 168 # Each printer will append a new printer attribute group. 106 169 for printer in self.printers: … … 110 173 @handler_for(const.Operations.CUPS_GET_CLASSES) 111 174 def cups_get_classes(self, request, response): 112 print "get_classes called"113 175 response.operation_id = const.StatusCodes.OK 114 176 # We have no printer classes, so nothing to return. 115 116 @handler_for(const.Operations.GET_JOBS)117 def get_jobs(self, request, response):118 print "get_jobs called"119 120 printername = self._get_printer_name(request)121 # Each job will append a new job attribute group.122 for job in self.printers[printername].get_jobs():123 self._get_job_attributes(job, request, response)124 response.operation_id = const.StatusCodes.OK125 177 126 178 class GutenbachIPPServer(BaseHTTPServer.BaseHTTPRequestHandler): … … 142 194 length = int(self.headers.getheader('content-length', 0)) 143 195 request = ipp.Request(request=self.rfile, length=length) 144 print "Received request:", repr(request)196 logger.debug("Received request: %s" % repr(request)) 145 197 146 198 # Attributes … … 168 220 # Get the handler and pass it the request and response objects 169 221 self.root.handle(request, response) 170 print "Sending response:", repr(response)222 logger.debug("Sending response: %s" % repr(response)) 171 223 172 224 # Send the response across HTTP … … 176 228 self.end_headers() 177 229 self.wfile.write(response.packed_value) 178 179 ##### Printer Commands180 181 def print_job(self, request):182 pass183 184 def validate_job(self, request):185 pass186 187 #def get_jobs(self, request):188 # pass189 190 def print_uri(self, request):191 pass192 193 def create_job(self, request):194 pass195 196 def pause_printer(self, request):197 pass198 199 def resume_printer(self, request):200 pass201 202 def set_printer_attributes(self, request):203 pass204 205 ##### Job Commands206 207 def cancel_job(self, request):208 pass209 210 def get_job_attributes(self, request):211 pass212 213 def send_document(self, request):214 pass215 216 def send_uri(self, request):217 pass218 219 def set_job_attributes(self, request):220 pass221 222 def cups_get_document(self, request):223 pass224 225 def restart_job(self, request):226 pass227 228 def promote_job(self, request):229 pass
Note: See TracChangeset
for help on using the changeset viewer.