IPP - Internet Printing Protocol - Meeting held in Savannah, GA, September
30 - October 1, 1998
Notes taken by Harry Lewis
About 30 IPP experts attended this meeting.
Tom Hastings volunteer to continue editing the model document following
Scott's departure. We need someone to
create and edit the Implementor's guide. Don Wright volunteered as IPP Web
Master. Updates must be sent to
Don via e-mail including the subject, and the IPP WEB to be changed.
Review of the Chicago IETF meeting
The Chicago meeting of the IETF occurred the week after our Toronto PWG
meeting (end of July). It was
determined that for IPP to be accepted as an IETF standard it must reference
the IPP URL scheme recommended
by our Area Director, Keith Moore. From the IETF perspective, we still
haven't published a complete Internet
Draft which includes this new URL scheme as mandatory. The concept of a
security parameter on the URL, which
would allow secure and non-secure printing over the same port, was presented
to the Applications Area Directors.
While they seemed to like the idea, we are still obliged to fully document
and publish a specification of any
proposed security method and seek approval of the IETF Security Area
Directors. This process is uncertain and
unpredictable. It has been one month since the Chicago IETF meeting and
there is no resolution regarding the final
status of IPP. The TLS (security) group is working on HTTP 1.1 over TLS but
this work has not been progressing
very fast either.
Review of Bakeoff
The IPP interoperability test was hosted by Microsoft the week of September
21 with 16 companies. Of 128
possible unique client/server pair wise transactions, 124 were successful.
Additional test suites were exercised. 20
issues were captured. An observation is that there was no "test server" to
exercise clients. There may be another
bakeoff in mid-Feb 1999 to focus on Security, Client contention, Optional
operations, and untested attributes. We
need to establish detailed criteria prior to a 2nd bakeoff (just wanting to
remind ourselves what a fine host
Microsoft can be is not an acceptable reason ;-).
A PWG press release will be drafted by Don Wright (Lexmark) for e-mail
distribution to as many contacts as we
can collect. If you send Don your contacts with e-mail addresses he will
reciprocate by sending you the final list of
recipients. All will get to see the draft prior to release. The goal is to
release by Friday 10/9
Review of the IPP Implementor's Guide
At this stage, the Implementors Guide is basically a list of issues
structured into 3 sections
Encoding and Transport Issues
Bakeoff (preparations) Issues (removed since bakeoff is now in the
It was agreed that the Implementor's Guide will take on a larger role with
different organization. Much of the
explanatory nature of HTTP hints that were found in the Model and Protocol
documents will be migrated to the
Implementor's Guide along with any FAQ information. We prioritized review of
issues resulting from the bakeooff
first. The numbers correspond to issues on Carl-Uno's list which is forming
the Implementor's Guide/FAQ. Since
there was a lot of discussion, I captured what I could.
Issues from the Bakeoff
1.10 - Case sensitive issues in the URL. We agree that parts of the URL may
be case sensitive and IPP
implementations should not change the case. We agreed not to mandate
lowercase URLs but this is recommended
wherever possible. Server should also be case insensitive if possible.
(Note, these agreements were somewhat later
revised at the 10/7 conference call to de-emphasize the recommendations for
lower case and emphasize the
possibility of case sensitivity in path name parts of the URL).
1.11 - Some implementations do not send an HTTP response to the Cancel-Job
This would be considered a bug and should be fixed in the implementation.
1.12 - What should happen when there is an attempt to CANCEL a completed
In one place, the model document says you should be able to cancel a job
ANYTIME after creation. In another
place, the model document says that it's an error if you try to cancel while
the job is already in a completed state.
If the job object no longer exists the response to a CANCEL is "no such
job". If you issue a cancel and it's too late
to do the cancel, you should not say the job was canceled . This is an
Right now, only an administrator can set a job to retain. Also, only the
administrator can purge jobs from being
retained. Canceling a job does not purge a job from the retained state.
There is still a lot of confusion about job
history, retention states etc.
1.14 - Recommendation that "queued job count" be implemented by all servers.
Microsoft's client relies on this attribute and support for it will improve
1.15 - Does "queued-job-count" include pending-held jobs?
After a lot of debate... Yes. What we really need is a new attribute to
also show ACTIVE jobs. This could be added
in a future version of IPP.
1.16 - What if there is an empty job template attribute group in a Print-Job
If client is doing print job and has no job template attributes to send does
it still need to send the job templates tag?
The client Optionally supplies a set of job template attributes. Place
holder in protocol packet for where the job
template attributes go. Recommend NOT to send a group tag if the group is
empty. But servers must accept empty
templates and must be able to handle the absence of templates.
1.17 - May an IPP server omit empty groups if there are no attributes to
If you have no attributes you should not send the tag. Receiver must handle
empty or absence. Except Get-Jobs
response. See protocol specs. No change.
1.18 - Unsupported attributes should be returned in the unsupported group.
We decided a server MAY return the unsupported attributes but is not
required to. Thus, a client cannot rely on
unsupported attributes from a Get-xxx operation.
1.19 - When an unsupported char set is requested, what character set should
a server use
when returning the unknown attribute?
The server should use it's default character set as currently stated in the
1.20 - Resolution appears to be 3 Integers with a total of nine bytes.
The last integer is, for some reason, only one byte. This is an artifact of
the protocol document in that it is really
an integer, integer and a byte. We should say 3 VALUES to make things clear.
1.21 - Server is not REQUIRED to fail operations based on order of
attributes but may.
Client should be well behaved. Section 16 of model will be extracted into
implementors guide which will
potentially be issued as an informational RFC. The contents of the
implementors guide should not conflict with the
overall suite of proposed IPP standards.
1.22 - If you pause the printer but keep sending data, the printer will
ultimately throttle the
Some printers might not be able to accept jobs while paused. Most printers
will have some limit wherein they will
not be able to accept more jobs when paused. This is working as designed.
Just fix the test script or emphasize it's
1.23 - Returning job-uri and job-id when "job-template" attributes are
Working as designed. Fix the script.
1.24 - Definition of "success-attributes-substituted-or-ignored" and
unsupported attribute values.
This error code should be used for any unsupported value, not just for
unsupported attributes. We need to clarify
that "success-attributes-substituted-or-ignored" pertains not only to JOB
operations, but to all operations where
requested attributes are not supported. We see that even "successful-ok" is
defined to only pertain to job operations.
Needs some cleanup.
1.27 - How to staple multiple documents but start each document on a new
It seems the multi-document behavior is not well specified. What good is a
multi document definition where
documents are not required to start on a new sheet?
1.28 - What MUST an IPP object do if Create-Job never gets a follow-on
Implementation dependent. Recommend Time-out.
1.29 - What does an IPP printer return in a Print-Job response if the job
was canceled by an
administrator before the client had supplied all the data and how do you
streaming of data?
A (new) status code ("job-terminated-during-transmission" or
"server-job-canceled") should be sent from the server
to the client. Error includes job-id if there is one but there is no
guarantee one will have been created. When the
client sees the fatal error it should stop transmitting. If the server
thinks the client is ill behaved, the server can
drop the connection.
2.3 - Can we allow clients and servers to support HTTP1.0 and not HTTP 1.1?
We needed HTTP1.1 for chunking to facilitate streaming. But, if HTTP 1.0
does not require a length on the header,
perhaps chunking is not necessary.
You MUST support HTTP 1.1 but are not required to reject 1.0 (although you
may choose to). Be conservative
about what you generate (client - HTTP 1.1 preferred)... Be liberal in what
you accept (Server HTTP1.0, 1.1). If a
client starts off with 1.0, however, the server should not respond with 1.1
2.4 - HTTP Get on an IPP printer's URI.
Some printers allowed this to access the printer's web page. This is a good
idea and should be encouraged in the
Implementor's Guide. The standards should remain silent, however, on this
topic. There were two interpretations of
this. Port 80 or just exactly the URL of the printer (even if it includes
:631). This may require further clarification.
This does not override the URI provided in the more-info attribute.
2.5 - Too complex. Handle later.
2.6 - The possibility of fragmentation of HTTP is a fact of life that
clients and servers both
must handle. SUN's client provides a good test vehicle for this condition.
2.7 - Chunking.
If you are a 1.1 client you should anticipate the server may chunk
responses. There is a way to ask for no chunks.
Xerox to document the means. We need to be careful that a server does not
use this method to ask the 1.1 client not
to chunk. This could break things.
2.15 - We agree with Carl that IPP specification should not be more specific
we reference (HTTP) than the actual specifications for those protocols
We should be aware that RFC2068 (HTTP 1.1) is under revision. In the
Protocol document, move the section
about HTTP headers to the implementors guide. This section has the port 631
in it, however. We should not delete
2.16 - Use of HTTP 1.1 as transport.
Reference HTTP 1.1 RFC.
2.17 - Support for receiving Chunks is required.
Some existing web servers do not support this, however
2.18 - This is another example where IPP should not further restrict the
We accept that "Expect: 100 Continue" is valid although we question whether
or not it may have been dropped
from the most recent drafts of HTTP1.1. Perhaps the statement "Client must
not expect a response form an IPP
server until the client has sent the entire request" is entirely pertaining
to the IPP layer not HTTP, however... So
HTTP 1.1 "Expect: 100 Continue" is not the answer
2.xx (New) - Type URL into client w/o port number which port does it mean?
631 or 80?
Reference Protocol document "Note: even though port 631 is the IPP default,
remains the default for an HTTP URI". Thus a URI for a printer using port
MUST contain an explicit port, e.g. "http://forest:631/pinetree".
Other Issues pertaining to IPPv1.0
1.30 - Small job disappears from the device as the IPP server response is
The real problem is there needs to be more communication or some latency in
job state in the system between the
server and device. If the server is confident that the job completed then
"Completed" would be a reasonable
response. Else, there is no real way to define what the server should say.
1.32 - Should a Get-Jobs result in a list of all jobs or only jobs submitted
via IPP? If both,
should the jobs be distinguished?
The desire (and recommendation) is to list all the jobs and also have all
IPP operations apply to all jobs. Thus, a
job submitted via LPR could be canceled via IPP, for example. If some IPP
operations (like Cancel) require access
control, and the user is unknown on the non-IPP job, access would be
1.35 - Names for enums?
Correct the example in the protocol document.
1.36 - If you get a request ID of 0 (which is invalid) or if the request ID
otherwise unintelligible, then what should the request ID be in the
We need a special value. 0 is not a legal value for request ID so should we
return 0? Does a server really have to
reject a request ID of 0? This is a MIB issue not HTTP. But what about other
forms of corruption? Every IPP
request needs a response. The issue is, should you validate request Ids?
Randy says you can't have a corrupt request
ID. If you get 4 complete bytes, you just return the ID. If you never get to
the point where you have received the
entire request ID then use 0 in the return.
1.37 - Value for empty sets.
"None" in enums is different than "None" in keywords. No change except note
in Implementors Guide
1.38 - Syntax for Boolean.
Remove the analogy to an enum.
1.39 - If someone includes "my-jobs" in a request, then it is recommended
"requesting-user-name" but this is not necessary.
It is typical, however, to detect user via the underlying transport.
2.8 - Examples should be fixed. If you know of a problem with an example,
send this information to the editors.
2.11 - We agreed to move most of section 4 of the protocol document to the
2.12 - Leave as is.
2.13 - Connection management recommendations will be moved to the
2.14 - Relative vs. Absolute URI's.
We should not require that a server reject the job URI if the request does
not (semantically) match the job URI in
the transport. In fact, we recommend servers be forgiving under these
circumstances even though it is mandatory
for the client to provide the job-uri.
1.40 - Empty attribute and delimiter?
Some server implementations do not add delimiters for empty attribute
groups, and some client implementations
assumed delimiters will always be there even if the attribute group is
empty. We should clarify. Same issue as 1.17.
1.41 - Spooling jobs is not a requirement for all IPP printers. Some tests
will not be applicable.
1.43 - see 2.14
1.44 - Text or name with language is mandatory. Many IPP implementations did
not support text/name
with language attributes, and some were crashed when they received "with
language" attributes. Implementations
should be fixed if they do not support.
1.5 - Converting unknown characters. Don't mandate converting unknown
characters to question mark.
Use whatever the system default behavior is for this condition.
1.28 - What if Create-Job never gets an Add-Document, Send-Document or
is never set to 'true'...
The IPP object should close the job after some period of time and:
1. For spooling applications - move the job to the 'aborted' state with the
'aborted-by-system' job-state-reasons value
2. For non-spooling applications - move the job to the 'pending-held' state
with a job-state-reason of "incomplete-
job" and an administratively set time-out (between 30 sec and 4 min - see
3. As a fallback - move the job to the 'pending' state and print the job? (A
form of natural aging)
These instructions should be described in the Implementor's Guide. We are
basically addressing system latencies
that may occur during the process of performing a Create-Job group of
operations. In general, the Create-Job is
intended to flow as a rapid sequence of operations without large
discontinuities in time between related operations.
We should be cautious in defining a tuning attribute, here, and thereby
effecting overall system performance. It is
that it is not our intent for the sever to keep partially constructed jobs
on hold for long periods of time. We couldn't
actual agree on a figure but we expect it to be somewhere between 30 sec to
4 mins. The real number should be
determined empirically and information updated in an Implementor's guide.
1.33 - Equality between different syntax's?
When checking for equality or containment (e.g., "IF NOT in the Printer
attribute ...") is value type considered? Is a value of type
'nameWithoutLanguage' considered equal to a value of
type 'nameWithLanguage' if the default language for the context of the
'nameWithoutLanguage' value is the same
as the language explicit in the 'nameWithLanguage' value?
Yes, under these circumstances, but not if the defaults are different
because then the semantics implied by the
values may not match.
Can a 'name' match a 'keyword'?
Yes, possibly, under these circumstances but not in general. (Need
clarification on the question).
IF a 'nameWithoutLanguage' value in the appropriate natural language context
CAN match a 'nameWithLanguage'
value, is there any harm (other than a negligible increase in network
bandwidth consumption) in an application
promoting ALL 'name' and 'text' attribute values to 'nameWithLanguage' and
No harm... Another way to state the question is if a client sends an
attribute then queries it, must the tagging be
identical in the response... We said no.
Keywords are intended to be localized by the client. Keywords on the wire
are not localized, however. If the server
also supports some administratively defined names, the client realizes these
are already localized by the server.
Administrator has defined a name and the client can supply that either with
or without language.
1.34 - Equality between "natural language" tags. Is natural language
considered when comparing
'name' attributes (e.g., "job-originating-user-name", "media",
No if you are referring to Keywords (which do not have natural language).
Yes when comparing attribute values
which are Names.
[Assertion: ALL 'text' and 'name' attributes have an associated natural
language, either explicitly or implicitly.] If
so, how strict is the comparison? Does "en" match "en-us", for example?
Comparison should be strict in general but there is some overlap as a
function of the languages themselves.
1.25 - New groups can be added. We need a mechanism for registering them.
1.26 - What about unsupported attribute syntax's? Does the implementation
respond as if the attribute
or value were not supported? If so, then Section 188.8.131.52 should add this
condition to the list.
Yes - Needs to be explained. Send back the original syntax and the value.
1.31 - Not a problem
2.9 -Do we need a SIGNED-INTEGER?
Section 3.2 of the Encoding document provides the following explicit
definitions: "SIGNED-BYTE = BYTE" and
"SIGNED-SHORT = 2BYTE". For consistency, we might want to have a similar
definition for SIGNED-
INTEGER (i.e.,. "SIGNED-INTEGER = 4BYTE").
Fix the document by adding to the formal grammar.
2.10 - Is it obvious to everyone that the "job-attributes" tag is what needs
to be used to
signal the start of the job-template attributes in a job submission? It
wasn't to me until I saw an
example in section 9.
The protocol document needs a clarification.
Review of new operations
1. When you "Release-Job" you don't know if it went into pending or
processing. Should the job state be returned?
No. For example, Cancel-Job does not return the job state. If you want to
know the state you can query. The rest of
the document needs to be edited to remove lines like (99)... Return
indicated new job state.
2. Printer operations are also specified as returning the new state if state
changes. This, should be removed from
the spec. (line 285)
3. These changes will be made and the document will be issued for last call
in the PWG.
Review IPP scheme
If you start with ipp://xxx on the request line, this will be mapped to
http://xxx:631 over the wire. References to
URL's in the MIME body, itself, are unchanged. If a client does not follow
the IPP scheme and sends HTTP URL's
these get returned unaltered in the response.
We are confused about the scenario where, if IPP URI's are generated by
administrators and security parameters
are part of the URI, then the client must use whatever security is indicated
in the printer URL including, possibly,
more than one security scheme, if the URI indicates more than one security
parameter. For a simpler case, using
just TLS, there is no use in trying to invoke the URL following conversion
from IPP to HTTP URI, unless TLS is
supported. How does the user know the difference, in the directory, between
secure and non-seucre? It seems like
there needs to be two URL's in that case. The lack of clarity on these
topics is a clear indication that a security
Implementor's guide or improved drafts is necessary from the security's
group in the IETF.
There was further interesting but rather unfruitful discussion regarding
security. While there may be some specific,
unique printing related security requirement which we should be addressing,
general HTTP security is beyond the
scope of the IPP working group as a whole.
We are waiting for a draft for TLS over HTTP which hasn't surfaced. We need
to review the latest DAA and HTTP
drafts. These specs tend to be rather long and complicated and difficult to
understand. It will obviously take some
tome for us to digest, prototype and then bakeoff these items.
Review of IPP/IFAX (Evening)
In Chicago, at the IETF IPP meeting, there was some talk about running IFAX
over IPP to avoid problems with
real time fax over e-mail. We need to develop an informational paper between
the two working groups. We need to
understand the problem and help with the recommendations. Paper provided by
Draft-ietf-ipp2ifax-map-01.txt. Can we really notify that the job was
printed? They can query.
FAX negotiates prior to sending. They don't get this with e-mail or get it
FAX gives confirmation regarding print status. Again, e-mail is slow and
unreliable for this purpose.
IFAX has defined and registered MIME types for a couple new TIFF formats
(B/W and Color). We can use those
With a Get-Printer-Attributes, an IFAX client could discover which TIFF
formats are supported.
There are other things fax has that may seem foreign to IPP, like
distributions lists. Some of these may be viewed
simply as client issues.
Separate mailing list. Who will host? PWG or IFAX.
Ron Bergman will send our notification paper to the IFAX group.
If the device advertises itself as an IFAX capable, it must support the
required TIFF formats to assure some base
level of negotiation .
If FCC requires date, name and phone number on each page, we have to
determine whether the sender puts this on
or the receiver and how to handle potential margin or page scaling issues.
IPP does not mandate creation or completion times. This would be considered
a serious deficiency for IFAX. Any
IPP printer that supports IFAX would be required to have a real time clock
to provide this information. On the
other hand... The generator of the FAX is the one that probably needs the
In some areas we will need to align terminology - such as "redirection".
If IPP printer is acting as an off ramp to FAX distribution via GSTN... Then
the list of names or numbers could
just be tagged in the URL.
FAX might also carry additional compression requirements.
Do we assume all legal requirements for FAX pertain to IFAX over IPP even if
the GSTN is not involved in any
Chair IETF IPP WG
Principal Engineer - Advanced Printing Standards - Xerox Corporation
701 S. Aviation Blvd., El Segundo, CA, M/S: ESAE-231
Phone +1-310-333 8273, Fax +1-310-333 5514
Email: manros at cp10.es.xerox.com