tech-invite   World Map     

IETF     RFCs     Groups     SIP     ABNFs    |    3GPP     Specs     Glossaries     Architecture     IMS     UICC    |    search

RFC 3995

 
 
 

Internet Printing Protocol (IPP): Event Notifications and Subscriptions

Part 2 of 4, p. 18 to 50
Prev RFC Part       Next RFC Part

 


prevText      Top      Up      ToC       Page 18 
5.3.  Subscription Template Attributes

   This section contains the Subscription Template Attributes defined
   for the Subscription and Printer objects.

Top      Up      ToC       Page 19 
   Table 1 below shows the Subscription Template Attributes and has two
   columns:

   -  Attribute in Subscription Object: the name and attribute syntax of
      each Subscription Object Attribute that is a Subscription Template
      Attribute

   -  Default and Supported Printer Attributes: the default attribute
      and supported Printer attributes that are associated with the
      attribute in column 1.

   The "notify-recipient-uri" attribute is for use with Push Delivery
   Methods.  The "notify-pull-method" attribute is for use with Pull
   Delivery Methods.

   For Push Delivery Methods, a Printer MUST support all attributes in
   Table 1 below except for "notify-pull-method" and "notify-attributes"
   (and "notify-pull-method-supported" and "notify-attributes-
   supported").  For Pull Delivery Methods, a Printer MUST support all
   attributes in Table 1 below except for "notify-recipient-uri" and
   "notify-attributes" (and "notify-schemes-supported" and "notify-
   attributes-supported").  If a Printer supports both Push and Pull
   Delivery Methods, then it MUST support both "notify-recipient-uri"
   and "notify-pull-method" attributes.

   For Pull Delivery Methods, a client MUST supply "notify-recipient-
   uri" and MAY omit any of the rest of the attributes in column 1 of
   Table 1 in a Subscription Creation Request.  For Push Delivery
   Methods, a client MUST supply "notify-pull-method" and MAY omit any
   of the rest of the attributes in column 1 of Table 1 in a
   Subscription Creation Request.  A client MUST NOT supply both
   "notify-recipient-uri" and "notify-pull-method" attributes in the
   same Subscription Creation Request.

   Note:  The Default and Supported Printer attributes listed in column
   2 of Table 1 do not have separate sections in this specification
   defining their semantics.  Instead, the section for the corresponding
   Subscription Object attribute (column 1 of Table 1) contains the
   semantics of these Printer attributes.  This approach follows the
   precedence of the Job Template attributes in section 4.2 of [RFC2911]
   where the corresponding "xxx-default" and "xxx-supported" Printer
   attributes are defined in the same section as the "xxx" Job
   attribute.

Top      Up      ToC       Page 20 
   Table 1 - Subscription Template Attributes

   Attribute in Subscription     Default and Supported Printer
   Object                        Attributes

   notify-recipient-uri (uri) *  notify-schemes-supported  (1setOf
                                 uriScheme)
   notify-pull-method (type2     notify-pull-method-supported (1setOf
   keyword) **                   type2 keyword)
   notify-events (1setOf type2   notify-events-default (1setOf type2
   keyword)                      keyword)
                                 notify-events-supported (1setOf type2
                                 keyword)
                                 notify-max-events-supported
                                 (integer(2:MAX))

   notify-attributes (1setOf     notify-attributes-supported (1setOf
   type2 keyword)                type2 keyword)
   notify-user-data
   (octetString(63))
   notify-charset (charset)      charset-supported (1setOf charset)
   notify-natural-language       generated-natural-language-supported
   (naturalLanguage)             (1setOf naturalLanguage)
   notify-lease-duration         notify-lease-duration-default
   (integer(0:MAX))              (integer(0:67108863))
                                 notify-lease-duration-supported
                                 (1setOf (integer(0: 67108863) |
                                 rangeOfInteger(0:67108863)))
   notify-time-interval
   (integer(0:MAX))

   * "notify-recipient-uri" is for Push Delivery Methods only.
   ** "notify-pull-method" is for Pull Delivery Methods only.

5.3.1.  notify-recipient-uri (uri)

   This attribute's value is a URL, which is a special case of a URI.
   Its value consists of a scheme and an address.  The address specifies
   the Notification Recipient and the scheme specifies the Push Delivery
   Method for each Event Notification associated with this Subscription
   Object.

   If a Printer supports any Push Delivery Methods, a Printer MUST
   support this attribute and return the value as supplied by the client
   (no case conversion or other canonicalization) in any operation
   response that includes this attribute.

Top      Up      ToC       Page 21 
   For a Push Delivery Method, a client MUST supply this attribute in a
   Subscription Creation Operation.  Thus there is no need for a default
   Printer attribute.

   The URI scheme of the value of this attribute on a Subscription
   object MUST be a value of the "notify-schemes-supported (1setOf
   uriScheme)" Printer attribute (see section 5.3.1.1).  Note: According
   to [RFC2396] the ":" terminates the scheme and so is not part of the
   scheme.  Therefore, values of the "notify-schemes-supported" Printer
   attribute do not include the ":" character.

   If the client supplies an unsupported scheme in the value of this
   attribute, then the Printer MUST NOT create the Subscription Object
   and MUST return the "notify-status-code" attribute with the 'client-
   error-uri-scheme-not-supported' value in the Subscription Attributes
   Group in the response.

5.3.1.1.  notify-schemes-supported  (1setOf uriScheme)

   This attribute contains the URI schemes supported in the "notify-
   recipient-uri" Subscription Template attribute.  See sections 5.1 and
   5.2 for the behavior of "xxx-supported" Subscription Template Printer
   attributes.

5.3.2.  notify-pull-method (type2 keyword)

   This attribute's value is a type2 keyword indicating which Pull
   Delivery Method is to be used.

   Since a Printer MUST support the 'ippget' Pull Delivery Method
   [RFC3996] (see section 15), a Printer MUST support this attribute and
   return the value as supplied by the client in any operation response
   that includes this attribute.

   For a Pull Delivery Method, a client MUST supply this attribute in a
   Subscription Creation Operation.  Thus there is no need for a default
   Printer attribute.

   The keyword value of this attribute on a Subscription object MUST be
   a value of the "notify-pull-method-supported (1setOf type2 keyword)"
   Printer attribute.

   If the client supplies an unsupported method in the value of this
   attribute, then the Printer MUST NOT create the Subscription Object
   and MUST return the "notify-status-code" attribute with the 'client-
   error-attributes-or-values-not-supported' value in the Subscription
   Attributes Group in the response.

Top      Up      ToC       Page 22 
5.3.2.1.  notify-pull-method-supported (1setOf type2 keyword)

   See sections 5.1 and 5.2 for the behavior of "xxx-supported"
   Subscription Template Printer attributes.

5.3.3.  notify-events (1setOf type2 keyword)

   This attribute contains a set of Subscribed Events.  When an Event
   occurs and it "matches" a value of this attribute, the Printer
   delivers an Event Notification using information in the Subscription
   Object.  The details of "matching" are described subsection 5.3.3.5.

   A Printer MUST support this attribute.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in
   Subscription Creation Operation, the Printer MUST populate this
   attribute on the Subscription Object with its "notify-events-default"
   attribute value.

   Each keyword value of this attribute on a Subscription Object MUST be
   a value of the  "notify-events-supported (1setOf type2 keyword)"
   Printer attribute.

   The number of values of this attribute MUST NOT exceed the value of
   the "notify-max-events-supported" attribute.  A Printer MUST support
   at least 2 values per Subscription Object.  If the number of values
   supplied by a client in a Subscription Creation Operation exceeds the
   value of this attribute, the Printer MUST treat extra values as
   unsupported values and MUST use the value of 'successful-ok-too-
   many-events' for the "notify-status-code" attribute in the
   Subscription Attributes Group of the response.

5.3.3.1.  notify-events-default (1setOf type2 keyword)

   See sections 5.1 and 5.2 for the behavior of "xxx-default"
   Subscription Template Printer attributes.

5.3.3.2.  notify-events-supported (1setOf type2 keyword)

   See sections 5.1 and 5.2 for the behavior of "xxx-supported"
   Subscription Template Printer attributes.

Top      Up      ToC       Page 23 
5.3.3.3.  notify-max-events-supported (integer(2:MAX))

   This attribute specified the maximum number of events that the
   Printer supports for the "notify-events" Subscription Template
   attribute.  See sections 5.1 and 5.2 for the behavior of "xxx-
   supported" Subscription Template Printer attributes.

5.3.3.4.  Standard Values for Subscribed Events

   Each value of this attribute is a keyword and it specifies a
   Subscribed Event that represents certain changes.  Some keywords
   represent a subset of changes of another keyword, e.g., 'job-
   completed' is an Event value which is a sub-value of 'job-state-
   change'.  See section 5.3.3.5 for the case where this attribute
   contains both a value and a sub-value.

   The values in this section are divided into three categories: No
   Events, Job Events and Printer Events.

   A Printer MUST support the Events indicated as "REQUIRED" and MAY
   support the Events indicated as "OPTIONAL".

5.3.3.4.1.  No Events

   The standard and only keyword value for No Events is:

   'none':  REQUIRED - no Event Notifications for any Events.  As the
      sole value of "notify-events-supported", this value means that the
      Printer does not support the delivery of Event Notifications.  As
      the sole value of "notify-events-default", this value means that a
      client MUST specify the "notify-events" attribute in order for a
      Subscription Creation Operation to succeed.  If the Printer
      receives this value as the sole value of a Subscription Creation
      Operation, it does not create a Subscription Object.  If a Printer
      receives this value with other values of a Subscription Creation
      Operation, the Printer MUST treat this value as an unsupported
      value.

5.3.3.4.2.  Subscribed Printer Events

   The standard keyword values for Subscribed Printer Events are:

   'printer-state-changed':  REQUIRED - the Printer changed state from
      any state to any other state.  Specifically, the value of the
      Printer's "printer-state", "printer-state-reasons" or "printer-
      is-accepting-jobs" attributes changed.

Top      Up      ToC       Page 24 
      This Subscribed Event value has the following sub-values:
      'printer-restarted' and 'printer-shutdown'.  A client can listen
      for any of these sub-values if it doesn't want to listen to all
      printer-state changes:

         'printer-restarted':  OPTIONAL - when the printer is powered
            up.

         'printer-shutdown':  OPTIONAL - when the device is being
            powered down.

         'printer-stopped:  REQUIRED - when the printer stops printing,
            i.e., the value of the "printer-state" Printer attribute
            becomes 'stopped'.

   'printer-config-changed':  OPTIONAL - when the configuration of a
      Printer has changed, i.e., the value of the "printer-message-
      from-operator" or any "configuration" Printer attribute has
      changed.  A "configuration" Printer attribute is an attribute
      which can change value because of some human interaction either
      direct or indirect, and which is not covered by one of the other
      Events in this section.  Examples of "configuration" Printer
      attributes are any of the Job Template attributes, such as "xxx-
      supported", "xxx-ready" and "xxx-default".  The client has to
      perform a Get-Printer-Attributes to find out the new values of
      these changed attributes.  This Event is useful for GUI clients
      and drivers to update the available printer capabilities to the
      user.

      This Event value has the following sub-values: 'printer-media-
      changed' and 'printer-finishings-changed'.  A client can listen
      for any of these sub-values if it doesn't want to listen to all
      printer-configuration changes:

         'printer-media-changed':  OPTIONAL - when the media loaded on
            a printer has been changed, i.e., the "media-ready"
            attribute has changed.  This Event includes two cases: an
            input tray that goes empty and an input tray that receives
            additional media of the same type or of a different type.
            The client must check the "media-ready" Printer attribute
            (see [RFC2911] section 4.2.11) separately to find out what
            changed.

         'printer-finishings-changed':  OPTIONAL - when the finisher on
            a printer has been changed, i.e., the "finishings-ready"
            attribute has changed.  This Event includes two cases: a
            finisher that goes empty and a finisher that is refilled
            (even if it is not full).  The client must check the

Top      Up      ToC       Page 25 
            "finishings-ready" Printer attribute separately to find out
            what changed.

   'printer-queue-order-changed': OPTIONAL - the order of jobs in the
      Printer's queue has changed, so that an application that is
      monitoring the queue can perform a Get-Jobs operation to determine
      the new order.  This Event does not include when a job enters the
      queue (the 'job-created' Event covers that) and does not include
      when a job leaves the queue (the 'job-completed' Event covers
      that).

5.3.3.4.3.  Subscribed Job Events

   The standard keyword values for Subscribed Job Events are:

   'job-state-changed':  REQUIRED - the job has changed from any state
      to any other state.  Specifically, the Printer delivers this Event
      whenever the value of the "job-state" attribute or "job-state-
      reasons" attribute changes.  When a Job is removed from the Job
      Retention or Job History phases (see [RFC2911] section 4.3.7.1),
      no Event is generated.

      This Event value has the following sub-values: 'job-created',
      'job-completed' and 'job-stopped'.  A client can listen for any of
      these sub-values if it doesn't want to listen to all 'job-state
      changes'.

      'job-created':  REQUIRED - the Printer has accepted a Job
         Creation operation, a Restart-Job operation [RFC2911], or any
         job operation that creates a Job object from an existing Job
         object.  The Printer populates the job's "time-at-creation"
         attribute value (see [RFC2911] section 4.3.14.1).  The Printer
         puts the job in the 'pending', 'pending-held' or 'processing'
         states.

      'job-completed':  REQUIRED - the job has reached one of the
         completed states, i.e., the value of the job's "job-state"
         attribute has changed to: 'completed', 'aborted', or
         'canceled'.  The Job's "time-at-completed" and "date-time-at-
         completed" (if supported) attributes are set (see [RFC2911]
         section 4.3.14).  When a Job completes, a Notification
         Recipient MAY query the Job using the Get-Job-Attributes
         operation.  To allow such a query, the Printer retains the Job
         in the Job Retention and/or the Job History phases (see
         [RFC2911] section 4.3.7.1) for a suitable amount of time that
         depends on implementation and the Delivery Methods supported.
         The Printer also delivers this Event when a Job is removed with
         the Purge-Job operation (see [RFC2911] section 3.2.9).  In this

Top      Up      ToC       Page 26 
         case, the Event Notification MUST report the 'job-state' as
         'canceled' and the Job object is no longer present for query.

      'job-stopped:  OPTIONAL - when the job stops printing, i.e.,
         the value of the "job-state" Job attribute becomes
         'processing-stopped'.

   'job-config-changed':  OPTIONAL - when the configuration of a job has
      changed, i.e., the value of the "job-message-from-operator" or any
      of the "configuration" Job attributes have changed.  A
      "configuration" Job attribute is an attribute that can change
      value because of some human interaction either direct or indirect.
      Examples of "configuration" Job attributes are any of the job
      template attributes and the "job-name" attribute.  The client
      performs a Get-Job-Attributes to find out the new values of the
      changed attributes.  This Event is useful for GUI clients and
      drivers to update the job information to the user.

   'job-progress': OPTIONAL - when the Printer has completed Printing a
      sheet.  See the separate [RFC3381] specification for additional
      attributes that a Printer MAY deliver in an Event Notification
      caused by this Event.  The "notify-time-interval" attribute
      affects this Event by causing the Printer NOT to deliver an Event
      Notification every time a 'job-progress' Events occurs.  See
      section 5.3.9 for full details.

5.3.3.5.  Rules for Matching of Subscribed Events

   When an Event occurs, the Printer MUST find each Subscription object
   whose "notify-events" attribute "matches" the Event.  The rules for
   "matching" of Subscribed Events are described separately for Printer
   Events and for Job Events.  This section also describes some special
   cases.

5.3.3.5.1.  Rules for Matching of Printer Events

   Given that the Printer causes Printer Event E to occur, for each
   Per-Job or Per-Printer Subscription S in the Printer, if E equals a
   value of this attribute in S or E is a sub-value of a value of this
   attribute in S, the Printer MUST generate an Event Notification.

   Consider the example.  There are three Subscription Objects each with
   the Subscribed Printer Event 'printer-state-changed'.  Subscription
   Object A is a Per-Printer Subscription Object.  Subscription Object B
   is a Per-Job Subscription Object for Job 1, and Subscription Object C
   is a Per-Job Subscription Object for Job 2.  When the Printer enters
   the 'stopped' state, the Printer delivers an Event Notification to
   the Notification Recipients of Subscription Objects A, B, and C

Top      Up      ToC       Page 27 
   because this is a Printer Event.  Note if Job 1 has already
   completed, the Printer would not deliver an Event Notification for
   its Subscription Object, even if Job 1 is retained in the Job
   Retention and/or the Job History phases (see [RFC2911] section
   4.3.7.1).

5.3.3.5.2.  Rules for Matching of Job Events

   Given that Job J causes Job Event E to occur:

   1. For each Per-Printer Subscription S in the Printer, if E equals a
      value of this attribute in S or E is a sub-value of a value of
      this attribute in S, the Printer MUST generate an Event
      Notification.

   2. For each Per-Job Subscription S associated with Job J, if E equals
      a value of this attribute in S or E is a sub-value of a value of
      this attribute in S, the Printer MUST generate an Event
      Notification.

   3. For each Per-Job Subscription S that is NOT associated Job J, if E
      equals a value of this attribute in S or E is a sub-value of a
      value of this attribute in, the Printer MUST NOT generate an Event
      Notification from S.

   Consider the example: There are three Subscription Objects listening
   for the Job Event 'job-completed'.  Subscription Object A is a Per-
   Printer Subscription Object.  Subscription Object B is a Per-Job
   Subscription Object for Job 1, and Subscription Object C is a Per-Job
   Subscription Object for Job 2.  In addition, Per-Printer Subscription
   Object D is listening for the Job Event 'job-state-changed'.  When
   Job 1 completes, the Printer delivers an Event Notification to the
   Notification Recipient of Subscription Object A (because it is Per-
   Printer) and Subscription Object B because it is a Per-Job
   Subscription Object associated with the Job generating the Event.
   The Printer also delivers an Event Notification to the Notification
   Recipient of Subscription Object D because 'job-completed' is a sub-
   value of 'job-state-changed' - the value that Subscription Object D
   is listening for.  The Printer does not deliver an Event Notification
   to the Notification Recipients of Subscription Object C because it is
   a Per-Job Subscription Object associated with some Job other than the
   Job generating the Event.

5.3.3.5.3.  Special Cases for Matching Rules

   This section contains two rules for the special case where a single
   Event produces multiple Event Notifications destined for the same
   Notification Recipient.  These two rules clarify whether a Printer

Top      Up      ToC       Page 28 
   should send multiple Event Notifications or consolidate them into a
   single Event Notification.

   If an Event matches Subscribed Events in two different Subscription
   Objects and the Printer would deliver two identical Event
   Notifications (except for the "notify-subscription-id" attribute) to
   the same Notification Recipient using the same Delivery Method, the
   Printer MUST deliver both Event Notifications.  That is, the Printer
   MUST NOT try to consolidate seemingly identical Event Notifications
   that occur in separate Subscription objects.  Incidentally, the
   Printer MUST NOT reject Subscription Creation Operations that would
   create this scenario.

   Consider the example: At the time a Job completes, there are two
   Per-Printer Subscription Objects A and B with the same Notification
   Recipient R.  Subscription Object A has the Subscribed Job Event
   'job-state-changed'.  Subscription Object B has the Subscribed Job
   Event 'job-completed'.  Both Subscription Objects match the Event
   'job-completed'.  The Printer delivers two Event Notifications to the
   Notification Recipient R.  One with the value of  'job-state-changed'
   for the "notify-subscribed-event" attribute and the other with the
   value of  'job-completed' for the "notify-subscribed-event"
   attribute.

   If an Event matches two Subscribed Events in a single Subscription
   object (e.g., a value and its sub-value), a Printer MAY deliver one
   Event Notification for each matched value in the Subscription Object
   or it MAY deliver only a single Event Notification.  The rules in
   sections 5.3.3.5.1 and 5.3.3.5.2 are purposefully flexible about the
   number of Event Notifications sent when Event E matches two or more
   values in a Subscription Object.

   Consider the example: At the time a Job completes, a Subscription
   Object A has two Subscribed Job Events 'job-state-changed' and 'job-
   completed'.  Both Subscribed Job Events match the Event 'job-
   completed'.  The Printer delivers either one or two Event
   Notifications to the Notification Recipient of Subscription Object A,
   depending on implementation.  If it delivers two Event Notifications,
   one has the value of  'job-state-changed' for the "notify-
   subscribed-event" attribute, and the other has the value of 'job-
   completed' for the "notify-subscribed-event" attribute.  If it
   delivers one Event Notification, it has the value of either 'job-
   state-changed' or 'job-completed' for the "notify-subscribed-event"
   attribute, depending on implementation.  The algorithm for choosing
   such a value is implementation dependent.

Top      Up      ToC       Page 29 
5.3.4.  notify-attributes (1setOf type2 keyword)

   This attribute contains a set of attribute names.  When a Printer
   delivers a Machine Consumable Event Notification, it includes a fixed
   set of attributes (see section 9.1).  If this attribute is present
   and the Event Notification is Machine Consumable, the Printer also
   includes the attributes specified by this attribute.

   A Printer MAY support this attribute.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in
   Subscription Creation Operation or the Printer does not support this
   attribute, the Subscription Object either (1) MAY contain the
   "notify-attributes" attribute with a 'none' value or (2) NEED NOT
   contain the attribute at all.  There is no "notify-attributes-
   default" Printer attribute.

   Each keyword value of this attribute on a Subscription Object MUST be
   a value of the "notify-attributes-supported (1setOf type2 keyword)"
   Printer attribute (see section 5.3.4.1).  The "notify-attributes-
   supported" MAY contain any Printer attribute, Job attribute or
   Subscription Object attribute that the Printer supports in an Event
   Notification.  It MUST NOT contain any of the attributes in Section
   9.1 that a Printer automatically puts in an Event Notification; it
   would be redundant.  If a client supplies an attribute in Section
   9.1, the Printer MUST treat it as an unsupported attribute value of
   the "notify-attributes" attribute.

   The following rules apply to each keyword value N of the "notify-
   attributes" attribute: If the value N names:

   a) a Subscription attribute, the Printer MUST use the attribute N in
      the Subscription Object that is being used to generate the Event
      Notification.

   b) a Job attribute and the Printer is generating an Event
      Notification from a Per-Job Subscription Object S, the Printer
      MUST use the attribute N in the Job object associated with S.

   c) a Job attribute and the Printer is generating an Event
      Notification from a Per-Printer Subscription Object and the Event
      is:

      -  a Job Event, the Printer MUST use the attribute N in the Job
         object that caused the Event.

Top      Up      ToC       Page 30 
      -  a Printer Event, the Printer MUST use the attribute N in the
         active Job.

   If a Printer supports this attribute and a Subscription Object
   contains this attribute and the Delivery Method generates a Machine
   Consumable Event Notification, the Printer MUST include in each Event
   Notification:

   a) the attributes specified in section 9.1 and

   b) each attribute named by this attribute.

   The Printer MUST NOT use this attribute to generate a Human
   Consumable Event Notification.

5.3.4.1.  notify-attributes-supported (1setOf type2 keyword)

   See sections 5.1 and 5.2 for the behavior of "xxx-supported"
   Subscription Template Printer attributes.

5.3.5.  notify-user-data (octetString(63))

   This attribute contains opaque data that some Delivery Methods
   include in each Machine Consumable Event Notification.  The opaque
   data might contain, for example:

   -  the identity of the Subscriber

   -  a path or index to some Subscriber information

   -  a key that identifies to the Notification Recipient the ultimate
      recipient of the Event Notification

   -  the id for a Notification Recipient that had previously registered
      with an Instant Messaging Service

   A Printer MUST support this attribute.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in the
   Subscription Creation Operation, the Subscription Object either (1)
   MAY contain the "notify-user-data" attribute with a zero length value
   or (2) NEED NOT contain the attribute at all.  There is no "notify-
   user-data-default" Printer attribute.

Top      Up      ToC       Page 31 
   There is no "notify-user-data-supported" Printer attribute.  Rather,
   any octetString whose length does not exceed 63 octets is a supported
   value.  If the length exceeds 63 octets, the Printer MUST treat it as
   an unsupported value.

5.3.6.  notify-charset (charset)

   This attribute specifies the charset to be used in the Event
   Notification content sent to the Notification Recipient, whether the
   Event Notification content is Machine Consumable or Human Consumable.

   A Printer MUST support this attribute.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in
   Subscription Creation Operation or supplies an unsupported value, the
   Printer MUST populate this attribute in the Subscription Object with
   the value of the "attributes-charset" operation attribute, which is a
   REQUIRED attribute in all IPP requests (see [RFC2911]).  If the value
   of the "attributes-charset" attribute is unsupported, the Printer
   MUST populate this attribute in the Subscription Object with the
   value of the Printer's "charset-configured" attribute.  There is no
   "notify-charset-default" Printer attribute.

   The value of this attribute on a Subscription Object MUST be a value
   of the "charset-supported (1setOf charset)" Printer attribute.

5.3.7.  notify-natural-language (naturalLanguage)

   This attribute specifies the natural language to be used in any human
   consumable text in the Event Notification content sent to the
   Notification Recipient, whether the Event Notification content is
   Machine Consumable or Human Consumable.

   A Printer MUST support this attribute.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in
   Subscription Creation Operation or supplies an unsupported value, the
   Printer MUST populate this attribute in the Subscription Object with
   the value of the "attributes-natural-language" operation attribute,
   which is a REQUIRED attribute in all IPP requests (see [RFC2911]
   section 3.1.4).  If the value of the "attributes-natural-language"
   attribute is unsupported, the Printer MUST populate this attribute in
   the Subscription Object with the value of the Printer's "natural-
   language-configured" attribute (see [RFC2911] section 4.4.19).  There
   is no "notify-natural-language-default" Printer attribute.

Top      Up      ToC       Page 32 
   The value of this attribute on a Subscription Object MUST be a value
   of the "generated-natural-language-supported (1setOf type2
   naturalLanguage)" Printer attribute (see [RFC2911] section 4.4.20).

5.3.8.  notify-lease-duration (integer(0:67108863))

   This attribute specifies the duration of the lease (in seconds)
   associated with the Per-Printer Subscription Object at the time the
   Subscription Object was created or the lease was renewed.  The
   duration of the lease is infinite if the value is 0, i.e., the lease
   never expires.  See section 5.4.3 on "notify-lease-expiration-time
   (integer(0:MAX))" for more details.

   This attribute is not present on a Per-Job Subscription Object
   because the Subscription Object lasts exactly as long as the
   associated Job object.  See discussion of the 'job-completed' event
   in section 5.3.3.4.3 about retention of the Job object after
   completion.

   A Printer MUST support this attribute.

   For a Subscription Object Creation operation of a Per-Job
   Subscription Object, the client MUST NOT supply this attribute.  If
   the client does supply this attribute, the Printer MUST treat it as
   an unsupported attribute.

   For a Subscription Creation Operation of a Per-Printer Subscription
   Object or a Renew-Subscription operation, a client MAY supply this
   attribute.  If the client does not supply this attribute, the Printer
   MUST populate this attribute with its "notify-lease-duration-default"
   (0:67108863) attribute value.  If the client supplies this attribute
   with an unsupported value, the Printer MUST populate this attribute
   with a supported value, and this value SHOULD be as close as possible
   to the value requested by the client.  Note: this rule implies that a
   Printer doesn't assign the value of 0 (infinite) unless the client
   requests it.

   After the Printer has populated this attribute with a supported
   value, the value represents the "granted duration" of the lease in
   seconds and the Printer updates the value of the Subscription
   Object's "notify-lease-expiration-time" attribute as specified in
   section 5.4.3.

   The value of this attribute on a Subscription Object MUST be a value
   of the "notify-lease-duration-supported" (1setOf (integer(0:67108863)
   | rangeOfInteger(0:67108863))) Printer attribute.

Top      Up      ToC       Page 33 
   A Printer MAY require authentication in order to return the value of
   0 (the lease never expires) as one of the values of "notify-lease-
   duration-supported", and to allow 0 as a value of the "notify-lease-
   duration" attribute.

   Note:  The maximum value 67,108,863 is 2 raised to the 26 power minus
   1 and is about 2 years in seconds.  The value is considerably less
   than MAX so that there is virtually no chance of an overflow when the
   Printer adds it to the Printer's "printer-up-time" attribute value
   (see [RFC2911] section 4.4.29) to produce the "notify-lease-
   expiration-time" Subscription Description attribute value (see
   section 5.4.3).

5.3.8.1.  notify-lease-duration-default (integer(0:67108863))

   See sections 5.1 and 5.2 for the behavior of "xxx-default"
   Subscription Template Printer attributes.

5.3.8.2. notify-lease-duration-supported (1setOf (integer(0: 67108863) |
         rangeOfInteger(0:67108863)))

   See sections 5.1 and 5.2 for the behavior of "xxx-supported"
   Subscription Template Printer attributes.

5.3.9.  notify-time-interval (integer(0:MAX))

   The 'job-progress' Event occurs each time that a Printer completes a
   sheet.  Some Notification Recipients do not want to receive an Event
   Notification every time this Event occurs.  This attribute allows a
   Subscribing Client to request how often it wants to receive Event
   Notifications for 'job-progress' Events.  The value of this attribute
   MAY be any nonnegative integer (0,MAX) indicating the minimum number
   of seconds between 'job-progress' Event Notifications.

   The Printer MUST support this attribute if and only if the Printer
   supports the 'job-progress' Event.

   A client MAY supply this attribute in a Subscription Creation
   Operation.  If the client does not supply this attribute in the
   Subscription Creation Operation, the Subscription Object either (1)
   MAY contain the "notify-time-interval" attribute with a '0' value or
   (2) NEED NOT contain this attribute at all.  There is no "notify-
   time-interval-default" Printer attribute.

   There is no "notify-time-interval-supported" Printer attribute.

Top      Up      ToC       Page 34 
   If the 'job-progress' Event occurs and a Subscription Object contains
   the 'job-progress' Event as a value of the 'notify-events' attribute,
   there are two cases to consider:

   1. This attribute is not present on the Subscription Object or has
      the value of 0.  The Printer MUST generate and deliver an Event
      Notification (as is the case with other Events).

   2. This attribute is present with a nonzero value of N:

      a) If the Printer has not sent an Event Notification for the
         'job-progress' Event for the associated Subscription Object
         within the past N seconds, the Printer MUST deliver an Event
         Notification for the Event that just occurred.  Note when the
         Printer completes the first page of a Job, this rule implies
         that the Printer delivers an Event Notification for a Per-Job
         Subscription Object.

      b) Otherwise, the Printer MUST NOT generate or deliver an Event
         Notification for the associated Subscription Object.  The
         Printer MUST NOT increase the value of the "notify-sequence-
         number" Subscription Object attribute (i.e., the sequence of
         values of the "notify-sequence-number" attribute counts the
         Event Notifications that the Printer sent and not the Events
         that do not cause an Event Notification to be sent).

   It is RECOMMENDED that a Subscribing Client use this attribute when
   it subscribes to the 'job-progress' Event, and that the value be
   sufficiently large to limit the frequency with which the Printer
   delivers Event Notifications requests.

   This attribute MUST NOT effect any Events other than 'job-progress'.

5.4.  Subscription Description Attributes

   Subscription Description Attributes are those attributes that a
   Printer adds to a Subscription Object at the time of its creation.

   A Printer MUST support all attributes in this Table 2.

   A client MUST NOT supply the attributes in Table 2 in a Subscription
   Template Attributes Group of a Subscription Creation Operation.
   There are no corresponding default or supported attributes.

Top      Up      ToC       Page 35 
   Table 2 - Subscription Description Attributes

      Subscription Object attributes:

      notify-subscription-id (integer(1:MAX))
      notify-sequence-number (integer(0:MAX))
      notify-lease-expiration-time (integer(0:MAX))
      notify-printer-up-time (integer(1:MAX))
      notify-printer-uri (uri)
      notify-job-id (integer(1:MAX))
      notify-subscriber-user-name (name(MAX))

5.4.1.  notify-subscription-id  (integer (1:MAX))

   This attribute identifies a Subscription Object instance with a
   number that is unique within the context of the Printer.  The Printer
   generates this value at the time it creates the Subscription Object.

   A Printer MUST support this attribute.

   The Printer MAY assign the value of this attribute sequentially as it
   creates Subscription Objects.  However, if there is no security on
   Subscription objects, sequential assignment exposes the system to a
   passive traffic monitoring threat.

   The Printer SHOULD avoid re-using recent values of this attribute
   during continuous operation of the Printer as well as across power
   cycles.  Then a Subscribing Client is unlikely to find that a stale
   reference accesses a new Subscription Object.

   The 0 value is not permitted in order to allow for compatibility with
   "job-id" and with MIB table index values, which are recommended not
   to be 0.

5.4.2.  notify-sequence-number (integer (0:MAX))

   The value of this attribute indicates the number of times that the
   Printer has generated and attempted to deliver an Event Notification
   for this Subscription object.  When an Event Notification contains
   this attribute, the Notification Recipient can determine whether it
   missed some Event Notifications (i.e., numbers skipped) or received
   duplicates (i.e., same number twice).

   A Printer MUST support this attribute.

   When the Printer creates a Subscription Object, it MUST populate this
   attribute with a value of 0.  This value indicates that the Printer
   has not sent any Event Notifications for this Subscription Object.

Top      Up      ToC       Page 36 
   Each time the Printer delivers a newly generated Event Notification,
   it MUST increase the value of this attribute by 1.  For some Delivery
   Methods, the Printer MUST include this attribute in each Event
   Notification, and the value MUST be the value after it is increased
   by 1.  That is, the value of this attribute in the first Event
   Notification after Subscription object creation MUST be 1, the second
   MUST be 2, etc.  If a Delivery Method is defined such that the
   Notification Recipient returns a response, the Printer can re-try
   delivering an Event Notification a certain number of times with the
   same sequence number when the Notification Recipient fails to return
   a response.

   If a Subscription Object lasts long enough to reach the value of MAX,
   its next value MUST be 0, i.e., it wraps.

5.4.3.  notify-lease-expiration-time (integer(0:MAX))

   This attribute specifies the time in the future when the lease on the
   Per-Printer Subscription Object will expire, i.e., the "printer-up-
   time" value at which the lease will expire.  If the value is 0, the
   lease never expires.

   A Printer MUST support this attribute.

   When the Printer creates a Per-Job Subscription Object, this
   attribute MUST NOT be present - the Subscription Object lasts exactly
   as long as the associated Job object.  See also the discussion of the
   'job-completed' event in section 5.3.3.4.3 about retention of the Job
   object after completion so that a Notification Recipient can query
   the Job object after receiving the 'job-completed' Event
   Notification.

   When the Printer creates a Per-Printer Subscription Object, it
   populates this attribute with a value that is the sum of the values
   of the Printer's "printer-up-time" attribute and the Subscription
   Object's "notify-lease-duration" attribute with the following
   exception.  If the value of the Subscription Object's "notify-lease-
   duration" attribute is 0 (i.e., no expiration time), then the value
   of this attribute MUST be set to 0 (i.e., no expiration time).

   When the Printer powers up, it MUST populate this attribute in each
   persistent Subscription Object with a value using the algorithm in
   the previous paragraph.

   When the "printer-up-time" equals the value of this attribute, the
   Printer MUST delete the Subscription Object.  A client can extend a
   lease of a Per-Printer Subscription Object with the Renew-
   Subscription operation (see section 11.2.6).

Top      Up      ToC       Page 37 
   Note: In order to compute the number of seconds remaining in a lease
   for a Per-Printer Subscription Object, a client can subtract the
   Subscription's "notify-printer-up-time" attribute (see section 5.4.4)
   from the Subscription's "notify-lease-expiration-time" attribute.

5.4.4.  notify-printer-up-time (integer(1:MAX))

   This attribute is an alias for the Printer's "printer-up-time"
   attribute " (see [RFC2911] section 4.4.29).  In other words, when
   this attribute is queried with the Get-Subscriptions or Get-
   Subscription-Attributes operations (see sections 11.2.4 and 11.2.5),
   the value returned is the current value of the Printer's "printer-
   up-time" attribute, rather than the time at which the Subscription
   Object was created.

   A Printer MUST support this attribute.

   When the Printer creates a Per-Job Subscription Object, this
   attribute MUST NOT be present.  When the Printer creates a Per-
   Printer Subscription Object, this attribute MUST be present.

   Note: this attribute exists in a Per-Printer Subscription Object so
   that a client using the Get-Subscription-Attributes or Get-
   Subscription operations can convert the Per-Printer Subscription's
   "notify-lease-expiration-time" attribute to wall clock time with one
   request.  If the value of the "notify-lease-expiration-time"
   attribute is not 0 (i.e., no expiration time), then the difference
   between the "notify-lease-expiration-time" attribute and the
   "notify-printer-up-time" is the remaining number of seconds on the
   lease from the current time.

5.4.5.  notify-printer-uri (uri)

   This attribute identifies the Printer object that created this
   Subscription Object.

   A Printer MUST support this attribute.

   During a Subscription Creation Operation, the Printer MUST populate
   this attribute with the value of the "printer-uri" operation
   attribute in the request.  From the Printer URI, the client can, for
   example, determine what security scheme was used.

5.4.6.  notify-job-id (integer(1:MAX))

   This attribute specifies whether the containing Subscription Object
   is a Per-Job or Per-Printer Subscription Object, and for Per-Job
   Subscription Objects, it specifies the associated Job.

Top      Up      ToC       Page 38 
   A Printer MUST support this attribute.

   If this attribute is not present, the Subscription Object MUST be a
   Per-Printer Subscription.  If this attribute is present, the
   Subscription Object MUST be a Per-Job Subscription Object and this
   attribute MUST identify the Job with which the Subscription Object is
   associated.

   Note: This attribute could be useful to a Notification Recipient that
   receives an Event Notification generated from a Per-Job Subscription
   Object and caused by a Printer Event.  The Event Notification gives
   access to the Printer and the Subscription Object.  The Event
   Notification gives access to the associated Job only via this
   attribute.  See discussion of the 'job-completed' event in section
   5.3.3.4.3 about retention of the Job object after completion so that
   a Notification Recipient can query the Job object after receiving the
   'job-completed' Event Notification.

5.4.7.  notify-subscriber-user-name (name(MAX))

   This attribute contains the name of the user who performed the
   Subscription Creation Operation.

   A Printer MUST support this attribute.

   The Printer MUST populates this attribute with the most authenticated
   printable name that it can obtain from the authentication service
   over which the Subscription Creation Operation was received.  The
   Printer uses the same mechanism for determining the value of this
   attribute as it does for a Job's "job-originating-user-name" (see
   [RFC2911] section 4.3.6).

   Note:  To help with authentication, a Subscription Object may have
   additional private attributes about the user, e.g., a credential of a
   principal.  Such private attributes are implementation-dependent and
   not defined in this document.

6.  Printer Description Attributes Related to Notification

   This section defines the Printer Description attributes that are
   related to Notification.  Table 3 lists the Printer Description
   attributes, indicates the Printer support required for conformance,
   and whether or not the attribute is READ-ONLY (see section 3.1):

Top      Up      ToC       Page 39 
   Table 3 - Printer Description Attributes Associated with Notification

   Printer object attributes:                   REQUIRED     READ-ONLY

   printer-state-change-time (integer(1:MAX))   No           Yes
   printer-state-change-date-time (dateTime)    No           Yes

6.1.  printer-state-change-time (integer(1:MAX))

   This OPTIONAL attribute records the most recent time at which the
   'printer-state-changed' Printer Event occurred whether or not any
   Subscription objects were listening for this event.  This attribute
   helps a client or operator to determine how long the Printer has been
   in its current state.

   A Printer MAY support this attribute and if so, the attribute MUST be
   READ-ONLY.

   On power-up, the Printer MUST populate this attribute with the value
   of its "printer-up-time" attribute, so that it always has a value.
   Whenever the 'printer-state-changed' Printer Event occurs, the
   Printer MUST update this attribute with the value of the Printer's
   "printer-up-time" attribute.

6.2.  printer-state-change-date-time (dateTime)

   This OPTIONAL attribute records the most recent time at which the
   'printer-state-changed' Printer Event occurred whether or not there
   were any Subscription Objects listening for this event.  This
   attribute helps a client or operator to determine how long the
   Printer has been in its current state.

   A Printer MAY support this attribute and if so, the attribute MUST be
   READ-ONLY.

   On power-up, the Printer MUST populate this attribute with the value
   of its "printer-current-time" attribute, so that it always has a
   value (see [RFC2911] section 4.4.30 on "printer-current-time").
   Whenever the 'printer-state-changed' Printer Event occurs, the
   Printer MUST update this attribute with the value of the Printer's
   "printer-current-time" attribute.

7.  New Values for Existing Printer Description Attributes

   This section contains those attributes for which additional values
   are added.

Top      Up      ToC       Page 40 
7.1.  operations-supported (1setOf type2 enum)

   The following "operation-id" values are added in order to support the
   new operations defined in this document:

   Table 4 - Operation-id assignments

   Value       Operation Name

   0x0016      Create-Printer-Subscriptions
   0x0017      Create-Job-Subscriptions
   0x0018      Get-Subscription-Attributes
   0x0019      Get-Subscriptions
   0x001A      Renew-Subscription
   0x001B      Cancel-Subscription

8.  Attributes Only in Event Notifications

   This section contains those attributes that exist only in Event
   Notifications and do not exist in any objects.

8.1.  notify-subscribed-event (type2 keyword)

   This attribute indicates the Subscribed Event that caused the Printer
   to deliver this Event Notification.  This attribute exists only in
   Event Notifications.

   This attribute MUST contain one of the values of the "notify-events"
   attribute in the Subscription Object, i.e., one of the Subscribed
   Event values.  Its value is the Subscribed Event that "matches" the
   Event that caused the Printer to deliver this Event Notification.
   This Subscribed Event value may be identical to the Event or the
   Event may be a sub-value of the Subscribed Event.  For example, the
   'job-completed' Event (which is a sub-event of the 'job-state-
   changed' event) would cause the Printer to deliver an Event
   Notification for either the 'job-completed' or 'job-state-changed'
   Subscribed Events and to deliver the 'job-completed' or 'job-state-
   changed' value for this attribute, respectively.  See section 5.3.3.5
   for the "matching" rules of Subscribed Events and for additional
   examples.

   The Delivery Method Document specifies whether the Printer includes
   the value of this attribute in an Event Notification.

Top      Up      ToC       Page 41 
8.2.  notify-text (text(MAX))

   This attribute contains a Human Consumable text message (see section
   9.2).  This message describes the Event and is encoded as plain text,
   i.e., 'text/plain' with the charset specified by Subscription
   Object's "notify-charset" attribute.

   Note: this attribute contains a text message only and must not
   contain any encoding information, such as 'text/plain'.  The
   'text/plain' encoding is implicit and thus the charset must be
   specified by an alternate mechanism, namely the "notify-charset"
   attribute.

   The Delivery Method Document specifies whether the Printer includes
   this attribute in an Event Notification.

9.  Event Notification Content

   This section defines the Event Notification content that the Printer
   delivers when an Event occurs.

   When an Event occurs, the Printer MUST find each Subscription object
   whose "notify-events" attribute "matches" the Event.  See section
   5.3.3.5 for details on "matching".  For each matched Subscription
   Object, the Printer MUST create an Event Notification with the
   content and format that the Delivery Method Document specifies.  The
   content contains the value of attributes specified by the Delivery
   Method Document.  The Printer obtains the values immediately after
   the Event occurs.  For example, if the "printer-state" attribute
   changes from 'idle' to 'processing', the Event 'printer-state-
   changed' occurs and the Printer puts various attributes into the
   Event Notification, including "printer-up-time" and "printer-state"
   with the values that they have immediately after the Event occurs,
   i.e., the value of  "printer-state" is 'processing'.

   Event Notification Ordering:

   When a Printer delivers Event Notifications, the Event Notifications
   from any given Subscription Object MUST be in time stamp order, i.e.,
   in order of increasing "printer-up-time" attribute value in the Event
   Notification (see Table 5).  These Event Notifications MAY be
   interleaved with those from other Subscription Objects, as long as
   those others are also in time stamp order.  The Printer MUST observe
   these ordering requirements whether delivering multiple pending
   Events as multiple separate Event Notifications or together in a
   single Compound Event Notification.

Top      Up      ToC       Page 42 
   If a Subscribing Client wants the Printer to deliver certain Event
   Notifications in time stamp order, the Subscribing Client uses a
   single Subscription Object.  Even so, depending on the underlying
   transport, the actual order that a Notification Recipient receives
   separate Event Notifications may differ from the order sent by the
   Printer (e.g., email).

   Example:  Consider two Per-Printer Subscription Objects: SO1 and SO2.
   SO1 requests 'job-state-changed' events and SO2 requests 'printer-
   state-changed' events.  The number in parens is the time stamp.  The
   following Event Notification sequences are the only ones that conform
   to the ordering requirements for the Printer to deliver the Event
   Notifications:

      (a) SO1: 'job-created' (1000), SO1: 'job-stopped' (1005), SO1:
      'job-completed' (1009), SO2: 'printer-stopped' (1005)

      (b) SO1: 'job-created' (1000), SO1: 'job-stopped' (1005), SO2:
      'printer-stopped' (1005), SO1: 'job-completed' (1009)

      (c) SO1: 'job-created' (1000), SO2: 'printer-stopped' (1005), SO1:
      'job-stopped' (1005), SO1: 'job-completed' (1009)

      (d) SO2: 'printer-stopped (1005), SO1: 'job-created' (1000), SO1:
      'job-stopped' (1005), SO1: 'job-completed' (1009)

   Examples (b) and (c) are interleaved; examples (a) and (d) are not
   interleaved and are not appropriate for some Delivery Methods.

   If two different Events occur simultaneously, or nearly so (e.g.,
   "printer-up-time" has the same value for both), the Printer MUST
   create a separate Event Notification for each Event, even if the
   associated Subscription Object is the same for both Events.  However,
   the Printer MAY combine these distinct Event Notifications into a
   single Compound Event Notification if the Delivery Method supports
   Compound Event Notifications.  For example, suppose that two nearly-
   simultaneously Events represent two successive 'printer-state-
   changed' Events, one from 'idle' to 'processing' and another from
   'processing' to 'stopped'.  These two Events have the same name but
   are different instances of the Event.  Then the Printer MUST create a
   separate Event Notification for each Event and SHOULD accurately
   report the "printer-state" of the first Event as 'processing' and the
   second Event as 'stopped'.

   If a Subscription Object contains more than one Subscribed Event, and
   several Events occur in quick succession each matching a different
   Subscribed Event in the Subscription Object, the Printer MUST NOT
   generate a single Event Notification from several of these Events,

Top      Up      ToC       Page 43 
   but MAY combine distinct Event Notifications into a single Compound
   Event Notification if the Delivery Method supports Compound Event
   Notifications.

   After the Printer has created the Event Notification, the Printer
   delivers it via either a:

      Push Delivery Method: The Printer delivers the Event Notification
      shortly after an Event occurs.  For some Push Delivery Methods,
      the Notification Recipient MUST deliver a response; for others it
      MUST NOT deliver a response.

      Pull Delivery Method: The Printer saves Event Notifications for
      some Event Life and expects the Notification Recipient to request
      Event Notifications.  The Printer returns the Event Notifications
      in a response to such a request.

   If an error that meets the following conditions occurs, the Printer
   MUST cancel the Subscription Object.

   a) the error occurs during the delivering of an Event Notification
      generated from Subscription Object S AND

   b) the error would continue to occur every time the Printer delivers
      an Event Notification generated from Subscription Object S in the
      future.

   For example, if the address of the "notify-recipient-uri" of
   Subscription Object A references a non-existent target and the
   Printer determines this fact, it MUST delete Subscription Object A.

   The next two sections describe the values that a Printer delivers in
   the content of Machine Consumable and Human Consumable Event
   Notifications, respectively.

   The tables in the sub-sections of this section contain the following
   columns:

   a) Source Value: the name of the attribute that supplies the value
      for the Event Notification.  Asterisks in this field refer to a
      note below the table.

   b) Delivers: if the Printer supports the value (column 1) on the
      Source Object (column 3) the Delivery Method MUST specify:

         MUST: that the Printer MUST deliver the value.

Top      Up      ToC       Page 44 
         SHOULD: either that the Printer MUST deliver the value or that
         the value is incompatible with the Delivery Method.

         MAY: that the Printer MUST, SHOULD, MAY, MUST NOT, SHOULD NOT,
         or NEED NOT deliver the value.  The Delivery Method specifies
         the level of conformance for the Printer.

   c) Source Object: the object from which the source value comes.  If
      the object is "Event Notification", the Printer fabricates the
      value when it delivers the Event Notification.  See section 8.

9.1.  Content of Machine Consumable Event Notifications

   This section defines the attributes that a Delivery Method MUST
   mention in a Delivery Method Document when specifying the Machine
   Consumable Event Notification's contents.

   This document does not define the order of attributes in Event
   Notifications.  However, Delivery Method Documents MAY define the
   order of some or all of the attributes.

   A Delivery Method Document MUST specify additional attributes (if
   any) that a Printer implementation delivers in a Machine Consumable
   Event Notification.

   Notification Recipients MUST be able to accept Event Notifications
   containing attributes they do not recognize.  What a Notification
   Recipient does with an unrecognized attribute is implementation-
   dependent.  Notification Recipients MAY attempt to display
   unrecognized attributes anyway or MAY ignore them.

   The next three sections define the attributes in Event Notification
   Contents that are:

      1. for all Events

      2. for Job Events only

      3. for Printer Events only

9.1.1.  Event Notification Content Common to All Events

   This section lists the attributes that a Delivery Method Document
   MUST specify for all Events.

   Table 5 lists potential values in each Event Notification.

Top      Up      ToC       Page 45 
   Table 5 - Attributes in Event Notification Content

   Source Value                               Delivers   Source Object

   notify-subscription-id (integer(1:MAX))    MUST       Subscription
   notify-printer-uri (uri)                   MUST       Subscription
   notify-subscribed-event (type2 keyword)    MUST       Event
                                                         Notification
   printer-up-time (integer(MIN:MAX))         MUST       Printer
   printer-current-time (dateTime) *          MUST       Printer
   notify-sequence-number (integer (0:MAX))   SHOULD     Subscription
   notify-charset (charset)                   SHOULD     Subscription
   notify-natural-language (naturalLanguage)  SHOULD     Subscription
   notify-user-data (octetString(63)) **      SHOULD     Subscription
   notify-text (text)                         SHOULD     Event
                                                         Notification
   attributes from the "notify-attributes"    MAY        Printer
   attribute ***
   attributes from the "notify-attributes"    MAY        Job
   attribute ***
   attributes from the "notify-attributes"    MAY        Subscription
   attribute ***

   *A Printer MUST deliver this value only if and only if it supports
   the Printer's "printer-current-time" attribute.

   ** If the Subscription Object does not contain a "notify-user-data"
   attribute and the Delivery Method Document REQUIRES the Printer to
   deliver the "notify-user-data" source value in the Event
   Notification, the Printer MUST deliver an octet-string of length 0.

   *** The last three rows represent additional attributes that a client
   MAY request via the  "notify-attributes" attribute.  A Printer MAY
   support the "notify-attributes" attribute.  The Delivery Method MUST
   say that the Printer MUST, SHOULD, MAY, MUST NOT, SHOULD NOT, or NEED
   NOT support the "notify-attributes" attribute and specific values of
   this attribute.  The Delivery Method MAY say that support for the
   "notify-attributes" is conditioned on support of the attribute by the
   Printer or it MAY say that Printer MUST support the "notify-
   attributes" attribute if the Printer supports the Delivery Method.

9.1.2.  Additional Event Notification Content for Job Events

   This section lists the additional attributes that a Delivery Method
   Document MUST specify for Job Events.  See Table 6.

Top      Up      ToC       Page 46 
   Table 6 - Additional Event Notification Content for Job Events

   Source Value                                  Delivers  Source
                                                            Object

   job-id (integer(1:MAX))                       MUST      Job
   job-state (type1 enum)                        MUST      Job
   job-state-reasons (1setOf type2 keyword)      MUST      Job
   job-impressions-completed (integer(0:MAX)) *  MUST      Job

   *  The Printer MUST deliver the "job-impressions-completed" attribute
   in an Event Notification only for the combinations of Events and
   Subscribed Events shown in Table 7.

   Table 7 - Combinations of Events and Subscribed Events for "job-
   impressions-completed"

   Job Event              Subscribed Job Event

   'job-progress'         'job-progress'
   'job-completed'        'job-completed'
   'job-completed'        'job-state-changed'

9.1.3.  Additional Event Notification Content for Printer Events

   This section lists the additional attributes that a Delivery Method
   Document MUST specify for Printer Events.  See Table 8.

   Table 8 - Additional Event Notification Content for Printer Events

   Source Value                             Delivers   Source Object

   printer-state (type1 enum)               MUST       Printer
   printer-state-reasons (1setOf type2      MUST       Printer
   keyword)
   printer-is-accepting-jobs (boolean)      MUST       Printer

9.2.  Content of Human Consumable Event Notification

   This section defines the information that a Delivery Method MUST
   mention in a Delivery Method Document when specifying the Human
   Consumable Event Notifications contents or the value of the "notify-
   text" attribute.

   Such a Delivery Method MUST specify the following information and a
   Printer SHOULD deliver it:

   a) the Printer name (see Table 9)

Top      Up      ToC       Page 47 
   b) the time of the Event (see Table 11)

   c) for Printer Events only:

      i) the Event (see Table 10) and/or Printer state information (see
         Table 14)

   d) for Job Events only:

      i) the job identity (see Table 12)

      ii) the Event (see Table 10) and/or Job state information (see
          Table 13)

   The subsections of this section specify the attributes that a Printer
   MUST use to obtain this information.

   A Delivery Method Document MUST specify additional information (if
   any) that a Printer implementation delivers in a Human Consumable
   Event Notification or in the "notify-text" attribute.

   A client MUST NOT request additional attributes via the "notify-
   attributes" attribute because this attribute works only for Machine
   Consumable Event Notifications.

   Notification Recipients MUST NOT expect to be able to parse the Human
   Consumable Event Notification contents or the value of the "notify-
   text" attribute.

   The next three sections define the attributes in Event Notification
   Contents that are:

      a) for all Events
      b) for Job Events only
      c) for Printer Events only

9.2.1.  Event Notification Content Common to All Events

   This section lists the source of the information that a Delivery
   Method MUST specify for all Events.

   There is a separate table for each piece of information.  Each row in
   the table represents a source value for the information and the
   values are listed in order of preference, with the first one being
   the preferred one.  An implementation SHOULD use the source value
   from the earliest row in each table.  It MAY use the source value

Top      Up      ToC       Page 48 
   from another row instead, or it MAY combine the source values from
   several rows.  An implementation is free to determine the best way to
   present this information.

   In all tables of this section, all rows contain a "MAY" in order to
   state that the Delivery Method specifies the conformance.

   Table 9 lists the source of the information for the Printer Name.
   The "printer-name" is more user-friendly unless the Notification
   Recipient is in a place where the Printer name is not meaningful.
   For example, an implementation could have the intelligence to deliver
   the value of the "printer-name" attribute to a Notification Recipient
   that can access the Printer via value of the "printer-name" attribute
   and otherwise deliver the value of the "notify-printer-uri"
   attribute.

   Table 9 - Printer Name in Event Notification Content

   Source Value                            Delivers   Source Object

   printer-name (name(127))                MAY        Printer
   notify-printer-uri (uri)                MAY        Subscription


   Table 10 lists the source of the information for the Event name.  A
   Printer MAY combine this information with state information described
   for Jobs in Table 13 or for Printers in Table 14.

   Table 10 - Event Name in Event Notification Content

   Source Value                             Delivers    Source Object

   notify-subscribed-event (type2 keyword)  MAY         Subscription

   Table 11 lists the source of the information for the time that the
   Event occurred.  A Printer can deliver this value only if it supports
   the Printer's "printer-current-time" attribute.  If a Printer does
   not support the "printer-current-time" attribute, it MUST NOT deliver
   the "printer-up-time" value instead, since it is not an allowed
   option for human consumable information.

   Table 11 - Event Time in Event Notification Content

   Source Value                            Delivers   Source Object

   printer-current-time (dateTime)         MAY        Printer

Top      Up      ToC       Page 49 
9.2.2.  Additional Event Notification Content for Job Events

   This section lists the source of the additional information that a
   Delivery Method MUST specify for Job Events.

   Table 12 lists the source of the information for the job name.  The
   "job-name" is likely more meaningful to a user than "job-id".

   Table 12 - Job Name in Event Notification Content

   Source Value                           Delivers    Source Object

   job-name (name(MAX))                   MAY         Job
   job-id (integer(1:MAX))                MAY         Job

   Table 13 lists the source of the information for the job state.  If a
   Printer supports the "job-state-message" and "job-detailed-state-
   message" attributes, it SHOULD use those attributes for the job state
   information, otherwise, it should fabricate such information from the
   "job-state" and "job-state-reasons".  For some Events, a Printer MAY
   combine this information with Event information.

   Table 13 - Job State in Event Notification Content

   Source Value                                     Delivers  Source
                                                               Object

   job-state-message (text(MAX))                    MAY       Job
   job-detailed-status-messages (1setOf text(MAX))  MAY       Job
   job-state (type1 enum)                           MAY       Job
   job-state-reasons (1setOf type2 keyword)         MAY       Job

9.2.3.  Additional Event Notification Content for Printer Events

   This section lists the source of the additional information that a
   Delivery Method MUST specify for Printer Events.

   Table 14 lists the source of the information for the printer state.
   If a Printer supports the "printer-state-message", it SHOULD use that
   attribute for the job state information, otherwise it SHOULD
   fabricate such information from the "printer-state" and "printer-
   state-reasons".  For some Events, a Printer MAY combine this
   information with Event information.

Top      Up      ToC       Page 50 
   Table 14 - Printer State in Event Notification Content

   Source Value                                    Delivers   Source
                                                               Object

   printer-state-message (text(MAX))               MAY        Printer
   printer-state (type1 enum)                      MAY        Printer
   printer-state-reasons (1setOf type2 keyword)    MAY        Printer
   printer-is-accepting-jobs (boolean)             MAY        Printer



(page 50 continued on part 3)

Next RFC Part