source: server/lib/server.py @ c5e88d0

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

get-jobs response in GutenbachIPPserver

  • Property mode set to 100755
File size: 4.0 KB
Line 
1#!/usr/bin/python
2
3import logging, BaseHTTPServer
4from ipprequest import *
5import ippconstants as const
6
7logging.basicConfig(level=logging.DEBUG)
8
9class GutenbachIPPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
10    def handle_one_request(self):
11        self.raw_requestline = self.rfile.readline()
12        if not self.raw_requestline:
13            self.close_connection = 1
14            return
15        if not self.parse_request(): # An error code has been sent, just exit
16            return
17        self.handle_ipp()
18
19    def handle_ipp(self):
20        length = int(self.headers.getheader('content-length', 0))
21        request = IPPRequest(request=self.rfile,
22                             length=length)
23
24        response_kwargs = {}
25        response_kwargs['version'] = request.version
26        response_kwargs['request_id'] = request.request_id
27        response_kwargs = self.get_jobs(request, response_kwargs)
28        response = IPPRequest(**response_kwargs)
29
30        self.send_response(200, "o hai")
31        self.send_header("Content-Type", "application/ipp")
32        self.send_header("Connection", "close")
33        self.end_headers()
34        self.wfile.write(response.toBinaryData())
35
36    def get_jobs(self, request, response_kwargs):
37        """get-jobs response"""
38
39        job_attributes = [IPPAttribute('job-id',
40                                       [IPPValue(IPPTags.INTEGER,
41                                                 12345,
42                                                 unpack=False)]),
43                          IPPAttribute('job-name',
44                                       [IPPValue(IPPTags.NAME_WITHOUT_LANGUAGE,
45                                                 'foo',
46                                                 unpack=False)]),
47                          IPPAttribute('job-originating-user-name',
48                                       [IPPValue(IPPTags.NAME_WITHOUT_LANGUAGE,
49                                                 'jhamrick',
50                                                 unpack=False)]),
51                          IPPAttribute('job-k-octets',
52                                       [IPPValue(IPPTags.INTEGER,
53                                                 1,
54                                                 unpack=False)]),
55                          IPPAttribute('job-state',
56                                       [IPPValue(IPPTags.ENUM,
57                                                 const.IPP_JOB_HELD,
58                                                 unpack=False)]),
59                          IPPAttribute('job-printer-uri',
60                                       [IPPValue(IPPTags.URI,
61                                                 'http://localhost:8000/printers/foo',
62                                                 unpack=False)])]
63
64
65        #req_op_attributes = request.getAttributeGroup(IPPTags.OPERATION_ATTRIBUTES_TAG)
66        #print req_op_attributes
67        #printer_uri = req_op_attributes[0].getAttribute('printer-uri')
68
69        op_attributes = [IPPAttribute('attributes-charset',
70                                      [IPPValue(IPPTags.CHARSET,
71                                                'utf-8',
72                                                unpack=False)]),
73                         IPPAttribute('attributes-natural-language',
74                                      [IPPValue(IPPTags.NATURAL_LANGUAGE,
75                                                'en-us',
76                                                unpack=False)])]
77       
78        job_attribute_group = IPPAttributeGroup(IPPTags.JOB_ATTRIBUTES_TAG,
79                                                job_attributes)
80        op_attributes_group = IPPAttributeGroup(IPPTags.OPERATION_ATTRIBUTES_TAG,
81                                                op_attributes)
82        response_kwargs['attribute_groups'] = [op_attributes_group,job_attribute_group]
83        response_kwargs['operation_id'] = const.IPP_OK
84
85        return response_kwargs
86
87if __name__ == '__main__':
88    server_address = ('', 8000)
89    httpd = BaseHTTPServer.HTTPServer(server_address, GutenbachIPPHandler)
90    httpd.serve_forever()
Note: See TracBrowser for help on using the repository browser.