1 package com
.google
.code
.jspi
;
3 import java
.io
.ByteArrayOutputStream
;
4 import java
.io
.FileOutputStream
;
5 import java
.io
.IOException
;
6 import java
.io
.InputStream
;
8 import java
.net
.URISyntaxException
;
9 import java
.util
.Enumeration
;
10 import java
.util
.HashMap
;
13 import javax
.servlet
.ServletException
;
14 import javax
.servlet
.ServletInputStream
;
15 import javax
.servlet
.http
.HttpServlet
;
16 import javax
.servlet
.http
.HttpServletRequest
;
17 import javax
.servlet
.http
.HttpServletResponse
;
19 import de
.lohndirekt
.print
.attribute
.IppStatus
;
20 import de
.lohndirekt
.print
.attribute
.ipp
.printerdesc
.supported
.OperationsSupported
;
21 import de
.lohndirekt
.print
.attribute
.ipp
.printerdesc
.supported
.PrinterUriSupported
;
24 * Servlet implementation class IppServlet
26 public class IppServlet
extends HttpServlet
{
27 private static final long serialVersionUID
= 1L;
29 private Map attributes
;
30 private OperationsSupported operationId
;
31 private byte[] jobdata
;
34 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
37 protected void doPost(HttpServletRequest request
, HttpServletResponse response
) throws ServletException
, IOException
{
39 System
.out
.println("");
40 System
.out
.println("H E A D E R S");
41 System
.out
.println("");
42 Enumeration headerNames
= request
.getHeaderNames();
43 while (headerNames
.hasMoreElements()) {
44 String headerName
= (String
) headerNames
.nextElement();
46 .println(headerName
+ ":" + request
.getHeader(headerName
));
48 System
.out
.println("");
49 System
.out
.println("B O D Y");
50 System
.out
.println("");
51 ServletInputStream inputStream
= request
.getInputStream();
52 parseRequest(inputStream
);
53 System
.out
.println("Operazione richiesta : 0x"
54 + Integer
.toHexString(this.operationId
.getValue()));
55 if (this.operationId
.getValue() == OperationsSupported
.CUPS_GET_PRINTERS
57 IppResponseIppImpl ippresponse
= new IppResponseIppImpl(
58 IppStatus
.SUCCESSFUL_OK
);
60 ippresponse
.getPrinterAttributes().add(
61 new PrinterUriSupported(new URI(
62 "http://127.0.0.1:9090/ipp/IppServlet")));
63 } catch (URISyntaxException e
) {
66 ippresponse
.write(response
.getOutputStream());
69 if (this.operationId
.getValue() == OperationsSupported
.PRINT_JOB
71 IppResponseIppImpl ippresponse
= new IppResponseIppImpl(
72 IppStatus
.SUCCESSFUL_OK
);
73 ippresponse
.write(response
.getOutputStream());
74 java
.io
.File tempFile
= java
.io
.File
75 .createTempFile("unijob", "tmp");
76 FileOutputStream faos
= new FileOutputStream(tempFile
);
77 faos
.write(this.jobdata
);
79 System
.out
.println("Scritti : [" + this.jobdata
.length
80 + "] bytes in : [" + tempFile
.getAbsolutePath() + "]");
83 response
.getOutputStream().close();
86 private void parseRequest(InputStream request
) throws IOException
{
87 byte[] header
= new byte[8];
89 this.operationId
= new OperationsSupported((header
[2] << 8) + header
[3]);
90 if (request
.available() != 0) {
91 this.attributes
= AttributeParser
.parseRequest(request
);
93 this.attributes
= new HashMap();
95 ByteArrayOutputStream baos
= new ByteArrayOutputStream();
96 while (request
.available() != 0) {
97 baos
.write(request
.read());
100 this.jobdata
= baos
.toByteArray();