Figure 1. Embedded Printer Object
########### Output Device
O +--------+ # (Leaf) # +---------------+
/|\ | client |---IPP----># Printer #---any->| |
/ \ +--------+ # object # | |
########### +---------------+
Figure 2. Hosted Printer Object
+---------------+
| |
+->| Output Device |
########### any/ | |
O +--------+ # (Leaf) # / +---------------+
/|\ | client |---IPP----># Printer #--*
/ \ +--------+ # Object # \ +---------------+
########### any\ | |
+->| Output Device |
| |
+---------------+
Figure 3. Output Device Fan-Out
########### ###########
O +--------+ # Non-Leaf# # subord. #
/|\ | client |---IPP----># Printer #---IPP----># Printer #
/ \ +--------+ # object # # object #
########### ###########
The Subordinate Printer can be a Non-Leaf Printer, as in Figures 4
through 6, or can be a Leaf Printer, as in Figures 1 through 3.
Figure 4. Chained IPP Printer Objects
+------IPP--------------------->###########
/ +---># subord. #
/ / # Printer #
/ ########### IPP # object #
O +--------+ # Non-Leaf# / ###########
/|\ | client |---IPP----># Printer #--*
/ \ +--------+ # object # \
\ ########### IPP ###########
\ \ # subord. #
\ +---># Printer #
+------IPP---------------------># object #
###########
The Subordinate Printer can be a Non-Leaf Printer, as in Figures 4
through 6, or can be a Leaf Printer, as in Figures 1 through 3.
Figure 5. IPP Printer Object Fan-Out
###########
# Non-Leaf#
+---># Printer #-+
/ # object # \
IPP ########### \ ###########
O +--------+ / +-IPP-># subord. #
/|\ | client |--+-----------IPP---------------># Printer #
/ \ +--------+ \ +-IPP-># object #
IPP ########### / ###########
\ # Non-Leaf# /
+---># Printer #-+
# object #
###########
The Subordinate Printer can be a Non-Leaf Printer, as in Figures 4
through 6, or can be a Leaf Printer, as in Figures 1 through 3.
Figure 6. IPP Printer Object Fan-In
10.7. Forwarding Requests
This section describes the forwarding of Job and Printer requests to
Subordinate Printer objects.
10.7.1. Forwarding Requests that Affect Printer Objects
In Printer Fan-Out, Printer Fan-In, and Chained Printers, the Non-
Leaf IPP Printer object MUST NOT forward the operations that affect
Printer objects to its Subordinate Printer objects. If a client
seeks to explicitly target a Subordinate Printer, the client MUST
specify the URI of the Subordinate Printer. The client can determine
the URI of any Subordinate Printers by querying the Printer’s
"subordinate-printers-supported (1setOf uri) attribute (see section
7.1).
Table 7 lists the operations that affect Printer objects and the
forwarding behavior that a Non-Leaf Printer MUST exhibit to its
immediate Subordinate Printers. Operations that affect jobs have a
different forwarding rule (see section 10.7.2 and Table 8):
Table 7. Forwarding Operations that Affect Printer Objects
Printer Operation Non-Leaf Printer Action
---------------------------------------------------------------
Printer Operations:
Enable-Printer MUST NOT forward to any of its Subordinate
Printers
Disable-Printer MUST NOT forward to any of its Subordinate
Printers
Hold-New-Jobs MUST NOT forward to any of its Subordinate
Printers
Release-Held-New- MUST NOT forward to any of its Subordinate
Jobs Printers
Deactivate-Printer MUST NOT forward to any of its Subordinate
Printers
Activate-Printer MUST NOT forward to any of its Subordinate
Printers
Restart-Printer MUST NOT forward to any of its Subordinate
Printers
Shutdown-Printer MUST NOT forward to any of its Subordinate
Printers
Startup-Printer MUST NOT forward to any of its Subordinate
Printers
IPP/1.1 Printer See [RFC2911]
Operations:
Get-Printer- MUST NOT forward to any of its Subordinate
Attributes Printers
Pause-Printer MUST NOT forward to any of its Subordinate
Printers
Resume-Printer MUST NOT forward to any of its Subordinate
Printers
Set Operations: See [RFC3380]
Set-Printer- MUST NOT forward to any of its Subordinate
Attributes Printers
10.7.2. Forwarding Requests that Affect Jobs
Unlike Printer Operations that only affect Printer objects (see
section 10.7.1), a Non-Leaf Printer object MUST forward operations
that directly affect jobs to the appropriate Job object(s) in one or
more of its immediate Subordinate Printer objects. Forwarding is
REQUIRED since the purpose of this Job operation is to affect the
indicated job, which may have been forwarded itself. This forwarding
MAY be immediate or queued, depending on the operation and the
implementation. For example, a Non-Leaf Printer object MAY
queue/spool jobs, feeding a job at a time to its Subordinate
Printer(s), or MAY forward jobs immediately to one of its Subordinate
Printers. In either case, the Non-Leaf Printer object forwards Job
Creation operations to one of its Subordinate Printers. Only the
time of forwarding of the Job Creation operations depends on whether
the policy is to queue/spool jobs in the Non-Leaf Printer or the
Subordinate Printer.
When a Non-Leaf Printer object creates a Job object in its
Subordinate Printer, whether that Non-Leaf Printer object keeps a
fully formed Job object or just keeps a mapping from the "job-ids"
that it assigned to those assigned by its Subordinate Printer object
is IMPLEMENTATION-DEPENDENT. In either case, the Non-Leaf Printer
MUST be able to accept and carry out future Job operations that
specify the "job-id" that the Non-Leaf Printer assigned and returned
to the job submitting client.
Table 8 lists the operations that directly affect jobs and the
forwarding behavior that a Non-Leaf Printer MUST exhibit to its
Subordinate Printers.
Table 8. Forwarding Operations that Affect Jobs Objects
Operation Non-Leaf Printer action
---------------------------------------------------------------
Job operations:
Reprocess-Job MUST forward to the appropriate Job in one of
its Subordinate Printers
Cancel-Current- MUST NOT forward
Job
Resume-Job MUST forward to the appropriate Job in one of
its Subordinate Printers
Promote-Job MUST forward to the appropriate Job in one of
its Subordinate Printers
IPP/1.1 Printer
operations:
Print-Job MUST forward immediately or queue to the
appropriate Subordinate Printer
Print-URI MUST forward immediately or queue to the
appropriate Subordinate Printer
Validate-Job MUST forward to the appropriate Subordinate
Printer
Create-Job MUST forward immediately or queue to the
appropriate Subordinate Printer
Get-Jobs MUST forward to all its Subordinate Printers
Purge-Jobs MUST forward to all its Subordinate Printers
IPP/1.1 Job
operations:
Send-Document MUST forward immediately or queue to the
appropriate Job in one of its Subordinate
Printers
Send-URI MUST forward immediately or queue to the
appropriate Job in one of its Subordinate
Printers
Cancel-Job MUST forward to the appropriate Job in one of
its Subordinate Printers
Get-Job- MUST forward to the appropriate Job in one of
Attributes its Subordinate Printers if the Non-Leaf
Printer doesn’t know the complete status of the
Job object
Hold-Job MUST forward to the appropriate Job in one of
its Subordinate Printers
Release-Job MUST forward to the appropriate Job in one of
its Subordinate Printers
Restart-Job MUST forward to the appropriate Job in one of
its Subordinate Printers
IPP Set operations: See [RFC3380]
Set-Job- MUST forward to the appropriate Job in one of
Attributes its Subordinate Printers
When a Printer receives a request that REQUIRES forwarding, it does
so on a "best efforts basis" and returns a response to its client
without waiting for responses from any of its Subordinate Printers.
Such forwarded requests could fail.
10.8. Additional Attributes to Help with Fan-Out
The following operation and Job Description attributes are defined to
help represent Job relationships for Fan-Out and forwarding of jobs.
10.8.1. output-device-assigned (name(127)) Job Description Attribute -
from [RFC2911]
[RFC2911] defines "output-device-assigned" as follows: "This
attribute identifies the Output Device to which the Printer object
has assigned this job. If an Output Device implements an embedded
Printer object, the Printer object NEED NOT set this attribute. If a
print server implements a Printer object, the value MAY be empty
(zero-length string) or not returned until the Printer object assigns
an Output Device to the job. This attribute is particularly useful
when a single Printer object supports multiple devices (so called
"Device Fan-Out" see [RFC2911] section 2.1)." See also section 10.1
in this specification.
10.8.2. original-requesting-user-name (name(MAX)) Operation and Job
Description Attribute
The operation attribute containing the user name of the original
user; i.e., corresponding to the "requesting-user-name" operation
attribute (see [RFC2911], section 3.2.1.1) that the original client
supplied to the first Printer object. The Printer copies the
"original-requesting-user-name" operation attribute to the
corresponding Job Description attribute.
10.8.3. requesting-user-name (name(MAX)) Operation Attribute -
Additional Semantics
The IPP/1.1 "requesting-user-name" operation attribute (see [RFC2911]
section 3.2.1.1) is updated by each client to be itself on each hop;
i.e., the "requesting-user-name" represents the client forwarding the
request, not the original client.
10.8.4. job-originating-user-name (name(MAX)) Job Description Attribute
- Additional Semantics
The "job-originating-user-name" Job Description attribute (see
[RFC2911], section 4.3.6) remains as the authenticated original user,
not the parent Printer’s authenticated host, and is forwarded by each
client without changing the value.
11. Conformance Requirements
The Job and Printer Administrative operations defined in this
document are OPTIONAL operations. However, some operations MUST be
implemented if others are implemented, as shown in Table 9.
Table 9. Conformance Requirement Dependencies for Operations
Operations REQUIRED If any of these operations are
supported:
--------------------------------------------------------------------
Enable-Printer Disable-Printer
Disable-Printer Enable-Printer
Pause-Printer Resume-Printer
Resume-Printer Pause-Printer,
Pause-Printer-After-Current-Job
Hold-New-Jobs Release-Held-New-Jobs
Release-Held-New-Jobs Hold-New-Jobs
Activate-Printer, Deactivate-Printer
Disable-Printer,
Pause-Printer-After-Current-Job
Deactivate-Printer, Activate-Printer
Enable-Printer,
Resume-Printer
Restart-Printer none
Shutdown-Printer none
Startup-Printer none
Reprocess-Job none
Cancel-Current-Job none
Resume-Job Suspend-Current-Job
Suspend-Current-Job Resume-Job
Promote-Job none
Schedule-Job-After Promote-Job
Tables 10 and 11 list the "printer-state-reasons" and "job-state-
reasons" values that are REQUIRED if the indicated operations are
supported.
Table 10. Conformance Requirement Dependencies for
"printer-state-reasons" Values
"printer-state- Conformance If any of the following Printer
reasons" values: Requirement Operations are supported:
--------------------------------------------------------------------
’paused’ REQUIRED Pause-Printer,
Pause-Printer-After-Current-Job,
or Deactivate-Printer
’hold-new-jobs’ REQUIRED Hold-New-Jobs
’moving-to-paused’ OPTIONAL Pause-Printer,
Pause-Printer-After-Current-Job,
Deactivate-Printer
’deactivated’ REQUIRED Deactivate-Printer
Table 11. Conformance Requirement Dependencies for "job-state-
reasons" Values
"job-state-reasons" Conformance If any of the following Job
values: Requirement operations are supported:
’job-suspended’ REQUIRED Suspend-Current-Job
’printer-stopped’ REQUIRED Always REQUIRED
12. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2246] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0",
RFC 2246, January 1999.
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
[RFC2910] Herriot, R., Butler, S., Moore, P., Turner, R., and J.
Wenn, "Internet Printing Protocol/1.1: Encoding and
Transport", RFC 2910, September 2000.
[RFC2911] Hastings, T., Herriot, R., deBry, R., Isaacson, S., and P.
Powell, "Internet Printing Protocol/1.1: Model and
Semantics", RFC 2911, September 2000.
[RFC3380] Hastings, T., Herriot, R., Kugler, C., and H. Lewis,
"Internet Printing Protocol (IPP): Job and Printer Set
Operations", RFC 3380, September 2002.
13. Informative References
[RFC2567] Wright, F., "Design Goals for an Internet Printing
Protocol", RFC 2567, April 1999.
[RFC2568] Zilles, S., "Rationale for the Structure of the Model and
Protocol for the Internet Printing Protocol", RFC 2568,
April 1999.
[RFC2569] Herriot, R., Hastings, T., Jacobs, N., and J. Martin,
"Mapping between LPD and IPP Protocols", RFC 2569, April
1999.
[RFC3196] Hastings, T., Manros, C., Zehler, P., Kugler, C., and H.
Holst, "Internet Printing Protocol/1.1: Implementor’s
Guide", RFC 3196, November 2001.
[RFC3239] Kugler, C., Lewis, H., and T. Hastings, "Internet Printing
Protocol (IPP): Requirements for Job, Printer, and Device
Administrative Operations", RFC 3239, February 2002.
[RFC3995] Herriot, R. and T. Hastings, "Internet Printing Protocol
(IPP): Event Notifications and Subscriptions", RFC 3995,
February 2005.
14. IANA Considerations
This section contains the registration information that IANA added to
the IPP Registry according to the procedures defined in [RFC2911],
section 6, to cover the definitions in this document. The resulting
registrations have been published as additions to the
http://www.iana.org/assignments/ipp-registrations file.
14.1. Attribute Registrations
The following table lists all the attributes defined in this
document. These have been registered according to the procedures in
[RFC2911], section 6.2.
Name Reference Section
-------------------------------------- --------- -------
Job Description attributes:
original-requesting-user-name (name(MAX)) [RFC3998] 10.8.2
Printer Description attributes:
subordinate-printers-supported (1setOf uri) [RFC3998] 7.1
parent-printers-supported (1setOf uri) [RFC3998] 7.2
Operation attributes:
original-requesting-user-name (name(MAX)) [RFC3998] 10.8.2
14.2. Attribute Value Registrations
This section lists the additional values defined in this document for
existing attributes.
Attribute
Value Reference Section
--------------------- --------- -------
job-state-reasons (1setOf type2 keyword)
job-suspended [RFC3998] 9.1
printer-state-reasons (1setOf type2 keyword)
hold-new-jobs [RFC3998] 8.1