commit 122080c3cbb2b50ad04a8d1b75447ca7ffe9fe84
parent 6d7c4756690a788f2d1cbcf4c5eb1c9aff91c91e
Author: Tomas Hlavaty <tom@logand.com>
Date:   Mon, 12 Aug 2013 00:36:40 +0200
curry the monstrosity
Diffstat:
| M | ipp.lisp |  |  | 726 | +++++++++++++++++++++++++++++-------------------------------------------------- | 
1 file changed, 261 insertions(+), 465 deletions(-)
diff --git a/ipp.lisp b/ipp.lisp
@@ -22,13 +22,22 @@
 
 (defpackage :ipp
   (:use :cl)
-  (:export :create-job
+  (:export :cancel-job
+           :create-job
+           :disable-printer
+           :enable-printer
+           :get-job-attributes
            :get-jobs
            :get-printer-attributes
+           :hold-job
            :list-printers
+           :make-job
+           :make-printer
            :pause-printer
            :print-job
            :purge-jobs
+           :release-job
+           :restart-job
            :resume-printer
            :validate-job))
 
@@ -92,12 +101,13 @@
                     (:copies . :integer)
                     (:sides . :keyword)
                     (:job-uri . :uri)
-                    (:job-id . nil)
+                    (:job-id . :integer)
                     (:job-state . nil)
                     (:job-state-reasons . nil)
                     (:limit . :integer)
                     (:requested-attributes . :keyword)
-                    (:status-message . :nameWithoutLanguage)  really?
+                    (:status-message . :textWithoutLanguage)
+                    (:message . :textWithoutLanguage) ;; TODO really?
                     (:marker-change-time . nil)
                     (:printer-current-time . nil)
                     (:printer-dns-sd-name . nil)
@@ -426,53 +436,78 @@
 (defun user-name ()
   (car (last (pathname-directory (user-homedir-pathname)))))
 
-(defun print-job (ipp-client
-                  printer-uri
-                  request-file
-                  response-file
-                  data-file
-                  request-id
-                  &key
-                    (attributes-charset "utf-8")
-                    (attributes-natural-language "en")
-                    (requesting-user-name (user-name))
-                    job-name
-                    (ipp-attribute-fidelity t)
-                    document-name
-                    document-format
-                    document-natural-language
-                    compression
-                    job-k-octets
-                    job-impressions
-                    job-media-sheets
-                    copies
-                    sides)
-  (ipp ipp-client
-       printer-uri
-       request-file
-       response-file
-       data-file
-       request-id
-       :print-job
-       `((,(tag :operation-attributes-tag)
-           :attributes-charset ,attributes-charset
-           :attributes-natural-language ,attributes-natural-language
-           :printer-uri ,printer-uri)
-         (,(tag :job-attributes-tag)
-           :requesting-user-name ,requesting-user-name
-           :job-name ,job-name
-           :ipp-attribute-fidelity ,ipp-attribute-fidelity
-           :document-name ,document-name
-           :document-format ,document-format
-           :document-natural-language ,document-natural-language
-           :compression ,compression
-           :job-k-octets ,job-k-octets
-           :job-impressions ,job-impressions
-           :job-media-sheets ,job-media-sheets
-           :copies ,copies
-           :sides ,sides))))
-
-(defun validate-job (ipp-client
+(defun get-printer-attributes (printer &key requested-attributes
+                                         document-format limit)
+  (funcall printer :get-printer-attributes
+           :requested-attributes requested-attributes
+           :document-format document-format
+           :limit limit))
+
+(defun pause-printer (printer)
+  (funcall printer :pause-printer))
+
+(defun resume-printer (printer)
+  (funcall printer :resume-printer))
+
+(defun enable-printer (printer)
+  (funcall printer :enable-printer))
+
+(defun disable-printer (printer)
+  (funcall printer :disable-printer))
+
+(defun create-job (printer)
+  (funcall printer :create-job))
+
+(defun purge-jobs (printer)
+  (funcall printer :purge-jobs))
+
+(defun get-jobs (printer &key requested-attributes which-jobs completed
+                           not-completed my-jobs limit)
+  (funcall printer :get-jobs
+           :requested-attributes requested-attributes
+           :which-jobs which-jobs
+           :completed completed
+           :not-completed not-completed
+           :my-jobs my-jobs
+           :limit limit))
+
+(defun print-job (printer data-file &key job-name (ipp-attribute-fidelity t)
+                                      document-name document-format
+                                      document-natural-language compression
+                                      job-k-octets job-impressions
+                                      job-media-sheets copies sides)
+  (funcall printer :print-job data-file
+           :job-name job-name
+           :ipp-attribute-fidelity ipp-attribute-fidelity
+           :document-name document-name
+           :document-format document-format
+           :document-natural-language document-natural-language
+           :compression compression
+           :job-k-octets job-k-octets
+           :job-impressions job-impressions
+           :job-media-sheets job-media-sheets
+           :copies copies
+           :sides sides))
+
+(defun validate-job (printer &key job-name (ipp-attribute-fidelity t)
+                               document-name document-format
+                               document-natural-language compression
+                               job-k-octets job-impressions
+                               job-media-sheets copies sides)
+  (funcall printer :validate-job
+           :job-name job-name
+           :ipp-attribute-fidelity ipp-attribute-fidelity
+           :document-name document-name
+           :document-format document-format
+           :document-natural-language document-natural-language
+           :compression compression
+           :job-k-octets job-k-octets
+           :job-impressions job-impressions
+           :job-media-sheets job-media-sheets
+           :copies copies
+           :sides sides))
+
+(defun make-printer (ipp-client
                      printer-uri
                      request-file
                      response-file
@@ -480,180 +515,99 @@
                      &key
                        (attributes-charset "utf-8")
                        (attributes-natural-language "en")
-                       (requesting-user-name (user-name))
-                       job-name
-                       (ipp-attribute-fidelity t)
-                       document-name
-                       document-format
-                       document-natural-language
-                       compression
-                       job-k-octets
-                       job-impressions
-                       job-media-sheets
-                       copies
-                       sides)
-  (ipp ipp-client
-       printer-uri
-       request-file
-       response-file
-       nil
-       request-id
-       :validate-job
-       `((,(tag :operation-attributes-tag)
-           :attributes-charset ,attributes-charset
-           :attributes-natural-language ,attributes-natural-language
-           :printer-uri ,printer-uri)
-         (,(tag :job-attributes-tag)
-           :requesting-user-name ,requesting-user-name
-           :job-name ,job-name
-           :ipp-attribute-fidelity ,ipp-attribute-fidelity
-           :document-name ,document-name
-           :document-format ,document-format
-           :document-natural-language ,document-natural-language
-           :compression ,compression
-           :job-k-octets ,job-k-octets
-           :job-impressions ,job-impressions
-           :job-media-sheets ,job-media-sheets
-           :copies ,copies
-           :sides ,sides))))
-
-(defun create-job (ipp-client
-                   printer-uri
-                   request-file
-                   response-file
-                   request-id
-                   &key
-                     (attributes-charset "utf-8")
-                     (attributes-natural-language "en"))
-  (ipp ipp-client
-       printer-uri
-       request-file
-       response-file
-       nil
-       request-id
-       :create-job
-       `((,(tag :operation-attributes-tag)
-           :attributes-charset ,attributes-charset
-           :attributes-natural-language ,attributes-natural-language
-           :printer-uri ,printer-uri))))
-
-;; TODO send-document
-
-(defun cancel-job (ipp-client
-                   printer-uri
-                   request-file
-                   response-file
-                   request-id
-                   job-id
-                   &key
-                     (attributes-charset "utf-8")
-                     (attributes-natural-language "en")
-                     (requesting-user-name (user-name))
-                     message)
-  (ipp ipp-client
-       printer-uri
-       request-file
-       response-file
-       nil
-       request-id
-       :cancel-job
-       `((,(tag :operation-attributes-tag)
-           :attributes-charset ,attributes-charset
-           :attributes-natural-language ,attributes-natural-language
-           :printer-uri ,printer-uri
-           :requesting-user-name ,requesting-user-name
-           :job-id ,job-id
-           :message ,message))))
-
-(defun get-job-attributes (ipp-client
-                           printer-uri
-                           request-file
-                           response-file
-                           request-id
-                           job-id
-                           &key
-                             (attributes-charset "utf-8")
-                             (attributes-natural-language "en")
-                             limit
-                             requested-attributes)
-  (assert (let ((x '(:job-template :job-description :all)))
-            (equal x (union x requested-attributes))))
-  (ipp ipp-client
-       printer-uri
-       request-file
-       response-file
-       nil
-       request-id
-       :get-job-attributes
-       `((,(tag :operation-attributes-tag)
-           :attributes-charset ,attributes-charset
-           :attributes-natural-language ,attributes-natural-language
-           :printer-uri ,printer-uri
-           :job-id ,job-id
-           :limit ,limit
-           :requested-attributes ,requested-attributes))))
-
-(defun get-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))
-                   limit
-                   requested-attributes
-                   which-jobs
-                   completed
-                   not-completed
-                   my-jobs)
-  (ipp ipp-client
-       printer-uri
-       request-file
-       response-file
-       nil
-       request-id
-       :get-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
-           :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)
-  (assert (let ((x '(:job-template :printer-description :all)))
-            (equal x (union x 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))))
-
-(defun hold-job (ipp-client
+                       (requesting-user-name (user-name)))
+  (lambda (msg &rest args)
+    (flet ((%ipp (&optional oa ja data-file)
+             (ipp ipp-client printer-uri request-file response-file data-file
+                  request-id msg
+                  `((,(tag :operation-attributes-tag)
+                      :attributes-charset ,attributes-charset
+                      :attributes-natural-language ,attributes-natural-language
+                      :requesting-user-name ,requesting-user-name
+                      :printer-uri ,printer-uri
+                      ,@oa)
+                    (,(tag :job-attributes-tag) ,@ja)))))
+      (ecase msg
+        (:get-printer-attributes
+         (destructuring-bind (&key requested-attributes document-format
+                                   limit) args
+           #+nil ;; TODO sort
+           (assert (let ((x '(:job-template :printer-description :all)))
+                     (equal x (union x requested-attributes))))
+           (%ipp (list :requested-attributes requested-attributes
+                       :document-format document-format
+                       :limit limit))))
+        ((:pause-printer :resume-printer :enable-printer :disable-printer
+                         :create-job :purge-jobs)
+         ;; TODO check spec for :enable-printer and :disable-printer
+         (destructuring-bind () args
+           (%ipp)))
+        (:get-jobs
+         (destructuring-bind (&key requested-attributes which-jobs completed
+                                   not-completed my-jobs limit) args
+           (%ipp (list :requested-attributes requested-attributes
+                       :which-jobs which-jobs
+                       :completed completed
+                       :not-completed not-completed
+                       :my-jobs my-jobs
+                       :limit limit))))
+        (:print-job
+         (destructuring-bind (data-file
+                              &key job-name (ipp-attribute-fidelity t)
+                              document-name document-format
+                              document-natural-language compression
+                              job-k-octets job-impressions
+                              job-media-sheets copies sides) args
+           (%ipp nil
+                 (list :job-name job-name
+                       :ipp-attribute-fidelity ipp-attribute-fidelity
+                       :document-name document-name
+                       :document-format document-format
+                       :document-natural-language document-natural-language
+                       :compression compression
+                       :job-k-octets job-k-octets
+                       :job-impressions job-impressions
+                       :job-media-sheets job-media-sheets
+                       :copies copies
+                       :sides sides)
+                 data-file)))
+        (:validate-job
+         (destructuring-bind (&key job-name (ipp-attribute-fidelity t)
+                                   document-name document-format
+                                   document-natural-language compression
+                                   job-k-octets job-impressions
+                                   job-media-sheets copies sides) args
+           (%ipp nil
+                 (list :job-name job-name
+                       :ipp-attribute-fidelity ipp-attribute-fidelity
+                       :document-name document-name
+                       :document-format document-format
+                       :document-natural-language document-natural-language
+                       :compression compression
+                       :job-k-octets job-k-octets
+                       :job-impressions job-impressions
+                       :job-media-sheets job-media-sheets
+                       :copies copies
+                       :sides sides))))))))
+
+(defun cancel-job (job &optional message)
+  (funcall job :cancel-job message))
+
+(defun get-job-attributes (job &key requested-attributes limit)
+  (funcall job :get-job-attributes
+           :requested-attributes requested-attributes
+           :limit limit))
+
+(defun hold-job (job &optional job-hold-until)
+  (funcall job :hold-job job-hold-until))
+
+(defun restart-job (job &optional job-hold-until)
+  (funcall job :restart-job job-hold-until))
+
+(defun release-job (job)
+  (funcall job :release-job))
+
+(defun make-job (ipp-client
                  printer-uri
                  request-file
                  response-file
@@ -662,149 +616,45 @@
                  &key
                    (attributes-charset "utf-8")
                    (attributes-natural-language "en")
-                   (requesting-user-name (user-name))
-                   job-hold-until)
-  (ipp ipp-client
-       printer-uri
-       request-file
-       response-file
-       nil
-       request-id
-       :hold-job
-       `((,(tag :operation-attributes-tag)
-           :attributes-charset ,attributes-charset
-           :attributes-natural-language ,attributes-natural-language
-           :printer-uri ,printer-uri
-           :requesting-user-name ,requesting-user-name
-           :job-id ,job-id
-           :job-hold-until ,job-hold-until))))
-
-(defun release-job (ipp-client
-                    printer-uri
-                    request-file
-                    response-file
-                    request-id
-                    job-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
-       :release-job
-       `((,(tag :operation-attributes-tag)
-           :attributes-charset ,attributes-charset
-           :attributes-natural-language ,attributes-natural-language
-           :printer-uri ,printer-uri
-           :requesting-user-name ,requesting-user-name
-           :job-id ,job-id))))
-
-(defun restart-job (ipp-client
-                    printer-uri
-                    request-file
-                    response-file
-                    request-id
-                    job-id
-                    &key
-                      (attributes-charset "utf-8")
-                      (attributes-natural-language "en")
-                      (requesting-user-name (user-name))
-                      job-hold-until)
-  (ipp ipp-client
-       printer-uri
-       request-file
-       response-file
-       nil
-       request-id
-       :restart-job
-       `((,(tag :operation-attributes-tag)
-           :attributes-charset ,attributes-charset
-           :attributes-natural-language ,attributes-natural-language
-           :printer-uri ,printer-uri
-           :requesting-user-name ,requesting-user-name
-           :job-id ,job-id
-           :job-hold-until ,job-hold-until))))
-
-(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
-;; TODO get-subscription-attributes
-;; TODO get-subscriptions
-;; TODO renew-subscription
-;; TODO cancel-subscription
-;; TODO get-notifications
-;; TODO enable-printer
-;; TODO disable-printer
+                   (requesting-user-name (user-name)))
+  (lambda (msg &rest args)
+    (flet ((%ipp (&optional attributes)
+             (ipp ipp-client printer-uri request-file response-file nil
+                  request-id msg
+                  `((,(tag :operation-attributes-tag)
+                      :attributes-charset ,attributes-charset
+                      :attributes-natural-language ,attributes-natural-language
+                      :requesting-user-name ,requesting-user-name
+                      :printer-uri ,printer-uri
+                      :job-id ,job-id
+                      ,@attributes)))))
+      (ecase msg
+        (:cancel-job
+         (destructuring-bind (&optional message) args
+           (%ipp (list :message message))))
+        (:get-job-attributes
+         (destructuring-bind (&key requested-attributes limit) args
+           #+nil ;; TODO sort
+           (assert (let ((x '(:job-template :job-description :all)))
+                     (equal x (union x requested-attributes))))
+           (%ipp (list :requested-attributes requested-attributes
+                       :limit limit))))
+        ((:hold-job :restart-job)
+         (destructuring-bind (&optional job-hold-until) args
+           (%ipp (list :job-hold-until job-hold-until))))
+        (:release-job
+         (destructuring-bind () args
+           (%ipp)))))))
+
+;; TODO send-document
+;; TODO ? set-job-attributes
+;; TODO ? create-printer-subscription
+;; TODO ? create-job-subscription
+;; TODO ? get-subscription-attributes
+;; TODO ? get-subscriptions
+;; TODO ? renew-subscription
+;; TODO ? cancel-subscription
+;; TODO ? get-notifications
 ;; TODO cups-get-default
 
 (defun cups-get-default (ipp-client
@@ -927,18 +777,7 @@
         :response-file response-file
         :content-type content-type))
 
-#+nil
-(ipp:print-job 'ipp-client
-               "http://localhost:631/printers/Virtual_PDF_Printer"
-               "request2.dat"
-               "response2.dat"
-               "test.txt"
-               314)
-
-#+nil
-(ipp:list-printers 'ipp-client
-                   "http://localhost:631/printers/"
-                   "printers.html")
+;;(ipp:list-printers 'ipp-client "http://localhost:631/printers/" "printers.html")
 
 (defpackage :ipp.curl
   (:use :cl)
@@ -968,88 +807,6 @@
         :content-type content-type))
 
 #+nil
-(ipp:print-job 'ipp-client
-               "http://localhost:631/printers/Virtual_PDF_Printer"
-               "request2.dat"
-               "response2.dat"
-               "test.txt"
-               314
-               :ipp-attribute-fidelity nil
-               :copies 2
-               :sides "two-sided-long-edge"
-               )
-
-#+nil
-(ipp:validate-job 'ipp-client
-                  "http://localhost:631/printers/Virtual_PDF_Printer"
-                  "request2.dat"
-                  "response2.dat"
-                  314
-                  :ipp-attribute-fidelity nil
-                  :copies 2
-                  :sides "two-sided-long-edge"
-                  )
-
-#+nil
-(ipp:create-job 'ipp-client
-                "http://localhost:631/printers/Virtual_PDF_Printer"
-                "create-jobs.in"
-                "create-jobs.out"
-                314)
-
-#+nil
-(ipp:get-printer-attributes
- 'ipp-client
- "http://localhost:631/printers/Virtual_PDF_Printer"
- "request2.dat"
- "response2.dat"
- 314)
-
-#+nil
-(ipp:get-printer-attributes ;; TODO fix
- '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"
-              "response2.dat"
-              314)
-
-#+nil
-(ipp:get-jobs 'ipp-client
-              "http://localhost:631/printers/Virtual_PDF_Printer"
-              "request2.dat"
-              "response2.dat"
-              314
-              :limit 2)
-
-#+nil
-(ipp:get-jobs 'ipp-client
-              "http://localhost:631/printers/Virtual_PDF_Printer"
-              "request2.dat"
-              "response2.dat"
-              314
-              :limit 2
-              :requested-attributes '(:job-id))
-
-#+nil
 (ipp::cups-get-default 'ipp-client
                        "http://localhost:631/printers/Virtual_PDF_Printer"
                        "request2.dat"
@@ -1063,7 +820,46 @@
                         "response2.dat"
                         314)
 
-#+nil
-(ipp:list-printers 'ipp-client
-                   "http://localhost:631/printers/"
-                   "printers.html")
+;;(ipp:list-printers 'ipp-client "http://localhost:631/printers/" "printers.html")
+
+(let ((p (ipp:make-printer
+          'ipp-client
+          "http://localhost:631/printers/Virtual_PDF_Printer"
+          "request2.dat"
+          "response2.dat"
+          314)))
+  (ipp:get-printer-attributes p)
+  ;;(ipp:get-printer-attributes p :limit 2)
+  ;;(ipp:get-printer-attributes p requested-attributes '(:all))
+  ;;TODO (ipp:get-printer-attributes p requested-attributes '(:printer-description))
+  ;;TODO (ipp:get-printer-attributes p requested-attributes '(:job-template))
+  ;;TODO (ipp:get-printer-attributes p requested-attributes '(:job-template :printer-description))
+  ;;TODO login (ipp:pause-printer p)
+  ;;TODO login (ipp:resume-printer p)
+  ;;TODO login (ipp:enable-printer p)
+  ;;TODO login (ipp:disable-printer p)
+  ;;(ipp:create-job p)
+  ;;TODO login (ipp:purge-jobs p)
+  ;;(ipp:get-jobs p)
+  ;;(ipp:get-jobs p :limit 2)
+  ;;(ipp:get-jobs p :requested-attributes '(:job-id))
+  ;;(ipp:get-jobs p :requested-attributes '(:job-description))
+  ;;(ipp:get-jobs p :requested-attributes '(:job-id :job-description))
+  ;;(ipp:get-jobs p :requested-attributes '(:all))
+  ;;(ipp:print-job p "test.txt" :ipp-attribute-fidelity nil :copies 2 :sides "two-sided-long-edge")
+  ;;(ipp:validate-job p :ipp-attribute-fidelity nil :copies 2 :sides "two-sided-long-edge")
+  )
+
+(let ((x (ipp:make-job
+          'ipp-client
+          "http://localhost:631/printers/Virtual_PDF_Printer"
+          "request2.dat"
+          "response2.dat"
+          314
+          100 #+nil"http://localhost:631/jobs/100")))
+  (ipp:cancel-job x "cancelling from cl-ipp")
+  ;;(ipp:get-job-attributes x)
+  ;;(ipp:hold-job x)
+  ;;(ipp:restart-job x)
+  ;;(ipp:release-job x)
+  )