idnits 2.17.00 (12 Aug 2021) /tmp/idnits28398/draft-ietf-ipp-implementers-guide-v11-01.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: ---------------------------------------------------------------------------- ** 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 10 longer pages, the longest (page 6) being 60 lines 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. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the RFC 3978 Section 5.4 Copyright Line does not match the current year == Line 351 has weird spacing: '...section corre...' == Line 482 has weird spacing: '...Release ons...' == Line 514 has weird spacing: '... utes t-Jo...' == Line 547 has weird spacing: '... e-Job t- ...' == Line 1714 has weird spacing: '...(1setOf range...' == (34 more instances...) == The document seems to lack the recommended RFC 2119 boilerplate, even if it appears to use RFC 2119 keywords. (The document does seem to have the reference to RFC 2119 which the ID-Checklist requires). == 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 -- 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 (May 30, 2000) is 8025 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 58, but not defined == Missing Reference: 'RFC2044' is mentioned on line 2189, but not defined ** Obsolete undefined reference: RFC 2044 (Obsoleted by RFC 2279) == Missing Reference: 'IANA-CS' is mentioned on line 2191, but not defined == Missing Reference: 'RFC1305' is mentioned on line 3254, but not defined ** Obsolete undefined reference: RFC 1305 (Obsoleted by RFC 5905) == Missing Reference: 'RFC2132' is mentioned on line 3254, but not defined == Missing Reference: 'RFC 793' is mentioned on line 3394, but not defined == Unused Reference: 'RFC793' is defined on line 3719, but no explicit reference was found in the text == Unused Reference: 'RFC2396' is defined on line 3736, but no explicit reference was found in the text == Unused Reference: 'RFC2565' is defined on line 3740, but no explicit reference was found in the text == Unused Reference: 'RFC2566' is defined on line 3745, but no explicit reference was found in the text == Unused Reference: 'SSL' is defined on line 3775, 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: 15 errors (**), 0 flaws (~~), 26 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-01.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 P. Zehler 12 Xerox Corporation 13 May 30, 2000 15 Internet Printing Protocol/1.1: Implementer's Guide 17 Copyright (C) The Internet Society (2000). All Rights Reserved. 19 Status of this Memo 21 This document is an Internet-Draft and is in full conformance with all 22 provisions of Section 10 of [RFC2026]. Internet-Drafts are working 23 documents of the Internet Engineering Task Force (IETF), its areas, and 24 its working groups. Note that other groups may also distribute working 25 documents as Internet-Drafts. 27 Internet-Drafts are draft documents valid for a maximum of six months 28 and may be updated, replaced, or obsoleted by other documents at any 29 time. It is inappropriate to use Internet-Drafts as reference material 30 or to cite them other than as "work in progress". 32 The list of current Internet-Drafts can be accessed at 33 http://www.ietf.org/ietf/1id-abstracts.txt 35 The list of Internet-Draft Shadow Directories can be accessed as 36 http://www.ietf.org/shadow.html. 38 Abstract 40 This document is one of a set of documents, which together describe all 41 aspects of a new Internet Printing Protocol (IPP). IPP is an 42 application level protocol that can be used for distributed printing 43 using Internet tools and technologies. This document contains 44 information that supplements the IPP Model and Semantics [IPP-MOD] and 45 the IPP Transport and Encoding [IPP-PRO] documents. It is intended to 47 Expires November 30, 2000 48 help implementers understand IPP/1.1, as well as IPP/1.0, and some of 49 the considerations that may assist them in the design of their client 50 and/or IPP object implementations. For example, a typical order of 51 processing requests is given, including error checking. Motivation for 52 some of the specification decisions is also included. 54 Expires November 30, 2000 55 The full set of IPP documents includes: 56 Design Goals for an Internet Printing Protocol [RFC2567] 57 Rationale for the Structure and Model and Protocol for the Internet 58 Printing Protocol [RFC2568] 59 Internet Printing Protocol/1.1: Model and Semantics [IPP-MOD] 60 Internet Printing Protocol/1.1: Encoding and Transport [IPP-PRO] 61 Mapping between LPD and IPP Protocols [RFC2569] 63 The document, "Design Goals for an Internet Printing Protocol", takes a 64 broad look at distributed printing functionality, and it enumerates 65 real-life scenarios that help to clarify the features that need to be 66 included in a printing protocol for the Internet. It identifies 67 requirements for three types of users: end users, operators, and 68 administrators. The design goal document calls out a subset of end user 69 requirements that are satisfied in IPP/1.1. Operator and administrator 70 requirements are out of scope for version 1.1. 72 The document, "Rationale for the Structure and Model and Protocol for 73 the Internet Printing Protocol", describes IPP from a high level view, 74 defines a roadmap for the various documents that form the suite of IPP 75 specifications, and gives background and rationale for the IETF working 76 group's major decisions. 78 The document, "Internet Printing Protocol/1.1: Model and Semantics", 79 describes a simplified model with abstract objects, their attributes, 80 and their operations. The model introduces a Printer and a Job. The 81 Job supports multiple documents per Job. The model document also 82 addresses how security, internationalization, and directory issues are 83 addressed. 85 The document, "Internet Printing Protocol/1.1: Encoding and Transport", 86 is a formal mapping of the abstract operations and attributes defined in 87 the model document onto HTTP/1.1. It also defines the encoding rules 88 for a new Internet media type called "application/ipp". 90 The document, "Mapping between LPD and IPP Protocols", gives some advice 91 to implementers of gateways between IPP and LPD (Line Printer Daemon) 92 implementations. 94 Expires November 30, 2000 95 TABLE OF CONTENTS 97 1 INTRODUCTION.......................................................8 99 1.1 Conformance language.............................................8 100 1.2 Other terminology................................................9 101 1.3 Issues Raised from Interoperability Bake Offs....................9 103 2 IPP OBJECTS........................................................9 105 3 IPP OPERATIONS....................................................10 107 3.1 Common Semantics................................................10 108 3.1.1 Summary of Operation Attributes.............................10 109 3.1.2 Suggested Operation Processing Steps for IPP Objects........16 110 3.1.2.1 Suggested Operation Processing Steps for all Operations.17 111 3.1.2.1.1 Validate version number............................17 112 3.1.2.1.2 Validate operation identifier......................19 113 3.1.2.1.3 Validate the request identifier....................19 114 3.1.2.1.4 Validate attribute group and attribute presence and 115 order 19 116 3.1.2.1.4.1 Validate the presence and order of attribute 117 groups 19 118 3.1.2.1.4.2 Ignore unknown attribute groups in the expected 119 position 20 120 3.1.2.1.4.3 Validate the presence of a single occurrence of 121 required Operation attributes................................20 122 3.1.2.1.5 Validate the values of the REQUIRED Operation 123 attributes 27 124 3.1.2.1.6 Validate the values of the OPTIONAL Operation 125 attributes 31 126 3.1.2.2 Suggested Additional Processing Steps for Operations that 127 Create/Validate Jobs and Add Documents..........................35 128 3.1.2.2.1 Default "ipp-attribute-fidelity" if not supplied...35 129 3.1.2.2.2 Check that the Printer object is accepting jobs....35 130 3.1.2.2.3 Validate the values of the Job Template attributes.36 131 3.1.2.3 Algorithm for job validation............................37 132 3.1.2.3.1 Check for conflicting Job Template attributes values42 133 3.1.2.3.2 Decide whether to REJECT the request...............43 134 3.1.2.3.3 For the Validate-Job operation, RETURN one of the 135 success status codes...........................................44 136 3.1.2.3.4 Create the Job object with attributes to support...45 137 3.1.2.3.5 Return one of the success status codes.............46 138 3.1.2.3.6 Accept appended Document Content...................47 139 3.1.2.3.7 Scheduling and Starting to Process the Job.........47 140 3.1.2.3.8 Completing the Job.................................47 141 3.1.2.3.9 Destroying the Job after completion................47 142 3.1.2.3.10 Interaction with "ipp-attribute-fidelity"..........48 143 3.1.2.3.11 Character set code conversion support..............48 145 Expires November 30, 2000 146 3.1.2.3.12 What charset to return when an unsupported charset is 147 requested (Issue 1.19)?........................................49 148 3.1.2.3.13 Natural Language Override (NLO)....................50 149 3.1.3 Status codes returned by operation..........................52 150 3.1.3.1 Printer Operations......................................52 151 3.1.3.1.1 Print-Job..........................................52 152 3.1.3.1.2 Print-URI..........................................54 153 3.1.3.1.3 Validate-Job.......................................54 154 3.1.3.1.4 Create-Job.........................................55 155 3.1.3.1.5 Get-Printer-Attributes.............................55 156 3.1.3.1.6 Get-Jobs...........................................56 157 3.1.3.1.7 Pause-Printer......................................57 158 3.1.3.1.8 Resume-Printer.....................................57 159 3.1.3.1.8.1 What about Printers unable to change state due to 160 an error condition?..........................................58 161 3.1.3.1.8.2 How is 'printer-state' handled on Resume-Printer?58 162 3.1.3.1.9 Purge-Printer......................................59 163 3.1.3.2 Job Operations..........................................59 164 3.1.3.2.1 Send-Document......................................59 165 3.1.3.2.2 Send-URI...........................................60 166 3.1.3.2.3 Cancel-Job.........................................60 167 3.1.3.2.4 Get-Job-Attributes.................................61 168 3.1.3.2.5 Hold-Job...........................................62 169 3.1.3.2.6 Release-Job........................................63 170 3.1.3.2.7 Restart-Job........................................63 171 3.1.3.2.7.1 Can documents be added to a restarted job?.......63 172 3.1.4 Returning unsupported attributes in Get-Xxxx responses (Issue 173 1.18) 63 174 3.1.5 Sending empty attribute groups..............................64 175 3.2 Printer Operations..............................................64 176 3.2.1 Print-Job operation.........................................64 177 3.2.1.1 Flow controlling the data portion of a Print-Job request 178 (Issue 1.22)....................................................64 179 3.2.1.2 Returning job-state in Print-Job response (Issue 1.30)..65 180 3.2.2 Get-Printer-Attributes operation............................66 181 3.2.3 Get-Jobs operation..........................................66 182 3.2.3.1 Get-Jobs, my-jobs='true', and 'requesting-user-name' 183 (Issue 1.39)?...................................................66 184 3.2.3.2 Why is there a "limit" attribute in the Get-Jobs 185 operation?......................................................66 186 3.2.4 Create-Job operation........................................67 187 3.3 Job Operations..................................................67 188 3.3.1 Validate-Job................................................67 189 3.3.2 Restart-Job.................................................67 191 4 OBJECT ATTRIBUTES.................................................68 193 4.1 Attribute Syntax's..............................................68 194 4.1.1 The 'none' value for empty sets (Issue 1.37)................68 196 Expires November 30, 2000 197 4.1.2 Multi-valued attributes (Issue 1.31)........................68 198 4.1.3 Case Sensitivity in URIs (issue 1.6)........................69 199 4.1.4 Maximum length for xxxWithLanguage and xxxWithoutLanguage...69 200 4.2 Job Template Attributes.........................................70 201 4.2.1 multiple-document-handling(type2 keyword)...................70 202 4.2.1.1 Support of multiple document jobs.......................70 203 4.3 Job Description Attributes......................................70 204 4.4 Printer Description Attributes..................................71 205 4.4.1 queued-job-count............................................71 206 4.4.1.1 Why is "queued-job-count" RECOMMENDED (Issue 1.14)?.....71 207 4.4.1.2 Is "queued-job-count" a good measure of how busy a printer 208 is (Issue 1.15)?................................................71 209 4.4.2 printer-current-time (dateTime).............................71 210 4.4.3 'Printer-uri................................................72 211 4.5 Empty Jobs......................................................72 213 5 DIRECTORY CONSIDERATIONS..........................................73 215 5.1 General Directory Schema Considerations.........................73 216 5.2 IPP Printer with a DNS name.....................................73 218 6 SECURITY CONSIDERATIONS...........................................73 220 6.1 Querying jobs with IPP that were submitted using other job 221 submission protocols (Issue 1.32)...................................73 223 7 ENCODING AND TRANSPORT............................................74 225 7.1 General Headers.................................................76 226 7.2 Request Headers................................................77 227 7.3 Response Headers................................................78 228 7.4 Entity Headers.................................................79 229 7.5 Optional support for HTTP/1.0...................................80 230 7.6 HTTP/1.1 Chunking...............................................80 231 7.6.1 Disabling IPP Server Response Chunking......................80 232 7.6.2 Warning About the Support of Chunked Requests...............80 234 8 REFERENCES........................................................81 236 9 AUTHORS' ADDRESS..................................................82 238 10 NOTICES..........................................................83 240 TABLES 242 Table 1 - Summary of Printer operation attributes that sender MUST 243 supply............................................................10 245 Table 2 - Summary of Printer operation attributes that sender MAY supply 246 .................................................................11 248 Expires November 30, 2000 250 Table 3 - Summary of Job operation attributes that sender MUST supply13 252 Table 4 - Summary of Job operation attributes that sender MAY supply.14 254 Table 5 - Printer operation response attributes......................15 256 Table 6 - Examples of validating IPP version.........................18 258 Table 7 - Rules for validating single values X against Z.............37 260 Expires November 30, 2000 261 1 Introduction 263 The IPP Implementer's Guide (IIG) (this document) contains information 264 that supplements the IPP Model and Semantics [IPP-MOD] and the IPP 265 Transport and Encoding [IPP-PRO] documents. As such this information is 266 not part of the formal specifications. Instead information is presented 267 to help implementers understand the specification, including some of the 268 motivation for decisions taken by the committee in developing the 269 specification. Some of the implementation considerations are intended 270 to help implementers design their client and/or IPP object 271 implementations. If there are any contradictions between this document 272 and [IPP-MOD] or [IPP-PRO], those documents take precedence over this 273 document. 275 Platform-specific implementation considerations will be included in this 276 guide as they become known. 278 In order to help the reader of the IIG and the IPP Model and Semantics 279 document, the sections in this document parallel the corresponding 280 sections in the Model document and are numbered the same for ease of 281 cross reference. The sections that correspond to the IPP Transport and 282 Encoding are correspondingly offset. 284 1.1 Conformance language 286 Usually, this document does not contain the terminology MUST, MUST NOT, 287 MAY, NEED NOT, SHOULD, SHOULD NOT, REQUIRED, and OPTIONAL. However, 288 when those terms do appear in this document, their intent is to repeat 289 what the [IPP-MOD] and [IPP-PRO] documents require and allow, rather 290 than specifying additional conformance requirements. These terms are 291 defined in section 13 on conformance terminology in [IPP-MOD], most of 292 which is taken from RFC 2119 [RFC2119]. 294 Implementers should read section 13 (APPENDIX A) in [IPP-MOD] in order 295 to understand these capitalized words. The words MUST, MUST NOT, and 296 REQUIRED indicate what implementations are required to support in a 297 client or IPP object in order to be conformant to [IPP-MOD] and [IPP- 298 PRO]. MAY, NEED NOT, and OPTIONAL indicate was is merely allowed as an 299 implementer option. The verbs SHOULD and SHOULD NOT indicate suggested 300 behavior, but which is not required or disallowed, respectively, in 301 order to conform to the specification. 303 Expires November 30, 2000 304 1.2 Other terminology 306 The term "sender" refers to the client that sends a request or an IPP 307 object that returns a response. The term "receiver" refers to the IPP 308 object that receives a request and to a client that receives a response. 310 1.3 Issues Raised from Interoperability Bake Offs 312 The IPP WG has conducted two open interoperability "Bake Offs". The 313 first bake off was held in September 1998 and Bake Off2 was held in 314 March 1999. See the summary reports in: 316 ftp://ftp.pwg.org/pub/pwg/ipp/new_TES/ 318 The issues raised from the first bake off are numbered 1.n in this 319 document and are described in: 321 ftp://ftp.pwg.org/pub/pwg/ipp/approved-clarifications/ipp-agreed-fixes- 322 981030.pdf 324 These issue resolutions have been incorporated into the November 16, 325 "IPP/1.0 Model and Semantics" [ipp-mod] and the "IPP/1.0 Encoding and 326 Transport" [IPP-PRO] documents. However, some of the discussion is left 327 here in the Implementer's Guide to help understanding. 329 The issues raised from Bake Off2 are numbered 2.n in this document and 330 are described in: 332 ftp://ftp.pwg.org/pub/pwg/ipp/issues/issues-raised-at-bake-off2.pdf 334 2 IPP Objects 336 The term "client" in IPP is intended to mean any client that issues IPP 337 operation requests and accepts IPP operation responses, whether it be a 338 desktop or a server. In other words, the term "client" does not just 339 mean end-user clients, such as those associated with desktops. 341 The term "IPP Printer" in IPP is intended to mean an object that accepts 342 IPP operation requests and returns IPP operation responses, whether 343 implemented in a server or a device. An IPP Printer object MAY, if 344 implemented in a server, turn around and forward received jobs (and 345 other requests) to other devices and print servers/services, either 346 using IPP or some other protocol. 348 Expires November 30, 2000 349 3 IPP Operations 351 This section corresponds to Section 3 "IPP Operations" in the IPP/1.1 352 Model and Semantics document [IPP-MOD]. 354 3.1 Common Semantics 356 This section discusses semantics common to all operations. 358 3.1.1 Summary of Operation Attributes 360 Legend for the following table: 362 R indicates a REQUIRED operation that MUST be supported by the IPP 363 object (Printer or Job). For attributes, R indicates that the attribute 364 MUST be supported by the IPP object supports the associated operation. 366 O indicates an OPTIONAL operation or attribute that MAY be supported by 367 the IPP object (Printer or Job). 369 + indicates that this is not an IPP/1.0 feature, but is only a part of 370 IPP/1.1 and future versions of IPP. 372 Table 1 - Summary of Printer operation attributes that sender MUST 373 supply 375 Printer Operations 376 Requests Respo 377 nses 378 Operation Print- Pri Crea Get- Get Pause- All 379 Attributes Job, nt- te- Printer- - Printer Opera 380 Validate URI Job Attribut Job , tions 381 -Job (R) (O) (O) es (R) s Resume- 382 (R) Printer 383 , 384 Purge- 385 Printer 386 (O+) 387 Operation parameters--REQUIRED to be supplied by the sender: 388 operation-id R R R R R R 389 status-code R 390 request-id R R R R R R R 391 version-number R R R R R R R 392 Operation attributes--REQUIRED to be supplied by the sender: 393 attributes-charset R R R R R R R 394 attributes- R R R R R R R 395 natural-language 397 Expires November 30, 2000 398 Printer Operations 399 Requests Respo 400 nses 401 Operation Print- Pri Crea Get- Get Pause- All 402 Attributes Job, nt- te- Printer- - Printer Opera 403 Validate URI Job Attribut Job , tions 404 -Job (R) (O) (O) es (R) s Resume- 405 (R) Printer 406 , 407 Purge- 408 Printer 409 (O+) 410 document-uri R 411 job-id* 412 job-uri* 413 last-document 414 printer-uri R R R R R R 415 Operation attributes--RECOMMENDED to be supplied by the sender: 416 job-name R R R 417 requesting-user- R R R R R R 418 name 420 Table 2 - Summary of Printer operation attributes that sender MAY supply 422 Printer Operations 423 Requests Respo 424 nses 425 Operation Attributes Print- Prin Crea Get- Get Pause- All 426 Job, t- te- Printer - Printer Opera 427 Valida URI Job - Job , tions 428 te-Job (O) (O) Attribu s Resume- 429 (R) tes (R) (R) Printer 430 , 431 Purge- 432 Printer 433 (O+) 434 Operation attributes--OPTIONAL to be supplied by the sender: 435 status-message O 436 detailed-status- O 437 message 438 document-access- O** 439 error 440 compression O O 441 document-format R R R 442 document-name O O 443 document-natural- O O 444 language 446 Expires November 30, 2000 447 Printer Operations 448 Requests Respo 449 nses 450 Operation Attributes Print- Prin Crea Get- Get Pause- All 451 Job, t- te- Printer - Printer Opera 452 Valida URI Job - Job , tions 453 te-Job (O) (O) Attribu s Resume- 454 (R) tes (R) (R) Printer 455 , 456 Purge- 457 Printer 458 (O+) 459 ipp-attribute- R R R 460 fidelity 461 job-impressions O O O 462 job-k-octets O O O 463 job-media-sheets O O O 464 limit R 465 message 466 my-jobs R 467 requested-attributes R R 468 which-jobs R 470 * "job-id" is REQUIRED only if used together with "printer-uri" to 471 identify the target job; otherwise, "job-uri" is REQUIRED. 472 ** "document-access-error" applies to the Print-URI response only. 474 Expires November 30, 2000 475 Table 3 - Summary of Job operation attributes that sender MUST supply 477 Job Operations 478 Requests Respons 479 es 480 Operation Attributes Send- Send Cance Get- Hold- All 481 Docume -URI l-Job Job- Job, Operati 482 nt (O) (R) Attrib Release ons 483 (O) utes -Job, 484 (R) Restart 485 -Job 486 (O+) 487 Operation parameters--REQUIRED to be supplied by the sender: 488 operation-id R R R R R 489 status-code R 490 request-id R R R R R R 491 version-number R R R R R R 492 Operation attributes--REQUIRED to be supplied by the sender: 493 attributes-charset R R R R R R 494 attributes-natural- R R R R R R 495 language 496 document-uri R 497 job-id* R R R R R 498 job-uri* R R R R R 499 last-document R R 500 printer-uri R R R R R 501 Operation attributes--RECOMMENDED to be supplied by the sender: 502 job-name 503 requesting-user-name R R R R R 505 Expires November 30, 2000 506 Table 4 - Summary of Job operation attributes that sender MAY supply 508 Job Operations 509 Requests Respo 510 nses 511 Operation Attributes Send- Sen Cance Get- Hold- Relea All 512 Documen d- l-Job Job- Job, se- Opera 513 t URI (R) Attrib Restar Job tions 514 (O) (O) utes t-Job (O+) 515 (R) (O+) 516 Operation attributes--OPTIONAL to be supplied by the sender: 517 status-message O 518 detailed-status- O 519 message 520 document-access-error O** 521 compression O O 522 document-format R R 523 document-name O O 524 document-natural- O O 525 language 526 ipp-attribute- 527 fidelity 528 job-impressions 529 job-k-octets 530 job-media-sheets 531 limit 532 message O O O 533 job-hold-until R 534 my-jobs 535 requested-attributes R 536 which-jobs 537 * "job-id" is REQUIRED only if used together with "printer-uri" to 538 identify the target job; otherwise, "job-uri" is REQUIRED. 539 ** "document-access-error" applies to the Send-URI operation only. 541 Expires November 30, 2000 542 Table 5 - Printer operation response attributes 544 Printer Operations 545 Response 546 Operation Print- Validat Prin Create Get- Get- Pause- 547 Attributes Job e-Job t- -Job Printe Jobs Printer 548 (R),Send (R) URI (O) r- (R) , 549 - (O), Attrib Resume- 550 Document Send utes Printer 551 (O) -URI (R) , 552 (O) Purge- 553 Printer 554 (O+) 555 job-uri R R R 556 job-id R R R 557 job-state R R R 558 job-state- R+ R+ R+ 559 reasons 560 number-of- O O O 561 intervening- 562 jobs 563 document- O 564 access-error+ 566 Expires November 30, 2000 568 3.1.2 Suggested Operation Processing Steps for IPP Objects 570 This section suggests the steps and error checks that an IPP object MAY 571 perform when processing requests and returning responses. An IPP object 572 MAY perform some or all of the error checks. However, some 573 implementations MAY choose to be more forgiving than the error checks 574 shown here, in order to be able to accept requests from non-conforming 575 clients. Not performing all of these error checks is a so-called 576 "forgiving" implementation. On the other hand, clients that 577 successfully submit requests to IPP objects that do perform all the 578 error checks will be more likely to be able to interoperate with other 579 IPP object implementations. Thus an implementer of an IPP object needs 580 to decide whether to be a "forgiving" or a "strict" implementation. 581 Therefore, the error status codes returned may differ between 582 implementations. Consequentially, client SHOULD NOT expect exactly the 583 error code processing described in this section. 585 When an IPP object receives a request, the IPP object either accepts or 586 rejects the request. In order to determine whether or not to accept or 587 reject the request, the IPP object SHOULD execute the following steps. 588 The order of the steps may be rearranged and/or combined, including 589 making one or multiple passes over the request. 591 A client MUST supply requests that would pass all of the error checks 592 indicated here in order to be a conforming client. Therefore, a client 593 SHOULD supply requests that are conforming, in order to avoid being 594 rejected by some IPP object implementations and/or risking different 595 semantics by different implementations of forgiving implementations. 596 For example, a forgiving implementation that accepts multiple 597 occurrences of the same attribute, rather than rejecting the request 598 might use the first occurrences, while another might use the last 599 occurrence. Thus such a non-conforming client would get different 600 results from the two forgiving implementations. 602 In the following, processing continues step by step until a "RETURNS the 603 xxx status code ..." statement is encountered. Error returns are 604 indicated by the verb: "REJECTS". Since clients have difficulty getting 605 the status code before sending all of the document data in a Print-Job 606 request, clients SHOULD use the Validate-Job operation before sending 607 large documents to be printed, in order to validate whether the IPP 608 Printer will accept the job or not. 610 It is assumed that security authentication and authorization has already 611 taken place at a lower layer. 613 Expires November 30, 2000 614 3.1.2.1 Suggested Operation Processing Steps for all Operations 616 This section is intended to apply to all operations. The next section 617 contains the additional steps for the Print-Job, Validate-Job, Print- 618 URI, Create-Job, Send-Document, and Send-URI operations that create 619 jobs, adds documents, and validates jobs. 621 IIG Sect # Flow IPP error status codes 622 ---------- ---- ---------------------- 623 | 624 v err 625 3.1.2.1.1 --> server-error-version-not-supported 626 ok| 627 v err 628 3.1.2.1.2 --> server-error-operation-not-supported 629 ok| 630 v err 631 3.1.2.1.4.1- --> client-error-bad-request 632 3.1.2.1.4.2 633 ok| 634 v err 635 3.1.2.1.4.3 --> client-error-bad-request 636 637 ok| 638 v err 639 3.1.2.1.5 --> client-error-bad-request 640 client-error-request-value-too-long 641 <(length, tag, range,> 642 643 ok| 644 v err 645 3.1.2.1.5 --> client-error-bad-request 646 client-error-charset-not-supported 647 ok| client-error-attributes-or-values- 648 | not-supported 649 v err 650 3.1.2.1.6 --> client-error-bad-request 651 client-error-natural-language-not- 652 ok| supported 653 | client-error-request-value-too-long 654 | client-error-attributes-or-values- 655 v not-supported 657 3.1.2.1.1 Validate version number 659 Every request and every response contains the "version-number" 660 attribute. The value of this attribute is the major and minor version 662 Expires November 30, 2000 663 number of the syntax and semantics that the client and IPP object is 664 using, respectively. The "version-number" attribute remains in a fixed 665 position across all future versions so that all clients and IPP object 666 that support future versions can determine which version is being used. 667 The IPP object checks to see if the major version number supplied in the 668 request is supported. If not, the Printer object REJECTS the request 669 and RETURNS the 'server-error-version-not-supported' status code in the 670 response. The IPP object returns in the "version-number" response 671 attribute the major and minor version for the error response. Thus the 672 client can learn at least one major and minor version that the IPP 673 object supports. The IPP object is encouraged to return the closest 674 version number to the one supplied by the client. 676 The checking of the minor version number is implementation dependent, 677 however if the client supplied minor version is explicitly supported, 678 the IPP object MUST respond using that identical minor version number. 679 If the major version number matches, but the minor version number does 680 not, the Printer SHOULD accept and attempt to process the request, or 681 MAY reject the request and return the 'server-error-version-not- 682 supported' status code. In all cases, the Printer MUST return the 683 nearest version number that it supports. For example, suppose that an 684 IPP/1.2 Printer supports versions '1.1' and '1.2'. The following 685 responses are conforming: 687 Table 6 - Examples of validating IPP version 689 Client Printer Accept Request? Printer returns 690 supplies 692 1.0 yes (SHOULD) 1.1 694 no (SHOULD NOT) 1.1 696 1.1 yes (MUST) 1.1 698 1.2 yes (MUST) 1.2 700 1.3 yes (SHOULD) 1.2 702 no (SHOULD NOT) 1.2 704 It is advantageous for Printers to support both IPP/1.1 and IPP/1.0, so 705 that they can interoperate with either client implementations. Some 706 implementations may allow an Administrator to explicitly disable support 707 for one or the other by setting the "ipp-versions-supported" Printer 708 description attribute. 710 Expires November 30, 2000 711 Likewise, it is advantageous for clients to support both versions to 712 allow interoperability with new and legacy Printers. 714 3.1.2.1.2 Validate operation identifier 716 The Printer object checks to see if the "operation-id" attribute 717 supplied by the client is supported as indicated in the Printer object's 718 "operations-supported" attribute. If not, the Printer REJECTS the 719 request and returns the 'server-error-operation-not-supported' status 720 code in the response. 722 3.1.2.1.3 Validate the request identifier 724 The Printer object SHOULD NOT check to see if the "request-id" attribute 725 supplied by the client is in range: between 1 and 2**31 - 1 (inclusive), 726 but copies all 32 bits. 728 Note: The "version-number", "operation-id", and the "request-id" 729 parameters are in fixed octet positions in the IPP/1.1 encoding. The 730 "version-number" parameter will be the same fixed octet position in all 731 versions of the protocol. These fields are validated before proceeding 732 with the rest of the validation. 734 3.1.2.1.4 Validate attribute group and attribute presence and order 736 The order of the following validation steps depends on implementation. 738 3.1.2.1.4.1 Validate the presence and order of attribute groups 740 Client requests and IPP object responses contain attribute groups that 741 Section 3 requires to be present and in a specified order. An IPP 742 object verifies that the attribute groups are present and in the correct 743 order in requests supplied by clients (attribute groups without an * in 744 the following tables). 746 If an IPP object receives a request with (1) required attribute groups 747 missing, or (2) the attributes groups are out of order, or (3) the 748 groups are repeated, the IPP object REJECTS the request and RETURNS the 749 'client-error-bad-request' status code. For example, it is an error for 750 the Job Template Attributes group to occur before the Operation 751 Attributes group, for the Operation Attributes group to be omitted, or 752 for an attribute group to occur more than once, except in the Get-Jobs 753 response. 755 Expires November 30, 2000 756 Since this kind of attribute group error is most likely to be an error 757 detected by a client developer rather than by a customer, the IPP object 758 NEED NOT return an indication of which attribute group was in error in 759 either the Unsupported Attributes group or the Status Message. Also, 760 the IPP object NEED NOT find all attribute group errors before returning 761 this error. 763 3.1.2.1.4.2 Ignore unknown attribute groups in the expected position 765 Future attribute groups may be added to the specification at the end of 766 requests just before the Document Content and at the end of response, 767 except for the Get-Jobs response, where it maybe there or before the 768 first job attributes returned. If an IPP object receives an unknown 769 attribute group in these positions, it ignores the entire group, rather 770 than returning an error, since that group may be a new group in a later 771 minor version of the protocol that can be ignored. (If the new 772 attribute group cannot be ignored without confusing the client, the 773 major version number would have been increased in the protocol document 774 and in the request). If the unknown group occurs in a different 775 position, the IPP object REJECTS the request and RETURNS the 'client- 776 error-bad-request' status code. 778 Clients also ignore unknown attribute groups returned in a response. 780 Note: By validating that requests are in the proper form, IPP objects 781 force clients to use the proper form which, in turn, increases the 782 chances that customers will be able to use such clients from multiple 783 vendors with IPP objects from other vendors. 785 3.1.2.1.4.3 Validate the presence of a single occurrence of required 786 Operation attributes 788 Client requests and IPP object responses contain Operation attributes 789 that [IPP-MOD] Section 3 requires to be present. Attributes within a 790 group may be in any order, except for the ordering of target, charset, 791 and natural languages attributes. These attributes MUST be first, and 792 MUST be supplied in the following order: charset, natural language, and 793 then target. An IPP object verifies that the attributes that Section 4 794 requires to be supplied by the client have been supplied in the request 795 (attributes without an * in the following tables). An asterisk (*) 796 indicates groups and Operation attributes that the client may omit in a 797 request or an IPP object may omit in a response. 799 If an IPP object receives a request with required attributes missing or 800 repeated from a group or in the wrong position, the behavior of the IPP 801 object is IMPLEMENTATION DEPENDENT. Some of the possible 802 implementations are: 804 Expires November 30, 2000 805 1. REJECTS the request and RETURNS the 'client-error-bad-request' 806 status code 808 2. accepts the request and uses the first occurrence of the attribute 809 no matter where it is 811 3. accepts the request and uses the last occurrence of the attribute 812 no matter where it is 814 4. accept the request and assume some default value for the missing 815 attribute 817 Therefore, client MUST send conforming requests, if they want to receive 818 the same behavior from all IPP object implementations. For example, it 819 is an error for the "attributes-charset" or "attributes-natural- 820 language" attribute to be omitted in any operation request, or for an 821 Operation attribute to be supplied in a Job Template group or a Job 822 Template attribute to be supplied in an Operation Attribute group in a 823 create request. It is also an error to supply the "attributes-charset" 824 attribute twice. 826 Since these kinds of attribute errors are most likely to be detected by 827 a client developer rather than by a customer, the IPP object NEED NOT 828 return an indication of which attribute was in error in either the 829 Unsupported Attributes group or the Status Message. Also, the IPP 830 object NEED NOT find all attribute errors before returning this error. 832 The following tables list all the attributes for all the operations by 833 attribute group in each request and each response. The order of the 834 groups is the order that the client supplies the groups as specified in 835 [IPP-MOD] Section 3. The order of the attributes within a group is 836 arbitrary, except as noted for some of the special operation attributes 837 (charset, natural language, and target). The tables below use the 838 following notation: 840 R indicates a REQUIRED attribute or operation that an IPP object MUST 841 support 842 O indicates an OPTIONAL attribute or operation that an IPP object 843 NEED NOT support 844 * indicates that a client MAY omit the attribute in a request and 845 that an IPP object MAY omit the attribute in a response. 846 The absence of an * means that a client MUST supply the 847 attribute in a request and an IPP object MUST supply the 848 attribute in a response. 849 + indicates that this is not a IPP/1.0 operation, but is only a part 850 of IPP/1.1 and future versions of IPP. 852 Operation Requests 854 Expires November 30, 2000 856 The tables below show the attributes in their proper attribute groups 857 for operation requests: 859 Note: All operation requests contain "version-number", "operation-id", 860 and "request-id" parameters. 862 Print-Job Request (R): 863 Group 1: Operation Attributes (R) 864 attributes-charset (R) 865 attributes-natural-language (R) 866 printer-uri (R) 867 requesting-user-name (R*) 868 job-name (R*) 869 ipp-attribute-fidelity (R*) 870 document-name (R*) 871 document-format (R*) 872 document-natural-language (O*) 873 compression (O*) 874 job-k-octets (O*) 875 job-impressions (O*) 876 job-media-sheets (O*) 877 Group 2: Job Template Attributes (R*) 878 (O*) 879 (see [IPP-MOD] Section 4.2) 880 Group 3: Document Content (R) 881 883 Validate-Job Request (R): 884 Group 1: Operation Attributes (R) 885 attributes-charset (R) 886 attributes-natural-language (R) 887 printer-uri (R) 888 requesting-user-name (R*) 889 job-name (R*) 890 ipp-attribute-fidelity (R*) 891 document-name (R*) 892 document-format (R*) 893 document-natural-language (O*) 894 compression (O*) 895 job-k-octets (O*) 896 job-impressions (O*) 897 job-media-sheets (O*) 898 Group 2: Job Template Attributes (R*) 899 (O*) 900 (see [IPP-MOD] Section 4.2) 902 Expires November 30, 2000 904 Print-URI Request (O): 905 Group 1: Operation Attributes (R) 906 attributes-charset (R) 907 attributes-natural-language (R) 908 printer-uri (R) 909 document-uri (R) 910 requesting-user-name (R*) 911 job-name (R*) 912 ipp-attribute-fidelity (R*) 913 document-name (R*) 914 document-format (R*) 915 document-natural-language (O*) 916 compression (O*) 917 job-k-octets (O*) 918 job-impressions (O*) 919 job-media-sheets (O*) 920 Group 2: Job Template Attributes (R*) 921 (O*) (see 922 (see [IPP-MOD] Section 4.2) 924 Create-Job Request (O): 925 Group 1: Operation Attributes (R) 926 attributes-charset (R) 927 attributes-natural-language (R) 928 printer-uri (R) 929 requesting-user-name (R*) 930 job-name (R*) 931 ipp-attribute-fidelity (R*) 932 job-k-octets (O*) 933 job-impressions (O*) 934 job-media-sheets (O*) 935 Group 2: Job Template Attributes (R*) 936 (O*) (see 937 (see [IPP-MOD] Section 4.2) 939 Get-Printer-Attributes Request (R): 940 Group 1: Operation Attributes (R) 941 attributes-charset (R) 942 attributes-natural-language (R) 943 printer-uri (R) 944 requesting-user-name (R*) 945 requested-attributes (R*) 946 document-format (R*) 948 Get-Jobs Request (R): 949 Group 1: Operation Attributes (R) 950 attributes-charset (R) 951 attributes-natural-language (R) 953 Expires November 30, 2000 954 printer-uri (R) 955 requesting-user-name (R*) 956 limit (R*) 957 requested-attributes (R*) 958 which-jobs (R*) 959 my-jobs (R*) 961 Send-Document Request (O): 962 Group 1: Operation Attributes (R) 963 attributes-charset (R) 964 attributes-natural-language (R) 965 (printer-uri & job-id) | job-uri (R) 966 last-document (R) 967 requesting-user-name (R*) 968 document-name (R*) 969 document-format (R*) 970 document-natural-language (O*) 971 compression (O*) 972 Group 2: Document Content (R*) 973 975 Send-URI Request (O): 976 Group 1: Operation Attributes (R) 977 attributes-charset (R) 978 attributes-natural-language (R) 979 (printer-uri & job-id) | job-uri (R) 980 last-document (R) 981 document-uri (R) 982 requesting-user-name (R*) 983 document-name (R*) 984 document-format (R*) 985 document-natural-language (O*) 986 compression (O*) 988 Cancel-Job Request (R): 989 Release-Job Request (O+): 990 Group 1: Operation Attributes (R) 991 attributes-charset (R) 992 attributes-natural-language (R) 993 (printer-uri & job-id) | job-uri (R) 994 requesting-user-name (R*) 995 message (O*) 997 Get-Job-Attributes Request (R): 998 Group 1: Operation Attributes (R) 999 attributes-charset (R) 1000 attributes-natural-language (R) 1001 (printer-uri & job-id) | job-uri (R) 1003 Expires November 30, 2000 1004 requesting-user-name (R*) 1005 requested-attributes (R*) 1007 Pause-Printer Request (O+): 1008 Resume-Printer Request (O+): 1009 Purge-Printer Request (O+): 1010 Group 1: Operation Attributes (R) 1011 attributes-charset (R) 1012 attributes-natural-language (R) 1013 printer-uri (R) 1014 requesting-user-name (R*) 1016 Hold-Job Request (O+): 1017 Restart-Job Request (O+): 1018 Group 1: Operation Attributes (R) 1019 attributes-charset (R) 1020 attributes-natural-language (R) 1021 (printer-uri & job-id) | job-uri (R) 1022 requesting-user-name (R*) 1023 job-hold-until (R*) 1024 message (O*) 1026 Operation Responses 1028 The tables below show the response attributes in their proper attribute 1029 groups for responses. 1031 Note: All operation responses contain "version-number", "status-code", 1032 and "request-id" parameters. 1034 Print-Job Response (R): 1035 Create-Job Response (O): 1036 Send-Document Response (O): 1037 Group 1: Operation Attributes (R) 1038 attributes-charset (R) 1039 attributes-natural-language (R) 1040 status-message (O*) 1041 detailed-status-message (O*) 1042 Group 2: Unsupported Attributes (R*) (see Note 3) 1043 (R*) 1044 Group 3: Job Object Attributes(R*) (see Note 2) 1045 job-uri (R) 1046 job-id (R) 1047 job-state (R) 1048 job-state-reasons (O* | R+) 1049 job-state-message (O*) 1050 number-of-intervening-jobs (O*) 1052 Expires November 30, 2000 1054 Validate-Job Response (R): 1055 Cancel-Job Response (R): 1056 Hold-Job Response (O+): 1057 Release-Job Response (O+): 1058 Restart-Job Response (O+): 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 3) 1065 (R*) 1067 Print-URI Response (O): 1068 Send-URI Response (O): 1069 Group 1: Operation Attributes (R) 1070 attributes-charset (R) 1071 attributes-natural-language (R) 1072 status-message (O*) 1073 detailed-status-message (O*) 1074 document-access-error (O*) 1075 Group 2: Unsupported Attributes (R*) (see Note 3) 1076 (R*) 1077 Group 3: Job Object Attributes(R*) (see Note 2) 1078 job-uri (R) 1079 job-id (R) 1080 job-state (R) 1081 job-state-reasons (O* | R+) 1082 job-state-message (O*) 1083 number-of-intervening-jobs (O*) 1085 Get-Printer-Attributes Response (R): 1086 Group 1: Operation Attributes (R) 1087 attributes-charset (R) 1088 attributes-natural-language (R) 1089 status-message (O*) 1090 detailed-status-message (O*) 1091 Group 2: Unsupported Attributes (R*) (see Note 4) 1092 (R*) 1093 Group 3: Printer Object Attributes(R*) (see Note 2) 1094 (R*) 1096 Get-Jobs Response (R): 1097 Group 1: Operation Attributes (R) 1098 attributes-charset (R) 1099 attributes-natural-language (R) 1100 status-message (O*) 1102 Expires November 30, 2000 1103 detailed-status-message (O*) 1104 Group 2: Unsupported Attributes (R*) (see Note 4) 1105 (R*) 1106 Group 3: Job Object Attributes(R*) (see Note 2, 5) 1107 (R*) 1109 Get-Job-Attributes Response (R): 1110 Group 1: Operation Attributes (R) 1111 attributes-charset (R) 1112 attributes-natural-language (R) 1113 status-message (O*) 1114 detailed-status-message (O*) 1115 Group 2: Unsupported Attributes (R*) (see Note 4) 1116 (R*) 1117 Group 3: Job Object Attributes(R*) (see Note 2) 1118 (R*) 1120 Pause-Printer Response (O+): 1121 Resume-Printer Response (O+): 1122 Purge-Printer Response (O+): 1123 Group 1: Operation Attributes (R) 1124 attributes-charset (R) 1125 attributes-natural-language (R) 1126 status-message (O*) 1127 detailed-status-message (O*) 1128 Group 2: Unsupported Attributes (R*) (see Note 4) 1129 (R*) 1131 Note 2 - the Job Object Attributes and Printer Object Attributes are 1132 returned only if the IPP object returns one of the success status codes. 1134 Note 3 - the Unsupported Attributes Group is present only if the client 1135 included some Operation and/or Job Template attributes or values that 1136 the Printer doesn't support whether a success or an error return. 1138 Note 4 - the Unsupported Attributes Group is present only if the client 1139 included some Operation attributes that the Printer doesn't support 1140 whether a success or an error return. 1142 Note 5: for the Get-Jobs operation the response contains a separate Job 1143 Object Attributes group 3 to N containing requested-attributes for each 1144 job object in the response. 1146 3.1.2.1.5 Validate the values of the REQUIRED Operation attributes 1148 An IPP object validates the values supplied by the client of the 1149 REQUIRED Operation attribute that the IPP object MUST support. The next 1151 Expires November 30, 2000 1152 section specifies the validation of the values of the OPTIONAL Operation 1153 attributes that IPP objects MAY support. 1155 The IPP object performs the following syntactic validation checks of 1156 each Operation attribute value: 1158 a) that the length of each Operation attribute value is correct for 1159 the attribute syntax tag supplied by the client according to [IPP- 1160 MOD] Section 4.1, 1162 b) that the attribute syntax tag is correct for that Operation 1163 attribute according to [IPP-MOD] Section 3, 1165 c) that the value is in the range specified for that Operation 1166 attribute according to [IPP-MOD] Section 3, 1168 d) that multiple values are supplied by the client only for 1169 operation attributes that are multi-valued, i.e., that are 1setOf X 1170 according to [IPP-MOD] Section 3. 1172 If any of these checks fail, the IPP object REJECTS the request and 1173 RETURNS the 'client-error-bad-request' or the 'client-error-request- 1174 value-too-long' status code. Since such an error is most likely to be 1175 an error detected by a client developer, rather than by an end-user, the 1176 IPP object NEED NOT return an indication of which attribute had the 1177 error in either the Unsupported Attributes Group or the Status Message. 1178 The description for each of these syntactic checks is explicitly 1179 expressed in the first IF statement in the following table. 1181 In addition, the IPP object checks each Operation attribute value 1182 against some Printer object attribute or some hard-coded value if there 1183 is no "xxx-supported" Printer object attribute defined. If its value is 1184 not among those supported or is not in the range supported, then the IPP 1185 object REJECTS the request and RETURNS the error status code indicated 1186 in the table by the second IF statement. If the value of the Printer 1187 object's "xxx-supported" attribute is 'no-value' (because the system 1188 administrator hasn't configured a value), the check always fails. 1190 ----------------------------------------------- 1192 attributes-charset (charset) 1194 IF NOT a single non-empty 'charset' value, REJECT/RETURN 'client- 1195 error-bad-request'. 1196 IF the value length is greater than 63 octets, REJECT/RETURN 1197 'client-error-request-value-too-long'. 1199 Expires November 30, 2000 1201 IF NOT in the Printer object's "charset-supported" attribute, 1202 REJECT/RETURN "client-error-charset-not-supported". 1204 attributes-natural-language(naturalLanguage) 1206 IF NOT a single non-empty 'naturalLanguage' value, REJECT/RETURN 1207 'client-error-bad-request'. 1208 IF the value length is greater than 63 octets, REJECT/RETURN 1209 'client-error-request-value-too-long'. 1210 ACCEPT the request even if not a member of the set in the Printer 1211 object's "generated-natural-language-supported" attribute. If 1212 the supplied value is not a member of the Printer object's 1213 "generated-natural-language-supported" attribute, use the 1214 Printer object's "natural-language-configured" value. 1216 requesting-user-name 1218 IF NOT a single 'name' value, REJECT/RETURN 'client-error-bad- 1219 request'. 1220 IF the value length is greater than 255 octets, REJECT/RETURN 1221 'client-error-request-value-too-long'. 1222 IF the IPP object can obtain a better-authenticated name, use it 1223 instead. 1225 job-name(name) 1227 IF NOT a single 'name' value, REJECT/RETURN 'client-error-bad- 1228 request'. 1229 IF the value length is greater than 255 octets, REJECT/RETURN 1230 'client-error-request-value-too-long'. 1231 IF NOT supplied by the client, the Printer object creates a name 1232 from the document-name or document-uri. 1234 document-name (name) 1236 IF NOT a single 'name' value, REJECT/RETURN 'client-error-bad- 1237 request'. 1238 IF the value length is greater than 255 octets, REJECT/RETURN 1239 'client-error-request-value-too-long'. 1241 ipp-attribute-fidelity (boolean) 1243 IF NEITHER a single 'true' NOR a single 'false' 'boolean' value, 1244 REJECT/RETURN 'client-error-bad-request'. 1245 IF the value length is NOT equal to 1 octet, REJECT/RETURN 'client- 1246 error-request-value-too-long' 1247 IF NOT supplied by the client, the IPP object assumes the value 1248 'false'. 1250 Expires November 30, 2000 1252 document-format (mimeMediaType) 1254 IF NOT a single non-empty 'mimeMediaType' value, REJECT/RETURN 1255 'client-error-bad-request'. 1256 IF the value length is greater than 255 octets, REJECT/RETURN 1257 'client-error-request-value-too-long'. 1258 IF NOT in the Printer object's "document-format-supported" 1259 attribute, REJECT/RETURN 'client-error-document-format-not- 1260 supported' 1261 IF NOT supplied by the client, the IPP object assumes the value of 1262 the Printer object's "document-format-default" attribute. 1264 document-uri (uri) 1266 IF NOT a single non-empty 'uri' value, REJECT/RETURN 'client-error- 1267 bad-request'. 1268 IF the value length is greater than 1023 octets, REJECT/RETURN 1269 'client-error-request-value-too-long'. 1270 IF the URI syntax is not valid, REJECT/RETURN 'client-error-bad- 1271 request'. 1272 If the client-supplied URI scheme is not supported, i.e. the value 1273 is not in the Printer object's referenced-uri-scheme- 1274 supported" attribute, the Printer object MUST reject the 1275 request and return the 'client-error-uri-scheme-not-supported' 1276 status code. The Printer object MAY check to see if the 1277 document exists and is accessible. If the document is not 1278 found or is not accessible, REJECT/RETURN 'client-error-not 1279 found'. 1280 last-document (boolean) 1281 IF NEITHER a single 'true' NOR a single 'false' 'boolean' value, 1282 REJECT/RETURN 'client-error-bad-request'. 1283 IF the value length is NOT equal to 1 octet, REJECT/RETURN 'client- 1284 error-request-value-too-long' 1286 job-id (integer(1:MAX)) 1288 IF NOT an single 'integer' value equal to 4 octets AND in the range 1289 1 to MAX, REJECT/RETURN 'client-error-bad-request'. 1290 IF NOT a job-id of an existing Job object, REJECT/RETURN 'client- 1291 error-not-found' or 'client-error-gone' status code, if keep 1292 track of recently deleted jobs. 1294 requested-attributes (1setOf keyword) 1296 IF NOT one or more 'keyword' values, REJECT/RETURN 'client-error- 1297 bad-request'. 1299 Expires November 30, 2000 1301 IF the value length is greater than 255 octets, REJECT/RETURN 1302 'client-error-request-value-too-long'. 1303 Ignore unsupported values, which are the keyword names of 1304 unsupported attributes. Don't bother to copy such requested 1305 (unsupported) attributes to the Unsupported Attribute response 1306 group since the response will not return them. 1308 which-jobs (type2 keyword) 1310 IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-bad- 1311 request'. 1312 IF the value length is greater than 255 octets, REJECT/RETURN 1313 'client-error-request-value-too-long'. 1314 IF NEITHER 'completed' NOR 'not-completed', copy the attribute and 1315 the unsupported value to the Unsupported Attributes response 1316 group and REJECT/RETURN 'client-error-attributes-or-values- 1317 not-supported'. 1318 Note: a Printer still supports the 'completed' value even if it 1319 keeps no completed/canceled/aborted jobs: by returning no 1320 jobs when so queried. 1321 IF NOT supplied by the client, the IPP object assumes the 'not- 1322 completed' value. 1324 my-jobs (boolean) 1326 IF NEITHER a single 'true' NOR a single 'false' 'boolean' value, 1327 REJECT/RETURN 'client-error-bad-request'. 1328 IF the value length is NOT equal to 1 octet, REJECT/RETURN 'client- 1329 error-request-value-too-long' 1330 IF NOT supplied by the client, the IPP object assumes the 'false' 1331 value. 1333 limit (integer(1:MAX)) 1335 IF NOT a single 'integer' value equal to 4 octets AND in the range 1336 1 to MAX, REJECT/RETURN 'client-error-bad-request'. 1337 IF NOT supplied by the client, the IPP object returns all jobs, no 1338 matter how many. 1340 ----------------------------------------------- 1342 3.1.2.1.6 Validate the values of the OPTIONAL Operation attributes 1344 OPTIONAL Operation attributes are those that an IPP object MAY or MAY 1345 NOT support. An IPP object validates the values of the OPTIONAL 1346 attributes supplied by the client. The IPP object performs the same 1348 Expires November 30, 2000 1349 syntactic validation checks for each OPTIONAL attribute value as in 1350 Section 3.1.2.1.5. As in Section 3.1.2.1.5, if any fail, the IPP object 1351 REJECTS the request and RETURNS the 'client-error-bad-request' or the 1352 'client-error-request-value-too-long' status code. 1354 In addition, the IPP object checks each Operation attribute value 1355 against some Printer attribute or some hard-coded value if there is no 1356 "xxx-supported" Printer attribute defined. If its value is not among 1357 those supported or is not in the range supported, then the IPP object 1358 REJECTS the request and RETURNS the error status code indicated in the 1359 table. If the value of the Printer object's "xxx-supported" attribute 1360 is 'no-value' (because the system administrator hasn't configured a 1361 value), the check always fails. 1363 If the IPP object doesn't recognize/support an attribute, the IPP object 1364 treats the attribute as an unknown or unsupported attribute (see the 1365 last row in the table below). 1367 ----------------------------------------------- 1369 document-natural-language (naturalLanguage) 1371 IF NOT a single non-empty 'naturalLanguage' value, REJECT/RETURN 1372 'client-error-bad-request'. 1373 IF the value length is greater than 63 octets, REJECT/RETURN 1374 'client-error-request-value-too-long'. 1375 IF NOT a value that the Printer object supports in document 1376 formats, (no corresponding "xxx-supported" Printer attribute), 1377 REJECT/RETURN 'client-error-natural-language-not-supported'. 1379 compression (type3 keyword) 1381 IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-bad- 1382 request'. 1383 IF the value length is greater than 255 octets, REJECT/RETURN 1384 'client-error-request-value-too-long'. 1385 IF NOT in the Printer object's "compression-supported" attribute, 1386 copy the attribute and the unsupported value to the 1387 Unsupported Attributes response group and REJECT/RETURN 1388 'client-error-attributes-or-values-not-supported'. 1389 Note to IPP/1.0 implementers: Support for the "compression" 1390 attribute was optional in IPP/1.0 and was changed to REQUIRED 1391 in IPP/1.1. However, an IPP/1.0 object SHOULD at least check 1392 for the "compression" attribute being present and reject the 1393 create request, if they don't support "compression". Not 1394 checking is a bug, since the data will be unintelligible. 1396 job-k-octets (integer(0:MAX)) 1397 IF NOT a single 'integer' value equal to 4 octets, 1399 Expires November 30, 2000 1400 REJECT/RETURN 'client-error-bad-request'. 1401 IF NOT in the range of the Printer object's "job-k-octets- 1402 supported" attribute, copy the attribute and the unsupported 1403 value to the Unsupported Attributes response group and 1404 REJECT/RETURN 'client-error-attributes-or-values-not- 1405 supported'. 1407 job-impressions (integer(0:MAX)) 1409 IF NOT a single 'integer' value equal to 4 octets, 1410 REJECT/RETURN 'client-error-bad-request'. 1411 IF NOT in the range of the Printer object's "job-impressions- 1412 supported" attribute, copy the attribute and the unsupported 1413 value to the Unsupported Attributes response group and 1414 REJECT/RETURN 'client-error-attributes-or-values-not- 1415 supported'. 1417 job-media-sheets (integer(0:MAX)) 1419 IF NOT a single 'integer' value equal to 4 octets, 1420 REJECT/RETURN 'client-error-bad-request'. 1421 IF NOT in the range of the Printer object's "job-media-sheets- 1422 supported" attribute, copy the attribute and the unsupported 1423 value to the Unsupported Attributes response group and 1424 REJECT/RETURN 'client-error-attributes-or-values-not- 1425 supported'. 1427 message (text(127)) 1429 IF NOT a single 'text' value, REJECT/RETURN 'client-error-bad- 1430 request'. 1431 IF the value length is greater than 127 octets, 1432 REJECT/RETURN 'client-error-request-value-too-long'. 1434 unknown or unsupported attribute 1436 IF the attribute syntax supplied by the client is supported but the 1437 length is not legal for that attribute syntax, REJECT/RETURN 1438 'client-error-request-value-too-long'. 1439 ELSE copy the attribute and value to the Unsupported Attributes 1440 response group and change the attribute value to the "out-of- 1441 band" 'unsupported' value, but otherwise ignore the attribute. 1443 Note: Future Operation attributes may be added to the protocol 1444 specification that may occur anywhere in the specified group. When the 1445 operation is otherwise successful, the IPP object returns the 1446 'successful-ok-ignored-or-substituted-attributes' status code. Ignoring 1447 unsupported Operation attributes in all operations is analogous to the 1449 Expires November 30, 2000 1450 handling of unsupported Job Template attributes in the create and 1451 Validate-Job operations when the client supplies the "ipp-attribute- 1452 fidelity" Operation attribute with the 'false' value. This last rule is 1453 so that we can add OPTIONAL Operation attributes to future versions of 1454 IPP so that older clients can inter-work with new IPP objects and newer 1455 clients can inter-work with older IPP objects. (If the new attribute 1456 cannot be ignored without performing unexpectedly, the major version 1457 number would have been increased in the protocol document and in the 1458 request). This rule for Operation attributes is independent of the 1459 value of the "ipp-attribute-fidelity" attribute. For example, if an 1460 IPP object doesn't support the OPTIONAL "job-k-octets" attribute', the 1461 IPP object treats "job-k-octets" as an unknown attribute and only checks 1462 the length for the 'integer' attribute syntax supplied by the client. 1463 If it is not four octets, the IPP object REJECTS the request and RETURNS 1464 the 'client-error-bad-request' status code, else the IPP object copies 1465 the attribute to the Unsupported Attribute response group, setting the 1466 value to the "out-of-band" 'unsupported' value, but otherwise ignores 1467 the attribute. 1469 Expires November 30, 2000 1470 3.1.2.2 Suggested Additional Processing Steps for Operations that 1471 Create/Validate Jobs and Add Documents 1473 This section in combination with the previous section recommends the 1474 processing steps for the Print-Job, Validate-Job, Print-URI, Create-Job, 1475 Send-Document, and Send-URI operations that IPP objects SHOULD use. 1476 These are the operations that create jobs, validate a Print-Job request, 1477 and add documents to a job. 1479 IIG Sect # Flow IPP error status codes 1480 ---------- ---- ---------------------- 1481 | 1482 v No 1483 3.1.2.2.1 ------------------+ 1484 | 1485 Yes| | 1486 | ipp-attribute-fidelity = no | 1487 |<------------------------------+ 1488 v No 1489 3.1.2.2.2 --> server-error-not-accepting-jobs 1490 1491 Yes| 1492 v err 1493 3.1.2.3 --> client-error-bad-request 1494 client-error-request-value-too-long 1495 <(length, tag, range,> 1496 1497 ok| 1498 v err 1499 3.1.2.3 --> client-error-bad-request 1500 client-error-attributes-or-values- 1501 ok| not-supported 1502 v err 1503 3.1.2.3.1 --> client-error-conflicting-attributes 1504 client-error-attributes-or-values- 1505 ok| not-supported 1506 v 1508 3.1.2.2.1 Default "ipp-attribute-fidelity" if not supplied 1510 The Printer object checks to see if the client supplied an "ipp- 1511 attribute-fidelity" Operation attribute. If the attribute is not 1512 supplied by the client, the IPP object assumes that the value is 1513 'false'. 1515 3.1.2.2.2 Check that the Printer object is accepting jobs 1517 Expires November 30, 2000 1518 If the value of the Printer objects "printer-is-accepting-jobs" is 1519 'false', the Printer object REJECTS the request and RETURNS the 'server- 1520 error-not-accepting-jobs' status code. 1522 3.1.2.2.3 Validate the values of the Job Template attributes 1524 An IPP object validates the values of all Job Template attribute 1525 supplied by the client. The IPP object performs the analogous syntactic 1526 validation checks of each Job Template attribute value that it performs 1527 for Operation attributes (see Section 3.1.2.1.5.): 1529 a) that the length of each value is correct for the attribute 1530 syntax tag supplied by the client according to [IPP-MOD] Section 4.1. 1532 b) that the attribute syntax tag is correct for that attribute 1533 according to [IPP-MOD] Sections 4.2 to 4.4. 1535 c) that multiple values are supplied only for multi-valued 1536 attributes, i.e., that are 1setOf X according to [IPP-MOD] Sections 1537 4.2 to 4.4. 1539 As in Section 3.1.2.1.5, if any of these syntactic checks fail, the IPP 1540 object REJECTS the request and RETURNS the 'client-error-bad-request' or 1541 'client-error-request-value-too-long' status code as appropriate, 1542 independent of the value of the "ipp-attribute-fidelity". Since such an 1543 error is most likely to be an error detected by a client developer, 1544 rather than by an end-user, the IPP object NEED NOT return an indication 1545 of which attribute had the error in either the Unsupported Attributes 1546 Group or the Status Message. The description for each of these 1547 syntactic checks is explicitly expressed in the first IF statement in 1548 the following table. 1550 Each Job Template attribute MUST occur no more than once. If an IPP 1551 Printer receives a create request with multiple occurrences of a Job 1552 Template attribute, it MAY: 1554 1. reject the operation and return the 'client-error-bad-request' 1555 error status code 1557 2. accept the operation and use the first occurrence of the 1558 attribute 1560 3. accept the operation and use the last occurrence of the 1561 attribute 1563 Expires November 30, 2000 1565 depending on implementation. Therefore, clients MUST NOT supply 1566 multiple occurrences of the same Job Template attribute in the Job 1567 Attributes group in the request. 1569 3.1.2.3 Algorithm for job validation 1571 The process of validating a Job-Template attribute "xxx" against a 1572 Printer attribute "xxx-supported" can use the following validation 1573 algorithm (see section 3.2.1.2 in [ipp-mod]). 1575 To validate the value U of Job-Template attribute "xxx" against the 1576 value V of Printer "xxx-supported", perform the following algorithm: 1578 1.If U is multi-valued, validate each value X of U by performing the 1579 algorithm in Table 7 with each value X. Each validation is separate 1580 from the standpoint of returning unsupported values. Example: If U 1581 is "finishings" that the client supplies with 'staple', 'bind' 1582 values, then X takes on the successive values: 'staple', then 'bind' 1584 2.If V is multi-valued, validate X against each Z of V by performing 1585 the algorithm in Table 7 with each value Z. If a value Z validates, 1586 the validation for the attribute value X succeeds. If it fails, the 1587 algorithm is applied to the next value Z of V. If there are no more 1588 values Z of V, validation fails. Example" If V is "sides-supported" 1589 with values: 'one-sided', 'two-sided-long', and 'two-sided-short', 1590 then Z takes on the successive values: 'one-sided', 'two-sided- 1591 long', and 'two-sided-short'. If the client supplies "sides" with 1592 'two-sided-long', the first comparison fails ('one-sided' is not 1593 equal to 'two-sided-long'), the second comparison succeeds ('two- 1594 sided-long' is equal to 'two-sided-long"), and the third comparison 1595 ('two-sided-short' with 'two-sided-long') is not even performed. 1597 3.If both U and V are single-valued, let X be U and Z be V and use the 1598 validation rules in Table 7. 1600 Table 7 - Rules for validating single values X against Z 1602 Attribute attribute validated if: 1603 syntax of X syntax of Z 1605 integer rangeOfInteger X is within the range of Z 1606 uri uriScheme the uri scheme in X is equal to Z 1607 any boolean the value of Z is TRUE 1608 any any X and Z are of the same type and are 1609 equal. 1611 Expires November 30, 2000 1613 If the value of the Printer object's "xxx-supported" attribute is 'no- 1614 value' (because the system administrator hasn't configured a value), the 1615 check always fails. If the check fails, the IPP object copies the 1616 attribute to the Unsupported Attributes response group with its 1617 unsupported value. If the attribute contains more than one value, each 1618 value is checked and each unsupported value is separately copied, while 1619 supported values are not copied. If an IPP object doesn't 1620 recognize/support a Job Template attribute, i.e., there is no 1621 corresponding Printer object "xxx-supported" attribute, the IPP object 1622 treats the attribute as an unknown or unsupported attribute (see the 1623 last row in the table below). 1625 If some Job Template attributes are supported for some document formats 1626 and not for others or the values are different for different document 1627 formats, the IPP object SHOULD take that into account in this validation 1628 using the value of the "document-format" supplied by the client (or 1629 defaulted to the value of the Printer's "document-format-default" 1630 attribute, if not supplied by the client). For example, if "number-up" 1631 is supported for the 'text/plain' document format, but not for the 1632 'application/postscript' document format, the check SHOULD (though it 1633 NEED NOT) depend on the value of the "document-format" operation 1634 attribute. See "document-format" in [IPP-MOD] section 3.2.1.1 and 1635 3.2.5.1. 1637 Note: whether the request is accepted or rejected is determined by the 1638 value of the "ipp-attribute-fidelity" attribute in a subsequent step, so 1639 that all Job Template attribute supplied are examined and all 1640 unsupported attributes and/or values are copied to the Unsupported 1641 Attributes response group. 1643 ----------------------------------------------- 1645 job-priority (integer(1:100)) 1647 IF NOT a single 'integer' value with a length equal to 4 octets, 1648 REJECT/RETURN 'client-error-bad-request'. 1649 IF NOT supplied by the client, use the value of the Printer 1650 object's "job-priority-default" attribute at job submission 1651 time. 1652 IF NOT in the range 1 to 100, inclusive, copy the attribute and the 1653 unsupported value to the Unsupported Attributes response 1654 group. 1655 Map the value to the nearest supported value in the range 1:100 as 1656 specified by the number of discrete values indicated by the 1657 value of the Printer's "job-priority-supported" attribute. 1658 See the formula in [IPP-MOD] Section 4.2.1. 1660 Expires November 30, 2000 1662 job-hold-until (type3 keyword | name) 1664 IF NOT a single 'keyword' or 'name' value, REJECT/RETURN 'client- 1665 error-bad-request'. 1666 IF the value length is greater than 255 octets, REJECT/RETURN 1667 'client-error-request-value-too-long'. 1668 IF NOT supplied by the client, use the value of the Printer 1669 object's "job-hold-until" attribute at job submission time. 1670 IF NOT in the Printer object's "job-hold-until-supported" 1671 attribute, copy the attribute and the unsupported value to the 1672 Unsupported Attributes response group. 1674 job-sheets (type3 keyword | name) 1676 IF NOT a single 'keyword' or 'name' value, REJECT/RETURN 'client- 1677 error-bad-request'. 1678 IF the value length is greater than 255 octets, REJECT/RETURN 1679 'client-error-request-value-too-long'. 1680 IF NOT in the Printer object's "job-sheets-supported" attribute, 1681 copy the attribute and the unsupported value to the 1682 Unsupported Attributes response group. 1684 multiple-document-handling (type2 keyword) 1686 IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-bad- 1687 request'. 1688 IF the value length is greater than 255 octets, REJECT/RETURN 1689 'client-error-request-value-too-long'. 1690 IF NOT in the Printer object's "multiple-document-handling- 1691 supported" attribute, copy the attribute and the unsupported 1692 value to the Unsupported Attributes response group. 1694 copies (integer(1:MAX)) 1696 IF NOT a single 'integer' value with a length equal to 4 octets, 1697 REJECT/RETURN 'client-error-bad-request'. 1698 IF NOT in range of the Printer object's "copies-supported" 1699 attribute 1700 copy the attribute and the unsupported value to the Unsupported 1701 Attributes response group. 1703 finishings (1setOf type2 enum) 1705 IF NOT an 'enum' value(s) each with a length equal to 4 octets, 1706 REJECT/RETURN 'client-error-bad-request'. 1707 IF NOT in the Printer object's "finishings-supported" attribute, 1708 copy the attribute and the unsupported value(s), but not any 1710 Expires November 30, 2000 1711 supported values, to the Unsupported Attributes response 1712 group. 1714 page-ranges (1setOf rangeOfInteger(1:MAX)) 1716 IF NOT a 'rangeOfInteger' value(s) each with a length equal to 8 1717 octets, REJECT/RETURN 'client-error-bad-request'. 1718 IF first value is greater than second value in any range, the 1719 ranges are not in ascending order, or ranges overlap, 1720 REJECT/RETURN 'client-error-bad-request'. 1721 IF the value of the Printer object's "page-ranges-supported" 1722 attribute is 'false', copy the attribute to the Unsupported 1723 Attributes response group and set the value to the "out-of- 1724 band" 'unsupported' value. 1726 sides (type2 keyword) 1728 IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-bad- 1729 request'. 1730 IF the value length is greater than 255 octets, REJECT/RETURN 1731 'client-error-request-value-too-long'. 1732 IF NOT in the Printer object's "sides-supported" attribute, copy 1733 the attribute and the unsupported value to the Unsupported 1734 Attributes response group. 1736 number-up (integer(1:MAX)) 1738 IF NOT a single 'integer' value with a length equal to 4 octets, 1739 REJECT/RETURN 'client-error-bad-request'. 1740 IF NOT a value or in the range of one of the values of the Printer 1741 object's "number-up-supported" attribute, copy the attribute 1742 and value to the Unsupported Attribute response group. 1744 orientation-requested (type2 enum) 1746 IF NOT a single 'enum' value with a length equal to 4 octets, 1747 REJECT/RETURN 'client-error-bad-request'. 1748 IF NOT in the Printer object's "orientation-requested-supported" 1749 attribute, copy the attribute and the unsupported value to the 1750 Unsupported Attributes response group. 1752 media (type3 keyword | name) 1754 IF NOT a single 'keyword' or 'name' value, REJECT/RETURN 'client- 1755 error-bad-request'. 1756 IF the value length is greater than 255 octets, REJECT/RETURN 1757 'client-error-request-value-too-long'. 1759 Expires November 30, 2000 1761 IF NOT in the Printer object's "media-supported" attribute, copy 1762 the attribute and the unsupported value to the Unsupported 1763 Attributes response group. 1765 printer-resolution (resolution) 1767 IF NOT a single 'resolution' value with a length equal to 9 octets, 1768 REJECT/RETURN 'client-error-bad-request'. 1769 IF NOT in the Printer object's "printer-resolution-supported" 1770 attribute, copy the attribute and the unsupported value to the 1771 Unsupported Attributes response group. 1773 print-quality (type2 enum) 1775 IF NOT a single 'enum' value with a length equal to 4 octets, 1776 REJECT/RETURN 'client-error-bad-request'. 1777 IF NOT in the Printer object's "print-quality-supported" attribute, 1778 copy the attribute and the unsupported value to the 1779 Unsupported Attributes response group. 1781 unknown or unsupported attribute (i.e., there is no corresponding 1782 Printer object "xxx-supported" attribute) 1784 IF the attribute syntax supplied by the client is supported but the 1785 length is not legal for that attribute syntax, 1786 REJECT/RETURN 'client-error-bad-request' if the length of the 1787 attribute syntax is fixed or 'client-error-request-value-too- 1788 long' if the length of the attribute syntax is variable. 1789 ELSE copy the attribute and value to the Unsupported Attributes 1790 response group and change the attribute value to the "out-of- 1791 band" 'unsupported' value. Any remaining Job Template 1792 Attributes are either unknown or unsupported Job Template 1793 attributes and are validated algorithmically according to 1794 their attribute syntax for proper length (see below). 1796 ----------------------------------------------- 1798 If the attribute syntax is supported AND the length check fails, the IPP 1799 object REJECTS the request and RETURNS the 'client-error-bad-request' if 1800 the length of the attribute syntax is fixed or the 'client-error- 1801 request-value-too-long' status code if the length of the attribute 1802 syntax is variable. Otherwise, the IPP object copies the unsupported Job 1803 Template attribute to the Unsupported Attributes response group and 1804 changes the attribute value to the "out-of-band" 'unsupported' value. 1805 The following table shows the length checks for all attribute syntaxes. 1806 In the following table: "<=" means less than or equal, "=" means equal 1807 to: 1809 Name Octet length check for read-write attributes 1811 Expires November 30, 2000 1812 ----------- -------------------------------------------- 1813 'textWithLanguage <= 1023 AND 'naturalLanguage' <= 63 1814 'textWithoutLanguage' <= 1023 1815 'nameWithLanguage' <= 255 AND 'naturalLanguage' <= 63 1816 'nameWithoutLanguage' <= 255 1817 'keyword' <= 255 1818 'enum' = 4 1819 'uri' <= 1023 1820 'uriScheme' <= 63 1821 'charset' <= 63 1822 'naturalLanguage' <= 63 1823 'mimeMediaType' <= 255 1824 'octetString' <= 1023 1825 'boolean' = 1 1826 'integer' = 4 1827 'rangeOfInteger' = 8 1828 'dateTime' = 11 1829 'resolution' = 9 1830 '1setOf X' 1832 Note: It's possible for a Printer to receive a zero length keyword in a 1833 request. Since this is a keyword, its value needs to be compared with 1834 the supported values. Assuming that the printer doesn't have any values 1835 in its corresponding "xxx-supported" attribute that are keywords of zero 1836 length, the comparison will fail. Then the request will be accepted or 1837 rejected depending on the value of "ipp-attributes-fidelity" being 1838 'false' or 'true', respectively. No special handling is required for 1840 3.1.2.3.1 Check for conflicting Job Template attributes values 1842 Once all the Operation and Job Template attributes have been checked 1843 individually, the Printer object SHOULD check for any conflicting values 1844 among all the supported values supplied by the client. For example, a 1845 Printer object might be able to staple and to print on transparencies, 1846 however due to physical stapling constraints, the Printer object might 1847 not be able to staple transparencies. The IPP object copies the 1848 supported attributes and their conflicting attribute values to the 1849 Unsupported Attributes response group. The Printer object only copies 1850 over those attributes that the Printer object either ignores or 1851 substitutes in order to resolve the conflict, and it returns the 1852 original values which were supplied by the client. For example suppose 1853 the client supplies "finishings" equals 'staple' and "media" equals 1854 'transparency', but the Printer object does not support stapling 1855 transparencies. If the Printer chooses to ignore the stapling request 1856 in order to resolve the conflict, the Printer objects returns 1857 "finishings" equal to 'staple' in the Unsupported Attributes response 1859 Expires November 30, 2000 1860 group. If any attributes are multi-valued, only the conflicting values 1861 of the attributes are copied. 1863 Note: The decisions made to resolve the conflict (if there is a choice) 1864 is implementation dependent. 1866 3.1.2.3.2 Decide whether to REJECT the request 1868 If there were any unsupported Job Template attributes or 1869 unsupported/conflicting Job Template attribute values and the client 1870 supplied the "ipp-attribute-fidelity" attribute with the 'true' value, 1871 the Printer object REJECTS the request and return the status code: 1873 1. 'client-error-conflicting-attributes' status code, if there were 1874 any conflicts between attributes supplied by the client. 1875 2. 'client-error-attributes-or-values-not-supported' status code, 1876 otherwise. 1878 Note: Unsupported Operation attributes or values that are returned do 1879 not affect the status returned in this step. If the unsupported 1880 Operation attribute was a serious error, the above already rejected the 1881 request in a previous step. If control gets to this step with 1882 unsupported Operation attributes being returned, they are not serious 1883 errors. 1885 In general, the final results of Job processing are unknown at Job 1886 submission time. The client has to rely on notifications or polling to 1887 find out what happens at Job processing time. However, there are cases 1888 in which some Printers can determine at Job submission time that Job 1889 processing is going to fail. As an optimization, we'd like to have the 1890 Printer reject the Job in these cases. 1892 There are three types of "processing" errors that might be detectable at 1893 Job submission time: 1895 1. 'client-error-document-format-not-supported' : For the Print-Job, 1896 Send-Document, Print-URI, and Send-URI operations, if all these 1897 conditions are true: 1899 - the Printer supports auto-sensing, 1900 - the request "document-format" operation attribute is 1901 'application/octet-stream', 1902 - the Printer receives document data before responding, 1903 - the Printer auto-senses the document format before responding, 1904 - the sensed document format is not supported by the Printer 1905 then the Printer should respond with 'client-error-document-format-not- 1906 supported' status. 1908 Expires November 30, 2000 1909 2. 'client-error-compression-error': For the Print-Job, Send-Document, 1910 Print-URI, and Send-URI operations, if all these conditions are true: 1912 - the client supplies a supported value for the "compression" 1913 operation attribute in the request 1914 - the Printer receives document data before responding, 1915 - the Printer attempts to decompress the document data before 1916 responding, 1917 - the document data cannot be decompressed using the algorithm 1918 specified by the "compression" operation attribute 1919 then the Printer should respond with 'client-error-compression-error' 1920 status. 1922 3. 'client-error-document-access-error': For the Print-URI, and Send- 1923 URI operations, if the Printer attempts and fails to pull the referenced 1924 document data before responding, it should respond with 'client-error- 1925 document-access-error' status. 1927 Some Printers are not able to detect these errors until Job processing 1928 time. In that case, the errors are recorded in the corresponding job- 1929 state and job-state reason attributes. (There is no standard way for a 1930 client to determine whether a Printer can detect these errors at Job 1931 submission time.) For example, if auto-sensing happens AFTER the job is 1932 accepted (as opposed to auto-sensing at submit time before returning the 1933 response), the implementation aborts the job, puts the job in the 1934 'aborted' state and sets the 'unsupported-document-format' value in the 1935 job's "job-state-reasons". 1937 A client should always provide a valid "document-format" operation 1938 attribute whenever practical. In the absence of other information, a 1939 client itself may sniff the document data to determine document format. 1941 Auto sensing at Job submission time may be more difficult for the 1942 Printer when combined with compression. For auto-sensed Jobs, a client 1943 may be better off deferring compression to the transfer protocol layer, 1944 e.g.; by using the HTTP Content-Encoding header. 1946 3.1.2.3.3 For the Validate-Job operation, RETURN one of the success 1947 status codes 1949 If the requested operation is the Validate-Job operation, the Printer 1950 object returns: 1952 1. the "successful-ok" status code, if there are no unsupported or 1953 conflicting Job Template attributes or values. 1954 2. the "successful-ok-conflicting-attributes, if there are any 1955 conflicting Job Template attribute or values. 1957 Expires November 30, 2000 1959 3. the "successful-ok-ignored-or-substituted-attributes, if there are 1960 only unsupported Job Template attributes or values. 1962 Note: Unsupported Operation attributes or values that are returned do 1963 not affect the status returned in this step. If the unsupported 1964 Operation attribute was a serious error, the above already rejected the 1965 request in a previous step. If control gets to this step with 1966 unsupported Operation attributes being returned, they are not serious 1967 errors. 1969 3.1.2.3.4 Create the Job object with attributes to support 1971 If "ipp-attribute-fidelity" is set to 'false' (or it was not supplied by 1972 the client), the Printer object: 1974 1. creates a Job object, assigns a unique value to the job's "job- 1975 uri" and "job-id" attributes, and initializes all of the job's 1976 other supported Job Description attributes. 1977 2. removes all unsupported attributes from the Job object. 1978 3. for each unsupported value, removes either the unsupported value 1979 or substitutes the unsupported attribute value with some supported 1980 value. If an attribute has no values after removing unsupported 1981 values from it, the attribute is removed from the Job object (so 1982 that the normal default behavior at job processing time will take 1983 place for that attribute). 1984 4. for each conflicting value, removes either the conflicting value 1985 or substitutes the conflicting attribute value with some other 1986 supported value. If an attribute has no values after removing 1987 conflicting values from it, the attribute is removed from the Job 1988 object (so that the normal default behavior at job processing time 1989 will take place for that attribute). 1991 If there were no attributes or values flagged as unsupported, or the 1992 value of 'ipp-attribute-fidelity" was 'false', the Printer object is 1993 able to accept the create request and create a new Job object. If the 1994 "ipp-attribute-fidelity" attribute is set to 'true', the Job Template 1995 attributes that populate the new Job object are necessarily all the Job 1996 Template attributes supplied in the create request. If the "ipp- 1997 attribute-fidelity" attribute is set to 'false', the Job Template 1998 attributes that populate the new Job object are all the client supplied 1999 Job Template attributes that are supported or that have value 2000 substitution. Thus, some of the requested Job Template attributes may 2001 not appear in the Job object because the Printer object did not support 2002 those attributes. The attributes that populate the Job object are 2003 persistently stored with the Job object for that Job. A Get-Job- 2005 Expires November 30, 2000 2006 Attributes operation on that Job object will return only those 2007 attributes that are persistently stored with the Job object. 2009 Note: All Job Template attributes that are persistently stored with the 2010 Job object are intended to be "override values"; that is, they that take 2011 precedence over whatever other embedded instructions might be in the 2012 document data itself. However, it is not possible for all Printer 2013 objects to realize the semantics of "override". End users may query the 2014 Printer's "pdl-override-supported" attribute to determine if the Printer 2015 either attempts or does not attempt to override document data 2016 instructions with IPP attributes. 2018 There are some cases, where a Printer supports a Job Template attribute 2019 and has an associated default value set for that attribute. In the case 2020 where a client does not supply the corresponding attribute, the Printer 2021 does not use its default values to populate Job attributes when creating 2022 the new Job object; only Job Template attributes actually in the create 2023 request are used to populate the Job object. The Printer's default 2024 values are only used later at Job processing time if no other IPP 2025 attribute or instruction embedded in the document data is present. 2027 Note: If the default values associated with Job Template attributes that 2028 the client did not supply were to be used to populate the Job object, 2029 then these values would become "override values" rather than defaults. 2030 If the Printer supports the 'attempted' value of the "pdl-override- 2031 supported" attribute, then these override values could replace values 2032 specified within the document data. This is not the intent of the 2033 default value mechanism. A default value for an attribute is used only 2034 if the create request did not specify that attribute (or it was ignored 2035 when allowed by "ipp-attribute-fidelity" being 'false') and no value was 2036 provided within the content of the document data. 2038 If the client does not supply a value for some Job Template attribute, 2039 and the Printer does not support that attribute, as far as IPP is 2040 concerned, the result of processing that Job (with respect to the 2041 missing attribute) is undefined. 2043 3.1.2.3.5 Return one of the success status codes 2045 Once the Job object has been created, the Printer object accepts the 2046 request and returns to the client: 2048 1. the 'successful-ok' status code, if there are no unsupported or 2049 conflicting Job Template attributes or values. 2050 2. the 'successful-ok-conflicting-attributes' status code, if there 2051 are any conflicting Job Template attribute or values. 2053 Expires November 30, 2000 2055 3. the 'successful-ok-ignored-or-substituted-attributes' status code, 2056 if there are only unsupported Job Template attributes or values. 2058 Note: Unsupported Operation attributes or values that are returned do 2059 not affect the status returned in this step. If the unsupported 2060 Operation attribute was a serious error, the above already rejected the 2061 request in a previous step. If control gets to this step with 2062 unsupported Operation attributes being returned, they are not serious 2063 errors. 2065 The Printer object also returns Job status attributes that indicate the 2066 initial state of the Job ('pending', 'pending-held', 'processing', 2067 etc.), etc. See Print-Job Response, [IPP-MOD] section 3.2.1.2. 2069 3.1.2.3.6 Accept appended Document Content 2071 The Printer object accepts the appended Document Content data and either 2072 starts it printing, or spools it for later processing. 2074 3.1.2.3.7 Scheduling and Starting to Process the Job 2076 The Printer object uses its own configuration and implementation 2077 specific algorithms for scheduling the Job in the correct processing 2078 order. Once the Printer object begins processing the Job, the Printer 2079 changes the Job's state to 'processing'. If the Printer object supports 2080 PDL override (the "pdl-override-supported" attribute set to 2081 'attempted'), the implementation does its best to see that IPP 2082 attributes take precedence over embedded instructions in the document 2083 data. 2085 3.1.2.3.8 Completing the Job 2087 The Printer object continues to process the Job until it can move the 2088 Job into the 'completed' state. If an Cancel-Job operation is received, 2089 the implementation eventually moves the Job into the 'canceled' state. 2090 If the system encounters errors during processing that do not allow it 2091 to progress the Job into a completed state, the implementation halts all 2092 processing, cleans up any resources, and moves the Job into the 2093 'aborted' state. 2095 3.1.2.3.9 Destroying the Job after completion 2097 Once the Job moves to the 'completed', 'aborted', or 'canceled' state, 2098 it is an implementation decision as to when to destroy the Job object 2100 Expires November 30, 2000 2101 and release all associated resources. Once the Job has been destroyed, 2102 the Printer would return either the "client-error-not-found" or "client- 2103 error-gone" status codes for operations directed at that Job. 2105 Note: the Printer object SHOULD NOT re-use a "job-uri" or "job-id" 2106 value for a sufficiently long time after a job has been destroyed, so 2107 that stale references kept by clients are less likely to access the 2108 wrong (newer) job. 2110 3.1.2.3.10 Interaction with "ipp-attribute-fidelity" 2112 Some Printer object implementations may support "ipp-attribute-fidelity" 2113 set to 'true' and "pdl-override-supported" set to 'attempted' and yet 2114 still not be able to realize exactly what the client specifies in the 2115 create request. This is due to legacy decisions and assumptions that 2116 have been made about the role of job instructions embedded within the 2117 document data and external job instructions that accompany the document 2118 data and how to handle conflicts between such instructions. The 2119 inability to be 100% precise about how a given implementation will 2120 behave is also compounded by the fact that the two special attributes, 2121 "ipp-attribute-fidelity" and "pdl-"override-supported", apply to the 2122 whole job rather than specific values for each attribute. For example, 2123 some implementations may be able to override almost all Job Template 2124 attributes except for "number-up". Character Sets, natural languages, 2125 and internationalization 2127 This section discusses character set support, natural language support 2128 and internationalization. 2130 3.1.2.3.11 Character set code conversion support 2132 IPP clients and IPP objects are REQUIRED to support UTF-8. They MAY 2133 support additional charsets. It is RECOMMENDED that an IPP object also 2134 support US-ASCII, since many clients support US-ASCII, and indicate that 2135 UTF-8 and US-ASCII are supported by populating the Printer's "charset- 2136 supported" with 'utf-8' and 'us-ascii' values. An IPP object is 2137 required to code covert with as little loss as possible between the 2138 charsets that it supports, as indicated in the Printer's "charsets- 2139 supported" attribute. 2141 How should the server handle the situation where the "attributes- 2142 charset" of the response itself is "us-ascii", but one or more 2143 attributes in that response is in the "utf-8" format? 2145 Expires November 30, 2000 2146 Example: Consider a case where a client sends a Print-Job request with 2147 "utf-8" as the value of "attributes-charset" and with the "job-name" 2148 attribute supplied. Later another client submits a Get-Job-Attribute or 2149 Get-Jobs request. This second request contains the "attributes-charset" 2150 with value "us-ascii" and "requested-attributes" attribute with exactly 2151 one value "job-name". 2153 According to the IPP-Mod document (section 3.1.4.2), the value of the 2154 "attributes-charset" for the response of the second request must be "us- 2155 ascii" since that is the charset specified in the request. The "job- 2156 name" value, however, is in "utf-8" format. Should the request be 2157 rejected even though both "utf-8" and "us-ascii" charsets are supported 2158 by the server? or should the "job-name" value be converted to "us-ascii" 2159 and return "successful-ok-conflicting-attributes" (0x0002) as the 2160 status code? 2162 Answer: An IPP object that supports both utf-8 (REQUIRED) and us-ascii, 2163 the second paragraph of section 3.1.4.2 applies so that the IPP object 2164 MUST accept the request, perform code set conversion between these two 2165 charsets with "the highest fidelity possible" and return 'successful- 2166 ok', rather than a warning 'successful-ok-conflicting-attributes, or an 2167 error. The printer will do the best it can to convert between each of 2168 the character sets that it supports--even if that means providing a 2169 string of question marks because none of the characters are 2170 representable in US ASCII. If it can't perform such conversion, it MUST 2171 NOT advertise us-ascii as a value of its "attributes-charset-supported" 2172 and MUST reject any request that requests 'us-ascii'. 2174 One IPP object implementation strategy is to convert all request text 2175 and name values to a Unicode internal representation. This is 16-bit 2176 and virtually universal. Then convert to the specified operation 2177 attributes-charset on output. 2179 Also it would be smarter for a client to ask for 'utf-8', rather than 2180 'us-ascii' and throw away characters that it doesn't understand, rather 2181 than depending on the code conversion of the IPP object. 2183 3.1.2.3.12 What charset to return when an unsupported charset is 2184 requested (Issue 1.19)? 2186 Section 3.1.4.1 Request Operation attributes was clarified in November 2187 1998 as follows: 2189 All clients and IPP objects MUST support the 'utf-8' charset [RFC2044] 2190 and MAY support additional charsets provided that they are registered 2191 with IANA [IANA-CS]. If the Printer object does not support the client 2192 supplied charset value, the Printer object MUST reject the request, set 2194 Expires November 30, 2000 2195 the "attributes-charset" to 'utf-8' in the response, and return the 2196 'client-error-charset-not-supported' status code and any 'text' or 2197 'name' attributes using the 'utf-8' charset. 2199 Since the client and IPP object MUST support UTF-8, returning any text 2200 or name attributes in UTF-8 when the client requests a charset that is 2201 not supported should allow the client to display the text or name. 2203 Since such an error is a client error, rather than a user error, the 2204 client should check the status code first so that it can avoid 2205 displaying any other returned 'text' and 'name' attributes that are not 2206 in the charset requested. 2208 Furthermore, [ipp-mod] section 14.1.4.14 client-error-charset-not- 2209 supported (0x040D) was clarified in November 1998 as follows: 2211 For any operation, if the IPP Printer does not support the charset 2212 supplied by the client in the "attributes-charset" operation attribute, 2213 the Printer MUST reject the operation and return this status and any 2214 'text' or 'name' attributes using the 'utf-8' charset (see Section 2215 3.1.4.1). 2217 3.1.2.3.13 Natural Language Override (NLO) 2219 The 'text' and 'name' attributes each have two forms. One has an 2220 implicit natural language, and the other has an explicit natural 2221 language. The 'textWithoutLanguage' and 'textWithLanguage' are the two 2222 'text' forms. The 'nameWithoutLanguage" and 'nameWithLanguage are the 2223 two 'name' forms. If a receiver (IPP object or IPP client) supports an 2224 attribute with attribute syntax 'text', it MUST support both forms in a 2225 request and a response. A sender (IPP client or IPP object) MAY send 2226 either form for any such attribute. When a sender sends a 2227 WithoutLanguage form, the implicit natural language is specified in the 2228 "attributes-natural-language" operation attribute, which all senders 2229 MUST include in every request and response. 2231 When a sender sends a WithLanguage form, it MAY be different from the 2232 implicit natural language supplied by the sender or it MAY be the same. 2233 The receiver MUST treat either form equivalently. 2235 There is an implementation decision for senders, whether to always send 2236 the WithLanguage forms or use the WithoutLanguage form when the 2237 attribute's natural language is the same as the request or response. 2238 The former approach makes the sender implementation simpler. The latter 2239 approach is more efficient on the wire and allows inter-working with 2240 non-conforming receivers that fail to support the WithLanguage forms. 2242 Expires November 30, 2000 2243 As each approach have advantages, the choice is completely up to the 2244 implementer of the sender. 2246 Furthermore, when a client receives a 'text' or 'name' job attribute 2247 that it had previously supplied, that client MUST NOT expect to see the 2248 attribute in the same form, i.e., in the same WithoutLanguage or 2249 WithLanguage form as the client supplied when it created the job. The 2250 IPP object is free to transform the attribute from the WithLanguage form 2251 to the WithoutLanguage form and vice versa, as long as the natural 2252 language is preserved. However, in order to meet this latter 2253 requirement, it is usually simpler for the IPP object implementation to 2254 store the natural language explicitly with the attribute value, i.e., to 2255 store using an internal representation that resembles the WithLanguage 2256 form. 2258 The IPP Printer MUST copy the natural language of a job, i.e., the value 2259 of the "attributes-natural-language" operation attribute supplied by the 2260 client in the create operation, to the Job object as a Job Description 2261 attribute, so that a client is able to query it. In returning a Get- 2262 Job-Attributes response, the IPP object MAY return one of three natural 2263 language values in the response's "attributes-natural-language" 2264 operation attribute: (1) that requested by the requester, (2) the 2265 natural language of the job, or (3) the configured natural language of 2266 the IPP Printer, if the requested language is not supported by the IPP 2267 Printer. 2269 This "attributes-natural-language" Job Description attribute is useful 2270 for an IPP object implementation that prints start sheets in the 2271 language of the user who submitted the job. This same Job Description 2272 attribute is useful to a multi-lingual operator who has to communicate 2273 with different job submitters in different natural languages. This same 2274 Job Description attribute is expected to be used in the future to 2275 generate notification messages in the natural language of the job 2276 submitter. 2278 Early drafts of [IPP-MOD] contained a job-level natural language 2279 override (NLO) for the Get-Jobs response. A job-level (NLO) is an 2280 (unrequested) Job Attribute which then specified the implicit natural 2281 language for any other WithoutLanguage job attributes returned in the 2282 response for that job. Interoperability testing of early 2283 implementations showed that no one was implementing the job-level NLO in 2284 Get-Job responses. So the job-level NLO was eliminated from the Get- 2285 Jobs response. This simplification makes all requests and responses 2286 consistent in that the implicit natural language for any WithoutLanguage 2287 'text' or 'name' form is always supplied in the request's or response's 2288 "attributes-natural-language" operation attribute. 2290 Expires November 30, 2000 2291 3.1.3 Status codes returned by operation 2293 This section corresponds to [IPP-MOD] section 3.1.6 "Operation Response 2294 Status Codes and Status Messages". This section lists all status codes 2295 once in the first operation (Print-Job). Then it lists the status codes 2296 that are different or specialized for subsequent operations under each 2297 operation. 2299 3.1.3.1 Printer Operations 2301 3.1.3.1.1 Print-Job 2303 The Printer object MUST return one of the following "status-code" values 2304 for the indicated reason. Whether all of the document data has been 2305 accepted or not before returning the success or error response depends 2306 on implementation. See Section 13 in [IPP-MOD] for a more complete 2307 description of each status code. 2309 For the following success status codes, the Job object has been created 2310 and the "job-id", and "job-uri" assigned and returned in the response: 2312 successful-ok: no request attributes were substituted or ignored. 2313 successful-ok-ignored-or-substituted-attributes: some supplied (1) 2314 attributes were ignored or (2) unsupported attribute syntaxes or 2315 values were substituted with supported values or were ignored. 2316 Unsupported attributes, attribute syntax's, or values MUST be 2317 returned in the Unsupported Attributes group of the response. 2318 successful-ok-conflicting-attributes: some supplied attribute values 2319 conflicted with the values of other supplied attributes and were 2320 either substituted or ignored. Attributes or values which conflict 2321 with other attributes and have been substituted or ignored MUST be 2322 returned in the Unsupported Attributes group of the response as 2323 supplied by the client. 2325 [ipp-mod] section 3.1.6 Operation Status Codes and Messages states: 2327 If the Printer object supports the "status-message" operation attribute, 2328 it SHOULD use the REQUIRED 'utf-8' charset to return a status message 2329 for the following error status codes (see section 13 in [IPP-MOD]): 2330 'client-error-bad-request', 'client-error-charset-not-supported', 2331 'server-error-internal-error', 'server-error-operation-not-supported', 2332 and 'server-error-version-not-supported'. In this case, it MUST set the 2333 value of the "attributes-charset" operation attribute to 'utf-8' in the 2334 error response. 2336 Expires November 30, 2000 2337 For the following error status codes, no job is created and no "job-id" 2338 or "job-uri" is returned: 2340 client-error-bad-request: The request syntax does not conform to the 2341 specification. 2342 client-error-forbidden: The request is being refused for 2343 authorization or authentication reasons. The implementation 2344 security policy is to not reveal whether the failure is one of 2345 authentication or authorization. 2346 client-error-not-authenticated: Either the request requires 2347 authentication information to be supplied or the authentication 2348 information is not sufficient for authorization. 2349 client-error-not-authorized: The requester is not authorized to 2350 perform the request on the target object. 2351 client-error-not-possible: The request cannot be carried out because 2352 of the state of the system. See also 'server-error-not-accepting- 2353 jobs' status code, which MUST take precedence if the Printer 2354 object's "printer-accepting-jobs" attribute is 'false'. 2355 client-error-timeout: not applicable. 2356 client-error-not-found: the target object does not exist. 2357 client-error-gone: the target object no longer exists and no 2358 forwarding address is known. 2359 client-error-request-entity-too-large: the size of the request 2360 and/or print data exceeds the capacity of the IPP Printer to 2361 process it. 2362 client-error-request-value-too-long: the size of request variable 2363 length attribute values, such as 'text' and 'name' attribute 2364 syntax's, exceed the maximum length specified in [IPP-MOD] for the 2365 attribute and MUST be returned in the Unsupported Attributes Group. 2366 client-error-document-format-not-supported: the document format 2367 supplied is not supported. The "document-format" attribute with 2368 the unsupported value MUST be returned in the Unsupported 2369 Attributes Group. This error SHOULD take precedence over any other 2370 'xxx-not-supported' error, except 'client-error-charset-not- 2371 supported'. 2372 client-error-attributes-or-values-not-supported: one or more 2373 supplied attributes, attribute syntax's, or values are not 2374 supported and the client supplied the "ipp-attributes-fidelity" 2375 operation attribute with a 'true' value. They MUST be returned in 2376 the Unsupported Attributes Group as explained below. 2377 client-error-uri-scheme-not-supported: not applicable. 2378 client-error-charset-not-supported: the charset supplied in the 2379 "attributes-charset" operation attribute is not supported. The 2380 Printer's "configured-charset" MUST be returned in the response as 2381 the value of the "attributes-charset" operation attribute and used 2382 for any 'text' and 'name' attributes returned in the error 2383 response. This error SHOULD take precedence over any other error, 2385 Expires November 30, 2000 2386 unless the request syntax is so bad that the client's supplied 2387 "attributes-charset" cannot be determined. 2388 client-error-conflicting-attributes: one or more supplied attribute 2389 values conflicted with each other and the client supplied the "ipp- 2390 attributes-fidelity" operation attribute with a 'true' value. They 2391 MUST be returned in the Unsupported Attributes Group as explained 2392 below. 2393 server-error-internal-error: an unexpected condition prevents the 2394 request from being fulfilled. 2395 server-error-operation-not-supported: not applicable (since Print- 2396 Job is REQUIRED). 2397 server-error-service-unavailable: the service is temporarily 2398 overloaded. 2399 server-error-version-not-supported: the version in the request is 2400 not supported. The "closest" version number supported MUST be 2401 returned in the response. 2402 server-error-device-error: a device error occurred while receiving 2403 or spooling the request or document data or the IPP Printer object 2404 can only accept one job at a time. 2405 server-error-temporary-error: a temporary error such as a buffer 2406 full write error, a memory overflow, or a disk full condition 2407 occurred while receiving the request and/or the document data. 2408 server-error-not-accepting-jobs: the Printer object's "printer-is- 2409 not-accepting-jobs" attribute is 'false'. 2410 server-error-busy: the Printer is too busy processing jobs to accept 2411 another job at this time. 2412 server-error-job-canceled: the job has been canceled by an operator 2413 or the system while the client was transmitting the document data. 2415 3.1.3.1.2 Print-URI 2417 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2418 Job Response are applicable to Print-URI with the following 2419 specializations and differences. See Section 14 for a more complete 2420 description of each status code. 2422 client-error-uri-scheme-not-supported: the URI scheme supplied in 2423 the "document-uri" operation attribute is not supported and is 2424 returned in the Unsupported Attributes group. 2425 server-error-operation-not-supported: the Print-URI operation is not 2426 supported. 2428 3.1.3.1.3 Validate-Job 2430 Expires November 30, 2000 2431 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2432 Job Response are applicable to Validate-Job. See Section 13 in [IPP- 2433 MOD] for a more complete description of each status code. 2435 3.1.3.1.4 Create-Job 2437 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2438 Job Response are applicable to Create-Job with the following 2439 specializations and differences. See Section 13 in [IPP-MOD] for a more 2440 complete description of each status code. 2442 server-error-operation-not-supported: the Create-Job operation is 2443 not supported. 2444 client-error-multiple-document-jobs-not-supported: while the Create- 2445 Job and Send-Document operations are supported, this implementation 2446 doesn't support more than one document with data. 2448 3.1.3.1.5 Get-Printer-Attributes 2450 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2451 Job Response are applicable to the Get-Printer-Attributes operation with 2452 the following specialization's and differences. See Section 13 in 2453 [IPP-MOD] for a more complete description of each status code. 2455 For the following success status codes, the requested attributes are 2456 returned in Group 3 in the response: 2458 successful-ok: no request attributes were substituted or ignored 2459 (same as Print-Job) and no requested attributes were unsupported. 2460 successful-ok-ignored-or-substituted-attributes: same as Print-Job, 2461 except the "requested-attributes" operation attribute MAY, but NEED 2462 NOT, be returned with the unsupported values. 2463 successful-ok-conflicting-attributes: same as Print-Job. 2465 For the error status codes, Group 3 is returned containing no attributes 2466 or is not returned at all: 2468 client-error-not-possible: Same as Print-Job, in addition the 2469 Printer object is not accepting any requests. 2470 client-error-request-entity-too-large: same as Print-job, except 2471 that no print data is involved. 2472 client-error-attributes-or-values-not-supported: not applicable, 2473 since unsupported operation attributes MUST be ignored and 2474 'successful-ok-ignored-or-substituted-attributes' returned. 2475 client-error-conflicting-attributes: same as Print-Job, except that 2476 "ipp-attribute-fidelity" is not involved. 2477 server-error-operation-not-supported: not applicable (since Get- 2478 Printer-Attributes is REQUIRED). 2480 Expires November 30, 2000 2482 server-error-device-error: same as Print-Job, except that no 2483 document data is involved. 2484 server-error-temporary-error: same as Print-Job, except that no 2485 document data is involved. 2486 server-error-not-accepting-jobs: not applicable.. 2487 server-error-busy: same as Print-Job, except the IPP object is too 2488 busy to accept even query requests. 2489 server-error-job-canceled: not applicable.. 2491 3.1.3.1.6 Get-Jobs 2493 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2494 Job Response are applicable to the Get-Jobs operation with the following 2495 specialization's and differences. See Section 13 in [IPP-MOD] for a 2496 more complete description of each status code. 2498 For the following success status codes, the requested attributes are 2499 returned in Group 3 in the response: 2501 successful-ok: no request attributes were substituted or ignored 2502 (same as Print-Job) and no requested attributes were unsupported. 2503 successful-ok-ignored-or-substituted-attributes: same as Print-Job, 2504 except the "requested-attributes" operation attribute MAY, but NEED 2505 NOT, be returned with the unsupported values. 2506 successful-ok-conflicting-attributes: same as Print-Job. 2508 For any error status codes, Group 3 is returned containing no attributes 2509 or is not returned at all. The following brief error status code 2510 descriptions contain unique information for use with Get-Jobs operation. 2511 See section 14 for the other error status codes that apply uniformly to 2512 all operations: 2514 client-error-not-possible: Same as Print-Job, in addition the 2515 Printer object is not accepting any requests. 2516 client-error-request-entity-too-large: same as Print-job, except 2517 that no print data is involved. 2518 client-error-document-format-not-supported: not applicable. 2519 client-error-attributes-or-values-not-supported: not applicable, 2520 since unsupported operation attributes MUST be ignored and 2521 'successful-ok-ignored-or-substituted-attributes' returned. 2522 client-error-conflicting-attributes: same as Print-Job, except that 2523 "ipp-attribute-fidelity" is not involved. 2524 server-error-operation-not-supported: not applicable (since Get-Jobs 2525 is REQUIRED). 2526 server-error-device-error: same as Print-Job, except that no 2527 document data is involved. 2528 server-error-temporary-error: same as Print-Job, except that no 2529 document data is involved. 2530 server-error-not-accepting-jobs: not applicable. 2532 Expires November 30, 2000 2533 server-error-job-canceled: not applicable. 2535 3.1.3.1.7 Pause-Printer 2537 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2538 Job Response are applicable to Pause-Printer with the following 2539 specializations and differences. See Section 13 in [IPP-MOD] for a more 2540 complete description of each status code. 2542 For the following success status codes, the Printer object is being 2543 stopped from scheduling jobs on all its devices. 2545 successful-ok: no request attributes were substituted or ignored 2546 (same as Print-Job). 2547 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2548 successful-ok-conflicting-attributes: same as Print-Job. 2550 For any of the error status codes, the Printer object has not been 2551 stopped from scheduling jobs on all its devices. 2553 client-error-not-possible: not applicable. 2554 client-error-not-found: the target Printer object does not exist. 2555 client-error-gone: the target Printer object no longer exists and no 2556 forwarding address is known. 2557 client-error-request-entity-too-large: same as Print-Job, except no 2558 document data is involved. 2559 client-error-document-format-not-supported: not applicable. 2560 client-error-conflicting-attributes: same as Print-Job, except that 2561 the Printer's "printer-is-accepting-jobs" attribute is not 2562 involved. 2563 server-error-operation-not-supported: the Pause-Printer operation is 2564 not supported. 2565 server-error-device-error: not applicable. 2566 server-error-temporary-error: same as Print-Job, except no document 2567 data is involved. 2568 server-error-not-accepting-jobs: not applicable. 2569 server-error-job-canceled: not applicable. 2571 3.1.3.1.8 Resume-Printer 2573 All of the Print-Job status code descriptions in Section 3.1.3.1.1 2574 Print-Job Response with the specialization's described for Pause-Printer 2575 are applicable to Resume-Printer. See Section 13 in [IPP-MOD] for a 2576 more complete description of each status code. 2578 For the following success status codes, the Printer object resumes 2579 scheduling jobs on all its devices. 2581 Expires November 30, 2000 2582 successful-ok: no request attributes were substituted or ignored 2583 (same as Print-Job). 2584 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2585 successful-ok-conflicting-attributes: same as Print-Job. 2587 For any of the error status codes, the Printer object does not resume 2588 scheduling jobs. 2590 server-error-operation-not-supported: the Resume-Printer operation is 2591 not supported. 2593 3.1.3.1.8.1 What about Printers unable to change state due to an error 2594 condition? 2596 If, in case, the IPP printer is unable to change its state due to some 2597 problem with the actual printer device (say, it is shut down or there is 2598 a media-jam as indicated in [ipp-mod]), what should be the result of the 2599 "Resume-printer" operation? Should it still change the 'printer-state- 2600 reasons' and return success or should it fail ? 2602 The 'resume-printer' operation must clear the 'paused' or 'moving-to- 2603 paused' 'printer-state-message'. The operation must return a 2604 'successful-ok' status code. 2606 3.1.3.1.8.2 How is 'printer-state' handled on Resume-Printer? 2608 If "Resume-Printer" succeeds, what should be the value of 'Printer- 2609 state' and who should take care of the 'Printer-state' later on ? 2611 The "Resume-Printer" operation may change the "printer-state-reasons" 2612 value. 2614 The "printer-state" will change to one of three states: 2616 1. 'idle' - no additional jobs and no error conditions present 2618 2. 'processing' - job available and no error conditions present 2620 3. current state (i.e. no change) an error condition is present (e.g. 2621 media jam) 2623 In the third case the 'printer-state-reason' will be cleared by 2624 automata when it detects the error condition no longer exists. The 2625 'printer-state' will move to 'idle' or 'processing' when conditions 2626 permit. (i.e. no more error conditions) 2628 Expires November 30, 2000 2629 3.1.3.1.9 Purge-Printer 2631 All of the Print-Job status code descriptions in Section 3.1.3.1.1 2632 Print-Job Response with the specialization's described for Pause-Printer 2633 are applicable to Purge-Printer. See Section 13 in [IPP-MOD] for a more 2634 complete description of each status code. 2636 For the following success status codes, the Printer object purges all 2637 it's jobs. 2639 successful-ok: no request attributes were substituted or ignored 2640 (same as Print-Job). 2641 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2642 successful-ok-conflicting-attributes: same as Print-Job. 2644 For any of the error status codes, the Printer object does not purge any 2645 jobs. 2647 server-error-operation-not-supported: the Purge-Printer operation is 2648 not supported. 2650 3.1.3.2 Job Operations 2652 3.1.3.2.1 Send-Document 2654 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2655 Job Response are applicable to the Get-Printer-Attributes operation with 2656 the following specialization's and differences. See Section 13 in 2657 [IPP-MOD] for a more complete description of each status code. 2659 For the following success status codes, the document has been added to 2660 the specified Job object and the job's "number-of-documents" attribute 2661 has been incremented: 2663 successful-ok: no request attributes were substituted or ignored 2664 (same as Print-Job). 2665 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2666 successful-ok-conflicting-attributes: same as Print-Job. 2668 For the error status codes, no document has been added to the Job object 2669 and the job's "number-of-documents" attribute has not been incremented: 2671 client-error-not-possible: Same as Print-Job, except that the 2672 Printer's "printer-is-accepting-jobs" attribute is not involved, so 2673 that the client is able to finish submitting a job that was created 2674 with a Create-Job operation after this attribute has been set to 2675 'true'. Another condition is that the state of the job precludes 2676 Send-Document, i.e., the job has already been closed out by the 2677 client. However, if the IPP Printer closed out the job due to 2679 Expires November 30, 2000 2680 timeout, the 'client-error-timeout' error status SHOULD be 2681 returned instead. 2682 client-error-timeout: This request was sent after the Printer closed 2683 the job, because it has not received a Send-Document or Send-URI 2684 operation within the Printer's "multiple-operation-time-out" period 2685 . 2686 client-error-request-entity-too-large: same as Print-Job. 2687 client-error-conflicting-attributes: same as Print-Job, except that 2688 "ipp-attributes-fidelity" operation attribute is not involved.. 2689 server-error-operation-not-supported: the Send-Document request is 2690 not supported. 2691 server-error-not-accepting-jobs: not applicable. 2692 server-error-job-canceled: the job has been canceled by an operator 2693 or the system while the client was transmitting the data. 2695 3.1.3.2.2 Send-URI 2697 All of the Print-Job status code descriptions in Section 3.1.3.1.1 2698 Print-Job Response with the specialization's described for Send-Document 2699 are applicable to Send-URI. See Section 13 in [IPP-MOD] for a more 2700 complete description of each status code. 2702 client-error-uri-scheme-not-supported: the URI scheme supplied in 2703 the "document-uri" operation attribute is not supported and the 2704 "document-uri" attribute MUST be returned in the Unsupported 2705 Attributes group. 2706 server-error-operation-not-supported: the Send-URI operation is not 2707 supported. 2709 3.1.3.2.3 Cancel-Job 2711 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2712 Job Response are applicable to Cancel-Job with the following 2713 specializations and differences. See Section 13 in [IPP-MOD] for a more 2714 complete description of each status code. 2716 For the following success status codes, the Job object is being canceled 2717 or has been canceled: 2719 successful-ok: no request attributes were substituted or ignored 2720 (same as Print-Job). 2721 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2722 successful-ok-conflicting-attributes: same as Print-Job. 2724 For any of the error status codes, the Job object has not been canceled 2725 or was previously canceled. 2727 Expires November 30, 2000 2728 client-error-not-possible: The request cannot be carried out because 2729 of the state of the Job object ('completed', 'canceled', or 2730 'aborted') or the state of the system. 2731 client-error-not-found: the target Printer and/or Job object does 2732 not exist. 2733 client-error-gone: the target Printer and/or Job object no longer 2734 exists and no forwarding address is known. 2735 client-error-request-entity-too-large: same as Print-Job, except no 2736 document data is involved. 2737 client-error-document-format-not-supported: not applicable. 2738 client-error-attributes-or-values-not-supported: not applicable, 2739 since unsupported operation attributes and values MUST be ignored. 2740 client-error-conflicting-attributes: same as Print-Job, except that 2741 the Printer's "printer-is-accepting-jobs" attribute is not 2742 involved. 2743 server-error-operation-not-supported: not applicable (Cancel-Job is 2744 REQUIRED). 2745 server-error-device-error: same as Print-Job, except no document 2746 data is involved. 2747 server-error-temporary-error: same as Print-Job, except no document 2748 data is involved. 2749 server-error-not-accepting-jobs: not applicable.. 2750 server-error-job-canceled: not applicable. 2752 3.1.3.2.4 Get-Job-Attributes 2754 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2755 Job Response are applicable to Get-Job-Attributes with the following 2756 specializations and differences. See Section 13 in [IPP-MOD] for a more 2757 complete description of each status code. 2759 For the following success status codes, the requested attributes are 2760 returned in Group 3 in the response: 2762 successful-ok: no request attributes were substituted or ignored 2763 (same as Print-Job) and no requested attributes were unsupported. 2764 successful-ok-ignored-or-substituted-attributes: same as Print-Job, 2765 except the "requested-attributes" operation attribute MAY, but NEED 2766 NOT, be returned with the unsupported values. 2767 successful-ok-conflicting-attributes: same as Print-Job. 2769 For the error status codes, Group 3 is returned containing no attributes 2770 or is not returned at all. 2772 client-error-not-possible: Same as Print-Job, in addition the 2773 Printer object is not accepting any requests. 2774 client-error-document-format-not-supported: not applicable. 2775 client-error-attributes-or-values-not-supported: not applicable. 2776 client-error-uri-scheme-not-supported: not applicable. 2778 Expires November 30, 2000 2779 client-error-conflicting-attributes: not applicable 2780 server-error-operation-not-supported: not applicable (since Get-Job- 2781 Attributes is REQUIRED). 2782 server-error-device-error: same as Print-Job, except no document 2783 data is involved. 2784 server-error-temporary-error: sane as Print-Job, except no document 2785 data is involved.. 2786 server-error-not-accepting-jobs: not applicable. 2787 server-error-job-canceled: not applicable. 2789 3.1.3.2.5 Hold-Job 2791 All of the Print-Job status codes described in Section 3.1.3.1.1 Print- 2792 Job Response are applicable to Hold-Job with the following 2793 specializations and differences. See Section 13 in [IPP-MOD] for a more 2794 complete description of each status code. 2796 For the following success status codes, the Job object is being held or 2797 has been held: 2799 successful-ok: no request attributes were substituted or ignored 2800 (same as Print-Job). 2801 successful-ok-ignored-or-substituted-attributes: same as Print-Job. 2802 successful-ok-conflicting-attributes: same as Print-Job. 2804 For any of the error status codes, the Job object has not been held or 2805 was previously held. 2807 client-error-not-possible: The request cannot be carried out because 2808 of the state of the Job object ('completed', 'canceled', or 2809 'aborted') or the state of the system. 2810 client-error-not-found: the target Printer and/or Job object does 2811 not exist. 2812 client-error-gone: the target Printer and/or Job object no longer 2813 exists and no forwarding address is known. 2814 client-error-request-entity-too-large: same as Print-Job, except no 2815 document data is involved. 2816 client-error-document-format-not-supported: not applicable. 2817 client-error-conflicting-attributes: same as Print-Job, except that 2818 the Printer's "printer-is-accepting-jobs" attribute is not 2819 involved. 2820 server-error-operation-not-supported: the Hold-Job operation is not 2821 supported. 2822 server-error-device-error: not applicable. 2823 server-error-temporary-error: same as Print-Job, except no document 2824 data is involved. 2825 server-error-not-accepting-jobs: not applicable. 2826 server-error-job-canceled: not applicable. 2828 Expires November 30, 2000 2830 3.1.3.2.6 Release-Job 2832 All of the Print-Job status code descriptions in Section 3.1.3.1.1 2833 Print-Job Response with the specialization's described for Hold-Job are 2834 applicable to Release-Job. See Section 13 in [IPP-MOD] for a more 2835 complete description of each status code. 2837 server-error-operation-not-supported: the Release-Job operation is 2838 not supported. 2840 3.1.3.2.7 Restart-Job 2842 All of the Print-Job status code descriptions in Section 3.1.3.1.1 2843 Print-Job Response with the specialization's described for Hold-Job are 2844 applicable to Restart-Job. See Section 13 in [IPP-MOD] for a more 2845 complete description of each status code. 2847 server-error-operation-not-supported: the Restart-Job operation is 2848 not supported. 2850 3.1.3.2.7.1 Can documents be added to a restarted job? 2852 Assume I give a Create-Job request along with a set of 5 documents . All 2853 the documents get printed and the job state is moved to completed . I 2854 issue a Restart-Job request on the job. Now the issue is that, if I try 2855 to add new documents to the restarted job, will the IPP Server permit 2856 me to do so or return "client-error-not-possible " and again print 2857 those 5 jobs? 2859 A job can not move to the 'completed' state until all the documents have 2860 been processed. The 'last-document' flag indicates when the last 2861 document for a job is being sent from the client. This is the semantic 2862 equivalent of closing a job. No documents may be added once a job is 2863 closed. Section 3.3.7 of the IPP/1.1 model states "The job is moved to 2864 the 'pending' job state and restarts the beginning on the same IPP 2865 Printer object with the same attribute values." 'number-of-documents' is 2866 a job attribute. 2868 3.1.4 Returning unsupported attributes in Get-Xxxx responses (Issue 2869 1.18) 2871 In the Get-Printer-Attributes, Get-Jobs, or Get-Job-Attributes 2872 responses, the client cannot depend on getting unsupported attributes 2873 returned in the Unsupported Attributes group that the client requested, 2875 Expires November 30, 2000 2876 but are not supported by the IPP object. However, such unsupported 2877 requested attributes will not be returned in the Job Attributes or 2878 Printer Attributes group (since they are unsupported). Furthermore, the 2879 IPP object is REQUIRED to return the 'successful-ok-ignored-or- 2880 substituted-attributes' status code, so that the client knows that not 2881 all that was requested has been returned. 2883 3.1.5 Sending empty attribute groups 2885 The [IPP-MOD] and [IPP-PRO] specifications RECOMMEND that a sender not 2886 send an empty attribute group in a request or a response. However, they 2887 REQUIRE a receiver to accept an empty attribute group as equivalent to 2888 the omission of that group. So a client SHOULD omit the Job Template 2889 Attributes group entirely in a create operation that is not supplying 2890 any Job Template attributes. Similarly, an IPP object SHOULD omit an 2891 empty Unsupported Attributes group if there are no unsupported 2892 attributes to be returned in a response. 2894 The [IPP-PRO] specification REQUIRES a receiver to be able to receive 2895 either an empty attribute group or an omitted attribute group and treat 2896 them equivalently. The term "receiver" means an IPP object for a 2897 request and a client for a response. The term "sender' means a client 2898 for a request and an IPP object for a response. 2900 There is an exception to the rule for Get-Jobs when there are no 2901 attributes to be returned. [IPP-PRO] contains the following paragraph: 2903 The syntax allows an xxx-attributes-tag to be present when the xxx- 2904 attribute-sequence that follows is empty. The syntax is defined this way 2905 to allow for the response of Get-Jobs where no attributes are returned 2906 for some job-objects. Although it is RECOMMENDED that the sender not 2907 send an xxx-attributes-tag if there are no attributes (except in the 2908 Get-Jobs response just mentioned), the receiver MUST be able to decode 2909 such syntax. 2911 3.2 Printer Operations 2913 3.2.1 Print-Job operation 2915 3.2.1.1 Flow controlling the data portion of a Print-Job request 2916 (Issue 1.22) 2918 A paused printer, or one that is stopped due to paper out or jam or 2919 spool space full or buffer space full, may flow control the data of a 2920 Print-Job operation (at the TCP/IP layer), so that the client is not 2922 Expires November 30, 2000 2923 able to send all the document data. Consequently, the Printer will not 2924 return a response until the condition is changed. 2926 The Printer should not return a Print-Job response with an error code in 2927 any of these conditions, since either the printer will be resumed and/or 2928 the condition will be freed either by human intervention or as jobs 2929 print. 2931 In writing test scripts to test IPP Printers, the script must also be 2932 written not to expect a response, if the printer has been paused, until 2933 the printer is resumed, in order to work with all possible 2934 implementations. 2936 3.2.1.2 Returning job-state in Print-Job response (Issue 1.30) 2938 An IPP client submits a small job via Print-Job. By the time the IPP 2939 printer/print server is putting together a response to the operation, 2940 the job has finished printing and been removed as an object from the 2941 print system. What should the job-state be in the response? 2943 The Model suggests that the Printer return a response before it even 2944 accepts the document content. The Job Object Attributes are returned 2945 only if the IPP object returns one of the success status codes. Then the 2946 job-state would always be "pending" or "pending-held". 2948 This issue comes up for the implementation of an IPP Printer object as a 2949 server that forwards jobs to devices that do not provide job status back 2950 to the server. If the server is reasonably certain that the job 2951 completed successfully, then it should return the job-state as 2952 'completed'. Also the server can keep the job in its "job history" long 2953 after the job is no longer in the device. Then a user could query the 2954 server and see that the job was in the 'completed' state and completed 2955 as specified by the jobs "time-at-completed" time, which would be the 2956 same as the server submitted the job to the device. 2958 An alternative is for the server to respond to the client before or 2959 while sending the job to the device, instead of waiting until the server 2960 has finished sending the job to the device. In this case, the server 2961 can return the job's state as 'pending' with the 'job-outgoing' value in 2962 the job's "job-state-reasons" attribute. 2964 If the server doesn't know for sure whether the job completed 2965 successfully (or at all), it could return the (out-of-band) 'unknown' 2966 value. 2968 On the other hand, if the server is able to query the device and/or 2969 setup some sort of event notification that the device initiates when the 2970 job makes state transitions, then the server can return the current job 2972 Expires November 30, 2000 2973 state in the Print-Job response and in subsequent queries because the 2974 server knows what the job state is in the device (or can query the 2975 device). 2977 All of these alternatives depend on implementation of the server and the 2978 device. 2980 3.2.2 Get-Printer-Attributes operation 2982 If a Printer supports the "printer-make-and-model" attribute and returns 2983 the .INF file model name of the printer in that attribute, the Microsoft 2984 client will automatically install the correct driver (if available). 2986 Clients which poll periodically for printer status or queued-job-count 2987 should use the "requested-attributes" operation attribute to limit the 2988 scope of the query in order to save Printer and network resources. 2990 3.2.3 Get-Jobs operation 2992 3.2.3.1 Get-Jobs, my-jobs='true', and 'requesting-user-name' (Issue 2993 1.39)? 2995 In [IPP-MOD] section 3.2.6.1 'Get-Jobs Request', if the attribute 'my- 2996 jobs' is present and set to TRUE, MUST the 'requesting-user-name' 2997 attribute be there too, and if it's not present what should the IPP 2998 printer do? 3000 [IPP-MOD] Section 8.3 describes the various cases of "requesting-user- 3001 name" being present or not for any operation. If the client does not 3002 supply a value for "requesting-user-name", the printer MUST assume that 3003 the client is supplying some anonymous name, such as "anonymous". 3005 3.2.3.2 Why is there a "limit" attribute in the Get-Jobs operation? 3007 When using the Get-Jobs operation a client implementer might choose to 3008 limit the number of jobs that the client shows on the first screenful. 3009 For example, if its UI can only display 50 jobs, it can defend itself 3010 against a printer that would otherwise return 500 jobs, perhaps taking a 3011 long time on a slow dial-up line. The client can then go and ask for a 3012 larger number of jobs in the background, while showing the user the 3013 first 50 jobs. Since the job history is returned in reverse order, 3014 namely the most recently completed jobs are returned first, the user is 3015 most likely interested in the first jobs that are returned. Limiting the 3016 number of jobs may be especially useful for a client that is requesting 3017 'completed' jobs from a printer that keeps a long job history. Clients 3019 Expires November 30, 2000 3020 that don't mind sometimes getting very large responses, can omit the 3021 "limit" attribute in their Get-Jobs requests. 3023 3.2.4 Create-Job operation 3025 A Printer may respond to a Create-Job operation with "job-state" 3026 'pending' or 'pending-held' and " job-state-reason" 'job-data- 3027 insufficient' to indicate that operation has been accepted by the 3028 Printer, but the Printer is expecting additional document data before it 3029 can move the job into the 'processing' state. Alternatively, it may 3030 respond with "job-state" 'processing' and "job-state-reason" 'job- 3031 incoming' to indicate that the Create-Job operation has been accepted 3032 by the Printer, but the Printer is expecting additional Send-Document 3033 and/or Send-URI operations and/or is accessing/accepting document data. 3034 The second alternative is for non-spooling Printers that don't implement 3035 the 'pending' state. 3037 Should the server wait for the "last-document" operation attribute set 3038 to 'true' before starting to "process" the job? 3040 It depends on implementation. Some servers spool the entire job, 3041 including all document data, before starting to process, so such an 3042 implementation would wait for the "last-document" before starting to 3043 process the job. If the time-out occurs without the "last-document", 3044 then the server takes one of the indicated actions in section 3.3.1 in 3045 the [IPP-MOD] document. Other servers will start to process document 3046 data as soon as they have some. These are the so-called "non-spooling" 3047 printers. Currently, there isn't a way for a client to determine whether 3048 the Printer will spool all the data or will start to process (and print) 3049 as soon as it has some data. 3051 3.3 Job Operations 3053 3.3.1 Validate-Job 3055 The Validate-Job operation has been designed so that its implementation 3056 may be a part of the Print-Job operation. Therefore, requiring 3057 Validate-Job is not a burden on implementers. Also it is useful for 3058 client's to be able to count on its presence in all conformance 3059 implementations, so that the client can determine before sending a long 3060 document, whether the job will be accepted by the IPP Printer or not. 3062 3.3.2 Restart-Job 3064 Expires November 30, 2000 3065 The Restart-Job operation allows the reprocessing of a completed job. 3066 Some jobs store the document data on the printer. Jobs created using 3067 the Print-Job operation are an example. It is required that the printer 3068 retains the job data after the job has moved to a 'completed state' in 3069 order for the Restart-Job operation to succeed. 3071 Some jobs contain only a reference to the job data. A job created using 3072 the Print-URI is an example of such a job. When the Restart-Job 3073 operation is issued the job is reprocessed. The job data MUST be 3074 retrieved again to print the job. 3076 It is possible that a job fails while attempting to access the print 3077 data. When such a job is the target of a Restart-Job the Printer SHALL 3078 attempt to retrieve the job data again. 3080 4 Object Attributes 3082 4.1 Attribute Syntax's 3084 4.1.1 The 'none' value for empty sets (Issue 1.37) 3086 [IPP-MOD] states that the 'none' value should be used as the value of a 3087 1setOf when the set is empty. In most cases, sets that are potentially 3088 empty contain keywords so the keyword 'none' is used, but for the 3 3089 finishings attributes, the values are enums and thus the empty set is 3090 represented by the enum 3. Currently there are no other attributes with 3091 1setOf values, which can be empty and can contain values that are not 3092 keywords. This exception requires special code and is a potential place 3093 for bugs. It would have been better if we had chosen an out-of-band 3094 value, either "no-value" or some new value, such as 'none'. Since we 3095 didn't, implementations have to deal with the different representations 3096 of 'none', depending on the attribute syntax. 3098 4.1.2 Multi-valued attributes (Issue 1.31) 3100 What is the attribute syntax for a multi-valued attribute? Since some 3101 attributes support values in more than one data type, such as "media", 3102 "job-hold-until", and "job-sheets", IPP semantics associate the 3103 attribute syntax with each value, not with the attribute as a whole. 3104 The protocol associates the attribute syntax tag with each value. Don't 3105 be fooled, just because the attribute syntax tag comes before the 3106 attribute keyword. All attribute values after the first have a zero 3107 length attribute keyword as the indication of a subsequent value of the 3108 same attribute. 3110 Expires November 30, 2000 3111 4.1.3 Case Sensitivity in URIs (issue 1.6) 3113 IPP client and server implementations must be aware of the diverse 3114 uppercase/lowercase nature of URIs. RFC 2396 defines URL schemes and 3115 Host names as case insensitive but reminds us that the rest of the URL 3116 may well demonstrate case sensitivity. When creating URL's for fields 3117 where the choice is completely arbitrary, it is probably best to select 3118 lower case. However, this cannot be guaranteed and implementations MUST 3119 NOT rely on any fields being case-sensitive or case-insensitive in the 3120 URL beyond the URL scheme and host name fields. 3122 The reason that the IPP specification does not make any restrictions on 3123 URIs, is so that implementations of IPP may use off-the-shelf components 3124 that conform to the standards that define URIs, such as RFC 2396 and the 3125 HTTP/1.1 specifications [RFC2616]. See these specifications for rules 3126 of matching, comparison, and case-sensitivity. 3128 It is also recommended that System Administrators and implementations 3129 avoid creating URLs for different printers that differ only in their 3130 case. For example, don't have Printer1 and printer1 as two different 3131 IPP Printers. 3133 Example of equivalent URI's 3135 http://abc.com:80/~smith/home.html 3137 http://ABC.com/%7Esmith/home.html 3139 http:/ABC.com:/%7esmith/home.html 3141 Example of equivalent URI's using the IPP scheme 3143 ipp://abc.com:631/~smith/home.html 3145 ipp://ABC.com/%7Esmith/home.html 3147 http:/ABC.com:631/%7esmith/home.html 3149 The HTTP/1.1 specification [RFC2616] contains more details on comparing 3150 URLs. 3152 4.1.4 Maximum length for xxxWithLanguage and xxxWithoutLanguage 3154 The 'textWithLanguage' and 'nameWithLanguage' are compound syntaxes that 3155 have two components. The first component is the 'language' component 3156 that can contain up to 63 octets. The second component is the 'text' or 3157 'name' component. The maximum length of these are 1023 octets and 255 3159 Expires November 30, 2000 3160 octets respectively. The definition of attributes with either syntax 3161 may further restrict the length. (e.g. printer-name (name(127))) 3163 The length of the 'language' component has no effect on the allowable 3164 length of 'text' in 'textWithLanguage' or the length of 'name' in 3165 'nameWithLanguage' 3167 4.2 Job Template Attributes 3169 4.2.1 multiple-document-handling(type2 keyword) 3171 4.2.1.1 Support of multiple document jobs 3173 IPP/1.0 is silent on which of the four effects an implementation would 3174 perform if it supports Create-Job, but does not support "multiple- 3175 document-handling" or multiple documents per job. IPP/1.1 was changed 3176 so that a Printer could support Create-Job without having to support 3177 multiple document jobs. The "multiple-document-jobs-supported" 3178 (boolean) Printer description attribute was added to IPP/1.1 along with 3179 the 'server-error-multiple-document-jobs-not-supported' status code for 3180 a Printer to indicate whether or not it supports multiple document jobs, 3181 when it supports the Create-Job operation. Also IPP/1.1 was clarified 3182 that the Printer MUST support the "multiple-document-handling" (type2 3183 keyword) Job Template attribute with at least one value if the Printer 3184 supports multiple documents per job. 3186 4.3 Job Description Attributes 3188 The time-at-creation, time-at-processing, and time-at-completed 3189 attributes may be returned in integer time ticks or absolute dateTime 3190 syntax. There are various ways for a Printer to get the time of day. 3191 Some suggestions: 3193 1. A Printer can get time from an NTP timeserver if there's one 3194 reachable on the network . See RFC 1305. Also DHCP option 32 in 3195 RFC 2132 returns the IP address of the NTP server. 3197 2. Get the date and time at startup from a human operator 3199 3. Have an operator set the date and time using a web 3200 administrative interface 3202 4. Get the date and time from incoming HTTP requests, though the 3203 problems of spoofing need to be considered. Perhaps comparing 3204 several HTTP requests could reduce the chances of spoofing. 3206 Expires November 30, 2000 3207 5. Internal date time clock battery driven. 3209 6. Query "http://tycho.usno.navy.mil/cgi-bin/timer.pl" 3211 4.4 Printer Description Attributes 3213 4.4.1 queued-job-count 3215 4.4.1.1 Why is "queued-job-count" RECOMMENDED (Issue 1.14)? 3217 The reason that "queued-job-count" is RECOMMENDED, is that some clients 3218 look at that attribute alone when summarizing the status of a list of 3219 printers, instead of doing a Get-Jobs to determine the number of jobs in 3220 the queue. Implementations that fail to support the "queued-job-count" 3221 will cause that client to display 0 jobs when there are actually queued 3222 jobs. 3224 We would have made it a REQUIRED Printer attribute, but some 3225 implementations had already been completed before the issue was raised, 3226 so making it a SHOULD was a compromise. 3228 4.4.1.2 Is "queued-job-count" a good measure of how busy a printer is 3229 (Issue 1.15)? 3231 The "queued-job-count" is not a good measure of how busy the printer is 3232 when there are held jobs. A future registration could be to add a 3233 "held-job-count" (or an "active-job-count") Printer Description 3234 attribute if experience shows that such an attribute (combination) is 3235 needed to quickly indicate how busy a printer really is. 3237 4.4.2 printer-current-time (dateTime) 3239 A Printer implementation MAY support this attribute by obtaining the 3240 date and time by any number of implementation-dependent means at startup 3241 or subsequently. Examples include: 3243 1. an internal date time clock, 3245 2. from the operator at startup using the console, 3247 3. from an operator using an administrative web page, 3249 4. from HTTP headers supplied in client requests, 3251 Expires November 30, 2000 3252 5. use HTTP to query "http://tycho.usno.navy.mil/cgi-bin/timer.pl" 3254 6. from the network, using NTP [RFC1305] or DHCP option 32 [RFC2132] 3255 that returns the IP address of the NTP server. 3257 If an implementation supports this attribute by obtaining the current 3258 time from the network (at startup or later), but the time is not 3259 available, then the implementation MUST return the value of this 3260 attribute using the out-of-band 'no-value' meaning not configured. See 3261 the beginning of section 4.1. 3263 Since the new "date-and-time-at-xxx" Job Description attributes refer to 3264 the "printer-current-time", they will be covered also. 3266 4.4.3 'Printer-uri 3268 Must the operational attribute for printer-uri match one of the values 3269 in printer-uri-supported? 3271 A forgiving printer implementation would not reject the operation. But 3272 the implementation has its rights to reject a printer or job operation 3273 if the operational attribute printer-uri is not a value of the printer- 3274 uri-supported. The printer may not be improperly configured. The request 3275 obviously reached the printer. The printer could treat the printer-uri 3276 as the logical equivalent of a value in the printer-uri-supported. It 3277 would be implementation dependent for which value, and associated 3278 security policy, would apply. This does also apply to a job object 3279 specified with a printer-uri and job-id, or with a job-uri. See section 3280 4.1.3 for how to compare URI's. 3282 4.5 Empty Jobs 3284 The IPP object model does not prohibit a job that contains no documents. 3285 Such a job may be created in a number of ways including a 'create-job' 3286 followed by an 'add-document' that contains no data and has the 'last- 3287 document' flag set. 3289 An empty job is processed just as any other job. The operation that 3290 "closes" an empty job is not rejected because the job is empty. If no 3291 other conditions exist, other than the job is empty, the response to the 3292 operation will indicate success. After the job is scheduled and 3293 processed, the job state SHALL be 'completed' 3295 There will be some variation in the value(s) of the 'job-state-reasons' 3296 attribute. It is required that if no conditions, other than the job 3297 being empty, exist the 'job-state-reasons' SHALL include the 'completed- 3299 Expires November 30, 2000 3300 successfully'. If other conditions existed, the 'completed-with- 3301 warnings' or 'completed-with-errors' values may be used." 3303 5 Directory Considerations 3305 5.1 General Directory Schema Considerations 3307 The [ipp-mod] document lists RECOMMENDED and OPTIONAL Printer object 3308 attributes for directory schemas. See [ipp-mod] APPENDIX E: Generic 3309 Directory Schema. 3311 The SLP printer template is defined in the "Definition of the Printer 3312 Abstract Service Type v2.0" document [svrloc-printer]. The LDAP printer 3313 template is defined in the "Internet Printing Protocol (IPP): LDAP 3314 Schema for Printer Services" document [ldap-printer]. Both documents 3315 systematically add "printer-" to any attribute that doesn't already 3316 start with "printer-" in order to keep the printer directory attributes 3317 distinct from other directory attributes. Also, instead of using 3318 "printer-uri-supported", "uri-authentication-supported", and "uri- 3319 security-supported", they use a "printer-xri-supported" attribute with 3320 special syntax to contain all of the same information in a single 3321 attribute. 3323 5.2 IPP Printer with a DNS name 3325 If the IPP printer has a DNS name should there be at least two values 3326 for the printer-uri-supported attribute. One URL with the fully 3327 qualified DNS name the other with the IP address in the URL? 3329 The printer may contain one or the other or both. It's up to the 3330 administrator to configure this attribute. 3332 6 Security Considerations 3334 This section corresponds to the IPP-MOD Section 8 "Security 3335 Considerations. 3337 6.1 Querying jobs with IPP that were submitted using other job 3338 submission protocols (Issue 1.32) 3340 The following clarification was added to [IPP-MOD] section 8.5: 3342 8.5 Queries on jobs submitted using non-IPP protocols 3344 Expires November 30, 2000 3346 If the device that an IPP Printer is representing is able to accept jobs 3347 using other job submission protocols in addition to IPP, it is RECOMMEND 3348 that such an implementation at least allow such "foreign" jobs to be 3349 queried using Get-Jobs returning "job-id" and "job-uri" as 'unknown'. 3350 Such an implementation NEED NOT support all of the same IPP job 3351 attributes as for IPP jobs. The IPP object returns the 'unknown' out- 3352 of-band value for any requested attribute of a foreign job that is 3353 supported for IPP jobs, but not for foreign jobs. 3355 It is further RECOMMENDED, that the IPP Printer generate "job-id" and 3356 "job-uri" values for such "foreign jobs", if possible, so that they may 3357 be targets of other IPP operations, such as Get-Job-Attributes and 3358 Cancel-Job. Such an implementation also needs to deal with the problem 3359 of authentication of such foreign jobs. One approach would be to treat 3360 all such foreign jobs as belonging to users other than the user of the 3361 IPP client. Another approach would be for the foreign job to belong to 3362 'anonymous'. Only if the IPP client has been authenticated as an 3363 operator or administrator of the IPP Printer object, could the foreign 3364 jobs be queried by an IPP request. Alternatively, if the security 3365 policy were to allow users to query other users' jobs, then the foreign 3366 jobs would also be visible to an end-user IPP client using Get-Jobs and 3367 Get-Job-Attributes. 3369 Thus IPP MAY be implemented as a "universal" protocol that provides 3370 access to jobs submitted with any job submission protocol. As IPP 3371 becomes widely implemented, providing a more universal access makes 3372 sense. 3374 7 Encoding and Transport 3376 This section discusses various aspects of IPP/1.1 Encoding and Transport 3377 [IPP-PRO]. 3379 A server is not required to send a response until after it has received 3380 the client's entire request. Hence, a client must not expect a response 3381 until after it has sent the entire request. However, we recommend that 3382 the server return a response as soon as possible if an error is detected 3383 while the client is still sending the data, rather than waiting until 3384 all of the data is received. Therefore, we also recommend that a client 3385 listen for an error response that an IPP server MAY send before it 3386 receives all the data. In this case a client, if chunking the data, can 3387 send a premature zero-length chunk to end the request before sending all 3388 the data (and so the client can keep the connection open for other 3389 requests, rather than closing it). If the request is blocked for some 3390 reason, a client MAY determine the reason by opening another connection 3391 to query the server using Get-Printer-Attributes. 3393 Expires November 30, 2000 3394 IPP, by design, uses TCP's built-in flow control mechanisms [RFC 793] to 3395 throttle clients when Printers are busy. Therefore, it is perfectly 3396 normal for an IPP client transmitting a Job to be blocked for a really 3397 long time. Accordingly, socket timeouts must be avoided. Some socket 3398 implementations have a timeout option, which specifies how long a write 3399 operation on a socket can be blocked before it times out and the 3400 blocking ends. A client should set this option for infinite timeout 3401 when transmitting Job submissions. 3403 Some IPP client applications might be able to perform other useful work 3404 while a Job transmission is blocked. For example, the client may have 3405 other jobs that it could transmit to other Printers simultaneously. A 3406 client may have a GUI, which must remain responsive to the user while 3407 the Job transmission is blocked. These clients should be designed to 3408 spawn a thread to handle the Job transmission at its own pace, leaving 3409 the main application free to do other work. Alternatively, single- 3410 threaded applications could use non-blocking I/O. 3412 Some Printer conditions, such as jam or lack of paper, could cause a 3413 client to be blocked indefinitely. Clients may open additional 3414 connections to the Printer to Get-Printer-Attributes, determine the 3415 state of the device, alert a user if the printer is stopped, and let a 3416 user decide whether to abort the job transmission or not. 3418 In the following sections, there are tables of all HTTP headers, which 3419 describe their use in an IPP client or server. The following is an 3420 explanation of each column in these tables. 3422 - the "header" column contains the name of a header 3423 - the "request/client" column indicates whether a client sends the 3424 header. 3425 - the "request/ server" column indicates whether a server supports 3426 the header when received. 3427 - the "response/ server" column indicates whether a server sends 3428 the header. 3429 - the "response /client" column indicates whether a client 3430 supports the header when received. 3431 - the "values and conditions" column specifies the allowed header 3432 values and the conditions for the header to be present in a 3433 request/response. 3435 The table for "request headers" does not have columns for responses, and 3436 the table for "response headers" does not have columns for requests. 3437 The following is an explanation of the values in the "request/client" 3438 and "response/ server" columns. 3440 - must: the client or server MUST send the header, 3442 Expires November 30, 2000 3443 - must-if: the client or server MUST send the header when the 3444 condition described in the "values and conditions" column is met, 3445 - may: the client or server MAY send the header 3446 - not: the client or server SHOULD NOT send the header. It is not 3447 relevant to an IPP implementation. 3449 The following is an explanation of the values in the "response/client" 3450 and "request/ server" columns. 3451 - must: the client or server MUST support the header, 3452 - may: the client or server MAY support the header 3453 - not: the client or server SHOULD NOT support the header. It is 3454 not relevant to an IPP implementation. 3456 7.1 General Headers 3458 The following is a table for the general headers. 3460 General- Request Response Values and Conditions 3461 Header 3463 Client Server Server Client 3465 Cache- must not must not "no-cache" only 3466 Control 3468 Connection must-if must must- must "close" only. Both 3469 if client and server 3470 SHOULD keep a 3471 connection for the 3472 duration of a sequence 3473 of operations. The 3474 client and server MUST 3475 include this header 3476 for the last operation 3477 in such a sequence. 3479 Date may may must may per RFC 1123 [RFC1123] 3480 from RFC 2616 3481 [RFC2616] 3483 Pragma must not must not "no-cache" only 3485 Transfer- must-if must must- must "chunked" only . 3486 Encoding if Header MUST be present 3487 if Content-Length is 3488 absent. 3490 Upgrade not not not not 3492 Expires November 30, 2000 3493 General- Request Response V alues and Conditions 3494 Header 3496 Client Server Server Client 3498 Via not not not not 3500 7.2 Request Headers 3502 The following is a table for the request headers. 3504 Request-Header Client Server Request Values and Conditions 3506 Accept may must "application/ipp" only. This 3507 value is the default if the 3508 client omits it 3510 Accept-Charset not not Charset information is within 3511 the application/ipp entity 3513 Accept-Encoding may must empty and per RFC 2616 [RFC2616] 3514 and IANA registry for content- 3515 codings 3517 Accept-Language not not language information is within 3518 the application/ipp entity 3520 Authorization must-if must per RFC 2616. A client MUST send 3521 this header when it receives a 3522 401 "Unauthorized" response and 3523 does not receive a "Proxy- 3524 Authenticate" header. 3526 >From not not per RFC 2616. Because RFC 3527 recommends sending this header 3528 only with the user's approval, it 3529 is not very useful 3531 Host must must per RFC 2616 3533 If-Match not not 3535 If-Modified- not not 3536 Since 3538 If-None-Match not not 3540 Expires November 30, 2000 3541 Request-Header Client Server Request Values and Conditions 3543 If-Range not not 3545 If-Unmodified- not not 3546 Since 3548 Max-Forwards not not 3550 Proxy- must-if not per RFC 2616. A client MUST send 3551 Authorization this header when it receives a 3552 401 "Unauthorized" response and a 3553 "Proxy-Authenticate" header. 3555 Range not not 3557 Referrer not not 3559 User-Agent not not 3561 7.3 Response Headers 3563 The following is a table for the request headers. 3565 Response- Server Client Response Values and Conditions 3566 Header 3568 Accept-Ranges not not 3570 Age not not 3572 Location must-if may per RFC 2616. When URI needs 3573 redirection. 3575 Proxy- not must per RFC 2616 3576 Authenticate 3578 Public may may per RFC 2616 3580 Retry-After may may per RFC 2616 3582 Server not not 3584 Vary not not 3586 Warning may may per RFC 2616 3588 Expires November 30, 2000 3589 Response- Server Client Response Values and Conditions 3590 Header 3592 WWW- must-if must per RFC 2616. When a server needs to 3593 Authenticate authenticate a client. 3595 7.4 Entity Headers 3597 The following is a table for the entity headers. 3599 Entity-Header Request Response Values and Conditions 3601 Client Server Server Client 3603 Allow not not not not 3605 Content-Base not not not not 3607 Content- may must must must per RFC 2616 and IANA 3608 Encoding registry for content 3609 codings. 3611 Content- not not not not Application/ipp 3612 Language handles language 3614 Content- must-if must must-if must the length of the 3615 Length message-body per RFC 3616 2616. Header MUST be 3617 present if Transfer- 3618 Encoding is absent.. 3620 Content- not not not not 3621 Location 3623 Content-MD5 may may may may per RFC 2616 3625 Content-Range not not not not 3627 Content-Type must must must must "application/ipp" 3628 only 3630 ETag not not not not 3632 Expires not not not not 3634 Last-Modified not not not not 3636 Expires November 30, 2000 3637 7.5 Optional support for HTTP/1.0 3639 IPP implementations consist of an HTTP layer and an IPP layer. In the 3640 following discussion, the term "client" refers to the HTTP client layer 3641 and the term "server" refers to the HTTP server layer. The Encoding and 3642 Transport document [IPP-PRO] requires that HTTP 1.1 MUST be supported by 3643 all clients and all servers. However, a client and/or a server 3644 implementation may choose to also support HTTP 1.0. 3646 - This option means that a server may choose to communicate with a 3647 (non-conforming) client that only supports HTTP 1.0. In such cases the 3648 server should not use any HTTP 1.1 specific parameters or features and 3649 should respond using HTTP version number 1.0. 3651 - This option also means that a client may choose to communicate with a 3652 (non-conforming) server that only supports HTTP 1.0. In such cases, if 3653 the server responds with an HTTP 'unsupported version number' to an HTTP 3654 1.1 request, the client should retry using HTTP version number 1.0. 3656 7.6 HTTP/1.1 Chunking 3658 7.6.1 Disabling IPP Server Response Chunking 3660 Clients MUST anticipate that the HTTP/1.1 server may chunk responses and 3661 MUST accept them in responses. However, a (non-conforming) HTTP client 3662 that is unable to accept chunked responses may attempt to request an 3663 HTTP 1.1 server not to use chunking in its response to an operation by 3664 using the following HTTP header: 3666 TE: identity 3668 This mechanism should not be used by a server to disable a client from 3669 chunking a request, since chunking of document data is an important 3670 feature for clients to send long documents. 3672 7.6.2 Warning About the Support of Chunked Requests 3674 This section describes some problems with the use of chunked requests 3675 and HTTP/1.1 servers. 3677 The HTTP/1.1 standard [RFC2616] requires that conforming servers support 3678 chunked requests for any method. However, in spite of this requirement, 3679 some HTTP/1.1 implementations support chunked responses in the GET 3680 method, but do not support chunked POST method requests. Some HTTP/1.1 3681 implementations that support CGI scripts [CGI] and/or servlets [Servlet] 3683 Expires November 30, 2000 3684 require that the client supply a Content-Length. These implementations 3685 might reject a chunked POST method and return a 411 status code (Length 3686 Required), might attempt to buffer the request and run out of room 3687 returning a 413 status code (Request Entity Too Large), or might 3688 successfully accept the chunked request. 3690 Because of this lack of conformance of HTTP servers to the HTTP/1.1 3691 standard, the IPP standard [IPP-PRO] REQUIRES that a conforming IPP 3692 Printer object implementation support chunked requests and that 3693 conforming clients accept chunked responses. Therefore, IPP object 3694 implementers are warned to seek HTTP server implementations that support 3695 chunked POST requests in order to conform to the IPP standard and/or use 3696 implementation techniques that support chunked POST requests. 3698 8 References 3700 [CGI] 3701 CGI/1.1 (http://www.ietf.org/internet-drafts/draft-coar-cgi-v11- 3702 00.txt). 3704 [IPP-MOD] 3705 R. deBry, T. Hastings, R. Herriot, S. Isaacson, P. Powell, 3706 "Internet Printing Protocol/1.0: Model and Semantics", draft-ietf- 3707 ipp-model-v11-06.txt, March 1, 2000. 3709 [IPP-PRO] 3710 Herriot, R., Butler, S., Moore, P., Tuner, R., "Internet Printing 3711 Protocol/1.0: Encoding and Transport", draft-ietf-ipp-protocol-v11- 3712 05.txt, March 1, 2000. 3714 [ldap-printer] 3715 Fleming, P., Jones, K., Lewis, H., McDonald, I., "Internet Printing 3716 Protocol (IPP): LDAP Schema for Printer Services", , work in progress, April 27, 2000. 3719 [RFC793] 3720 J. Postel, "Transmission Control Protocol", RFC 793. 3722 [RFC1123] 3723 Braden, S., "Requirements for Internet Hosts - Application and 3724 Support", RFC 1123, October, 1989. 3726 [RFC2026] 3727 S. Bradner, "The Internet Standards Process -- Revision 3", RFC 3728 2026, October 1996. 3730 [RFC2119] 3732 Expires November 30, 2000 3733 S. Bradner, "Key words for use in RFCs to Indicate Requirement 3734 Levels", RFC 2119 , March 1997. 3736 [RFC2396] 3737 Berners-Lee, T., Fielding, R., Masinter, L., "Uniform Resource 3738 Identifiers (URI): Generic Syntax", RFC 2396, August 1998. 3740 [RFC2565] 3741 R. deBry, T. Hastings, R. Herriot, S. Isaacson, P. Powell, 3742 "Internet Printing Protocol/1.0: Model and Semantics", RFC 2566, 3743 April 1999. 3745 [RFC2566] 3746 Herriot, R., Butler, S., Moore, P., Tuner, R., "Internet Printing 3747 Protocol/1.0: Encoding and Transport", RFC 2565, April 1999. 3749 [RFC2567] 3750 Wright, D., "Design Goals for an Internet Printing Protocol", 3751 draft-ietf-ipp-req-03.txt, November, 1998. 3753 [RFC2568 3754 Zilles, S., "Rationale for the Structure and Model and Protocol for 3755 the Internet Printing Protocol", RFC 2568, April 1999. 3757 [RFC2569] 3758 Herriot, R., Hastings, T., Jacobs, N., Martin, J., "Mapping between 3759 LPD and IPP Protocols", RFC 2569, April 1999. 3761 [RFC2616] 3762 R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. 3763 Leach, T. Berners-Lee, "Hypertext Transfer Protocol - HTTP/1.1", 3764 RFC 2616, June 1999. 3766 [Servlet] 3767 Servlet Specification Version 2.1 3768 (http://java.sun.com/products/servlet/2.1/index.html). 3770 [svrloc-printer] 3771 St. Pierre, P., Isaacson, S., McDonald, I., "Definition of the 3772 Printer Abstract Service Type v2.0", , work in progress, March 8, 2000. 3775 [SSL] 3776 Netscape, The SSL Protocol, Version 3, (Text version 3.02), 3777 November 1996. 3779 9 Authors' Address 3781 Expires November 30, 2000 3782 Thomas N. Hastings 3783 Xerox Corporation 3784 701 Aviation Blvd. 3785 El Segundo, CA 90245 3786 hastings@cp10.es.xerox.com 3788 Carl-Uno Manros 3789 Xerox Corporation 3790 701 Aviation Blvd. 3791 El Segundo, CA 90245 3792 manros@cp10.es.xerox.com 3794 Carl Kugler 3795 Mail Stop 003G 3796 IBM Printing Systems Co 3797 6300 Diagonal Hwy 3798 Boulder CO 80301 3799 Kugler@us.ibm.com 3801 Henrik Holst 3802 i-data Printing Systems 3803 Vadstrupvej 35-43 3804 2880 Bagsvaerd, Denmark 3805 hh@I-data.com 3807 Peter Zehler 3808 Xerox Corporation 3809 800 Philips Road 3810 Webster, NY 14580 3812 Phone: 716 265-8755 3813 peter.zehler@usa.xerox.com 3815 10 Notices 3817 The IETF takes no position regarding the validity or scope of any 3818 intellectual property or other rights that might be claimed to pertain 3819 to the implementation or use of the technology described in this 3820 document or the extent to which any license under such rights might or 3821 might not be available; neither does it represent that it has made any 3822 effort to identify any such rights. Information on the IETF's 3823 procedures with respect to rights in standards-track and standards- 3824 related documentation can be found in BCP-11[BCP-11]. Copies of claims 3825 of rights made available for publication and any assurances of licenses 3826 to be made available, or the result of an attempt made to obtain a 3827 general license or permission for the use of such proprietary rights by 3828 implementers or users of this specification can be obtained from the 3829 IETF Secretariat. 3831 Expires November 30, 2000 3832 The IETF invites any interested party to bring to its attention any 3833 copyrights, patents or patent applications, or other proprietary rights, 3834 which may cover technology that may be required to practice this 3835 standard. Please address the information to the IETF Executive 3836 Director. 3838 Copyright (C) The Internet Society (1999). All Rights Reserved 3840 This document and translations of it may be copied and furnished to 3841 others, and derivative works that comment on or otherwise explain it or 3842 assist in its implementation may be prepared, copied, published and 3843 distributed, in whole or in part, without restriction of any kind, 3844 provided that the above copyright notice and this paragraph are included 3845 on all such copies and derivative works. However, this document itself 3846 may not be modified in any way, such as by removing the copyright notice 3847 or references to the Internet Society or other Internet organizations, 3848 except as needed for the purpose of developing Internet standards in 3849 which case the procedures for copyrights defined in the Internet 3850 Standards process must be followed, or as required to translate it into 3851 languages other than English. 3853 The limited permissions granted above are perpetual and will not be 3854 revoked by the Internet Society or its successors or assigns. 3856 This document and the information contained herein is provided on an "AS 3857 IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK 3858 FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT 3859 LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT 3860 INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR 3861 FITNESS FOR A PARTICULAR PURPOSE. 3863 Expires November 30, 2000