| < draft-ietf-ipp-protocol-v11-05.txt | draft-ietf-ipp-protocol-v11-06.txt > | |||
|---|---|---|---|---|
| INTERNET-DRAFT Robert Herriot (editor) | INTERNET-DRAFT Robert Herriot (editor) | |||
| <draft-ietf-ipp-protocol-v11-05.txt> Xerox Corporation | <draft-ietf-ipp-protocol-v11-06.txt> Xerox Corporation | |||
| Sylvan Butler | Sylvan Butler | |||
| Hewlett-Packard | Hewlett-Packard | |||
| Paul Moore | Paul Moore | |||
| Peerless Systems Networking | Peerless Systems Networking | |||
| Randy Turner | Randy Turner | |||
| 2wire.com | 2wire.com | |||
| John Wenn | John Wenn | |||
| Xerox Corporation | Xerox Corporation | |||
| March 1, 2000 | May 30, 2000 | |||
| Internet Printing Protocol/1.1: Encoding and Transport | Internet Printing Protocol/1.1: Encoding and Transport | |||
| Copyright (C) The Internet Society (2000). All Rights Reserved. | Copyright (C) The Internet Society (2000). All Rights Reserved. | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is in full conformance with all | This document is an Internet-Draft and is in full conformance with all | |||
| provisions of Section 10 of [RFC2026]. Internet-Drafts are working | 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 | |||
| skipping to change at page 3, line 7 ¶ | skipping to change at page 3, line 7 ¶ | |||
| The document "Internet Printing Protocol/1.1: Implementer's Guide", | The document "Internet Printing Protocol/1.1: Implementer's Guide", | |||
| gives advice to implementers of IPP clients and IPP objects. | gives advice to implementers of IPP clients and IPP objects. | |||
| 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. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction........................................................4 | 1. Introduction .......................................................5 | |||
| 2. Conformance Terminology.............................................4 | 2. Conformance Terminology ............................................5 | |||
| 3. Encoding of the Operation Layer....................................4 | 3. Encoding of the Operation Layer ...................................5 | |||
| 3.1 Picture of the Encoding........................................5 | 3.1 Picture of the Encoding .......................................6 | |||
| 3.2 Syntax of Encoding.............................................7 | 3.1.1 Request and Response.......................................6 | |||
| 3.3 Version-number.................................................8 | 3.1.2 Attribute Group............................................7 | |||
| 3.4 Operation-id...................................................8 | 3.1.3 Attribute..................................................8 | |||
| 3.5 Status-code....................................................9 | 3.1.4 Picture of the Encoding of an Attribute-with-one-value.....8 | |||
| 3.6 Request-id.....................................................9 | 3.1.5 Additional-value...........................................9 | |||
| 3.7 Tags...........................................................9 | 3.1.6 Alternative Picture of the Encoding of a Request Or a | |||
| 3.7.1 Delimiter Tags...........................................9 | Response.........................................................9 | |||
| 3.7.2 Value Tags..............................................11 | 3.2 Syntax of Encoding ...........................................10 | |||
| 3.8 Name-Length...................................................13 | 3.3 Attribute-group ..............................................12 | |||
| 3.9 (Attribute) Name..............................................13 | 3.4 Required Parameters ..........................................13 | |||
| 3.10Value Length..................................................15 | 3.4.1 Version-number............................................13 | |||
| 3.11(Attribute) Value.............................................15 | 3.4.2 Operation-id..............................................13 | |||
| 3.12Data..........................................................17 | 3.4.3 Status-code...............................................13 | |||
| 4. Encoding of Transport Layer........................................18 | 3.4.4 Request-id................................................14 | |||
| 5. IPP URL Scheme.....................................................18 | 3.5 Tags .........................................................14 | |||
| 6. IANA Considerations................................................20 | 3.5.1 Delimiter Tags............................................14 | |||
| 7. Internationalization Considerations................................20 | 3.5.2 Value Tags................................................15 | |||
| 8. Security Considerations............................................21 | 3.6 Name-Length ..................................................17 | |||
| 8.1 Security Conformance Requirements.............................21 | 3.7 (Attribute) Name .............................................18 | |||
| 8.1.1 Digest Authentication...................................21 | 3.8 Value Length .................................................18 | |||
| 8.1.2 Transport Layer Security (TLS)..........................22 | 3.9 (Attribute) Value ............................................18 | |||
| 8.2 Using IPP with TLS............................................22 | 3.10 Data .........................................................20 | |||
| 9. Interoperability with IPP/1.0 Implementations......................22 | 4. Encoding of Transport Layer .......................................20 | |||
| 9.1 The "version-number" Parameter................................23 | 4.1 Printer-uri and job-uri ......................................21 | |||
| 9.2 Security and URL Schemes......................................23 | 5. IPP URL Scheme ....................................................22 | |||
| 10.References........................................................24 | 6. IANA Considerations ...............................................24 | |||
| 11.Author's Address..................................................26 | 7. Internationalization Considerations ...............................24 | |||
| 12.Other Participants:...............................................27 | 8. Security Considerations ...........................................24 | |||
| 13.Appendix A: Protocol Examples.....................................29 | 8.1 Security Conformance Requirements ............................25 | |||
| 13.1Print-Job Request.............................................29 | 8.1.1 Digest Authentication.....................................25 | |||
| 13.2Print-Job Response (successful)...............................31 | 8.1.2 Transport Layer Security (TLS)............................26 | |||
| 13.3Print-Job Response (failure)..................................32 | 8.2 Using IPP with TLS ...........................................26 | |||
| 13.4Print-Job Response (success with attributes ignored)..........33 | 9. Interoperability with IPP/1.0 Implementations .....................26 | |||
| 13.5Print-URI Request.............................................36 | 9.1 The "version-number" Parameter ...............................27 | |||
| 13.6Create-Job Request............................................37 | 9.2 Security and URL Schemes .....................................27 | |||
| 13.7Get-Jobs Request..............................................38 | 10. References .......................................................28 | |||
| 13.8Get-Jobs Response.............................................39 | 11. Author's Address .................................................31 | |||
| 14.Appendix B: Registration of MIME Media Type Information for | 12. Other Participants: ..............................................31 | |||
| "application/ipp".....................................................41 | 13. Appendix A: Protocol Examples ....................................33 | |||
| 15.Appendix C: Changes from IPP/1.0..................................42 | 13.1 Print-Job Request ............................................33 | |||
| 16.Full Copyright Statement..........................................43 | 13.2 Print-Job Response (successful) ..............................34 | |||
| 13.3 Print-Job Response (failure) .................................35 | ||||
| 13.4 Print-Job Response (success with attributes ignored) .........36 | ||||
| 13.5 Print-URI Request ............................................38 | ||||
| 13.6 Create-Job Request ...........................................39 | ||||
| 13.7 Get-Jobs Request .............................................40 | ||||
| 13.8 Get-Jobs Response ............................................41 | ||||
| 14. Appendix B: Registration of MIME Media Type Information for | ||||
| "application/ipp".....................................................42 | ||||
| 15. Appendix C: Changes from IPP/1.0 .................................44 | ||||
| 16. Full Copyright Statement .........................................45 | ||||
| 1. Introduction | 1. Introduction | |||
| This document contains the rules for encoding IPP operations and | This document contains the rules for encoding IPP operations and | |||
| describes two layers: the transport layer and the operation layer. | describes two layers: the transport layer and the operation layer. | |||
| The transport layer consists of an HTTP/1.1 request or response. RFC | The transport layer consists of an HTTP/1.1 request or response. RFC | |||
| 2616 [RFC2616] describes HTTP/1.1. This document specifies the HTTP | 2616 [RFC2616] describes HTTP/1.1. This document specifies the HTTP | |||
| headers that an IPP implementation supports. | headers that an IPP implementation supports. | |||
| The operation layer consists of a message body in an HTTP request or | The operation layer consists of a message body in an HTTP request or | |||
| response. The document "Internet Printing Protocol/1.1: Model and | response. The document "Internet Printing Protocol/1.1: Model and | |||
| Semantics" [ipp-mod] defines the semantics of such a message body and | Semantics" [ipp-mod] defines the semantics of such a message body and | |||
| the supported values. This document specifies the encoding of an IPP | the supported values. This document specifies the encoding of an IPP | |||
| operation. The aforementioned document [ipp-mod] is henceforth referred | operation. The aforementioned document [ipp-mod] is henceforth referred | |||
| to as the "IPP model document" | to as the "IPP model document" or simply "model document." | |||
| Note: the version number of IPP (1.1) and HTTP (1.1) are not linked. | ||||
| They both just happen to be 1.1. | ||||
| 2. Conformance Terminology | 2. Conformance Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", | |||
| "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be | "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be | |||
| interpreted as described in RFC 2119 [RFC2119]. | interpreted as described in RFC 2119 [RFC2119]. | |||
| 3. Encoding of the Operation Layer | 3. Encoding of the Operation Layer | |||
| The operation layer MUST contain a single operation request or operation | The operation layer is the message body part of the HTTP request or | |||
| response. Each request or response consists of a sequence of values and | response and it MUST contain a single IPP operation request or IPP | |||
| attribute groups. Attribute groups consist of a sequence of attributes | operation response. Each request or response consists of a sequence of | |||
| each of which is a name and value. Names and values are ultimately | values and attribute groups. Attribute groups consist of a sequence of | |||
| sequences of octets | attributes each of which is a name and value. Names and values are | |||
| ultimately sequences of octets. | ||||
| The encoding consists of octets as the most primitive type. There are | The encoding consists of octets as the most primitive type. There are | |||
| several types built from octets, but three important types are | several types built from octets, but three important types are integers, | |||
| integers, character strings and octet strings, on which most other | character strings and octet strings, on which most other data types are | |||
| data types are built. Every character string in this encoding MUST be a | built. Every character string in this encoding MUST be a sequence of | |||
| sequence of characters where the characters are associated with some | characters where the characters are associated with some charset and | |||
| charset and some natural language. A character string MUST be in | some natural language. A character string MUST be in "reading order" | |||
| "reading order" with the first character in the value (according to | with the first character in the value (according to reading order) being | |||
| reading order) being the first character in the encoding. A character | the first character in the encoding. A character string whose associated | |||
| string whose associated charset is US-ASCII whose associated natural | charset is US-ASCII whose associated natural language is US English is | |||
| language is US English is henceforth called a US-ASCII-STRING. A | henceforth called a US-ASCII-STRING. A character string whose associated | |||
| character string whose associated charset and natural language are | charset and natural language are specified in a request or response as | |||
| specified in a request or response as described in the model document is | described in the model document is henceforth called a LOCALIZED-STRING. | |||
| henceforth called a LOCALIZED-STRING. An octet string MUST be in "IPP | An octet string MUST be in "IPP model document order" with the first | |||
| model document order" with the first octet in the value (according to | octet in the value (according to the IPP model document order) being the | |||
| the IPP model document order) being the first octet in the encoding | first octet in the encoding. Every integer in this encoding MUST be | |||
| Every integer in this encoding MUST be encoded as a signed integer using | encoded as a signed integer using two's-complement binary encoding with | |||
| two's-complement binary encoding with big-endian format (also known as | big-endian format (also known as "network order" and "most significant | |||
| "network order" and "most significant byte first"). The number of octets | byte first"). The number of octets for an integer MUST be 1, 2 or 4, | |||
| for an integer MUST be 1, 2 or 4, depending on usage in the protocol. | depending on usage in the protocol. Such one-octet integers, henceforth | |||
| Such one-octet integers, henceforth called SIGNED-BYTE, are used for the | called SIGNED-BYTE, are used for the version-number and tag fields. Such | |||
| version-number and tag fields. Such two-byte integers, henceforth called | two-byte integers, henceforth called SIGNED-SHORT are used for the | |||
| SIGNED-SHORT are used for the operation-id, status-code and length | operation-id, status-code and length fields. Four byte integers, | |||
| fields. Four byte integers, henceforth called SIGNED-INTEGER, are used | henceforth called SIGNED-INTEGER, are used for value fields and the | |||
| for values fields and the sequence number. | request-id. | |||
| The following two sections present the operation layer in two ways | ||||
| - informally through pictures and description | The following two sections present the encoding of the operation layer | |||
| in two ways: | ||||
| - formally through Augmented Backus-Naur Form (ABNF), as specified by | - informally through pictures and description | |||
| - formally through Augmented Backus-Naur Form (ABNF), as specified by | ||||
| RFC 2234 [RFC2234] | RFC 2234 [RFC2234] | |||
| An operation request or response MUST use the encoding described in | ||||
| these two sections. | ||||
| 3.1 Picture of the Encoding | 3.1 Picture of the Encoding | |||
| The encoding for an operation request or response consists of: | 3.1.1 Request and Response | |||
| An operation request or response is encoded as follows: | ||||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | version-number | 2 bytes - required | | version-number | 2 bytes - required | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | operation-id (request) | | | operation-id (request) | | |||
| | or | 2 bytes - required | | or | 2 bytes - required | |||
| | status-code (response) | | | status-code (response) | | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | request-id | 4 bytes - required | | request-id | 4 bytes - required | |||
| ----------------------------------------------------------- | ----------------------------------------------- | |||
| | xxx-attributes-tag | 1 byte | | | attribute-group | n bytes - 0 or more | |||
| ----------------------------------------------- |-0 or more | ----------------------------------------------- | |||
| | xxx-attribute-sequence | n bytes | | ||||
| ----------------------------------------------------------- | ||||
| | end-of-attributes-tag | 1 byte - required | | end-of-attributes-tag | 1 byte - required | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | data | q bytes - optional | | data | q bytes - optional | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| The xxx-attributes-tag and xxx-attribute-sequence represents four | The first three fields in the above diagram contain the value of | |||
| different values of "xxx", namely, operation, job, printer and | attributes described in section 3.1.1 of the Model document. | |||
| unsupported. The xxx-attributes-tag and an xxx-attribute-sequence | ||||
| represent attribute groups in the model document. The xxx-attributes-tag | ||||
| identifies the attribute group and the xxx-attribute-sequence contains | ||||
| the attributes. | ||||
| The expected sequence of xxx-attributes-tag and xxx-attribute-sequence | ||||
| is specified in the IPP model document for each operation request and | ||||
| operation response. | ||||
| A request or response SHOULD contain each xxx-attributes-tag defined for | The fourth field is the "attribute-group" field, and it occurs 0 or more | |||
| that request or response even if there are no attributes except for the | times. Each "attribute-group" field represents a single group of | |||
| unsupported-attributes-tag which SHOULD be present only if the | attributes, such as an Operation Attributes group or a Job Attributes | |||
| unsupported-attribute-sequence is non-empty. A receiver of a request | group (see the Model document). The IPP model document specifies the | |||
| MUST be able to process as equivalent empty attribute groups: | required attribute groups and their order for each operation request and | |||
| response. | ||||
| a) an xxx-attributes-tag with an empty xxx-attribute-sequence, | The "end-of-attributes-tag" field is always present, even when the | |||
| b) an expected but missing xxx-attributes-tag. | "data" is not present. The Model document specifies for each operation | |||
| request and response whether the "data" field is present or absent. | ||||
| The data is omitted from some operations, but the end-of-attributes-tag | 3.1.2 Attribute Group | |||
| is present even when the data is omitted. Note, the xxx-attributes-tags | ||||
| and end-of-attributes-tag are called 'delimiter-tags'. Note: the xxx- | ||||
| attribute-sequence, shown above may consist of 0 bytes, according to the | ||||
| rule below. | ||||
| An xxx-attributes-sequence consists of zero or more compound-attributes. | Each "attribute-group" field is encoded as follows: | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | compound-attribute | s bytes - 0 or more | | begin-attribute-group-tag | 1 byte | |||
| ---------------------------------------------------------- | ||||
| | attribute | p bytes |- 0 or more | ||||
| ---------------------------------------------------------- | ||||
| The "begin-attribute-group-tag" field marks the beginning of an | ||||
| "attribute-group" field and its value identifies the type of attribute | ||||
| group, e.g. Operations Attributes group versus a Job Attributes group. | ||||
| The "begin-attribute-group-tag" field also marks the end of the previous | ||||
| attribute group except for the "begin-attribute-group-tag" field in the | ||||
| first "attribute-group" field of a request or response. The "begin- | ||||
| attribute-group-tag" field acts as an "attribute-group" terminator | ||||
| because an "attribute-group" field cannot nest inside another | ||||
| "attribute-group" field. | ||||
| An "attribute-group" field contains zero or more "attribute" fields. | ||||
| Note, the values of the "begin-attribute-group-tag" field and the "end- | ||||
| of-attributes-tag" field are called "delimiter-tags". | ||||
| 3.1.3 Attribute | ||||
| An "attribute" field is encoded as follows: | ||||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | attribute-with-one-value | q bytes | ||||
| ---------------------------------------------------------- | ||||
| | additional-value | r bytes |- 0 or more | ||||
| ---------------------------------------------------------- | ||||
| A compound-attribute consists of an attribute with a single value | When an attribute is single valued (e.g. "copies" with value of 10) or | |||
| followed by zero or more additional values. | multi-valued with one value (e.g. "sides-supported" with just the value | |||
| 'one-sided') it is encoded with just an "attribute-with-one-value" | ||||
| field. When an attribute is multi-valued with n values (e.g. "sides- | ||||
| supported" with the values 'one-sided' and 'two-sided-long-edge'), it is | ||||
| encoded with an "attribute-with-one-value" field followed by n-1 | ||||
| "additional-value" fields. | ||||
| Note: a 'compound-attribute' represents a single attribute in the model | 3.1.4 Picture of the Encoding of an Attribute-with-one-value | |||
| document. The 'additional value' syntax is for attributes with 2 or | ||||
| more values. | ||||
| Each attribute consists of: | Each "attribute-with-one-value" field is encoded as follows: | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | value-tag | 1 byte | | value-tag | 1 byte | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | name-length (value is u) | 2 bytes | | name-length (value is u) | 2 bytes | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | name | u bytes | | name | u bytes | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | value-length (value is v) | 2 bytes | | value-length (value is v) | 2 bytes | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | value | v bytes | | value | v bytes | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| An additional value consists of: | An "attribute-with-one-value" field is encoded with five subfields: | |||
| ----------------------------------------------------------- | The "value-tag" field specifies the attribute syntax, e.g. 0x44 for | |||
| | value-tag | 1 byte | | the attribute syntax 'keyword'. | |||
| ----------------------------------------------- | | ||||
| | name-length (value is 0x0000) | 2 bytes | | ||||
| ----------------------------------------------- |-0 or more | ||||
| | value-length (value is w) | 2 bytes | | ||||
| ----------------------------------------------- | | ||||
| | value | w bytes | | ||||
| ----------------------------------------------------------- | ||||
| Note: an additional value is like an attribute whose name-length is 0. | The "name-length" field specifies the length of the "name" field in | |||
| bytes, e.g. u in the above diagram or 15 for the name "sides- | ||||
| supported ". | ||||
| >From the standpoint of a parsing loop, the encoding consists of: | The "name" field contains the textual name of the attribute, e.g. | |||
| "sides-supported". | ||||
| The "value-length" field specifies the length of the "value" field in | ||||
| bytes, e.g. v in the above diagram or 9 for the (keyword) value 'one- | ||||
| sided'. | ||||
| The "value" field contains the value of the attribute, e.g. the | ||||
| textual value 'one-sided'. | ||||
| 3.1.5 Additional-value | ||||
| Each "additional-value" field is encoded as follows: | ||||
| ----------------------------------------------- | ||||
| | value-tag | 1 byte | ||||
| ----------------------------------------------- | ||||
| | name-length (value is 0x0000) | 2 bytes | ||||
| ----------------------------------------------- | ||||
| | value-length (value is w) | 2 bytes | ||||
| ----------------------------------------------- | ||||
| | value | w bytes | ||||
| ----------------------------------------------- | ||||
| An "additional-value" is encoded with four subfields: | ||||
| The "value-tag" field specifies the attribute syntax, e.g. 0x44 for | ||||
| the attribute syntax 'keyword'. | ||||
| The "name-length" field has the value of 0 in order to signify that | ||||
| it is an "additional-value". The value of the "name-length" field | ||||
| distinguishes an "additional-value" field ("name-length" is 0) from | ||||
| an "attribute-with-one-value" field ("name-length" is not 0). | ||||
| The "value-length" field specifies the length of the "value" field in | ||||
| bytes, e.g. w in the above diagram or 19 for the (keyword) value | ||||
| 'two-sided-long-edge'. | ||||
| The "value" field contains the value of the attribute, e.g. the | ||||
| textual value 'two-sided-long-edge'. | ||||
| 3.1.6 Alternative Picture of the Encoding of a Request Or a Response | ||||
| >From the standpoint of a parser that performs an action based on a "tag" | ||||
| value, the encoding consists of: | ||||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | version-number | 2 bytes - required | | version-number | 2 bytes - required | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | operation-id (request) | | | operation-id (request) | | |||
| | or | 2 bytes - required | | or | 2 bytes - required | |||
| | status-code (response) | | | status-code (response) | | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | request-id | 4 bytes - required | | request-id | 4 bytes - required | |||
| ----------------------------------------------------------- | ----------------------------------------------------------- | |||
| | tag (delimiter-tag or value-tag) | 1 byte | | | tag (delimiter-tag or value-tag) | 1 byte | | |||
| ----------------------------------------------- |-0 or more | ----------------------------------------------- |-0 or more | |||
| | empty or rest of attribute | x bytes | | | empty or rest of attribute | x bytes | | |||
| ----------------------------------------------------------- | ----------------------------------------------------------- | |||
| | end-of-attributes-tag | 2 bytes - required | | end-of-attributes-tag | 1 byte - required | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| | data | y bytes - optional | | data | y bytes - optional | |||
| ----------------------------------------------- | ----------------------------------------------- | |||
| The value of the tag determines whether the bytes following the tag are: | The following show what fields the parser would expect after each type | |||
| of "tag": | ||||
| - attributes | ||||
| - data | ||||
| - the remainder of a single attribute where the tag specifies the | - "begin-attribute-group-tag": expect zero or more "attribute"s | |||
| type of the value. | - "value-tag": expect the remainder of an "attribute-with-one-value" | |||
| or an "additional-value". | ||||
| - "end-of-attributes-tag": expect that "attribute"s are complete and | ||||
| there is optional "data" | ||||
| 3.2 Syntax of Encoding | 3.2 Syntax of Encoding | |||
| The syntax below is ABNF [RFC2234] except 'strings of literals' MUST be | The syntax below is ABNF [RFC2234] except 'strings of literals' MUST be | |||
| case sensitive. For example 'a' means lower case 'a' and not upper case | case sensitive. For example 'a' means lower case 'a' and not upper case | |||
| 'A'. In addition, SIGNED-BYTE and SIGNED-SHORT fields are represented | 'A'. In addition, SIGNED-BYTE and SIGNED-SHORT fields are represented | |||
| as '%x' values which show their range of values. | as '%x' values which show their range of values. | |||
| ipp-message = ipp-request / ipp-response | ipp-message = ipp-request / ipp-response | |||
| ipp-request = version-number operation-id request-id | ipp-request = version-number operation-id request-id | |||
| *(xxx-attributes-tag xxx-attribute-sequence) end-of- | *attribute-group end-of-attributes-tag data | |||
| attributes-tag data | ||||
| ipp-response = version-number status-code request-id | ipp-response = version-number status-code request-id | |||
| *(xxx-attributes-tag xxx-attribute-sequence) end-of- | *attribute-group end-of-attributes-tag data | |||
| attributes-tag data | attribute-group = begin-attribute-group-tag attribute | |||
| xxx-attribute-sequence = *compound-attribute | ||||
| xxx-attributes-tag = operation-attributes-tag / job-attributes-tag / | ||||
| printer-attributes-tag / unsupported-attributes-tag | ||||
| version-number = major-version-number minor-version-number | version-number = major-version-number minor-version-number | |||
| major-version-number = SIGNED-BYTE ; initially %d1 | major-version-number = SIGNED-BYTE | |||
| minor-version-number = SIGNED-BYTE ; initially %d0 | minor-version-number = SIGNED-BYTE | |||
| operation-id = SIGNED-SHORT ; mapping from model defined below | operation-id = SIGNED-SHORT ; mapping from model defined below | |||
| status-code = SIGNED-SHORT ; mapping from model defined below | status-code = SIGNED-SHORT ; mapping from model defined below | |||
| request-id = SIGNED-INTEGER ; whose value is > 0 | request-id = SIGNED-INTEGER ; whose value is > 0 | |||
| compound-attribute = attribute *additional-values | attribute = attribute-with-one-value *additional-value | |||
| attribute = value-tag name-length name value-length value | attribute-with-one-value = value-tag name-length name | |||
| additional-values = value-tag zero-name-length value-length value | value-length value | |||
| additional-value = value-tag zero-name-length value-length value | ||||
| name-length = SIGNED-SHORT ; number of octets of 'name' | name-length = SIGNED-SHORT ; number of octets of 'name' | |||
| name = LALPHA *( LALPHA / DIGIT / "-" / "_" / "." ) | name = LALPHA *( LALPHA / DIGIT / "-" / "_" / "." ) | |||
| value-length = SIGNED-SHORT ; number of octets of 'value' | value-length = SIGNED-SHORT ; number of octets of 'value' | |||
| value = OCTET-STRING | value = OCTET-STRING | |||
| data = OCTET-STRING | data = OCTET-STRING | |||
| zero-name-length = %x00.00 ; name-length of 0 | zero-name-length = %x00.00 ; name-length of 0 | |||
| operation-attributes-tag = %x01 ; tag of 1 | value-tag = %x10-FF ;see section 3.7.2 | |||
| job-attributes-tag = %x02 ; tag of 2 | begin-attribute-group-tag = %x00-02 / %04-0F ; see section 3.7.1 | |||
| printer-attributes-tag = %x04 ; tag of 4 | end-of-attributes-tag = %x03 ; tag of 3 | |||
| unsupported- attributes-tag = %x05 ; tag of 5 | ; see section 3.7.1 | |||
| end-of-attributes-tag = %x03 ; tag of 3 | ||||
| value-tag = %x10-FF | ||||
| SIGNED-BYTE = BYTE | SIGNED-BYTE = BYTE | |||
| SIGNED-SHORT = 2BYTE | SIGNED-SHORT = 2BYTE | |||
| SIGNED-INTEGER = 4BYTE | SIGNED-INTEGER = 4BYTE | |||
| DIGIT = %x30-39 ; "0" to "9" | DIGIT = %x30-39 ; "0" to "9" | |||
| LALPHA = %x61-7A ; "a" to "z" | LALPHA = %x61-7A ; "a" to "z" | |||
| BYTE = %x00-FF | BYTE = %x00-FF | |||
| OCTET-STRING = *BYTE | OCTET-STRING = *BYTE | |||
| The syntax allows an xxx-attributes-tag to be present when the xxx- | The syntax below defines additional terms that are referenced in this | |||
| attribute-sequence that follows is empty. The syntax is defined this way | document. This syntax provides an alternate grouping of the delimiter | |||
| to allow for the response of Get-Jobs where no attributes are returned | tags. | |||
| 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. | ||||
| 3.3 Version-number | delimiter-tag = begin-attribute-group-tag / ; see section 3.7.1 | |||
| end-of-attributes-tag | ||||
| delimiter-tag = %x00-0F ; see section 3.7.1 | ||||
| The version-number MUST consist of a major and minor version-number, | begin-attribute-group-tag = %x00 / operation-attributes-tag / | |||
| each of which MUST be represented by a SIGNED-BYTE. The protocol | job-attributes-tag / printer-attributes-tag / | |||
| unsupported-attributes-tag / %x06-0F | ||||
| operation-attributes-tag = %x01 ; tag of 1 | ||||
| job-attributes-tag = %x02 ; tag of 2 | ||||
| printer-attributes-tag = %x04 ; tag of 4 | ||||
| unsupported-attributes-tag = %x05 ; tag of 5 | ||||
| 3.3 Attribute-group | ||||
| Each "attribute-group" field MUST be encoded with the "begin-attribute- | ||||
| group-tag" field followed by zero or more "attribute" sub-fields. | ||||
| The table below maps the model document group name to value of the | ||||
| "begin-attribute-group-tag" field: | ||||
| Model Document Group "begin-attribute-group-tag" field | ||||
| values | ||||
| Operation Attributes "operations-attributes-tag" | ||||
| Job Template Attributes "job-attributes-tag" | ||||
| Job Object Attributes "job-attributes-tag" | ||||
| Unsupported Attributes "unsupported-attributes-tag" | ||||
| Requested Attributes "job-attributes-tag" | ||||
| (Get-Job-Attributes) | ||||
| Requested Attributes "printer-attributes-tag" | ||||
| (Get-Printer-Attributes) | ||||
| Document Content in a special position as described | ||||
| above | ||||
| For each operation request and response, the model document prescribes | ||||
| the required and optional attribute groups, along with their order. | ||||
| Within each attribute group, the model document prescribes the required | ||||
| and optional attributes, along with their order. | ||||
| When the Model document requires an attribute group in a request or | ||||
| response and the attribute group contains zero attributes, a request or | ||||
| response SHOULD encode the attribute group with the "begin-attribute- | ||||
| group-tag" field followed by zero "attribute" fields. For example, if | ||||
| the client requests a single unsupported attribute with the Get-Printer- | ||||
| Attributes operation, the Printer MUST return no "attribute" fields, and | ||||
| it SHOULD return a "begin-attribute-group-tag" field for the Printer | ||||
| Attributes Group. The Unsupported Attributes group is not such an | ||||
| example. According to the model document, the Unsupported Attributes | ||||
| Group SHOULD be present only if the unsupported attributes group | ||||
| contains at least one attribute. | ||||
| A receiver of a request MUST be able to process the following as | ||||
| equivalent empty attribute groups: | ||||
| a) A "begin-attribute-group-tag" field with zero following | ||||
| "attribute" fields. | ||||
| b) An expected but missing "begin-attribute-group-tag" field. | ||||
| When the Model document requires a sequence of an unknown number of | ||||
| attribute groups, each of the same type, the encoding MUST contain one | ||||
| "begin-attribute-group-tag" field for each attribute group even when an | ||||
| "attribute-group" field contains zero "attribute" sub-fields. For | ||||
| example, for the Get-Jobs operation may return zero attributes for some | ||||
| jobs and not others. The "begin-attribute-group-tag" field followed by | ||||
| zero "attribute" fields tells the recipient that there is a job in queue | ||||
| for which no information is available except that it is in the queue. | ||||
| 3.4 Required Parameters | ||||
| Some operation elements are called parameters in the model document | ||||
| [ipp-mod]. They MUST be encoded in a special position and they MUST NOT | ||||
| appear as operation attributes. These parameters are described in the | ||||
| subsections below. | ||||
| 3.4.1 Version-number | ||||
| The "version-number" field MUST consist of a major and minor version- | ||||
| number, each of which MUST be represented by a SIGNED-BYTE. The major | ||||
| version-number MUST be the first byte of the encoding and the minor | ||||
| version-number MUST be the second byte of the encoding. The protocol | ||||
| described in this document MUST have a major version-number of 1 (0x01) | described in this document MUST have a major version-number of 1 (0x01) | |||
| and a minor version-number of 1 (0x01). The ABNF for these two bytes | and a minor version-number of 1 (0x01). The ABNF for these two bytes | |||
| MUST be %x01.01. | MUST be %x01.01. | |||
| 3.4 Operation-id | 3.4.2 Operation-id | |||
| Operation-ids are defined as enums in the model document. An operation- | The "operation-id" field MUST contain an operation-id value defined in | |||
| ids enum value MUST be encoded as a SIGNED-SHORT. | the model document. The value MUST be encoded as a SIGNED-SHORT and it | |||
| MUST be in the third and fourth bytes of the encoding of an operation | ||||
| request. | ||||
| 3.5 Status-code | 3.4.3 Status-code | |||
| Status-codes are defined as enums in the model document. A status-code | The "status-code" field MUST contain a status-code value defined in the | |||
| enum value MUST be encoded as a SIGNED-SHORT. | model document. The value MUST be encoded as a SIGNED-SHORT and it MUST | |||
| be in the third and fourth bytes of the encoding of an operation | ||||
| response. | ||||
| The status-code is an operation attribute in the model document. In the | The status-code is an operation attribute in the model document. In the | |||
| protocol, the status-code is in a special position, outside of the | protocol, the status-code is in a special position, outside of the | |||
| operation attributes. | operation attributes. | |||
| If an IPP status-code is returned, then the HTTP Status-Code MUST be 200 | If an IPP status-code is returned, then the HTTP Status-Code MUST be 200 | |||
| (successful-ok). With any other HTTP Status-Code value, the HTTP | (successful-ok). With any other HTTP Status-Code value, the HTTP | |||
| response MUST NOT contain an IPP message-body, and thus no IPP status- | response MUST NOT contain an IPP message-body, and thus no IPP status- | |||
| code is returned. | code is returned. | |||
| 3.6 Request-id | 3.4.4 Request-id | |||
| The request-id allows a client to match a response with a request. This | ||||
| mechanism is unnecessary in HTTP, but may be useful when application/ipp | ||||
| entity bodies are used in another context. | ||||
| The request-id in a response MUST be the value of the request-id | The "request-id" field MUST contain a request-id value as defined in the | |||
| received in the corresponding request. A client can set the request-id | model document. The value MUST be encoded as a SIGNED- INTEGER and it | |||
| in each request to a unique value or a constant value, such as 1, | MUST be in the fifth through eighth bytes of the encoding. | |||
| depending on what the client does with the request-id returned in the | ||||
| response. The value of the request-id MUST be greater than zero. | ||||
| 3.7 Tags | 3.5 Tags | |||
| There are two kinds of tags: | There are two kinds of tags: | |||
| - delimiter tags: delimit major sections of the protocol, namely | - delimiter tags: delimit major sections of the protocol, namely | |||
| attributes and data | attributes and data | |||
| - value tags: specify the type of each attribute value | ||||
| - value tags: specify the type of each attribute value | 3.5.1 Delimiter Tags | |||
| 3.7.1 Delimiter Tags | ||||
| The following table specifies the values for the delimiter tags: | The following table specifies the values for the delimiter tags: | |||
| Tag Value (Hex) Delimiter | Tag Value (Hex) Meaning | |||
| 0x00 reserved for definition in a future IETF | 0x00 reserved for definition in a future IETF | |||
| standards track document | standards track document | |||
| 0x01 operation-attributes-tag | 0x01 "operation-attributes-tag" | |||
| 0x02 job-attributes-tag | 0x02 "job-attribute-tag" | |||
| 0x03 end-of-attributes-tag | 0x03 "end-of-attributes-tag" | |||
| 0x04 printer-attributes-tag | 0x04 "printer-attribute-tag" | |||
| 0x05 unsupported-attributes-tag | 0x05 "unsupported-attribute-tag" | |||
| 0x06-0x0e reserved for future delimiters in IETF | 0x06-0x0f reserved for future delimiters in IETF | |||
| standards track documents | standards track documents | |||
| 0x0F reserved for future chunking-end-of-attributes- | ||||
| tag for definition in a future IETF standards | ||||
| track document | ||||
| When an xxx-attributes-tag occurs in the protocol, it MUST mean that | When a "begin-attribute-group-tag" field occurs in the protocol, it | |||
| zero or more following attributes up to the next delimiter tag are | means that zero or more following attributes up to the next delimiter | |||
| attributes belonging to group xxx as defined in the model document, | tag MUST be attributes belonging to the attribute group specified by the | |||
| where xxx is operation, job, printer, unsupported. | value of the "begin-attribute-group-tag". For example, if the value of | |||
| "begin-attribute-group-tag" is 0x01, the following attributes MUST be | ||||
| Doing substitution for xxx in the above paragraph, this means the | members of the Operations Attributes group. | |||
| following. When an operation-attributes-tag occurs in the protocol, it | ||||
| MUST mean that the zero or more following attributes up to the next | ||||
| delimiter tag are operation attributes as defined in the model document. | ||||
| When an job-attributes-tag occurs in the protocol, it MUST mean that the | ||||
| zero or more following attributes up to the next delimiter tag are job | ||||
| attributes or job template attributes as defined in the model document. | ||||
| When a printer-attributes-tag occurs in the protocol, it MUST mean that | ||||
| the zero or more following attributes up to the next delimiter tag are | ||||
| printer attributes as defined in the model document. When an | ||||
| unsupported-attributes-tag occurs in the protocol, it MUST mean that the | ||||
| zero or more following attributes up to the next delimiter tag are | ||||
| unsupported attributes as defined in the model document. | ||||
| The operation-attributes-tag and end-of-attributes-tag MUST each occur | The "end-of-attributes-tag" (value 0x03) MUST occur exactly once in an | |||
| exactly once in an operation. The operation-attributes-tag MUST be the | operation. It MUST be the last "delimiter-tag". If the operation has a | |||
| first tag delimiter, and the end-of-attributes-tag MUST be the last tag | document-content group, the document data in that group MUST follow the | |||
| delimiter. If the operation has a document-content group, the document | "end-of-attributes-tag". | |||
| data in that group MUST follow the end-of-attributes-tag. | ||||
| Each of the other three xxx-attributes-tags defined above is OPTIONAL | The order and presence of "attribute-group" fields (whose beginning is | |||
| in an operation and each MUST occur at most once in an operation, except | marked by the "begin-attribute-group-tag" subfield) for each operation | |||
| for job-attributes-tag in a Get-Jobs response which may occur zero or | request and each operation response MUST be that defined in the model | |||
| more times. | document. For further details, see section 3.7 "(Attribute) Name" and 13 | |||
| "Appendix A: Protocol Examples". | ||||
| The order and presence of delimiter tags for each operation request and | A Printer MUST treat a "delimiter-tag" (values from 0x00 through 0x0F) | |||
| each operation response MUST be that defined in the model document. For | differently from a "value-tag" (values from 0x10 through 0xFF) so that | |||
| further details, see section 3.9 "(Attribute) Name" and 13 "Appendix A: | the Printer knows that there is an entire attribute group that it | |||
| Protocol Examples". | doesn't understand as opposed to a single value that it doesn't | |||
| understand. | ||||
| A Printer MUST treat the reserved delimiter tags differently from | 3.5.2 Value Tags | |||
| reserved value tags so that the Printer knows that there is an entire | ||||
| attribute group that it doesn't understand as opposed to a single value | ||||
| that it doesn't understand. | ||||
| 3.7.2 Value Tags | The remaining tables show values for the "value-tag" field, which is the | |||
| first octet of an attribute. The "value-tag" field specifies the type of | ||||
| the value of the attribute. | ||||
| The remaining tables show values for the value-tag, which is the first | The following table specifies the "out-of-band" values for the "value- | |||
| octet of an attribute. The value-tag specifies the type of the value of | tag" field. | |||
| the attribute. The following table specifies the "out-of-band" values | ||||
| for the value-tag. | ||||
| Tag Value (Hex) Meaning | Tag Value (Hex) Meaning | |||
| 0x10 unsupported | 0x10 unsupported | |||
| 0x11 reserved for 'default' for definition in a future | 0x11 reserved for 'default' for definition in a future | |||
| IETF standards track document | IETF standards track document | |||
| 0x12 unknown | 0x12 unknown | |||
| 0x13 no-value | 0x13 no-value | |||
| 0x14-0x1F reserved for "out-of-band" values in future IETF | 0x14-0x1F reserved for "out-of-band" values in future IETF | |||
| standards track documents. | standards track documents. | |||
| The "unsupported" value MUST be used in the attribute-sequence of an | The following table specifies the integer values for the "value-tag" | |||
| error response for those attributes which the printer does not support. | field: | |||
| The "default" value is reserved for future use of setting value back to | ||||
| their default value. The "unknown" value is used for the value of a | ||||
| supported attribute when its value is temporarily unknown. The "no- | ||||
| value" value is used for a supported attribute to which no value has | ||||
| been assigned, e.g. "job-k-octets-supported" has no value if an | ||||
| implementation supports this attribute, but an administrator has not | ||||
| configured the printer to have a limit. | ||||
| The following table specifies the integer values for the value-tag: | ||||
| Tag Value (Hex) Meaning | Tag Value (Hex) Meaning | |||
| 0x20 reserved for definition in a future IETF | 0x20 reserved for definition in a future IETF | |||
| standards track document | standards track document | |||
| 0x21 integer | 0x21 integer | |||
| 0x22 boolean | 0x22 boolean | |||
| 0x23 enum | 0x23 enum | |||
| 0x24-0x2F reserved for integer types for definition in | 0x24-0x2F reserved for integer types for definition in | |||
| future IETF standards track documents | future IETF standards track documents | |||
| NOTE: 0x20 is reserved for "generic integer" if it should ever be | NOTE: 0x20 is reserved for "generic integer" if it should ever be | |||
| needed. | needed. | |||
| The following table specifies the octetString values for the value-tag: | The following table specifies the octetString values for the "value-tag" | |||
| field: | ||||
| Tag Value (Hex) Meaning | Tag Value (Hex) Meaning | |||
| 0x30 octetString with an unspecified format | 0x30 octetString with an unspecified format | |||
| 0x31 dateTime | 0x31 dateTime | |||
| 0x32 resolution | 0x32 resolution | |||
| 0x33 rangeOfInteger | 0x33 rangeOfInteger | |||
| 0x34 reserved for definition in a future IETF | 0x34 reserved for definition in a future IETF | |||
| standards track document | standards track document | |||
| 0x35 textWithLanguage | 0x35 textWithLanguage | |||
| 0x36 nameWithLanguage | 0x36 nameWithLanguage | |||
| 0x37-0x3F reserved for octetString type definitions in | 0x37-0x3F reserved for octetString type definitions in | |||
| future IETF standards track documents | future IETF standards track documents | |||
| The following table specifies the character-string values for the value- | The following table specifies the character-string values for the | |||
| tag: | "value-tag" field: | |||
| Tag Value (Hex) Meaning | Tag Value (Hex) Meaning | |||
| 0x40 reserved for definition in a future IETF | 0x40 reserved for definition in a future IETF | |||
| standards track document | standards track document | |||
| 0x41 textWithoutLanguage | 0x41 textWithoutLanguage | |||
| 0x42 nameWithoutLanguage | 0x42 nameWithoutLanguage | |||
| 0x43 reserved for definition in a future IETF | 0x43 reserved for definition in a future IETF | |||
| standards track document | standards track document | |||
| 0x44 keyword | 0x44 keyword | |||
| 0x45 uri | 0x45 uri | |||
| 0x46 uriScheme | 0x46 uriScheme | |||
| 0x47 charset | 0x47 charset | |||
| 0x48 naturalLanguage | 0x48 naturalLanguage | |||
| 0x49 mimeMediaType | 0x49 mimeMediaType | |||
| 0x4A-0x5F reserved for character string type definitions | 0x4A-0x5F reserved for character string type definitions | |||
| in future IETF standards track documents | in future IETF standards track documents | |||
| NOTE: 0x40 is reserved for "generic character-string" if it should ever | NOTE: 0x40 is reserved for "generic character-string" if it should ever | |||
| be needed. | be needed. | |||
| NOTE: an attribute value always has a type, which is explicitly | NOTE: an attribute value always has a type, which is explicitly | |||
| specified by its tag; one such tag value is "nameWithoutLanguage". An | specified by its tag; one such tag value is "nameWithoutLanguage". An | |||
| attribute's name has an implicit type, which is keyword. | attribute's name has an implicit type, which is keyword. | |||
| The values 0x60-0xFF are reserved for future type definations in IETF | The values 0x60-0xFF are reserved for future type definitions in IETF | |||
| standards track documents. | standards track documents. | |||
| The tag 0x7F is reserved for extending types beyond the 255 values | The tag 0x7F is reserved for extending types beyond the 255 values | |||
| available with a single byte. A tag value of 0x7F MUST signify that the | available with a single byte. A tag value of 0x7F MUST signify that the | |||
| first 4 bytes of the value field are interpreted as the tag value. | first 4 bytes of the value field are interpreted as the tag value. Note | |||
| Note, this future extension doesn't affect parsers that are unaware of | this future extension doesn't affect parsers that are unaware of this | |||
| this special tag. The tag is like any other unknown tag, and the value | special tag. The tag is like any other unknown tag, and the value length | |||
| length specifies the length of a value which contains a value that the | specifies the length of a value, which contains a value that the parser | |||
| parser treats atomically. Values from 0x00 to 0x37777777 are reserved | treats atomically. Values from 0x00 to 0x37777777 are reserved for | |||
| for definition in future IETF standard track documents. The values | definition in future IETF standard track documents. The values | |||
| 0x40000000 to0x7FFFFFFF are reserved for vendor extensions. | 0x40000000 to 0x7FFFFFFF are reserved for vendor extensions. | |||
| 3.8 Name-Length | 3.6 Name-Length | |||
| The name-length field MUST consist of a SIGNED-SHORT. This field MUST | The "name-length" field MUST consist of a SIGNED-SHORT. This field MUST | |||
| specify the number of octets in the name field which follows the name- | specify the number of octets in the immediately following "name" field. | |||
| length field, excluding the two bytes of the name-length field. | The value of this field excludes the two bytes of the "name-length" | |||
| field. For example, if the "name" field contains "sides", the value of | ||||
| this field is 5. | ||||
| If a name-length field has a value of zero, the following name field | If a "name-length" field has a value of zero, the following "name" field | |||
| MUST be empty, and the following value MUST be treated as an additional | MUST be empty, and the following value MUST be treated as an additional | |||
| value for the preceding attribute. Within an attribute-sequence, if two | value for the attribute encoded in the nearest preceding "attribute- | |||
| or more attributes have the same name, the attribute-sequence is mal- | with-one-value" field. Within an attribute group, if two or more | |||
| formed (see [ipp-mod] section 3.1.3). The zero-length name is the only | attributes have the same name, the attribute group is mal-formed (see | |||
| mechanism for multi-valued attributes. | [ipp-mod] section 3.1.3). The zero-length name is the only mechanism for | |||
| multi-valued attributes. | ||||
| 3.9 (Attribute) Name | ||||
| Some operation elements are called parameters in the model document | ||||
| [ipp-mod]. They MUST be encoded in a special position and they MUST NOT | ||||
| appear as operation attributes. These parameters are: | ||||
| - "version-number": The parameter named "version-number" in the IPP | ||||
| model document MUST become the "version-number" field in the | ||||
| operation layer request or response. | ||||
| - "operation-id": The parameter named "operation-id" in the IPP model | ||||
| document MUST become the "operation-id" field in the operation | ||||
| layer request. | ||||
| - "status-code": The parameter named "status-code" in the IPP model | ||||
| document MUST become the "status-code" field in the operation layer | ||||
| response. | ||||
| - "request-id": The parameter named "request-id" in the IPP model | ||||
| document MUST become the "request-id" field in the operation layer | ||||
| request or response. | ||||
| All Printer and Job objects are identified by a Uniform Resource | ||||
| Identifier (URI) [RFC2396] so that they can be persistently and | ||||
| unambiguously referenced. The notion of a URI is a useful concept, | ||||
| however, until the notion of URI is more stable (i.e., defined more | ||||
| completely and deployed more widely), it is expected that the URIs used | ||||
| for IPP objects will actually be URLs [RFC1738] [RFC1808]. Since every | ||||
| URL is a specialized form of a URI, even though the more generic term | ||||
| URI is used throughout the rest of this document, its usage is intended | ||||
| to cover the more specific notion of URL as well. | ||||
| Some operation elements are encoded twice, once as the request-URI on | ||||
| the HTTP Request-Line and a second time as a REQUIRED operation | ||||
| attribute in the application/ipp entity. These attributes are the | ||||
| target URI for the operation and are called printer-uri and job-uri. | ||||
| Note: The target URI is included twice in an operation referencing the | ||||
| same IPP object, but the two URIs NEED NOT be literally identical. One | ||||
| can be a relative URI and the other can be an absolute URI. HTTP/1.1 | ||||
| allows clients to generate and send a relative URI rather than an | ||||
| absolute URI. A relative URI identifies a resource with the scope of | ||||
| the HTTP server, but does not include scheme, host or port. The | ||||
| following statements characterize how URLs should be used in the mapping | ||||
| of IPP onto HTTP/1.1: | ||||
| 1. Although potentially redundant, a client MUST supply the target of | ||||
| the operation both as an operation attribute and as a URI at the | ||||
| HTTP layer. The rationale for this decision is to maintain a | ||||
| consistent set of rules for mapping application/ipp to possibly | ||||
| many communication layers, even where URLs are not used as the | ||||
| addressing mechanism in the transport layer. | ||||
| 2. Even though these two URLs might not be literally identical (one | ||||
| being relative and the other being absolute), they MUST both | ||||
| reference the same IPP object. | ||||
| 3. The URI in the HTTP layer is either relative or absolute and is | ||||
| used by the HTTP server to route the HTTP request to the correct | ||||
| resource relative to that HTTP server. The HTTP server need not be | ||||
| aware of the URI within the operation request. | ||||
| 4. Once the HTTP server resource begins to process the HTTP request, | ||||
| it might get the reference to the appropriate IPP Printer object | ||||
| from either the HTTP URI (using to the context of the HTTP server | ||||
| for relative URLs) or from the URI within the operation request; | ||||
| the choice is up to the implementation. | ||||
| 5. HTTP URIs can be relative or absolute, but the target URI in the | ||||
| operation MUST be an absolute URI. | ||||
| The model document arranges the remaining attributes into groups for | ||||
| each operation request and response. Each such group MUST be represented | ||||
| in the protocol by an xxx-attribute-sequence preceded by the appropriate | ||||
| xxx-attributes-tag (See the table below and section 13 "Appendix A: | ||||
| Protocol Examples"). In addition, the order of these xxx-attributes-tags | ||||
| and xxx-attribute-sequences in the protocol MUST be the same as in the | ||||
| model document, but the order of attributes within each xxx-attribute- | ||||
| sequence MUST be unspecified. The table below maps the model document | ||||
| group name to xxx-attributes-sequence: | ||||
| Model Document Group xxx-attributes-sequence | ||||
| Operation Attributes operations-attributes-sequence | 3.7 (Attribute) Name | |||
| Job Template Attributes job-attributes-sequence | ||||
| Job Object Attributes job-attributes-sequence | ||||
| Unsupported Attributes unsupported- attributes-sequence | ||||
| Requested Attributes (Get-Job- job-attributes-sequence | ||||
| Attributes) | ||||
| Requested Attributes (Get- printer-attributes-sequence | ||||
| Printer-Attributes) | ||||
| Document Content in a special position as described | ||||
| above | ||||
| If an operation contains attributes from more than one job object (e.g. | The "name " field MUST contain the name of an attribute. The model | |||
| Get-Jobs response), the attributes from each job object MUST be in a | document [ipp-mod] specifies such names. | |||
| separate job-attribute-sequence, such that the attributes from the ith | ||||
| job object are in the ith job-attribute-sequence. See Section 13 | ||||
| "Appendix A: Protocol Examples" for table showing the application of the | ||||
| rules above. | ||||
| 3.10 Value Length | 3.8 Value Length | |||
| Each attribute value MUST be preceded by a SIGNED-SHORT, which MUST | The "value-length" field MUST consist of a SIGNED-SHORT. This field MUST | |||
| specify the number of octets in the value which follows this length, | specify the number of octets in the immediately following "value" field. | |||
| exclusive of the two bytes specifying the length. | The value of this field excludes the two bytes of the "value-length" | |||
| field. For example, if the "value" field contains the keyword (text) | ||||
| value 'one-sided', the value of this field is 9. | ||||
| For any of the types represented by binary signed integers, the sender | For any of the types represented by binary signed integers, the sender | |||
| MUST encode the value in exactly four octets. | MUST encode the value in exactly four octets. | |||
| For any of the types represented by character-strings, the sender MUST | For any of the types represented by character-strings, the sender MUST | |||
| encode the value with all the characters of the string and without any | encode the value with all the characters of the string and without any | |||
| padding characters. | padding characters. | |||
| If a value-tag contains an "out-of-band" value defined in this document, | For "out-of-band" "value-tag"s defined in this document, such as | |||
| such as "unsupported", the value-length MUST be 0 and the value empty; | "unsupported", the "value-length" MUST be 0 and the "value" empty; the | |||
| the value has no meaning when the value-tag has one of these "out-of- | "value" has no meaning when the "value-tag" has one of these "out-of- | |||
| band" values. However, the definitions of additional "out-of-band" | band" values. For future "out-of-band" "value-tag"s, the same rule holds | |||
| values in future documents are able to explicitly use the value field | unless the definition explicitly states that the "value-length" MAY be | |||
| and have a value-length that is non-zero, if there is a need for | non-zero and the "value" non-empty | |||
| additional information to be associated with the out-of-band value. | ||||
| Unless the definition of an "out-of-band" value explicitly allows for a | ||||
| value, the value-length MUST be 0 and the value empty. | ||||
| 3.11 (Attribute) Value | 3.9 (Attribute) Value | |||
| The syntax types and most of the details of the representation of | The syntax types (specified by the "value-tag" field) and most of the | |||
| attribute values are defined in the IPP model document. The table below | details of the representation of attribute values are defined in the IPP | |||
| augments the information in the model document, and defines the syntax | model document. The table below augments the information in the model | |||
| types from the model document in terms of the 5 basic types defined in | document, and defines the syntax types from the model document in terms | |||
| section 3 "Encoding of the Operation Layer". The 5 types are US-ASCII- | of the 5 basic types defined in section 3 "Encoding of the Operation | |||
| STRING, LOCALIZED-STRING, SIGNED-INTEGER, SIGNED-SHORT, SIGNED-BYTE, and | Layer". The 5 types are US-ASCII-STRING, LOCALIZED-STRING, SIGNED- | |||
| OCTET-STRING. | INTEGER, SIGNED-SHORT, SIGNED-BYTE, and OCTET-STRING. | |||
| Syntax of Attribute Encoding | Syntax of Attribute Encoding | |||
| Value | Value | |||
| textWithoutLanguage, LOCALIZED-STRING. | textWithoutLanguage, LOCALIZED-STRING. | |||
| nameWithoutLanguage | nameWithoutLanguage | |||
| textWithLanguage OCTET_STRING consisting of 4 fields: | textWithLanguage OCTET_STRING consisting of 4 fields: | |||
| a. a SIGNED-SHORT which is the number of | a. a SIGNED-SHORT which is the number of | |||
| octets in the following field | octets in the following field | |||
| b a value of type natural-language, | b. a value of type natural-language, | |||
| c. a SIGNED-SHORT which is the number of | c. a SIGNED-SHORT which is the number of | |||
| octets in the following field, | octets in the following field, | |||
| d. a value of type textWithoutLanguage. | d. a value of type textWithoutLanguage. | |||
| The length of a textWithLanguage value MUST be 4 | The length of a textWithLanguage value MUST be 4 | |||
| + the value of field a + the value of field c. | + the value of field a + the value of field c. | |||
| nameWithLanguage OCTET_STRING consisting of 4 fields: | nameWithLanguage OCTET_STRING consisting of 4 fields: | |||
| a. a SIGNED-SHORT which is the number of | a. a SIGNED-SHORT which is the number of | |||
| octets in the following field | octets in the following field | |||
| b. a value of type natural-language, | b. a value of type natural-language, | |||
| c. a SIGNED-SHORT which is the number of | c. a SIGNED-SHORT which is the number of | |||
| octets in the following field | octets in the following field | |||
| d. a value of type nameWithoutLanguage. | d. a value of type nameWithoutLanguage. | |||
| The length of a nameWithLanguage value MUST be 4 | The length of a nameWithLanguage value MUST be 4 | |||
| + the value of field a + the value of field c. | + the value of field a + the value of field c. | |||
| charset, US-ASCII-STRING. | charset, US-ASCII-STRING. | |||
| naturalLanguage, | naturalLanguage, | |||
| mimeMediaType, | mimeMediaType, | |||
| keyword, uri, and | keyword, uri, and | |||
| uriScheme | uriScheme | |||
| boolean SIGNED-BYTE where 0x00 is 'false' and 0x01 is | boolean SIGNED-BYTE where 0x00 is 'false' and 0x01 is | |||
| 'true'. | 'true'. | |||
| integer and enum a SIGNED-INTEGER. | integer and enum a SIGNED-INTEGER. | |||
| dateTime OCTET-STRING consisting of eleven octets whose | dateTime OCTET-STRING consisting of eleven octets whose | |||
| contents are defined by "DateAndTime" in RFC | contents are defined by "DateAndTime" in RFC | |||
| 1903 [RFC1903]. | 1903 [RFC1903]. | |||
| resolution OCTET_STRING consisting of nine octets of 2 | resolution OCTET_STRING consisting of nine octets of 2 | |||
| SIGNED-INTEGERs followed by a SIGNED-BYTE. The | SIGNED-INTEGERs followed by a SIGNED-BYTE. The | |||
| first SIGNED-INTEGER contains the value of cross | first SIGNED-INTEGER contains the value of cross | |||
| feed direction resolution. The second SIGNED- | feed direction resolution. The second SIGNED- | |||
| INTEGER contains the value of feed direction | INTEGER contains the value of feed direction | |||
| resolution. The SIGNED-BYTE contains the units | resolution. The SIGNED-BYTE contains the units | |||
| Syntax of Attribute Encoding | ||||
| Value | ||||
| value. | value. | |||
| rangeOfInteger Eight octets consisting of 2 SIGNED-INTEGERs. | rangeOfInteger Eight octets consisting of 2 SIGNED-INTEGERs. | |||
| The first SIGNED-INTEGER contains the lower | The first SIGNED-INTEGER contains the lower | |||
| bound and the second SIGNED-INTEGER contains the | bound and the second SIGNED-INTEGER contains the | |||
| upper bound. | upper bound. | |||
| Syntax of Attribute Encoding | 1setOf X Encoding according to the rules for an attribute | |||
| Value | ||||
| 1setOf X Encoding according to the rules for an attribute | ||||
| with more than 1 value. Each value X is encoded | with more than 1 value. Each value X is encoded | |||
| according to the rules for encoding its type. | according to the rules for encoding its type. | |||
| octetString OCTET-STRING | octetString OCTET-STRING | |||
| The type of the value in the model document determines the encoding in | The attribute syntax type of the value determines its encoding and the | |||
| the value and the value of the value-tag. | value of its "value-tag". | |||
| 3.12 Data | 3.10 Data | |||
| The "data" field MUST include any data required by the operation | ||||
| The data part MUST include any data required by the operation | ||||
| 4. Encoding of Transport Layer | 4. Encoding of Transport Layer | |||
| HTTP/1.1 [RFC2616] is the transport layer for this protocol. | HTTP/1.1 [RFC2616] is the transport layer for this protocol. | |||
| The operation layer has been designed with the assumption that the | The operation layer has been designed with the assumption that the | |||
| transport layer contains the following information: | transport layer contains the following information: | |||
| - the URI of the target job or printer operation | - the URI of the target job or printer operation | |||
| - the total length of the data in the operation layer, either as a | ||||
| - the total length of the data in the operation layer, either as a | ||||
| single length or as a sequence of chunks each with a length. | single length or as a sequence of chunks each with a length. | |||
| It is REQUIRED that a printer implementation support HTTP over the IANA | It is REQUIRED that a printer implementation support HTTP over the IANA | |||
| assigned Well Known Port 631 (the IPP default port), though a printer | assigned Well Known Port 631 (the IPP default port), though a printer | |||
| implementation may support HTTP over some other port as well. | implementation may support HTTP over some other port as well. | |||
| Each HTTP operation MUST use the POST method where the request-URI is | Each HTTP operation MUST use the POST method where the request-URI is | |||
| the object target of the operation, and where the "Content-Type" of the | the object target of the operation, and where the "Content-Type" of the | |||
| message-body in each request and response MUST be "application/ipp". The | message-body in each request and response MUST be "application/ipp". The | |||
| message-body MUST contain the operation layer and MUST have the syntax | message-body MUST contain the operation layer and MUST have the syntax | |||
| skipping to change at page 18, line 45 ¶ | skipping to change at page 21, line 24 ¶ | |||
| IPP server. For further information on HTTP/1.1, consult the HTTP | IPP server. For further information on HTTP/1.1, consult the HTTP | |||
| documents [RFC2616]. | documents [RFC2616]. | |||
| An HTTP server MUST support chunking for IPP requests, and an IPP client | An HTTP server MUST support chunking for IPP requests, and an IPP client | |||
| MUST support chunking for IPP responses according to HTTP/1.1[RFC2616]. | MUST support chunking for IPP responses according to HTTP/1.1[RFC2616]. | |||
| Note: this rule causes a conflict with non-compliant implementations of | Note: this rule causes a conflict with non-compliant implementations of | |||
| HTTP/1.1 that don't support chunking for POST methods, and this rule may | HTTP/1.1 that don't support chunking for POST methods, and this rule may | |||
| cause a conflict with non-compliant implementations of HTTP/1.1 that | cause a conflict with non-compliant implementations of HTTP/1.1 that | |||
| don't support chunking for CGI scripts | don't support chunking for CGI scripts | |||
| 4.1 Printer-uri and job-uri | ||||
| All Printer and Job objects are identified by a Uniform Resource | ||||
| Identifier (URI) [RFC2396] so that they can be persistently and | ||||
| unambiguously referenced. The notion of a URI is a useful concept, | ||||
| however, until the notion of URI is more stable (i.e., defined more | ||||
| completely and deployed more widely), it is expected that the URIs used | ||||
| for IPP objects will actually be URLs [RFC1738] [RFC1808]. Since every | ||||
| URL is a specialized form of a URI, even though the more generic term | ||||
| URI is used throughout the rest of this document, its usage is intended | ||||
| to cover the more specific notion of URL as well. | ||||
| Some operation elements are encoded twice, once as the request-URI on | ||||
| the HTTP Request-Line and a second time as a REQUIRED operation | ||||
| attribute in the application/ipp entity. These attributes are the | ||||
| target URI for the operation and are called printer-uri and job-uri. | ||||
| Note: The target URI is included twice in an operation referencing the | ||||
| same IPP object, but the two URIs NEED NOT be literally identical. One | ||||
| can be a relative URI and the other can be an absolute URI. HTTP/1.1 | ||||
| allows clients to generate and send a relative URI rather than an | ||||
| absolute URI. A relative URI identifies a resource with the scope of | ||||
| the HTTP server, but does not include scheme, host or port. The | ||||
| following statements characterize how URLs should be used in the mapping | ||||
| of IPP onto HTTP/1.1: | ||||
| 1. Although potentially redundant, a client MUST supply the target of | ||||
| the operation both as an operation attribute and as a URI at the | ||||
| HTTP layer. The rationale for this decision is to maintain a | ||||
| consistent set of rules for mapping application/ipp to possibly | ||||
| many communication layers, even where URLs are not used as the | ||||
| addressing mechanism in the transport layer. | ||||
| 2. Even though these two URLs might not be literally identical (one | ||||
| being relative and the other being absolute), they MUST both | ||||
| reference the same IPP object. However, a Printer NEED NOT verify | ||||
| that the two URLs reference the same IPP object, and NEED NOT take | ||||
| any action if it determines the two URLs to be different. | ||||
| 3. The URI in the HTTP layer is either relative or absolute and is | ||||
| used by the HTTP server to route the HTTP request to the correct | ||||
| resource relative to that HTTP server. The HTTP server need not | ||||
| be aware of the URI within the operation request. | ||||
| 4. Once the HTTP server resource begins to process the HTTP request, | ||||
| it might get the reference to the appropriate IPP Printer object | ||||
| from either the HTTP URI (using to the context of the HTTP server | ||||
| for relative URLs) or from the URI within the operation request; | ||||
| the choice is up to the implementation. | ||||
| 5. HTTP URIs can be relative or absolute, but the target URI in the | ||||
| operation MUST be an absolute URI. | ||||
| 5. IPP URL Scheme | 5. IPP URL Scheme | |||
| The IPP/1.1 document defines a new scheme 'ipp' as the value of a URL | The IPP/1.1 document defines a new scheme 'ipp' as the value of a URL | |||
| that identifies either an IPP printer object or an IPP job object. The | that identifies either an IPP printer object or an IPP job object. The | |||
| IPP attributes using the 'ipp' scheme are specified below. Because the | IPP attributes using the 'ipp' scheme are specified below. Because the | |||
| HTTP layer does not support the 'ipp' scheme, a client MUST map 'ipp' | HTTP layer does not support the 'ipp' scheme, a client MUST map 'ipp' | |||
| URLs to 'http' URLs, and then follows the HTTP [RFC2616][RFC2617] rules | URLs to 'http' URLs, and then follows the HTTP [RFC2616][RFC2617] rules | |||
| for constructing a Request-Line and HTTP headers. The mapping is simple | for constructing a Request-Line and HTTP headers. The mapping is simple | |||
| because the 'ipp' scheme implies all of the same protocol semantics as | because the 'ipp' scheme implies all of the same protocol semantics as | |||
| that of the 'http' scheme [RFC2616], except that it represents a print | that of the 'http' scheme [RFC2616], except that it represents a print | |||
| skipping to change at page 22, line 39 ¶ | skipping to change at page 26, line 37 ¶ | |||
| ("uri-authentication-supported" and "uri-security-supported") that the | ("uri-authentication-supported" and "uri-security-supported") that the | |||
| client can use to discover the security policy of a printer. That | client can use to discover the security policy of a printer. That | |||
| document also outlines IPP-specific security considerations and should | document also outlines IPP-specific security considerations and should | |||
| be the primary reference for security implications with regard to the | be the primary reference for security implications with regard to the | |||
| IPP protocol itself. For backward compatibility with IPP version 1.0, | IPP protocol itself. For backward compatibility with IPP version 1.0, | |||
| IPP clients and printers may also support SSL3 [ssl]. This is in | IPP clients and printers may also support SSL3 [ssl]. This is in | |||
| addition to the security required in this document. | addition to the security required in this document. | |||
| 8.2 Using IPP with TLS | 8.2 Using IPP with TLS | |||
| IPP/1.1 uses the "Upgrading to TLS Within HTTP/1.1" mechanism [http- | IPP/1.1 uses the "Upgrading to TLS Within HTTP/1.1" mechanism [RFC2817]. | |||
| tls]. An initial IPP request never uses TLS. The client requests a | An initial IPP request never uses TLS. The client requests a secure TLS | |||
| secure TLS connection by using the HTTP "Upgrade" header, while the | connection by using the HTTP "Upgrade" header, while the server agrees | |||
| server agrees in the HTTP response. The switch to TLS occurs either | in the HTTP response. The switch to TLS occurs either because the | |||
| because the server grants the client's request to upgrade to TLS, or a | server grants the client's request to upgrade to TLS, or a server asks | |||
| server asks to switch to TLS in its response. Secure communication | to switch to TLS in its response. Secure communication begins with a | |||
| begins with a server's response to switch to TLS. | server's response to switch to TLS. | |||
| 9. Interoperability with IPP/1.0 Implementations | 9. Interoperability with IPP/1.0 Implementations | |||
| It is beyond the scope of this specification to mandate conformance with | It is beyond the scope of this specification to mandate conformance with | |||
| previous versions. IPP/1.1 was deliberately designed, however, to make | previous versions. IPP/1.1 was deliberately designed, however, to make | |||
| supporting previous versions easy. It is worth noting that, at the time | supporting previous versions easy. It is worth noting that, at the time | |||
| of composing this specification (1999), we would expect IPP/1.1 Printer | of composing this specification (1999), we would expect IPP/1.1 Printer | |||
| implementations to: | implementations to: | |||
| understand any valid request in the format of IPP/1.0, or 1.1; | understand any valid request in the format of IPP/1.0, or 1.1; | |||
| skipping to change at page 24, line 22 ¶ | skipping to change at page 28, line 32 ¶ | |||
| with IPP/1.0 clients (see section 9). | with IPP/1.0 clients (see section 9). | |||
| 4. In any case, security MUST NOT be compromised when a client | 4. In any case, security MUST NOT be compromised when a client | |||
| supplies an 'http' or other non-secure URL scheme in the target | supplies an 'http' or other non-secure URL scheme in the target | |||
| "printer-uri" and "job-uri" operation attributes in a request. | "printer-uri" and "job-uri" operation attributes in a request. | |||
| 10. References | 10. References | |||
| [dpa] ISO/IEC 10175 Document Printing Application (DPA), June 1996. | [dpa] ISO/IEC 10175 Document Printing Application (DPA), June 1996. | |||
| [http-tls]R. Khare, S. Lawrence, "Upgrading to TLS Within HTTP/1.1", | ||||
| <draft-ietf-tls-http-upgrade-02>, June 1999. | ||||
| [iana]IANA Registry of Coded Character Sets: ftp://ftp.isi.edu/in- | [iana]IANA Registry of Coded Character Sets: ftp://ftp.isi.edu/in- | |||
| notes/iana/assignments/character-sets. | notes/iana/assignments/character-sets. | |||
| [ipp-iig] Hastings, Tom, et al., "Internet Printing Protocol/1.1: | [ipp-iig] Hastings, Tom, et al., "Internet Printing Protocol/1.1: | |||
| Implementer's Guide", draft-ietf-ipp-implementers-guide-v11- | Implementer's Guide", draft-ietf-ipp-implementers-guide-v11- | |||
| 00.txt, work in progress, September 27, 1999. | 00.txt, work in progress, September 27, 1999. | |||
| [ipp-mod] R. deBry, T. Hastings, R. Herriot, S. Isaacson, P. Powell, | [ipp-mod] R. deBry, T. Hastings, R. Herriot, S. Isaacson, P. Powell, | |||
| "Internet Printing Protocol/1.1: Model and Semantics", <draft- | "Internet Printing Protocol/1.1: Model and Semantics", <draft- | |||
| ietf-ipp-model-v11-06.txt>, March 1, 2000. | ietf-ipp-model-v11-07.txt>, May 22, 2000. | |||
| [ipp-pro] Herriot, R., Butler, S., Moore, P., Turner, R., "Internet | [ipp-pro] Herriot, R., Butler, S., Moore, P., Turner, R., "Internet | |||
| Printing Protocol/1.1: Encoding and Transport", draft-ietf-ipp- | Printing Protocol/1.1: Encoding and Transport", draft-ietf-ipp- | |||
| protocol-v11-05.txt, March 1, 2000. | protocol-v11-06.txt, May 30, 2000. | |||
| [RFC822] Crocker, D., "Standard for the Format of ARPA Internet Text | [RFC822] Crocker, D., "Standard for the Format of ARPA Internet Text | |||
| Messages", RFC 822, August 1982. | Messages", RFC 822, August 1982. | |||
| [RFC1123] Braden, S., "Requirements for Internet Hosts - Application | [RFC1123] Braden, S., "Requirements for Internet Hosts - Application | |||
| and Support", RFC 1123, October, 1989. | and Support", RFC 1123, October, 1989. | |||
| [RFC1179] McLaughlin, L. III, (editor), "Line Printer Daemon Protocol" | [RFC1179] McLaughlin, L. III, (editor), "Line Printer Daemon Protocol" | |||
| RFC 1179, August 1990. | RFC 1179, August 1990. | |||
| skipping to change at page 26, line 15 ¶ | skipping to change at page 30, line 33 ¶ | |||
| [RFC2616] | [RFC2616] | |||
| R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. | R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. | |||
| Leach, T. Berners-Lee, "Hypertext Transfer Protocol - HTTP/1.1", | Leach, T. Berners-Lee, "Hypertext Transfer Protocol - HTTP/1.1", | |||
| RFC 2616, June 1999. | RFC 2616, June 1999. | |||
| [RFC2617] | [RFC2617] | |||
| J. Franks, P. Hallam-Baker, J. Hostetler, S. Lawrence, P. Leach, | J. Franks, P. Hallam-Baker, J. Hostetler, S. Lawrence, P. Leach, | |||
| A. Luotonen, L. Stewart, "HTTP Authentication: Basic and Digest | A. Luotonen, L. Stewart, "HTTP Authentication: Basic and Digest | |||
| Access Authentication", RFC 2617, June 1999. | Access Authentication", RFC 2617, June 1999. | |||
| [RFC2817] R. Khare, S. Lawrence, "Upgrading to TLS Within HTTP/1.1", | ||||
| RFC 2817, May 2000. | ||||
| [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. | |||
| 11. Author's Address | 11. Author's Address | |||
| Robert Herriot (editor) Paul Moore | Robert Herriot (editor) Paul Moore | |||
| Xerox Corporation Peerless Systems Networking | Xerox Corporation Peerless Systems Networking | |||
| 3400 Hillview Ave., Bldg #1 10900 NE 8th St #900 | 3400 Hillview Ave., Bldg #1 10900 NE 8th St #900 | |||
| Palo Alto, CA 94304 Bellevue, WA 98004 | Palo Alto, CA 94304 Bellevue, WA 98004 | |||
| skipping to change at page 30, line 19 ¶ | skipping to change at page 33, line 28 ¶ | |||
| 0x00000001 1 request-id | 0x00000001 1 request-id | |||
| 0x01 start operation-attributes operation-attributes-tag | 0x01 start operation-attributes operation-attributes-tag | |||
| 0x47 charset type value-tag | 0x47 charset type value-tag | |||
| 0x0012 name-length | 0x0012 name-length | |||
| attributes- attributes-charset name | attributes- attributes-charset name | |||
| charset | charset | |||
| 0x0008 value-length | 0x0008 value-length | |||
| us-ascii US-ASCII value | us-ascii US-ASCII value | |||
| 0x48 natural-language type value-tag | 0x48 natural-language type value-tag | |||
| 0x001B name-length | 0x001B name-length | |||
| attributes- attributes-natural-language name | attributes- name | |||
| natural- | natural- attributes-natural-language | |||
| language | language | |||
| 0x0005 value-length | 0x0005 value-length | |||
| en-us en-US value | en-us en-US value | |||
| 0x45 uri type value-tag | 0x45 uri type value-tag | |||
| 0x000B name-length | 0x000B name-length | |||
| printer-uri printer-uri name | printer-uri printer-uri name | |||
| 0x0015 value-length | 0x0015 value-length | |||
| ipp://forest/p printer pinetree value | ipp://forest/p printer pinetree value | |||
| inetree | inetree | |||
| 0x42 nameWithoutLanguage type value-tag | 0x42 nameWithoutLanguage type value-tag | |||
| 0x0008 name-length | 0x0008 name-length | |||
| job-name job-name name | job-name job-name name | |||
| 0x0006 value-length | 0x0006 value-length | |||
| foobar foobar value | foobar foobar value | |||
| 0x22 boolean type value-tag | 0x22 boolean type value-tag | |||
| 0x0016 name-length | 0x0016 name-length | |||
| ipp-attribute- ipp-attribute-fidelity name | ipp-attribute- ipp-attribute-fidelity name | |||
| fidelity | fidelity | |||
| 0x0001 value-length | 0x0001 value-length | |||
| 0x01 true value | 0x01 true value | |||
| Octets Symbolic Value Protocol field | ||||
| 0x02 start job-attributes job-attributes-tag | 0x02 start job-attributes job-attributes-tag | |||
| 0x21 integer type value-tag | 0x21 integer type value-tag | |||
| 0x0006 name-length | 0x0006 name-length | |||
| copies copies name | copies copies name | |||
| 0x0004 value-length | 0x0004 value-length | |||
| 0x00000014 20 value | 0x00000014 20 value | |||
| 0x44 keyword type value-tag | 0x44 keyword type value-tag | |||
| 0x0005 name-length | 0x0005 name-length | |||
| sides sides name | sides sides name | |||
| 0x0013 value-length | 0x0013 value-length | |||
| skipping to change at page 31, line 33 ¶ | skipping to change at page 35, line 4 ¶ | |||
| 0x48 natural-language type value-tag | 0x48 natural-language type value-tag | |||
| 0x001B name-length | 0x001B name-length | |||
| attributes- attributes-natural- name | attributes- attributes-natural- name | |||
| natural-language language | natural-language language | |||
| 0x0005 value-length | 0x0005 value-length | |||
| en-us en-US value | en-us en-US value | |||
| 0x41 textWithoutLanguage type value-tag | 0x41 textWithoutLanguage type value-tag | |||
| 0x000E name-length | 0x000E name-length | |||
| status-message status-message name | status-message status-message name | |||
| 0x000D value-length | 0x000D value-length | |||
| Octets Symbolic Value Protocol field | ||||
| successful-ok successful-ok value | successful-ok successful-ok value | |||
| 0x02 start job-attributes job-attributes-tag | 0x02 start job-attributes job-attributes-tag | |||
| 0x21 integer value-tag | 0x21 integer value-tag | |||
| 0x0006 name-length | 0x0006 name-length | |||
| job-id job-id name | job-id job-id name | |||
| 0x0004 value-length | 0x0004 value-length | |||
| 147 147 value | 147 147 value | |||
| 0x45 uri type value-tag | 0x45 uri type value-tag | |||
| 0x0007 name-length | 0x0007 name-length | |||
| job-uri job-uri name | job-uri job-uri name | |||
| skipping to change at page 32, line 27 ¶ | skipping to change at page 36, line 4 ¶ | |||
| 0x040B client-error-attributes-or- status-code | 0x040B client-error-attributes-or- status-code | |||
| values-not-supported | values-not-supported | |||
| 0x00000001 1 request-id | 0x00000001 1 request-id | |||
| 0x01 start operation-attributes operation-attribute tag | 0x01 start operation-attributes operation-attribute tag | |||
| 0x47 charset type value-tag | 0x47 charset type value-tag | |||
| 0x0012 name-length | 0x0012 name-length | |||
| attributes- attributes-charset name | attributes- attributes-charset name | |||
| charset | charset | |||
| 0x0008 value-length | 0x0008 value-length | |||
| us-ascii US-ASCII value | us-ascii US-ASCII value | |||
| Octets Symbolic Value Protocol field | ||||
| 0x48 natural-language type value-tag | 0x48 natural-language type value-tag | |||
| 0x001B name-length | 0x001B name-length | |||
| attributes- attributes-natural-language name | attributes- attributes-natural-language name | |||
| natural- | natural- | |||
| language | language | |||
| 0x0005 value-length | 0x0005 value-length | |||
| en-us en-US value | en-us en-US value | |||
| 0x41 textWithoutLanguage type value-tag | 0x41 textWithoutLanguage type value-tag | |||
| 0x000E name-length | 0x000E name-length | |||
| status- status-message name | status- status-message name | |||
| message | message | |||
| 0x002F value-length | 0x002F value-length | |||
| client-error- client-error-attributes-or- value | client-error- value | |||
| attributes- values-not-supported | attributes- values-not-supported | |||
| or-values- | or-values- client-error-attributes-or- | |||
| not-supported | not-supported | |||
| 0x05 start unsupported-attributes unsupported-attributes tag | 0x05 start unsupported-attributes unsupported-attributes tag | |||
| 0x21 integer type value-tag | 0x21 integer type value-tag | |||
| 0x0006 name-length | 0x0006 name-length | |||
| copies copies name | copies copies name | |||
| 0x0004 value-length | 0x0004 value-length | |||
| 0x00000014 20 value | 0x00000014 20 value | |||
| 0x10 unsupported (type) value-tag | 0x10 unsupported (type) value-tag | |||
| 0x0005 name-length | 0x0005 name-length | |||
| sides sides name | sides sides name | |||
| skipping to change at page 33, line 4 ¶ | skipping to change at page 36, line 33 ¶ | |||
| 0x21 integer type value-tag | 0x21 integer type value-tag | |||
| 0x0006 name-length | 0x0006 name-length | |||
| copies copies name | copies copies name | |||
| 0x0004 value-length | 0x0004 value-length | |||
| 0x00000014 20 value | 0x00000014 20 value | |||
| 0x10 unsupported (type) value-tag | 0x10 unsupported (type) value-tag | |||
| 0x0005 name-length | 0x0005 name-length | |||
| sides sides name | sides sides name | |||
| 0x0000 value-length | 0x0000 value-length | |||
| 0x03 end-of-attributes end-of-attributes-tag | 0x03 end-of-attributes end-of-attributes-tag | |||
| 13.4 Print-Job Response (success with attributes ignored) | 13.4 Print-Job Response (success with attributes ignored) | |||
| Here is an example of a successful Print-Job response to a Print-Job | Here is an example of a successful Print-Job response to a Print-Job | |||
| request like the previous Print-Job request, except that the value of | request like the previous Print-Job request, except that the value of | |||
| 'ipp-attribute-fidelity' is false. The print request succeeds, even | 'ipp-attribute-fidelity' is false. The print request succeeds, even | |||
| though, in this case, the printer supports neither the "sides" attribute | though, in this case, the printer supports neither the "sides" attribute | |||
| nor the value '20' for the "copies" attribute. Therefore, a job is | nor the value '20' for the "copies" attribute. Therefore, a job is | |||
| created, and both a "job-id" and a "job-uri" operation attribute are | created, and both a "job-id" and a "job-uri" operation attribute are | |||
| returned. The unsupported attributes are also returned in an Unsupported | returned. The unsupported attributes are also returned in an Unsupported | |||
| Attributes Group. The error code returned is 'successful-ok-ignored-or- | Attributes Group. The error code returned is 'successful-ok-ignored-or- | |||
| substituted-attributes' (0x0001). | substituted-attributes' (0x0001). | |||
| Octets Symbolic Value Protocol field | Octets Symbolic Value Protocol field | |||
| 0x0101 1.1 version-number | 0x0101 1.1 version-number | |||
| 0x0001 successful-ok-ignored-or- status-code | 0x0001 successful-ok-ignored-or- status-code | |||
| Octets Symbolic Value Protocol field | ||||
| substituted-attributes | substituted-attributes | |||
| 0x00000001 1 request-id | 0x00000001 1 request-id | |||
| 0x01 start operation-attributes operation-attributes-tag | 0x01 start operation-attributes operation-attributes-tag | |||
| 0x47 charset type value-tag | 0x47 charset type value-tag | |||
| 0x0012 name-length | 0x0012 name-length | |||
| attributes- attributes-charset name | attributes- attributes-charset name | |||
| charset | charset | |||
| 0x0008 value-length | 0x0008 value-length | |||
| us-ascii US-ASCII value | us-ascii US-ASCII value | |||
| 0x48 natural-language type value-tag | 0x48 natural-language type value-tag | |||
| skipping to change at page 34, line 54 ¶ | skipping to change at page 38, line 4 ¶ | |||
| 0x21 integer value-tag | 0x21 integer value-tag | |||
| 0x0006 name-length | 0x0006 name-length | |||
| job-id job-id name | job-id job-id name | |||
| 0x0004 value-length | 0x0004 value-length | |||
| 147 147 value | 147 147 value | |||
| 0x45 uri type value-tag | 0x45 uri type value-tag | |||
| 0x0007 name-length | 0x0007 name-length | |||
| job-uri job-uri name | job-uri job-uri name | |||
| 0x0019 value-length | 0x0019 value-length | |||
| ipp://forest/pin job 123 on pinetree value | ipp://forest/pin job 123 on pinetree value | |||
| Octets Symbolic Value Protocol field | ||||
| etree/123 | etree/123 | |||
| 0x23 enum type value-tag | 0x23 enum type value-tag | |||
| 0x0009 name-length | 0x0009 name-length | |||
| job-state job-state name | job-state job-state name | |||
| 0x0004 value-length | 0x0004 value-length | |||
| Octets Symbolic Value Protocol field | ||||
| 0x0003 pending value | 0x0003 pending value | |||
| 0x03 end-of-attributes end-of-attributes-tag | 0x03 end-of-attributes end-of-attributes-tag | |||
| 13.5 Print-URI Request | 13.5 Print-URI Request | |||
| The following is an example of Print-URI request with copies and job- | The following is an example of Print-URI request with copies and job- | |||
| name parameters: | name parameters: | |||
| Octets Symbolic Value Protocol field | Octets Symbolic Value Protocol field | |||
| 0x0101 1.1 version-number | 0x0101 1.1 version-number | |||
| 0x0003 Print-URI operation-id | 0x0003 Print-URI operation-id | |||
| 0x00000001 1 request-id | 0x00000001 1 request-id | |||
| 0x01 start operation-attributes operation-attributes-tag | 0x01 start operation-attributes operation-attributes-tag | |||
| 0x47 charset type value-tag | 0x47 charset type value-tag | |||
| 0x0012 name-length | 0x0012 name-length | |||
| attributes- attributes-charset name | attributes- attributes-charset name | |||
| charset | charset | |||
| 0x0008 value-length | 0x0008 value-length | |||
| us-ascii US-ASCII value | us-ascii US-ASCII value | |||
| skipping to change at page 36, line 38 ¶ | skipping to change at page 39, line 4 ¶ | |||
| 0x000B name-length | 0x000B name-length | |||
| printer-uri printer-uri name | printer-uri printer-uri name | |||
| 0x0015 value-length | 0x0015 value-length | |||
| ipp://forest/ printer pinetree value | ipp://forest/ printer pinetree value | |||
| pinetree | pinetree | |||
| 0x45 uri type value-tag | 0x45 uri type value-tag | |||
| 0x000C name-length | 0x000C name-length | |||
| document-uri document-uri name | document-uri document-uri name | |||
| 0x0011 value-length | 0x0011 value-length | |||
| ftp://foo.com ftp://foo.com/foo value | ftp://foo.com ftp://foo.com/foo value | |||
| Octets Symbolic Value Protocol field | ||||
| /foo | /foo | |||
| 0x42 nameWithoutLanguage type value-tag | 0x42 nameWithoutLanguage type value-tag | |||
| 0x0008 name-length | 0x0008 name-length | |||
| job-name job-name name | job-name job-name name | |||
| 0x0006 value-length | 0x0006 value-length | |||
| foobar foobar value | foobar foobar value | |||
| 0x02 start job-attributes job-attributes-tag | 0x02 start job-attributes job-attributes-tag | |||
| 0x21 integer type value-tag | 0x21 integer type value-tag | |||
| 0x0006 name-length | 0x0006 name-length | |||
| copies copies name | copies copies name | |||
| skipping to change at page 37, line 4 ¶ | skipping to change at page 39, line 19 ¶ | |||
| job-name job-name name | job-name job-name name | |||
| 0x0006 value-length | 0x0006 value-length | |||
| foobar foobar value | foobar foobar value | |||
| 0x02 start job-attributes job-attributes-tag | 0x02 start job-attributes job-attributes-tag | |||
| 0x21 integer type value-tag | 0x21 integer type value-tag | |||
| 0x0006 name-length | 0x0006 name-length | |||
| copies copies name | copies copies name | |||
| 0x0004 value-length | 0x0004 value-length | |||
| 0x00000001 1 value | 0x00000001 1 value | |||
| 0x03 end-of-attributes end-of-attributes-tag | 0x03 end-of-attributes end-of-attributes-tag | |||
| 13.6 Create-Job Request | 13.6 Create-Job Request | |||
| The following is an example of Create-Job request with no parameters and | The following is an example of Create-Job request with no parameters and | |||
| no attributes: | no attributes: | |||
| Octets Symbolic Value Protocol field | Octets Symbolic Value Protocol field | |||
| 0x0101 1.1 version-number | ||||
| 0x0005 Create-Job operation-id | 0x0101 1.1 version-number | |||
| 0x00000001 1 request-id | 0x0005 Create-Job operation-id | |||
| 0x01 start operation-attributes operation-attributes-tag | 0x00000001 1 request-id | |||
| 0x47 charset type value-tag | 0x01 start operation-attributes operation-attributes-tag | |||
| 0x47 charset type value-tag | ||||
| 0x0012 name-length | 0x0012 name-length | |||
| attributes- attributes-charset name | attributes- attributes-charset name | |||
| charset | charset | |||
| 0x0008 value-length | 0x0008 value-length | |||
| us-ascii US-ASCII value | us-ascii US-ASCII value | |||
| 0x48 natural-language type value-tag | 0x48 natural-language type value-tag | |||
| 0x001B name-length | 0x001B name-length | |||
| attributes- attributes-natural-language name | attributes- attributes-natural-language name | |||
| natural- | natural- | |||
| language | language | |||
| 0x0005 value-length | 0x0005 value-length | |||
| en-us en-US value | en-us en-US value | |||
| 0x45 uri type value-tag | 0x45 uri type value-tag | |||
| 0x000B name-length | 0x000B name-length | |||
| printer-uri printer-uri name | printer-uri printer-uri name | |||
| 0x0015 value-length | 0x0015 value-length | |||
| ipp://forest/p printer pinetree value | ipp://forest/p printer pinetree value | |||
| Octets Symbolic Value Protocol field | ||||
| inetree | inetree | |||
| 0x03 end-of-attributes end-of-attributes-tag | 0x03 end-of-attributes end-of-attributes-tag | |||
| 13.7 Get-Jobs Request | 13.7 Get-Jobs Request | |||
| The following is an example of Get-Jobs request with parameters but no | The following is an example of Get-Jobs request with parameters but no | |||
| attributes: | attributes: | |||
| Octets Symbolic Value Protocol field | Octets Symbolic Value Protocol field | |||
| 0x0101 1.1 version-number | 0x0101 1.1 version-number | |||
| 0x000A Get-Jobs operation-id | 0x000A Get-Jobs operation-id | |||
| 0x00000123 0x123 request-id | 0x00000123 0x123 request-id | |||
| 0x01 start operation-attributes operation-attributes-tag | 0x01 start operation-attributes operation-attributes-tag | |||
| 0x47 charset type value-tag | 0x47 charset type value-tag | |||
| 0x0012 name-length | 0x0012 name-length | |||
| attributes- attributes-charset name | attributes- attributes-charset name | |||
| charset | charset | |||
| 0x0008 value-length | 0x0008 value-length | |||
| us-ascii US-ASCII value | us-ascii US-ASCII value | |||
| skipping to change at page 38, line 43 ¶ | skipping to change at page 41, line 4 ¶ | |||
| 0x21 integer type value-tag | 0x21 integer type value-tag | |||
| 0x0005 name-length | 0x0005 name-length | |||
| limit limit name | limit limit name | |||
| 0x0004 value-length | 0x0004 value-length | |||
| 0x00000032 50 value | 0x00000032 50 value | |||
| 0x44 keyword type value-tag | 0x44 keyword type value-tag | |||
| 0x0014 name-length | 0x0014 name-length | |||
| requested- requested-attributes name | requested- requested-attributes name | |||
| attributes | attributes | |||
| 0x0006 value-length | 0x0006 value-length | |||
| Octets Symbolic Value Protocol field | ||||
| job-id job-id value | job-id job-id value | |||
| 0x44 keyword type value-tag | 0x44 keyword type value-tag | |||
| 0x0000 additional value name-length | 0x0000 additional value name-length | |||
| 0x0008 value-length | 0x0008 value-length | |||
| job-name job-name value | job-name job-name value | |||
| 0x44 keyword type value-tag | 0x44 keyword type value-tag | |||
| 0x0000 additional value name-length | 0x0000 additional value name-length | |||
| 0x000F value-length | 0x000F value-length | |||
| document-format document-format value | document-format document-format value | |||
| 0x03 end-of-attributes end-of-attributes-tag | 0x03 end-of-attributes end-of-attributes-tag | |||
| skipping to change at page 40, line 30 ¶ | skipping to change at page 42, line 4 ¶ | |||
| natural- | natural- | |||
| language | language | |||
| 0x0005 value-length | 0x0005 value-length | |||
| en-us en-US value | en-us en-US value | |||
| 0x41 textWithoutLanguage type value-tag | 0x41 textWithoutLanguage type value-tag | |||
| 0x000E name-length | 0x000E name-length | |||
| status-message status-message name | status-message status-message name | |||
| 0x000D value-length | 0x000D value-length | |||
| successful-ok successful-ok value | successful-ok successful-ok value | |||
| 0x02 start job-attributes (1st job-attributes-tag | 0x02 start job-attributes (1st job-attributes-tag | |||
| Octets Symbolic Value Protocol field | ||||
| object) | object) | |||
| 0x21 integer type value-tag | 0x21 integer type value-tag | |||
| 0x0006 name-length | 0x0006 name-length | |||
| job-id job-id name | job-id job-id name | |||
| 0x0004 value-length | 0x0004 value-length | |||
| 147 147 value | 147 147 value | |||
| 0x36 nameWithLanguage value-tag | 0x36 nameWithLanguage value-tag | |||
| 0x0008 name-length | 0x0008 name-length | |||
| job-name job-name name | job-name job-name name | |||
| 0x000C value-length | 0x000C value-length | |||
| skipping to change at page 41, line 4 ¶ | skipping to change at page 42, line 35 ¶ | |||
| 0x0006 name-length | 0x0006 name-length | |||
| job-id job-id name | job-id job-id name | |||
| 0x0004 value-length | 0x0004 value-length | |||
| 148 149 value | 148 149 value | |||
| 0x36 nameWithLanguage value-tag | 0x36 nameWithLanguage value-tag | |||
| 0x0008 name-length | 0x0008 name-length | |||
| job-name job-name name | job-name job-name name | |||
| 0x0012 value-length | 0x0012 value-length | |||
| 0x0005 sub-value-length | 0x0005 sub-value-length | |||
| de-CH de-CH value | de-CH de-CH value | |||
| Octets Symbolic Value Protocol field | ||||
| 0x0009 sub-value-length | 0x0009 sub-value-length | |||
| isch guet isch guet name | isch guet isch guet name | |||
| 0x03 end-of-attributes end-of-attributes-tag | 0x03 end-of-attributes end-of-attributes-tag | |||
| 14. Appendix B: Registration of MIME Media Type Information for | 14. Appendix B: Registration of MIME Media Type Information for | |||
| "application/ipp" | "application/ipp" | |||
| This appendix contains the information that IANA requires for | This appendix contains the information that IANA requires for | |||
| registering a MIME media type. The information following this paragraph | registering a MIME media type. The information following this paragraph | |||
| will be forwarded to IANA to register application/ipp whose contents are | will be forwarded to IANA to register application/ipp whose contents are | |||
| skipping to change at page 42, line 7 ¶ | skipping to change at page 43, line 43 ¶ | |||
| specific optional features is not ensured). Both the "charset" and | specific optional features is not ensured). Both the "charset" and | |||
| "natural-language" of all IPP/1.1 attribute values which are a | "natural-language" of all IPP/1.1 attribute values which are a | |||
| LOCALIZED-STRING are explicit within IPP protocol requests/responses | LOCALIZED-STRING are explicit within IPP protocol requests/responses | |||
| (without recourse to any external information in HTTP, SMTP, or other | (without recourse to any external information in HTTP, SMTP, or other | |||
| message transport headers). | message transport headers). | |||
| Published specifications: | Published specifications: | |||
| [ipp-mod] Isaacson, S., deBry, R., Hastings, T., Herriot, R., | [ipp-mod] Isaacson, S., deBry, R., Hastings, T., Herriot, R., | |||
| Powell, P., "Internet Printing Protocol/1.1: Model and | Powell, P., "Internet Printing Protocol/1.1: Model and | |||
| Semantics" draft-ietf-ipp-model-v11-06.txt, March 1, 2000. | Semantics" draft-ietf-ipp-model-v11-07.txt, May 22, 2000. | |||
| [ipp-pro] Herriot, R., Butler, S., Moore, P., Turner, R., | [ipp-pro] Herriot, R., Butler, S., Moore, P., Turner, R., | |||
| "Internet Printing Protocol/1.1: Encoding and Transport", draft- | "Internet Printing Protocol/1.1: Encoding and Transport", draft- | |||
| ietf-ipp-protocol-v11-05.txt, March 1, 2000. | ietf-ipp-protocol-v11-06.txt, May 30, 2000. | |||
| Applications which use this media type: | Applications which use this media type: | |||
| Internet Printing Protocol (IPP) print clients and print servers, | Internet Printing Protocol (IPP) print clients and print servers, | |||
| communicating using HTTP/1.1 (see [IPP-PRO]), SMTP/ESMTP, FTP, or other | communicating using HTTP/1.1 (see [IPP-PRO]), SMTP/ESMTP, FTP, or other | |||
| transport protocol. Messages of type "application/ipp" are self- | transport protocol. Messages of type "application/ipp" are self- | |||
| contained and transport-independent, including "charset" and "natural- | contained and transport-independent, including "charset" and "natural- | |||
| language" context for any LOCALIZED-STRING value. | language" context for any LOCALIZED-STRING value. | |||
| Person & email address to contact for further information: | Person & email address to contact for further information: | |||
| End of changes. 146 change blocks. | ||||
| 486 lines changed or deleted | 581 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/ | ||||