commit 2f70e1c133ffad7b5d33ca7775b1f3f06185e891
parent b8cb0ca1acac411e0dc1672b36b8288f62f18c70
Author: Tomas Hlavaty <tom@logand.com>
Date: Sun, 11 Aug 2013 00:39:15 +0200
implemented get-printer-attributes pause-printer purge-jobs resume-printer
Diffstat:
M | ipp.lisp | | | 187 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- |
1 file changed, 170 insertions(+), 17 deletions(-)
diff --git a/ipp.lisp b/ipp.lisp
@@ -24,8 +24,12 @@
(:use :cl)
(:export :create-job
:get-jobs
+ :get-printer-attributes
:list-printers
+ :pause-printer
:print-job
+ :purge-jobs
+ :resume-printer
:validate-job))
(in-package :ipp)
@@ -77,22 +81,34 @@
(:requesting-user-name . :nameWithoutLanguage)
(:job-name . :nameWithoutLanguage)
(:ipp-attribute-fidelity . :boolean)
- (:document-name . nil)
- (:document-format . nil)
+ (:document-name . nil) ;; TODO
+ (:document-format . nil) ;; TODO
(:document-natural-language . :naturalLanguage)
- (:compression . nil)
- (:job-k-octets . nil)
- (:job-impressions . nil)
- (:job-media-sheets . nil)
+ (:compression . nil) ;; TODO
+ (:job-k-octets . nil) ;; TODO
+ (:job-impressions . nil) ;; TODO
+ (:job-media-sheets . nil) ;; TODO
(:copies . :integer)
(:sides . :keyword)
- (:job-uri . nil)
- (:job-id . nil)
- (:job-state . nil)
- (:job-state-reasons . nil)
+ (:job-uri . :uri)
+ (:job-id . nil) ;; TODO
+ (:job-state . nil) ;; TODO
+ (:job-state-reasons . nil) ;; TODO
(:limit . :integer)
(:requested-attributes . :keyword)
(:status-message . :nameWithoutLanguage) ;; TODO really?
+ (:marker-change-time . nil) ;; TODO
+ (:printer-current-time . nil) ;; TODO
+ (:printer-dns-sd-name . nil) ;; TODO
+ (:printer-is-accepting-jobs . nil) ;; TODO
+ (:printer-error-policy . nil) ;; TODO
+ (:printer-error-policy-supported . nil) ;; TODO
+ (:job-sheets-default . nil)
+ (:all . nil)
+ (:which-jobs . nil) ;; TODO
+ (:completed . nil) ;; TODO
+ (:not-completed . nil) ;; TODO
+ (:my-jobs . nil) ;; TODO
)))
(defun attribute-tag (attribute)
@@ -119,7 +135,8 @@
(defun read-value (reader tag)
(ecase tag
- ;; :no-value
+ (:no-value
+ (assert (= 0 (rw:next-u16 reader))))
((:integer :enum)
(assert (= 4 (rw:next-u16 reader)))
(rw:next-u32 reader))
@@ -127,7 +144,18 @@
(assert (= 1 (rw:next-u16 reader)))
(not (zerop (rw:next-u32 reader))))
;; :octetString
- ;; :dateTime
+ (:dateTime
+ (assert (= 11 (rw:next-u16 reader)))
+ `(:dateTime ,(rw:next-u16 reader)
+ ,(rw:next-u8 reader)
+ ,(rw:next-u8 reader)
+ ,(rw:next-u8 reader)
+ ,(rw:next-u8 reader)
+ ,(rw:next-u8 reader)
+ ,(rw:next-u8 reader)
+ ,(rw:next-u8 reader)
+ ,(rw:next-u8 reader)
+ ,(rw:next-u8 reader)))
;; :resolution
;; :rangeOfInteger
((:textWithLanguage
@@ -428,8 +456,13 @@
&key
(attributes-charset "utf-8")
(attributes-natural-language "en")
+ (requesting-user-name (user-name))
limit
- requested-attributes)
+ requested-attributes
+ which-jobs
+ completed
+ not-completed
+ my-jobs)
(ipp ipp-client
printer-uri
request-file
@@ -441,16 +474,108 @@
:attributes-charset ,attributes-charset
:attributes-natural-language ,attributes-natural-language
:printer-uri ,printer-uri
+ :requesting-user-name ,requesting-user-name
+ :limit ,limit
+ :requested-attributes ,requested-attributes
+ :which-jobs ,which-jobs
+ :completed ,completed
+ :not-completed ,not-completed
+ :my-jobs ,my-jobs))))
+
+(defun get-printer-attributes (ipp-client
+ printer-uri
+ request-file
+ response-file
+ request-id
+ &key
+ (attributes-charset "utf-8")
+ (attributes-natural-language "en")
+ limit
+ requested-attributes)
+ (ipp ipp-client
+ printer-uri
+ request-file
+ response-file
+ nil
+ request-id
+ :get-printer-attributes
+ `((,(tag :operation-attributes-tag)
+ :attributes-charset ,attributes-charset
+ :attributes-natural-language ,attributes-natural-language
+ :printer-uri ,printer-uri
:limit ,limit
:requested-attributes ,requested-attributes))))
-;; TODO get-printer-attributes
;; TODO hold-job
;; TODO release-job
;; TODO restart-job
-;; TODO pause-printer
-;; TODO resume-printer
-;; TODO purge-jobs
+
+(defun pause-printer (ipp-client
+ printer-uri
+ request-file
+ response-file
+ request-id
+ &key
+ (attributes-charset "utf-8")
+ (attributes-natural-language "en")
+ (requesting-user-name (user-name)))
+ (ipp ipp-client
+ printer-uri
+ request-file
+ response-file
+ nil
+ request-id
+ :pause-printer
+ `((,(tag :operation-attributes-tag)
+ :attributes-charset ,attributes-charset
+ :attributes-natural-language ,attributes-natural-language
+ :printer-uri ,printer-uri
+ :requesting-user-name ,requesting-user-name))))
+
+(defun resume-printer (ipp-client
+ printer-uri
+ request-file
+ response-file
+ request-id
+ &key
+ (attributes-charset "utf-8")
+ (attributes-natural-language "en")
+ (requesting-user-name (user-name)))
+ (ipp ipp-client
+ printer-uri
+ request-file
+ response-file
+ nil
+ request-id
+ :resume-printer
+ `((,(tag :operation-attributes-tag)
+ :attributes-charset ,attributes-charset
+ :attributes-natural-language ,attributes-natural-language
+ :printer-uri ,printer-uri
+ :requesting-user-name ,requesting-user-name))))
+
+(defun purge-jobs (ipp-client
+ printer-uri
+ request-file
+ response-file
+ request-id
+ &key
+ (attributes-charset "utf-8")
+ (attributes-natural-language "en")
+ (requesting-user-name (user-name)))
+ (ipp ipp-client
+ printer-uri
+ request-file
+ response-file
+ nil
+ request-id
+ :purge-jobs
+ `((,(tag :operation-attributes-tag)
+ :attributes-charset ,attributes-charset
+ :attributes-natural-language ,attributes-natural-language
+ :printer-uri ,printer-uri
+ :requesting-user-name ,requesting-user-name))))
+
;; TODO set-job-attributes
;; TODO create-printer-subscription
;; TODO create-job-subscription
@@ -614,6 +739,34 @@
314)
#+nil
+(ipp:get-printer-attributes ;; TODO fix read-attribute
+ 'ipp-client
+ "http://localhost:631/printers/Virtual_PDF_Printer"
+ "request2.dat"
+ "response2.dat"
+ 314)
+
+#+nil
+(ipp:get-printer-attributes
+ 'ipp-client
+ "http://localhost:631/printers/Virtual_PDF_Printer"
+ "request2.dat"
+ "response2.dat"
+ 314
+ :limit 2
+ :requested-attributes '(:job-template :printer-description))
+
+#+nil
+(ipp:get-printer-attributes
+ 'ipp-client
+ "http://localhost:631/printers/Virtual_PDF_Printer"
+ "request2.dat"
+ "response2.dat"
+ 314
+ :limit 2
+ :requested-attributes '(:all))
+
+#+nil
(ipp:get-jobs 'ipp-client
"http://localhost:631/printers/Virtual_PDF_Printer"
"request2.dat"