| < draft-ietf-ipp-implementers-guide-00.txt | draft-ietf-ipp-implementers-guide-01.txt > | |||
|---|---|---|---|---|
| INTERNET-DRAFT | INTERNET-DRAFT | |||
| draft-ietf-ipp-implementers-guide-00.txt | draft-ietf-ipp-implementers-guide-01.txt | |||
| T. Hastings | T. Hastings | |||
| Xerox Corporation | Xerox Corporation | |||
| C. Manros | C. Manros | |||
| Xerox Corporation | Xerox Corporation | |||
| November 16, 1998 | February 12, 1999 | |||
| Internet Printing Protocol/1.0: Implementer's Guide | Internet Printing Protocol/1.0: Implementer's Guide | |||
| Copyright (C) The Internet Society (date). All Rights Reserved. | Copyright (C) The Internet Society (1999). All Rights Reserved. | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft. Internet-Drafts are working | This document is an Internet-Draft and is in full conformance with all | |||
| provisions of Section 10 of [RFC2026]. Internet-Drafts are working | ||||
| documents of the Internet Engineering Task Force (IETF), its areas, and | documents of the Internet Engineering Task Force (IETF), its areas, and | |||
| its working groups. Note that other groups may also distribute working | its working groups. Note that other groups may also distribute working | |||
| documents as Internet-Drafts. | documents as Internet-Drafts. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference material | time. It is inappropriate to use Internet-Drafts as reference material | |||
| or to cite them other than as "work in progress". | or to cite them other than as "work in progress". | |||
| To learn the current status of any Internet-Draft, please check the | The list of current Internet-Drafts can be accessed at | |||
| "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow | http://www.ietf.org/ietf/1id-abstracts.txt | |||
| Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe), | ||||
| munnari.oz.au (Pacific Rim), ftp.ietf.org (US East Coast), or | The list of Internet-Draft Shadow Directories can be accessed as | |||
| ftp.isi.edu (US West Coast). | http://www.ietf.org/shadow.html. | |||
| Abstract | Abstract | |||
| This document is one of a set of documents, which together describe all | This document is one of a set of documents, which together describe all | |||
| aspects of a new Internet Printing Protocol (IPP). IPP is an | aspects of a new Internet Printing Protocol (IPP). IPP is an | |||
| application level protocol that can be used for distributed printing | application level protocol that can be used for distributed printing | |||
| using Internet tools and technologies. This document contains | using Internet tools and technologies. This document contains | |||
| information that supplements the IPP Model and Semantics [IPP-MOD] and | information that supplements the IPP Model and Semantics [IPP-MOD] and | |||
| the IPP Transport and Encoding [IPP-PRO] documents. It is intended to | the IPP Transport and Encoding [IPP-PRO] documents. It is intended to | |||
| help implementers understand IPP/1.0 and some of the considerations that | help implementers understand IPP/1.0 and some of the considerations that | |||
| may assist them in the design of their client and/or IPP object | may assist them in the design of their client and/or IPP object | |||
| implementations. For example, a typical order of processing requests is | implementations. For example, a typical order of processing requests is | |||
| given, including error checking. Motivation for some of the | given, including error checking. Motivation for some of the | |||
| specification decisions is also included. | specification decisions is also included. | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| The full set of IPP documents includes: | The full set of IPP documents includes: | |||
| Design Goals for an Internet Printing Protocol [IPP-REQ] | Design Goals for an Internet Printing Protocol [IPP-REQ] | |||
| Rationale for the Structure and Model and Protocol for the Internet | Rationale for the Structure and Model and Protocol for the Internet | |||
| Printing Protocol [IPP-RAT] | Printing Protocol [IPP-RAT] | |||
| Internet Printing Protocol/1.0: Model and Semantics [IPP-MOD] | Internet Printing Protocol/1.0: Model and Semantics [IPP-MOD] | |||
| Internet Printing Protocol/1.0: Encoding and Transport [IPP-PRO] | Internet Printing Protocol/1.0: Encoding and Transport [IPP-PRO] | |||
| Mapping between LPD and IPP Protocols [IPP LPD] | Mapping between LPD and IPP Protocols [IPP LPD] | |||
| The document, "Design Goals for an Internet Printing Protocol", takes a | The document, "Design Goals for an Internet Printing Protocol", takes a | |||
| skipping to change at page 3, line 5 ¶ | skipping to change at page 3, line 5 ¶ | |||
| The document, "Internet Printing Protocol/1.0: Encoding and Transport", | The document, "Internet Printing Protocol/1.0: Encoding and Transport", | |||
| is a formal mapping of the abstract operations and attributes defined in | is a formal mapping of the abstract operations and attributes defined in | |||
| the model document onto HTTP/1.1. It also defines the encoding rules | the model document onto HTTP/1.1. It also defines the encoding rules | |||
| for a new Internet media type called "application/ipp". | for a new Internet media type called "application/ipp". | |||
| The document, "Mapping between LPD and IPP Protocols", gives some advice | The document, "Mapping between LPD and IPP Protocols", gives some advice | |||
| to implementers of gateways between IPP and LPD (Line Printer Daemon) | to implementers of gateways between IPP and LPD (Line Printer Daemon) | |||
| implementations. | implementations. | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| TABLE OF CONTENTS | TABLE OF CONTENTS | |||
| 1 Introduction......................................................5 | 1 Introduction.......................................................5 | |||
| 1.1 Conformance language...........................................5 | 1.1 Conformance language............................................5 | |||
| 1.2 Other terminology...............................................5 | ||||
| 1.2 Other terminology..............................................6 | 2 Model and Semantics................................................5 | |||
| 2 Model and Semantics...............................................6 | 2.1 Summary of Operation Attributes.................................5 | |||
| 2.2 Suggested Operation Processing Steps for IPP Objects (Issue 1.21)9 | ||||
| 2.2.1 Suggested Operation Processing Steps for all Operations....10 | ||||
| 2.2.1.1 Validate version number................................10 | ||||
| 2.2.1.2 Validate operation identifier..........................11 | ||||
| 2.2.1.3 Validate the request identifier........................11 | ||||
| 2.2.1.4 Validate attribute group and attribute presence and order | ||||
| 11 | ||||
| 2.2.1.5 Validate the values of the REQUIRED Operation attributes18 | ||||
| 2.2.1.6 Validate the values of the OPTIONAL Operation attributes22 | ||||
| 2.2.2 Suggested Additional Processing Steps for Operations that | ||||
| Create/Validate Jobs and Add Documents...........................24 | ||||
| 2.2.2.1 Default "ipp-attribute-fidelity" if not supplied.......24 | ||||
| 2.2.2.2 Check that the Printer object is accepting jobs........24 | ||||
| 2.2.2.3 Validate the values of the Job Template attributes.....24 | ||||
| 2.2.3 Algorithm for job validation...............................25 | ||||
| 2.2.3.1 Check for conflicting Job Template attributes values...30 | ||||
| 2.2.3.2 Decide whether to REJECT the request...................30 | ||||
| 2.2.3.3 For the Validate-Job operation, RETURN one of the success | ||||
| status codes....................................................31 | ||||
| 2.2.3.4 Create the Job object with attributes to support.......31 | ||||
| 2.2.3.5 Return one of the success status codes.................33 | ||||
| 2.2.3.6 Accept appended Document Content.......................33 | ||||
| 2.2.3.7 Scheduling and Starting to Process the Job.............33 | ||||
| 2.2.3.8 Completing the Job.....................................33 | ||||
| 2.2.3.9 Destroying the Job after completion....................34 | ||||
| 2.2.3.10 Interaction with "ipp-attribute-fidelity"..............34 | ||||
| 2.3 Status codes returned by operation (Issue 1.50)................34 | ||||
| 2.3.1 Printer Operations.........................................34 | ||||
| 2.3.1.1 Print-Job..............................................34 | ||||
| 2.3.1.2 Print-URI..............................................36 | ||||
| 2.3.1.3 Validate-Job...........................................37 | ||||
| 2.3.1.4 Create-Job.............................................37 | ||||
| 2.3.1.5 Get-Printer-Attributes.................................37 | ||||
| 2.3.1.6 Get-Jobs...............................................38 | ||||
| 2.3.2 Job Operations.............................................38 | ||||
| 2.3.2.1 Send-Document..........................................38 | ||||
| 2.3.2.2 Send-URI...............................................39 | ||||
| 2.3.2.3 Cancel-Job.............................................39 | ||||
| 2.3.2.4 Get-Job-Attributes.....................................40 | ||||
| 2.4 Validate-Job...................................................41 | ||||
| 2.5 Case Sensitivity in URIs (issue 1.6)...........................41 | ||||
| 2.6 Character Sets, natural languages, and internationalization....41 | ||||
| 2.6.1 Character set code conversion support (Issue 1.5)..........41 | ||||
| 2.6.2 What charset to return when an unsupported charset is | ||||
| requested (Issue 1.19)?..........................................42 | ||||
| 2.1 Suggested Operation Processing Steps for IPP Objects...........6 | Expires August 12, 1999 | |||
| 2.6.3 Natural Language Override (NLO) (Issue 1.45)...............43 | ||||
| 2.7 The "queued-job-count" Printer Description attribute...........44 | ||||
| 2.7.1 Why is "queued-job-count" RECOMMENDED (Issue 1.14)?........44 | ||||
| 2.7.2 Is "queued-job-count" a good measure of how busy a printer is | ||||
| (Issue 1.15)?....................................................45 | ||||
| 2.8 Sending empty attribute groups (Issue 1.16)....................45 | ||||
| 2.9 Returning unsupported attributes in Get-Xxxx responses (Issue | ||||
| 1.18)..............................................................45 | ||||
| 2.10Returning job-state in Print-Job response (Issue 1.30).........46 | ||||
| 2.11Flow controlling the data portion of a Print-Job request (Issue | ||||
| 1.22)..............................................................46 | ||||
| 2.12Multi-valued attributes (Issue 1.31)...........................47 | ||||
| 2.13Querying jobs with IPP that were submitted using other job | ||||
| submission protocols (Issue 1.32)..................................47 | ||||
| 2.14The 'none' value for empty sets (Issue 1.37)...................48 | ||||
| 2.15Get-Jobs, my-jobs='true', and 'requesting-user-name' (Issue 1.39)? | ||||
| 48 | ||||
| 2.16The "multiple-document-handling" Job Template attribute and | ||||
| support of multiple document jobs..................................48 | ||||
| 2.1.1 Suggested Operation Processing Steps for all Operations.....7 | 3 Encoding and Transport............................................49 | |||
| 2.1.1.1 Validate version number.................................7 | 3.1 General Headers................................................50 | |||
| 3.2 Request Headers...............................................50 | ||||
| 3.3 Response Headers...............................................52 | ||||
| 3.4 Entity Headers................................................52 | ||||
| 3.5 Optional support for HTTP/1.0..................................53 | ||||
| 3.6 HTTP/1.1 Chunking..............................................53 | ||||
| 3.6.1 Disabling IPP Server Response Chunking.....................53 | ||||
| 3.6.2 Warning About the Support of Chunked Requests..............54 | ||||
| 2.1.1.2 Validate operation identifier...........................7 | 4 References........................................................54 | |||
| 2.1.1.3 Validate the request identifier.........................7 | 4.1 Authors. Address...............................................55 | |||
| 2.1.1.4 Validate attribute group and attribute presence and order8 | 5 Notices.................................Error! Bookmark not defined. | |||
| 2.1.1.5 Validate the values of the REQUIRED Operation attributes15 | 6 Change History....................................................56 | |||
| 2.1.1.6 Validate the values of the OPTIONAL Operation attributes18 | 6.1 Changes to produce the February 12, 1999 version from the January | |||
| 8, 1999 version:...................................................57 | ||||
| 6.2 Changes to produce the January 8, 1999 version from the December | ||||
| 6, 1998 version:...................................................57 | ||||
| 6.3 Changes to produce the December 6, 1998 version from the November | ||||
| 16, 1998 version:..................................................57 | ||||
| 2.1.2 Suggested Additional Processing Steps for Operations that | Expires August 12, 1999 | |||
| Create/Validate Jobs and Add Documents...........................20 | ||||
| 2.1.2.1 Default "ipp-attribute-fidelity" if not supplied.......20 | 1 Introduction | |||
| 2.1.2.2 Check that the Printer object is accepting jobs........20 | This document contains information that supplements the IPP Model and | |||
| Semantics [IPP-MOD] and the IPP Transport and Encoding [IPP-PRO] | ||||
| documents. As such this information is not part of the formal | ||||
| specifications. Instead information is presented to help implementers | ||||
| understand the specification, including some of the motivation for | ||||
| decisions taken by the committee in developing the specification. Some | ||||
| of the implementation considerations are intended to help implementers | ||||
| design their client and/or IPP object implementations. If there are any | ||||
| contradictions between this document and [IPP-MOD] or [IPP-PRO], those | ||||
| documents take precedence over this document. | ||||
| 2.1.2.3 Validate the values of the Job Template attributes.....20 | 1.1 Conformance language | |||
| 2.1.2.4 Check for conflicting Job Template attributes values...25 | Usually, this document does not contain the terminology MUST, MUST NOT, | |||
| MAY, NEED NOT, SHOULD, SHOULD NOT, REQUIRED, and OPTIONAL. However, | ||||
| when those terms do appear in this document, their intent is to repeat | ||||
| what the [IPP-MOD] and [IPP-PRO] documents require and allow, rather | ||||
| than specifying additional conformance requirements. These terms are | ||||
| defined in section 13 on conformance terminology in [IPP-MOD], most of | ||||
| which is taken from RFC 2119 [RFC2119]. | ||||
| 2.1.2.5 Decide whether to REJECT the request...................25 | Implementers should read section 13 in [IPP-MOD] in order to understand | |||
| these capitalized words. The words MUST, MUST NOT, and REQUIRED | ||||
| indicate what implementations are required to support in a client or IPP | ||||
| object in order to be conformant to [IPP-MOD] and [IPP-PRO]. MAY, NEED | ||||
| NOT, and OPTIONAL indicate was is merely allowed as an implementer | ||||
| option. The verbs SHOULD and SHOULD NOT indicate suggested behavior, | ||||
| but which is not required or disallowed, respectively, in order to | ||||
| conform to the specification. | ||||
| 2.1.2.6 For the Validate-Job operation, RETURN one of the success | 1.2 Other terminology | |||
| status codes....................................................26 | ||||
| 2.1.2.7 Create the Job object with attributes to support.......26 | The term "sender" refers to the client that sends a request or an IPP | |||
| object that returns a response. The term "receiver" refers to the IPP | ||||
| object that receives a request and to a client that receives a response. | ||||
| 2.1.2.8 Return one of the success status codes.................28 | 2 Model and Semantics | |||
| 2.1.2.9 Accept appended Document Content.......................28 | This section discusses various aspects of IPP/1.0 Model and Semantics | |||
| [IPP-MOD]. | ||||
| 2.1.2.10Scheduling and Starting to Process the Job.............28 | 2.1 Summary of Operation Attributes | |||
| 2.1.2.11Completing the Job.....................................28 | Legend for the following table: | |||
| 2.1.2.12Destroying the Job after completion....................29 | Expires August 12, 1999 | |||
| R indicates a REQUIRED operation or attribute for an implementation | ||||
| to support | ||||
| Expires May 16, 1999 | O indicates an OPTIONAL operation or attribute for an | |||
| 2.1.2.13Interaction with "ipp-attribute-fidelity"..............29 | implementation to support | |||
| 2.2 Status codes returned by operation............................29 | Table 1. Summary of operation attributes | |||
| 2.2.1 Printer Operations.........................................29 | Job Operations | |||
| 2.2.1.1 Print-Job..............................................29 | Requests Respo | |||
| nses | ||||
| 2.2.1.2 Print-URI..............................................31 | Operation Send- Send- Cancel Get- All | |||
| Attributes Documen URI -Job Job- Opera | ||||
| t (O) Attribu tions | ||||
| (O) tes | ||||
| 2.2.1.3 Validate-Job...........................................31 | Operation parameters--REQUIRED to be supplied by the sender | |||
| 2.2.1.4 Create-Job.............................................31 | operation-id R R R R | |||
| 2.2.1.5 Get-Printer-Attributes.................................32 | status-code R | |||
| 2.2.1.6 Get-Jobs...............................................32 | request-id R R R R R | |||
| 2.2.2 Job Operations.............................................33 | version-number R R R R R | |||
| 2.2.2.1 Send-Document..........................................33 | Operation attributes.REQUIRED to be supplied by the sender | |||
| 2.2.2.2 Send-URI...............................................34 | attributes- R R R R R | |||
| charset | ||||
| 2.2.2.3 Cancel-Job.............................................34 | attributes- R R R R R | |||
| natural-language | ||||
| 2.2.2.4 Get-Job-Attributes.....................................35 | document-uri R | |||
| 2.3 Validate-Job..................................................36 | job-id* R R R R | |||
| 2.4 Case Sensitivity in URIs......................................36 | job-uri* R R R R | |||
| 2.5 Natural Language Override (NLO)...............................36 | last-document R R | |||
| 2.6 The "queued-job-count" Printer Description attribute..........38 | printer-uri R R R R | |||
| 2.6.1 Why is "queued-job-count" RECOMMENDED?.....................38 | Operation attributes.RECOMMENDED to be supplied by the | |||
| sender | ||||
| 2.6.2 Is "queued-job-count" a good measure of how busy a printer is? | job-name | |||
| 38 | ||||
| 2.7 Sending empty attribute groups................................38 | requesting-user- R R R R | |||
| name | ||||
| 2.8 Returning unsupported attributes in Get-Xxxx responses........38 | Expires August 12, 1999 | |||
| Printer Operations | ||||
| 2.9 Returning job-state in Print-Job response.....................38 | Requests Respon | |||
| ses | ||||
| 2.10 Multi-valued attributes.....................................39 | Operation Print- Pri Crea Get- Get- All | |||
| Attributes Job, nt- te- Printe Jobs Operat | ||||
| Valida URI Job r- ions | ||||
| te-Job (O) (O) Attrib | ||||
| utes | ||||
| 3 Encoding and Transport...........................................40 | Operation attributes.OPTIONAL to be supplied by the sender | |||
| 3.1 General Headers...............................................41 | status-message O | |||
| 3.2 Request Headers..............................................41 | compression O O | |||
| Expires May 16, 1999 | document-format R R O | |||
| 3.3 Response Headers..............................................42 | ||||
| 3.4 Entity Headers...............................................43 | document-name O O | |||
| 3.5 Optional support for HTTP/1.0.................................44 | document-natural- O O | |||
| language | ||||
| 3.6 HTTP/1.1 Chunking.............................................44 | ipp-attribute- R R R | |||
| fidelity | ||||
| 4 References.......................................................45 | job-impressions O O O | |||
| 4.1 Authors' Address..............................................45 | job-k-octets O O O | |||
| 5 Appendix C: Full Copyright Statement.............................46 | job-media-sheets O O O | |||
| 1 Introduction | limit R | |||
| This document contains information that supplements the IPP Model and | message | |||
| Semantics [IPP-MOD] and the IPP Transport and Encoding [IPP-PRO] | ||||
| documents. As such this information is not part of the formal | ||||
| specifications. Instead information is presented to help implementers | ||||
| understand the specification, including some of the motivation for | ||||
| decisions taken by the committee in developing the specification. Some | ||||
| of the implementation considerations are intended to help implementers | ||||
| design their client and/or IPP object implementations. If there are any | ||||
| contradictions between this document and [IPP-MOD] or [IPP-PRO], those | ||||
| documents take precedence over this document. | ||||
| 1.1 Conformance language | my-jobs R | |||
| Usually, this document does not contain the terminology MUST, MUST NOT, | requested- R R | |||
| MAY, NEED NOT, SHOULD, SHOULD NOT, REQUIRED, and OPTIONAL. However, | attributes | |||
| when those terms do appear in this document, their intent is to repeat | ||||
| what the [IPP-MOD] and [IPP-PRO] documents require and allow, rather | ||||
| than specifying additional conformance requirements. These terms are | ||||
| defined in section 13 on conformance terminology in [IPP-MOD], most of | ||||
| which is taken from RFC 2119 [RFC2119]. | ||||
| Implementers should read section 13 in [IPP-MOD] in order to understand | which-jobs R | |||
| these capitalized words. The words MUST, MUST NOT, and REQUIRED | ||||
| indicate what implementations are required to support in a client or IPP | ||||
| object in order to be conformant to [IPP-MOD] and [IPP-PRO]. MAY, NEED | ||||
| NOT, and OPTIONAL indicate was is merely allowed as an implementer | ||||
| option. The verbs SHOULD and SHOULD NOT indicate suggested behavior, | ||||
| but which is not required or disallowed, respectively, in order to | ||||
| conform to the specification. | ||||
| Expires May 16, 1999 | * "job-id" is REQUIRED only if used together with | |||
| 1.2 Other terminology | "printer-uri" to identify the target job; otherwise, "job- | |||
| uri" is REQUIRED. | ||||
| The term "sender" refers to the client that sends a request or an IPP | Expires August 12, 1999 | |||
| object that returns a response. The term "receiver" refers to the IPP | ||||
| object that receives a request and to a client that receives a response. | ||||
| 2 Model and Semantics | Table 2. Summary of operation attributes | |||
| This section discusses various aspects of IPP/1.0 Model and Semantics | Printer Operations | |||
| [IPP-MOD]. | ||||
| 2.1 Suggested Operation Processing Steps for IPP Objects | Requests Respo | |||
| nses | ||||
| Operation Print- Pri Crea Get- Get- All | ||||
| Attributes Job, nt- te- Printer- Jobs Opera | ||||
| Validate URI Job Attribut tions | ||||
| -Job (O) (O) es | ||||
| Operation parameters--REQUIRED to be supplied by the sender | ||||
| operation-id R R R R R | ||||
| status-code R | ||||
| request-id R R R R R R | ||||
| version-number R R R R R R | ||||
| Operation attributes.REQUIRED to be supplied by the sender | ||||
| attributes-charset R R R R R R | ||||
| attributes- R R R R R R | ||||
| natural-language | ||||
| document-uri R | ||||
| job-id* | ||||
| job-uri* | ||||
| last-document | ||||
| printer-uri R R R R R | ||||
| Operation attributes.RECOMMENDED to be supplied by the sender | ||||
| job-name R R R | ||||
| requesting-user- R R R R R | ||||
| name | ||||
| Expires August 12, 1999 | ||||
| Job Operations | ||||
| Requests Respon | ||||
| ses | ||||
| Operation Attributes Send- Send- Cance Get- All | ||||
| Documen URI l-Job Job- Operat | ||||
| t (O) Attrib ions | ||||
| (O) utes | ||||
| Operation attributes.OPTIONAL to be supplied by the sender | ||||
| status-message O | ||||
| compression O O | ||||
| document-format R R | ||||
| document-name O O | ||||
| document-natural- O O | ||||
| language | ||||
| ipp-attribute- | ||||
| fidelity | ||||
| job-impressions | ||||
| job-k-octets | ||||
| job-media-sheets | ||||
| limit | ||||
| message O | ||||
| my-jobs | ||||
| requested-attributes R | ||||
| which-jobs | ||||
| * "job-id" is REQUIRED only if used together with "printer- | ||||
| uri" to identify the target job; otherwise, "job-uri" is | ||||
| REQUIRED. | ||||
| 2.2 Suggested Operation Processing Steps for IPP Objects (Issue 1.21) | ||||
| This section suggests the steps and error checks that an IPP object MAY | This section suggests the steps and error checks that an IPP object MAY | |||
| perform when processing requests and returning responses. An IPP object | perform when processing requests and returning responses. An IPP object | |||
| MAY perform some or all of the error checks. However, some | MAY perform some or all of the error checks. However, some | |||
| implementations MAY choose to be more forgiving than the error checks | implementations MAY choose to be more forgiving than the error checks | |||
| shown here, in order to be able to accept requests from non-conforming | shown here, in order to be able to accept requests from non-conforming | |||
| clients. Not performing all of these error checks is a so-called | clients. Not performing all of these error checks is a so-called | |||
| "forgiving" implementation. On the other hand, clients that | "forgiving" implementation. On the other hand, clients that | |||
| successfully submit requests to IPP objects that do perform all the | successfully submit requests to IPP objects that do perform all the | |||
| error checks will be more likely to be able to interoperate with other | error checks will be more likely to be able to interoperate with other | |||
| IPP object implementations. Thus an implementer of an IPP object needs | IPP object implementations. Thus an implementer of an IPP object needs | |||
| to decide whether to be a "forgiving" or a "strict" implementation. | to decide whether to be a "forgiving" or a "strict" implementation. | |||
| Therefore, the error status codes returned may differ between | Therefore, the error status codes returned may differ between | |||
| implementations. Consequentially, client SHOULD NOT expect exactly the | implementations. Consequentially, client SHOULD NOT expect exactly the | |||
| error code processing described in this section. | error code processing described in this section. | |||
| When an IPP object receives a request, the IPP object either accepts or | When an IPP object receives a request, the IPP object either accepts or | |||
| rejects the request. In order to determine whether or not to accept or | rejects the request. In order to determine whether or not to accept or | |||
| reject the request, the IPP object SHOULD execute the following steps. | reject the request, the IPP object SHOULD execute the following steps. | |||
| Expires August 12, 1999 | ||||
| The order of the steps may be rearranged and/or combined, including | The order of the steps may be rearranged and/or combined, including | |||
| making one or multiple passes over the request. | making one or multiple passes over the request. | |||
| A client MUST supply requests that would pass all of the error checks | A client MUST supply requests that would pass all of the error checks | |||
| indicated here in order to be a conforming client. Therefore, a client | indicated here in order to be a conforming client. Therefore, a client | |||
| SHOULD supply requests that are conforming, in order to avoid being | SHOULD supply requests that are conforming, in order to avoid being | |||
| rejected by some IPP object implementations. | rejected by some IPP object implementations and/or risking different | |||
| semantics by different implementations of forgiving implementations. | ||||
| For example, a forgiving implementation that accepts multiple | ||||
| occurrences of the same attribute, rather than rejecting the request | ||||
| might use the first occurrences, while another might use the last | ||||
| occurrence. Thus such a non-conforming client would get different | ||||
| results from the two forgiving implementations. | ||||
| In the following, processing continues step by step until a "RETURNS the | In the following, processing continues step by step until a "RETURNS the | |||
| xxx status code ." statement is encountered. Error returns are | xxx status code ." statement is encountered. Error returns are | |||
| indicated by the verb: "REJECTS". Since clients have difficulty getting | indicated by the verb: "REJECTS". Since clients have difficulty getting | |||
| the status code before sending all of the document data in a Print-Job | the status code before sending all of the document data in a Print-Job | |||
| request, clients SHOULD use the Validate-Job operation before sending | request, clients SHOULD use the Validate-Job operation before sending | |||
| large documents to be printed, in order to validate whether the IPP | large documents to be printed, in order to validate whether the IPP | |||
| Printer will accept the job or not. | Printer will accept the job or not. | |||
| It is assumed that security authentication and authorization has already | It is assumed that security authentication and authorization has already | |||
| taken place at a lower layer. | taken place at a lower layer. | |||
| Expires May 16, 1999 | 2.2.1Suggested Operation Processing Steps for all Operations | |||
| 2.1.1Suggested Operation Processing Steps for all Operations | ||||
| This section is intended to apply to all operations. The next section | This section is intended to apply to all operations. The next section | |||
| contains the additional steps for the Print-Job, Validate-Job, Print- | contains the additional steps for the Print-Job, Validate-Job, Print- | |||
| URI, Create-Job, Send-Document, and Send-URI operations that create | URI, Create-Job, Send-Document, and Send-URI operations that create | |||
| jobs, adds documents, and validates jobs. | jobs, adds documents, and validates jobs. | |||
| 2.1.1.1 Validate version number | 2.2.1.1 Validate version number | |||
| Every request and every response contains the "version-number" | Every request and every response contains the "version-number" | |||
| attribute. The value of this attribute is the major and minor version | attribute. The value of this attribute is the major and minor version | |||
| number of the syntax and semantics that the client and IPP object is | number of the syntax and semantics that the client and IPP object is | |||
| using, respectively. The "version-number" attribute remains in a fixed | using, respectively. The "version-number" attribute remains in a fixed | |||
| position across all future versions so that all clients and IPP object | position across all future versions so that all clients and IPP object | |||
| that support future versions can determine which version is being used. | that support future versions can determine which version is being used. | |||
| The IPP object checks to see if the major version number supplied in the | The IPP object checks to see if the major version number supplied in the | |||
| request is supported. If not, the Printer object REJECTS the request | request is supported. If not, the Printer object REJECTS the request | |||
| and RETURNS the 'server-error-version-not-supported' status code in the | and RETURNS the 'server-error-version-not-supported' status code in the | |||
| response. The IPP object returns in the "version-number" response | response. The IPP object returns in the "version-number" response | |||
| attribute the major and minor version for the error response. Thus the | attribute the major and minor version for the error response. Thus the | |||
| client can learn at least one major and minor version that the IPP | client can learn at least one major and minor version that the IPP | |||
| object supports. The IPP object is encouraged to return the closest | object supports. The IPP object is encouraged to return the closest | |||
| version number to the one supplied by the client. | version number to the one supplied by the client. | |||
| The checking of the minor version number is implementation dependent, | The checking of the minor version number is implementation dependent, | |||
| however if the client supplied minor version is explicitly supported, | however if the client supplied minor version is explicitly supported, | |||
| the IPP object MUST respond using that identical minor version number. | the IPP object MUST respond using that identical minor version number. | |||
| If the requested minor version is not supported (the requested minor | If the requested minor version is not supported (the requested minor | |||
| Expires August 12, 1999 | ||||
| version is either higher or lower) than a supported minor version, the | version is either higher or lower) than a supported minor version, the | |||
| IPP object SHOULD return the closest supported minor version. | IPP object SHOULD return the closest supported minor version. | |||
| 2.1.1.2 Validate operation identifier | 2.2.1.2 Validate operation identifier | |||
| The Printer object checks to see if the "operation-id" attribute | The Printer object checks to see if the "operation-id" attribute | |||
| supplied by the client is supported as indicated in the Printer object's | supplied by the client is supported as indicated in the Printer object's | |||
| "printer-operations-supported" attribute. If not, the Printer REJECTS | "operations-supported" attribute. If not, the Printer REJECTS the | |||
| the request and returns the 'server-error-operation-not-supported' | request and returns the 'server-error-operation-not-supported' status | |||
| status code in the response. | code in the response. | |||
| 2.1.1.3 Validate the request identifier | 2.2.1.3 Validate the request identifier | |||
| The Printer object SHOULD NOT check to see if the "request-id" attribute | The Printer object SHOULD NOT check to see if the "request-id" attribute | |||
| supplied by the client is in range: between 1 and 2**31 - 1 (inclusive), | supplied by the client is in range: between 1 and 2**31 - 1 (inclusive), | |||
| but copies all 32 bits. | but copies all 32 bits. | |||
| Note: The "version-number", "operation-id", and the "request-id" | Note: The "version-number", "operation-id", and the "request-id" | |||
| parameters are in fixed octet positions in the IPP/1.0 encoding. The | parameters are in fixed octet positions in the IPP/1.0 encoding. The | |||
| "version-number" parameter will be the same fixed octet position in all | "version-number" parameter will be the same fixed octet position in all | |||
| versions of the protocol. These fields are validated before proceeding | versions of the protocol. These fields are validated before proceeding | |||
| with the rest of the validation. | with the rest of the validation. | |||
| Expires May 16, 1999 | 2.2.1.4 Validate attribute group and attribute presence and order | |||
| 2.1.1.4 Validate attribute group and attribute presence and order | ||||
| The order of the following validation steps depends on implementation. | The order of the following validation steps depends on implementation. | |||
| 2.1.1.4.1 Validate the presence and order of attribute groups | 2.2.1.4.1 Validate the presence and order of attribute groups | |||
| Client requests and IPP object responses contain attribute groups that | Client requests and IPP object responses contain attribute groups that | |||
| Section 3 requires to be present and in a specified order. An IPP | Section 3 requires to be present and in a specified order. An IPP | |||
| object verifies that the attribute groups are present and in the correct | object verifies that the attribute groups are present and in the correct | |||
| order in requests supplied by clients (attribute groups without an * in | order in requests supplied by clients (attribute groups without an * in | |||
| the following tables). | the following tables). | |||
| If an IPP object receives a request with (1) required attribute groups | If an IPP object receives a request with (1) required attribute groups | |||
| missing, or (2) the attributes groups are out of order, or (3) the | missing, or (2) the attributes groups are out of order, or (3) the | |||
| groups are repeated, the IPP object REJECTS the request and RETURNS the | groups are repeated, the IPP object REJECTS the request and RETURNS the | |||
| skipping to change at page 8, line 34 ¶ | skipping to change at page 12, line 5 ¶ | |||
| for an attribute group to occur more than once, except in the Get-Jobs | for an attribute group to occur more than once, except in the Get-Jobs | |||
| response. | response. | |||
| Since this kind of attribute group error is most likely to be an error | Since this kind of attribute group error is most likely to be an error | |||
| detected by a client developer rather than by a customer, the IPP object | detected by a client developer rather than by a customer, the IPP object | |||
| NEED NOT return an indication of which attribute group was in error in | NEED NOT return an indication of which attribute group was in error in | |||
| either the Unsupported Attributes group or the Status Message. Also, | either the Unsupported Attributes group or the Status Message. Also, | |||
| the IPP object NEED NOT find all attribute group errors before returning | the IPP object NEED NOT find all attribute group errors before returning | |||
| this error. | this error. | |||
| 2.1.1.4.2 Ignore unknown attribute groups in the expected position | Expires August 12, 1999 | |||
| 2.2.1.4.2 Ignore unknown attribute groups in the expected position | ||||
| Future attribute groups may be added to the specification at the end of | Future attribute groups may be added to the specification at the end of | |||
| requests just before the Document Content and at the end of response, | requests just before the Document Content and at the end of response, | |||
| except for the Get-Jobs response, where it maybe there or before the | except for the Get-Jobs response, where it maybe there or before the | |||
| first job attributes returned. If an IPP object receives an unknown | first job attributes returned. If an IPP object receives an unknown | |||
| attribute group in these positions, it ignores the entire group, rather | attribute group in these positions, it ignores the entire group, rather | |||
| than returning an error, since that group may be a new group in a later | than returning an error, since that group may be a new group in a later | |||
| minor version of the protocol that can be ignored. (If the new | minor version of the protocol that can be ignored. (If the new | |||
| attribute group cannot be ignored without confusing the client, the | attribute group cannot be ignored without confusing the client, the | |||
| major version number would have been increased in the protocol document | major version number would have been increased in the protocol document | |||
| skipping to change at page 9, line 5 ¶ | skipping to change at page 12, line 28 ¶ | |||
| position, the IPP object REJECTS the request and RETURNS the 'client- | position, the IPP object REJECTS the request and RETURNS the 'client- | |||
| error-bad-request' status code. | error-bad-request' status code. | |||
| Clients also ignore unknown attribute groups returned in a response. | Clients also ignore unknown attribute groups returned in a response. | |||
| Note: By validating that requests are in the proper form, IPP objects | Note: By validating that requests are in the proper form, IPP objects | |||
| force clients to use the proper form which, in turn, increases the | force clients to use the proper form which, in turn, increases the | |||
| chances that customers will be able to use such clients from multiple | chances that customers will be able to use such clients from multiple | |||
| vendors with IPP objects from other vendors. | vendors with IPP objects from other vendors. | |||
| Expires May 16, 1999 | 2.2.1.4.3 Validate the presence of a single occurrence of required | |||
| 2.1.1.4.3 Validate the presence of a single occurrence of required | ||||
| Operation attributes | Operation attributes | |||
| Client requests and IPP object responses contain Operation attributes | Client requests and IPP object responses contain Operation attributes | |||
| that [IPP-MOD] Section 3 requires to be present. Attributes within a | that [IPP-MOD] Section 3 requires to be present. Attributes within a | |||
| group may be in any order, except for the ordering of target, charset, | group may be in any order, except for the ordering of target, charset, | |||
| and natural languages attributes. These attributes MUST be first, and | and natural languages attributes. These attributes MUST be first, and | |||
| MUST be supplied in the following order: charset, natural language, and | MUST be supplied in the following order: charset, natural language, and | |||
| then target. An IPP object verifies that the attributes that Section 4 | then target. An IPP object verifies that the attributes that Section 4 | |||
| requires to be supplied by the client have been supplied in the request | requires to be supplied by the client have been supplied in the request | |||
| (attributes without an * in the following tables). An asterisk (*) | (attributes without an * in the following tables). An asterisk (*) | |||
| indicates groups and Operation attributes that the client may omit in a | indicates groups and Operation attributes that the client may omit in a | |||
| request or an IPP object may omit in a response. | request or an IPP object may omit in a response. | |||
| If an IPP object receives a request with required attributes missing or | If an IPP object receives a request with required attributes missing or | |||
| repeated from a group, the IPP object REJECTS the request and RETURNS | repeated from a group or in the wrong position, the behavior of the IPP | |||
| the 'client-error-bad-request' status code. For example, it is an error | object is IMPLEMENTATION DEPENDENT. Some of the possible | |||
| for the "attributes-charset" or "attributes-natural-language" attribute | implementations are: | |||
| to be omitted in any operation request, or for an Operation attribute to | ||||
| be supplied in a Job Template group or a Job Template attribute to be | 1.REJECTS the request and RETURNS the 'client-error-bad-request' | |||
| supplied in an Operation Attribute group in a create request. It is | status code | |||
| also an error to supply the "attributes-charset" attribute twice. | ||||
| 2.accepts the request and uses the first occurrence of the | ||||
| attribute no matter where it is | ||||
| 3.accepts the request and uses the last occurrence of the | ||||
| attribute no matter where it is | ||||
| 4.accept the request and assume some default value for the missing | ||||
| attribute | ||||
| Expires August 12, 1999 | ||||
| Therefore, client MUST send conforming requests, if they want to receive | ||||
| the same behavior from all IPP object implementations. For example, it | ||||
| is an error for the "attributes-charset" or "attributes-natural- | ||||
| language" attribute to be omitted in any operation request, or for an | ||||
| Operation attribute to be supplied in a Job Template group or a Job | ||||
| Template attribute to be supplied in an Operation Attribute group in a | ||||
| create request. It is also an error to supply the "attributes-charset" | ||||
| attribute twice. | ||||
| Since these kinds of attribute errors are most likely to be detected by | Since these kinds of attribute errors are most likely to be detected by | |||
| a client developer rather than by a customer, the IPP object NEED NOT | a client developer rather than by a customer, the IPP object NEED NOT | |||
| return an indication of which attribute was in error in either the | return an indication of which attribute was in error in either the | |||
| Unsupported Attributes group or the Status Message. Also, the IPP | Unsupported Attributes group or the Status Message. Also, the IPP | |||
| object NEED NOT find all attribute errors before returning this error. | object NEED NOT find all attribute errors before returning this error. | |||
| The following tables list all the attributes for all the operations by | The following tables list all the attributes for all the operations by | |||
| attribute group in each request and each response. The order of the | attribute group in each request and each response. The order of the | |||
| groups is the order that the client supplies the groups as specified in | groups is the order that the client supplies the groups as specified in | |||
| skipping to change at page 10, line 5 ¶ | skipping to change at page 14, line 5 ¶ | |||
| supply the attribute in a response. | supply the attribute in a response. | |||
| Operation Requests | Operation Requests | |||
| The tables below show the attributes in their proper attribute groups | The tables below show the attributes in their proper attribute groups | |||
| for operation requests: | for operation requests: | |||
| Note: All operation requests contain "version-number", "operation-id", | Note: All operation requests contain "version-number", "operation-id", | |||
| and "request-id" parameters. | and "request-id" parameters. | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| Expires May 16, 1999 | ||||
| Print-Job Request: | Print-Job Request: | |||
| Group 1: Operation Attributes (R) | Group 1: Operation Attributes (R) | |||
| attributes-charset (R) | attributes-charset (R) | |||
| attributes-natural-language (R) | attributes-natural-language (R) | |||
| printer-uri (R) | printer-uri (R) | |||
| requesting-user-name (R*) | requesting-user-name (R*) | |||
| job-name (R*) | job-name (R*) | |||
| ipp-attribute-fidelity (R*) | ipp-attribute-fidelity (R*) | |||
| document-name (R*) | document-name (R*) | |||
| document-format (R*) | document-format (R*) | |||
| skipping to change at page 12, line 5 ¶ | skipping to change at page 15, line 5 ¶ | |||
| requesting-user-name (R*) | requesting-user-name (R*) | |||
| job-name (R*) | job-name (R*) | |||
| ipp-attribute-fidelity (R*) | ipp-attribute-fidelity (R*) | |||
| job-k-octets (O*) | job-k-octets (O*) | |||
| job-impressions (O*) | job-impressions (O*) | |||
| job-media-sheets (O*) | job-media-sheets (O*) | |||
| Group 2: Job Template Attributes (R*) | Group 2: Job Template Attributes (R*) | |||
| <Job Template attributes> (O*) (see | <Job Template attributes> (O*) (see | |||
| (see [IPP-MOD] Section 4.2) | (see [IPP-MOD] Section 4.2) | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| Print-URI Request: | Print-URI Request: | |||
| Group 1: Operation Attributes (R) | Group 1: Operation Attributes (R) | |||
| attributes-charset (R) | attributes-charset (R) | |||
| attributes-natural-language (R) | attributes-natural-language (R) | |||
| printer-uri (R) | printer-uri (R) | |||
| document-uri (R) | document-uri (R) | |||
| requesting-user-name (R*) | requesting-user-name (R*) | |||
| job-name (R*) | job-name (R*) | |||
| ipp-attribute-fidelity (R*) | ipp-attribute-fidelity (R*) | |||
| skipping to change at page 13, line 5 ¶ | skipping to change at page 16, line 5 ¶ | |||
| document-natural-language (O*) | document-natural-language (O*) | |||
| compression (O*) | compression (O*) | |||
| Cancel-Job Request: | Cancel-Job Request: | |||
| Group 1: Operation Attributes (R) | Group 1: Operation Attributes (R) | |||
| attributes-charset (R) | attributes-charset (R) | |||
| attributes-natural-language (R) | attributes-natural-language (R) | |||
| (printer-uri & job-id) | job-uri (R) | (printer-uri & job-id) | job-uri (R) | |||
| requesting-user-name (R*) | requesting-user-name (R*) | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| message (O*) | message (O*) | |||
| Get-Printer-Attributes Request: | Get-Printer-Attributes Request: | |||
| Group 1: Operation Attributes (R) | Group 1: Operation Attributes (R) | |||
| attributes-charset (R) | attributes-charset (R) | |||
| attributes-natural-language (R) | attributes-natural-language (R) | |||
| printer-uri (R) | printer-uri (R) | |||
| requesting-user-name (R*) | requesting-user-name (R*) | |||
| requested-attributes (R*) | requested-attributes (R*) | |||
| document-format (R*) | document-format (R*) | |||
| skipping to change at page 14, line 5 ¶ | skipping to change at page 17, line 5 ¶ | |||
| my-jobs (R*) | my-jobs (R*) | |||
| Operation Responses | Operation Responses | |||
| The tables below show the response attributes in their proper attribute | The tables below show the response attributes in their proper attribute | |||
| groups for responses. | groups for responses. | |||
| Note: All operation responses contain "version-number", "status-code", | Note: All operation responses contain "version-number", "status-code", | |||
| and "request-id" parameters. | and "request-id" parameters. | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| Print-Job Response: | Print-Job Response: | |||
| Print-URI Response: | Print-URI Response: | |||
| Create-Job Response: | Create-Job Response: | |||
| Send-Document Response: | Send-Document Response: | |||
| Send-URI Response: | Send-URI Response: | |||
| Group 1: Operation Attributes (R) | Group 1: Operation Attributes (R) | |||
| attributes-charset (R) | attributes-charset (R) | |||
| attributes-natural-language (R) | attributes-natural-language (R) | |||
| status-message (O*) | status-message (O*) | |||
| Group 2: Unsupported Attributes (R*) (see Note 3) | Group 2: Unsupported Attributes (R*) (see Note 3) | |||
| skipping to change at page 15, line 5 ¶ | skipping to change at page 18, line 5 ¶ | |||
| status-message (O*) | status-message (O*) | |||
| Group 2: Unsupported Attributes (R*) (see Note 4) | Group 2: Unsupported Attributes (R*) (see Note 4) | |||
| <unsupported attributes> (R*) | <unsupported attributes> (R*) | |||
| Group 3: Printer Object Attributes(R*) (see Note 2) | Group 3: Printer Object Attributes(R*) (see Note 2) | |||
| <requested attributes> (R*) | <requested attributes> (R*) | |||
| Note 4 - the Unsupported Attributes Group is present only if the client | Note 4 - the Unsupported Attributes Group is present only if the client | |||
| included some Operation attributes that the Printer doesn't support | included some Operation attributes that the Printer doesn't support | |||
| whether a success or an error return. | whether a success or an error return. | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| Get-Job-Attributes Response: | Get-Job-Attributes Response: | |||
| Group 1: Operation Attributes (R) | Group 1: Operation Attributes (R) | |||
| attributes-charset (R) | attributes-charset (R) | |||
| attributes-natural-language (R) | attributes-natural-language (R) | |||
| status-message (O*) | status-message (O*) | |||
| Group 2: Unsupported Attributes (R*) (see Note 4) | Group 2: Unsupported Attributes (R*) (see Note 4) | |||
| <unsupported attributes> (R*) | <unsupported attributes> (R*) | |||
| Group 3: Job Object Attributes(R*) (see Note 2) | Group 3: Job Object Attributes(R*) (see Note 2) | |||
| <requested attributes> (R*) | <requested attributes> (R*) | |||
| skipping to change at page 15, line 30 ¶ | skipping to change at page 18, line 30 ¶ | |||
| status-message (O*) | status-message (O*) | |||
| Group 2: Unsupported Attributes (R*) (see Note 4) | Group 2: Unsupported Attributes (R*) (see Note 4) | |||
| <unsupported attributes> (R*) | <unsupported attributes> (R*) | |||
| Group 3: Job Object Attributes(R*) (see Note 2, 5) | Group 3: Job Object Attributes(R*) (see Note 2, 5) | |||
| <requested attributes> (R*) | <requested attributes> (R*) | |||
| Note 5: for the Get-Jobs operation the response contains a separate Job | Note 5: for the Get-Jobs operation the response contains a separate Job | |||
| Object Attributes group 3 to N containing requested-attributes for each | Object Attributes group 3 to N containing requested-attributes for each | |||
| job object in the response. | job object in the response. | |||
| 2.1.1.5 Validate the values of the REQUIRED Operation attributes | 2.2.1.5 Validate the values of the REQUIRED Operation attributes | |||
| An IPP object validates the values supplied by the client of the | An IPP object validates the values supplied by the client of the | |||
| REQUIRED Operation attribute that the IPP object MUST support. The next | REQUIRED Operation attribute that the IPP object MUST support. The next | |||
| section specifies the validation of the values of the OPTIONAL Operation | section specifies the validation of the values of the OPTIONAL Operation | |||
| attributes that IPP objects MAY support. | attributes that IPP objects MAY support. | |||
| The IPP object performs the following syntactic validation checks of | The IPP object performs the following syntactic validation checks of | |||
| each Operation attribute value: | each Operation attribute value: | |||
| a)that the length of each Operation attribute value is correct for | a)that the length of each Operation attribute value is correct for | |||
| skipping to change at page 16, line 5 ¶ | skipping to change at page 19, line 5 ¶ | |||
| d)that multiple values are supplied by the client only for | d)that multiple values are supplied by the client only for | |||
| operation attributes that are multi-valued, i.e., that are | operation attributes that are multi-valued, i.e., that are | |||
| 1setOf X according to [IPP-MOD] Section 3. | 1setOf X according to [IPP-MOD] Section 3. | |||
| If any of these checks fail, the IPP object REJECTS the request and | If any of these checks fail, the IPP object REJECTS the request and | |||
| RETURNS the 'client-error-bad-request' or the 'client-error-request- | RETURNS the 'client-error-bad-request' or the 'client-error-request- | |||
| value-too-long' status code. Since such an error is most likely to be | value-too-long' status code. Since such an error is most likely to be | |||
| an error detected by a client developer, rather than by an end-user, the | an error detected by a client developer, rather than by an end-user, the | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| IPP object NEED NOT return an indication of which attribute had the | IPP object NEED NOT return an indication of which attribute had the | |||
| error in either the Unsupported Attributes Group or the Status Message. | error in either the Unsupported Attributes Group or the Status Message. | |||
| The description for each of these syntactic checks is explicitly | The description for each of these syntactic checks is explicitly | |||
| expressed in the first IF statement in the following table. | expressed in the first IF statement in the following table. | |||
| In addition, the IPP object checks each Operation attribute value | In addition, the IPP object checks each Operation attribute value | |||
| against some Printer object attribute or some hard-coded value if there | against some Printer object attribute or some hard-coded value if there | |||
| is no "xxx-supported" Printer object attribute defined. If its value is | is no "xxx-supported" Printer object attribute defined. If its value is | |||
| not among those supported or is not in the range supported, then the IPP | not among those supported or is not in the range supported, then the IPP | |||
| object REJECTS the request and RETURNS the error status code indicated | object REJECTS the request and RETURNS the error status code indicated | |||
| in the table by the second IF statement. If the value of the Printer | in the table by the second IF statement. If the value of the Printer | |||
| object's "xxx-supported" attribute is 'no-value' (because the system | object's "xxx-supported" attribute is 'no-value' (because the system | |||
| administrator hasn't configured a value), the check always fails. | administrator hasn't configured a value), the check always fails. | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| attributes-charset (charset) | attributes-charset (charset) | |||
| IF NOT any single non-empty 'charset' value less than or equal to 63 | IF NOT a single non-empty 'charset' value, REJECT/RETURN 'client- | |||
| octets, REJECT/RETURN 'client-error-request-value-too-long'. | error-request-bad-request'. | |||
| IF the value length is greater than 63 octets, REJECT/RETURN 'client- | ||||
| error-request-value-too-long'. | ||||
| IF NOT in the Printer object's "charset-supported" attribute, | IF NOT in the Printer object's "charset-supported" attribute, | |||
| REJECT/RETURN "client-error-charset-not-supported". | REJECT/RETURN "client-error-charset-not-supported". | |||
| attributes-natural-language(naturalLanguage) | attributes-natural-language(naturalLanguage) | |||
| IF NOT any single non-empty 'naturalLanguage' value less than or | IF NOT a single non-empty 'naturalLanguage' value, REJECT/RETURN | |||
| equal to 63 octets, REJECT/RETURN 'client-error-request-value-too- | 'client-error-request-bad-request'. | |||
| long'. | IF the value length is greater than 63 octets, REJECT/RETURN 'client- | |||
| error-request-value-too-long'. | ||||
| ACCEPT the request even if not a member of the set in the Printer | ACCEPT the request even if not a member of the set in the Printer | |||
| object's "generated-natural-language-supported" attribute. | object's "generated-natural-language-supported" attribute. If the | |||
| supplied value is not a member of the Printer object's "generated- | ||||
| natural-language-supported" attribute, use the Printer object's | ||||
| "natural-language-configured" value. | ||||
| requesting-user-name | requesting-user-name | |||
| IF NOT any single 'name' value less than or equal to 255 octets, | IF NOT a single 'name' value, REJECT/RETURN 'client-error-request- | |||
| REJECT/RETURN 'client-error-request-value-too-long'. | bad-request'. | |||
| IF the value length is greater than 255 octets, REJECT/RETURN | ||||
| 'client-error-request-value-too-long'. | ||||
| IF the IPP object can obtain a better authenticated name, use it | IF the IPP object can obtain a better authenticated name, use it | |||
| instead. | instead. | |||
| job-name(name) | job-name(name) | |||
| IF NOT any single 'name' value less than or equal to 255 octets, | IF NOT a single 'name' value, REJECT/RETURN 'client-error-request- | |||
| REJECT/RETURN 'client-error-request-value-too-long'. | bad-request'. | |||
| IF the value length is greater than 255 octets, REJECT/RETURN | ||||
| 'client-error-request-value-too-long'. | ||||
| IF NOT supplied by the client, the Printer object creates a name from | IF NOT supplied by the client, the Printer object creates a name from | |||
| the document-name or document-uri. | the document-name or document-uri. | |||
| Expires August 12, 1999 | ||||
| document-name (name) | document-name (name) | |||
| IF NOT any single 'name' value less than or equal to 255 octets, | IF NOT a single 'name' value, REJECT/RETURN 'client-error-request- | |||
| REJECT/RETURN 'client-error-request-value-too-long'. | bad-request'. | |||
| IF the value length is greater than 255 octets, REJECT/RETURN | ||||
| 'client-error-request-value-too-long'. | ||||
| ipp-attribute-fidelity (boolean) | ipp-attribute-fidelity (boolean) | |||
| IF NOT either a single 'true' or 'false' 'boolean' value equal to 1 | IF NEITHER a single 'true' NOR a single 'false' 'boolean' value, | |||
| octet, REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF the value length is NOT equal to 1 octet, REJECT/RETURN 'client- | ||||
| Expires May 16, 1999 | error-request-value-too-long' | |||
| IF NOT supplied by the client, the IPP object assumes the value | IF NOT supplied by the client, the IPP object assumes the value | |||
| 'false'. | 'false'. | |||
| document-format (mimeMediaType) | document-format (mimeMediaType) | |||
| IF NOT any single non-empty 'mimeMediaType' value less than or equal | IF NOT a single non-empty 'mimeMediaType' value, REJECT/RETURN | |||
| to 255 octets, REJECT/RETURN 'client-error-request-value-too-long'. | 'client-error-request-bad-request'. | |||
| IF the value length is greater than 255 octets, REJECT/RETURN | ||||
| 'client-error-request-value-too-long'. | ||||
| IF NOT in the Printer object's "document-format-supported" attribute, | IF NOT in the Printer object's "document-format-supported" attribute, | |||
| REJECT/RETURN 'client-error-document-format-not-supported' | REJECT/RETURN 'client-error-document-format-not-supported' | |||
| IF NOT supplied by the client, the IPP object assumes the value of | IF NOT supplied by the client, the IPP object assumes the value of | |||
| the Printer object's "document-format-default" attribute. | the Printer object's "document-format-default" attribute. | |||
| document-uri (uri) | document-uri (uri) | |||
| IF NOT any single non-empty 'uri' value less than or equal to 1023 | IF NOT a single non-empty 'uri' value, REJECT/RETURN 'client-error- | |||
| octets, REJECT/RETURN 'client-error-request-value-too-long'. | request-bad-request'. | |||
| IF the value length is greater than 1023 octets, REJECT/RETURN | ||||
| 'client-error-request-value-too-long'. | ||||
| IF the URI syntax is not valid, REJECT/RETURN 'client-error-bad- | IF the URI syntax is not valid, REJECT/RETURN 'client-error-bad- | |||
| request'. | request'. | |||
| IF scheme is NOT in the Printer object's "reference-uri-schemes- | IF scheme is NOT in the Printer object's "reference-uri-schemes- | |||
| supported" attribute, REJECT/RETURN 'client-error'-uri-scheme-not- | supported" attribute, REJECT/RETURN 'client-error-uri-scheme-not- | |||
| supported'. | supported'. | |||
| The Printer object MAY check to see if the document exists and is | ||||
| accessible. If the document is not found or is not accessible, | ||||
| REJECT/RETURN 'client-error-not found'. | ||||
| last-document (boolean) | last-document (boolean) | |||
| IF NOT either a single 'true' or 'false' 'boolean' value equal to 1 | IF NEITHER a single 'true' NOR a single 'false' 'boolean' value, | |||
| octet, REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF the value length is NOT equal to 1 octet, REJECT/RETURN 'client- | ||||
| error-request-value-too-long' | ||||
| job-id (integer(1:MAX)) | job-id (integer(1:MAX)) | |||
| IF NOT any single 'integer' value equal to 4 octets AND in the range | IF NOT an single 'integer' value equal to 4 octets AND in the range 1 | |||
| 1 to MAX, REJECT/RETURN 'client-error-bad-request'. | to MAX, REJECT/RETURN 'client-error-bad-request'. | |||
| Expires August 12, 1999 | ||||
| IF NOT a job-id of an existing Job object, REJECT/RETURN 'client- | IF NOT a job-id of an existing Job object, REJECT/RETURN 'client- | |||
| error-not-found' or 'client-error-gone' status code, if keep track | error-not-found' or 'client-error-gone' status code, if keep track | |||
| of recently deleted jobs. | of recently deleted jobs. | |||
| requested-attributes (1setOf keyword) | requested-attributes (1setOf keyword) | |||
| IF NOT any number of 'keyword' values less than or equal to 255 | IF NOT one or more 'keyword' values, REJECT/RETURN 'client-error- | |||
| octets, REJECT/RETURN 'client-error-request-value-too-long'. | request-bad-request'. | |||
| IF the value length is greater than 255 octets, REJECT/RETURN | ||||
| 'client-error-request-value-too-long'. | ||||
| Ignore unsupported values which are the keyword names of unsupported | Ignore unsupported values which are the keyword names of unsupported | |||
| attributes. Don't bother to copy such requested (unsupported) | attributes. Don't bother to copy such requested (unsupported) | |||
| attributes to the Unsupported Attribute response group since the | attributes to the Unsupported Attribute response group since the | |||
| response will not return them. | response will not return them. | |||
| which-jobs (type2 keyword) | which-jobs (type2 keyword) | |||
| IF NOT a single 'keyword' value less than or equal to 255 octets, | IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-request- | |||
| REJECT/RETURN 'client-error-request-value-too-long'. | bad-request'. | |||
| IF the value length is greater than 255 octets, REJECT/RETURN | ||||
| 'client-error-request-value-too-long'. | ||||
| IF NEITHER 'completed' NOR 'not-completed', copy the attribute and | IF NEITHER 'completed' NOR 'not-completed', copy the attribute and | |||
| the unsupported value to the Unsupported Attributes response group | the unsupported value to the Unsupported Attributes response group | |||
| and REJECT/RETURN 'client-error-attributes-or-values-not- | and REJECT/RETURN 'client-error-attributes-or-values-not- | |||
| supported'. | supported'. | |||
| Expires May 16, 1999 | ||||
| Note: a Printer still supports the 'completed' value even if it keeps | Note: a Printer still supports the 'completed' value even if it keeps | |||
| no completed/canceled/aborted jobs: by returning no jobs when so | no completed/canceled/aborted jobs: by returning no jobs when so | |||
| queried. | queried. | |||
| IF NOT supplied by the client, the IPP object assumes the 'not- | IF NOT supplied by the client, the IPP object assumes the 'not- | |||
| completed' value. | completed' value. | |||
| my-jobs (boolean) | my-jobs (boolean) | |||
| IF NOT either a single 'true' or 'false' 'boolean' value equal to 1 | IF NEITHER a single 'true' NOR a single 'false' 'boolean' value, | |||
| octet, REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF the value length is NOT equal to 1 octet, REJECT/RETURN 'client- | ||||
| error-request-value-too-long' | ||||
| IF NOT supplied by the client, the IPP object assumes the 'false' | IF NOT supplied by the client, the IPP object assumes the 'false' | |||
| value. | value. | |||
| limit (integer(1:MAX)) | limit (integer(1:MAX)) | |||
| IF NOT any single 'integer' value equal to 4 octets AND in the range | IF NOT a single 'integer' value equal to 4 octets AND in the range 1 | |||
| 1 to MAX, REJECT/RETURN 'client-error-bad-request'. | to MAX, REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT supplied by the client, the IPP object returns all jobs, no | IF NOT supplied by the client, the IPP object returns all jobs, no | |||
| matter how many. | matter how many. | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| 2.1.1.6 Validate the values of the OPTIONAL Operation attributes | Expires August 12, 1999 | |||
| 2.2.1.6 Validate the values of the OPTIONAL Operation attributes | ||||
| OPTIONAL Operation attributes are those that an IPP object MAY or MAY | OPTIONAL Operation attributes are those that an IPP object MAY or MAY | |||
| NOT support. An IPP object validates the values of the OPTIONAL | NOT support. An IPP object validates the values of the OPTIONAL | |||
| attributes supplied by the client. The IPP object performs the same | attributes supplied by the client. The IPP object performs the same | |||
| syntactic validation checks for each OPTIONAL attribute value as in | syntactic validation checks for each OPTIONAL attribute value as in | |||
| Section 2.1.1.5. As in Section 2.1.1.5, if any fail, the IPP object | Section 2.2.1.5. As in Section 2.2.1.5, if any fail, the IPP object | |||
| REJECTS the request and RETURNS the 'client-error-bad-request' or the | REJECTS the request and RETURNS the 'client-error-bad-request' or the | |||
| 'client-error-request-value-too-long' status code. | 'client-error-request-value-too-long' status code. | |||
| In addition, the IPP object checks each Operation attribute value | In addition, the IPP object checks each Operation attribute value | |||
| against some Printer attribute or some hard-coded value if there is no | against some Printer attribute or some hard-coded value if there is no | |||
| "xxx-supported" Printer attribute defined. If its value is not among | "xxx-supported" Printer attribute defined. If its value is not among | |||
| those supported or is not in the range supported, then the IPP object | those supported or is not in the range supported, then the IPP object | |||
| REJECTS the request and RETURNS the error status code indicated in the | REJECTS the request and RETURNS the error status code indicated in the | |||
| table. If the value of the Printer object's "xxx-supported" attribute | table. If the value of the Printer object's "xxx-supported" attribute | |||
| is 'no-value' (because the system administrator hasn't configured a | is 'no-value' (because the system administrator hasn't configured a | |||
| value), the check always fails. | value), the check always fails. | |||
| If the IPP object doesn't recognize/support an attribute, the IPP object | If the IPP object doesn't recognize/support an attribute, the IPP object | |||
| treats the attribute as an unknown or unsupported attribute (see the | treats the attribute as an unknown or unsupported attribute (see the | |||
| last row in the table below). | last row in the table below). | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| document-natural-language (naturalLanguage) | document-natural-language (naturalLanguage) | |||
| IF NOT any single non-empty 'naturalLanguage' value less than or | IF NOT a single non-empty 'naturalLanguage' value, REJECT/RETURN | |||
| equal to 63 octets, REJECT/RETURN 'client-error-request-value-too- | 'client-error-request-bad-request'. | |||
| long'. | IF the value length is greater than 63 octets, REJECT/RETURN 'client- | |||
| error-request-value-too-long'. | ||||
| Expires May 16, 1999 | ||||
| IF NOT a value that the Printer object supports in document formats, | IF NOT a value that the Printer object supports in document formats, | |||
| (no corresponding "xxx-supported" Printer attribute), REJECT/RETURN | (no corresponding "xxx-supported" Printer attribute), REJECT/RETURN | |||
| 'client-error-natural-language-not-supported'. | 'client-error-natural-language-not-supported'. | |||
| compression (type3 keyword) | compression (type3 keyword) | |||
| IF NOT any single 'keyword' values less than or equal to 255 octets, | IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-request- | |||
| REJECT/RETURN 'client-error-request-value-too-long'. | bad-request'. | |||
| IF the value length is greater than 255 octets, REJECT/RETURN | ||||
| 'client-error-request-value-too-long'. | ||||
| IF NOT in the Printer object's "compression-supported" attribute, | IF NOT in the Printer object's "compression-supported" attribute, | |||
| copy the attribute and the unsupported value to the Unsupported | copy the attribute and the unsupported value to the Unsupported | |||
| Attributes response group and REJECT/RETURN 'client-error- | Attributes response group and REJECT/RETURN 'client-error- | |||
| attributes-or-values-not-supported'. | attributes-or-values-not-supported'. | |||
| job-k-octets (integer(0:MAX)) | job-k-octets (integer(0:MAX)) | |||
| IF NOT any single 'integer' value equal to 4 octets, | IF NOT a single 'integer' value equal to 4 octets, | |||
| REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT in the range of the Printer object's "job-k-octets-supported" | IF NOT in the range of the Printer object's "job-k-octets-supported" | |||
| attribute, copy the attribute and the unsupported value to the | attribute, copy the attribute and the unsupported value to the | |||
| Unsupported Attributes response group and REJECT/RETURN 'client- | Unsupported Attributes response group and REJECT/RETURN 'client- | |||
| error-attributes-or-values-not-supported'. | error-attributes-or-values-not-supported'. | |||
| Expires August 12, 1999 | ||||
| job-impressions (integer(0:MAX)) | job-impressions (integer(0:MAX)) | |||
| IF NOT any single 'integer' value equal to 4 octets, | IF NOT a single 'integer' value equal to 4 octets, | |||
| REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT in the range of the Printer object's "job-impressions- | IF NOT in the range of the Printer object's "job-impressions- | |||
| supported" attribute, copy the attribute and the unsupported value | supported" attribute, copy the attribute and the unsupported value | |||
| to the Unsupported Attributes response group and REJECT/RETURN | to the Unsupported Attributes response group and REJECT/RETURN | |||
| 'client-error-attributes-or-values-not-supported'. | 'client-error-attributes-or-values-not-supported'. | |||
| job-media-sheets (integer(0:MAX)) | job-media-sheets (integer(0:MAX)) | |||
| IF NOT any single 'integer' value equal to 4 octets, | IF NOT a single 'integer' value equal to 4 octets, | |||
| REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT in the range of the Printer object's "job-media-supported" | IF NOT in the range of the Printer object's "job-media-sheets- | |||
| attribute, copy the attribute and the unsupported value to the | supported" attribute, copy the attribute and the unsupported value | |||
| Unsupported Attributes response group and REJECT/RETURN 'client- | to the Unsupported Attributes response group and REJECT/RETURN | |||
| error-attributes-or-values-not-supported'. | 'client-error-attributes-or-values-not-supported'. | |||
| message (text(127)) | message (text(127)) | |||
| IF NOT any single 'text' value less than or equal to 127 octets, | IF NOT a single 'text' value, REJECT/RETURN 'client-error-request- | |||
| bad-request'. | ||||
| IF the value length is greater than 127 octets, | ||||
| REJECT/RETURN 'client-error-request-value-too-long'. | REJECT/RETURN 'client-error-request-value-too-long'. | |||
| unknown or unsupported attribute | unknown or unsupported attribute | |||
| IF the attribute syntax supplied by the client is supported but the | IF the attribute syntax supplied by the client is supported but the | |||
| length is not legal for that attribute syntax, REJECT/RETURN | length is not legal for that attribute syntax, REJECT/RETURN | |||
| 'client-error-request-value-too-long'. | 'client-error-request-value-too-long'. | |||
| ELSE copy the attribute and value to the Unsupported Attributes | ELSE copy the attribute and value to the Unsupported Attributes | |||
| response group and change the attribute value to the "out-of-band" | response group and change the attribute value to the "out-of-band" | |||
| 'unsupported' value, but otherwise ignore the attribute. | 'unsupported' value, but otherwise ignore the attribute. | |||
| Expires May 16, 1999 | ||||
| Note: Future Operation attributes may be added to the protocol | Note: Future Operation attributes may be added to the protocol | |||
| specification that may occur anywhere in the specified group. When | specification that may occur anywhere in the specified group. When | |||
| the operation is otherwise successful, the IPP object returns the | the operation is otherwise successful, the IPP object returns the | |||
| 'successful-ok-ignored-or-substituted-attributes' status code. | 'successful-ok-ignored-or-substituted-attributes' status code. | |||
| Ignoring unsupported Operation attributes in all operations is | Ignoring unsupported Operation attributes in all operations is | |||
| analogous to the handling of unsupported Job Template attributes in | analogous to the handling of unsupported Job Template attributes in | |||
| the create and Validate-Job operations when the client supplies the | the create and Validate-Job operations when the client supplies the | |||
| "ipp-attribute-fidelity" Operation attribute with the 'false' value. | "ipp-attribute-fidelity" Operation attribute with the 'false' value. | |||
| This last rule is so that we can add OPTIONAL Operation attributes to | This last rule is so that we can add OPTIONAL Operation attributes to | |||
| future versions of IPP so that older clients can inter-work with new | future versions of IPP so that older clients can inter-work with new | |||
| IPP objects and newer clients can inter-work with older IPP objects. | IPP objects and newer clients can inter-work with older IPP objects. | |||
| (If the new attribute cannot be ignored without performing | (If the new attribute cannot be ignored without performing | |||
| unexpectedly, the major version number would have been increased in | unexpectedly, the major version number would have been increased in | |||
| the protocol document and in the request). This rule for Operation | the protocol document and in the request). This rule for Operation | |||
| attributes is independent of the value of the "ipp-attribute- | attributes is independent of the value of the "ipp-attribute- | |||
| fidelity" attribute. For example, if an IPP object doesn't support | fidelity" attribute. For example, if an IPP object doesn't support | |||
| the OPTIONAL "job-k-octets" attribute', the IPP object treats "job-k- | the OPTIONAL "job-k-octets" attribute', the IPP object treats "job-k- | |||
| octets" as an unknown attribute and only checks the length for the | octets" as an unknown attribute and only checks the length for the | |||
| 'integer' attribute syntax supplied by the client. If it is not four | 'integer' attribute syntax supplied by the client. If it is not four | |||
| Expires August 12, 1999 | ||||
| octets, the IPP object REJECTS the request and RETURNS the 'client- | octets, the IPP object REJECTS the request and RETURNS the 'client- | |||
| error-bad-request' status code, else the IPP object copies the | error-bad-request' status code, else the IPP object copies the | |||
| attribute to the Unsupported Attribute response group, setting the | attribute to the Unsupported Attribute response group, setting the | |||
| value to the "out-of-band" 'unsupported' value, but otherwise ignores | value to the "out-of-band" 'unsupported' value, but otherwise ignores | |||
| the attribute. | the attribute. | |||
| 2.1.2Suggested Additional Processing Steps for Operations that | 2.2.2Suggested Additional Processing Steps for Operations that | |||
| Create/Validate Jobs and Add Documents | Create/Validate Jobs and Add Documents | |||
| This section in combination with the previous section recommends the | This section in combination with the previous section recommends the | |||
| processing steps for the Print-Job, Validate-Job, Print-URI, Create-Job, | processing steps for the Print-Job, Validate-Job, Print-URI, Create-Job, | |||
| Send-Document, and Send-URI operations that IPP objects SHOULD use. | Send-Document, and Send-URI operations that IPP objects SHOULD use. | |||
| These are the operations that create jobs, validate a Print-Job request, | These are the operations that create jobs, validate a Print-Job request, | |||
| and add documents to a job. | and add documents to a job. | |||
| 2.1.2.1 Default "ipp-attribute-fidelity" if not supplied | 2.2.2.1 Default "ipp-attribute-fidelity" if not supplied | |||
| The Printer object checks to see if the client supplied an "ipp- | The Printer object checks to see if the client supplied an "ipp- | |||
| attribute-fidelity" Operation attribute. If the attribute is not | attribute-fidelity" Operation attribute. If the attribute is not | |||
| supplied by the client, the IPP object assumes that the value is | supplied by the client, the IPP object assumes that the value is | |||
| 'false'. | 'false'. | |||
| 2.1.2.2 Check that the Printer object is accepting jobs | 2.2.2.2 Check that the Printer object is accepting jobs | |||
| If the value of the Printer object's "printer-is-accepting-jobs" is | If the value of the Printer object's "printer-is-accepting-jobs" is | |||
| 'false', the Printer object REJECTS the request and RETURNS the 'server- | 'false', the Printer object REJECTS the request and RETURNS the 'server- | |||
| error-not-accepting-jobs' status code. | error-not-accepting-jobs' status code. | |||
| 2.1.2.3 Validate the values of the Job Template attributes | 2.2.2.3 Validate the values of the Job Template attributes | |||
| An IPP object validates the values of all Job Template attribute | An IPP object validates the values of all Job Template attribute | |||
| supplied by the client. The IPP object performs the analogous syntactic | supplied by the client. The IPP object performs the analogous syntactic | |||
| Expires May 16, 1999 | ||||
| validation checks of each Job Template attribute value that it performs | validation checks of each Job Template attribute value that it performs | |||
| for Operation attributes (see Section 2.1.1.5.): | for Operation attributes (see Section 2.2.1.5.): | |||
| a)that the length of each value is correct for the attribute | a)that the length of each value is correct for the attribute | |||
| syntax tag supplied by the client according to [IPP-MOD] Section | syntax tag supplied by the client according to [IPP-MOD] Section | |||
| 4.1. | 4.1. | |||
| b)that the attribute syntax tag is correct for that attribute | b)that the attribute syntax tag is correct for that attribute | |||
| according to [IPP-MOD] Sections 4.2 to 4.4. | according to [IPP-MOD] Sections 4.2 to 4.4. | |||
| c)that multiple values are supplied only for multi-valued | c)that multiple values are supplied only for multi-valued | |||
| attributes, i.e., that are 1setOf X according to [IPP-MOD] | attributes, i.e., that are 1setOf X according to [IPP-MOD] | |||
| Sections 4.2 to 4.4. | Sections 4.2 to 4.4. | |||
| As in Section 2.1.1.5, if any of these syntactic checks fail, the IPP | As in Section 2.2.1.5, if any of these syntactic checks fail, the IPP | |||
| object REJECTS the request and RETURNS the 'client-error-bad-request' or | object REJECTS the request and RETURNS the 'client-error-bad-request' or | |||
| 'client-error-request-value-too-long' status code as appropriate, | 'client-error-request-value-too-long' status code as appropriate, | |||
| independent of the value of the "ipp-attribute-fidelity". Since such an | independent of the value of the "ipp-attribute-fidelity". Since such an | |||
| error is most likely to be an error detected by a client developer, | error is most likely to be an error detected by a client developer, | |||
| rather than by an end-user, the IPP object NEED NOT return an indication | rather than by an end-user, the IPP object NEED NOT return an indication | |||
| Expires August 12, 1999 | ||||
| of which attribute had the error in either the Unsupported Attributes | of which attribute had the error in either the Unsupported Attributes | |||
| Group or the Status Message. The description for each of these | Group or the Status Message. The description for each of these | |||
| syntactic checks is explicitly expressed in the first IF statement in | syntactic checks is explicitly expressed in the first IF statement in | |||
| the following table. | the following table. | |||
| In addition, the IPP object loops through all the client-supplied Job | Each Job Template attribute MUST occur no more than once. If an IPP | |||
| Template attributes, checking to see if the supplied attribute value(s) | Printer receives a create request with multiple occurrences of a Job | |||
| are supported or in the range supported, i.e., the value of the "xxx" | Template attribute, it MAY: | |||
| attribute in the request is (1) a member of the set of values or is in | ||||
| the range of values of the Printer' objects "xxx-supported" attribute. | 1.reject the operation and return the 'client-error-bad syntax' | |||
| error status code | ||||
| 2.accept the operation and use the first occurrence of the | ||||
| attribute | ||||
| 3.accept the operation and use the last occurrence of the | ||||
| attribute | ||||
| depending on implementation. Therefore, clients MUST NOT supply | ||||
| multiple occurrences of the same Job Template attribute in the Job | ||||
| Attributes group in the request. | ||||
| 2.2.3Algorithm for job validation | ||||
| The process of validating a Job-Template attribute "xxx" against a | ||||
| Printer attribute "xxx-supported" can use the following validation | ||||
| algorithm (see section 3.2.1.2 in [ipp-mod]). | ||||
| To validate the value U of Job-Template attribute "xxx" against the | ||||
| value V of Printer "xxx-supported", perform the following algorithm: | ||||
| 1.If U is multi-valued, validate each value X of U by performing | ||||
| the algorithm in Table 3 with each value X. Each validation is | ||||
| separate from the standpoint of returning unsupported values. | ||||
| Example: If U is "finishings" that the client supplies with | ||||
| 'staple', 'bind' values, then X takes on the successive values: | ||||
| 'staple', then 'bind' | ||||
| 2.If V is multi-valued, validate X against each Z of V by | ||||
| performing the algorithm in Table 3 with each value Z. If a | ||||
| value Z validates, the validation for the attribute value X | ||||
| succeeds. If it fails, the algorithm is applied to the next | ||||
| value Z of V. If there are no more values Z of V, validation | ||||
| fails. | ||||
| Example" If V is "sides-supported" with values: 'one-sided', | ||||
| 'two-sided-long', and 'two-sided-short', then Z takes on the | ||||
| successive values: 'one-sided', 'two-sided-long', and 'two- | ||||
| sided-short'. If the client supplies "sides" with 'two-sided- | ||||
| long', the first comparison fails ('one-sided' is not equal to | ||||
| 'two-sided-long'), the second comparison succeeds ('two-sided- | ||||
| Expires August 12, 1999 | ||||
| long' is equal to 'two-sided-long"), and the third comparison | ||||
| ('two-sided-short' with 'two-sided-long') is not even performed. | ||||
| 3.If both U and V are single-valued, let X be U and Z be V and use | ||||
| the validation rules in Table 3. | ||||
| Table 3 - Rules for validating single values X against Z | ||||
| attribute attribute validated if: | ||||
| syntax of X syntax of Z | ||||
| integer rangeOfInteger X is within the range of | ||||
| Z | ||||
| uri uriScheme the uri scheme in X is | ||||
| equal to Z | ||||
| any boolean the value of Z is TRUE | ||||
| any any X and Z are of the same | ||||
| type and are equal. | ||||
| If the value of the Printer object's "xxx-supported" attribute is 'no- | If the value of the Printer object's "xxx-supported" attribute is 'no- | |||
| value' (because the system administrator hasn't configured a value), the | value' (because the system administrator hasn't configured a value), the | |||
| check always fails. If the check fails, the IPP object copies the | check always fails. If the check fails, the IPP object copies the | |||
| attribute to the Unsupported Attributes response group with its | attribute to the Unsupported Attributes response group with its | |||
| unsupported value. If the attribute contains more than one value, each | unsupported value. If the attribute contains more than one value, each | |||
| value is checked and each unsupported value is separately copied, while | value is checked and each unsupported value is separately copied, while | |||
| supported values are not copied. If an IPP object doesn't | supported values are not copied. If an IPP object doesn't | |||
| recognize/support a Job Template attribute, i.e., there is no | recognize/support a Job Template attribute, i.e., there is no | |||
| corresponding Printer object "xxx-supported" attribute, the IPP object | corresponding Printer object "xxx-supported" attribute, the IPP object | |||
| treats the attribute as an unknown or unsupported attribute (see the | treats the attribute as an unknown or unsupported attribute (see the | |||
| skipping to change at page 22, line 5 ¶ | skipping to change at page 26, line 52 ¶ | |||
| formats, the IPP object SHOULD take that into account in this validation | formats, the IPP object SHOULD take that into account in this validation | |||
| using the value of the "document-format" supplied by the client (or | using the value of the "document-format" supplied by the client (or | |||
| defaulted to the value of the Printer's "document-format-default" | defaulted to the value of the Printer's "document-format-default" | |||
| attribute, if not supplied by the client). For example, if "number-up" | attribute, if not supplied by the client). For example, if "number-up" | |||
| is supported for the 'text/plain' document format, but not for the | is supported for the 'text/plain' document format, but not for the | |||
| 'application/postscript' document format, the check SHOULD (though it | 'application/postscript' document format, the check SHOULD (though it | |||
| NEED NOT) depend on the value of the "document-format" operation | NEED NOT) depend on the value of the "document-format" operation | |||
| attribute. See "document-format" in [IPP-MOD] section 3.2.1.1 and | attribute. See "document-format" in [IPP-MOD] section 3.2.1.1 and | |||
| 3.2.5.1. | 3.2.5.1. | |||
| Expires May 16, 1999 | ||||
| Note: whether the request is accepted or rejected is determined by the | Note: whether the request is accepted or rejected is determined by the | |||
| value of the "ipp-attribute-fidelity" attribute in a subsequent step, so | value of the "ipp-attribute-fidelity" attribute in a subsequent step, so | |||
| that all Job Template attribute supplied are examined and all | that all Job Template attribute supplied are examined and all | |||
| unsupported attributes and/or values are copied to the Unsupported | unsupported attributes and/or values are copied to the Unsupported | |||
| Attributes response group. | Attributes response group. | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| job-priority (integer(1:100)) | job-priority (integer(1:100)) | |||
| Expires August 12, 1999 | ||||
| IF NOT a single 'integer' value with a length equal to 4 octets, | IF NOT a single 'integer' value with a length equal to 4 octets, | |||
| REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT supplied by the client, use the value of the Printer object's | IF NOT supplied by the client, use the value of the Printer object's | |||
| "job-priority-default" attribute at job submission time. | "job-priority-default" attribute at job submission time. | |||
| IF NOT in the range 1 to 100, inclusive, copy the attribute and the | IF NOT in the range 1 to 100, inclusive, copy the attribute and the | |||
| unsupported value to the Unsupported Attributes response group. | unsupported value to the Unsupported Attributes response group. | |||
| Map the value to the nearest supported value in the range 1:100 as | Map the value to the nearest supported value in the range 1:100 as | |||
| specified by the number of discrete values indicated by the value | specified by the number of discrete values indicated by the value | |||
| of the Printer's "job-priority-supported" attribute. See the | of the Printer's "job-priority-supported" attribute. See the | |||
| formula in [IPP-MOD] Section 4.2.1. | formula in [IPP-MOD] Section 4.2.1. | |||
| job-hold-until (type3 keyword | name) | job-hold-until (type3 keyword | name) | |||
| IF NOT a single 'keyword' or 'name' value with a length less than or | IF NOT a single 'keyword' or 'name' value, REJECT/RETURN 'client- | |||
| equal to 255 octets, REJECT/RETURN 'client-error-request-value-too- | error-request-bad-request'. | |||
| long'. | IF the value length is greater than 255 octets, REJECT/RETURN | |||
| 'client-error-request-value-too-long'. | ||||
| IF NOT supplied by the client, use the value of the Printer object's | IF NOT supplied by the client, use the value of the Printer object's | |||
| "job-hold-until" attribute at job submission time. | "job-hold-until" attribute at job submission time. | |||
| IF NOT in the Printer object's "job-hold-until-supported" attribute, | IF NOT in the Printer object's "job-hold-until-supported" attribute, | |||
| copy the attribute and the unsupported value to the Unsupported | copy the attribute and the unsupported value to the Unsupported | |||
| Attributes response group. | Attributes response group. | |||
| job-sheets (type3 keyword | name) | job-sheets (type3 keyword | name) | |||
| IF NOT a single 'keyword' or 'name' value with a length less than or | IF NOT a single 'keyword' or 'name' value, REJECT/RETURN 'client- | |||
| equal to 255 octets, REJECT/RETURN 'client-error-request-value-too- | error-request-bad-request'. | |||
| long'. | IF the value length is greater than 255 octets, REJECT/RETURN | |||
| 'client-error-request-value-too-long'. | ||||
| IF NOT in the Printer object's "job-sheets-supported" attribute, copy | IF NOT in the Printer object's "job-sheets-supported" attribute, copy | |||
| the attribute and the unsupported value to the Unsupported | the attribute and the unsupported value to the Unsupported | |||
| Attributes response group. | Attributes response group. | |||
| multiple-document-handling (type2 keyword) | multiple-document-handling (type2 keyword) | |||
| IF NOT a single 'keyword' value with a length less than or equal to | IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-request- | |||
| 255 octets, REJECT/RETURN 'client-error-request-value-too-long'. | bad-request'. | |||
| IF the value length is greater than 255 octets, REJECT/RETURN | ||||
| 'client-error-request-value-too-long'. | ||||
| IF NOT in the Printer object's "multiple-document-handling-supported" | IF NOT in the Printer object's "multiple-document-handling-supported" | |||
| attribute, copy the attribute and the unsupported value to the | attribute, copy the attribute and the unsupported value to the | |||
| Unsupported Attributes response group. | Unsupported Attributes response group. | |||
| copies (integer(1:MAX)) | copies (integer(1:MAX)) | |||
| IF NOT a single 'integer' value with a length equal to 4 octets, | IF NOT a single 'integer' value with a length equal to 4 octets, | |||
| REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT in range of the Printer object's "copies-supported" attribute | IF NOT in range of the Printer object's "copies-supported" attribute | |||
| Expires May 16, 1999 | ||||
| copy the attribute and the unsupported value to the Unsupported | copy the attribute and the unsupported value to the Unsupported | |||
| Attributes response group. | Attributes response group. | |||
| finishings (1setOf type2 enum) | finishings (1setOf type2 enum) | |||
| Expires August 12, 1999 | ||||
| IF NOT an 'enum' value(s) each with a length equal to 4 octets, | IF NOT an 'enum' value(s) each with a length equal to 4 octets, | |||
| REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT in the Printer object's "finishings-supported" attribute, copy | IF NOT in the Printer object's "finishings-supported" attribute, copy | |||
| the attribute and the unsupported value(s), but not any supported | the attribute and the unsupported value(s), but not any supported | |||
| values, to the Unsupported Attributes response group. | values, to the Unsupported Attributes response group. | |||
| page-ranges (1setOf rangeOfInteger(1:MAX)) | page-ranges (1setOf rangeOfInteger(1:MAX)) | |||
| IF NOT a 'rangeOfInteger' value(s) each with a length equal to 8 | IF NOT a 'rangeOfInteger' value(s) each with a length equal to 8 | |||
| octets, REJECT/RETURN 'client-error-bad-request'. | octets, REJECT/RETURN 'client-error-bad-request'. | |||
| IF first value is greater than second value in any range, the ranges | IF first value is greater than second value in any range, the ranges | |||
| are not in ascending order, or ranges overlap, REJECT/RETURN | are not in ascending order, or ranges overlap, REJECT/RETURN | |||
| 'client-error-bad-request'. | 'client-error-bad-request'. | |||
| IF the value of the Printer object's "page-ranges-supported" | IF the value of the Printer object's "page-ranges-supported" | |||
| attribute is 'false', copy the attribute to the Unsupported | attribute is 'false', copy the attribute to the Unsupported | |||
| Attributes response group and set the value to the "out-of-band" | Attributes response group and set the value to the "out-of-band" | |||
| 'unsupported' value. | 'unsupported' value. | |||
| sides (type2 keyword) | sides (type2 keyword) | |||
| IF NOT a single 'keyword' value with a length less than or equal to | IF NOT a single 'keyword' value, REJECT/RETURN 'client-error-request- | |||
| 255 octets, REJECT/RETURN 'client-error-request-value-too-long'. | bad-request'. | |||
| IF the value length is greater than 255 octets, REJECT/RETURN | ||||
| 'client-error-request-value-too-long'. | ||||
| IF NOT in the Printer object's "sides-supported" attribute, copy the | IF NOT in the Printer object's "sides-supported" attribute, copy the | |||
| attribute and the unsupported value to the Unsupported Attributes | attribute and the unsupported value to the Unsupported Attributes | |||
| response group. | response group. | |||
| number-up (integer(1:MAX)) | number-up (integer(1:MAX)) | |||
| IF NOT a single 'integer' value with a length equal to 4 octets, | IF NOT a single 'integer' value with a length equal to 4 octets, | |||
| REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT a value or in the range of one of the values of the Printer | IF NOT a value or in the range of one of the values of the Printer | |||
| object's "number-up-supported" attribute, copy the attribute and | object's "number-up-supported" attribute, copy the attribute and | |||
| skipping to change at page 23, line 55 ¶ | skipping to change at page 28, line 52 ¶ | |||
| orientation-requested (type2 enum) | orientation-requested (type2 enum) | |||
| IF NOT a single 'enum' value with a length equal to 4 octets, | IF NOT a single 'enum' value with a length equal to 4 octets, | |||
| REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT in the Printer object's "orientation-requested-supported" | IF NOT in the Printer object's "orientation-requested-supported" | |||
| attribute, copy the attribute and the unsupported value to the | attribute, copy the attribute and the unsupported value to the | |||
| Unsupported Attributes response group. | Unsupported Attributes response group. | |||
| media (type3 keyword | name) | media (type3 keyword | name) | |||
| IF NOT a single 'keyword' or 'name' value with a length less than or | IF NOT a single 'keyword' or 'name' value, REJECT/RETURN 'client- | |||
| equal to 255 octets, REJECT/RETURN 'client-error-request-value-too- | error-request-bad-request'. | |||
| long'. | IF the value length is greater than 255 octets, REJECT/RETURN | |||
| 'client-error-request-value-too-long'. | ||||
| Expires May 16, 1999 | ||||
| IF NOT in the Printer object's "media-supported" attribute, copy the | IF NOT in the Printer object's "media-supported" attribute, copy the | |||
| attribute and the unsupported value to the Unsupported Attributes | attribute and the unsupported value to the Unsupported Attributes | |||
| response group. | response group. | |||
| Expires August 12, 1999 | ||||
| printer-resolution (resolution) | printer-resolution (resolution) | |||
| IF NOT a single 'resolution' value with a length equal to 9 octets, | IF NOT a single 'resolution' value with a length equal to 9 octets, | |||
| REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT in the Printer object's "multiple-document-handling-supported" | IF NOT in the Printer object's "printer-resolution-supported" | |||
| attribute, copy the attribute and the unsupported value to the | attribute, copy the attribute and the unsupported value to the | |||
| Unsupported Attributes response group. | Unsupported Attributes response group. | |||
| print-quality (type2 enum) | print-quality (type2 enum) | |||
| IF NOT a single 'enum' value with a length equal to 4 octets, | IF NOT a single 'enum' value with a length equal to 4 octets, | |||
| REJECT/RETURN 'client-error-bad-request'. | REJECT/RETURN 'client-error-bad-request'. | |||
| IF NOT in the Printer object's "print-quality-supported" attribute, | IF NOT in the Printer object's "print-quality-supported" attribute, | |||
| copy the attribute and the unsupported value to the Unsupported | copy the attribute and the unsupported value to the Unsupported | |||
| Attributes response group. | Attributes response group. | |||
| skipping to change at page 25, line 5 ¶ | skipping to change at page 30, line 5 ¶ | |||
| object REJECTS the request and RETURNS the 'client-error-bad-request' if | object REJECTS the request and RETURNS the 'client-error-bad-request' if | |||
| the length of the attribute syntax is fixed or the 'client-error- | the length of the attribute syntax is fixed or the 'client-error- | |||
| request-value-too-long' status code if the length of the attribute | request-value-too-long' status code if the length of the attribute | |||
| syntax is variable. Otherwise, the IPP object copies the unsupported Job | syntax is variable. Otherwise, the IPP object copies the unsupported Job | |||
| Template attribute to the Unsupported Attributes response group and | Template attribute to the Unsupported Attributes response group and | |||
| changes the attribute value to the "out-of-band" 'unsupported' value. | changes the attribute value to the "out-of-band" 'unsupported' value. | |||
| The following table shows the length checks for all attribute syntaxes. | The following table shows the length checks for all attribute syntaxes. | |||
| In the following table: "<=" means less than or equal, "=" means equal | In the following table: "<=" means less than or equal, "=" means equal | |||
| to: | to: | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| Name Octet length check for read-write attributes | Name Octet length check for read-write attributes | |||
| ----------- -------------------------------------------- | ----------- -------------------------------------------- | |||
| 'textWithLanguage <= 1023 AND 'naturalLanguage' <= 63 | 'textWithLanguage <= 1023 AND 'naturalLanguage' <= 63 | |||
| 'textWithoutLanguage' <= 1023 | 'textWithoutLanguage' <= 1023 | |||
| 'nameWithLanguage' <= 255 AND 'naturalLanguage' <= 63 | 'nameWithLanguage' <= 255 AND 'naturalLanguage' <= 63 | |||
| 'nameWithoutLanguage' <= 255 | 'nameWithoutLanguage' <= 255 | |||
| 'keyword' <= 255 | 'keyword' <= 255 | |||
| 'enum' = 4 | 'enum' = 4 | |||
| 'uri' <= 1023 | 'uri' <= 1023 | |||
| 'uriScheme' <= 63 | 'uriScheme' <= 63 | |||
| skipping to change at page 25, line 27 ¶ | skipping to change at page 30, line 27 ¶ | |||
| 'naturalLanguage' <= 63 | 'naturalLanguage' <= 63 | |||
| 'mimeMediaType' <= 255 | 'mimeMediaType' <= 255 | |||
| 'octetString' <= 1023 | 'octetString' <= 1023 | |||
| 'boolean' = 1 | 'boolean' = 1 | |||
| 'integer' = 4 | 'integer' = 4 | |||
| 'rangeOfInteger' = 8 | 'rangeOfInteger' = 8 | |||
| 'dateTime' = 11 | 'dateTime' = 11 | |||
| 'resolution' = 9 | 'resolution' = 9 | |||
| '1setOf X' | '1setOf X' | |||
| 2.1.2.4 Check for conflicting Job Template attributes values | 2.2.3.1 Check for conflicting Job Template attributes values | |||
| Once all the Operation and Job Template attributes have been checked | Once all the Operation and Job Template attributes have been checked | |||
| individually, the Printer object SHOULD check for any conflicting values | individually, the Printer object SHOULD check for any conflicting values | |||
| among all the supported values supplied by the client. For example, a | among all the supported values supplied by the client. For example, a | |||
| Printer object might be able to staple and to print on transparencies, | Printer object might be able to staple and to print on transparencies, | |||
| however due to physical stapling constraints, the Printer object might | however due to physical stapling constraints, the Printer object might | |||
| not be able to staple transparencies. The IPP object copies the | not be able to staple transparencies. The IPP object copies the | |||
| supported attributes and their conflicting attribute values to the | supported attributes and their conflicting attribute values to the | |||
| Unsupported Attributes response group. The Printer object only copies | Unsupported Attributes response group. The Printer object only copies | |||
| over those attributes that the Printer object either ignores or | over those attributes that the Printer object either ignores or | |||
| skipping to change at page 25, line 51 ¶ | skipping to change at page 30, line 51 ¶ | |||
| 'transparency', but the Printer object does not support stapling | 'transparency', but the Printer object does not support stapling | |||
| transparencies. If the Printer chooses to ignore the stapling request | transparencies. If the Printer chooses to ignore the stapling request | |||
| in order to resolve the conflict, the Printer objects returns | in order to resolve the conflict, the Printer objects returns | |||
| "finishings" equal to 'staple' in the Unsupported Attributes response | "finishings" equal to 'staple' in the Unsupported Attributes response | |||
| group. If any attributes are multi-valued, only the conflicting values | group. If any attributes are multi-valued, only the conflicting values | |||
| of the attributes are copied. | of the attributes are copied. | |||
| Note: The decisions made to resolve the conflict (if there is a choice) | Note: The decisions made to resolve the conflict (if there is a choice) | |||
| is implementation dependent. | is implementation dependent. | |||
| 2.1.2.5 Decide whether to REJECT the request | 2.2.3.2 Decide whether to REJECT the request | |||
| If there were any unsupported Job Template attributes or | If there were any unsupported Job Template attributes or | |||
| unsupported/conflicting Job Template attribute values and the client | unsupported/conflicting Job Template attribute values and the client | |||
| supplied the "ipp-attribute-fidelity" attribute with the 'true' value, | supplied the "ipp-attribute-fidelity" attribute with the 'true' value, | |||
| the Printer object REJECTS the request and return the status code: | the Printer object REJECTS the request and return the status code: | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| (1) 'client-error-conflicting-attributes' status code, if there were | (1) 'client-error-conflicting-attributes' status code, if there were | |||
| any conflicts between attributes supplied by the client. | any conflicts between attributes supplied by the client. | |||
| (2) 'client-error-attributes-or-values-not-supported' status code, | (2) 'client-error-attributes-or-values-not-supported' status code, | |||
| otherwise. | otherwise. | |||
| Note: Unsupported Operation attributes or values that are returned do | Note: Unsupported Operation attributes or values that are returned do | |||
| not affect the status returned in this step. If the unsupported | not affect the status returned in this step. If the unsupported | |||
| Operation attribute was a serious error, the above already rejected the | Operation attribute was a serious error, the above already rejected the | |||
| request in a previous step. If control gets to this step with | request in a previous step. If control gets to this step with | |||
| unsupported Operation attributes being returned, they are not serious | unsupported Operation attributes being returned, they are not serious | |||
| errors. | errors. | |||
| 2.1.2.6 For the Validate-Job operation, RETURN one of the success | 2.2.3.3 For the Validate-Job operation, RETURN one of the success | |||
| status codes | status codes | |||
| If the requested operation is the Validate-Job operation, the Printer | If the requested operation is the Validate-Job operation, the Printer | |||
| object returns: | object returns: | |||
| (1) the "successful-ok" status code, if there are no unsupported or | (1) the "successful-ok" status code, if there are no unsupported or | |||
| conflicting Job Template attributes or values. | conflicting Job Template attributes or values. | |||
| (2) the "successful-ok-conflicting-attributes, if there are any | (2) the "successful-ok-conflicting-attributes, if there are any | |||
| conflicting Job Template attribute or values. | conflicting Job Template attribute or values. | |||
| (3) the "successful-ok-ignored-or-substituted-attributes, if there | (3) the "successful-ok-ignored-or-substituted-attributes, if there | |||
| are only unsupported Job Template attributes or values. | are only unsupported Job Template attributes or values. | |||
| Note: Unsupported Operation attributes or values that are returned do | Note: Unsupported Operation attributes or values that are returned do | |||
| not affect the status returned in this step. If the unsupported | not affect the status returned in this step. If the unsupported | |||
| Operation attribute was a serious error, the above already rejected the | Operation attribute was a serious error, the above already rejected the | |||
| request in a previous step. If control gets to this step with | request in a previous step. If control gets to this step with | |||
| unsupported Operation attributes being returned, they are not serious | unsupported Operation attributes being returned, they are not serious | |||
| errors. | errors. | |||
| 2.1.2.7 Create the Job object with attributes to support | 2.2.3.4 Create the Job object with attributes to support | |||
| If "ipp-attribute-fidelity" is set to 'false' (or it was not supplied by | If "ipp-attribute-fidelity" is set to 'false' (or it was not supplied by | |||
| the client), the Printer object: | the client), the Printer object: | |||
| (1) creates a Job object, assigns a unique value to the job's "job- | (1) creates a Job object, assigns a unique value to the job's "job- | |||
| uri" and "job-id" attributes, and initializes all of the job's | uri" and "job-id" attributes, and initializes all of the job's | |||
| other supported Job Description attributes. | other supported Job Description attributes. | |||
| (2) removes all unsupported attributes from the Job object. | (2) removes all unsupported attributes from the Job object. | |||
| (3) for each unsupported value, removes either the unsupported value | (3) for each unsupported value, removes either the unsupported value | |||
| or substitutes the unsupported attribute value with some supported | or substitutes the unsupported attribute value with some supported | |||
| value. If an attribute has no values after removing unsupported | value. If an attribute has no values after removing unsupported | |||
| values from it, the attribute is removed from the Job object (so | values from it, the attribute is removed from the Job object (so | |||
| that the normal default behavior at job processing time will take | that the normal default behavior at job processing time will take | |||
| place for that attribute). | place for that attribute). | |||
| (4) for each conflicting value, removes either the conflicting value | (4) for each conflicting value, removes either the conflicting value | |||
| or substitutes the conflicting attribute value with some other | or substitutes the conflicting attribute value with some other | |||
| supported value. If an attribute has no values after removing | supported value. If an attribute has no values after removing | |||
| conflicting values from it, the attribute is removed from the Job | conflicting values from it, the attribute is removed from the Job | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| object (so that the normal default behavior at job processing time | object (so that the normal default behavior at job processing time | |||
| will take place for that attribute). | will take place for that attribute). | |||
| If there were no attributes or values flagged as unsupported, or the | If there were no attributes or values flagged as unsupported, or the | |||
| value of 'ipp-attribute-fidelity" was 'false', the Printer object is | value of 'ipp-attribute-fidelity" was 'false', the Printer object is | |||
| able to accept the create request and create a new Job object. If the | able to accept the create request and create a new Job object. If the | |||
| "ipp-attribute-fidelity" attribute is set to 'true', the Job Template | "ipp-attribute-fidelity" attribute is set to 'true', the Job Template | |||
| attributes that populate the new Job object are necessarily all the Job | attributes that populate the new Job object are necessarily all the Job | |||
| Template attributes supplied in the create request. If the "ipp- | Template attributes supplied in the create request. If the "ipp- | |||
| attribute-fidelity" attribute is set to 'false', the Job Template | attribute-fidelity" attribute is set to 'false', the Job Template | |||
| skipping to change at page 28, line 5 ¶ | skipping to change at page 33, line 5 ¶ | |||
| default value mechanism. A default value for an attribute is used only | default value mechanism. A default value for an attribute is used only | |||
| if the create request did not specify that attribute (or it was ignored | if the create request did not specify that attribute (or it was ignored | |||
| when allowed by "ipp-attribute-fidelity" being 'false') and no value was | when allowed by "ipp-attribute-fidelity" being 'false') and no value was | |||
| provided within the content of the document data. | provided within the content of the document data. | |||
| If the client does not supply a value for some Job Template attribute, | If the client does not supply a value for some Job Template attribute, | |||
| and the Printer does not support that attribute, as far as IPP is | and the Printer does not support that attribute, as far as IPP is | |||
| concerned, the result of processing that Job (with respect to the | concerned, the result of processing that Job (with respect to the | |||
| missing attribute) is undefined. | missing attribute) is undefined. | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| 2.1.2.8 Return one of the success status codes | 2.2.3.5 Return one of the success status codes | |||
| Once the Job object has been created, the Printer object accepts the | Once the Job object has been created, the Printer object accepts the | |||
| request and returns to the client: | request and returns to the client: | |||
| (1) the 'successful-ok' status code, if there are no unsupported or | (1) the 'successful-ok' status code, if there are no unsupported or | |||
| conflicting Job Template attributes or values. | conflicting Job Template attributes or values. | |||
| (2) the 'successful-ok-conflicting-attributes' status code, if there | (2) the 'successful-ok-conflicting-attributes' status code, if there | |||
| are any conflicting Job Template attribute or values. | are any conflicting Job Template attribute or values. | |||
| (3) the 'successful-ok-ignored-or-substituted-attributes' status | (3) the 'successful-ok-ignored-or-substituted-attributes' status | |||
| code, if there are only unsupported Job Template attributes or | code, if there are only unsupported Job Template attributes or | |||
| skipping to change at page 28, line 30 ¶ | skipping to change at page 33, line 30 ¶ | |||
| not affect the status returned in this step. If the unsupported | not affect the status returned in this step. If the unsupported | |||
| Operation attribute was a serious error, the above already rejected the | Operation attribute was a serious error, the above already rejected the | |||
| request in a previous step. If control gets to this step with | request in a previous step. If control gets to this step with | |||
| unsupported Operation attributes being returned, they are not serious | unsupported Operation attributes being returned, they are not serious | |||
| errors. | errors. | |||
| The Printer object also returns Job status attributes that indicate the | The Printer object also returns Job status attributes that indicate the | |||
| initial state of the Job ('pending', 'pending-held', 'processing', | initial state of the Job ('pending', 'pending-held', 'processing', | |||
| etc.), etc. See Print-Job Response, [IPP-MOD] section 3.2.1.2. | etc.), etc. See Print-Job Response, [IPP-MOD] section 3.2.1.2. | |||
| 2.1.2.9 Accept appended Document Content | 2.2.3.6 Accept appended Document Content | |||
| The Printer object accepts the appended Document Content data and either | The Printer object accepts the appended Document Content data and either | |||
| starts it printing, or spools it for later processing. | starts it printing, or spools it for later processing. | |||
| 2.1.2.10 Scheduling and Starting to Process the Job | 2.2.3.7 Scheduling and Starting to Process the Job | |||
| The Printer object uses its own configuration and implementation | The Printer object uses its own configuration and implementation | |||
| specific algorithms for scheduling the Job in the correct processing | specific algorithms for scheduling the Job in the correct processing | |||
| order. Once the Printer object begins processing the Job, the Printer | order. Once the Printer object begins processing the Job, the Printer | |||
| changes the Job's state to 'processing'. If the Printer object supports | changes the Job's state to 'processing'. If the Printer object supports | |||
| PDL override (the "pdl-override-supported" attribute set to | PDL override (the "pdl-override-supported" attribute set to | |||
| 'attempted'), the implementation does its best to see that IPP | 'attempted'), the implementation does its best to see that IPP | |||
| attributes take precedence over embedded instructions in the document | attributes take precedence over embedded instructions in the document | |||
| data. | data. | |||
| 2.1.2.11 Completing the Job | 2.2.3.8 Completing the Job | |||
| The Printer object continues to process the Job until it can move the | The Printer object continues to process the Job until it can move the | |||
| Job into the 'completed' state. If an Cancel-Job operation is received, | Job into the 'completed' state. If an Cancel-Job operation is received, | |||
| the implementation eventually moves the Job into the 'canceled' state. | the implementation eventually moves the Job into the 'canceled' state. | |||
| If the system encounters errors during processing that do not allow it | If the system encounters errors during processing that do not allow it | |||
| to progress the Job into a completed state, the implementation halts all | to progress the Job into a completed state, the implementation halts all | |||
| processing, cleans up any resources, and moves the Job into the | processing, cleans up any resources, and moves the Job into the | |||
| 'aborted' state. | 'aborted' state. | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| 2.1.2.12 Destroying the Job after completion | 2.2.3.9 Destroying the Job after completion | |||
| Once the Job moves to the 'completed', 'aborted', or 'canceled' state, | Once the Job moves to the 'completed', 'aborted', or 'canceled' state, | |||
| it is an implementation decision as to when to destroy the Job object | it is an implementation decision as to when to destroy the Job object | |||
| and release all associated resources. Once the Job has been destroyed, | and release all associated resources. Once the Job has been destroyed, | |||
| the Printer would return either the "client-error-not-found" or "client- | the Printer would return either the "client-error-not-found" or "client- | |||
| error-gone" status codes for operations directed at that Job. | error-gone" status codes for operations directed at that Job. | |||
| Note: the Printer object SHOULD NOT re-use a "job-uri" or "job-id" | Note: the Printer object SHOULD NOT re-use a "job-uri" or "job-id" | |||
| value for a sufficiently long time after a job has been destroyed, so | value for a sufficiently long time after a job has been destroyed, so | |||
| that stale references kept by clients are less likely to access the | that stale references kept by clients are less likely to access the | |||
| wrong (newer) job. | wrong (newer) job. | |||
| 2.1.2.13 Interaction with "ipp-attribute-fidelity" | 2.2.3.10 Interaction with "ipp-attribute-fidelity" | |||
| Some Printer object implementations may support "ipp-attribute-fidelity" | Some Printer object implementations may support "ipp-attribute-fidelity" | |||
| set to 'true' and "pdl-override-supported" set to 'attempted' and yet | set to 'true' and "pdl-override-supported" set to 'attempted' and yet | |||
| still not be able to realize exactly what the client specifies in the | still not be able to realize exactly what the client specifies in the | |||
| create request. This is due to legacy decisions and assumptions that | create request. This is due to legacy decisions and assumptions that | |||
| have been made about the role of job instructions embedded within the | have been made about the role of job instructions embedded within the | |||
| document data and external job instructions that accompany the document | document data and external job instructions that accompany the document | |||
| data and how to handle conflicts between such instructions. The | data and how to handle conflicts between such instructions. The | |||
| inability to be 100% precise about how a given implementation will | inability to be 100% precise about how a given implementation will | |||
| behave is also compounded by the fact that the two special attributes, | behave is also compounded by the fact that the two special attributes, | |||
| "ipp-attribute-fidelity" and "pdl-override-supported", apply to the | "ipp-attribute-fidelity" and "pdl-override-supported", apply to the | |||
| whole job rather than specific values for each attribute. For example, | whole job rather than specific values for each attribute. For example, | |||
| some implementations may be able to override almost all Job Template | some implementations may be able to override almost all Job Template | |||
| attributes except for "number-up". | attributes except for "number-up". | |||
| 2.2 Status codes returned by operation | 2.3 Status codes returned by operation (Issue 1.50) | |||
| This section lists all status codes once in the first operation (Print- | This section lists all status codes once in the first operation (Print- | |||
| Job). Then it lists the status codes that are different or specialized | Job). Then it lists the status codes that are different or specialized | |||
| for subsequent operations under each operation. | for subsequent operations under each operation. | |||
| 2.2.1Printer Operations | 2.3.1Printer Operations | |||
| 2.2.1.1 Print-Job | 2.3.1.1 Print-Job | |||
| The Printer object MUST return one of the following "status-code" values | The Printer object MUST return one of the following "status-code" values | |||
| for the indicated reason. Whether all of the document data has been | for the indicated reason. Whether all of the document data has been | |||
| accepted or not before returning the success or error response depends | accepted or not before returning the success or error response depends | |||
| on implementation. See Section 14 for a more complete description of | on implementation. See Section 14 for a more complete description of | |||
| each status code. | each status code. | |||
| For the following success status codes, the Job object has been created | For the following success status codes, the Job object has been created | |||
| and the "job-id", and "job-uri" assigned and returned in the response: | and the "job-id", and "job-uri" assigned and returned in the response: | |||
| successful-ok: no request attributes were substituted or ignored. | successful-ok: no request attributes were substituted or ignored. | |||
| successful-ok-ignored-or-substituted-attributes: some supplied (1) | successful-ok-ignored-or-substituted-attributes: some supplied (1) | |||
| attributes were ignored or (2) unsupported attribute syntaxes or | attributes were ignored or (2) unsupported attribute syntaxes or | |||
| values were substituted with supported values or were ignored. | values were substituted with supported values or were ignored. | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| Unsupported attributes, attribute syntaxes, or values MUST be | Unsupported attributes, attribute syntaxes, or values MUST be | |||
| returned in the Unsupported Attributes group of the response. | returned in the Unsupported Attributes group of the response. | |||
| successful-ok-conflicting-attributes: some supplied attribute values | successful-ok-conflicting-attributes: some supplied attribute values | |||
| conflicted with the values of other supplied attributes and were | conflicted with the values of other supplied attributes and were | |||
| either substituted or ignored. Attributes or values which conflict | either substituted or ignored. Attributes or values which conflict | |||
| with other attributes and have been substituted or ignored MUST be | with other attributes and have been substituted or ignored MUST be | |||
| returned in the Unsupported Attributes group of the response as | returned in the Unsupported Attributes group of the response as | |||
| supplied by the client. | supplied by the client. | |||
| [ipp-mod] section 3.1.6 Operation Status Codes and Messages states | ||||
| (Issue 1.19): | ||||
| If the Printer object supports the "status-message" operation | ||||
| attribute, it SHOULD use the REQUIRED 'utf-8' charset to return a | ||||
| status message for the following error status codes (see section | ||||
| 14): 'client-error-bad-request', 'client-error-charset-not- | ||||
| supported', 'server-error-internal-error', 'server-error-operation- | ||||
| not-supported', and 'server-error-version-not-supported'. In this | ||||
| case, it MUST set the value of the "attributes-charset" operation | ||||
| attribute to 'utf-8' in the error response. | ||||
| For the following error status codes, no job is created and no "job-id" | For the following error status codes, no job is created and no "job-id" | |||
| or "job-uri" is returned: | or "job-uri" is returned: | |||
| client-error-bad-request: The request syntax does not conform to the | client-error-bad-request: The request syntax does not conform to the | |||
| specification. The IPP object SHOULD NOT return the "status- | specification. | |||
| message" operation attributes, if supported, if the "attributes- | ||||
| charset" in the request has not been processed. | ||||
| client-error-forbidden: The request is being refused for | client-error-forbidden: The request is being refused for | |||
| authorization or authentication reasons. The implementation | authorization or authentication reasons. The implementation | |||
| security policy is to not reveal whether the failure is one of | security policy is to not reveal whether the failure is one of | |||
| authentication or authorization. | authentication or authorization. | |||
| client-error-not-authenticated: Either the request requires | client-error-not-authenticated: Either the request requires | |||
| authentication information to be supplied or the authentication | authentication information to be supplied or the authentication | |||
| information is not sufficient for authorization. | information is not sufficient for authorization. | |||
| client-error-not-authorized: The requester is not authorized to | client-error-not-authorized: The requester is not authorized to | |||
| perform the request on the target object. | perform the request on the target object. | |||
| client-error-not-possible: The request cannot be carried out because | client-error-not-possible: The request cannot be carried out because | |||
| skipping to change at page 30, line 50 ¶ | skipping to change at page 36, line 4 ¶ | |||
| and/or print data exceeds the capacity of the IPP Printer to | and/or print data exceeds the capacity of the IPP Printer to | |||
| process it. | process it. | |||
| client-error-request-value-too-long: the size of request variable | client-error-request-value-too-long: the size of request variable | |||
| length attribute values, such as 'text' and 'name' attribute | length attribute values, such as 'text' and 'name' attribute | |||
| syntaxes, exceed the maximum length specified in [IPP-MOD] for the | syntaxes, exceed the maximum length specified in [IPP-MOD] for the | |||
| attribute and MUST be returned in the Unsupported Attributes Group. | attribute and MUST be returned in the Unsupported Attributes Group. | |||
| client-error-document-format-not-supported: the document format | client-error-document-format-not-supported: the document format | |||
| supplied is not supported. The "document-format" attribute with | supplied is not supported. The "document-format" attribute with | |||
| the unsupported value MUST be returned in the Unsupported | the unsupported value MUST be returned in the Unsupported | |||
| Attributes Group. This error SHOULD take precedence over any other | Attributes Group. This error SHOULD take precedence over any other | |||
| Expires August 12, 1999 | ||||
| 'xxx-not-supported' error, except 'client-error-charset-not- | 'xxx-not-supported' error, except 'client-error-charset-not- | |||
| supported'. | supported'. | |||
| client-error-attributes-or-values-not-supported: one or more | client-error-attributes-or-values-not-supported: one or more | |||
| supplied attributes, attribute syntaxes, or values are not | supplied attributes, attribute syntaxes, or values are not | |||
| supported and the client supplied the "ipp-attributes-fidelity" | supported and the client supplied the "ipp-attributes-fidelity" | |||
| operation attribute with a 'true' value. They MUST be returned in | operation attribute with a 'true' value. They MUST be returned in | |||
| the Unsupported Attributes Group as explained below. | the Unsupported Attributes Group as explained below. | |||
| client-error-uri-scheme-not-supported: not applicable. | client-error-uri-scheme-not-supported: not applicable. | |||
| client-error-charset-not-supported: the charset supplied in the | client-error-charset-not-supported: the charset supplied in the | |||
| "attributes-charset" operation attribute is not supported. The | "attributes-charset" operation attribute is not supported. The | |||
| Expires May 16, 1999 | ||||
| Printer's "configured-charset" MUST be returned in the response as | Printer's "configured-charset" MUST be returned in the response as | |||
| the value of the "attributes-charset" operation attribute and used | the value of the "attributes-charset" operation attribute and used | |||
| for any 'text' and 'name' attributes returned in the error | for any 'text' and 'name' attributes returned in the error | |||
| response. This error SHOULD take precedence over any other error, | response. This error SHOULD take precedence over any other error, | |||
| unless the request syntax is so bad that the client's supplied | unless the request syntax is so bad that the client's supplied | |||
| "attributes-charset" cannot be determined. | "attributes-charset" cannot be determined. | |||
| client-error-conflicting-attributes: one or more supplied attribute | client-error-conflicting-attributes: one or more supplied attribute | |||
| values conflicted with each other and the client supplied the "ipp- | values conflicted with each other and the client supplied the "ipp- | |||
| attributes-fidelity" operation attribute with a 'true' value. They | attributes-fidelity" operation attribute with a 'true' value. They | |||
| MUST be returned in the Unsupported Attributes Group as explained | MUST be returned in the Unsupported Attributes Group as explained | |||
| skipping to change at page 31, line 39 ¶ | skipping to change at page 36, line 49 ¶ | |||
| server-error-temporary-error: a temporary error such as a buffer | server-error-temporary-error: a temporary error such as a buffer | |||
| full write error, a memory overflow, or a disk full condition | full write error, a memory overflow, or a disk full condition | |||
| occurred while receiving the request and/or the document data. | occurred while receiving the request and/or the document data. | |||
| server-error-not-accepting-jobs: the Printer object's "printer-is- | server-error-not-accepting-jobs: the Printer object's "printer-is- | |||
| not-accepting-jobs" attribute is 'false'. | not-accepting-jobs" attribute is 'false'. | |||
| server-error-busy: the Printer is too busy processing jobs to accept | server-error-busy: the Printer is too busy processing jobs to accept | |||
| another job at this time. | another job at this time. | |||
| server-error-job-canceled: the job has been canceled by an operator | server-error-job-canceled: the job has been canceled by an operator | |||
| or the system while the client was transmitting the document data. | or the system while the client was transmitting the document data. | |||
| 2.2.1.2 Print-URI | 2.3.1.2 Print-URI | |||
| All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | |||
| Response are applicable to Print-URI with the following specializations | Response are applicable to Print-URI with the following specializations | |||
| and differences. See Section 14 for a more complete description of each | and differences. See Section 14 for a more complete description of each | |||
| status code. | status code. | |||
| server-error-uri-scheme-not-supported: the URI scheme supplied in | server-error-uri-scheme-not-supported: the URI scheme supplied in | |||
| the "document-uri" operation attribute is not supported and is | the "document-uri" operation attribute is not supported and is | |||
| returned in the Unsupported Attributes group. | returned in the Unsupported Attributes group. | |||
| 2.2.1.3 Validate-Job | Expires August 12, 1999 | |||
| 2.3.1.3 Validate-Job | ||||
| All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | |||
| Response are applicable to Validate-Job. See Section 14 for a more | Response are applicable to Validate-Job. See Section 14 for a more | |||
| complete description of each status code. | complete description of each status code. | |||
| 2.2.1.4 Create-Job | 2.3.1.4 Create-Job | |||
| All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | |||
| Response are applicable to Create-Job with the following specializations | Response are applicable to Create-Job with the following specializations | |||
| Expires May 16, 1999 | ||||
| and differences. See Section 14 for a more complete description of each | and differences. See Section 14 for a more complete description of each | |||
| status code. | status code. | |||
| server-error-operation-not-supported: the Create-Job operation is | server-error-operation-not-supported: the Create-Job operation is | |||
| not supported. | not supported. | |||
| 2.2.1.5 Get-Printer-Attributes | 2.3.1.5 Get-Printer-Attributes | |||
| All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | |||
| Response are applicable to the Get-Printer-Attributes operation with the | Response are applicable to the Get-Printer-Attributes operation with the | |||
| following specializations and differences. See Section 14 for a more | following specializations and differences. See Section 14 for a more | |||
| complete description of each status code. | complete description of each status code. | |||
| For the following success status codes, the requested attributes are | For the following success status codes, the requested attributes are | |||
| returned in Group 3 in the response: | returned in Group 3 in the response: | |||
| successful-ok: no request attributes were substituted or ignored | successful-ok: no request attributes were substituted or ignored | |||
| skipping to change at page 32, line 52 ¶ | skipping to change at page 38, line 5 ¶ | |||
| Printer-Attributes is REQUIRED). | Printer-Attributes is REQUIRED). | |||
| server-error-device-error: same as Print-Job, except that no | server-error-device-error: same as Print-Job, except that no | |||
| document data is involved. | document data is involved. | |||
| server-error-temporary-error: same as Print-Job, except that no | server-error-temporary-error: same as Print-Job, except that no | |||
| document data is involved. | document data is involved. | |||
| server-error-not-accepting-jobs: not applicable.. | server-error-not-accepting-jobs: not applicable.. | |||
| server-error-busy: same as Print-Job, except the IPP object is too | server-error-busy: same as Print-Job, except the IPP object is too | |||
| busy to accept even query requests. | busy to accept even query requests. | |||
| server-error-job-canceled: not applicable.. | server-error-job-canceled: not applicable.. | |||
| 2.2.1.6 Get-Jobs | Expires August 12, 1999 | |||
| 2.3.1.6 Get-Jobs | ||||
| All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | |||
| Response are applicable to the Get-Jobs operation with the following | Response are applicable to the Get-Jobs operation with the following | |||
| specializations and differences. See Section 14 for a more complete | specializations and differences. See Section 14 for a more complete | |||
| description of each status code. | description of each status code. | |||
| For the following success status codes, the requested attributes are | For the following success status codes, the requested attributes are | |||
| returned in Group 3 in the response: | returned in Group 3 in the response: | |||
| Expires May 16, 1999 | ||||
| successful-ok: no request attributes were substituted or ignored | successful-ok: no request attributes were substituted or ignored | |||
| (same as Print-Job) and no requested attributes were unsupported. | (same as Print-Job) and no requested attributes were unsupported. | |||
| successful-ok-ignored-or-substituted-attributes: same as Print-Job, | successful-ok-ignored-or-substituted-attributes: same as Print-Job, | |||
| except the "requested-attributes" operation attribute MAY, but NEED | except the "requested-attributes" operation attribute MAY, but NEED | |||
| NOT, be returned with the unsupported values. | NOT, be returned with the unsupported values. | |||
| successful-ok-conflicting-attributes: same as Print-Job. | successful-ok-conflicting-attributes: same as Print-Job. | |||
| For any error status codes, Group 3 is returned containing no attributes | For any error status codes, Group 3 is returned containing no attributes | |||
| or is not returned at all. The following brief error status code | or is not returned at all. The following brief error status code | |||
| descriptions contain unique information for use with Get-Jobs operation. | descriptions contain unique information for use with Get-Jobs operation. | |||
| skipping to change at page 33, line 38 ¶ | skipping to change at page 38, line 49 ¶ | |||
| "ipp-attribute-fidelity" is not involved. | "ipp-attribute-fidelity" is not involved. | |||
| server-error-operation-not-supported: not applicable (since Get-Jobs | server-error-operation-not-supported: not applicable (since Get-Jobs | |||
| is REQUIRED). | is REQUIRED). | |||
| server-error-device-error: same as Print-Job, except that no | server-error-device-error: same as Print-Job, except that no | |||
| document data is involved. | document data is involved. | |||
| server-error-temporary-error: same as Print-Job, except that no | server-error-temporary-error: same as Print-Job, except that no | |||
| document data is involved. | document data is involved. | |||
| server-error-not-accepting-jobs: not applicable. | server-error-not-accepting-jobs: not applicable. | |||
| server-error-job-canceled: not applicable. | server-error-job-canceled: not applicable. | |||
| 2.2.2Job Operations | 2.3.2Job Operations | |||
| 2.2.2.1 Send-Document | 2.3.2.1 Send-Document | |||
| All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | |||
| Response are applicable to the Get-Printer-Attributes operation with the | Response are applicable to the Get-Printer-Attributes operation with the | |||
| following specializations and differences. See Section 14 for a more | following specializations and differences. See Section 14 for a more | |||
| complete description of each status code. | complete description of each status code. | |||
| For the following success status codes, the document has been added to | For the following success status codes, the document has been added to | |||
| the specified Job object and the job's "number-of-documents" attribute | the specified Job object and the job's "number-of-documents" attribute | |||
| has been incremented: | has been incremented: | |||
| Expires August 12, 1999 | ||||
| successful-ok: no request attributes were substituted or ignored | successful-ok: no request attributes were substituted or ignored | |||
| (same as Print-Job). | (same as Print-Job). | |||
| successful-ok-ignored-or-substituted-attributes: same as Print-Job. | successful-ok-ignored-or-substituted-attributes: same as Print-Job. | |||
| successful-ok-conflicting-attributes: same as Print-Job. | successful-ok-conflicting-attributes: same as Print-Job. | |||
| For the error status codes, no document has been added to the Job object | For the error status codes, no document has been added to the Job object | |||
| and the job's "number-of-documents" attribute has not been incremented: | and the job's "number-of-documents" attribute has not been incremented: | |||
| client-error-not-possible: Same as Print-Job, except that the | client-error-not-possible: Same as Print-Job, except that the | |||
| Printer's "printer-is-accepting-jobs" attribute is not involved, so | Printer's "printer-is-accepting-jobs" attribute is not involved, so | |||
| that the client is able to finish submitting a multi-document job | that the client is able to finish submitting a multi-document job | |||
| Expires May 16, 1999 | ||||
| after this attribute has been set to 'true'. Another condition is | after this attribute has been set to 'true'. Another condition is | |||
| that the state of the job precludes Send-Document, i.e., the job | that the state of the job precludes Send-Document, i.e., the job | |||
| has already been closed out by the client. However, if the IPP | has already been closed out by the client. However, if the IPP | |||
| Printer closed out the job due to timeout, the 'client-error- | Printer closed out the job due to timeout, the 'client-error- | |||
| timeout' error status SHOULD be returned instead. | timeout' error status SHOULD be returned instead. | |||
| client-error-timeout: This request was sent after the Printer closed | client-error-timeout: This request was sent after the Printer closed | |||
| the job, because it has not received a Send-Document or Send-URI | the job, because it has not received a Send-Document or Send-URI | |||
| operation within the Printer's "multiple-operation-time-out" period | operation within the Printer's "multiple-operation-time-out" period | |||
| . | . | |||
| client-error-request-entity-too-large: same as Print-Job. | client-error-request-entity-too-large: same as Print-Job. | |||
| client-error-conflicting-attributes: same as Print-Job, except that | client-error-conflicting-attributes: same as Print-Job, except that | |||
| "ipp-attributes-fidelity" operation attribute is not involved.. | "ipp-attributes-fidelity" operation attribute is not involved.. | |||
| server-error-operation-not-supported: the Send-Document request is | server-error-operation-not-supported: the Send-Document request is | |||
| not supported. | not supported. | |||
| server-error-not-accepting-jobs: not applicable. | server-error-not-accepting-jobs: not applicable. | |||
| server-error-job-canceled: the job has been canceled by an operator | server-error-job-canceled: the job has been canceled by an operator | |||
| or the system while the client was transmitting the data. | or the system while the client was transmitting the data. | |||
| 2.2.2.2 Send-URI | 2.3.2.2 Send-URI | |||
| All of the Print-Job status code descriptions in Section 3.2.1.2 Print- | All of the Print-Job status code descriptions in Section 3.2.1.2 Print- | |||
| Job Response with the specializations described for Send-Document are | Job Response with the specializations described for Send-Document are | |||
| applicable to Send-URI. See Section 14 for a more complete description | applicable to Send-URI. See Section 14 for a more complete description | |||
| of each status code. | of each status code. | |||
| server-error-uri-scheme-not-supported: the URI scheme supplied in | server-error-uri-scheme-not-supported: the URI scheme supplied in | |||
| the "document-uri" operation attribute is not supported and the | the "document-uri" operation attribute is not supported and the | |||
| "document-uri" attribute MUST be returned in the Unsupported | "document-uri" attribute MUST be returned in the Unsupported | |||
| Attributes group. | Attributes group. | |||
| 2.2.2.3 Cancel-Job | 2.3.2.3 Cancel-Job | |||
| All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | |||
| Response are applicable to Cancel-Job with the following specializations | Response are applicable to Cancel-Job with the following specializations | |||
| and differences. See Section 14 for a more complete description of each | and differences. See Section 14 for a more complete description of each | |||
| status code. | status code. | |||
| For the following success status codes, the Job object is being canceled | For the following success status codes, the Job object is being canceled | |||
| or has been canceled: | or has been canceled: | |||
| successful-ok: no request attributes were substituted or ignored | successful-ok: no request attributes were substituted or ignored | |||
| (same as Print-Job). | (same as Print-Job). | |||
| successful-ok-ignored-or-substituted-attributes: same as Print-Job. | successful-ok-ignored-or-substituted-attributes: same as Print-Job. | |||
| successful-ok-conflicting-attributes: same as Print-Job. | successful-ok-conflicting-attributes: same as Print-Job. | |||
| Expires August 12, 1999 | ||||
| For any of the error status codes, the Job object has not been canceled | For any of the error status codes, the Job object has not been canceled | |||
| or was previously canceled. | or was previously canceled. | |||
| client-error-not-possible: The request cannot be carried out because | client-error-not-possible: The request cannot be carried out because | |||
| of the state of the Job object ('completed', 'canceled', or | of the state of the Job object ('completed', 'canceled', or | |||
| 'aborted') or the state of the system. | 'aborted') or the state of the system. | |||
| client-error-not-found: the target Printer and/or Job object does | client-error-not-found: the target Printer and/or Job object does | |||
| not exist. | not exist. | |||
| client-error-gone: the target Printer and/or Job object no longer | client-error-gone: the target Printer and/or Job object no longer | |||
| exists and no forwarding address is known. | exists and no forwarding address is known. | |||
| Expires May 16, 1999 | ||||
| client-error-request-entity-too-large: same as Print-Job, except no | client-error-request-entity-too-large: same as Print-Job, except no | |||
| document data is involved. | document data is involved. | |||
| client-error-document-format-not-supported: not applicable. | client-error-document-format-not-supported: not applicable. | |||
| client-error-attributes-or-values-not-supported: not applicable, | client-error-attributes-or-values-not-supported: not applicable, | |||
| since unsupported operation attributes and values MUST be ignored. | since unsupported operation attributes and values MUST be ignored. | |||
| client-error-conflicting-attributes: same as Print-Job, except that | client-error-conflicting-attributes: same as Print-Job, except that | |||
| the Printer's "printer-is-accepting-jobs" attribute is not | the Printer's "printer-is-accepting-jobs" attribute is not | |||
| involved. | involved. | |||
| server-error-operation-not-supported: not applicable (Cancel-Job is | server-error-operation-not-supported: not applicable (Cancel-Job is | |||
| REQUIRED). | REQUIRED). | |||
| server-error-device-error: same as Print-Job, except no document | server-error-device-error: same as Print-Job, except no document | |||
| data is involved. | data is involved. | |||
| server-error-temporary-error: same as Print-Job, except no document | server-error-temporary-error: same as Print-Job, except no document | |||
| data is involved. | data is involved. | |||
| server-error-not-accepting-jobs: not applicable.. | server-error-not-accepting-jobs: not applicable.. | |||
| server-error-job-canceled: not applicable. | server-error-job-canceled: not applicable. | |||
| 2.2.2.4 Get-Job-Attributes | 2.3.2.4 Get-Job-Attributes | |||
| All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | All of the Print-Job status codes described in Section 3.2.1.2 Print-Job | |||
| Response are applicable to Get-Job-Attributes with the following | Response are applicable to Get-Job-Attributes with the following | |||
| specializations and differences. See Section 14 for a more complete | specializations and differences. See Section 14 for a more complete | |||
| description of each status code. | description of each status code. | |||
| For the following success status codes, the requested attributes are | For the following success status codes, the requested attributes are | |||
| returned in Group 3 in the response: | returned in Group 3 in the response: | |||
| successful-ok: no request attributes were substituted or ignored | successful-ok: no request attributes were substituted or ignored | |||
| skipping to change at page 35, line 52 ¶ | skipping to change at page 41, line 4 ¶ | |||
| or is not returned at all. | or is not returned at all. | |||
| client-error-not-possible: Same as Print-Job, in addition the | client-error-not-possible: Same as Print-Job, in addition the | |||
| Printer object is not accepting any requests. | Printer object is not accepting any requests. | |||
| client-error-document-format-not-supported: not applicable. | client-error-document-format-not-supported: not applicable. | |||
| client-error-attributes-or-values-not-supported: not applicable. | client-error-attributes-or-values-not-supported: not applicable. | |||
| client-error-uri-scheme-not-supported: not applicable. | client-error-uri-scheme-not-supported: not applicable. | |||
| client-error-conflicting-attributes: not applicable | client-error-conflicting-attributes: not applicable | |||
| server-error-operation-not-supported: not applicable (since Get-Job- | server-error-operation-not-supported: not applicable (since Get-Job- | |||
| Attributes is REQUIRED). | Attributes is REQUIRED). | |||
| Expires August 12, 1999 | ||||
| server-error-device-error: same as Print-Job, except no document | server-error-device-error: same as Print-Job, except no document | |||
| data is involved. | data is involved. | |||
| server-error-temporary-error: sane as Print-Job, except no document | server-error-temporary-error: sane as Print-Job, except no document | |||
| data is involved.. | data is involved.. | |||
| server-error-not-accepting-jobs: not applicable. | server-error-not-accepting-jobs: not applicable. | |||
| server-error-job-canceled: not applicable. | server-error-job-canceled: not applicable. | |||
| Expires May 16, 1999 | 2.4 Validate-Job | |||
| 2.3 Validate-Job | ||||
| The Validate-Job operation has been designed so that its implementation | The Validate-Job operation has been designed so that its implementation | |||
| may be a part of the Print-Job operation. Therefore, requiring | may be a part of the Print-Job operation. Therefore, requiring | |||
| Validate-Job is not a burden on implementers. Also it is useful for | Validate-Job is not a burden on implementers. Also it is useful for | |||
| client's to be able to count on its presence in all conformance | client's to be able to count on its presence in all conformance | |||
| implementations, so that the client can determine before sending a long | implementations, so that the client can determine before sending a long | |||
| document, whether the job will be accepted by the IPP Printer or not. | document, whether the job will be accepted by the IPP Printer or not. | |||
| 2.4 Case Sensitivity in URIs | 2.5 Case Sensitivity in URIs (issue 1.6) | |||
| IPP client and server implementations must be aware of the diverse | IPP client and server implementations must be aware of the diverse | |||
| uppercase/lowercase nature of URIs. RFC 2396 defines URL schemes and | uppercase/lowercase nature of URIs. RFC 2396 defines URL schemes and | |||
| Host names as case insensitive but reminds us that the rest of the URL | Host names as case insensitive but reminds us that the rest of the URL | |||
| may well demonstrate case sensitivity. When creating URL's for fields | may well demonstrate case sensitivity. When creating URL's for fields | |||
| where the choice is completely arbitrary, it is probably best to select | where the choice is completely arbitrary, it is probably best to select | |||
| lower case. However, this cannot be guaranteed and implementations MUST | lower case. However, this cannot be guaranteed and implementations MUST | |||
| NOT rely on any fields being case-sensitive or case-insensitive in the | NOT rely on any fields being case-sensitive or case-insensitive in the | |||
| URL beyond the URL scheme and host name fields. | URL beyond the URL scheme and host name fields. | |||
| The reason that the IPP specification does not make any restrictions on | The reason that the IPP specification does not make any restrictions on | |||
| URIs, is so that implementations of IPP may use off-the-shelf components | URIs, is so that implementations of IPP may use off-the-shelf components | |||
| that conform to the standards that define URIs, such as RFC 2396 and the | that conform to the standards that define URIs, such as RFC 2396 and the | |||
| HTTP/1.1 specifications [RFC2068]. See these specifications for rules | HTTP/1.1 specifications [RFC2068]. See these specifications for rules | |||
| of matching, comparison, and case-sensitivity. | of matching, comparison, and case-sensitivity. | |||
| It is also recommended that that System Administrators and | It is also recommended that System Administrators and implementations | |||
| implementations avoid creating URLs for different printers that differ | avoid creating URLs for different printers that differ only in their | |||
| only in their case. For example, don't have Printer1 and printer1 as | case. For example, don't have Printer1 and printer1 as two different | |||
| two different IPP Printers. | IPP Printers. | |||
| The HTTP/1.1 specification [RFC2068] contains more details on comparing | The HTTP/1.1 specification [RFC2068] contains more details on comparing | |||
| URLs. | URLs. | |||
| 2.5 Natural Language Override (NLO) | 2.6 Character Sets, natural languages, and internationalization | |||
| This section discusses character set support, natural language support | ||||
| and internationalization. | ||||
| 2.6.1Character set code conversion support (Issue 1.5) | ||||
| IPP clients and IPP objects are REQUIRED to support UTF-8. They MAY | ||||
| support additional charsets. It is RECOMMENDED that an IPP object also | ||||
| support US-ASCII, since many clients support US-ASCII, and indicate that | ||||
| Expires August 12, 1999 | ||||
| UTF-8 and US-ASCII are supported by populating the Printer's "charset- | ||||
| supported" with 'utf-8' and 'us-ascii' values. An IPP object is | ||||
| required to code covert with as little loss as possible between the | ||||
| charsets that it supports, as indicated in the Printer's "charsets- | ||||
| supported" attribute. | ||||
| How should the server handle the situation where the "attributes- | ||||
| charset" of the response itself is "us-ascii", but one or more | ||||
| attributes in that response is in the "utf-8" format? | ||||
| Example: Consider a case where a client sends a Print-Job request with | ||||
| "utf-8" as the value of "attributes-charset" and with the "job-name" | ||||
| attribute supplied. Later another client submits a Get-Job-Attribute or | ||||
| Get-Jobs request. This second request contains the "attributes-charset" | ||||
| with value "us-ascii" and "requested-attributes" attribute with exactly | ||||
| one value "job-name". | ||||
| According to the IPP-Mod document (section 3.1.4.2), the value of the | ||||
| "attributes-charset" for the response of the second request must be "us- | ||||
| ascii" since that is the charset specified in the request. The "job- | ||||
| name" value, however, is in "utf-8" format. Should the request be | ||||
| rejected even though both "utf-8" and "us-ascii" charsets are supported | ||||
| by the server? or should the "job-name" value be converted to "us-ascii" | ||||
| and return "successful-ok-conflicting-attributes" (0x0002) as the | ||||
| status code? | ||||
| Answer: An IPP object that supports both utf-8 (REQUIRED) and us-ascii, | ||||
| the second paragraph of section 3.1.4.2 applies so that the IPP object | ||||
| MUST accept the request, perform code set conversion between these two | ||||
| charsets with "the highest fidelity possible" and return 'successful- | ||||
| ok', rather than a warning 'successful-ok-conflicting-attributes, or an | ||||
| error. The printer will do the best it can to convert between each of | ||||
| the character sets that it supports--even if that means providing a | ||||
| string of question marks because none of the characters are | ||||
| representable in US ASCII. If it can't perform such conversion, it MUST | ||||
| NOT advertise us-ascii as a value of its "attributes-charset-supported" | ||||
| and MUST reject any request that requests 'us-ascii'. | ||||
| One IPP object implementation strategy is to convert all request text | ||||
| and name values to a Unicode internal representation. This is 16-bit | ||||
| and virtually universal. Then convert to the specified operation | ||||
| attributes-charset on output. | ||||
| Also it would be smarter for a client to ask for 'utf-8', rather than | ||||
| 'us-ascii' and throw away characters that it doesn't understand, rather | ||||
| than depending on the code conversion of the IPP object. | ||||
| 2.6.2What charset to return when an unsupported charset is requested | ||||
| (Issue 1.19)? | ||||
| Section 3.1.4.1 Request Operation attributes was clarified in November | ||||
| 1998 as follows: | ||||
| Expires August 12, 1999 | ||||
| All clients and IPP objects MUST support the 'utf-8' charset | ||||
| [RFC2044] and MAY support additional charsets provided that they | ||||
| are registered with IANA [IANA-CS]. If the Printer object does not | ||||
| support the client supplied charset value, the Printer object MUST | ||||
| reject the request, set the "attributes-charset" to 'utf-8' in the | ||||
| response, and return the 'client-error-charset-not-supported' | ||||
| status code and any 'text' or 'name' attributes using the 'utf-8' | ||||
| charset. | ||||
| Since the client and IPP object MUST support UTF-8, returning any text | ||||
| or name attributes in UTF-8 when the client requests a charset that is | ||||
| not supported should allow the client to display the text or name. | ||||
| Since such an error is a client error, rather than a user error, the | ||||
| client should check the status code first so that it can avoid | ||||
| displaying any other returned 'text' and 'name' attributes that are not | ||||
| in the charset requested. | ||||
| Furthermore, [ipp-mod] section 14.1.4.14 client-error-charset-not- | ||||
| supported (0x040D) was clarified in November 1998 as follows: | ||||
| For any operation, if the IPP Printer does not support the charset | ||||
| supplied by the client in the "attributes-charset" operation | ||||
| attribute, the Printer MUST reject the operation and return this | ||||
| status and any 'text' or 'name' attributes using the 'utf-8' | ||||
| charset (see Section 3.1.4.1). | ||||
| 2.6.3Natural Language Override (NLO) (Issue 1.45) | ||||
| The 'text' and 'name' attributes each have two forms. One has an | The 'text' and 'name' attributes each have two forms. One has an | |||
| implicit natural language, and the other has an explicit natural | implicit natural language, and the other has an explicit natural | |||
| language. The 'textWithoutLanguage' and 'textWithoutLanguage' are the | language. The 'textWithoutLanguage' and 'textWithoutLanguage' are the | |||
| two 'text' forms. The 'nameWithoutLanguage" and 'nameWithLanguage are | two 'text' forms. The 'nameWithoutLanguage" and 'nameWithLanguage are | |||
| the two 'name' forms. If a receiver (IPP object or IPP client) supports | the two 'name' forms. If a receiver (IPP object or IPP client) supports | |||
| an attribute with attribute syntax 'text', it MUST support both forms in | an attribute with attribute syntax 'text', it MUST support both forms in | |||
| a request and a response. A sender (IPP client or IPP object) MAY send | a request and a response. A sender (IPP client or IPP object) MAY send | |||
| either form for any such attribute. When a sender sends a | either form for any such attribute. When a sender sends a | |||
| WithoutLanguage form, the implicit natural language is specified in the | WithoutLanguage form, the implicit natural language is specified in the | |||
| "attributes-natural-language" operation attribute which all senders MUST | "attributes-natural-language" operation attribute which all senders MUST | |||
| include in every request and response. | include in every request and response. | |||
| When a sender sends a WithLanguage form, it MAY be different from the | When a sender sends a WithLanguage form, it MAY be different from the | |||
| implicit natural language supplied by the sender or it MAY be the same. | implicit natural language supplied by the sender or it MAY be the same. | |||
| The receiver MUST treat either form equivalently. | The receiver MUST treat either form equivalently. | |||
| Expires May 16, 1999 | ||||
| There is an implementation decision for senders, whether to always send | There is an implementation decision for senders, whether to always send | |||
| the WithLanguage forms or use the WithoutLanguage form when the | the WithLanguage forms or use the WithoutLanguage form when the | |||
| attribute's natural language is the same as the request or response. | attribute's natural language is the same as the request or response. | |||
| The former approach makes the sender implementation simpler. The latter | The former approach makes the sender implementation simpler. The latter | |||
| approach is more efficient on the wire and allows inter-working with | approach is more efficient on the wire and allows inter-working with | |||
| non-conforming receivers that fail to support the WithLanguage forms. | non-conforming receivers that fail to support the WithLanguage forms. | |||
| As each approach have advantages, the choice is completely up to the | As each approach have advantages, the choice is completely up to the | |||
| implementer of the sender. | implementer of the sender. | |||
| Expires August 12, 1999 | ||||
| Furthermore, when a client receives a 'text' or 'name' job attribute | Furthermore, when a client receives a 'text' or 'name' job attribute | |||
| that it had previously supplied, that client MUST NOT expect to see the | that it had previously supplied, that client MUST NOT expect to see the | |||
| attribute in the same form, i.e., in the same WithoutLanguage or | attribute in the same form, i.e., in the same WithoutLanguage or | |||
| WithLanguage form as the client supplied when it created the job. The | WithLanguage form as the client supplied when it created the job. The | |||
| IPP object is free to transform the attribute from the WithLanguage form | IPP object is free to transform the attribute from the WithLanguage form | |||
| to the WithoutLanguage form and vice versa, as long as the natural | to the WithoutLanguage form and vice versa, as long as the natural | |||
| language is preserved. However, in order to meet this latter | language is preserved. However, in order to meet this latter | |||
| requirement, it is usually simpler for the IPP object implementation to | requirement, it is usually simpler for the IPP object implementation to | |||
| store the natural language explicitly with the attribute value, i.e., to | store the natural language explicitly with the attribute value, i.e., to | |||
| store using an internal representation that resembles the WithLanguage | store using an internal representation that resembles the WithLanguage | |||
| skipping to change at page 38, line 5 ¶ | skipping to change at page 44, line 50 ¶ | |||
| (unrequested) Job Attribute which then specified the implicit natural | (unrequested) Job Attribute which then specified the implicit natural | |||
| language for any other WithoutLanguage job attributes returned in the | language for any other WithoutLanguage job attributes returned in the | |||
| response for that job. Interoperability testing of early | response for that job. Interoperability testing of early | |||
| implementations showed that no one was implementing the job-level NLO in | implementations showed that no one was implementing the job-level NLO in | |||
| Get-Job responses. So the job-level NLO was eliminated from the Get- | Get-Job responses. So the job-level NLO was eliminated from the Get- | |||
| Jobs response. This simplification makes all requests and responses | Jobs response. This simplification makes all requests and responses | |||
| consistent in that the implicit natural language for any WithoutLanguage | consistent in that the implicit natural language for any WithoutLanguage | |||
| 'text' or 'name' form is always supplied in the request's or response's | 'text' or 'name' form is always supplied in the request's or response's | |||
| "attributes-natural-language" operation attribute. | "attributes-natural-language" operation attribute. | |||
| Expires May 16, 1999 | 2.7 The "queued-job-count" Printer Description attribute | |||
| 2.6 The "queued-job-count" Printer Description attribute | ||||
| 2.6.1Why is "queued-job-count" RECOMMENDED? | 2.7.1Why is "queued-job-count" RECOMMENDED (Issue 1.14)? | |||
| The reason that "queued-job-count" is RECOMMENDED, is that some clients | The reason that "queued-job-count" is RECOMMENDED, is that some clients | |||
| look at that attribute alone when summarizing the status of a list of | look at that attribute alone when summarizing the status of a list of | |||
| printers, instead of doing a Get-Jobs to determine the number of jobs in | printers, instead of doing a Get-Jobs to determine the number of jobs in | |||
| the queue. Implementations that fail to support the "queued-job-count" | the queue. Implementations that fail to support the "queued-job-count" | |||
| Expires August 12, 1999 | ||||
| will cause that client to display 0 jobs when there are actually queued | will cause that client to display 0 jobs when there are actually queued | |||
| jobs. | jobs. | |||
| We would have made it a REQUIRED Printer attribute, but some | We would have made it a REQUIRED Printer attribute, but some | |||
| implementations had already been completed before the issue was raised, | implementations had already been completed before the issue was raised, | |||
| so making it a SHOULD was a compromise. | so making it a SHOULD was a compromise. | |||
| 2.6.2Is "queued-job-count" a good measure of how busy a printer is? | 2.7.2Is "queued-job-count" a good measure of how busy a printer is | |||
| (Issue 1.15)? | ||||
| The "queued-job-count" is not a good measure of how busy the printer is | The "queued-job-count" is not a good measure of how busy the printer is | |||
| when there are held jobs. A future registration could be to add a | when there are held jobs. A future registration could be to add a | |||
| "held-job-count" (or an "active-job-count") Printer Description | "held-job-count" (or an "active-job-count") Printer Description | |||
| attribute if experience shows that such an attribute (combination) is | attribute if experience shows that such an attribute (combination) is | |||
| needed to quickly indicate how busy a printer really is. | needed to quickly indicate how busy a printer really is. | |||
| 2.7 Sending empty attribute groups | 2.8 Sending empty attribute groups (Issue 1.16) | |||
| The [IPP-MOD] and [IPP-PRO] specifications RECOMMEND that a sender not | The [IPP-MOD] and [IPP-PRO] specifications RECOMMEND that a sender not | |||
| send an empty attribute group in a request or a response. However, they | send an empty attribute group in a request or a response. However, they | |||
| REQUIRE a receiver to accept an empty attribute group as equivalent to | REQUIRE a receiver to accept an empty attribute group as equivalent to | |||
| the omission of that group. So a client SHOULD omit the Job Template | the omission of that group. So a client SHOULD omit the Job Template | |||
| Attributes group entirely in a create operation that is not supplying | Attributes group entirely in a create operation that is not supplying | |||
| any Job Template attributes. Similarly, an IPP object SHOULD omit an | any Job Template attributes. Similarly, an IPP object SHOULD omit an | |||
| empty Unsupported Attributes group if there are no unsupported | empty Unsupported Attributes group if there are no unsupported | |||
| attributes to be returned in a response. | attributes to be returned in a response. | |||
| 2.8 Returning unsupported attributes in Get-Xxxx responses | The [IPP-PRO] specification REQUIRES a receiver to be able to receive | |||
| either an empty attribute group or an omitted attribute group and treat | ||||
| them equivalently. The term "receiver" means an IPP object for a | ||||
| request and a client for a response. The term "sender' means a client | ||||
| for a request and an IPP object for a response. | ||||
| The client cannot depend on getting unsupported attributes returned in | There is an exception to the rule for Get-Jobs when there are no | |||
| the Unsupported Attributes group of Get-Printer-Attributes, Get-Jobs, or | attributes to be returned. [ipp-pro] contains the following paragraph: | |||
| Get-Job-Attributes responses that the client requested, but are not | ||||
| supported by the IPP object. However, such unsupported requested | ||||
| attributes will not be returned in the Job Attributes or Printer | ||||
| Attributes group (since they are unsupported). However, the IPP object | ||||
| is REQUIRED to return the 'successful-ok-ignored-or-substituted- | ||||
| attributes' status code, so that the client know that all that was | ||||
| requested has not been returned. | ||||
| 2.9 Returning job-state in Print-Job response | The syntax allows an xxx-attributes-tag to be present when the xxx- | |||
| attribute-sequence that follows is empty. The syntax is defined | ||||
| this way to allow for the response of Get-Jobs where no attributes | ||||
| are returned for some job-objects. Although it is RECOMMENDED that | ||||
| the sender not send an xxx-attributes-tag if there are no | ||||
| attributes (except in the Get-Jobs response just mentioned), the | ||||
| receiver MUST be able to decode such syntax. | ||||
| 2.9 Returning unsupported attributes in Get-Xxxx responses (Issue 1.18) | ||||
| In the Get-Printer-Attributes, Get-Jobs, or Get-Job-Attributes | ||||
| responses, the client cannot depend on getting unsupported attributes | ||||
| returned in the Unsupported Attributes group that the client requested, | ||||
| but are not supported by the IPP object. However, such unsupported | ||||
| requested attributes will not be returned in the Job Attributes or | ||||
| Expires August 12, 1999 | ||||
| Printer Attributes group (since they are unsupported). Furthermore, the | ||||
| IPP object is REQUIRED to return the 'successful-ok-ignored-or- | ||||
| substituted-attributes' status code, so that the client knows that not | ||||
| all that was requested has been returned. | ||||
| 2.10Returning job-state in Print-Job response (Issue 1.30) | ||||
| An IPP client submits a small job via Print-Job. By the time the IPP | An IPP client submits a small job via Print-Job. By the time the IPP | |||
| printer/print server is putting together a response to the operation, | printer/print server is putting together a response to the operation, | |||
| Expires May 16, 1999 | ||||
| the job has finished printing and been removed as an object from the | the job has finished printing and been removed as an object from the | |||
| print system. What should the job-state be in the response? | print system. What should the job-state be in the response? | |||
| The Model suggests that the Printer return a response before it even | The Model suggests that the Printer return a response before it even | |||
| accepts the document content. The Job Object Attributes are returned | accepts the document content. The Job Object Attributes are returned | |||
| only if the IPP object returns one of the success status codes. Then the | only if the IPP object returns one of the success status codes. Then the | |||
| job-state would always be "pending" or "pending-held". | job-state would always be "pending" or "pending-held". | |||
| This issue comes up for the implementation of an IPP Printer object as a | This issue comes up for the implementation of an IPP Printer object as a | |||
| server that forwards jobs to devices that do not provide job status back | server that forwards jobs to devices that do not provide job status back | |||
| skipping to change at page 39, line 44 ¶ | skipping to change at page 46, line 53 ¶ | |||
| On the other hand, if the server is able to query the device and/or | On the other hand, if the server is able to query the device and/or | |||
| setup some sort of event notification that the device initiates when the | setup some sort of event notification that the device initiates when the | |||
| job makes state transitions, then the server can return the current job | job makes state transitions, then the server can return the current job | |||
| state in the Print-Job response and in subsequent queries because the | state in the Print-Job response and in subsequent queries because the | |||
| server knows what the job state is in the device (or can query the | server knows what the job state is in the device (or can query the | |||
| device). | device). | |||
| All of these alternatives depend on implementation of the server and the | All of these alternatives depend on implementation of the server and the | |||
| device. | device. | |||
| 2.10Multi-valued attributes | 2.11Flow controlling the data portion of a Print-Job request (Issue | |||
| 1.22) | ||||
| A paused printer (or one that is stopped due to paper out or jam or | ||||
| spool space full or buffer space full, may flow control the data of a | ||||
| Expires August 12, 1999 | ||||
| Print-Job operation (at the TCP/IP layer), so that the client is not | ||||
| able to send all the document data. Consequently, the Printer will not | ||||
| return a response until the condition is changed. | ||||
| The Printer should not return a Print-Job response with an error code in | ||||
| any of these conditions, since either the printer will be resumed and/or | ||||
| the condition will be freed either by human intervention or as jobs | ||||
| print. | ||||
| In writing test scripts to test IPP Printers, the script must also be | ||||
| written not to expect a response, if the printer has been paused, until | ||||
| the printer is resumed, in order to work with all possible | ||||
| implementations. | ||||
| 2.12Multi-valued attributes (Issue 1.31) | ||||
| What is the attribute syntax for a multi-valued attribute? Since some | What is the attribute syntax for a multi-valued attribute? Since some | |||
| attributes support values in more than one data type, such as "media", | attributes support values in more than one data type, such as "media", | |||
| "job-hold-until", and "job-sheets", IPP semantics associate the | "job-hold-until", and "job-sheets", IPP semantics associate the | |||
| attribute syntax with each value, not with the attribute as a whole. | attribute syntax with each value, not with the attribute as a whole. | |||
| The protocol associates the attribute syntax tag with each value. Don't | The protocol associates the attribute syntax tag with each value. Don't | |||
| be fooled, just because the attribute syntax tag comes before the | be fooled, just because the attribute syntax tag comes before the | |||
| attribute keyword. All attribute values after the first have a zero | attribute keyword. All attribute values after the first have a zero | |||
| length attribute keyword as the indication of a subsequent value of the | length attribute keyword as the indication of a subsequent value of the | |||
| same attribute. | same attribute. | |||
| Expires May 16, 1999 | 2.13Querying jobs with IPP that were submitted using other job | |||
| submission protocols (Issue 1.32) | ||||
| The following clarification was added to [ipp-mod] section 8.5: | ||||
| 8.5 Queries on jobs submitted using non-IPP protocols | ||||
| If the device that an IPP Printer is representing is able to accept | ||||
| jobs using other job submission protocols in addition to IPP, it is | ||||
| RECOMMEND that such an implementation at least allow such "foreign" | ||||
| jobs to be queried using Get-Jobs returning "job-id" and "job-uri" | ||||
| as 'unknown'. Such an implementation NEED NOT support all of the | ||||
| same IPP job attributes as for IPP jobs. The IPP object returns | ||||
| the 'unknown' out-of-band value for any requested attribute of a | ||||
| foreign job that is supported for IPP jobs, but not for foreign | ||||
| jobs. | ||||
| It is further RECOMMENDED, that the IPP Printer generate "job-id" | ||||
| and "job-uri" values for such "foreign jobs", if possible, so that | ||||
| they may be targets of other IPP operations, such as Get-Job- | ||||
| Attributes and Cancel-Job. Such an implementation also needs to | ||||
| deal with the problem of authentication of such foreign jobs. One | ||||
| approach would be to treat all such foreign jobs as belonging to | ||||
| users other than the user of the IPP client. Another approach | ||||
| would be for the foreign job to belong to 'anonymous'. Only if the | ||||
| IPP client has been authenticated as an operator or administrator | ||||
| of the IPP Printer object, could the foreign jobs be queried by an | ||||
| Expires August 12, 1999 | ||||
| IPP request. Alternatively, if the security policy is to allow | ||||
| users to query other users' jobs, then the foreign jobs would also | ||||
| be visible to an end-user IPP client using Get-Jobs and Get-Job- | ||||
| Attributes. | ||||
| Thus IPP MAY be implemented as a "universal" protocol that provides | ||||
| access to jobs submitted with any job submission protocol. As IPP | ||||
| becomes widely implemented, providing a more universal access makes | ||||
| sense. | ||||
| 2.14The 'none' value for empty sets (Issue 1.37) | ||||
| [ipp-mod] states that the 'none' value should be used as the value of a | ||||
| 1SetOf when the set is empty. In most cases, sets that are potentially | ||||
| empty contain keywords so the keyword 'none' is used, but for the 3 | ||||
| finishings attributes, the values are enums and thus the empty set is | ||||
| represented by the enum 3. Currently there are no other attributes with | ||||
| 1SetOf values which can be empty and can contain values that are not | ||||
| keywords. This exception requires special code and is a potential place | ||||
| for bugs. It would have been better if we had chosen an out-of-band | ||||
| value, either "no-value" or some new value, such as 'none'. Since we | ||||
| didn't, implementations have to deal with the different representations | ||||
| of 'none', depending on the attribute syntax. | ||||
| 2.15Get-Jobs, my-jobs='true', and 'requesting-user-name' (Issue 1.39)? | ||||
| In [ipp-mod] section 3.2.6.1 'Get-Jobs Request', if the attribute 'my- | ||||
| jobs' is present and set to TRUE, MUST the 'requesting-user-name' | ||||
| attribute be there to, and if it's not present what should the IPP | ||||
| printer do? | ||||
| [ipp-mod] Section 8.3 describes the various cases of "requesting-user- | ||||
| name" being present or not for any operation. If the client does not | ||||
| supply a value for "requesting-user-name", the printer MUST assume that | ||||
| the client is supplying some anonymous name, such as "anonymous". | ||||
| 2.16The "multiple-document-handling" Job Template attribute and support | ||||
| of multiple document jobs | ||||
| ISSUE: IPP/1.0 is silent on which of the four effects an implementation | ||||
| would perform if it supports Create-Job, but does not support "multiple- | ||||
| document-handling". | ||||
| A fix to IPP/1.0 would be to require implementing all four values of | ||||
| "multiple-document-handling" if Create-Job is supported at all. Or at | ||||
| least 'single-document-new-sheet' and 'separate-documents-uncollated- | ||||
| copies'. In any case, an implementation that supports Create-Job SHOULD | ||||
| also support "multiple-document-handling". Support for all four values | ||||
| is RECOMMENDED, but at least the 'single-document-new-sheet' and | ||||
| 'separate-documents-uncollated-copies' values, along with the "multiple- | ||||
| document-handling-default" indicating the default behavior and | ||||
| Expires August 12, 1999 | ||||
| "multiple-document-handling-supported" values. If an implementation | ||||
| spools the data, it should also support the 'separate-documents- | ||||
| collated-copies' value as well. | ||||
| 3 Encoding and Transport | 3 Encoding and Transport | |||
| This section discusses various aspects of IPP/1.0 Encoding and Transport | This section discusses various aspects of IPP/1.0 Encoding and Transport | |||
| [IPP-PRO]. | [IPP-PRO]. | |||
| The IPP layer doesn't have to deal with chunking. In the context of CGI | A server is not required to send a response until after it has received | |||
| scripts, the HTTP layer removes any chunking information in the received | the client.s entire request. Hence, a client must not expect a response | |||
| data. | until after it has sent the entire request. However, we recommend that | |||
| the server return a response as soon as possible if an error is detected | ||||
| A client MUST NOT expect a response from an IPP server until after the | while the client is still sending the data, rather than waiting until | |||
| client has sent the entire response. But a client MAY listen for an | all of the data is received. Therefore, we also recommend that a client | |||
| error response that an IPP server MAY send before it receives all the | listen for an error response that an IPP server MAY send before it | |||
| data. In this case a client, if chunking the data, can send a premature | receives all the data. In this case a client, if chunking the data, can | |||
| zero-length chunk to end the request before sending all the data. If the | send a premature zero-length chunk to end the request before sending all | |||
| request is blocked for some reason, a client MAY determine the reason by | the data (and so the client can keep the connection open for other | |||
| opening another connection to query the server. | requests, rather than closing it). If the request is blocked for some | |||
| reason, a client MAY determine the reason by opening another connection | ||||
| to query the server using Get-Printer-Attributes. | ||||
| In the following sections, there are a tables of all HTTP headers which | In the following sections, there are a tables of all HTTP headers which | |||
| describe their use in an IPP client or server. The following is an | describe their use in an IPP client or server. The following is an | |||
| explanation of each column in these tables. | explanation of each column in these tables. | |||
| @ the "header" column contains the name of a header | @ the .header. column contains the name of a header | |||
| @ the "request/client" column indicates whether a client sends the | @ the .request/client. column indicates whether a client sends the | |||
| header. | header. | |||
| @ the "request/ server" column indicates whether a server supports | @ the .request/ server. column indicates whether a server supports | |||
| the header when received. | the header when received. | |||
| @ the "response/ server" column indicates whether a server sends the | @ the .response/ server. column indicates whether a server sends the | |||
| header. | header. | |||
| @ the "response /client" column indicates whether a client supports | @ the .response /client. column indicates whether a client supports | |||
| the header when received. | the header when received. | |||
| @ the "values and conditions" column specifies the allowed header | @ the .values and conditions. column specifies the allowed header | |||
| values and the conditions for the header to be present in a | values and the conditions for the header to be present in a | |||
| request/response. | request/response. | |||
| The table for "request headers" does not have columns for responses, and | The table for .request headers. does not have columns for responses, and | |||
| the table for "response headers" does not have columns for requests. | the table for .response headers. does not have columns for requests. | |||
| The following is an explanation of the values in the "request/client" | The following is an explanation of the values in the .request/client. | |||
| and "response/ server" columns. | and .response/ server. columns. | |||
| @ must: the client or server MUST send the header, | @ must: the client or server MUST send the header, | |||
| @ must-if: the client or server MUST send the header when the | @ must-if: the client or server MUST send the header when the | |||
| condition described in the "values and conditions" column is met, | condition described in the .values and conditions. column is met, | |||
| @ may: the client or server MAY send the header | @ may: the client or server MAY send the header | |||
| @ not: the client or server SHOULD NOT send the header. It is not | @ not: the client or server SHOULD NOT send the header. It is not | |||
| relevant to an IPP implementation. | relevant to an IPP implementation. | |||
| The following is an explanation of the values in the "response/client" | Expires August 12, 1999 | |||
| and "request/ server" columns. | ||||
| The following is an explanation of the values in the .response/client. | ||||
| and .request/ server. columns. | ||||
| @ must: the client or server MUST support the header, | @ must: the client or server MUST support the header, | |||
| @ may: the client or server MAY support the header | @ may: the client or server MAY support the header | |||
| @ not: the client or server SHOULD NOT support the header. It is not | @ not: the client or server SHOULD NOT support the header. It is not | |||
| relevant to an IPP implementation. | relevant to an IPP implementation. | |||
| Expires May 16, 1999 | ||||
| 3.1 General Headers | 3.1 General Headers | |||
| The following is a table for the general headers. | The following is a table for the general headers. | |||
| General- Request Response Values and Conditions | General- Request Response Values and Conditions | |||
| Header | Header | |||
| Client Server Server Client | Client Server Server Client | |||
| Cache- must not must not "no-cache" only | Cache- must not must not .no-cache. only | |||
| Control | Control | |||
| Connection must-if must must- must "close" only. Both | Connection must-if must must- must .close. only. Both | |||
| if client and server | if client and server | |||
| SHOULD keep a | SHOULD keep a | |||
| connection for the | connection for the | |||
| duration of a sequence | duration of a sequence | |||
| of operations. The | of operations. The | |||
| client and server MUST | client and server MUST | |||
| include this header | include this header | |||
| for the last operation | for the last operation | |||
| in such a sequence. | in such a sequence. | |||
| Date may may must may per RFC 1123 [RFC1123] | Date may may must may per RFC 1123 [RFC1123] | |||
| from RFC 2068 | from RFC 2068 | |||
| [RFC2068] | [RFC2068] | |||
| Pragma must not must not "no-cache" only | Pragma must not must not .no-cache. only | |||
| Transfer- must-if must must- must "chunked" only . | Transfer- must-if must must- must .chunked. only . | |||
| Encoding if Header MUST be present | Encoding if Header MUST be present | |||
| if Content-Length is | if Content-Length is | |||
| absent. | absent. | |||
| Upgrade not not not not | Upgrade not not not not | |||
| Via not not not not | Via not not not not | |||
| 3.2 Request Headers | 3.2 Request Headers | |||
| The following is a table for the request headers. | The following is a table for the request headers. | |||
| Request-Header Client Server Request Values and Conditions | Request-Header Client Server Request Values and Conditions | |||
| Accept may must "application/ipp" only. This | Accept may must .application/ipp. only. This | |||
| value is the default if the | value is the default if the | |||
| Expires August 12, 1999 | ||||
| Request-Header Client Server Request Values and Conditions | ||||
| client omits it | client omits it | |||
| Accept-Charset not not Charset information is within | Accept-Charset not not Charset information is within | |||
| the application/ipp entity | the application/ipp entity | |||
| Accept-Encoding may must empty and per RFC 2068 [RFC2068] | Accept-Encoding may must empty and per RFC 2068 [RFC2068] | |||
| and IANA registry for content- | and IANA registry for content- | |||
| Expires May 16, 1999 | ||||
| Request-Header Client Server Request Values and Conditions | ||||
| codings | codings | |||
| Accept-Language not not language information is within | Accept-Language not not language information is within | |||
| the application/ipp entity | the application/ipp entity | |||
| Authorization must-if must per RFC 2068. A client MUST send | Authorization must-if must per RFC 2068. A client MUST send | |||
| this header when it receives a | this header when it receives a | |||
| 401 "Unauthorized" response and | 401 .Unauthorized. response and | |||
| does not receive a "Proxy- | does not receive a .Proxy- | |||
| Authenticate" header. | Authenticate. header. | |||
| >From not not per RFC 2068. Because RFC | >From not not per RFC 2068. Because RFC | |||
| recommends sending this header | recommends sending this header | |||
| only with the user's approval, it | only with the user.s approval, it | |||
| is not very useful | is not very useful | |||
| Host must must per RFC 2068 | Host must must per RFC 2068 | |||
| If-Match not not | If-Match not not | |||
| If-Modified- not not | If-Modified- not not | |||
| Since | Since | |||
| If-None-Match not not | If-None-Match not not | |||
| If-Range not not | If-Range not not | |||
| If-Unmodified- not not | If-Unmodified- not not | |||
| Since | Since | |||
| Max-Forwards not not | Max-Forwards not not | |||
| Proxy- must-if not per RFC 2068. A client MUST send | Proxy- must-if not per RFC 2068. A client MUST send | |||
| Authorization this header when it receives a | Authorization this header when it receives a | |||
| 401 "Unauthorized" response and a | 401 .Unauthorized. response and a | |||
| "Proxy-Authenticate" header. | .Proxy-Authenticate. header. | |||
| Range not not | Range not not | |||
| Referer not not | Referer not not | |||
| User-Agent not not | User-Agent not not | |||
| Expires August 12, 1999 | ||||
| 3.3 Response Headers | 3.3 Response Headers | |||
| The following is a table for the request headers. | The following is a table for the request headers. | |||
| Response- Server Client Response Values and Conditions | Response- Server Client Response Values and Conditions | |||
| Header | Header | |||
| Expires May 16, 1999 | ||||
| Response- Server Client Response Values and Conditions | ||||
| Header | ||||
| Accept-Ranges not not | Accept-Ranges not not | |||
| Age not not | Age not not | |||
| Location must-if may per RFC 2068. When URI needs | Location must-if may per RFC 2068. When URI needs | |||
| redirection. | redirection. | |||
| Proxy- not must per RFC 2068 | Proxy- not must per RFC 2068 | |||
| Authenticate | Authenticate | |||
| skipping to change at page 43, line 55 ¶ | skipping to change at page 53, line 4 ¶ | |||
| Encoding registry for content | Encoding registry for content | |||
| codings. | codings. | |||
| Content- not not not not Application/ipp | Content- not not not not Application/ipp | |||
| Language handles language | Language handles language | |||
| Content- must-if must must-if must the length of the | Content- must-if must must-if must the length of the | |||
| Length message-body per RFC | Length message-body per RFC | |||
| 2068. Header MUST be | 2068. Header MUST be | |||
| present if Transfer- | present if Transfer- | |||
| Encoding is absent.. | ||||
| Content- not not not not | Expires August 12, 1999 | |||
| Location | ||||
| Expires May 16, 1999 | ||||
| Entity-Header Request Response Values and Conditions | Entity-Header Request Response Values and Conditions | |||
| Client Server Server Client | Client Server Server Client | |||
| Encoding is absent.. | ||||
| Content- not not not not | ||||
| Location | ||||
| Content-MD5 may may may may per RFC 2068 | Content-MD5 may may may may per RFC 2068 | |||
| Content-Range not not not not | Content-Range not not not not | |||
| Content-Type must must must must "application/ipp" | Content-Type must must must must .application/ipp. | |||
| only | only | |||
| ETag not not not not | ETag not not not not | |||
| Expires not not not not | Expires not not not not | |||
| Last-Modified not not not not | Last-Modified not not not not | |||
| 3.5 Optional support for HTTP/1.0 | 3.5 Optional support for HTTP/1.0 | |||
| skipping to change at page 44, line 39 ¶ | skipping to change at page 53, line 45 ¶ | |||
| all clients and all servers. However, a client and/or a server | all clients and all servers. However, a client and/or a server | |||
| implementation may choose to also support HTTP 1.0. | implementation may choose to also support HTTP 1.0. | |||
| @ This option means that a server may choose to communicate with a | @ This option means that a server may choose to communicate with a | |||
| (non-conforming) client that only supports HTTP 1.0. In such cases | (non-conforming) client that only supports HTTP 1.0. In such cases | |||
| the server should not use any HTTP 1.1 specific parameters or | the server should not use any HTTP 1.1 specific parameters or | |||
| features and should respond using HTTP version number 1.0. | features and should respond using HTTP version number 1.0. | |||
| @ This option also means that a client may choose to communicate with a | @ This option also means that a client may choose to communicate with a | |||
| (non-conforming) server that only supports HTTP 1.0. In such cases, | (non-conforming) server that only supports HTTP 1.0. In such cases, | |||
| if the server responds with an HTTP 'unsupported version number' to | if the server responds with an HTTP .unsupported version number. to | |||
| an HTTP 1.1 request, the client should retry using HTTP version | an HTTP 1.1 request, the client should retry using HTTP version | |||
| number 1.0. | number 1.0. | |||
| 3.6 HTTP/1.1 Chunking | 3.6 HTTP/1.1 Chunking | |||
| 3.6.1Disabling IPP Server Response Chunking | ||||
| Clients MUST anticipate that the HTTP/1.1 server may chunk responses and | Clients MUST anticipate that the HTTP/1.1 server may chunk responses and | |||
| MUST accept them in responses. However, a (non-conforming) HTTP client | MUST accept them in responses. However, a (non-conforming) HTTP client | |||
| that is unable to accept chunked responses may attempt to request an | that is unable to accept chunked responses may attempt to request an | |||
| HTTP 1.1 server not to use chunking in its response to an operation by | HTTP 1.1 server not to use chunking in its response to an operation by | |||
| using the following HTTP header: | using the following HTTP header: | |||
| Expires August 12, 1999 | ||||
| TE: identity | TE: identity | |||
| This mechanism should not be used by a server to disable a client from | This mechanism should not be used by a server to disable a client from | |||
| chunking a request, since chunking of document data is an important | chunking a request, since chunking of document data is an important | |||
| feature for clients to send long documents. | feature for clients to send long documents. | |||
| Expires May 16, 1999 | 3.6.2Warning About the Support of Chunked Requests | |||
| This section describes some problems with the use of chunked requests | ||||
| and HTTP/1.1 servers. | ||||
| The HTTP/1.1 standard [HTTP] requires that conforming servers support | ||||
| chunked requests for any method. However, in spite of this requirement, | ||||
| some HTTP/1.1 implementations support chunked responses in the GET | ||||
| method, but do not support chunked POST method requests. Some HTTP/1.1 | ||||
| implementations that support CGI scripts [CGI] and/or servlets [Servlet] | ||||
| require that the client supply a Content-Length. These implementations | ||||
| might reject a chunked POST method and return a 411 status code (Length | ||||
| Required), might attempt to buffer the request and run out of room | ||||
| returning a 413 status code (Request Entity Too Large), or might | ||||
| successfully accept the chunked request. | ||||
| Because of this lack of conformance of HTTP servers to the HTTP/1.1 | ||||
| standard, the IPP standard [IPP-PRO] REQUIRES that a conforming IPP | ||||
| Printer object implementation support chunked requests and that | ||||
| conforming clients accept chunked responses. Therefore, IPP object | ||||
| implementers are warned to seek HTTP server implementations that support | ||||
| chunked POST requests in order to conform to the IPP standard and/or use | ||||
| implementation techniques that support chunked POST requests. | ||||
| 4 References | 4 References | |||
| [CGI] | ||||
| CGI/1.1 (http://www.ietf.org/internet-drafts/draft-coar-cgi-v11- | ||||
| 00.txt). | ||||
| [HTTP] | ||||
| HTTP/1.1 (http://www.ietf.org/internet-drafts/draft-ietf-http-v11- | ||||
| spec-rev-06.txt) | ||||
| [IPP LPD] | [IPP LPD] | |||
| Herriot, R., Hastings, T., Jacobs, N., Martin, J., "Mapping between | Herriot, R., Hastings, T., Jacobs, N., Martin, J., "Mapping between | |||
| LPD and IPP Protocols", draft-ietf-ipp-lpd-ipp-map-04.txt, June | LPD and IPP Protocols", draft-ietf-ipp-lpd-ipp-map-04.txt, June | |||
| 1998. | 1998. | |||
| [IPP-MOD] | [IPP-MOD] | |||
| R. deBry, T. Hastings, R. Herriot, S. Isaacson, P. Powell, | R. deBry, T. Hastings, R. Herriot, S. Isaacson, P. Powell, | |||
| "Internet Printing Protocol/1.0: Model and Semantics", draft-ietf- | "Internet Printing Protocol/1.0: Model and Semantics", draft-ietf- | |||
| ipp-model-11.txt, November, 1998. | ipp-model-11.txt, November, 1998. | |||
| Expires August 12, 1999 | ||||
| [IPP-PRO] | [IPP-PRO] | |||
| Herriot, R., Butler, S., Moore, P., Tuner, R., "Internet Printing | Herriot, R., Butler, S., Moore, P., Tuner, R., "Internet Printing | |||
| Protocol/1.0: Encoding and Transport", draft-ietf-ipp-pro-06.txt, | Protocol/1.0: Encoding and Transport", draft-ietf-ipp-protocol- | |||
| June, 1998. | 07.txt, November, 1998. | |||
| [IPP-RAT] | [IPP-RAT] | |||
| Zilles, S., "Rationale for the Structure and Model and Protocol for | Zilles, S., "Rationale for the Structure and Model and Protocol for | |||
| the Internet Printing Protocol", draft-ietf-ipp-rat-03.txt, June, | the Internet Printing Protocol", draft-ietf-ipp-rat-03.txt, June, | |||
| 1998. | 1998. | |||
| [IPP-REQ] | [IPP-REQ] | |||
| Wright, D., "Design Goals for an Internet Printing Protocol", | Wright, D., "Design Goals for an Internet Printing Protocol", | |||
| draft-ietf-ipp-req-02.txt, June, 1998. | draft-ietf-ipp-req-02.txt, June, 1998. | |||
| [RFC1123] | [RFC1123] | |||
| Braden, S., "Requirements for Internet Hosts - Application and | Braden, S., "Requirements for Internet Hosts - Application and | |||
| Support", RFC 1123, October, 1989. | Support", RFC 1123, October, 1989. | |||
| [RFC2026] | ||||
| S. Bradner, "The Internet Standards Process -- Revision 3", RFC | ||||
| 2026, October 1996. | ||||
| [RFC2068] | [RFC2068] | |||
| R Fielding, et al, "Hypertext Transfer Protocol . HTTP/1.1" RFC | R Fielding, et al, .Hypertext Transfer Protocol . HTTP/1.1. RFC | |||
| 2068, January 1997. | 2068, January 1997. | |||
| [rfc2119] | [rfc2119] | |||
| S. Bradner, "Key words for use in RFCs to Indicate Requirement | S. Bradner, "Key words for use in RFCs to Indicate Requirement | |||
| Levels", RFC 2119 , March 1997. | Levels", RFC 2119 , March 1997. | |||
| [RFC2396] | [RFC2396] | |||
| Berners-Lee, T., Fielding, R., Masinter, L., "Uniform Resource | Berners-Lee, T., Fielding, R., Masinter, L., "Uniform Resource | |||
| Identifiers (URI): Generic Syntax", RFC 2396, August 1998. | Identifiers (URI): Generic Syntax", RFC 2396, August 1998. | |||
| [Servlet] | ||||
| Servlet Specification Version 2.1 | ||||
| (http://java.sun.com/products/servlet/2.1/index.html). | ||||
| [SSL] | [SSL] | |||
| Netscape, The SSL Protocol, Version 3, (Text version 3.02), | Netscape, The SSL Protocol, Version 3, (Text version 3.02), | |||
| November 1996. | November 1996. | |||
| 4.1 Authors' Address | 4.1 Authors. Address | |||
| Thomas N. Hastings | Thomas N. Hastings | |||
| Xerox Corporation | Xerox Corporation | |||
| 701 Aviation Blvd. | 701 Aviation Blvd. | |||
| Expires May 16, 1999 | ||||
| El Segundo, CA 90245 | El Segundo, CA 90245 | |||
| hastings@cp10.es.xerox.com | hastings@cp10.es.xerox.com | |||
| Carl-Uno Manros | Carl-Uno Manros | |||
| Expires August 12, 1999 | ||||
| Xerox Corporation | Xerox Corporation | |||
| 701 Aviation Blvd. | 701 Aviation Blvd. | |||
| El Segundo, CA 90245 | El Segundo, CA 90245 | |||
| manros@cp10.es.xerox.com | manros@cp10.es.xerox.com | |||
| 5 Appendix C: Full Copyright Statement | 5 Notices | |||
| Copyright (C) The Internet Society (1998). All Rights Reserved | The IETF takes no position regarding the validity or scope of any | |||
| intellectual property or other rights that might be claimed to pertain | ||||
| to the implementation or use of the technology described in this | ||||
| document or the extent to which any license under such rights might or | ||||
| might not be available; neither does it represent that it has made any | ||||
| effort to identify any such rights. Information on the IETF's | ||||
| procedures with respect to rights in standards-track and standards- | ||||
| related documentation can be found in BCP-11[BCP-11]. Copies of claims | ||||
| of rights made available for publication and any assurances of licenses | ||||
| to be made available, or the result of an attempt made to obtain a | ||||
| general license or permission for the use of such proprietary rights by | ||||
| implementers or users of this specification can be obtained from the | ||||
| IETF Secretariat. | ||||
| The IETF invites any interested party to bring to its attention any | ||||
| copyrights, patents or patent applications, or other proprietary rights | ||||
| which may cover technology that may be required to practice this | ||||
| standard. Please address the information to the IETF Executive | ||||
| Director. | ||||
| Copyright (C) The Internet Society (1999). All Rights Reserved. | ||||
| This document and translations of it may be copied and furnished to | This document and translations of it may be copied and furnished to | |||
| others, and derivative works that comment on or otherwise explain it or | others, and derivative works that comment on or otherwise explain it or | |||
| assist in its implementation may be prepared, copied, published and | assist in its implementation may be prepared, copied, published and | |||
| distributed, in whole or in part, without restriction of any kind, | distributed, in whole or in part, without restriction of any kind, | |||
| provided that the above copyright notice and this paragraph are included | provided that the above copyright notice and this paragraph are included | |||
| on all such copies and derivative works. However, this document itself | on all such copies and derivative works. However, this document itself | |||
| may not be modified in any way, such as by removing the copyright notice | may not be modified in any way, such as by removing the copyright notice | |||
| or references to the Internet Society or other Internet organizations, | or references to the Internet Society or other Internet organizations, | |||
| except as needed for the purpose of developing Internet standards in | except as needed for the purpose of developing Internet standards in | |||
| skipping to change at line 2379 ¶ | skipping to change at page 57, line 5 ¶ | |||
| The limited permissions granted above are perpetual and will not be | The limited permissions granted above are perpetual and will not be | |||
| revoked by the Internet Society or its successors or assigns. | revoked by the Internet Society or its successors or assigns. | |||
| This document and the information contained herein is provided on an "AS | This document and the information contained herein is provided on an "AS | |||
| IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK | IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK | |||
| FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT | FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT | |||
| LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT | LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT | |||
| INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR | INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR | |||
| FITNESS FOR A PARTICULAR PURPOSE. | FITNESS FOR A PARTICULAR PURPOSE. | |||
| Expires May 16, 1999 | Expires August 12, 1999 | |||
| 6 Change History | ||||
| The change history is in reverse chronological order: | ||||
| 6.1 Changes to produce the February 12, 1999 version from the January 8, | ||||
| 1999 version: | ||||
| 1. Section 2.2.1.5: added check for document not found or accessible | ||||
| in Print-URI and Send-URI | ||||
| 2. Section 3.6.2: Clarified that the IPP standard requires that | ||||
| servers MUST accept chunked requests and that clients MUST accept | ||||
| chunked responses, in spite of the lack of conformance of HTTP | ||||
| servers to the HTTP/1.1 requirement to support chunking. | ||||
| 6.2 Changes to produce the January 8, 1999 version from the December 6, | ||||
| 1998 version: | ||||
| 1. Added section 3.6.2: Warning About the Use of Chunked Requests | ||||
| with CGI Script Implementations | ||||
| 2. Section 2.2.1.2: changed "printer-operations-supported" to | ||||
| "operations-supported". | ||||
| 3. Section 2.2.1.6: changed "job-media-supported" to "job-media- | ||||
| sheets-supported" | ||||
| 4. Section 2.2.3: separated the validation checks for variable length | ||||
| attributes into two separate tests: one for correct attribute | ||||
| syntax and one for correct length. | ||||
| 5. Section 2.2.3: changed "multiple-document-handling-supported" to | ||||
| "printer-resolution-supported" | ||||
| 6. Section 2.6.1: recommended that an IPP object also support US- | ||||
| ASCII charset. | ||||
| 7. Section 3: Clarified that a server is not required to send a | ||||
| response until after it has received the client.s entire request, | ||||
| but recommend that the server return a response as soon as possible | ||||
| if an error is detected while the client is still sending the data, | ||||
| rather than waiting until all of the data is received. Also | ||||
| recommended that a client listen for an error response that an IPP | ||||
| server MAY send before it receives all the data. | ||||
| 6.3 Changes to produce the December 6, 1998 version from the November | ||||
| 16, 1998 version: | ||||
| Included all of the remaining agreed issues raised before the November | ||||
| 16, 1998 production of the Internet-Drafts for IPP/1.0 that included | ||||
| adding explanations to the Implementers Guide. | ||||
| Expires August 12, 1999 | ||||
| Expires August 12, 1999 | ||||
| End of changes. 246 change blocks. | ||||
| 365 lines changed or deleted | 970 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||