idnits 2.17.00 (12 Aug 2021) /tmp/idnits26659/draft-ietf-ipp-implementers-guide-v11-00.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** Looks like you're using RFC 2026 boilerplate. This must be updated to follow RFC 3978/3979, as updated by RFC 4748. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- ** Missing expiration date. The document expiration date should appear on the first and last page. ** The document seems to lack a 1id_guidelines paragraph about Internet-Drafts being working documents. ** The document seems to lack a 1id_guidelines paragraph about the list of Shadow Directories -- however, there's a paragraph with a matching beginning. Boilerplate error? ** The document is more than 15 pages and seems to lack a Table of Contents. == No 'Intended status' indicated for this document; assuming Proposed Standard == The page length should not exceed 58 lines per page, but there was 70 longer pages, the longest (page 2) being 116 lines == It seems as if not all pages are separated by form feeds - found 0 form feeds but 71 pages Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) ** The document seems to lack separate sections for Informative/Normative References. All references will be assumed normative when checking for downward references. ** The abstract seems to contain references ([RFC2568], [RFC2569], [IPP-PRO], [IPP-MOD], [RFC2567]), which it shouldn't. Please replace those with straight textual mentions of the documents in question. == There are 12 instances of lines with non-RFC6890-compliant IPv4 addresses in the document. If these are example addresses, they should be changed. ** The document seems to lack a both a reference to RFC 2119 and the recommended RFC 2119 boilerplate, even if it appears to use RFC 2119 keywords. RFC 2119 keyword, line 118: '...e the values of the REQUIRED Operation...' RFC 2119 keyword, line 120: '...e the values of the OPTIONAL Operation...' RFC 2119 keyword, line 194: '...ueued-job-count" RECOMMENDED (Issue 1....' RFC 2119 keyword, line 217: '... 7.5 OPTIONAL SUPPORT FOR HTTP/1.0.......' RFC 2119 keyword, line 230: '... operation attributes that sender MUST...' (131 more instances...) Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the RFC 3978 Section 5.4 Copyright Line does not match the current year == Line 336 has weird spacing: '...section corre...' == Line 438 has weird spacing: '...Release ons...' == Line 469 has weird spacing: '...tar Job tion...' == Line 470 has weird spacing: '... utes t-Jo...' == Line 503 has weird spacing: '... te-Job t- ...' == (39 more instances...) == The expression 'MAY NOT', while looking like RFC 2119 requirements text, is not defined in RFC 2119, and should not be used. Consider using 'MUST NOT' instead (if that is what you mean). Found 'MAY NOT' in this paragraph: OPTIONAL Operation attributes are those that an IPP object MAY or MAY NOT support. An IPP object validates the values of the OPTIONAL attributes supplied by the client. The IPP object performs the same syntactic validation checks for each OPTIONAL attribute value as in Section 3.1.2.1.5. As in Section 3.1.2.1.5, if any fail, the IPP object REJECTS the request and RETURNS the 'client-error-bad-request' or the 'client-error-request-value-too-long' status code. -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (September 27, 1999) is 8271 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Missing Reference: 'RFC2568' is mentioned on line 53, but not defined == Missing Reference: 'RFC2119' is mentioned on line 278, but not defined == Missing Reference: 'RFC2044' is mentioned on line 2121, but not defined ** Obsolete undefined reference: RFC 2044 (Obsoleted by RFC 2279) == Missing Reference: 'IANA-CS' is mentioned on line 2123, but not defined == Missing Reference: 'RFC1305' is mentioned on line 3101, but not defined ** Obsolete undefined reference: RFC 1305 (Obsoleted by RFC 5905) == Missing Reference: 'RFC2132' is mentioned on line 3101, but not defined == Unused Reference: 'RFC2396' is defined on line 3536, but no explicit reference was found in the text == Unused Reference: 'RFC2565' is defined on line 3542, but no explicit reference was found in the text == Unused Reference: 'RFC2566' is defined on line 3547, but no explicit reference was found in the text == Unused Reference: 'SSL' is defined on line 3572, but no explicit reference was found in the text -- Possible downref: Non-RFC (?) normative reference: ref. 'CGI' == Outdated reference: draft-ietf-ipp-model-v11 has been published as RFC 2911 == Outdated reference: draft-ietf-ipp-protocol-v11 has been published as RFC 2910 ** Obsolete normative reference: RFC 2396 (Obsoleted by RFC 3986) ** Obsolete normative reference: RFC 2566 (ref. 'RFC2565') (Obsoleted by RFC 2911) ** Obsolete normative reference: RFC 2565 (ref. 'RFC2566') (Obsoleted by RFC 2910) == Outdated reference: draft-ietf-ipp-req has been published as RFC 2567 ** Downref: Normative reference to an Experimental draft: draft-ietf-ipp-req (ref. 'RFC2567') ** Downref: Normative reference to an Experimental RFC: RFC 2569 ** Obsolete normative reference: RFC 2616 (Obsoleted by RFC 7230, RFC 7231, RFC 7232, RFC 7233, RFC 7234, RFC 7235) -- Possible downref: Non-RFC (?) normative reference: ref. 'Servlet' -- Possible downref: Non-RFC (?) normative reference: ref. 'SSL' Summary: 17 errors (**), 0 flaws (~~), 25 warnings (==), 5 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 INTERNET-DRAFT 2 draft-ietf-ipp-implementers-guide-v11-00.txt 3 T. Hastings 4 Xerox Corporation 5 C. Manros 6 Xerox Corporation 7 C. Kugler 8 IBM Printing Systems Co 9 H. Holst 10 i-data Printing Systems 11 September 27, 1999 13 Internet Printing Protocol/1.1: Implementer's Guide 15 Copyright (C) The Internet Society (1999). All Rights Reserved. 17 Status of this Memo 19 This document is an Internet-Draft and is in full conformance with all 20 provisions of Section 10 of [RFC2026]. Internet-Drafts are working 21 documents of the Internet Engineering Task Force (IETF), its areas, and 22 its working groups. Note that other groups may also distribute working 23 documents as Internet-Drafts. 25 Internet-Drafts are draft documents valid for a maximum of six months 26 and may be updated, replaced, or obsoleted by other documents at any 27 time. It is inappropriate to use Internet-Drafts as reference material 28 or to cite them other than as "work in progress". 30 The list of current Internet-Drafts can be accessed at 31 http://www.ietf.org/ietf/1id-abstracts.txt 33 The list of Internet-Draft Shadow Directories can be accessed as 34 http://www.ietf.org/shadow.html. 36 Abstract 38 This document is one of a set of documents, which together describe all 39 aspects of a new Internet Printing Protocol (IPP). IPP is an 40 application level protocol that can be used for distributed printing 41 using Internet tools and technologies. This document contains 42 information that supplements the IPP Model and Semantics [IPP-MOD] and 43 the IPP Transport and Encoding [IPP-PRO] documents. It is intended to 44 help implementers understand IPP/1.1, as well as IPP/1.0, and some of 45 the considerations that may assist them in the design of their client 46 and/or IPP object implementations. For example, a typical order of 47 processing requests is given, including error checking. Motivation for 48 some of the specification decisions is also included. 50 The full set of IPP documents includes: 51 Design Goals for an Internet Printing Protocol [RFC2567] 52 Rationale for the Structure and Model and Protocol for the Internet 53 Printing Protocol [RFC2568] 54 Internet Printing Protocol/1.1: Model and Semantics [IPP-MOD] 55 Internet Printing Protocol/1.1: Encoding and Transport [IPP-PRO] 56 Mapping between LPD and IPP Protocols [RFC2569] 58 The document, "Design Goals for an Internet Printing Protocol", takes a 59 broad look at distributed printing functionality, and it enumerates 60 real-life scenarios that help to clarify the features that need to be 61 included in a printing protocol for the Internet. It identifies 62 requirements for three types of users: end users, operators, and 63 administrators. The design goal document calls out a subset of end user 64 requirements that are satisfied in IPP/1.1. Operator and administrator 65 requirements are out of scope for version 1.1. 67 The document, "Rationale for the Structure and Model and Protocol for 68 the Internet Printing Protocol", describes IPP from a high level view, 69 defines a roadmap for the various documents that form the suite of IPP 70 specifications, and gives background and rationale for the IETF working 71 group's major decisions. 73 The document, "Internet Printing Protocol/1.1: Model and Semantics", 74 describes a simplified model with abstract objects, their attributes, 75 and their operations. The model introduces a Printer and a Job. The 76 Job supports multiple documents per Job. The model document also 77 addresses how security, internationalization, and directory issues are 78 addressed. 80 The document, "Internet Printing Protocol/1.1: Encoding and Transport", 81 is a formal mapping of the abstract operations and attributes defined in 82 the model document onto HTTP/1.1. It also defines the encoding rules 83 for a new Internet media type called "application/ipp". 85 The document, "Mapping between LPD and IPP Protocols", gives some advice 86 to implementers of gateways between IPP and LPD (Line Printer Daemon) 87 implementations. 89 Expires March 27, 2000 90 TABLE OF CONTENTS 92 1 INTRODUCTION......................................................6 94 1.1 CONFORMANCE LANGUAGE...........................................6 95 1.2 OTHER TERMINOLOGY..............................................6 96 1.3 ISSUES RAISED FROM INTEROPERABILITY BAKE OFFS..................7 98 2 IPP OBJECTS.......................................................7 100 3 IPP OPERATIONS....................................................7 102 3.1 COMMON SEMANTICS...............................................7 103 3.1.1 Summary of Operation Attributes.............................8 104 3.1.2 Suggested Operation Processing Steps for IPP Objects (Issue 105 1.21) 12 106 3.1.2.1 Suggested Operation Processing Steps for all Operations 14 107 3.1.2.1.1 Validate version number.............................14 108 3.1.2.1.2 Validate operation identifier.......................15 109 3.1.2.1.3 Validate the request identifier.....................16 110 3.1.2.1.4 Validate attribute group and attribute presence and 111 order 16 112 3.1.2.1.4.1 Validate the presence and order of attribute groups 113 16 114 3.1.2.1.4.2Ignore unknown attribute groups in the expected 115 position....................................................16 116 3.1.2.1.4.3Validate the presence of a single occurrence of 117 required Operation attributes...............................17 118 3.1.2.1.5 Validate the values of the REQUIRED Operation 119 attributes23 120 3.1.2.1.6 Validate the values of the OPTIONAL Operation 121 attributes27 122 3.1.2.2 Suggested Additional Processing Steps for Operations that 123 Create/Validate Jobs and Add Documents..........................30 124 3.1.2.2.1 Default "ipp-attribute-fidelity" if not supplied....30 125 3.1.2.2.2 Check that the Printer object is accepting jobs.....30 126 3.1.2.2.3 Validate the values of the Job Template attributes..30 127 3.1.2.3 Algorithm for job validation...........................31 128 3.1.2.3.1 Check for conflicting Job Template attributes values 36 129 3.1.2.3.2 Decide whether to REJECT the request................37 130 3.1.2.3.3 For the Validate-Job operation, RETURN one of the 131 success status codes..........................................38 132 3.1.2.3.4 Create the Job object with attributes to support....38 133 3.1.2.3.5 Return one of the success status codes..............40 134 3.1.2.3.6 Accept appended Document Content....................40 135 3.1.2.3.7 Scheduling and Starting to Process the Job..........40 136 3.1.2.3.8 Completing the Job..................................41 137 3.1.2.3.9 Destroying the Job after completion.................41 138 3.1.2.3.10Interaction with "ipp-attribute-fidelity"...........41 139 3.1.2.3.11Character set code conversion support (Issue 1.5)...41 140 3.1.2.3.12What charset to return when an unsupported charset is 141 requested (Issue 1.19)?.......................................42 142 3.1.2.3.13Natural Language Override (NLO) (Issue 1.45)........43 143 3.1.3 Status codes returned by operation (Issue 1.50)............44 144 3.1.3.1 Printer Operations.....................................45 145 3.1.3.1.1 Print-Job...........................................45 147 Expires March 27, 2000 148 3.1.3.1.2 Print-URI...........................................47 149 3.1.3.1.3 Validate-Job........................................47 150 3.1.3.1.4 Create-Job..........................................47 151 3.1.3.1.5 Get-Printer-Attributes..............................47 152 3.1.3.1.6 Get-Jobs............................................48 153 3.1.3.1.7 Pause-Printer.......................................49 154 3.1.3.1.8 Resume-Printer......................................49 155 3.1.3.1.9 Purge-Printer.......................................50 156 3.1.3.2 Job Operations.........................................50 157 3.1.3.2.1 Send-Document.......................................50 158 3.1.3.2.2 Send-URI............................................51 159 3.1.3.2.3 Cancel-Job..........................................51 160 3.1.3.2.4 Get-Job-Attributes..................................52 161 3.1.3.2.5 Hold-Job............................................53 162 3.1.3.2.6 Release-Job.........................................53 163 3.1.3.2.7 Restart-Job.........................................54 164 3.1.4 Returning unsupported attributes in Get-Xxxx responses (Issue 165 1.18) 54 166 3.1.5 Sending empty attribute groups (Issue 1.16)................54 167 3.2 PRINTER OPERATIONS............................................55 168 3.2.1 Print-Job operation........................................55 169 3.2.1.1 Flow controlling the data portion of a Print-Job request 170 (Issue 1.22)....................................................55 171 3.2.1.2 Returning job-state in Print-Job response (Issue 1.30).55 172 3.2.2 Get-Printer-Attributes operation...........................56 173 3.2.3 Get-Jobs operation.........................................56 174 3.2.3.1 Get-Jobs, my-jobs='true', and 'requesting-user-name' 175 (Issue 1.39)?...................................................56 176 3.2.3.2 Why is there a "limit" attribute in the Get-Jobs 177 operation?......................................................56 178 3.2.4 Create-Job operation.......................................57 179 3.3 JOB OPERATIONS................................................57 180 3.3.1 Validate-Job...............................................57 182 4 OBJECT ATTRIBUTES................................................57 184 4.1 ATTRIBUTE SYNTAX'S............................................57 185 4.1.1 The 'none' value for empty sets (Issue 1.37)...............58 186 4.1.2 Multi-valued attributes (Issue 1.31).......................58 187 4.1.3 Case Sensitivity in URIs (issue 1.6).......................58 188 4.2 JOB TEMPLATE ATTRIBUTES.......................................59 189 4.2.1 multiple-document-handling(type2 keyword)..................59 190 4.2.1.1 Support of multiple document jobs......................59 191 4.3 JOB DESCRIPTION ATTRIBUTES....................................59 192 4.4 PRINTER DESCRIPTION ATTRIBUTES................................60 193 4.4.1 queued-job-count...........................................60 194 4.4.1.1 Why is "queued-job-count" RECOMMENDED (Issue 1.14)?....60 195 4.4.1.2 Is "queued-job-count" a good measure of how busy a printer 196 is (Issue 1.15)?................................................60 197 4.4.2 printer-current-time (dateTime)............................60 198 4.4.3 Printer-uri................................................61 200 5 DNS CONSIDERATIONS...............................................61 202 5.1 IPP PRINTER WITH A DNS NAME...................................61 204 Expires March 27, 2000 206 6 SECURITY CONSIDERATIONS..........................................61 208 6.1 QUERYING JOBS WITH IPP THAT WERE SUBMITTED USING OTHER JOB 209 SUBMISSION PROTOCOLS (ISSUE 1.32)..................................61 211 7 ENCODING AND TRANSPORT...........................................62 213 7.1 GENERAL HEADERS...............................................64 214 7.2 REQUEST HEADERS..............................................64 215 7.3 RESPONSE HEADERS..............................................65 216 7.4 ENTITY HEADERS...............................................66 217 7.5 OPTIONAL SUPPORT FOR HTTP/1.0.................................67 218 7.6 HTTP/1.1 CHUNKING.............................................67 219 7.6.1 Disabling IPP Server Response Chunking.....................67 220 7.6.2 Warning About the Support of Chunked Requests..............67 222 8 REFERENCES.......................................................68 224 8.1 AUTHORS' ADDRESS..............................................69 226 9 NOTICES..........................................................70 228 TABLES 230 Table 1 - Summary of Printer operation attributes that sender MUST 231 supply............................................................8 233 Table 2 - Summary of Printer operation attributes that sender MAY supply 234 ..................................................................9 236 Table 3 - Summary of Job operation attributes that sender MUST supply10 238 Table 4 - Summary of Job operation attributes that sender MAY supply.11 240 Table 5 - Printer operation response attributes......................12 242 Table 6 - Examples of validating IPP version.........................15 244 Table 7 - Rules for validating single values X against Z.............32 246 Expires March 27, 2000 247 1 Introduction 249 The IPP Implementer's Guide (IIG) (this document) contains information 250 that supplements the IPP Model and Semantics [IPP-MOD] and the IPP 251 Transport and Encoding [IPP-PRO] documents. As such this information is 252 not part of the formal specifications. Instead information is presented 253 to help implementers understand the specification, including some of the 254 motivation for decisions taken by the committee in developing the 255 specification. Some of the implementation considerations are intended 256 to help implementers design their client and/or IPP object 257 implementations. If there are any contradictions between this document 258 and [IPP-MOD] or [IPP-PRO], those documents take precedence over this 259 document. 261 Platform-specific implementation considerations will be included in this 262 guide as they become known. 264 In order to help the reader of the IIG and the IPP Model and Semantics 265 document, the sections in this document parallel the corresponding 266 sections in the Model document and are numbered the same for ease of 267 cross reference. The sections that correspond to the IPP Transport and 268 Encoding are correspondingly offset. 270 1.1 Conformance language 272 Usually, this document does not contain the terminology MUST, MUST NOT, 273 MAY, NEED NOT, SHOULD, SHOULD NOT, REQUIRED, and OPTIONAL. However, 274 when those terms do appear in this document, their intent is to repeat 275 what the [IPP-MOD] and [IPP-PRO] documents require and allow, rather 276 than specifying additional conformance requirements. These terms are 277 defined in section 13 on conformance terminology in [IPP-MOD], most of 278 which is taken from RFC 2119 [RFC2119]. 280 Implementers should read section 13 (APPENDIX A) in [IPP-MOD] in order 281 to understand these capitalized words. The words MUST, MUST NOT, and 282 REQUIRED indicate what implementations are required to support in a 283 client or IPP object in order to be conformant to [IPP-MOD] and [IPP- 284 PRO]. MAY, NEED NOT, and OPTIONAL indicate was is merely allowed as an 285 implementer option. The verbs SHOULD and SHOULD NOT indicate suggested 286 behavior, but which is not required or disallowed, respectively, in 287 order to conform to the specification. 289 1.2 Other terminology 291 The term "sender" refers to the client that sends a request or an IPP 292 object that returns a response. The term "receiver" refers to the IPP 293 object that receives a request and to a client that receives a response. 295 Expires March 27, 2000 296 1.3 Issues Raised from Interoperability Bake Offs 298 The IPP WG has conducted two open interoperability "Bake Offs". The 299 first bake off was held in September 1998 and Bake Off2 was held in 300 March 1999. See the summary reports in: 302 ftp://ftp.pwg.org/pub/pwg/ipp/new_TES/ 304 The issues raised from the first bake off are numbered 1.n in this 305 document and are described in: 307 ftp://ftp.pwg.org/pub/pwg/ipp/approved-clarifications/ipp-agreed-fixes- 308 981030.pdf 310 These issue resolutions have been incorporated into the November 16, 311 "IPP/1.0 Model and Semantics" [ipp-mod] and the "IPP/1.0 Encoding and 312 Transport" [ipp-pro] documents. However, some of the discussion is left 313 here in the Implementer's Guide to help understanding. 315 The issues raised from Bake Off2 are numbered 2.n in this document and 316 are described in: 318 ftp://ftp.pwg.org/pub/pwg/ipp/issues/issues-raised-at-bake-off2.pdf 320 2 IPP Objects 322 The term "client" in IPP is intended to mean any client that issues IPP 323 operation requests and accepts IPP operation responses, whether it be a 324 desktop or a server. In other words, the term "client" does not just 325 mean end-user clients, such as those associated with desktops. 327 The term "IPP Printer" in IPP is intended to mean an object that accepts 328 IPP operation requests and returns IPP operation responses, whether 329 implemented in a server or a device. An IPP Printer object MAY, if 330 implemented in a server, turn around and forward received jobs (and 331 other requests) to other devices and print servers/services, either 332 using IPP or some other protocol. 334 3 IPP Operations 336 This section corresponds to Section 3 "IPP Operations" in the IPP/1.1 337 Model and Semantics document [IPP-MOD]. 339 3.1 Common Semantics 341 This section discusses semantics common to all operations. 343 Expires March 27, 2000 344 3.1.1Summary of Operation Attributes 346 Legend for the following table: 348 R indicates a REQUIRED operation that MUST be supported by the IPP 349 object (Printer or Job). For attributes, R indicates that the attribute 350 MUST be supported by the IPP object supports the associated operation. 352 O indicates an OPTIONAL operation or attribute that MAY be supported by 353 the IPP object (Printer or Job). 355 + indicates that this is not an IPP/1.0 feature, but is only a part of 356 IPP/1.1 and future versions of IPP. 358 Table 1 - Summary of Printer operation attributes that sender MUST 359 supply 361 Printer Operations 362 Requests Respo 363 nses 364 Operation Print- Pri Crea Get- Get Pause- All 365 Attributes Job, nt- te- Printer- - Printer Opera 366 Validate URI Job Attribut Job , tions 367 -Job (R) (O) (O) es (R) s Resume- 368 (R) Printer 369 , 370 Purge- 371 Printer 372 (O+) 373 Operation parameters--REQUIRED to be supplied by the sender 374 operation-id R R R R R R 375 status-code R 376 request-id R R R R R R R 377 version-number R R R R R R R 378 Operation attributes--REQUIRED to be supplied by the sender 379 attributes-charset R R R R R R R 380 attributes- R R R R R R R 381 natural-language 382 document-uri R 383 job-id* 384 job-uri* 385 last-document 386 printer-uri R R R R R R 387 Operation attributes--RECOMMENDED to be supplied by the sender 388 job-name R R R 389 requesting-user- R R R R R R 390 name 392 Expires March 27, 2000 394 Table 2 - Summary of Printer operation attributes that sender MAY supply 396 Printer Operations 397 Requests Respo 398 nses 399 Operation Attributes Print- Prin Crea Get- Get Pause- All 400 Job, t- te- Printer - Printer Opera 401 Valida URI Job - Job , tions 402 te-Job (O) (O) Attribu s Resume- 403 (R) tes (R) (R) Printer 404 , 405 Purge- 406 Printer 407 (O+) 408 Operation attributes--OPTIONAL to be supplied by the sender 409 status-message O 410 detailed-status- O 411 message 412 compression O O 413 document-format R R O 414 document-name O O 415 document-natural- O O 416 language 417 ipp-attribute- R R R 418 fidelity 419 job-impressions O O O 420 job-k-octets O O O 421 job-media-sheets O O O 422 limit R 423 message 424 my-jobs R 425 requested-attributes R R 426 which-jobs R 427 * "job-id" is REQUIRED only if used together with "printer-uri" to 428 identify the target job; otherwise, "job-uri" is REQUIRED. 430 Expires March 27, 2000 431 Table 3 - Summary of Job operation attributes that sender MUST supply 433 Job Operations 434 Requests Respons 435 es 436 Operation Attributes Send- Send Cance Get- Hold- All 437 Docume -URI l-Job Job- Job, Operati 438 nt (O) (R) Attrib Release ons 439 (O) utes -Job, 440 (R) Restart 441 -Job 442 (O+) 443 Operation parameters--REQUIRED to be supplied by the sender 444 operation-id R R R R R 445 status-code R 446 request-id R R R R R R 447 version-number R R R R R R 448 Operation attributes--REQUIRED to be supplied by the sender 449 attributes-charset R R R R R R 450 attributes-natural- R R R R R R 451 language 452 document-uri R 453 job-id* R R R R R 454 job-uri* R R R R R 455 last-document R R 456 printer-uri R R R R R 457 Operation attributes--RECOMMENDED to be supplied by the sender 458 job-name 459 requesting-user-name R R R R R 461 Expires March 27, 2000 462 Table 4 - Summary of Job operation attributes that sender MAY supply 464 Job Operations 465 Requests Respo 466 nses 467 Operation Attributes Send- Sen Cance Get- Hold- Relea All 468 Documen d- l-Job Job- Job, se- Opera 469 t URI (R) Attrib Restar Job tions 470 (O) (O) utes t-Job (O+) 471 (R) (O+) 472 Operation attributes--OPTIONAL to be supplied by the sender 473 status-message O 474 detailed-status- O 475 message 476 document-access-error O** 477 compression O O 478 document-format R R 479 document-name O O 480 document-natural- O O 481 language 482 ipp-attribute- 483 fidelity 484 job-impressions 485 job-k-octets 486 job-media-sheets 487 limit 488 message O O O 489 job-hold-until R 490 my-jobs 491 requested-attributes R 492 which-jobs 493 * "job-id" is REQUIRED only if used together with "printer-uri" to 494 identify the target job; otherwise, "job-uri" is REQUIRED. 495 ** "document-access-error" applies to the Send-URI operation only. 497 Expires March 27, 2000 498 Table 5 - Printer operation response attributes 500 Printer Operations 501 Response 502 Operation Prin Valida Prin Crea Get- Get- Pause- 503 Attributes t- te-Job t- te- Printer Jobs Printer, 504 Job (R) URI Job - (R) Resume- 505 (R) (O) (O) Attribu Printer, 506 tes (R) Purge- 507 Printer 508 (O+) 509 job-uri R R R 510 job-id R R R 511 job-state R R R 512 job-state-reasons R+ R+ R+ 513 document-access- O 514 error+ 516 3.1.2Suggested Operation Processing Steps for IPP Objects (Issue 1.21) 518 This section suggests the steps and error checks that an IPP object MAY 519 perform when processing requests and returning responses. An IPP object 520 MAY perform some or all of the error checks. However, some 521 implementations MAY choose to be more forgiving than the error checks 522 shown here, in order to be able to accept requests from non-conforming 523 clients. Not performing all of these error checks is a so-called 524 "forgiving" implementation. On the other hand, clients that 525 successfully submit requests to IPP objects that do perform all the 526 error checks will be more likely to be able to interoperate with other 527 IPP object implementations. Thus an implementer of an IPP object needs 528 to decide whether to be a "forgiving" or a "strict" implementation. 529 Therefore, the error status codes returned may differ between 530 implementations. Consequentially, client SHOULD NOT expect exactly the 531 error code processing described in this section. 533 When an IPP object receives a request, the IPP object either accepts or 534 rejects the request. In order to determine whether or not to accept or 535 reject the request, the IPP object SHOULD execute the following steps. 536 The order of the steps may be rearranged and/or combined, including 537 making one or multiple passes over the request. 539 A client MUST supply requests that would pass all of the error checks 540 indicated here in order to be a conforming client. Therefore, a client 541 SHOULD supply requests that are conforming, in order to avoid being 542 rejected by some IPP object implementations and/or risking different 543 semantics by different implementations of forgiving implementations. 544 For example, a forgiving implementation that accepts multiple 545 occurrences of the same attribute, rather than rejecting the request 546 might use the first occurrences, while another might use the last 547 occurrence. Thus such a non-conforming client would get different 548 results from the two forgiving implementations. 550 Expires March 27, 2000 551 In the following, processing continues step by step until a "RETURNS the 552 xxx status code ." statement is encountered. Error returns are 553 indicated by the verb: "REJECTS". Since clients have difficulty getting 554 the status code before sending all of the document data in a Print-Job 555 request, clients SHOULD use the Validate-Job operation before sending 556 large documents to be printed, in order to validate whether the IPP 557 Printer will accept the job or not. 559 It is assumed that security authentication and authorization has already 560 taken place at a lower layer. 562 Expires March 27, 2000 563 3.1.2.1 Suggested Operation Processing Steps for all Operations 565 This section is intended to apply to all operations. The next section 566 contains the additional steps for the Print-Job, Validate-Job, Print- 567 URI, Create-Job, Send-Document, and Send-URI operations that create 568 jobs, adds documents, and validates jobs. 570 IIG Sect # Flow IPP error status codes 571 ---------- ---- ---------------------- 572 | 573 v err 574 3.1.2.1.1 --> server-error-version-not-supported 575 ok| 576 v err 577 3.1.2.1.2 --> server-error-operation-not-supported 578 ok| 579 v err 580 3.1.2.1.4.1- --> client-error-bad-request 581 3.1.2.1.4.2 582 ok| 583 v err 584 3.1.2.1.4.3 --> client-error-bad-request 585 586 ok| 587 v err 588 3.1.2.1.5 --> client-error-bad-request 589 client-error-request-value-too-long 590 <(length, tag, range,> 591 592 ok| 593 v err 594 3.1.2.1.5 --> client-error-bad-request 595 client-error-charset-not-supported 596 ok| client-error-attributes-or-values- 597 | not-supported 598 v err 599 3.1.2.1.6 --> client-error-bad-request 600 client-error-natural-language-not- 601 ok| supported 602 | client-error-request-value-too-long 603 | client-error-attributes-or-values- 604 v not-supported 606 3.1.2.1.1 Validate version number 608 Every request and every response contains the "version-number" 609 attribute. The value of this attribute is the major and minor version 610 number of the syntax and semantics that the client and IPP object is 611 using, respectively. The "version-number" attribute remains in a fixed 612 position across all future versions so that all clients and IPP object 613 that support future versions can determine which version is being used. 614 The IPP object checks to see if the major version number supplied in the 615 request is supported. If not, the Printer object REJECTS the request 617 Expires March 27, 2000 618 and RETURNS the 'server-error-version-not-supported' status code in the 619 response. The IPP object returns in the "version-number" response 620 attribute the major and minor version for the error response. Thus the 621 client can learn at least one major and minor version that the IPP 622 object supports. The IPP object is encouraged to return the closest 623 version number to the one supplied by the client. 625 The checking of the minor version number is implementation dependent, 626 however if the client supplied minor version is explicitly supported, 627 the IPP object MUST respond using that identical minor version number. 628 If the major version number matches, but the minor version number does 629 not, the Printer SHOULD accept and attempt to process the request, or 630 MAY reject the request and return the 'server-error-version-not- 631 supported' status code. In all cases, the Printer MUST return the 632 nearest version number that it supports. For example, suppose that an 633 IPP/1.2 Printer supports versions '1.1' and '1.2'. The following 634 responses are conforming: 636 Table 6 - Examples of validating IPP version 638 Client Printer Accept Request? Printer returns 639 supplies 641 1.0 yes (SHOULD) 1.1 643 no (SHOULD NOT) 1.1 645 1.1 yes (MUST) 1.1 647 1.2 yes (MUST) 1.2 649 1.3 yes (SHOULD) 1.2 651 no (SHOULD NOT) 1.2 653 It is advantageous for Printers to support both IPP/1.1 and IPP/1.0, so 654 that they can interoperate with either client implementations. Some 655 implementations may allow an Administrator to explicitly disable support 656 for one or the other by setting the "ipp-versions-supported" Printer 657 description attribute. 659 Likewise, it is advantageous for clients to support both versions to 660 allow interoperability with new and legacy Printers. 662 3.1.2.1.2 Validate operation identifier 664 The Printer object checks to see if the "operation-id" attribute 665 supplied by the client is supported as indicated in the Printer object's 666 "operations-supported" attribute. If not, the Printer REJECTS the 667 request and returns the 'server-error-operation-not-supported' status 668 code in the response. 670 Expires March 27, 2000 671 3.1.2.1.3 Validate the request identifier 673 The Printer object SHOULD NOT check to see if the "request-id" attribute 674 supplied by the client is in range: between 1 and 2**31 - 1 (inclusive), 675 but copies all 32 bits. 677 Note: The "version-number", "operation-id", and the "request-id" 678 parameters are in fixed octet positions in the IPP/1.1 encoding. The 679 "version-number" parameter will be the same fixed octet position in all 680 versions of the protocol. These fields are validated before proceeding 681 with the rest of the validation. 683 3.1.2.1.4 Validate attribute group and attribute presence and order 685 The order of the following validation steps depends on implementation. 687 3.1.2.1.4.1 Validate the presence and order of attribute groups 689 Client requests and IPP object responses contain attribute groups that 690 Section 3 requires to be present and in a specified order. An IPP 691 object verifies that the attribute groups are present and in the correct 692 order in requests supplied by clients (attribute groups without an * in 693 the following tables). 695 If an IPP object receives a request with (1) required attribute groups 696 missing, or (2) the attributes groups are out of order, or (3) the 697 groups are repeated, the IPP object REJECTS the request and RETURNS the 698 'client-error-bad-request' status code. For example, it is an error for 699 the Job Template Attributes group to occur before the Operation 700 Attributes group, for the Operation Attributes group to be omitted, or 701 for an attribute group to occur more than once, except in the Get-Jobs 702 response. 704 Since this kind of attribute group error is most likely to be an error 705 detected by a client developer rather than by a customer, the IPP object 706 NEED NOT return an indication of which attribute group was in error in 707 either the Unsupported Attributes group or the Status Message. Also, 708 the IPP object NEED NOT find all attribute group errors before returning 709 this error. 711 3.1.2.1.4.2 Ignore unknown attribute groups in the expected position 713 Future attribute groups may be added to the specification at the end of 714 requests just before the Document Content and at the end of response, 715 except for the Get-Jobs response, where it maybe there or before the 716 first job attributes returned. If an IPP object receives an unknown 717 attribute group in these positions, it ignores the entire group, rather 718 than returning an error, since that group may be a new group in a later 719 minor version of the protocol that can be ignored. (If the new 720 attribute group cannot be ignored without confusing the client, the 721 major version number would have been increased in the protocol document 722 and in the request). If the unknown group occurs in a different 724 Expires March 27, 2000 725 position, the IPP object REJECTS the request and RETURNS the 'client- 726 error-bad-request' status code. 728 Clients also ignore unknown attribute groups returned in a response. 730 Note: By validating that requests are in the proper form, IPP objects 731 force clients to use the proper form which, in turn, increases the 732 chances that customers will be able to use such clients from multiple 733 vendors with IPP objects from other vendors. 735 3.1.2.1.4.3 Validate the presence of a single occurrence of required 736 Operation attributes 738 Client requests and IPP object responses contain Operation attributes 739 that [IPP-MOD] Section 3 requires to be present. Attributes within a 740 group may be in any order, except for the ordering of target, charset, 741 and natural languages attributes. These attributes MUST be first, and 742 MUST be supplied in the following order: charset, natural language, and 743 then target. An IPP object verifies that the attributes that Section 4 744 requires to be supplied by the client have been supplied in the request 745 (attributes without an * in the following tables). An asterisk (*) 746 indicates groups and Operation attributes that the client may omit in a 747 request or an IPP object may omit in a response. 749 If an IPP object receives a request with required attributes missing or 750 repeated from a group or in the wrong position, the behavior of the IPP 751 object is IMPLEMENTATION DEPENDENT. Some of the possible 752 implementations are: 754 1.REJECTS the request and RETURNS the 'client-error-bad-request' status 755 code 757 2.accepts the request and uses the first occurrence of the attribute no 758 matter where it is 760 3.accepts the request and uses the last occurrence of the attribute no 761 matter where it is 763 4.accept the request and assume some default value for the missing 764 attribute 766 Therefore, client MUST send conforming requests, if they want to receive 767 the same behavior from all IPP object implementations. For example, it 768 is an error for the "attributes-charset" or "attributes-natural- 769 language" attribute to be omitted in any operation request, or for an 770 Operation attribute to be supplied in a Job Template group or a Job 771 Template attribute to be supplied in an Operation Attribute group in a 772 create request. It is also an error to supply the "attributes-charset" 773 attribute twice. 775 Since these kinds of attribute errors are most likely to be detected by 776 a client developer rather than by a customer, the IPP object NEED NOT 777 return an indication of which attribute was in error in either the 779 Expires March 27, 2000 780 Unsupported Attributes group or the Status Message. Also, the IPP 781 object NEED NOT find all attribute errors before returning this error. 783 The following tables list all the attributes for all the operations by 784 attribute group in each request and each response. The order of the 785 groups is the order that the client supplies the groups as specified in 786 [IPP-MOD] Section 3. The order of the attributes within a group is 787 arbitrary, except as noted for some of the special operation attributes 788 (charset, natural language, and target). The tables below use the 789 following notation: 791 R indicates a REQUIRED attribute or operation that an IPP object MUST 792 support 793 O indicates an OPTIONAL attribute or operation that an IPP object 794 NEED NOT support 795 * indicates that a client MAY omit the attribute in a request and 796 that an IPP object MAY omit the attribute in a response. 797 The absence of an * means that a client MUST supply the 798 attribute in a request and an IPP object MUST supply the 799 attribute in a response. 800 + indicates that this is not a IPP/1.0 operation, but is only a part 801 of IPP/1.1 and future versions of IPP. 803 Operation Requests 805 The tables below show the attributes in their proper attribute groups 806 for operation requests: 808 Note: All operation requests contain "version-number", "operation-id", 809 and "request-id" parameters. 811 Print-Job Request (R): 812 Group 1: Operation Attributes (R) 813 attributes-charset (R) 814 attributes-natural-language (R) 815 printer-uri (R) 816 requesting-user-name (R*) 817 job-name (R*) 818 ipp-attribute-fidelity (R*) 819 document-name (R*) 820 document-format (R*) 821 document-natural-language (O*) 822 compression (O*) 823 job-k-octets (O*) 824 job-impressions (O*) 825 job-media-sheets (O*) 826 Group 2: Job Template Attributes (R*) 827 (O*) 828 (see [IPP-MOD] Section 4.2) 829 Group 3: Document Content (R) 830 832 Expires March 27, 2000 834 Validate-Job Request (R): 835 Group 1: Operation Attributes (R) 836 attributes-charset (R) 837 attributes-natural-language (R) 838 printer-uri (R) 839 requesting-user-name (R*) 840 job-name (R*) 841 ipp-attribute-fidelity (R*) 842 document-name (R*) 843 document-format (R*) 844 document-natural-language (O*) 845 compression (O*) 846 job-k-octets (O*) 847 job-impressions (O*) 848 job-media-sheets (O*) 849 Group 2: Job Template Attributes (R*) 850 (O*) 851 (see [IPP-MOD] Section 4.2) 853 Print-URI Request (O): 854 Group 1: Operation Attributes (R) 855 attributes-charset (R) 856 attributes-natural-language (R) 857 printer-uri (R) 858 document-uri (R) 859 requesting-user-name (R*) 860 job-name (R*) 861 ipp-attribute-fidelity (R*) 862 document-name (R*) 863 document-format (R*) 864 document-natural-language (O*) 865 compression (O*) 866 job-k-octets (O*) 867 job-impressions (O*) 868 job-media-sheets (O*) 869 Group 2: Job Template Attributes (R*) 870 (O*) (see 871 (see [IPP-MOD] Section 4.2) 873 Create-Job Request (O): 874 Group 1: Operation Attributes (R) 875 attributes-charset (R) 876 attributes-natural-language (R) 877 printer-uri (R) 878 requesting-user-name (R*) 879 job-name (R*) 880 ipp-attribute-fidelity (R*) 881 job-k-octets (O*) 882 job-impressions (O*) 883 job-media-sheets (O*) 884 Group 2: Job Template Attributes (R*) 885 (O*) (see 886 (see [IPP-MOD] Section 4.2) 888 Expires March 27, 2000 890 Get-Printer-Attributes Request (R): 891 Group 1: Operation Attributes (R) 892 attributes-charset (R) 893 attributes-natural-language (R) 894 printer-uri (R) 895 requesting-user-name (R*) 896 requested-attributes (R*) 897 document-format (R*) 899 Get-Jobs Request (R): 900 Group 1: Operation Attributes (R) 901 attributes-charset (R) 902 attributes-natural-language (R) 903 printer-uri (R) 904 requesting-user-name (R*) 905 limit (R*) 906 requested-attributes (R*) 907 which-jobs (R*) 908 my-jobs (R*) 910 Send-Document Request (O): 911 Group 1: Operation Attributes (R) 912 attributes-charset (R) 913 attributes-natural-language (R) 914 (printer-uri & job-id) | job-uri (R) 915 last-document (R) 916 requesting-user-name (R*) 917 document-name (R*) 918 document-format (R*) 919 document-natural-language (O*) 920 compression (O*) 921 Group 2: Document Content (R*) 922 924 Send-URI Request (O): 925 Group 1: Operation Attributes (R) 926 attributes-charset (R) 927 attributes-natural-language (R) 928 (printer-uri & job-id) | job-uri (R) 929 last-document (R) 930 document-uri (R) 931 requesting-user-name (R*) 932 document-name (R*) 933 document-format (R*) 934 document-natural-language (O*) 935 compression (O*) 937 Cancel-Job Request (R): 938 Release-Job Request (O+): 939 Group 1: Operation Attributes (R) 940 attributes-charset (R) 941 attributes-natural-language (R) 942 (printer-uri & job-id) | job-uri (R) 943 requesting-user-name (R*) 945 Expires March 27, 2000 946 message (O*) 948 Get-Job-Attributes Request (R): 949 Group 1: Operation Attributes (R) 950 attributes-charset (R) 951 attributes-natural-language (R) 952 (printer-uri & job-id) | job-uri (R) 953 requesting-user-name (R*) 954 requested-attributes (R*) 956 Pause-Printer Request (O+): 957 Resume-Printer Request (O+): 958 Purge-Printer Request (O+): 959 Group 1: Operation Attributes (R) 960 attributes-charset (R) 961 attributes-natural-language (R) 962 printer-uri (R) 963 requesting-user-name (R*) 965 Hold-Job Request (O+): 966 Restart-Job Request (O+): 967 Group 1: Operation Attributes (R) 968 attributes-charset (R) 969 attributes-natural-language (R) 970 (printer-uri & job-id) | job-uri (R) 971 requesting-user-name (R*) 972 job-hold-until (R*) 973 message (O*) 975 Operation Responses 977 The tables below show the response attributes in their proper attribute 978 groups for responses. 980 Note: All operation responses contain "version-number", "status-code", 981 and "request-id" parameters. 983 Print-Job Response (R): 984 Create-Job Response (O): 985 Send-Document Response (O): 986 Group 1: Operation Attributes (R) 987 attributes-charset (R) 988 attributes-natural-language (R) 989 status-message (O*) 990 detailed-status-message (O*) 991 Group 2: Unsupported Attributes (R*) (see Note 3) 992 (R*) 993 Group 3: Job Object Attributes(R*) (see Note 2) 994 job-uri (R) 995 job-id (R) 996 job-state (R) 997 job-state-reasons (O* | R+) 998 job-state-message (O*) 1000 Expires March 27, 2000 1001 number-of-intervening-jobs (O*) 1003 Validate-Job Response (R): 1004 Cancel-Job Response (R): 1005 Hold-Job Response (O+): 1006 Release-Job Response (O+): 1007 Restart-Job Response (O+): 1008 Group 1: Operation Attributes (R) 1009 attributes-charset (R) 1010 attributes-natural-language (R) 1011 status-message (O*) 1012 detailed-status-message (O*) 1013 Group 2: Unsupported Attributes (R*) (see Note 3) 1014 (R*) 1016 Print-URI Response (O): 1017 Send-URI Response (O): 1018 Group 1: Operation Attributes (R) 1019 attributes-charset (R) 1020 attributes-natural-language (R) 1021 status-message (O*) 1022 detailed-status-message (O*) 1023 document-access-error (O*) 1024 Group 2: Unsupported Attributes (R*) (see Note 3) 1025 (R*) 1026 Group 3: Job Object Attributes(R*) (see Note 2) 1027 job-uri (R) 1028 job-id (R) 1029 job-state (R) 1030 job-state-reasons (O* | R+) 1031 job-state-message (O*) 1032 number-of-intervening-jobs (O*) 1034 Get-Printer-Attributes Response (R): 1035 Group 1: Operation Attributes (R) 1036 attributes-charset (R) 1037 attributes-natural-language (R) 1038 status-message (O*) 1039 detailed-status-message (O*) 1040 Group 2: Unsupported Attributes (R*) (see Note 4) 1041 (R*) 1042 Group 3: Printer Object Attributes(R*) (see Note 2) 1043 (R*) 1045 Get-Jobs Response (R): 1046 Group 1: Operation Attributes (R) 1047 attributes-charset (R) 1048 attributes-natural-language (R) 1049 status-message (O*) 1050 detailed-status-message (O*) 1051 Group 2: Unsupported Attributes (R*) (see Note 4) 1052 (R*) 1053 Group 3: Job Object Attributes(R*) (see Note 2, 5) 1054 (R*) 1056 Expires March 27, 2000 1058 Get-Job-Attributes Response (R): 1059 Group 1: Operation Attributes (R) 1060 attributes-charset (R) 1061 attributes-natural-language (R) 1062 status-message (O*) 1063 detailed-status-message (O*) 1064 Group 2: Unsupported Attributes (R*) (see Note 4) 1065 (R*) 1066 Group 3: Job Object Attributes(R*) (see Note 2) 1067 (R*) 1069 Pause-Printer Response (O+): 1070 Resume-Printer Response (O+): 1071 Purge-Printer Response (O+): 1072 Group 1: Operation Attributes (R) 1073 attributes-charset (R) 1074 attributes-natural-language (R) 1075 status-message (O*) 1076 detailed-status-message (O*) 1077 Group 2: Unsupported Attributes (R*) (see Note 4) 1078 (R*) 1080 Note 2 - the Job Object Attributes and Printer Object Attributes are 1081 returned only if the IPP object returns one of the success status codes. 1083 Note 3 - the Unsupported Attributes Group is present only if the client 1084 included some Operation and/or Job Template attributes or values that 1085 the Printer doesn't support whether a success or an error return. 1087 Note 4 - the Unsupported Attributes Group is present only if the client 1088 included some Operation attributes that the Printer doesn't support 1089 whether a success or an error return. 1091 Note 5: for the Get-Jobs operation the response contains a separate Job 1092 Object Attributes group 3 to N containing requested-attributes for each 1093 job object in the response. 1095 3.1.2.1.5 Validate the values of the REQUIRED Operation attributes 1097 An IPP object validates the values supplied by the client of the 1098 REQUIRED Operation attribute that the IPP object MUST support. The next 1099 section specifies the validation of the values of the OPTIONAL Operation 1100 attributes that IPP objects MAY support. 1102 The IPP object performs the following syntactic validation checks of 1103 each Operation attribute value: 1105 a) that the length of each Operation attribute value is correct for 1106 the attribute syntax tag supplied by the client according to [IPP- 1107 MOD] Section 4.1, 1109 Expires March 27, 2000 1111 b) that the attribute syntax tag is correct for that Operation 1112 attribute according to [IPP-MOD] Section 3, 1114 c) that the value is in the range specified for that Operation 1115 attribute according to [IPP-MOD] Section 3, 1117 d) that multiple values are supplied by the client only for 1118 operation attributes that are multi-valued, i.e., that are 1setOf X 1119 according to [IPP-MOD] Section 3. 1121 If any of these checks fail, the IPP object REJECTS the request and 1122 RETURNS the 'client-error-bad-request' or the 'client-error-request- 1123 value-too-long' status code. Since such an error is most likely to be 1124 an error detected by a client developer, rather than by an end-user, the 1125 IPP object NEED NOT return an indication of which attribute had the 1126 error in either the Unsupported Attributes Group or the Status Message. 1127 The description for each of these syntactic checks is explicitly 1128 expressed in the first IF statement in the following table. 1130 In addition, the IPP object checks each Operation attribute value 1131 against some Printer object attribute or some hard-coded value if there 1132 is no "xxx-supported" Printer object attribute defined. If its value is 1133 not among those supported or is not in the range supported, then the IPP 1134 object REJECTS the request and RETURNS the error status code indicated 1135 in the table by the second IF statement. If the value of the Printer 1136 object's "xxx-supported" attribute is 'no-value' (because the system 1137 administrator hasn't configured a value), the check always fails. 1139 ----------------------------------------------- 1141 attributes-charset (charset) 1143 IF NOT a single non-empty 'charset' value, REJECT/RETURN 'client- 1144 error-bad-request'. 1145 IF the value length is greater than 63 octets, REJECT/RETURN 'client- 1146 error-request-value-too-long'. 1147 IF NOT in the Printer object's "charset-supported" attribute, 1148 REJECT/RETURN "client-error-charset-not-supported". 1150 attributes-natural-language(naturalLanguage) 1152 IF NOT a single non-empty 'naturalLanguage' value, REJECT/RETURN 1153 'client-error-bad-request'. 1154 IF the value length is greater than 63 octets, REJECT/RETURN 'client- 1155 error-request-value-too-long'. 1156 ACCEPT the request even if not a member of the set in the Printer 1157 object's "generated-natural-language-supported" attribute. If the 1158 supplied value is not a member of the Printer object's "generated- 1159 natural-language-supported" attribute, use the Printer object's 1160 "natural-language-configured" value. 1162 requesting-user-name 1164 Expires March 27, 2000 1165 IF NOT a single 'name' value, REJECT/RETURN 'client-error-bad- 1166 request'. 1167 IF the value length is greater than 255 octets, REJECT/RETURN 1168 'client-error-request-value-too-long'. 1169 IF the IPP object can obtain a better-authenticated name, use it 1170 instead. 1172 job-name(name) 1174 IF NOT a single 'name' value, REJECT/RETURN 'client-error-bad- 1175 request'. 1176 IF the value length is greater than 255 octets, REJECT/RETURN 1177 'client-error-request-value-too-long'. 1178 IF NOT supplied by the client, the Printer object creates a name from 1179 the document-name or document-uri. 1181 document-name (name) 1183 IF NOT a single 'name' value, REJECT/RETURN 'client-error-bad- 1184 request'. 1185 IF the value length is greater than 255 octets, REJECT/RETURN 1186 'client-error-request-value-too-long'. 1188 ipp-attribute-fidelity (boolean) 1190 IF NEITHER a single 'true' NOR a single 'false' 'boolean' value, 1191 REJECT/RETURN 'client-error-bad-request'. 1192 IF the value length is NOT equal to 1 octet, REJECT/RETURN 'client- 1193 error-request-value-too-long' 1194 IF NOT supplied by the client, the IPP object assumes the value 1195 'false'. 1197 document-format (mimeMediaType) 1199 IF NOT a single non-empty 'mimeMediaType' value, REJECT/RETURN 1200 'client-error-bad-request'. 1201 IF the value length is greater than 255 octets, REJECT/RETURN 1202 'client-error-request-value-too-long'. 1203 IF NOT in the Printer object's "document-format-supported" attribute, 1204 REJECT/RETURN 'client-error-document-format-not-supported' 1205 IF NOT supplied by the client, the IPP object assumes the value of 1206 the Printer object's "document-format-default" attribute. 1208 document-uri (uri) 1210 IF NOT a single non-empty 'uri' value, REJECT/RETURN 'client-error- 1211 bad-request'. 1212 IF the value length is greater than 1023 octets, REJECT/RETURN 1213 'client-error-request-value-too-long'. 1214 IF the URI syntax is not valid, REJECT/RETURN 'client-error-bad- 1215 request'. 1216 If the client-supplied URI scheme is not supported, i.e. the value is 1217 not in the Printer object's referenced-uri-scheme-supported" 1218 attribute, the Printer object MUST reject the request and return 1220 Expires March 27, 2000 1221 the 'client-error-uri-scheme-not-supported' status code. The 1222 Printer object MAY check to see if the document exists and is 1223 accessible. If the document is not found or is not accessible, 1224 REJECT/RETURN 'client-error-not found'. 1226 last-document (boolean) 1228 IF NEITHER a single 'true' NOR a single 'false' 'boolean' value, 1229 REJECT/RETURN 'client-error-bad-request'. 1230 IF the value length is NOT equal to 1 octet, REJECT/RETURN 'client- 1231 error-request-value-too-long' 1233 job-id (integer(1:MAX)) 1235 IF NOT an single 'integer' value equal to 4 octets AND in the range 1 1236 to MAX, REJECT/RETURN 'client-error-bad-request'. 1237 IF NOT a job-id of an existing Job object, REJECT/RETURN 'client- 1238 error-not-found' or 'client-error-gone' status code, if keep track 1239 of recently deleted jobs. 1241 requested-attributes (1setOf keyword) 1243 IF NOT one or more 'keyword' values, REJECT/RETURN 'client-error-bad- 1244 request'. 1245 IF the value length is greater than 255 octets, REJECT/RETURN 1246 'client-error-request-value-too-long'. 1247 Ignore unsupported values, which are the keyword names of unsupported 1248 attributes. Don't bother to copy such requested (unsupported) 1249 attributes to the Unsupported Attribute response group since the 1250 response will not return them. 1252 which-jobs (type2 keyword) 1254 IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-bad- 1255 request'. 1256 IF the value length is greater than 255 octets, REJECT/RETURN 1257 'client-error-request-value-too-long'. 1258 IF NEITHER 'completed' NOR 'not-completed', copy the attribute and 1259 the unsupported value to the Unsupported Attributes response group 1260 and REJECT/RETURN 'client-error-attributes-or-values-not- 1261 supported'. 1262 Note: a Printer still supports the 'completed' value even if it keeps 1263 no completed/canceled/aborted jobs: by returning no jobs when so 1264 queried. 1265 IF NOT supplied by the client, the IPP object assumes the 'not- 1266 completed' value. 1268 my-jobs (boolean) 1270 IF NEITHER a single 'true' NOR a single 'false' 'boolean' value, 1271 REJECT/RETURN 'client-error-bad-request'. 1272 IF the value length is NOT equal to 1 octet, REJECT/RETURN 'client- 1273 error-request-value-too-long' 1274 IF NOT supplied by the client, the IPP object assumes the 'false' 1275 value. 1277 Expires March 27, 2000 1279 limit (integer(1:MAX)) 1281 IF NOT a single 'integer' value equal to 4 octets AND in the range 1 1282 to MAX, REJECT/RETURN 'client-error-bad-request'. 1283 IF NOT supplied by the client, the IPP object returns all jobs, no 1284 matter how many. 1286 ----------------------------------------------- 1288 3.1.2.1.6 Validate the values of the OPTIONAL Operation attributes 1290 OPTIONAL Operation attributes are those that an IPP object MAY or MAY 1291 NOT support. An IPP object validates the values of the OPTIONAL 1292 attributes supplied by the client. The IPP object performs the same 1293 syntactic validation checks for each OPTIONAL attribute value as in 1294 Section 3.1.2.1.5. As in Section 3.1.2.1.5, if any fail, the IPP object 1295 REJECTS the request and RETURNS the 'client-error-bad-request' or the 1296 'client-error-request-value-too-long' status code. 1298 In addition, the IPP object checks each Operation attribute value 1299 against some Printer attribute or some hard-coded value if there is no 1300 "xxx-supported" Printer attribute defined. If its value is not among 1301 those supported or is not in the range supported, then the IPP object 1302 REJECTS the request and RETURNS the error status code indicated in the 1303 table. If the value of the Printer object's "xxx-supported" attribute 1304 is 'no-value' (because the system administrator hasn't configured a 1305 value), the check always fails. 1307 If the IPP object doesn't recognize/support an attribute, the IPP object 1308 treats the attribute as an unknown or unsupported attribute (see the 1309 last row in the table below). 1311 ----------------------------------------------- 1313 document-natural-language (naturalLanguage) 1315 IF NOT a single non-empty 'naturalLanguage' value, REJECT/RETURN 1316 'client-error-bad-request'. 1317 IF the value length is greater than 63 octets, REJECT/RETURN 'client- 1318 error-request-value-too-long'. 1319 IF NOT a value that the Printer object supports in document formats, 1320 (no corresponding "xxx-supported" Printer attribute), REJECT/RETURN 1321 'client-error-natural-language-not-supported'. 1323 compression (type3 keyword) 1325 IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-bad- 1326 request'. 1327 IF the value length is greater than 255 octets, REJECT/RETURN 1328 'client-error-request-value-too-long'. 1330 Expires March 27, 2000 1332 IF NOT in the Printer object's "compression-supported" attribute, 1333 copy the attribute and the unsupported value to the Unsupported 1334 Attributes response group and REJECT/RETURN 'client-error- 1335 attributes-or-values-not-supported'. 1337 Note to IPP/1.0 implementers: Support for the compression attribute was 1338 optional in IPP/1.0. However, an IPP/1.0 object SHOULD at least check 1339 for the "compression" attribute being present and reject the create 1340 request, if they don't support "compression". Not checking is a bug, 1341 since the data will be unintelligible. job-k-octets (integer(0:MAX)) 1343 IF NOT a single 'integer' value equal to 4 octets, 1344 REJECT/RETURN 'client-error-bad-request'. 1345 IF NOT in the range of the Printer object's "job-k-octets-supported" 1346 attribute, copy the attribute and the unsupported value to the 1347 Unsupported Attributes response group and REJECT/RETURN 'client- 1348 error-attributes-or-values-not-supported'. 1350 job-impressions (integer(0:MAX)) 1352 IF NOT a single 'integer' value equal to 4 octets, 1353 REJECT/RETURN 'client-error-bad-request'. 1354 IF NOT in the range of the Printer object's "job-impressions- 1355 supported" attribute, copy the attribute and the unsupported value 1356 to the Unsupported Attributes response group and REJECT/RETURN 1357 'client-error-attributes-or-values-not-supported'. 1359 job-media-sheets (integer(0:MAX)) 1361 IF NOT a single 'integer' value equal to 4 octets, 1362 REJECT/RETURN 'client-error-bad-request'. 1363 IF NOT in the range of the Printer object's "job-media-sheets- 1364 supported" attribute, copy the attribute and the unsupported value 1365 to the Unsupported Attributes response group and REJECT/RETURN 1366 'client-error-attributes-or-values-not-supported'. 1368 message (text(127)) 1370 IF NOT a single 'text' value, REJECT/RETURN 'client-error-bad- 1371 request'. 1372 IF the value length is greater than 127 octets, 1373 REJECT/RETURN 'client-error-request-value-too-long'. 1375 unknown or unsupported attribute 1377 IF the attribute syntax supplied by the client is supported but the 1378 length is not legal for that attribute syntax, REJECT/RETURN 1379 'client-error-request-value-too-long'. 1380 ELSE copy the attribute and value to the Unsupported Attributes 1381 response group and change the attribute value to the "out-of-band" 1382 'unsupported' value, but otherwise ignore the attribute. 1384 Note: Future Operation attributes may be added to the protocol 1385 specification that may occur anywhere in the specified group. When the 1386 operation is otherwise successful, the IPP object returns the 1388 Expires March 27, 2000 1389 'successful-ok-ignored-or-substituted-attributes' status code. Ignoring 1390 unsupported Operation attributes in all operations is analogous to the 1391 handling of unsupported Job Template attributes in the create and 1392 Validate-Job operations when the client supplies the "ipp-attribute- 1393 fidelity" Operation attribute with the 'false' value. This last rule is 1394 so that we can add OPTIONAL Operation attributes to future versions of 1395 IPP so that older clients can inter-work with new IPP objects and newer 1396 clients can inter-work with older IPP objects. (If the new attribute 1397 cannot be ignored without performing unexpectedly, the major version 1398 number would have been increased in the protocol document and in the 1399 request). This rule for Operation attributes is independent of the 1400 value of the "ipp-attribute-fidelity" attribute. For example, if an 1401 IPP object doesn't support the OPTIONAL "job-k-octets" attribute', the 1402 IPP object treats "job-k-octets" as an unknown attribute and only checks 1403 the length for the 'integer' attribute syntax supplied by the client. 1404 If it is not four octets, the IPP object REJECTS the request and RETURNS 1405 the 'client-error-bad-request' status code, else the IPP object copies 1406 the attribute to the Unsupported Attribute response group, setting the 1407 value to the "out-of-band" 'unsupported' value, but otherwise ignores 1408 the attribute. 1410 Expires March 27, 2000 1411 3.1.2.2 Suggested Additional Processing Steps for Operations that 1412 Create/Validate Jobs and Add Documents 1414 This section in combination with the previous section recommends the 1415 processing steps for the Print-Job, Validate-Job, Print-URI, Create-Job, 1416 Send-Document, and Send-URI operations that IPP objects SHOULD use. 1417 These are the operations that create jobs, validate a Print-Job request, 1418 and add documents to a job. 1420 IIG Sect # Flow IPP error status codes 1421 ---------- ---- ---------------------- 1422 | 1423 v No 1424 3.1.2.2.1 ------------------+ 1425 | 1426 Yes| | 1427 | ipp-attribute-fidelity = no | 1428 |<------------------------------+ 1429 v No 1430 3.1.2.2.2 --> server-error-not-accepting-jobs 1431 1432 Yes| 1433 v err 1434 3.1.2.3 --> client-error-bad-request 1435 client-error-request-value-too-long 1436 <(length, tag, range,> 1437 1438 ok| 1439 v err 1440 3.1.2.3 --> client-error-bad-request 1441 client-error-attributes-or-values- 1442 ok| not-supported 1443 v err 1444 3.1.2.3.1 --> client-error-conflicting-attributes 1445 client-error-attributes-or-values- 1446 ok| not-supported 1447 v 1449 3.1.2.2.1 Default "ipp-attribute-fidelity" if not supplied 1451 The Printer object checks to see if the client supplied an "ipp- 1452 attribute-fidelity" Operation attribute. If the attribute is not 1453 supplied by the client, the IPP object assumes that the value is 1454 'false'. 1456 3.1.2.2.2 Check that the Printer object is accepting jobs 1458 If the value of the Printer objects "printer-is-accepting-jobs" is 1459 'false', the Printer object REJECTS the request and RETURNS the 'server- 1460 error-not-accepting-jobs' status code. 1462 3.1.2.2.3 Validate the values of the Job Template attributes 1464 Expires March 27, 2000 1465 An IPP object validates the values of all Job Template attribute 1466 supplied by the client. The IPP object performs the analogous syntactic 1467 validation checks of each Job Template attribute value that it performs 1468 for Operation attributes (see Section 3.1.2.1.5.): 1470 a) that the length of each value is correct for the attribute 1471 syntax tag supplied by the client according to [IPP-MOD] Section 4.1. 1473 b) that the attribute syntax tag is correct for that attribute 1474 according to [IPP-MOD] Sections 4.2 to 4.4. 1476 c) that multiple values are supplied only for multi-valued 1477 attributes, i.e., that are 1setOf X according to [IPP-MOD] Sections 4.2 1478 to 4.4. 1480 As in Section 3.1.2.1.5, if any of these syntactic checks fail, the IPP 1481 object REJECTS the request and RETURNS the 'client-error-bad-request' or 1482 'client-error-request-value-too-long' status code as appropriate, 1483 independent of the value of the "ipp-attribute-fidelity". Since such an 1484 error is most likely to be an error detected by a client developer, 1485 rather than by an end-user, the IPP object NEED NOT return an indication 1486 of which attribute had the error in either the Unsupported Attributes 1487 Group or the Status Message. The description for each of these 1488 syntactic checks is explicitly expressed in the first IF statement in 1489 the following table. 1491 Each Job Template attribute MUST occur no more than once. If an IPP 1492 Printer receives a create request with multiple occurrences of a Job 1493 Template attribute, it MAY: 1495 1.reject the operation and return the 'client-error-bad syntax' 1496 error status code 1498 2.accept the operation and use the first occurrence of the 1499 attribute 1501 3.accept the operation and use the last occurrence of the 1502 attribute 1504 depending on implementation. Therefore, clients MUST NOT supply 1505 multiple occurrences of the same Job Template attribute in the Job 1506 Attributes group in the request. 1508 3.1.2.3 Algorithm for job validation 1510 The process of validating a Job-Template attribute "xxx" against a 1511 Printer attribute "xxx-supported" can use the following validation 1512 algorithm (see section 3.2.1.2 in [ipp-mod]). 1514 To validate the value U of Job-Template attribute "xxx" against the 1515 value V of Printer "xxx-supported", perform the following algorithm: 1517 Expires March 27, 2000 1518 1.If U is multi-valued, validate each value X of U by performing the 1519 algorithm in Table 7 with each value X. Each validation is separate 1520 from the standpoint of returning unsupported values. Example: If U 1521 is "finishings" that the client supplies with 'staple', 'bind' 1522 values, then X takes on the successive values: 'staple', then 'bind' 1524 2.If V is multi-valued, validate X against each Z of V by performing 1525 the algorithm in Table 7 with each value Z. If a value Z validates, 1526 the validation for the attribute value X succeeds. If it fails, the 1527 algorithm is applied to the next value Z of V. If there are no more 1528 values Z of V, validation fails. Example" If V is "sides-supported" 1529 with values: 'one-sided', 'two-sided-long', and 'two-sided-short', 1530 then Z takes on the successive values: 'one-sided', 'two-sided- 1531 long', and 'two-sided-short'. If the client supplies "sides" with 1532 'two-sided-long', the first comparison fails ('one-sided' is not 1533 equal to 'two-sided-long'), the second comparison succeeds ('two- 1534 sided-long' is equal to 'two-sided-long"), and the third comparison 1535 ('two-sided-short' with 'two-sided-long') is not even performed. 1537 3.If both U and V are single-valued, let X be U and Z be V and use the 1538 validation rules in Table 7. 1540 Table 7 - Rules for validating single values X against Z 1542 Attribute attribute v alidated if: 1543 syntax of X syntax of Z 1545 integer rangeOfInteger X is within the range of 1546 Z 1547 uri uriScheme t he uri scheme in X is 1548 equal to Z 1549 any boolean t he value of Z is TRUE 1550 any any X and Z are of the same 1551 type and are equal. 1553 If the value of the Printer object's "xxx-supported" attribute is 'no- 1554 value' (because the system administrator hasn't configured a value), the 1555 check always fails. If the check fails, the IPP object copies the 1556 attribute to the Unsupported Attributes response group with its 1557 unsupported value. If the attribute contains more than one value, each 1558 value is checked and each unsupported value is separately copied, while 1559 supported values are not copied. If an IPP object doesn't 1560 recognize/support a Job Template attribute, i.e., there is no 1561 corresponding Printer object "xxx-supported" attribute, the IPP object 1562 treats the attribute as an unknown or unsupported attribute (see the 1563 last row in the table below). 1565 If some Job Template attributes are supported for some document formats 1566 and not for others or the values are different for different document 1567 formats, the IPP object SHOULD take that into account in this validation 1568 using the value of the "document-format" supplied by the client (or 1569 defaulted to the value of the Printer's "document-format-default" 1570 attribute, if not supplied by the client). For example, if "number-up" 1571 is supported for the 'text/plain' document format, but not for the 1573 Expires March 27, 2000 1574 'application/postscript' document format, the check SHOULD (though it 1575 NEED NOT) depend on the value of the "document-format" operation 1576 attribute. See "document-format" in [IPP-MOD] section 3.2.1.1 and 1577 3.2.5.1. 1579 Note: whether the request is accepted or rejected is determined by the 1580 value of the "ipp-attribute-fidelity" attribute in a subsequent step, so 1581 that all Job Template attribute supplied are examined and all 1582 unsupported attributes and/or values are copied to the Unsupported 1583 Attributes response group. 1585 ----------------------------------------------- 1587 job-priority (integer(1:100)) 1589 IF NOT a single 'integer' value with a length equal to 4 octets, 1590 REJECT/RETURN 'client-error-bad-request'. 1591 IF NOT supplied by the client, use the value of the Printer object's 1592 "job-priority-default" attribute at job submission time. 1593 IF NOT in the range 1 to 100, inclusive, copy the attribute and the 1594 unsupported value to the Unsupported Attributes response group. 1595 Map the value to the nearest supported value in the range 1:100 as 1596 specified by the number of discrete values indicated by the value 1597 of the Printer's "job-priority-supported" attribute. See the 1598 formula in [IPP-MOD] Section 4.2.1. 1600 job-hold-until (type3 keyword | name) 1602 IF NOT a single 'keyword' or 'name' value, REJECT/RETURN 'client- 1603 error-bad-request'. 1604 IF the value length is greater than 255 octets, REJECT/RETURN 1605 'client-error-request-value-too-long'. 1606 IF NOT supplied by the client, use the value of the Printer object's 1607 "job-hold-until" attribute at job submission time. 1608 IF NOT in the Printer object's "job-hold-until-supported" attribute, 1609 copy the attribute and the unsupported value to the Unsupported 1610 Attributes response group. 1612 job-sheets (type3 keyword | name) 1614 IF NOT a single 'keyword' or 'name' value, REJECT/RETURN 'client- 1615 error-bad-request'. 1616 IF the value length is greater than 255 octets, REJECT/RETURN 1617 'client-error-request-value-too-long'. 1618 IF NOT in the Printer object's "job-sheets-supported" attribute, copy 1619 the attribute and the unsupported value to the Unsupported 1620 Attributes response group. 1622 multiple-document-handling (type2 keyword) 1624 IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-bad- 1625 request'. 1626 IF the value length is greater than 255 octets, REJECT/RETURN 1627 'client-error-request-value-too-long'. 1629 Expires March 27, 2000 1631 IF NOT in the Printer object's "multiple-document-handling-supported" 1632 attribute, copy the attribute and the unsupported value to the 1633 Unsupported Attributes response group. 1635 copies (integer(1:MAX)) 1637 IF NOT a single 'integer' value with a length equal to 4 octets, 1638 REJECT/RETURN 'client-error-bad-request'. 1639 IF NOT in range of the Printer object's "copies-supported" attribute 1640 copy the attribute and the unsupported value to the Unsupported 1641 Attributes response group. 1643 finishings (1setOf type2 enum) 1645 IF NOT an 'enum' value(s) each with a length equal to 4 octets, 1646 REJECT/RETURN 'client-error-bad-request'. 1647 IF NOT in the Printer object's "finishings-supported" attribute, copy 1648 the attribute and the unsupported value(s), but not any supported 1649 values, to the Unsupported Attributes response group. 1651 page-ranges (1setOf rangeOfInteger(1:MAX)) 1653 IF NOT a 'rangeOfInteger' value(s) each with a length equal to 8 1654 octets, REJECT/RETURN 'client-error-bad-request'. 1655 IF first value is greater than second value in any range, the ranges 1656 are not in ascending order, or ranges overlap, REJECT/RETURN 1657 'client-error-bad-request'. 1658 IF the value of the Printer object's "page-ranges-supported" 1659 attribute is 'false', copy the attribute to the Unsupported 1660 Attributes response group and set the value to the "out-of-band" 1661 'unsupported' value. 1663 sides (type2 keyword) 1665 IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-bad- 1666 request'. 1667 IF the value length is greater than 255 octets, REJECT/RETURN 1668 'client-error-request-value-too-long'. 1669 IF NOT in the Printer object's "sides-supported" attribute, copy the 1670 attribute and the unsupported value to the Unsupported Attributes 1671 response group. 1673 number-up (integer(1:MAX)) 1675 IF NOT a single 'integer' value with a length equal to 4 octets, 1676 REJECT/RETURN 'client-error-bad-request'. 1677 IF NOT a value or in the range of one of the values of the Printer 1678 object's "number-up-supported" attribute, copy the attribute and 1679 value to the Unsupported Attribute response group. 1681 orientation-requested (type2 enum) 1683 IF NOT a single 'enum' value with a length equal to 4 octets, 1684 REJECT/RETURN 'client-error-bad-request'. 1686 Expires March 27, 2000 1687 IF NOT in the Printer object's "orientation-requested-supported" 1688 attribute, copy the attribute and the unsupported value to the 1689 Unsupported Attributes response group. 1691 media (type3 keyword | name) 1693 IF NOT a single 'keyword' or 'name' value, REJECT/RETURN 'client- 1694 error-bad-request'. 1695 IF the value length is greater than 255 octets, REJECT/RETURN 1696 'client-error-request-value-too-long'. 1697 IF NOT in the Printer object's "media-supported" attribute, copy the 1698 attribute and the unsupported value to the Unsupported Attributes 1699 response group. 1701 printer-resolution (resolution) 1703 IF NOT a single 'resolution' value with a length equal to 9 octets, 1704 REJECT/RETURN 'client-error-bad-request'. 1705 IF NOT in the Printer object's "printer-resolution-supported" 1706 attribute, copy the attribute and the unsupported value to the 1707 Unsupported Attributes response group. 1709 print-quality (type2 enum) 1711 IF NOT a single 'enum' value with a length equal to 4 octets, 1712 REJECT/RETURN 'client-error-bad-request'. 1713 IF NOT in the Printer object's "print-quality-supported" attribute, 1714 copy the attribute and the unsupported value to the Unsupported 1715 Attributes response group. 1717 unknown or unsupported attribute (i.e., there is no corresponding 1718 Printer object "xxx-supported" attribute) 1720 IF the attribute syntax supplied by the client is supported but the 1721 length is not legal for that attribute syntax, 1722 REJECT/RETURN 'client-error-bad-request' if the length of the 1723 attribute syntax is fixed or 'client-error-request-value-too-long' 1724 if the length of the attribute syntax is variable. 1725 ELSE copy the attribute and value to the Unsupported Attributes 1726 response group and change the attribute value to the "out-of-band" 1727 'unsupported' value. Any remaining Job Template Attributes are 1728 either unknown or unsupported Job Template attributes and are 1729 validated algorithmically according to their attribute syntax for 1730 proper length (see below). 1732 ----------------------------------------------- 1734 If the attribute syntax is supported AND the length check fails, the IPP 1735 object REJECTS the request and RETURNS the 'client-error-bad-request' if 1736 the length of the attribute syntax is fixed or the 'client-error- 1737 request-value-too-long' status code if the length of the attribute 1738 syntax is variable. Otherwise, the IPP object copies the unsupported Job 1739 Template attribute to the Unsupported Attributes response group and 1740 changes the attribute value to the "out-of-band" 'unsupported' value. 1741 The following table shows the length checks for all attribute syntaxes. 1743 Expires March 27, 2000 1744 In the following table: "<=" means less than or equal, "=" means equal 1745 to: 1747 Name Octet length check for read-write attributes 1748 ----------- -------------------------------------------- 1749 'textWithLanguage <= 1023 AND 'naturalLanguage' <= 63 1750 'textWithoutLanguage' <= 1023 1751 'nameWithLanguage' <= 255 AND 'naturalLanguage' <= 63 1752 'nameWithoutLanguage' <= 255 1753 'keyword' <= 255 1754 'enum' = 4 1755 'uri' <= 1023 1756 'uriScheme' <= 63 1757 'charset' <= 63 1758 'naturalLanguage' <= 63 1759 'mimeMediaType' <= 255 1760 'octetString' <= 1023 1761 'boolean' = 1 1762 'integer' = 4 1763 'rangeOfInteger' = 8 1764 'dateTime' = 11 1765 'resolution' = 9 1766 '1setOf X' 1768 Note: It's possible for a Printer to receive a zero length keyword in a 1769 request. Since this is a keyword, its value needs to be compared with 1770 the supported values. Assuming that the printer doesn't have any values 1771 in its corresponding "xxx-supported" attribute that are keywords of zero 1772 length, the comparison will fail. Then the request will be accepted or 1773 rejected depending on the value of "ipp-attributes-fidelity" being 1774 'false' or 'true', respectively. No special handling is required for 1776 3.1.2.3.1 Check for conflicting Job Template attributes values 1778 Once all the Operation and Job Template attributes have been checked 1779 individually, the Printer object SHOULD check for any conflicting values 1780 among all the supported values supplied by the client. For example, a 1781 Printer object might be able to staple and to print on transparencies, 1782 however due to physical stapling constraints, the Printer object might 1783 not be able to staple transparencies. The IPP object copies the 1784 supported attributes and their conflicting attribute values to the 1785 Unsupported Attributes response group. The Printer object only copies 1786 over those attributes that the Printer object either ignores or 1787 substitutes in order to resolve the conflict, and it returns the 1788 original values which were supplied by the client. For example suppose 1789 the client supplies "finishings" equals 'staple' and "media" equals 1790 'transparency', but the Printer object does not support stapling 1791 transparencies. If the Printer chooses to ignore the stapling request 1792 in order to resolve the conflict, the Printer objects returns 1793 "finishings" equal to 'staple' in the Unsupported Attributes response 1794 group. If any attributes are multi-valued, only the conflicting values 1795 of the attributes are copied. 1797 Expires March 27, 2000 1798 Note: The decisions made to resolve the conflict (if there is a choice) 1799 is implementation dependent. 1801 3.1.2.3.2 Decide whether to REJECT the request 1803 If there were any unsupported Job Template attributes or 1804 unsupported/conflicting Job Template attribute values and the client 1805 supplied the "ipp-attribute-fidelity" attribute with the 'true' value, 1806 the Printer object REJECTS the request and return the status code: 1808 (1) 'client-error-conflicting-attributes' status code, if there were 1809 any conflicts between attributes supplied by the client. 1810 (2) 'client-error-attributes-or-values-not-supported' status code, 1811 otherwise. 1813 Note: Unsupported Operation attributes or values that are returned do 1814 not affect the status returned in this step. If the unsupported 1815 Operation attribute was a serious error, the above already rejected the 1816 request in a previous step. If control gets to this step with 1817 unsupported Operation attributes being returned, they are not serious 1818 errors. 1820 In general, the final results of Job processing are unknown at Job 1821 submission time. The client has to rely on notifications or polling to 1822 find out what happens at Job processing time. However, there are cases 1823 in which some Printers can determine at Job submission time that Job 1824 processing is going to fail. As an optimization, we'd like to have the 1825 Printer reject the Job in these cases. 1827 There are three types of "processing" errors that might be detectable at 1828 Job submission time: 1830 1. 'client-error-document-format-not-supported' : For the Print-Job, 1831 Send-Document, Print-URI, and Send-URI operations, if all these 1832 conditions are true: 1834 . the Printer supports auto-sensing, 1835 . the request "document-format" operation attribute is 1836 'application/octet-stream', 1837 . the Printer receives document data before responding, 1838 . the Printer auto-senses the document format before responding, 1839 . the sensed document format is not supported by the Printer 1840 then the Printer should respond with 'client-error-document-format-not- 1841 supported' status. 1843 2. 'client-error-compression-error': For the Print-Job, Send-Document, 1844 Print-URI, and Send-URI operations, if all these conditions are true: 1846 . the client supplies a supported value for the "compression" 1847 operation attribute in the request 1848 . the Printer receives document data before responding, 1849 . the Printer attempts to decompress the document data before 1850 responding, 1852 Expires March 27, 2000 1853 . the document data cannot be decompressed using the algorithm 1854 specified by the "compression" operation attribute 1855 then the Printer should respond with 'client-error-compression-error' 1856 status. 1858 3. 'client-error-document-access-error': For the Print-URI, and Send- 1859 URI operations, if the Printer attempts and fails to pull the referenced 1860 document data before responding, it should respond with 'client-error- 1861 document-access-error' status. 1863 Some Printers are not able to detect these errors until Job processing 1864 time. In that case, the errors are recorded in the corresponding job- 1865 state and job-state reason attributes. (There is no standard way for a 1866 client to determine whether a Printer can detect these errors at Job 1867 submission time.) For example, if auto-sensing happens AFTER the job is 1868 accepted (as opposed to auto-sensing at submit time before returning the 1869 response), the implementation aborts the job, puts the job in the 1870 'aborted' state and sets the 'unsupported-document-format' value in the 1871 job's "job-state-reasons". 1873 A client should always provide a valid "document-format" operation 1874 attribute whenever practical. In the absence of other information, a 1875 client itself may sniff the document data to determine document format. 1877 Auto sensing at Job submission time may be more difficult for the 1878 Printer when combined with compression. For auto-sensed Jobs, a client 1879 may be better off deferring compression to the transfer protocol layer, 1880 e.g.; by using the HTTP Content-Encoding header. 1882 3.1.2.3.3 For the Validate-Job operation, RETURN one of the success 1883 status codes 1885 If the requested operation is the Validate-Job operation, the Printer 1886 object returns: 1888 (1) the "successful-ok" status code, if there are no unsupported or 1889 conflicting Job Template attributes or values. 1890 (2) the "successful-ok-conflicting-attributes, if there are any 1891 conflicting Job Template attribute or values. 1892 (3) the "successful-ok-ignored-or-substituted-attributes, if there 1893 are only unsupported Job Template attributes or values. 1895 Note: Unsupported Operation attributes or values that are returned do 1896 not affect the status returned in this step. If the unsupported 1897 Operation attribute was a serious error, the above already rejected the 1898 request in a previous step. If control gets to this step with 1899 unsupported Operation attributes being returned, they are not serious 1900 errors. 1902 3.1.2.3.4 Create the Job object with attributes to support 1904 Expires March 27, 2000 1905 If "ipp-attribute-fidelity" is set to 'false' (or it was not supplied by 1906 the client), the Printer object: 1908 (1) creates a Job object, assigns a unique value to the job's "job- 1909 uri" and "job-id" attributes, and initializes all of the job's 1910 other supported Job Description attributes. 1911 (2) removes all unsupported attributes from the Job object. 1912 (3) for each unsupported value, removes either the unsupported value 1913 or substitutes the unsupported attribute value with some supported 1914 value. If an attribute has no values after removing unsupported 1915 values from it, the attribute is removed from the Job object (so 1916 that the normal default behavior at job processing time will take 1917 place for that attribute). 1918 (4) for each conflicting value, removes either the conflicting value 1919 or substitutes the conflicting attribute value with some other 1920 supported value. If an attribute has no values after removing 1921 conflicting values from it, the attribute is removed from the Job 1922 object (so that the normal default behavior at job processing time 1923 will take place for that attribute). 1925 If there were no attributes or values flagged as unsupported, or the 1926 value of 'ipp-attribute-fidelity" was 'false', the Printer object is 1927 able to accept the create request and create a new Job object. If the 1928 "ipp-attribute-fidelity" attribute is set to 'true', the Job Template 1929 attributes that populate the new Job object are necessarily all the Job 1930 Template attributes supplied in the create request. If the "ipp- 1931 attribute-fidelity" attribute is set to 'false', the Job Template 1932 attributes that populate the new Job object are all the client supplied 1933 Job Template attributes that are supported or that have value 1934 substitution. Thus, some of the requested Job Template attributes may 1935 not appear in the Job object because the Printer object did not support 1936 those attributes. The attributes that populate the Job object are 1937 persistently stored with the Job object for that Job. A Get-Job- 1938 Attributes operation on that Job object will return only those 1939 attributes that are persistently stored with the Job object. 1941 Note: All Job Template attributes that are persistently stored with the 1942 Job object are intended to be "override values"; that is, they that take 1943 precedence over whatever other embedded instructions might be in the 1944 document data itself. However, it is not possible for all Printer 1945 objects to realize the semantics of "override". End users may query the 1946 Printer's "pdl-override-supported" attribute to determine if the Printer 1947 either attempts or does not attempt to override document data 1948 instructions with IPP attributes. 1950 There are some cases, where a Printer supports a Job Template attribute 1951 and has an associated default value set for that attribute. In the case 1952 where a client does not supply the corresponding attribute, the Printer 1953 does not use its default values to populate Job attributes when creating 1954 the new Job object; only Job Template attributes actually in the create 1955 request are used to populate the Job object. The Printer's default 1956 values are only used later at Job processing time if no other IPP 1957 attribute or instruction embedded in the document data is present. 1959 Expires March 27, 2000 1960 Note: If the default values associated with Job Template attributes that 1961 the client did not supply were to be used to populate the Job object, 1962 then these values would become "override values" rather than defaults. 1963 If the Printer supports the 'attempted' value of the "pdl-override- 1964 supported" attribute, then these override values could replace values 1965 specified within the document data. This is not the intent of the 1966 default value mechanism. A default value for an attribute is used only 1967 if the create request did not specify that attribute (or it was ignored 1968 when allowed by "ipp-attribute-fidelity" being 'false') and no value was 1969 provided within the content of the document data. 1971 If the client does not supply a value for some Job Template attribute, 1972 and the Printer does not support that attribute, as far as IPP is 1973 concerned, the result of processing that Job (with respect to the 1974 missing attribute) is undefined. 1976 3.1.2.3.5 Return one of the success status codes 1978 Once the Job object has been created, the Printer object accepts the 1979 request and returns to the client: 1981 (1) the 'successful-ok' status code, if there are no unsupported or 1982 conflicting Job Template attributes or values. 1983 (2) the 'successful-ok-conflicting-attributes' status code, if there 1984 are any conflicting Job Template attribute or values. 1985 (3) the 'successful-ok-ignored-or-substituted-attributes' status 1986 code, if there are only unsupported Job Template attributes or 1987 values. 1989 Note: Unsupported Operation attributes or values that are returned do 1990 not affect the status returned in this step. If the unsupported 1991 Operation attribute was a serious error, the above already rejected the 1992 request in a previous step. If control gets to this step with 1993 unsupported Operation attributes being returned, they are not serious 1994 errors. 1996 The Printer object also returns Job status attributes that indicate the 1997 initial state of the Job ('pending', 'pending-held', 'processing', 1998 etc.), etc. See Print-Job Response, [IPP-MOD] section 3.2.1.2. 2000 3.1.2.3.6 Accept appended Document Content 2002 The Printer object accepts the appended Document Content data and either 2003 starts it printing, or spools it for later processing. 2005 3.1.2.3.7 Scheduling and Starting to Process the Job 2007 The Printer object uses its own configuration and implementation 2008 specific algorithms for scheduling the Job in the correct processing 2009 order. Once the Printer object begins processing the Job, the Printer 2010 changes the Job's state to 'processing'. If the Printer object supports 2012 Expires March 27, 2000 2013 PDL override (the "pdl-override-supported" attribute set to 2014 'attempted'), the implementation does its best to see that IPP 2015 attributes take precedence over embedded instructions in the document 2016 data. 2018 3.1.2.3.8 Completing the Job 2020 The Printer object continues to process the Job until it can move the 2021 Job into the 'completed' state. If an Cancel-Job operation is received, 2022 the implementation eventually moves the Job into the 'canceled' state. 2023 If the system encounters errors during processing that do not allow it 2024 to progress the Job into a completed state, the implementation halts all 2025 processing, cleans up any resources, and moves the Job into the 2026 'aborted' state. 2028 3.1.2.3.9 Destroying the Job after completion 2030 Once the Job moves to the 'completed', 'aborted', or 'canceled' state, 2031 it is an implementation decision as to when to destroy the Job object 2032 and release all associated resources. Once the Job has been destroyed, 2033 the Printer would return either the "client-error-not-found" or "client- 2034 error-gone" status codes for operations directed at that Job. 2036 Note: the Printer object SHOULD NOT re-use a "job-uri" or "job-id" 2037 value for a sufficiently long time after a job has been destroyed, so 2038 that stale references kept by clients are less likely to access the 2039 wrong (newer) job. 2041 3.1.2.3.10 Interaction with "ipp-attribute-fidelity" 2043 Some Printer object implementations may support "ipp-attribute-fidelity" 2044 set to 'true' and "pdl-override-supported" set to 'attempted' and yet 2045 still not be able to realize exactly what the client specifies in the 2046 create request. This is due to legacy decisions and assumptions that 2047 have been made about the role of job instructions embedded within the 2048 document data and external job instructions that accompany the document 2049 data and how to handle conflicts between such instructions. The 2050 inability to be 100% precise about how a given implementation will 2051 behave is also compounded by the fact that the two special attributes, 2052 "ipp-attribute-fidelity" and "pdl-"override-supported", apply to the 2053 whole job rather than specific values for each attribute. For example, 2054 some implementations may be able to override almost all Job Template 2055 attributes except for "number-up". Character Sets, natural languages, 2056 and internationalization 2058 This section discusses character set support, natural language support 2059 and internationalization. 2061 3.1.2.3.11 Character set code conversion support (Issue 1.5) 2063 Expires March 27, 2000 2064 IPP clients and IPP objects are REQUIRED to support UTF-8. They MAY 2065 support additional charsets. It is RECOMMENDED that an IPP object also 2066 support US-ASCII, since many clients support US-ASCII, and indicate that 2067 UTF-8 and US-ASCII are supported by populating the Printer's "charset- 2068 supported" with 'utf-8' and 'us-ascii' values. An IPP object is 2069 required to code covert with as little loss as possible between the 2070 charsets that it supports, as indicated in the Printer's "charsets- 2071 supported" attribute. 2073 How should the server handle the situation where the "attributes- 2074 charset" of the response itself is "us-ascii", but one or more 2075 attributes in that response is in the "utf-8" format? 2077 Example: Consider a case where a client sends a Print-Job request with 2078 "utf-8" as the value of "attributes-charset" and with the "job-name" 2079 attribute supplied. Later another client submits a Get-Job-Attribute or 2080 Get-Jobs request. This second request contains the "attributes-charset" 2081 with value "us-ascii" and "requested-attributes" attribute with exactly 2082 one value "job-name". 2084 According to the IPP-Mod document (section 3.1.4.2), the value of the 2085 "attributes-charset" for the response of the second request must be "us- 2086 ascii" since that is the charset specified in the request. The "job- 2087 name" value, however, is in "utf-8" format. Should the request be 2088 rejected even though both "utf-8" and "us-ascii" charsets are supported 2089 by the server? or should the "job-name" value be converted to "us-ascii" 2090 and return "successful-ok-conflicting-attributes" (0x0002) as the 2091 status code? 2093 Answer: An IPP object that supports both utf-8 (REQUIRED) and us-ascii, 2094 the second paragraph of section 3.1.4.2 applies so that the IPP object 2095 MUST accept the request, perform code set conversion between these two 2096 charsets with "the highest fidelity possible" and return 'successful- 2097 ok', rather than a warning 'successful-ok-conflicting-attributes, or an 2098 error. The printer will do the best it can to convert between each of 2099 the character sets that it supports--even if that means providing a 2100 string of question marks because none of the characters are 2101 representable in US ASCII. If it can't perform such conversion, it MUST 2102 NOT advertise us-ascii as a value of its "attributes-charset-supported" 2103 and MUST reject any request that requests 'us-ascii'. 2105 One IPP object implementation strategy is to convert all request text 2106 and name values to a Unicode internal representation. This is 16-bit 2107 and virtually universal. Then convert to the specified operation 2108 attributes-charset on output. 2110 Also it would be smarter for a client to ask for 'utf-8', rather than 2111 'us-ascii' and throw away characters that it doesn't understand, rather 2112 than depending on the code conversion of the IPP object. 2114 3.1.2.3.12 What charset to return when an unsupported charset is 2115 requested (Issue 1.19)? 2117 Expires March 27, 2000 2118 Section 3.1.4.1 Request Operation attributes was clarified in November 2119 1998 as follows: 2121 All clients and IPP objects MUST support the 'utf-8' charset [RFC2044] 2122 and MAY support additional charsets provided that they are registered 2123 with IANA [IANA-CS]. If the Printer object does not support the client 2124 supplied charset value, the Printer object MUST reject the request, set 2125 the "attributes-charset" to 'utf-8' in the response, and return the 2126 'client-error-charset-not-supported' status code and any 'text' or 2127 'name' attributes using the 'utf-8' charset. 2129 Since the client and IPP object MUST support UTF-8, returning any text 2130 or name attributes in UTF-8 when the client requests a charset that is 2131 not supported should allow the client to display the text or name. 2133 Since such an error is a client error, rather than a user error, the 2134 client should check the status code first so that it can avoid 2135 displaying any other returned 'text' and 'name' attributes that are not 2136 in the charset requested. 2138 Furthermore, [ipp-mod] section 14.1.4.14 client-error-charset-not- 2139 supported (0x040D) was clarified in November 1998 as follows: 2141 For any operation, if the IPP Printer does not support the charset 2142 supplied by the client in the "attributes-charset" operation attribute, 2143 the Printer MUST reject the operation and return this status and any 2144 'text' or 'name' attributes using the 'utf-8' charset (see Section 2145 3.1.4.1). 2147 3.1.2.3.13 Natural Language Override (NLO) (Issue 1.45) 2149 The 'text' and 'name' attributes each have two forms. One has an 2150 implicit natural language, and the other has an explicit natural 2151 language. The 'textWithoutLanguage' and 'textWithLanguage' are the two 2152 'text' forms. The 'nameWithoutLanguage" and 'nameWithLanguage are the 2153 two 'name' forms. If a receiver (IPP object or IPP client) supports an 2154 attribute with attribute syntax 'text', it MUST support both forms in a 2155 request and a response. A sender (IPP client or IPP object) MAY send 2156 either form for any such attribute. When a sender sends a 2157 WithoutLanguage form, the implicit natural language is specified in the 2158 "attributes-natural-language" operation attribute, which all senders 2159 MUST include in every request and response. 2161 When a sender sends a WithLanguage form, it MAY be different from the 2162 implicit natural language supplied by the sender or it MAY be the same. 2163 The receiver MUST treat either form equivalently. 2165 There is an implementation decision for senders, whether to always send 2166 the WithLanguage forms or use the WithoutLanguage form when the 2167 attribute's natural language is the same as the request or response. 2168 The former approach makes the sender implementation simpler. The latter 2169 approach is more efficient on the wire and allows inter-working with 2171 Expires March 27, 2000 2172 non-conforming receivers that fail to support the WithLanguage forms. 2173 As each approach have advantages, the choice is completely up to the 2174 implementer of the sender. 2176 Furthermore, when a client receives a 'text' or 'name' job attribute 2177 that it had previously supplied, that client MUST NOT expect to see the 2178 attribute in the same form, i.e., in the same WithoutLanguage or 2179 WithLanguage form as the client supplied when it created the job. The 2180 IPP object is free to transform the attribute from the WithLanguage form 2181 to the WithoutLanguage form and vice versa, as long as the natural 2182 language is preserved. However, in order to meet this latter 2183 requirement, it is usually simpler for the IPP object implementation to 2184 store the natural language explicitly with the attribute value, i.e., to 2185 store using an internal representation that resembles the WithLanguage 2186 form. 2188 The IPP Printer MUST copy the natural language of a job, i.e., the value 2189 of the "attributes-natural-language" operation attribute supplied by the 2190 client in the create operation, to the Job object as a Job Description 2191 attribute, so that a client is able to query it. In returning a Get- 2192 Job-Attributes response, the IPP object MAY return one of three natural 2193 language values in the response's "attributes-natural-language" 2194 operation attribute: (1) that requested by the requester, (2) the 2195 natural language of the job, or (3) the configured natural language of 2196 the IPP Printer, if the requested language is not supported by the IPP 2197 Printer. 2199 This "attributes-natural-language" Job Description attribute is useful 2200 for an IPP object implementation that prints start sheets in the 2201 language of the user who submitted the job. This same Job Description 2202 attribute is useful to a multi-lingual operator who has to communicate 2203 with different job submitters in different natural languages. This same 2204 Job Description attribute is expected to be used in the future to 2205 generate notification messages in the natural language of the job 2206 submitter. 2208 Early drafts of [IPP-MOD] contained a job-level natural language 2209 override (NLO) for the Get-Jobs response. A job-level (NLO) is an 2210 (unrequested) Job Attribute which then specified the implicit natural 2211 language for any other WithoutLanguage job attributes returned in the 2212 response for that job. Interoperability testing of early 2213 implementations showed that no one was implementing the job-level NLO in 2214 Get-Job responses. So the job-level NLO was eliminated from the Get- 2215 Jobs response. This simplification makes all requests and responses 2216 consistent in that the implicit natural language for any WithoutLanguage 2217 'text' or 'name' form is always supplied in the request's or response's 2218 "attributes-natural-language" operation attribute. 2220 3.1.3Status codes returned by operation (Issue 1.50) 2222 This section corresponds to [IPP-MOD] section 3.1.6 "Operation Response 2223 Status Codes and Status Messages". This section lists all status codes 2224 once in the first operation (Print-Job). Then it lists the status codes 2226 Expires March 27, 2000 2227 that are different or specialized for subsequent operations under each 2228 operation. 2230 3.1.3.1 Printer Operations 2232 3.1.3.1.1 Print-Job 2234 The Printer object MUST return one of the following "status-code" values 2235 for the indicated reason. Whether all of the document data has been 2236 accepted or not before returning the success or error response depends 2237 on implementation. See Section 13 in [IPP-MOD] for a more complete 2238 description of each status code. 2240 For the following success status codes, the Job object has been created 2241 and the "job-id", and "job-uri" assigned and returned in the response: 2243 successful-ok: no request attributes were substituted or ignored. 2244 successful-ok-ignored-or-substituted-attributes: some supplied (1) 2245 attributes were ignored or (2) unsupported attribute syntaxes or 2246 values were substituted with supported values or were ignored. 2247 Unsupported attributes, attribute syntax's, or values MUST be 2248 returned in the Unsupported Attributes group of the response. 2249 successful-ok-conflicting-attributes: some supplied attribute values 2250 conflicted with the values of other supplied attributes and were 2251 either substituted or ignored. Attributes or values which conflict 2252 with other attributes and have been substituted or ignored MUST be 2253 returned in the Unsupported Attributes group of the response as 2254 supplied by the client. 2256 [ipp-mod] section 3.1.6 Operation Status Codes and Messages states 2257 (Issue 1.19): 2259 If the Printer object supports the "status-message" operation attribute, 2260 it SHOULD use the REQUIRED 'utf-8' charset to return a status message 2261 for the following error status codes (see section 13 in [IPP-MOD]): 2262 'client-error-bad-request', 'client-error-charset-not-supported', 2263 'server-error-internal-error', 'server-error-operation-not-supported', 2264 and 'server-error-version-not-supported'. In this case, it MUST set the 2265 value of the "attributes-charset" operation attribute to 'utf-8' in the 2266 error response. 2268 For the following error status codes, no job is created and no "job-id" 2269 or "job-uri" is returned: 2271 client-error-bad-request: The request syntax does not conform to the 2272 specification. 2273 client-error-forbidden: The request is being refused for 2274 authorization or authentication reasons. The implementation 2275 security policy is to not reveal whether the failure is one of 2276 authentication or authorization. 2277 client-error-not-authenticated: Either the request requires 2278 authentication information to be supplied or the authentication 2279 information is not sufficient for authorization. 2281 Expires March 27, 2000 2283 client-error-not-authorized: The requester is not authorized to 2284 perform the request on the target object. 2285 client-error-not-possible: The request cannot be carried out because 2286 of the state of the system. See also 'server-error-not-accepting- 2287 jobs' status code, which MUST take precedence if the Printer 2288 object's "printer-accepting-jobs" attribute is 'false'. 2289 client-error-timeout: not applicable. 2290 client-error-not-found: the target object does not exist. 2291 client-error-gone: the target object no longer exists and no 2292 forwarding address is known. 2293 client-error-request-entity-too-large: the size of the request 2294 and/or print data exceeds the capacity of the IPP Printer to 2295 process it. 2296 client-error-request-value-too-long: the size of request variable 2297 length attribute values, such as 'text' and 'name' attribute 2298 syntax's, exceed the maximum length specified in [IPP-MOD] for the 2299 attribute and MUST be returned in the Unsupported Attributes Group. 2300 client-error-document-format-not-supported: the document format 2301 supplied is not supported. The "document-format" attribute with 2302 the unsupported value MUST be returned in the Unsupported 2303 Attributes Group. This error SHOULD take precedence over any other 2304 'xxx-not-supported' error, except 'client-error-charset-not- 2305 supported'. 2306 client-error-attributes-or-values-not-supported: one or more 2307 supplied attributes, attribute syntax's, or values are not 2308 supported and the client supplied the "ipp-attributes-fidelity" 2309 operation attribute with a 'true' value. They MUST be returned in 2310 the Unsupported Attributes Group as explained below. 2311 client-error-uri-scheme-not-supported: not applicable. 2312 client-error-charset-not-supported: the charset supplied in the 2313 "attributes-charset" operation attribute is not supported. The 2314 Printer's "configured-charset" MUST be returned in the response as 2315 the value of the "attributes-charset" operation attribute and used 2316 for any 'text' and 'name' attributes returned in the error 2317 response. This error SHOULD take precedence over any other error, 2318 unless the request syntax is so bad that the client's supplied 2319 "attributes-charset" cannot be determined. 2320 client-error-conflicting-attributes: one or more supplied attribute 2321 values conflicted with each other and the client supplied the "ipp- 2322 attributes-fidelity" operation attribute with a 'true' value. They 2323 MUST be returned in the Unsupported Attributes Group as explained 2324 below. 2325 server-error-internal-error: an unexpected condition prevents the 2326 request from being fulfilled. 2327 server-error-operation-not-supported: not applicable (since Print- 2328 Job is REQUIRED). 2329 server-error-service-unavailable: the service is temporarily 2330 overloaded. 2331 server-error-version-not-supported: the version in the request is 2332 not supported. The "closest" version number supported MUST be 2333 returned in the response. 2334 server-error-device-error: a device error occurred while receiving 2335 or spooling the request or document data or the IPP Printer object 2336 can only accept one job at a time. 2338 Expires March 27, 2000 2340 server-error-temporary-error: a temporary error such as a buffer 2341 full write error, a memory overflow, or a disk full condition 2342 occurred while receiving the request and/or the document data. 2343 server-error-not-accepting-jobs: the Printer object's "printer-is- 2344 not-accepting-jobs" attribute is 'false'. 2345 server-error-busy: the Printer is too busy processing jobs to accept 2346 another job at this time. 2347 server-error-job-canceled: the job has been canceled by an operator 2348 or the system while the client was transmitting the document data. 2350 3.1.3.1.2 Print-URI 2352 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2353 Job Response are applicable to Print-URI with the following 2354 specializations and differences. See Section 14 for a more complete 2355 description of each status code. 2357 client-error-uri-scheme-not-supported: the URI scheme supplied in 2358 the "document-uri" operation attribute is not supported and is 2359 returned in the Unsupported Attributes group. 2360 server-error-operation-not-supported: the Print-URI operation is not 2361 supported. 2363 3.1.3.1.3 Validate-Job 2365 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2366 Job Response are applicable to Validate-Job. See Section 13 in [IPP- 2367 MOD] for a more complete description of each status code. 2369 3.1.3.1.4 Create-Job 2371 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2372 Job Response are applicable to Create-Job with the following 2373 specializations and differences. See Section 13 in [IPP-MOD] for a more 2374 complete description of each status code. 2376 server-error-operation-not-supported: the Create-Job operation is 2377 not supported. 2379 3.1.3.1.5 Get-Printer-Attributes 2381 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2382 Job Response are applicable to the Get-Printer-Attributes operation with 2383 the following specialization's and differences. See Section 13 in 2384 [IPP-MOD] for a more complete description of each status code. 2386 For the following success status codes, the requested attributes are 2387 returned in Group 3 in the response: 2389 successful-ok: no request attributes were substituted or ignored 2390 (same as Print-Job) and no requested attributes were unsupported. 2392 Expires March 27, 2000 2394 successful-ok-ignored-or-substituted-attributes: same as Print-Job, 2395 except the "requested-attributes" operation attribute MAY, but NEED 2396 NOT, be returned with the unsupported values. 2397 successful-ok-conflicting-attributes: same as Print-Job. 2399 For the error status codes, Group 3 is returned containing no attributes 2400 or is not returned at all: 2402 client-error-not-possible: Same as Print-Job, in addition the 2403 Printer object is not accepting any requests. 2404 client-error-request-entity-too-large: same as Print-job, except 2405 that no print data is involved. 2406 client-error-attributes-or-values-not-supported: not applicable, 2407 since unsupported operation attributes MUST be ignored and 2408 'successful-ok-ignored-or-substituted-attributes' returned. 2409 client-error-conflicting-attributes: same as Print-Job, except that 2410 "ipp-attribute-fidelity" is not involved. 2411 server-error-operation-not-supported: not applicable (since Get- 2412 Printer-Attributes is REQUIRED). 2413 server-error-device-error: same as Print-Job, except that no 2414 document data is involved. 2415 server-error-temporary-error: same as Print-Job, except that no 2416 document data is involved. 2417 server-error-not-accepting-jobs: not applicable.. 2418 server-error-busy: same as Print-Job, except the IPP object is too 2419 busy to accept even query requests. 2420 server-error-job-canceled: not applicable.. 2422 3.1.3.1.6 Get-Jobs 2424 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2425 Job Response are applicable to the Get-Jobs operation with the following 2426 specialization's and differences. See Section 13 in [IPP-MOD] for a 2427 more complete description of each status code. 2429 For the following success status codes, the requested attributes are 2430 returned in Group 3 in the response: 2432 successful-ok: no request attributes were substituted or ignored 2433 (same as Print-Job) and no requested attributes were unsupported. 2434 successful-ok-ignored-or-substituted-attributes: same as Print-Job, 2435 except the "requested-attributes" operation attribute MAY, but NEED 2436 NOT, be returned with the unsupported values. 2437 successful-ok-conflicting-attributes: same as Print-Job. 2439 For any error status codes, Group 3 is returned containing no attributes 2440 or is not returned at all. The following brief error status code 2441 descriptions contain unique information for use with Get-Jobs operation. 2442 See section 14 for the other error status codes that apply uniformly to 2443 all operations: 2445 client-error-not-possible: Same as Print-Job, in addition the 2446 Printer object is not accepting any requests. 2447 client-error-request-entity-too-large: same as Print-job, except 2448 that no print data is involved. 2449 client-error-document-format-not-supported: not applicable. 2451 Expires March 27, 2000 2452 client-error-attributes-or-values-not-supported: not applicable, 2453 since unsupported operation attributes MUST be ignored and 2454 'successful-ok-ignored-or-substituted-attributes' returned. 2455 client-error-conflicting-attributes: same as Print-Job, except that 2456 "ipp-attribute-fidelity" is not involved. 2457 server-error-operation-not-supported: not applicable (since Get-Jobs 2458 is REQUIRED). 2459 server-error-device-error: same as Print-Job, except that no 2460 document data is involved. 2461 server-error-temporary-error: same as Print-Job, except that no 2462 document data is involved. 2463 server-error-not-accepting-jobs: not applicable. 2464 server-error-job-canceled: not applicable. 2466 3.1.3.1.7 Pause-Printer 2468 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2469 Job Response are applicable to Pause-Printer with the following 2470 specializations and differences. See Section 13 in [IPP-MOD] for a more 2471 complete description of each status code. 2473 For the following success status codes, the Printer object is being 2474 stopped from scheduling jobs on all its devices. 2476 successful-ok: no request attributes were substituted or ignored 2477 (same as Print-Job). 2478 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2479 successful-ok-conflicting-attributes: same as Print-Job. 2481 For any of the error status codes, the Printer object has not been 2482 stopped from scheduling jobs on all its devices. 2484 client-error-not-possible: not applicable. 2485 client-error-not-found: the target Printer object does not exist. 2486 client-error-gone: the target Printer object no longer exists and no 2487 forwarding address is known. 2488 client-error-request-entity-too-large: same as Print-Job, except no 2489 document data is involved. 2490 client-error-document-format-not-supported: not applicable. 2491 client-error-conflicting-attributes: same as Print-Job, except that 2492 the Printer's "printer-is-accepting-jobs" attribute is not 2493 involved. 2494 server-error-operation-not-supported: the Pause-Printer operation is 2495 not supported. 2496 server-error-device-error: not applicable. 2497 server-error-temporary-error: same as Print-Job, except no document 2498 data is involved. 2499 server-error-not-accepting-jobs: not applicable. 2500 server-error-job-canceled: not applicable. 2502 3.1.3.1.8 Resume-Printer 2504 Expires March 27, 2000 2505 All of the Print-Job status code descriptions in Section 3.1.3.1.1 2506 Print-Job Response with the specialization's described for Pause-Printer 2507 are applicable to Resume-Printer. See Section 13 in [IPP-MOD] for a 2508 more complete description of each status code. 2510 For the following success status codes, the Printer object resumes 2511 scheduling jobs on all its devices. 2513 successful-ok: no request attributes were substituted or ignored 2514 (same as Print-Job). 2515 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2516 successful-ok-conflicting-attributes: same as Print-Job. 2518 For any of the error status codes, the Printer object does not resume 2519 scheduling jobs. 2521 server-error-operation-not-supported: the Resume-Printer operation is 2522 not supported. 2524 3.1.3.1.9 Purge-Printer 2526 All of the Print-Job status code descriptions in Section 3.1.3.1.1 2527 Print-Job Response with the specialization's described for Pause-Printer 2528 are applicable to Purge-Printer. See Section 13 in [IPP-MOD] for a more 2529 complete description of each status code. 2531 For the following success status codes, the Printer object purges all 2532 it's jobs. 2534 successful-ok: no request attributes were substituted or ignored 2535 (same as Print-Job). 2536 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2537 successful-ok-conflicting-attributes: same as Print-Job. 2539 For any of the error status codes, the Printer object does not purge any 2540 jobs. 2542 server-error-operation-not-supported: the Purge-Printer operation is 2543 not supported. 2545 3.1.3.2 Job Operations 2547 3.1.3.2.1 Send-Document 2549 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2550 Job Response are applicable to the Get-Printer-Attributes operation with 2551 the following specialization's and differences. See Section 13 in 2552 [IPP-MOD] for a more complete description of each status code. 2554 For the following success status codes, the document has been added to 2555 the specified Job object and the job's "number-of-documents" attribute 2556 has been incremented: 2558 successful-ok: no request attributes were substituted or ignored 2559 (same as Print-Job). 2560 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2562 Expires March 27, 2000 2563 successful-ok-conflicting-attributes: same as Print-Job. 2565 For the error status codes, no document has been added to the Job object 2566 and the job's "number-of-documents" attribute has not been incremented: 2568 client-error-not-possible: Same as Print-Job, except that the 2569 Printer's "printer-is-accepting-jobs" attribute is not involved, so 2570 that the client is able to finish submitting a multi-document job 2571 after this attribute has been set to 'true'. Another condition is 2572 that the state of the job precludes Send-Document, i.e., the job 2573 has already been closed out by the client. However, if the IPP 2574 Printer closed out the job due to timeout, the 'client-error- 2575 timeout' error status SHOULD be returned instead. 2576 client-error-timeout: This request was sent after the Printer closed 2577 the job, because it has not received a Send-Document or Send-URI 2578 operation within the Printer's "multiple-operation-time-out" period 2579 . 2580 client-error-request-entity-too-large: same as Print-Job. 2581 client-error-conflicting-attributes: same as Print-Job, except that 2582 "ipp-attributes-fidelity" operation attribute is not involved.. 2583 server-error-operation-not-supported: the Send-Document request is 2584 not supported. 2585 server-error-not-accepting-jobs: not applicable. 2586 server-error-job-canceled: the job has been canceled by an operator 2587 or the system while the client was transmitting the data. 2589 3.1.3.2.2 Send-URI 2591 All of the Print-Job status code descriptions in Section 3.1.3.1.1 2592 Print-Job Response with the specialization's described for Send-Document 2593 are applicable to Send-URI. See Section 13 in [IPP-MOD] for a more 2594 complete description of each status code. 2596 client-error-uri-scheme-not-supported: the URI scheme supplied in 2597 the "document-uri" operation attribute is not supported and the 2598 "document-uri" attribute MUST be returned in the Unsupported 2599 Attributes group. 2600 server-error-operation-not-supported: the Send-URI operation is not 2601 supported. 2603 3.1.3.2.3 Cancel-Job 2605 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2606 Job Response are applicable to Cancel-Job with the following 2607 specializations and differences. See Section 13 in [IPP-MOD] for a more 2608 complete description of each status code. 2610 For the following success status codes, the Job object is being canceled 2611 or has been canceled: 2613 successful-ok: no request attributes were substituted or ignored 2614 (same as Print-Job). 2615 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2616 successful-ok-conflicting-attributes: same as Print-Job. 2618 Expires March 27, 2000 2620 For any of the error status codes, the Job object has not been canceled 2621 or was previously canceled. 2623 client-error-not-possible: The request cannot be carried out because 2624 of the state of the Job object ('completed', 'canceled', or 2625 'aborted') or the state of the system. 2626 client-error-not-found: the target Printer and/or Job object does 2627 not exist. 2628 client-error-gone: the target Printer and/or Job object no longer 2629 exists and no forwarding address is known. 2630 client-error-request-entity-too-large: same as Print-Job, except no 2631 document data is involved. 2632 client-error-document-format-not-supported: not applicable. 2633 client-error-attributes-or-values-not-supported: not applicable, 2634 since unsupported operation attributes and values MUST be ignored. 2635 client-error-conflicting-attributes: same as Print-Job, except that 2636 the Printer's "printer-is-accepting-jobs" attribute is not 2637 involved. 2638 server-error-operation-not-supported: not applicable (Cancel-Job is 2639 REQUIRED). 2640 server-error-device-error: same as Print-Job, except no document 2641 data is involved. 2642 server-error-temporary-error: same as Print-Job, except no document 2643 data is involved. 2644 server-error-not-accepting-jobs: not applicable.. 2645 server-error-job-canceled: not applicable. 2647 3.1.3.2.4 Get-Job-Attributes 2649 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2650 Job Response are applicable to Get-Job-Attributes with the following 2651 specializations and differences. See Section 13 in [IPP-MOD] for a more 2652 complete description of each status code. 2654 For the following success status codes, the requested attributes are 2655 returned in Group 3 in the response: 2657 successful-ok: no request attributes were substituted or ignored 2658 (same as Print-Job) and no requested attributes were unsupported. 2659 successful-ok-ignored-or-substituted-attributes: same as Print-Job, 2660 except the "requested-attributes" operation attribute MAY, but NEED 2661 NOT, be returned with the unsupported values. 2662 successful-ok-conflicting-attributes: same as Print-Job. 2664 For the error status codes, Group 3 is returned containing no attributes 2665 or is not returned at all. 2667 client-error-not-possible: Same as Print-Job, in addition the 2668 Printer object is not accepting any requests. 2669 client-error-document-format-not-supported: not applicable. 2670 client-error-attributes-or-values-not-supported: not applicable. 2671 client-error-uri-scheme-not-supported: not applicable. 2672 client-error-conflicting-attributes: not applicable 2674 Expires March 27, 2000 2675 server-error-operation-not-supported: not applicable (since Get-Job- 2676 Attributes is REQUIRED). 2677 server-error-device-error: same as Print-Job, except no document 2678 data is involved. 2679 server-error-temporary-error: sane as Print-Job, except no document 2680 data is involved.. 2681 server-error-not-accepting-jobs: not applicable. 2682 server-error-job-canceled: not applicable. 2684 3.1.3.2.5 Hold-Job 2686 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2687 Job Response are applicable to Hold-Job with the following 2688 specializations and differences. See Section 13 in [IPP-MOD] for a more 2689 complete description of each status code. 2691 For the following success status codes, the Job object is being held or 2692 has been held: 2694 successful-ok: no request attributes were substituted or ignored 2695 (same as Print-Job). 2696 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2697 successful-ok-conflicting-attributes: same as Print-Job. 2699 For any of the error status codes, the Job object has not been held or 2700 was previously held. 2702 client-error-not-possible: The request cannot be carried out because 2703 of the state of the Job object ('completed', 'canceled', or 2704 'aborted') or the state of the system. 2705 client-error-not-found: the target Printer and/or Job object does 2706 not exist. 2707 client-error-gone: the target Printer and/or Job object no longer 2708 exists and no forwarding address is known. 2709 client-error-request-entity-too-large: same as Print-Job, except no 2710 document data is involved. 2711 client-error-document-format-not-supported: not applicable. 2712 client-error-conflicting-attributes: same as Print-Job, except that 2713 the Printer's "printer-is-accepting-jobs" attribute is not 2714 involved. 2715 server-error-operation-not-supported: the Hold-Job operation is not 2716 supported. 2717 server-error-device-error: not applicable. 2718 server-error-temporary-error: same as Print-Job, except no document 2719 data is involved. 2720 server-error-not-accepting-jobs: not applicable. 2721 server-error-job-canceled: not applicable. 2723 3.1.3.2.6 Release-Job 2725 All of the Print-Job status code descriptions in Section 3.1.3.1.1 2726 Print-Job Response with the specialization's described for Hold-Job are 2728 Expires March 27, 2000 2729 applicable to Release-Job. See Section 13 in [IPP-MOD] for a more 2730 complete description of each status code. 2732 server-error-operation-not-supported: the Release-Job operation is 2733 not supported. 2735 3.1.3.2.7 Restart-Job 2737 All of the Print-Job status code descriptions in Section 3.1.3.1.1 2738 Print-Job Response with the specialization's described for Hold-Job are 2739 applicable to Restart-Job. See Section 13 in [IPP-MOD] for a more 2740 complete description of each status code. 2742 server-error-operation-not-supported: the Restart-Job operation is 2743 not supported. 2745 3.1.4Returning unsupported attributes in Get-Xxxx responses (Issue 1.18) 2747 In the Get-Printer-Attributes, Get-Jobs, or Get-Job-Attributes 2748 responses, the client cannot depend on getting unsupported attributes 2749 returned in the Unsupported Attributes group that the client requested, 2750 but are not supported by the IPP object. However, such unsupported 2751 requested attributes will not be returned in the Job Attributes or 2752 Printer Attributes group (since they are unsupported). Furthermore, the 2753 IPP object is REQUIRED to return the 'successful-ok-ignored-or- 2754 substituted-attributes' status code, so that the client knows that not 2755 all that was requested has been returned. 2757 3.1.5Sending empty attribute groups (Issue 1.16) 2759 The [IPP-MOD] and [IPP-PRO] specifications RECOMMEND that a sender not 2760 send an empty attribute group in a request or a response. However, they 2761 REQUIRE a receiver to accept an empty attribute group as equivalent to 2762 the omission of that group. So a client SHOULD omit the Job Template 2763 Attributes group entirely in a create operation that is not supplying 2764 any Job Template attributes. Similarly, an IPP object SHOULD omit an 2765 empty Unsupported Attributes group if there are no unsupported 2766 attributes to be returned in a response. 2768 The [IPP-PRO] specification REQUIRES a receiver to be able to receive 2769 either an empty attribute group or an omitted attribute group and treat 2770 them equivalently. The term "receiver" means an IPP object for a 2771 request and a client for a response. The term "sender' means a client 2772 for a request and an IPP object for a response. 2774 There is an exception to the rule for Get-Jobs when there are no 2775 attributes to be returned. [ipp-pro] contains the following paragraph: 2777 The syntax allows an xxx-attributes-tag to be present when the xxx- 2778 attribute-sequence that follows is empty. The syntax is defined this way 2779 to allow for the response of Get-Jobs where no attributes are returned 2780 for some job-objects. Although it is RECOMMENDED that the sender not 2781 send an xxx-attributes-tag if there are no attributes (except in the 2783 Expires March 27, 2000 2784 Get-Jobs response just mentioned), the receiver MUST be able to decode 2785 such syntax. 2787 3.2 Printer Operations 2789 3.2.1Print-Job operation 2791 3.2.1.1 Flow controlling the data portion of a Print-Job request 2792 (Issue 1.22) 2794 A paused printer, or one that is stopped due to paper out or jam or 2795 spool space full or buffer space full, may flow control the data of a 2796 Print-Job operation (at the TCP/IP layer), so that the client is not 2797 able to send all the document data. Consequently, the Printer will not 2798 return a response until the condition is changed. 2800 The Printer should not return a Print-Job response with an error code in 2801 any of these conditions, since either the printer will be resumed and/or 2802 the condition will be freed either by human intervention or as jobs 2803 print. 2805 In writing test scripts to test IPP Printers, the script must also be 2806 written not to expect a response, if the printer has been paused, until 2807 the printer is resumed, in order to work with all possible 2808 implementations. 2810 3.2.1.2 Returning job-state in Print-Job response (Issue 1.30) 2812 An IPP client submits a small job via Print-Job. By the time the IPP 2813 printer/print server is putting together a response to the operation, 2814 the job has finished printing and been removed as an object from the 2815 print system. What should the job-state be in the response? 2817 The Model suggests that the Printer return a response before it even 2818 accepts the document content. The Job Object Attributes are returned 2819 only if the IPP object returns one of the success status codes. Then the 2820 job-state would always be "pending" or "pending-held". 2822 This issue comes up for the implementation of an IPP Printer object as a 2823 server that forwards jobs to devices that do not provide job status back 2824 to the server. If the server is reasonably certain that the job 2825 completed successfully, then it should return the job-state as 2826 'completed'. Also the server can keep the job in its "job history" long 2827 after the job is no longer in the device. Then a user could query the 2828 server and see that the job was in the 'completed' state and completed 2829 as specified by the jobs "time-at-completed" time, which would be the 2830 same as the server submitted the job to the device. 2832 An alternative is for the server to respond to the client before or 2833 while sending the job to the device, instead of waiting until the server 2834 has finished sending the job to the device. In this case, the server 2836 Expires March 27, 2000 2837 can return the job's state as 'pending' with the 'job-outgoing' value in 2838 the job's "job-state-reasons" attribute. 2840 If the server doesn't know for sure whether the job completed 2841 successfully (or at all), it could return the (out-of-band) 'unknown' 2842 value. 2844 On the other hand, if the server is able to query the device and/or 2845 setup some sort of event notification that the device initiates when the 2846 job makes state transitions, then the server can return the current job 2847 state in the Print-Job response and in subsequent queries because the 2848 server knows what the job state is in the device (or can query the 2849 device). 2851 All of these alternatives depend on implementation of the server and the 2852 device. 2854 3.2.2Get-Printer-Attributes operation 2856 1 If a Printer supports the "printer-make-and-model" attribute and 2857 returns the .INF file model name of the printer in that attribute, the 2858 Microsoft client will automatically install the correct driver (if 2859 available). 2861 2 Clients which poll periodically for printer status or queued-job- 2862 count should use the "requested-attributes" operation attribute to 2863 limit the scope of the query in order to save Printer and network 2864 resources. 2866 3.2.3Get-Jobs operation 2868 3.2.3.1 Get-Jobs, my-jobs='true', and 'requesting-user-name' (Issue 2869 1.39)? 2871 In [ipp-mod] section 3.2.6.1 'Get-Jobs Request', if the attribute 'my- 2872 jobs' is present and set to TRUE, MUST the 'requesting-user-name' 2873 attribute be there too, and if it's not present what should the IPP 2874 printer do? 2876 [ipp-mod] Section 8.3 describes the various cases of "requesting-user- 2877 name" being present or not for any operation. If the client does not 2878 supply a value for "requesting-user-name", the printer MUST assume that 2879 the client is supplying some anonymous name, such as "anonymous". 2881 3.2.3.2 Why is there a "limit" attribute in the Get-Jobs operation? 2883 When using the Get-Jobs operation a client implementer might choose to 2884 limit the number of jobs that the client shows on the first screenful. 2885 For example, if its UI can only display 50 jobs, it can defend itself 2886 against a printer that would otherwise return 500 jobs, perhaps taking a 2887 long time on a slow dial-up line. The client can then go and ask for a 2889 Expires March 27, 2000 2890 larger number of jobs in the background, while showing the user the 2891 first 50 jobs. Since the job history is returned in reverse order, 2892 namely the most recently completed jobs are returned first, the user is 2893 most likely interested in the first jobs that are returned. Limiting the 2894 number of jobs may be especially useful for a client that is requesting 2895 'completed' jobs from a printer that keeps a long job history. Clients 2896 that don't mind sometimes getting very large responses, can omit the 2897 "limit" attribute in their Get-Jobs requests. 2899 3.2.4Create-Job operation 2901 A Printer may respond to a Create-Job operation with "job-state" 2902 'pending' or 'pending-held' and " job-state-reason" 'job-data- 2903 insufficient' to indicate that operation has been accepted by the 2904 Printer, but the Printer is expecting additional document data before it 2905 can move the job into the 'processing' state. Alternatively, it may 2906 respond with "job-state" 'processing' and "job-state-reason" 'job- 2907 incoming' to indicate that the Create-Job operation has been accepted 2908 by the Printer, but the Printer is expecting additional Send-Document 2909 and/or Send-URI operations and/or is accessing/accepting document data. 2910 The second alternative is for non-spooling Printers that don't implement 2911 the 'pending' state. 2913 Should the server wait for the "last-document" operation attribute set 2914 to 'true' before starting to "process" the job? 2916 It depends on implementation. Some servers spool the entire job, 2917 including all document data, before starting to process, so such an 2918 implementation would wait for the "last-document" before starting to 2919 process the job. If the time-out occurs without the "last-document", 2920 then the server takes one of the indicated actions in section 3.3.1 in 2921 the [IPP-MOD] document. Other servers will start to process document 2922 data as soon as they have some. These are the so-called "non-spooling" 2923 printers. Currently, there isn't a way for a client to determine whether 2924 the Printer will spool all the data or will start to process (and print) 2925 as soon as it has some data. 2927 3.3 Job Operations 2929 3.3.1Validate-Job 2931 The Validate-Job operation has been designed so that its implementation 2932 may be a part of the Print-Job operation. Therefore, requiring 2933 Validate-Job is not a burden on implementers. Also it is useful for 2934 client's to be able to count on its presence in all conformance 2935 implementations, so that the client can determine before sending a long 2936 document, whether the job will be accepted by the IPP Printer or not. 2938 4 Object Attributes 2940 4.1 Attribute Syntax's 2942 Expires March 27, 2000 2943 4.1.1The 'none' value for empty sets (Issue 1.37) 2945 [ipp-mod] states that the 'none' value should be used as the value of a 2946 1setOf when the set is empty. In most cases, sets that are potentially 2947 empty contain keywords so the keyword 'none' is used, but for the 3 2948 finishings attributes, the values are enums and thus the empty set is 2949 represented by the enum 3. Currently there are no other attributes with 2950 1setOf values, which can be empty and can contain values that are not 2951 keywords. This exception requires special code and is a potential place 2952 for bugs. It would have been better if we had chosen an out-of-band 2953 value, either "no-value" or some new value, such as 'none'. Since we 2954 didn't, implementations have to deal with the different representations 2955 of 'none', depending on the attribute syntax. 2957 4.1.2Multi-valued attributes (Issue 1.31) 2959 What is the attribute syntax for a multi-valued attribute? Since some 2960 attributes support values in more than one data type, such as "media", 2961 "job-hold-until", and "job-sheets", IPP semantics associate the 2962 attribute syntax with each value, not with the attribute as a whole. 2963 The protocol associates the attribute syntax tag with each value. Don't 2964 be fooled, just because the attribute syntax tag comes before the 2965 attribute keyword. All attribute values after the first have a zero 2966 length attribute keyword as the indication of a subsequent value of the 2967 same attribute. 2969 4.1.3Case Sensitivity in URIs (issue 1.6) 2971 IPP client and server implementations must be aware of the diverse 2972 uppercase/lowercase nature of URIs. RFC 2396 defines URL schemes and 2973 Host names as case insensitive but reminds us that the rest of the URL 2974 may well demonstrate case sensitivity. When creating URL's for fields 2975 where the choice is completely arbitrary, it is probably best to select 2976 lower case. However, this cannot be guaranteed and implementations MUST 2977 NOT rely on any fields being case-sensitive or case-insensitive in the 2978 URL beyond the URL scheme and host name fields. 2980 The reason that the IPP specification does not make any restrictions on 2981 URIs, is so that implementations of IPP may use off-the-shelf components 2982 that conform to the standards that define URIs, such as RFC 2396 and the 2983 HTTP/1.1 specifications [RFC2616]. See these specifications for rules 2984 of matching, comparison, and case-sensitivity. 2986 It is also recommended that System Administrators and implementations 2987 avoid creating URLs for different printers that differ only in their 2988 case. For example, don't have Printer1 and printer1 as two different 2989 IPP Printers. 2991 Example of equivalent URI's 2993 http://abc.com:80/~smith/home.html 2995 http://ABC.com/%7Esmith/home.html 2997 Expires March 27, 2000 2998 http:/ABC.com:/%7esmith/home.html 3000 Example of equivalent URI's using the IPP scheme 3002 ipp://abc.com:631/~smith/home.html 3004 ipp://ABC.com/%7Esmith/home.html 3006 http:/ABC.com:631/%7esmith/home.html 3008 The HTTP/1.1 specification [RFC2616] contains more details on comparing 3009 URLs. 3011 4.2 Job Template Attributes 3013 4.2.1multiple-document-handling(type2 keyword) 3015 4.2.1.1 Support of multiple document jobs 3017 ISSUE: IPP/1.0 is silent on which of the four effects an implementation 3018 would perform if it supports Create-Job, but does not support "multiple- 3019 document-handling". 3021 A fix to IPP/1.0 would be to require implementing all four values of 3022 "multiple-document-handling" if Create-Job is supported at all. Or at 3023 least 'single-document-new-sheet' and 'separate-documents-uncollated- 3024 copies'. In any case, an implementation that supports Create-Job SHOULD 3025 also support "multiple-document-handling". Support for all four values 3026 is RECOMMENDED, but at least the 'single-document-new-sheet' and 3027 'separate-documents-uncollated-copies' values, along with the "multiple- 3028 document-handling-default" indicating the default behavior and 3029 "multiple-document-handling-supported" values. If an implementation 3030 spools the data, it should also support the 'separate-documents- 3031 collated-copies' value as well. 3033 4.3 Job Description Attributes 3035 The time-at-creation, time-at-processing, and time-at-completed 3036 attributes may be returned in integer time ticks or absolute dateTime 3037 syntax. There are various ways for a Printer to get the time of day. 3038 Some suggestions: 3040 1. A Printer can get time from an NTP timeserver if there's one 3041 reachable on the network . See RFC 1305. Also DHCP option 32 in 3042 RFC 2132 returns the IP address of the NTP server. 3044 2. Get the date and time at startup from a human operator 3046 3. Have an operator set the date and time using a web 3047 administrative interface 3049 Expires March 27, 2000 3050 4. Get the date and time from incoming HTTP requests, though the 3051 problems of spoofing need to be considered. Perhaps comparing 3052 several HTTP requests could reduce the chances of spoofing. 3054 5. Internal date time clock battery driven. 3056 6. Query "http://tycho.usno.navy.mil/cgi-bin/timer.pl" 3058 4.4 Printer Description Attributes 3060 4.4.1queued-job-count 3062 4.4.1.1 Why is "queued-job-count" RECOMMENDED (Issue 1.14)? 3064 The reason that "queued-job-count" is RECOMMENDED, is that some clients 3065 look at that attribute alone when summarizing the status of a list of 3066 printers, instead of doing a Get-Jobs to determine the number of jobs in 3067 the queue. Implementations that fail to support the "queued-job-count" 3068 will cause that client to display 0 jobs when there are actually queued 3069 jobs. 3071 We would have made it a REQUIRED Printer attribute, but some 3072 implementations had already been completed before the issue was raised, 3073 so making it a SHOULD was a compromise. 3075 4.4.1.2 Is "queued-job-count" a good measure of how busy a printer is 3076 (Issue 1.15)? 3078 The "queued-job-count" is not a good measure of how busy the printer is 3079 when there are held jobs. A future registration could be to add a 3080 "held-job-count" (or an "active-job-count") Printer Description 3081 attribute if experience shows that such an attribute (combination) is 3082 needed to quickly indicate how busy a printer really is. 3084 4.4.2printer-current-time (dateTime) 3086 A Printer implementation MAY support this attribute by obtaining the 3087 date and time by any number of implementation-dependent means at startup 3088 or subsequently. Examples include: 3090 (1)an internal date time clock, 3092 (2)from the operator at startup using the console, 3094 (3)from an operator using an administrative web page, 3096 (4)from HTTP headers supplied in client requests, 3098 (5)use HTTP to query "http://tycho.usno.navy.mil/cgi-bin/timer.pl" 3100 Expires March 27, 2000 3101 (6)from the network, using NTP [RFC1305] or DHCP option 32 [RFC2132] 3102 that returns the IP address of the NTP server. 3104 If an implementation supports this attribute by obtaining the current 3105 time from the network (at startup or later), but the time is not 3106 available, then the implementation MUST return the value of this 3107 attribute using the out-of-band 'no-value' meaning not configured. See 3108 the beginning of section 4.1. 3110 Since the new "date-and-time-at-xxx" Job Description attributes refer to 3111 the "printer-current-time", they will be covered also. 3113 4.4.3'Printer-uri 3115 Must the operational attribute for printer-uri match one of the values 3116 in printer-uri-supported? 3118 A forgiving printer implementation would not reject the operation. But 3119 the implementation has its rights to reject a printer or job operation 3120 if the operational attribute printer-uri is not a value of the printer- 3121 uri-supported. The printer may not be improperly configured. The request 3122 obviously reached the printer. The printer could treat the printer-uri 3123 as the logical equivalent of a value in the printer-uri-supported. It 3124 would be implementation dependent for which value, and associated 3125 security policy, would apply. This does also apply to a job object 3126 specified with a printer-uri and job-id, or with a job-uri. See section 3127 4.1.3 for how to compare URI's. 3129 5 DNS Considerations 3131 5.1 IPP Printer with a DNS name 3133 If the IPP printer has a DNS name should there be at least two values 3134 for the printer-uri-supported attribute. One URL with the fully 3135 qualified DNS name the other with the IP address in the URL? 3137 The printer may contain one or the other or both. It's up to the 3138 administrator to configure this attribute. 3140 6 Security Considerations 3142 This section corresponds to the IPP-MOD Section 8 "Security 3143 Considerations. 3145 6.1 Querying jobs with IPP that were submitted using other job 3146 submission protocols (Issue 1.32) 3148 The following clarification was added to [ipp-mod] section 8.5: 3150 8.5 Queries on jobs submitted using non-IPP protocols 3152 Expires March 27, 2000 3154 If the device that an IPP Printer is representing is able to accept jobs 3155 using other job submission protocols in addition to IPP, it is RECOMMEND 3156 that such an implementation at least allow such "foreign" jobs to be 3157 queried using Get-Jobs returning "job-id" and "job-uri" as 'unknown'. 3158 Such an implementation NEED NOT support all of the same IPP job 3159 attributes as for IPP jobs. The IPP object returns the 'unknown' out- 3160 of-band value for any requested attribute of a foreign job that is 3161 supported for IPP jobs, but not for foreign jobs. 3163 It is further RECOMMENDED, that the IPP Printer generate "job-id" and 3164 "job-uri" values for such "foreign jobs", if possible, so that they may 3165 be targets of other IPP operations, such as Get-Job-Attributes and 3166 Cancel-Job. Such an implementation also needs to deal with the problem 3167 of authentication of such foreign jobs. One approach would be to treat 3168 all such foreign jobs as belonging to users other than the user of the 3169 IPP client. Another approach would be for the foreign job to belong to 3170 'anonymous'. Only if the IPP client has been authenticated as an 3171 operator or administrator of the IPP Printer object, could the foreign 3172 jobs be queried by an IPP request. Alternatively, if the security 3173 policy were to allow users to query other users' jobs, then the foreign 3174 jobs would also be visible to an end-user IPP client using Get-Jobs and 3175 Get-Job-Attributes. 3177 Thus IPP MAY be implemented as a "universal" protocol that provides 3178 access to jobs submitted with any job submission protocol. As IPP 3179 becomes widely implemented, providing a more universal access makes 3180 sense. 3182 7 Encoding and Transport 3184 This section discusses various aspects of IPP/1.1 Encoding and Transport 3185 [IPP-PRO]. 3187 A server is not required to send a response until after it has received 3188 the client's entire request. Hence, a client must not expect a response 3189 until after it has sent the entire request. However, we recommend that 3190 the server return a response as soon as possible if an error is detected 3191 while the client is still sending the data, rather than waiting until 3192 all of the data is received. Therefore, we also recommend that a client 3193 listen for an error response that an IPP server MAY send before it 3194 receives all the data. In this case a client, if chunking the data, can 3195 send a premature zero-length chunk to end the request before sending all 3196 the data (and so the client can keep the connection open for other 3197 requests, rather than closing it). If the request is blocked for some 3198 reason, a client MAY determine the reason by opening another connection 3199 to query the server using Get-Printer-Attributes. 3201 IPP, by design, uses TCP's built-in flow control mechanisms [RFC 793] to 3202 throttle clients when Printers are busy. Therefore, it is perfectly 3203 normal for an IPP client transmitting a Job to be blocked for a really 3204 long time. Accordingly, socket timeouts must be avoided. Some socket 3205 implementations have a timeout option, which specifies how long a write 3206 operation on a socket can be blocked before it times out and the 3208 Expires March 27, 2000 3209 blocking ends. A client should set this option for infinite timeout 3210 when transmitting Job submissions. 3212 Some IPP client applications might be able to perform other useful work 3213 while a Job transmission is blocked. For example, the client may have 3214 other jobs that it could transmit to other Printers simultaneously. A 3215 client may have a GUI, which must remain responsive to the user while 3216 the Job transmission is blocked. These clients should be designed to 3217 spawn a thread to handle the Job transmission at its own pace, leaving 3218 the main application free to do other work. Alternatively, single- 3219 threaded applications could use non-blocking I/O. 3221 Some Printer conditions, such as jam or lack of paper, could cause a 3222 client to be blocked indefinitely. Clients may open additional 3223 connections to the Printer to Get-Printer-Attributes, determine the 3224 state of the device, alert a user if the printer is stopped, and let a 3225 user decide whether to abort the job transmission or not. 3227 In the following sections, there are tables of all HTTP headers, which 3228 describe their use in an IPP client or server. The following is an 3229 explanation of each column in these tables. 3231 . the "header" column contains the name of a header 3232 . the "request/client" column indicates whether a client sends the 3233 header. 3234 . the "request/ server" column indicates whether a server supports 3235 the header when received. 3236 . the "response/ server" column indicates whether a server sends the 3237 header. 3238 . the "response /client" column indicates whether a client supports 3239 the header when received. 3240 . the "values and conditions" column specifies the allowed header 3241 values and the conditions for the header to be present in a 3242 request/response. 3244 The table for "request headers" does not have columns for responses, and 3245 the table for "response headers" does not have columns for requests. 3246 The following is an explanation of the values in the "request/client" 3247 and "response/ server" columns. 3249 . must: the client or server MUST send the header, 3250 . must-if: the client or server MUST send the header when the 3251 condition described in the "values and conditions" column is met, 3252 . may: the client or server MAY send the header 3253 . not: the client or server SHOULD NOT send the header. It is not 3254 relevant to an IPP implementation. 3256 The following is an explanation of the values in the "response/client" 3257 and "request/ server" columns. 3258 . must: the client or server MUST support the header, 3259 . may: the client or server MAY support the header 3260 . not: the client or server SHOULD NOT support the header. It is not 3261 relevant to an IPP implementation. 3263 Expires March 27, 2000 3264 7.1 General Headers 3266 The following is a table for the general headers. 3268 General- Request Response V alues and Conditions 3269 Header 3271 Client Server Server Client 3273 Cache- must n ot must not "no-cache" only 3274 Control 3276 Connection must-if m ust must- m ust "close" only. Both 3277 if client and server 3278 SHOULD keep a 3279 connection for the 3280 duration of a sequence 3281 of operations. The 3282 client and server MUST 3283 include this header 3284 for the last operation 3285 in such a sequence. 3287 Date may m ay must may per RFC 1123 [RFC1123] 3288 from RFC 2616 3289 [RFC2616] 3291 Pragma must n ot must not "no-cache" only 3293 Transfer- must-if m ust must- m ust "chunked" only . 3294 Encoding if Header MUST be present 3295 if Content-Length is 3296 absent. 3298 Upgrade not not not n ot 3300 Via not n ot not not 3302 7.2 Request Headers 3304 The following is a table for the request headers. 3306 Request-Header Client Server Request Values and Conditions 3308 Accept may must "application/ipp" only. This 3309 value is the default if the 3310 client omits it 3312 Accept-Charset not n ot Charset information is within 3313 the application/ipp entity 3315 Accept-Encoding may m ust empty and per RFC 2616 [RFC2616] 3316 and IANA registry for content- 3318 Expires March 27, 2000 3320 Request-Header Client Server Request Values and Conditions 3322 codings 3324 Accept-Language not not language information is within 3325 the application/ipp entity 3327 Authorization must-if must per RFC 2616. A client MUST send 3328 this header when it receives a 3329 401 "Unauthorized" response and 3330 does not receive a "Proxy- 3331 Authenticate" header. 3333 >From not not per RFC 2616. Because RFC 3334 recommends sending this header 3335 only with the user's approval, it 3336 is not very useful 3338 Host must m ust per RFC 2616 3340 If-Match not n ot 3342 If-Modified- not not 3343 Since 3345 If-None-Match not not 3347 If-Range not n ot 3349 If-Unmodified- not n ot 3350 Since 3352 Max-Forwards not not 3354 Proxy- must-if n ot per RFC 2616. A client MUST send 3355 Authorization this header when it receives a 3356 401 "Unauthorized" response and a 3357 "Proxy-Authenticate" header. 3359 Range not n ot 3361 Referrer not n ot 3363 User-Agent not not 3365 7.3 Response Headers 3367 The following is a table for the request headers. 3369 Response- Server Client R esponse Values and Conditions 3370 Header 3372 Accept-Ranges not not 3374 Expires March 27, 2000 3375 Response- Server Client R esponse Values and Conditions 3376 Header 3378 Age not not 3380 Location must-if may p er RFC 2616. When URI needs 3381 redirection. 3383 Proxy- not must p er RFC 2616 3384 Authenticate 3386 Public may may p er RFC 2616 3388 Retry-After may may p er RFC 2616 3390 Server not not 3392 Vary not not 3394 Warning may may p er RFC 2616 3396 WWW- must-if must p er RFC 2616. When a server needs to 3397 Authenticate authenticate a client. 3399 7.4 Entity Headers 3401 The following is a table for the entity headers. 3403 Entity-Header Request Response Values and Conditions 3405 Client Server Server Client 3407 Allow not not n ot not 3409 Content-Base not not n ot n ot 3411 Content- may must m ust m ust per RFC 2616 and IANA 3412 Encoding registry for content 3413 codings. 3415 Content- not not n ot not Application/ipp 3416 Language handles language 3418 Content- must-if must m ust-if m ust the length of the 3419 Length message-body per RFC 3420 2616. Header MUST be 3421 present if Transfer- 3422 Encoding is absent.. 3424 Content- not not n ot n ot 3425 Location 3427 Content-MD5 may may may m ay per RFC 2616 3429 Expires March 27, 2000 3430 Entity-Header Request Response Values and Conditions 3432 Client Server Server Client 3434 Content-Range not not n ot n ot 3436 Content-Type must must m ust m ust "application/ipp" 3437 only 3439 ETag not not n ot not 3441 Expires not not n ot n ot 3443 Last-Modified not not n ot n ot 3445 7.5 Optional support for HTTP/1.0 3447 IPP implementations consist of an HTTP layer and an IPP layer. In the 3448 following discussion, the term "client" refers to the HTTP client layer 3449 and the term "server" refers to the HTTP server layer. The Encoding and 3450 Transport document [IPP-PRO] requires that HTTP 1.1 MUST be supported by 3451 all clients and all servers. However, a client and/or a server 3452 implementation may choose to also support HTTP 1.0. 3454 @ This option means that a server may choose to communicate with a 3455 (non-conforming) client that only supports HTTP 1.0. In such cases the 3456 server should not use any HTTP 1.1 specific parameters or features and 3457 should respond using HTTP version number 1.0. 3459 @ This option also means that a client may choose to communicate with a 3460 (non-conforming) server that only supports HTTP 1.0. In such cases, if 3461 the server responds with an HTTP 'unsupported version number' to an HTTP 3462 1.1 request, the client should retry using HTTP version number 1.0. 3464 7.6 HTTP/1.1 Chunking 3466 7.6.1Disabling IPP Server Response Chunking 3468 Clients MUST anticipate that the HTTP/1.1 server may chunk responses and 3469 MUST accept them in responses. However, a (non-conforming) HTTP client 3470 that is unable to accept chunked responses may attempt to request an 3471 HTTP 1.1 server not to use chunking in its response to an operation by 3472 using the following HTTP header: 3474 TE: identity 3476 This mechanism should not be used by a server to disable a client from 3477 chunking a request, since chunking of document data is an important 3478 feature for clients to send long documents. 3480 7.6.2Warning About the Support of Chunked Requests 3482 Expires March 27, 2000 3483 This section describes some problems with the use of chunked requests 3484 and HTTP/1.1 servers. 3486 The HTTP/1.1 standard [RFC2616] requires that conforming servers support 3487 chunked requests for any method. However, in spite of this requirement, 3488 some HTTP/1.1 implementations support chunked responses in the GET 3489 method, but do not support chunked POST method requests. Some HTTP/1.1 3490 implementations that support CGI scripts [CGI] and/or servlets [Servlet] 3491 require that the client supply a Content-Length. These implementations 3492 might reject a chunked POST method and return a 411 status code (Length 3493 Required), might attempt to buffer the request and run out of room 3494 returning a 413 status code (Request Entity Too Large), or might 3495 successfully accept the chunked request. 3497 Because of this lack of conformance of HTTP servers to the HTTP/1.1 3498 standard, the IPP standard [IPP-PRO] REQUIRES that a conforming IPP 3499 Printer object implementation support chunked requests and that 3500 conforming clients accept chunked responses. Therefore, IPP object 3501 implementers are warned to seek HTTP server implementations that support 3502 chunked POST requests in order to conform to the IPP standard and/or use 3503 implementation techniques that support chunked POST requests. 3505 8 References 3507 [CGI] 3508 CGI/1.1 (http://www.ietf.org/internet-drafts/draft-coar-cgi-v11- 3509 00.txt). 3511 [IPP-MOD] 3512 R. deBry, T. Hastings, R. Herriot, S. Isaacson, P. Powell, 3513 "Internet Printing Protocol/1.0: Model and Semantics", draft-ietf- 3514 ipp-model-v11-04.txt, June 1999. 3516 [IPP-PRO] 3517 Herriot, R., Butler, S., Moore, P., Tuner, R., "Internet Printing 3518 Protocol/1.0: Encoding and Transport", draft-ietf-ipp-protocol-v11- 3519 03.txt, June 1999. 3521 [RFC 793] 3522 J. Postel, "Transmission Control Protocol", RFC 793. 3524 [RFC1123] 3525 Braden, S., "Requirements for Internet Hosts - Application and 3526 Support", RFC 1123, October, 1989. 3528 [RFC2026] 3529 S. Bradner, "The Internet Standards Process -- Revision 3", RFC 3530 2026, October 1996. 3532 [rfc2119] 3533 S. Bradner, "Key words for use in RFCs to Indicate Requirement 3534 Levels", RFC 2119 , March 1997. 3536 [RFC2396] 3538 Expires March 27, 2000 3539 Berners-Lee, T., Fielding, R., Masinter, L., "Uniform Resource 3540 Identifiers (URI): Generic Syntax", RFC 2396, August 1998. 3542 [RFC2565] 3543 R. deBry, T. Hastings, R. Herriot, S. Isaacson, P. Powell, 3544 "Internet Printing Protocol/1.0: Model and Semantics", RFC 2566, 3545 April 1999. 3547 [RFC2566] 3548 Herriot, R., Butler, S., Moore, P., Tuner, R., "Internet Printing 3549 Protocol/1.0: Encoding and Transport", RFC 2565, April 1999. 3551 [RFC2567] 3552 Wright, D., "Design Goals for an Internet Printing Protocol", 3553 draft-ietf-ipp-req-03.txt, November, 1998. 3555 [RFC2568 3556 Zilles, S., "Rationale for the Structure and Model and Protocol for 3557 the Internet Printing Protocol", RFC 2568, April 1999. 3559 [RFC2569] 3560 Herriot, R., Hastings, T., Jacobs, N., Martin, J., "Mapping between 3561 LPD and IPP Protocols", RFC 2569, April 1999. 3563 [RFC2616] 3564 R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. 3565 Leach, T. Berners-Lee, "Hypertext Transfer Protocol - HTTP/1.1", 3566 RFC 2616, June 1999. 3568 [Servlet] 3569 Servlet Specification Version 2.1 3570 (http://java.sun.com/products/servlet/2.1/index.html). 3572 [SSL] 3573 Netscape, The SSL Protocol, Version 3, (Text version 3.02), 3574 November 1996. 3576 8.1 Authors' Address 3578 Thomas N. Hastings 3579 Xerox Corporation 3580 701 Aviation Blvd. 3581 El Segundo, CA 90245 3582 hastings@cp10.es.xerox.com 3584 Carl-Uno Manros 3585 Xerox Corporation 3586 701 Aviation Blvd. 3587 El Segundo, CA 90245 3588 manros@cp10.es.xerox.com 3590 Carl Kugler 3591 Mail Stop 003G 3593 Expires March 27, 2000 3594 IBM Printing Systems Co 3595 6300 Diagonal Hwy 3596 Boulder CO80301 3597 Kugler@us.ibm.com 3599 Henrik Holst 3600 i-data Printing Systems 3601 Vadstrupvej 35-43 3602 2880 Bagsvaerd, Denmark 3603 hh@I-data.com 3605 9 Notices 3607 The IETF takes no position regarding the validity or scope of any 3608 intellectual property or other rights that might be claimed to pertain 3609 to the implementation or use of the technology described in this 3610 document or the extent to which any license under such rights might or 3611 might not be available; neither does it represent that it has made any 3612 effort to identify any such rights. Information on the IETF's 3613 procedures with respect to rights in standards-track and standards- 3614 related documentation can be found in BCP-11[BCP-11]. Copies of claims 3615 of rights made available for publication and any assurances of licenses 3616 to be made available, or the result of an attempt made to obtain a 3617 general license or permission for the use of such proprietary rights by 3618 implementers or users of this specification can be obtained from the 3619 IETF Secretariat. 3621 The IETF invites any interested party to bring to its attention any 3622 copyrights, patents or patent applications, or other proprietary rights, 3623 which may cover technology that may be required to practice this 3624 standard. Please address the information to the IETF Executive 3625 Director. 3627 Copyright (C) The Internet Society (1999). All Rights Reserved 3629 This document and translations of it may be copied and furnished to 3630 others, and derivative works that comment on or otherwise explain it or 3631 assist in its implementation may be prepared, copied, published and 3632 distributed, in whole or in part, without restriction of any kind, 3633 provided that the above copyright notice and this paragraph are included 3634 on all such copies and derivative works. However, this document itself 3635 may not be modified in any way, such as by removing the copyright notice 3636 or references to the Internet Society or other Internet organizations, 3637 except as needed for the purpose of developing Internet standards in 3638 which case the procedures for copyrights defined in the Internet 3639 Standards process must be followed, or as required to translate it into 3640 languages other than English. 3642 The limited permissions granted above are perpetual and will not be 3643 revoked by the Internet Society or its successors or assigns. 3645 This document and the information contained herein is provided on an "AS 3646 IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK 3647 FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT 3649 Expires March 27, 2000 3650 LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT 3651 INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR 3652 FITNESS FOR A PARTICULAR PURPOSE. 3654 Expires March 27, 2000