different from the Delivery Method used by the Printer to the
extended Notification Recipient.
This extended Notification Recipient is transparent to the Printer
but not to the client.
When a client performs a Subscription Creation Operation, it
specifies the extended Notification Recipient as it would any
Notification Recipient. In addition, the client specifies the
Ultimate Notification Recipient in the Subscription Creation
Operation in a manner specified by the extended Notification
Recipient. Typically, it is either some bytes in the value of
"notify-user-data" or some additional parameter in the value of
"notify-recipient-uri". The client also subscribes directly with the
extended Notification Recipient (by means outside this document),
since it is a notification server in its own right.
The IPP Printer treats the extended Notification Recipient like any
other Notification Recipient and the IPP Printer is not aware of the
forwarding. The Delivery Method that the extended Notification
Recipient uses for delivering the Event Notification to the Ultimate
Notification Recipient is beyond the scope of this document and is
transparent to the IPP Printer.
Examples of this extended Notification Recipient are paging,
immediate messaging services, general notification services, and NOS
vendors’ infrastructure. Figure 4 shows this approach.
PDA, desktop, or server server or output device
+---------------+
+--------+ | ########### |
| client |---Subscription Creation -----------># Printer # |
+--------+ Operation | # Object # |
| #####|##### |
+------------+ +------------+ IPP-defined +-------|-------+
|Ultimate | any |Notification|<--Event Notifications----+
|Notification|<----|Recipient |
|Recipient | +------------+
+------------+ (Notification Server)
Figure 4 - Use of an Extended Notification Recipient transparent to
the Printer
19. Object Model for Notification (Normative)
This section describes the Notification object model that adds a
Subscription Object which together with the Job and Printer object
provide the complete Notification semantics.
The object relationships can be seen pictorially as:
Subscription Objects (Per-Printer Subscriptions) Printer object
+----+ +------------+
| s1 |<--------------------------------------------->| |
+----++ | |
| s2 |<-------------------------------------------->| p1 |
+----++ | |
| s3 |<------------------------------------------->| |
+----+ +------------+
Job objects
+---------+
| |
+----+ | j1 |
| s4 |<------->| |
+----+ | |
| | s4 is a Per-Job Subscription Object
++--------++
| |
+----+ | j2 |
| s5 |<------>| |
+----++ | |
| s6 |<----->| | s5 and s6 are Per-Job Subscription
+----+ ++--------++ Objects
| |
| j3 |
| |
| | <----> indicates association
+---------+
Figure 5 - Object Model for Notification
s1, s2, and s3 are Per-Printer Subscription Objects and can identify
Printer and/or Job Events.
s4, s5, and s6 are Per-Job Subscription Objects and can identify
Printer and/or Job Events.
19.1. Object relationships
This sub-section defines the object relationships between the
Printer, Job, and Subscription Objects by example. Whether Per-
Printer Subscription Objects are actually contained in a Printer
object or are just bi-directionally associated with them in some way
is IMPLEMENTATION DEPENDENT and is transparent to the client.
Similarly, whether Per-Job Subscription Objects are actually
contained in a Job object or are just bi-directionally associated
with them in some way is IMPLEMENTATION DEPENDENT and is transparent
to the client. The object relationships are defined as follows:
19.2. Printer Object and Per-Printer Subscription Objects
1. The Printer object contains (is associated with) zero or more
Per-Printer Subscription Objects (p1 contains s1-s3 Per-Printer
Subscription Objects).
2. Each Per-Printer Subscription Object (s1, s2, and s3) is contained
in (or is associated with) exactly one Printer object (p1).
19.3. Job Object and Per-Job Subscription Objects
1. A Job object (j1, j2, j3) is associated with zero or more Per-Job
Subscription Objects (s4-s6). Job j1 is associated with Per-Job
Subscription Object s4, Job j2 is associated with Per-Job
Subscription Objects s5 and s6, and Job j3 is not associated with
any Per-Job Subscription Object.
2. Each Per-Job Subscription Object is associated with exactly one
Job object.
20. Per-Job versus Per-Printer Subscription Objects (Normative)
Per-Job and Per-Printer Subscription Objects are quite similar.
Either type of Subscription Object can subscribe to Job Events,
Printer Events, or both. Both types of Subscription Objects can be
queried using the Get-Subscriptions and Get-Subscription-Attributes
operations and canceled using the Cancel-Subscription operation.
Both types of Subscription Objects create Subscription Objects which
have the same Subscription Object attributes defined. However, there
are some semantic differences between Per-Job Subscription Objects
and Per-Printer Subscription Objects. A Per-Job Subscription Object
is established by the client when submitting a job and after creating
the job using the Create-Job-Subscriptions operation by specifying
the "job-id" of the Job with the "notify-job-id" attribute. A Per-
Printer Subscription Object is established between a client and a
Printer using the Create-Printer-Subscriptions operation. Some
specific differences are:
1. A client usually creates one or more Per-Job Subscription Objects
as part of the Job Creation operations (Create-Job, Print-Job, and
Print-URI), rather than using the OPTIONAL Create-Job-
Subscriptions operation, especially since Printer implementations
NEED NOT support the Create-Job-Subscriptions operation, since it
is OPTIONAL.
2. For Per-Job Subscription Objects, the Subscription Object is only
valid while the job is "not-complete" (see sections 5.4.3) while
for the Per-Printer Subscription Objects, the Subscription Object
is valid until the time (in seconds) that the Printer returned in
the "notify-lease-expiration-time" operation attribute.
3. Job Events in a Per-Job Subscription Object apply only to "one
job" (the Job created by the Job Creation operation or references
by the Create-Job-Subscriptions operation) while Job Events in a
Per-Printer Subscription Object apply to ALL jobs contained in the
IPP Printer.
21. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119 , March 1997.
[RFC2396] Berners-Lee, T., Fielding, R., and L. Masinter,
"Uniform Resource Identifiers (URI): Generic
Syntax", RFC 2396, August 1998.
[RFC2717] Petke, R. and I. King, "Registration Procedures for
URL Scheme Names", RFC 2717, November 1999.
[RFC2910] Herriot, R., Butler, S., Moore, P., and R. Turner,
"Internet Printing Protocol/1.1: Encoding and
Transport", RFC 2910, September 2000.
[RFC2911] deBry, R., Hastings, T., Herriot, R., Isaacson, S.,
and P. Powell, "Internet Printing Protocol/1.1:
Model and Semantics", RFC 2911, September 2000.
[RFC3381] Hastings, T., Lewis, H., and R. Bergman, "IPP: Job
Progress Attributes", RFC 3381, September 2002.
[RFC3996] Herriot, R., Hastings, T., and H. Lewis, "Internet
Printing Protocol (IPP): The ’ippget’ Delivery
Method for Event Notifications", RFC 3996, March
2005.
22. Informative References
[IANA-CON] Narten, T. and H. Alvestrand, "Guidelines for
Writing an IANA Considerations Section in RFCs",
BCP 26, RFC 2434, October 1998.
[RFC2565] Herriot, R., Butler, S., Moore, P., and R. Turner,
"Internet Printing Protocol/1.0: Encoding and
Transport", RFC 2565, April 1999.
[RFC2566] deBry, R., Hastings, T., Herriot, R., Isaacson, S.,
and P. Powell, "Internet Printing Protocol/1.0:
Model and Semantics", RFC 2566, April 1999.
[RFC2567] Wright, D., "Design Goals for an Internet Printing
Protocol", RFC 2567, April 1999.
[RFC2568] Zilles, S., "Rationale for the Structure and 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.
[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.
[RFC3196] Hastings, T., Manros, C., Zehler, P., Kugler, C.,
and H. Holst, "Internet Printing Protocol/1.1:
Implementer’s Guide", RFC 3196, November 2001.
[RFC3997] Hastings, T., Editor, deBry, R., and H. Lewis,
"Internet Printing Protocol (IPP): Requirements for
IPP Notifications", RFC 3997, March 2005.
23. IANA Considerations
This section contains the registration information that IANA added to
the IPP Registry according to the procedures defined in RFC 2911
[RFC2911] section 6 to cover the definitions in this document. In
addition, this section defines how Events and Delivery Methods will
be registered when they are defined in other documents. The
resulting registrations have been published in the
http://www.iana.org/assignments/ipp-registrations registry.
23.1. Attribute Registrations
The following table lists all the attributes defined in this
document. These have been registered according to the procedures in
RFC 2911 [RFC2911] section 6.2.
Subscription Template attributes: Reference Section
--------------------------------- --------- -------
notify-attributes (1setOf type2 keyword) [RFC3995] 5.3.4
notify-attributes-supported (1setOf type2 keyword)
[RFC3995] 5.3.4.1
notify-charset (charset) [RFC3995] 5.3.6
notify-events (1setOf type2 keyword) [RFC3995] 5.3.3
notify-events-default (1setOf type2 keyword) [RFC3995] 5.3.3.1
notify-events-supported (1setOf type2 keyword) [RFC3995] 5.3.3.2
notify-lease-duration (integer(0:67108863)) [RFC3995] 5.3.8
notify-lease-duration-default (integer(0:67108863))
[RFC3995] 5.3.8.1
notify-lease-duration-supported (1setOf (integer(0: 67108863) |
rangeOfInteger(0:67108863))) [RFC3995] 5.3.8.2
notify-max-events-supported (integer(2:MAX)) [RFC3995] 5.3.3.3
notify-natural-language (naturalLanguage) [RFC3995] 5.3.7
notify-pull-method (type2 keyword) [RFC3995] 5.3.2
notify-pull-method-supported (1setOf type2 keyword)
[RFC3995] 5.3.2.1
notify-recipient-uri (uri) [RFC3995] 5.3.1
notify-schemes-supported (1setOf uriScheme) [RFC3995] 5.3.1.1
notify-time-interval (integer(0:MAX)) [RFC3995] 5.3.9
notify-user-data (octetString(63)) [RFC3995] 5.3.5
Subscription Description Attributes:
notify-job-id (integer(1:MAX)) [RFC3995] 5.4.6
notify-lease-expiration-time (integer(0:MAX)) [RFC3995] 5.4.3
notify-printer-up-time (integer(1:MAX)) [RFC3995] 5.4.4
notify-printer-uri (uri) [RFC3995] 5.4.5
notify-sequence-number (integer (0:MAX)) [RFC3995] 5.4.2
notify-subscriber-user-name (name(MAX)) [RFC3995] 5.4.7
notify-subscription-id (integer (1:MAX)) [RFC3995] 5.4.1
Printer Description Attributes:
printer-state-change-date-time (dateTime) [RFC3995] 6.2
printer-state-change-time (integer(1:MAX)) [RFC3995] 6.1
Attributes Only in Event Notifications
notify-subscribed-event (type2 keyword) [RFC3995] 8.1
notify-text (text(MAX)) [RFC3995] 8.2
23.2. Additional Enum Attribute Value Registrations within the IPP
registry
The following table lists all the new enum attribute values defined
in this document. These have been registered within the IPP registry
according to the procedures in RFC 2911 [RFC2911] section 6.1.
Attribute
Value Name Reference Section
------ ----------------------------- --------- -------
operations-supported (1setOf type2 enum) [RFC2911] 4.4.15
0x0016 Create-Printer-Subscriptions [RFC3995] 7.1
0x0017 Create-Job-Subscriptions [RFC3995] 7.1
0x0018 Get-Subscription-Attributes [RFC3995] 7.1
0x0019 Get-Subscriptions [RFC3995] 7.1
0x001A Renew-Subscription [RFC3995] 7.1
0x001B Cancel-Subscription [RFC3995] 7.1
23.3. Operation Registrations
The following table lists all of the operations defined in this
document. These have been registered according to the procedures in
RFC 2911 [RFC2911] section 6.4.
Operation Name Reference Section
--------------------------------- --------- -------
Cancel-Subscription [RFC3995] 11.2.7
Create-Job - Extensions [RFC3995] 11.1.3
Create-Job-Subscriptions [RFC3995] 11.1.1
Create-Printer-Subscriptions [RFC3995] 11.1.2
Get-Printer-Attributes - Extensions [RFC3995] 11.2.3
Get-Subscription-Attributes [RFC3995] 11.2.4
Get-Subscriptions [RFC3995] 11.2.5
Print-Job - Extensions [RFC3995] 11.1.3
Print-URI - Extensions [RFC3995] 11.1.3
Renew-Subscription [RFC3995] 11.2.6
Validate-Job Operation - Extensions [RFC3995] 11.2.2
23.4. Status code Registrations
The following table lists all the status codes defined in this
document. These have been registered according to the procedures in
RFC 2911 [RFC2911] section 6.6.
Value Status Code Name Reference Section
----- ---------------------------- --------- -------
0x0000:0x00FF - Successful:
0x0003 successful-ok-ignored-subscriptions [RFC3995] 12.1
0x0005 successful-ok-too-many-events [RFC3995] 13.4
0x0400:0x04FF - Client Error:
0x0414 client-error-ignored-all-subscriptions [RFC3995] 12.2
0x0415 client-error-too-many-subscriptions [RFC3995] 13.3
23.5. Attribute Group tag Registrations
The following table lists all the attribute group tags defined in
this document. These have been registered according to the
procedures in RFC 2911 [RFC2911] section 6.5.
Value Attribute Group Tag Name Reference Section
----- -------------------------------- -------- -------
0x06 subscription-attributes-tag [RFC3995] 14
0x07 event-notification-attributes-tag [RFC3995] 14
23.6. Registration of Events
The following table lists all the Events defined in this document as
type2 keywords to be used with the "notify-events", "notify-events-
default", and "notify-events-supported" Subscription Template
attributes (see section 5.3.3)). Rather than creating a separate
section in the IPP Registry for Events, these event keywords have
been registered according to the procedures of [RFC2911] section 7.1
as additional keyword attribute values for use with the "notify-
events" Subscription Template attribute (see section 5.3.3), i.e.,
registered as keyword values for the "notify-events", "notify-
events-default", and "notify-events-supported" attributes:
Attribute (attribute syntax)
Value Reference Section
--------------------- --------- -------
notify-events (1setOf type2 keyword) [RFC3995] 5.3.3
notify-events-default (1setOf type2 keyword) [RFC3995] 5.3.3.1
notify-events-supported (1setOf type2 keyword) [RFC3995] 5.3.3.2
notify-subscribed-event (type2 keyword) [RFC3995] 8.1
No Events:
none [RFC3995] 5.3.3.4.1
Printer Events:
printer-state-changed [RFC3995] 5.3.3.4.2
printer-restarted [RFC3995] 5.3.3.4.2
printer-shutdown [RFC3995] 5.3.3.4.2
printer-stopped [RFC3995] 5.3.3.4.2
printer-config-changed [RFC3995] 5.3.3.4.2
printer-media-changed [RFC3995] 5.3.3.4.2
printer-finishings-changed [RFC3995] 5.3.3.4.2
printer-queue-order-changed [RFC3995] 5.3.3.4.2
Job Events:
job-state-changed [RFC3995] 5.3.3.4.3
job-created [RFC3995] 5.3.3.4.3
job-completed [RFC3995] 5.3.3.4.3
job-stopped [RFC3995] 5.3.3.4.3
job-config-changed [RFC3995] 5.3.3.4.3
job-progress [RFC3995] 5.3.3.4.3
23.7. Registration of Event Notification Delivery Methods
This section describes the requirements and procedures for
registration and publication of Event Notification Delivery Methods