IPP Mail Archive: Re: IPP> MOD - Status codes

Re: IPP> MOD - Status codes

Keith_Carter@aussmtp.austin.ibm.com
Fri, 25 Apr 1997 12:17:47 -0500

Tom,

Good feedback. My answers to your questions and issues are inline as
KC>>.

Keith

--- snip ---

> Status = "000" ; OK
> | "001" ; OK Attribute Substitution/
> Attribute Ignored

(1) I suggest that this be two separate success codes, since the user
has to do different things depending on which condition to figure out
what went wrong. Also need to make the description optionally plural,
since there could be one or more:

| "001" ; Unimplemented Attribute(s) Ignored
| "002" ; Unsupported Attribute Value(s) Substituted

KC>> I combined these conditions into a single status code since both
KC>> conditions can occur in the same request.
KC>> For the message, how about: "OK Attribute(s) Substituted/
KC>> Attribute(s) Ignored".

--- snip ---

> | "109" ; Attribute Not Implemented/
> Attribute Value Not Supported

(2) I suggest that these be two separate codes. How about:

| "109" ; Some Attribute(s) Unimplemented
| "110" ; Some Attribute Value(s) Unsupported

KC>> I combined these conditions into a single status code since both
KC>> conditions can occur in the same request.
KC>> For the message, how about: "Attribute(s) Not Implemented/
KC>> Attribute(s) Not Supported".

--- snip ---

> | "202" ; IPP Version Not Supported

(3) I thought we had been counseled by Larry Masinter and the HTTP crowd to
design the protocol so that new versions were upwards compatible with
older versions. Therefore, this error should not be an error. The operation
not implemented might be the error if a newer client tries to work with
an older server.

Alternatively, we could include this error, but with the text that
a conforming server shall NOT return it. It is there just in case,
a future verson of the standard needs a conforming Printer to return it
to an older client. At that time this sentence will be change to allow
a conforming Printer to return this error code.

KC>> The HTTP 1.1 RFC includes status "505 HTTP Version Not Supported".
KC>> The description of this status references another section in the
KC>> HTTP 1.1 RFC that explains how an HTTP version is defined and
KC>> identified. This same section is in the HTTP 1.0 internet draft
KC>> although the "505" status is not in the internet draft. "505"
KC>> is returned when the server does not support the <major> version
KC>> of the protocol as indicated in the request. Here is an excerpt
KC>> from the HTTP 1.1 RFC:
KC>>
KC>> "HTTP uses a <major>.<minor> numbering scheme to indicate
KC>> versions of the protocol. ... The <minor> number is incremented
KC>> when the changes made to the protocol add features which do not
KC>> change the general message parsing algorithm... The <major> number
KC>> is incremented when the format of a message within the protocol
KC>> is changed."
KC>>
KC>> I think we need a similar section in the Model spec and that we
KC>> should adopt the HTTP <major>.<minor> numbering scheme. i.e.
KC>> IPP 1.0 is designated as "IPP/1.0". Do you and others agree?
KC>> If so, I'll write the section.
KC>>
KC>> The Model spec can state the following for "505":
KC>>
KC>> "This status code is reserved for future use. A conforming IPP
KC>> client shall specify an IPP version of IPP/1.0 in each request.
KC>> A conforming IPP server shall not return this status code to a
KC>> conforming IPP client."
KC>>
KC>> This last sentence covers the case where a non-conforming IPP client
KC>> sends the wrong <major> number to a conforming IPP server and
KC>> hopefully influences IPP servers to handle this situation gracefully
KC>> if future IPP clients support new <major> versions of IPP.
KC>> Your thoughts?

> | "203" ; Operation Not Implemented
> | "204" ; Printer Error
> | "300" ; Communications Error
> | extension-code
>
> extension-code = 3DIGIT
>
> Message = *<TEXT, excluding CR, LF>
>
>IPP status codes are extensible. IPP applications are not

(4) I think we need to make them type 2 keywords, correct?

KC>> Yes, we need to make status codes type 2 keywords. I'll change
KC>> "extension-code = 3DIGIT" to "extension-code = type 2 keyword".

(5) ISSUE: Do we also need a way to allow implementors to have private
error codes as well?

KC>> Does this mean we need another status class for private error
KC>> codes? If so, IPP applications must be told to treat all such
KC>> error codes as "errors". Are these type 4 keywords?

--- snip ---

>4.4.1.2 001 OK Attribute Substitution/Attribute Ignored

>The operation has succeeded. On a Print operation, the request
>specifies substitute-as-needed for the best-effort attribute. In
>response to the Print operation, the IPP Printer substituted a
>value for at least one attribute value that is not supported
>and/or ignored at least one attribute that is not implemented.

(1') See above discussion on making this two separate warnings:

001 Unimplemented Attribute(s) Ignored
002 Unsuppored Attribute Value(s) Substituted

KC>> Please see my answer to (1).

>
>An IPP application may examine the attributes and/or attribute values
>in the response to determine which attributes are not implemented
>and/or which attribute values are not supported by a Printer.

(6a) This previous paragraph only applies to Gets, not Print operation.
Need to clarify. The previous paragraph specifies the Print operation.

KC>> I agree. Here is revised text:
KC>>
KC>> "An IPP application may issue a Get-Attributes operation and
KC>> specify the job-template group in the request to a Printer and
KC>> then examine the attributes and/or attribute values in the
KC>> response to determine which attributes are not implemented and/or
KC>> which attribute values are not supported by the Printer."

--- snip ---

>
>4.4.2.10 109 Attribute Not Implemented/Attribute Value Not Supported
>
>For a Print operation, if the IPP Printer does not implement at
>least one attribute and/or at least one attribute value in the
>request and either the request specifies do-not-substitute for
>the best-effort attribute or the Printer cannot process the
>request correctly, the Printer shall return this status [ and
>indicate in the response which attributes and/or attribute values
>are not supported by the Printer].

(2') See discusson above that suggests that we need two errors here:

109 Some Attribute(s) Not Implemented
110 Some Attribute Value(s) Not Supported

KC>> Please see my answer to (2).

(6) Again, while this is good for the user, the group has agreed to require
the Printer to return the attributes in question in the response
to a Print operation. But its easy for a query response.

KC>> I believe the group has agreed NOT to require the Printer to
KC>> return the attributes in question in the response to a Print
KC>> operation. Rather, an IPP application can issue the
KC>> Get-Attributes operation on the Printer to get this information.
KC>> I'll remove the phrase bounded by [] in the 1st paragraph of "109"

(7) Here is a case where the description needs to be clarified for Print
vs Get-Attributes/Get-Jobs operations.

KC>> Per the conformance section, I do not believe a conforming IPP
KC>> server can return this status code on a Get-Attributes operation.
KC>> A conforming IPP server can only return this status code on a
KC>> Get-Jobs operation in the situation already documented in the
KC>> paragraph that follows prefixed with "*".
>
>For example, if an IPP Printer can only support 1 Document per
>Job and the Printer receives multiple documents in a Print
>operation, the Printer shall return this status.

(8) ISSUE:
Since multiple documents isn't indicated by an attribute, but rather
by the content that is sent, we need a distinct error code:

multiple-documents-not-supported

(if we allow a conforming Printer to reject a multiple document
job in a Print operation.)

KC>> The description of number-of-documents states the following:
KC>> "The printer shall reject a job if the number of documents is
KC>> not in the range of this attribute." So, currently we require a
KC>> conforming Printer to reject a multiple document job in a Print
KC>> operation.
KC>>
KC>> Based on the Model spec, I understand that a Printer must detect
KC>> document boundaries in the Print request to set number-of-documents.
KC>> It seems if a Printer detects a document boundary for the "n+1"
KC>> document (where "n" is the maximum value of number-of-documents
KC>> supported by the Printer), then the Printer shall delete any spool
KC>> space (if the Printer has a spooler) and any job configuration
KC>> information (e.g. job id) used so far for the Job and reject the
KC>> Print request.
KC>>
KC>> Ideally, it would be better if the IPP client set number-of-documents
KC>> on a Print request so the target Printer can reject the Print
KC>> request BEFORE spooling part of the job and/or setting up other
KC>> information about the job (such as a job id). I expect a GUI or a
KC>> command line (both IPP applications) will allow an end-user to
KC>> select one or more documents and then submit the Print request so
KC>> the IPP application could specify number-of-documents on the Print
KC>> request (assuming the application didn't validate this value before
KC>> submitting the request). If we require the client to specify
KC>> number-of-documents (i.e. we make this attribute MANDATORY), then
KC>> number-of-documents becomes just another attribute specified by
KC>> the IPP client and so this status code applies. Your thoughts?

>For another example, if the Print operation specifies do-not-substitute,
>the request requires A4 paper and that paper size is not
>available on the Printer, the Printer shall return this status.

(9) The word "available" has not been defined and has caused a lot of
confusing in the past as to whether it means "supported" (which could
be ready or not ready) or "ready" (can be used without human intervention).

KC>> I'll change the phrase "available on" to "supported by".

*>For a Get-Jobs operation, if the IPP Printer does not support at
*>least one attribute value for Job Owner and/or Job States in
*>the request, the Printer shall return this status and indicate
*>in the response which attributes and/or attribute values are not
*>supported by the Printer.

>An IPP application may examine the attributes and/or attribute values
>in the response to determine which attributes are not implemented
>and/or which attribute values are not supported by a Printer.

KC>> I'll reword the above paragraph to match the answer to 6a.

--- snip ---

>4.4.3.3 202 IPP Version Not Supported
>
>The IPP Printer does not support, or refuses to support, the IPP
>protocol version that was used in the request message. The IPP
>Printer is indicating that it is unable or unwilling to complete
>the request using the same major version as the client other than
>with this error message. The response should contain a Message
>describing why that version is not supported and what other
>versions are supported by that IPP Printer.

(3') See discussion above that we shouldn't have such an error, unless
we make an incompatible change between versions of the protocol.

KC>> Please see my answer to (3).

--- snip ---
end of note