Skip to main content

iCalendar Transport-Independent Interoperability Protocol (iTIP)
draft-ietf-calsify-2446bis-10

The information below is for an old version of the document that is already published as an RFC.
Document Type
This is an older version of an Internet-Draft that was ultimately published as RFC 5546.
Author Cyrus Daboo
Last updated 2020-01-21 (Latest revision 2009-10-04)
RFC stream Internet Engineering Task Force (IETF)
Intended RFC status Proposed Standard
Formats
Reviews
Additional resources Mailing list discussion
Stream WG state (None)
Document shepherd (None)
IESG IESG state Became RFC 5546 (Proposed Standard)
Action Holders
(None)
Consensus boilerplate Unknown
Telechat date (None)
Responsible AD Lisa M. Dusseault
Send notices to (None)
draft-ietf-calsify-2446bis-10
quot;          |
   |                    |          |                                   |
   | VTODO              | 1        |                                   |
   |   ATTENDEE         | 1+       | MUST for all attendees            |
   |   DTSTAMP          | 1        |                                   |
   |   ORGANIZER        | 1        |                                   |
   |   SEQUENCE         | 1        | MUST echo the original SEQUENCE   |
   |                    |          | number                            |
   |   UID              | 1        | MUST echo original UID            |
   |   ATTACH           | 0+       |                                   |
   |   CATEGORIES       | 0+       |                                   |
   |   CLASS            | 0 or 1   |                                   |
   |   COMMENT          | 0+       |                                   |
   |   COMPLETED        | 0 or 1   |                                   |
   |   CONTACT          | 0+       |                                   |
   |   CREATED          | 0 or 1   |                                   |
   |   DESCRIPTION      | 0 or 1   |                                   |
   |   DTSTART          | 0 or 1   |                                   |
   |   DUE              | 0 or 1   | If present DURATION MUST NOT be   |
   |                    |          | present                           |
   |   DURATION         | 0 or 1   | If present DUE MUST NOT be        |
   |                    |          | present                           |
   |   EXDATE           | 0+       |                                   |
   |   GEO              | 0 or 1   |                                   |
   |   LAST-MODIFIED    | 0 or 1   |                                   |
   |   LOCATION         | 0 or 1   |                                   |
   |   PERCENT-COMPLETE | 0 or 1   |                                   |
   |   PRIORITY         | 0 or 1   |                                   |
   |   RDATE            | 0+       |                                   |
   |   RECURRENCE-ID    | 0 or 1   | Only if referring to an instance  |
   |                    |          | of a recurring calendar           |
   |                    |          | component.  Otherwise it MUST NOT |
   |                    |          | be present.                       |
   |   RELATED-TO       | 0+       |                                   |
   |   REQUEST-STATUS   | 0+       |                                   |
   |   RESOURCES        | 0+       |                                   |
   |   RRULE            | 0 or 1   |                                   |

Daboo                     Expires April 7, 2010                [Page 59]
Internet-Draft                    iTIP                      October 2009

   |   STATUS           | 0 or 1   | MAY be one of                     |
   |                    |          | COMPLETED/NEEDS-ACTION/           |
   |                    |          | IN-PROCESS                        |
   |   URL              | 0 or 1   |                                   |
   |   IANA-PROPERTY    | 0+       |                                   |
   |   X-PROPERTY       | 0+       |                                   |
   |                    |          |                                   |
   |   VALARM           | 0        |                                   |
   |                    |          |                                   |
   | VTIMEZONE          | 0+       | MUST be present if any date/time  |
   |                    |          | refers to a timezone              |
   |                    |          |                                   |
   | IANA-COMPONENT     | 0+       |                                   |
   | X-COMPONENT        | 0+       |                                   |
   |                    |          |                                   |
   | VEVENT             | 0        |                                   |
   |                    |          |                                   |
   | VFREEBUSY          | 0        |                                   |
   +--------------------+----------+-----------------------------------+

3.5.  Methods For VJOURNAL Components

   This section defines the property set for the methods that are
   applicable to the "VJOURNAL" calendar component.

   The following summarizes the methods that are defined for the
   "VJOURNAL" calendar component.

   +---------+---------------------------------------------------------+
   | Method  | Description                                             |
   +---------+---------------------------------------------------------+
   | PUBLISH | Post a journal entry.  Used primarily as a method of    |
   |         | advertising the existence of a journal entry.           |
   |         |                                                         |
   | ADD     | Add one or more instances to an existing journal entry. |
   |         |                                                         |
   | CANCEL  | Cancel one or more instances of an existing journal     |
   |         | entry.                                                  |
   +---------+---------------------------------------------------------+

3.5.1.  PUBLISH

   The "PUBLISH" method in a "VJOURNAL" calendar component has no
   associated response.  It is simply a posting of an iCalendar object
   that may be added to a calendar.  It MUST have an "Organizer".  It
   MUST NOT have "Attendees".  The expected usage is for encapsulating
   an arbitrary journal entry as an iCalendar object.  The "Organizer"
   MAY subsequently update (with another "PUBLISH" method) or cancel

Daboo                     Expires April 7, 2010                [Page 60]
Internet-Draft                    iTIP                      October 2009

   (with a "CANCEL" method) a previously published journal entry.

   This method type is an iCalendar object that conforms to the
   following property constraints:

            +------------------------------------------------+
            | Constraints for a METHOD:PUBLISH of a VJOURNAL |
            +------------------------------------------------+

Daboo                     Expires April 7, 2010                [Page 61]
Internet-Draft                    iTIP                      October 2009

   +--------------------+----------+-----------------------------------+
   | Component/Property | Presence | Comment                           |
   +--------------------+----------+-----------------------------------+
   | METHOD             | 1        | MUST be "PUBLISH"                 |
   |                    |          |                                   |
   | VJOURNAL           | 1+       |                                   |
   |   DESCRIPTION      | 1        | Can be null.                      |
   |   DTSTAMP          | 1        |                                   |
   |   DTSTART          | 1        |                                   |
   |   ORGANIZER        | 1        |                                   |
   |   UID              | 1        |                                   |
   |   ATTACH           | 0+       |                                   |
   |   CATEGORIES       | 0+       |                                   |
   |   CLASS            | 0 or 1   |                                   |
   |   COMMENT          | 0+       |                                   |
   |   CONTACT          | 0+       |                                   |
   |   CREATED          | 0 or 1   |                                   |
   |   EXDATE           | 0+       |                                   |
   |   LAST-MODIFIED    | 0 or 1   |                                   |
   |   RDATE            | 0+       |                                   |
   |   RECURRENCE-ID    | 0 or 1   | Only if referring to an instance  |
   |                    |          | of a recurring calendar           |
   |                    |          | component.  Otherwise it MUST NOT |
   |                    |          | be present.                       |
   |   RELATED-TO       | 0+       |                                   |
   |   RRULE            | 0 or 1   |                                   |
   |   SEQUENCE         | 0 or 1   | MUST be present if non-zero.  MAY |
   |                    |          | be present if zero.               |
   |   STATUS           | 0 or 1   | MAY be one of                     |
   |                    |          | DRAFT/FINAL/CANCELLED             |
   |   SUMMARY          | 0 or 1   | Can be null                       |
   |   URL              | 0 or 1   |                                   |
   |   IANA-PROPERTY    | 0+       |                                   |
   |   X-PROPERTY       | 0+       |                                   |
   |   ATTENDEE         | 0        |                                   |
   |   REQUEST-STATUS   | 0        |                                   |
   |                    |          |                                   |
   |   VALARM           | 0+       |                                   |
   |                    |          |                                   |
   | VTIMEZONE          | 0+       | MUST be present if any date/time  |
   |                    |          | refers to a timezone              |
   |                    |          |                                   |
   | IANA-COMPONENT     | 0+       |                                   |
   | X-COMPONENT        | 0+       |                                   |
   |                    |          |                                   |
   | VEVENT             | 0        |                                   |
   |                    |          |                                   |
   | VFREEBUSY          | 0        |                                   |

Daboo                     Expires April 7, 2010                [Page 62]
Internet-Draft                    iTIP                      October 2009

   |                    |          |                                   |
   | VTODO              | 0        |                                   |
   +--------------------+----------+-----------------------------------+

3.5.2.  ADD

   The "ADD" method allows the "Organizer" to add one or more new
   instances to an existing "VJOURNAL" using a single iTIP message
   without having to send the entire "VJOURNAL" with all the existing
   instance data, as it would have to do if the "REQUEST" method were
   used.

   The "UID" must be that of the existing journal entry.  If the "UID"
   property value in the "ADD" is not found on the recipient's calendar,
   then the recipient MAY treat the "ADD" as a "PUBLISH".

   When handling an "ADD" message, the "Attendee" treats each component
   in the "ADD" message as if it were referenced via an "RDATE"in the
   main component.  There is no response to the "Organizer".

   This method type is an iCalendar object that conforms to the
   following property constraints:

              +--------------------------------------------+
              | Constraints for a METHOD:ADD of a VJOURNAL |
              +--------------------------------------------+

Daboo                     Expires April 7, 2010                [Page 63]
Internet-Draft                    iTIP                      October 2009

   +--------------------+----------+-----------------------------------+
   | Component/Property | Presence | Comment                           |
   +--------------------+----------+-----------------------------------+
   | METHOD             | 1        | MUST be "ADD"                     |
   |                    |          |                                   |
   | VJOURNAL           | 1        |                                   |
   |   DESCRIPTION      | 1        | Can be null                       |
   |   DTSTAMP          | 1        |                                   |
   |   DTSTART          | 1        |                                   |
   |   ORGANIZER        | 1        |                                   |
   |   SEQUENCE         | 1        | MUST be greater than 0            |
   |   UID              | 1        | MUST match that of the original   |
   |                    |          | journal                           |
   |   ATTACH           | 0+       |                                   |
   |   CATEGORIES       | 0+       |                                   |
   |   CLASS            | 0 or 1   |                                   |
   |   COMMENT          | 0+       |                                   |
   |   CONTACT          | 0+       |                                   |
   |   CREATED          | 0 or 1   |                                   |
   |   LAST-MODIFIED    | 0 or 1   |                                   |
   |   RELATED-TO       | 0+       |                                   |
   |   STATUS           | 0 or 1   | MAY be one of                     |
   |                    |          | DRAFT/FINAL/CANCELLED             |
   |   SUMMARY          | 0 or 1   | Can be null                       |
   |   URL              | 0 or 1   |                                   |
   |   IANA-PROPERTY    | 0+       |                                   |
   |   X-PROPERTY       | 0+       |                                   |
   |   ATTENDEE         | 0        |                                   |
   |   EXDATE           | 0        |                                   |
   |   RECURRENCE-ID    | 0        |                                   |
   |   REQUEST-STATUS   | 0        |                                   |
   |   RDATE            | 0        |                                   |
   |   RRULE            | 0        |                                   |
   |                    |          |                                   |
   |   VALARM           | 0+       |                                   |
   |                    |          |                                   |
   | VTIMEZONE          | 0 or 1   | MUST be present if any date/time  |
   |                    |          | refers to a timezone              |
   |                    |          |                                   |
   | IANA-COMPONENT     | 0+       |                                   |
   | X-COMPONENT        | 0+       |                                   |
   |                    |          |                                   |
   | VEVENT             | 0        |                                   |
   |                    |          |                                   |
   | VFREEBUSY          | 0        |                                   |
   |                    |          |                                   |
   | VTODO              | 0        |                                   |
   +--------------------+----------+-----------------------------------+

Daboo                     Expires April 7, 2010                [Page 64]
Internet-Draft                    iTIP                      October 2009

3.5.3.  CANCEL

   The "CANCEL" method in a "VJOURNAL" calendar component is used to
   send a cancellation notice of an existing journal entry.  The message
   is sent by the "Organizer" of a journal entry.  For a recurring
   journal entry, either the whole journal entry or instances of a
   journal entry may be cancelled.  To cancel the complete range of a
   recurring journal entry, the "UID" property value for the journal
   entry MUST be specified and a "RECURRENCE-ID" property MUST NOT be
   specified in the "CANCEL" method.  In order to cancel an individual
   instance of the journal entry, the "RECURRENCE-ID" property value for
   the journal entry MUST be specified in the "CANCEL" method.

   There are two options for canceling a sequence of instances of a
   recurring "VJOURNAL" calendar component:

   a.  the "RECURRENCE-ID" property for an instance in the sequence MUST
       be specified with the "RANGE" property parameter value of
       "THISANDFUTURE" to indicate cancellation of the specified "VTODO"
       calendar component and all instances after
   b.  individual recurrence instances may be cancelled by specifying
       multiple "VJOURNAL" components with a "RECURRENCE-ID" property
       corresponding to one of the instances to be cancelled

   When a "VJOURNAL" is cancelled, the "SEQUENCE" property value MUST be
   incremented as described in Section 2.1.4.

   This method type is an iCalendar object that conforms to the
   following property constraints:

             +-----------------------------------------------+
             | Constraints for a METHOD:CANCEL of a VJOURNAL |
             +-----------------------------------------------+

Daboo                     Expires April 7, 2010                [Page 65]
Internet-Draft                    iTIP                      October 2009

   +--------------------+----------+-----------------------------------+
   | Component/Property | Presence | Comment                           |
   +--------------------+----------+-----------------------------------+
   | METHOD             | 1        | MUST be "CANCEL"                  |
   |                    |          |                                   |
   | VJOURNAL           | 1+       | All MUST have the same UID        |
   |   DTSTAMP          | 1        |                                   |
   |   ORGANIZER        | 1        |                                   |
   |   SEQUENCE         | 1        |                                   |
   |   UID              | 1        | MUST be the UID of the original   |
   |                    |          | REQUEST                           |
   |   ATTACH           | 0+       |                                   |
   |   ATTENDEE         | 0        |                                   |
   |   CATEGORIES       | 0+       |                                   |
   |   CLASS            | 0 or 1   |                                   |
   |   COMMENT          | 0+       |                                   |
   |   CONTACT          | 0+       |                                   |
   |   CREATED          | 0 or 1   |                                   |
   |   DESCRIPTION      | 0 or 1   |                                   |
   |   DTSTART          | 0 or 1   |                                   |
   |   EXDATE           | 0+       |                                   |
   |   LAST-MODIFIED    | 0 or 1   |                                   |
   |   RDATE            | 0+       |                                   |
   |   RECURRENCE-ID    | 0 or 1   | Only if referring to an instance  |
   |                    |          | of a recurring calendar           |
   |                    |          | component.  Otherwise it MUST NOT |
   |                    |          | be present.                       |
   |   RELATED-TO       | 0+       |                                   |
   |   RRULE            | 0 or 1   |                                   |
   |   STATUS           | 0 or 1   | MAY be present, must be           |
   |                    |          | "CANCELLED" if present            |
   |   SUMMARY          | 0 or 1   |                                   |
   |   URL              | 0 or 1   |                                   |
   |   IANA-PROPERTY    | 0+       |                                   |
   |   X-PROPERTY       | 0+       |                                   |
   |   REQUEST-STATUS   | 0        |                                   |
   |                    |          |                                   |
   |   VALARM           | 0        |                                   |
   |                    |          |                                   |
   | VTIMEZONE          | 0+       | MUST be present if any date/time  |
   |                    |          | refers to a timezone              |
   |                    |          |                                   |
   | IANA-COMPONENT     | 0+       |                                   |
   | X-COMPONENT        | 0+       |                                   |
   |                    |          |                                   |
   | VEVENT             | 0        |                                   |
   |                    |          |                                   |
   | VFREEBUSY          | 0        |                                   |

Daboo                     Expires April 7, 2010                [Page 66]
Internet-Draft                    iTIP                      October 2009

   |                    |          |                                   |
   | VTODO              | 0        |                                   |
   +--------------------+----------+-----------------------------------+

3.6.  Status Replies

   The "REQUEST-STATUS" property is used to convey status information
   about a REPLY, COUNTER or DECLINECOUNTER iTIP message.  The codes
   listed in the table below SHOULD be used.  If the "REQUEST-STATUS"
   property is not present in one of these iTIP messages, then a status
   code of "2.0" (success) MUST be assumed.

   This specification adds a new IANA registry for REQUEST-STATUS
   values, as defined in Section 7, which includes a new registration
   template for defining the specific components of the REQUEST-STATUS
   value.  Additional codes MAY be used provided the process described
   in Section 8.2.1 of [RFC5545] is used to register them.

   This specification allows for multiple "REQUEST-STATUS" properties to
   be returned in iCalendar components in the appropriate iTIP messages.
   When multiple "REQUEST-STATUS" properties are present, the following
   restrictions apply:

   1.  Within any one component, the "top-level" numeric value of the
       "short return status code" MUST be the same for all REQUEST-
       STATUS properties. i.e. there cannot be a mixture of e.g., 2.xx
       and 5.xx codes within a single component.
   2.  Across all components in the iTIP message, the following applies:
       A.  If any one component would have a 5.xx code, then all
           components MUST have a code in that range or "REQUEST-STATUS"
           MUST NOT be present in the other components if a 5.xx code is
           not appropriate for those components.
       B.  Otherwise, if any one component would have a 3.xx code, then
           all components MUST have a code in that range or "REQUEST-
           STATUS" MUST NOT be present in the other components if a 3.xx
           code is not appropriate for those components.
       C.  2.xx and 4.xx codes can be used in different components
           provided that each component follows the restriction in (1)
           above.

   The following "REQUEST-STATUS" codes are defined (any "Offending
   Data" MAY be specified in the "REQUEST-STATUS" value as the extdata
   field):

3.6.1.  Status Code 2.0

Daboo                     Expires April 7, 2010                [Page 67]
Internet-Draft                    iTIP                      October 2009

   Status Code:  2.0
   Status Description:  Success.
   Status Exception Data:  None.
   Description:  iTIP operation succeeded.

3.6.2.  Status Code 2.1

   Status Code:  2.1
   Status Description:  Success but fallback taken on one or more
      property values.
   Status Exception Data:  Property name and value MAY be specified.
   Description:  iTIP operation succeeded with fallback on one or more
      property values.

3.6.3.  Status Code 2.2

   Status Code:  2.2
   Status Description:  Success, invalid property ignored.
   Status Exception Data:  Property name MAY be specified.
   Description:  iTIP operation succeeded but a property was ignored.

3.6.4.  Status Code 2.3

   Status Code:  2.3
   Status Description:  Success, invalid property parameter ignored.
   Status Exception Data:  Property parameter name and value MAY be
      specified.
   Description:  iTIP operation succeeded but a property parameter was
      ignored because it was invalid.

3.6.5.  Status Code 2.4

   Status Code:  2.4
   Status Description:  Success, unknown non-standard property ignored.
   Status Exception Data:  Non-standard property name MAY be specified.
   Description:  iTIP operation succeeded but a property parameter was
      ignored because it was unknown.

3.6.6.  Status Code 2.5

   Status Code:  2.5
   Status Description:  Success, unknown non-standard property value
      ignored.
   Status Exception Data:  Property and non-standard value MAY be
      specified.

Daboo                     Expires April 7, 2010                [Page 68]
Internet-Draft                    iTIP                      October 2009

   Description:  iTIP operation succeeded but a property was ignored
      because its value was unknown.

3.6.7.  Status Code 2.6

   Status Code:  2.6
   Status Description:  Success, invalid calendar component ignored.
   Status Exception Data:  Calendar component sentinel (e.g., BEGIN:
      ALARM) MAY be specified.
   Description:  iTIP operation succeeded but a component was ignored
      because it was invalid.

3.6.8.  Status Code 2.7

   Status Code:  2.7
   Status Description:  Success, request forwarded to Calendar User.
   Status Exception Data:  Original and forwarded calendar user
      addresses MAY be specified.
   Description:  iTIP operation succeeded, and the request was forwarded
      to another calendar user.

3.6.9.  Status Code 2.8

   Status Code:  2.8
   Status Description:  Success, repeating event ignored.  Scheduled as
      a single component.
   Status Exception Data:  RRULE or RDATE property name and value MAY be
      specified.
   Description:  iTIP operation succeeded, but a repeating event was
      truncated to a single instance.

3.6.10.  Status Code 2.9

   Status Code:  2.9
   Status Description:  Success, truncated end date time to date
      boundary.
   Status Exception Data:  DTEND property value MAY be specified.
   Description:  iTIP operation succeeded, but the end time was
      truncated to a date boundary.

3.6.11.  Status Code 2.10

   Status Code:  2.10
   Status Description:  Success, repeating VTODO ignored.  Scheduled as
      a single VTODO.

Daboo                     Expires April 7, 2010                [Page 69]
Internet-Draft                    iTIP                      October 2009

   Status Exception Data:  RRULE or RDATE property name and value MAY be
      specified.
   Description:  iTIP operation succeeded, but a repeating todo was
      truncated to a single instance.

3.6.12.  Status Code 2.11

   Status Code:  2.11
   Status Description:  Success, unbounded RRULE clipped at some finite
      number of instances.
   Status Exception Data:  RRULE property name and value MAY be
      specified.  Number of instances MAY also be specified.
   Description:  iTIP operation succeeded, but an unbounded repeating
      object was clipped to a finite number of instances.

3.6.13.  Status Code 3.0

   Status Code:  3.0
   Status Description:  Invalid property name.
   Status Exception Data:  Property name MAY be specified.
   Description:  iTIP operation failed because of an invalid property
      name.

3.6.14.  Status Code 3.1

   Status Code:  3.1
   Status Description:  Invalid property value.
   Status Exception Data:  Property name and value MAY be specified.
   Description:  iTIP operation failed because of an invalid property
      value.

3.6.15.  Status Code 3.2

   Status Code:  3.2
   Status Description:  Invalid property parameter.
   Status Exception Data:  Property parameter name and value MAY be
      specified.
   Description:  iTIP operation failed because of an invalid property
      parameter.

3.6.16.  Status Code 3.3

   Status Code:  3.3
   Status Description:  Invalid property parameter value.

Daboo                     Expires April 7, 2010                [Page 70]
Internet-Draft                    iTIP                      October 2009

   Status Exception Data:  Property parameter name and value MAY be
      specified.
   Description:  iTIP operation failed because of an invalid property
      parameter value.

3.6.17.  Status Code 3.4

   Status Code:  3.4
   Status Description:  Invalid calendar component sequence.
   Status Exception Data:  Calendar component sentinel MAY be specified
      (e.g., BEGIN:VTIMEZONE).
   Description:  iTIP operation failed because of an invalid component.

3.6.18.  Status Code 3.5

   Status Code:  3.5
   Status Description:  Invalid date or time.
   Status Exception Data:  Date/time value(s) MAY be specified.
   Description:  iTIP operation failed because of an invalid date or
      time property.

3.6.19.  Status Code 3.6

   Status Code:  3.6
   Status Description:  Invalid rule.
   Status Exception Data:  Rule value MAY be specified.
   Description:  iTIP operation failed because of an invalid rule
      property.

3.6.20.  Status Code 3.7

   Status Code:  3.7
   Status Description:  Invalid Calendar User.
   Status Exception Data:  Attendee property value MAY be specified.
   Description:  iTIP operation failed because of an invalid Attendee
      property.

3.6.21.  Status Code 3.8

   Status Code:  3.8
   Status Description:  No authority.
   Status Exception Data:  METHOD and Attendee property values MAY be
      specified.
   Description:  iTIP operation failed because an Attendee does not have
      suitable privileges for the operation.

#x27;) octets.  MAX is
   the maximum length for each value of any text attribute.  However, if
   an attribute will always contain values whose maximum length is much
   less than MAX, the definition of that attribute will include a
   qualifier that defines the maximum length for values of that
   attribute.  For example:  the "printer-location" attribute is
   specified as "printer-location (text(127))".  In this case, text
   values for "printer-location" MUST NOT exceed 127 octets; if supplied
   with a longer text string via some external interface (other than the
   protocol), implementations are free to truncate to this shorter
   length limitation.

   In this document, all text attributes are defined using the 'text'
   syntax.  However, 'text' is used only for brevity; the formal
   interpretation of 'text' is: 'textWithoutLanguage |
   textWithLanguage'.  That is, for any attribute defined in this
   document using the 'text' attribute syntax, all IPP objects and

Hastings, et al.            Standards Track                    [Page 79]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   clients MUST support both the 'textWithoutLanguage' and
   'textWithLanguage' attribute syntaxes.  However, in actual usage and
   protocol execution, objects and clients accept and return only one of
   the two syntax per attribute.  The syntax 'text' never appears "on-
   the-wire".

   Both 'textWithoutLanguage' and 'textWithLanguage' are needed to
   support the real world needs of interoperability between sites and
   systems that use different natural languages as the basis for human
   communication.  Generally, one natural language applies to all text
   attributes in a given request or response. The language is indicated
   by the "attributes-natural-language" operation attribute defined in
   section 3.1.4 or "attributes-natural-language" job attribute defined
   in section 4.3.20, and there is no need to identify the natural
   language for each text string on a value-by-value basis.  In these
   cases, the attribute syntax 'textWithoutLanguage' is used for text
   attributes.  In other cases, the client needs to supply or the
   Printer object needs to return a text value in a natural language
   that is different from the rest of the text values in the request or
   response.  In these cases, the client or Printer object uses the
   attribute syntax 'textWithLanguage' for text attributes (this is the
   Natural Language Override mechanism described in section 3.1.4).

   The 'textWithoutLanguage' and 'textWithLanguage' attribute syntaxes
   are described in more detail in the following sections.

4.1.1.1 'textWithoutLanguage'

   The 'textWithoutLanguage' syntax indicates a value that is sequence
   of zero or more characters encoded in a maximum of 1023 (MAX) octets.
   Text strings are encoded using the rules of some charset.  The
   Printer object MUST support the UTF-8 charset [RFC2279] and MAY
   support additional charsets to represent 'text' values, provided that
   the charsets are registered with IANA [IANA-CS].  See Section 4.1.7
   for the definition of the 'charset' attribute syntax, including
   restricted semantics and examples of charsets.

4.1.1.2 'textWithLanguage'

   The 'textWithLanguage' attribute syntax is a compound attribute
   syntax consisting of two parts: a 'textWithoutLanguage' part encoded
   in a maximum of 1023 (MAX) octets plus an additional
   'naturalLanguage' (see section 4.1.8) part that overrides the natural
   language in force.  The 'naturalLanguage' part explicitly identifies
   the natural language that applies to the text part of that value and
   that value alone.  For any give text attribute, the
   'textWithoutLanguage' part is limited to the maximum length defined
   for that 'text' attribute, and the 'naturalLanguage' part is always

Hastings, et al.            Standards Track                    [Page 80]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   limited to 63 (additional) octets.  Using the 'textWithLanguage'
   attribute syntax rather than the normal 'textWithoutLanguage' syntax
   is the so-called Natural Language Override mechanism and MUST be
   supported by all IPP objects and clients.

   If the attribute is multi-valued (1setOf text), then the
   'textWithLanguage' attribute syntax MUST be used to explicitly
   specify each attribute value whose natural language needs to be
   overridden.  Other values in a multi-valued 'text' attribute in a
   request or a response revert to the natural language of the operation
   attribute.

   In a create request, the Printer object MUST accept and store with
   the Job object any natural language in the "attributes-natural-
   language" operation attribute, whether the Printer object supports
   that natural language or not.  Furthermore, the Printer object MUST
   accept and store any 'textWithLanguage' attribute value, whether the
   Printer object supports that natural language or not.  These
   requirements are independent of the value of the "ipp-attribute-
   fidelity" operation attribute that the client MAY supply.

   Example:  If the client supplies the "attributes-natural-language"
   operation attribute with the value: 'en' indicating English, but the
   value of the "job-name" attribute is in French, the client MUST use
   the 'textWithLanguage' attribute syntax with the following two
   values:

      'fr': Natural Language Override indicating French
      'Rapport Mensuel': the job name in French

   See the "Encoding and Transport" document [RFC2910] section 3.9 for
   the encoding of the two parts and Appendix A for a detailed example
   of the 'textWithLanguage' attribute syntax.

4.1.2 'name'

   This syntax type is used for user-friendly strings, such as a Printer
   name, that, for humans, are more meaningful than identifiers.  Names
   are never translated from one natural language to another.  The
   'name' attribute syntax is essentially the same as 'text', including
   the REQUIRED support of UTF-8 except that the sequence of characters
   is limited so that its encoded form MUST NOT exceed 255 (MAX) octets.

   Also like 'text', 'name' is really an abbreviated notation for either
   'nameWithoutLanguage' or 'nameWithLanguage'.  That is, all IPP
   objects and clients MUST support both the 'nameWithoutLanguage' and
   'nameWithLanguage' attribute syntaxes.  However, in actual usage and

Hastings, et al.            Standards Track                    [Page 81]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   protocol execution, objects and clients accept and return only one of
   the two syntax per attribute.  The syntax 'name' never appears "on-
   the-wire".

   Only the 'text' and 'name' attribute syntaxes permit the Natural
   Language Override mechanism.

   Some attributes are defined as 'type3 keyword | name'.  These
   attributes support values that are either type3 keywords or names.
   This dual-syntax mechanism enables a site administrator to extend
   these attributes to legally include values that are locally defined
   by the site administrator.  Such names are not registered with IANA.

4.1.2.1 'nameWithoutLanguage'

   The 'nameWithoutLanguage' syntax indicates a value that is sequence
   of zero or more characters encoded in a maximum of 255 (MAX) octets.

4.1.2.2 'nameWithLanguage'

   The 'nameWithLanguage' attribute syntax is a compound attribute
   syntax consisting of two parts: a 'nameWithoutLanguage' part encoded
   in a maximum of 1023 (MAX) octets plus an additional
   'naturalLanguage' (see section 4.1.8) part that overrides the natural
   language in force.  The 'naturalLanguage' part explicitly identifies
   the natural language that applies to that name value and that name
   value alone.  For any give text attribute, the 'textWithoutLanguage'
   part is limited to the maximum length defined for that 'text'
   attribute, and the 'naturalLanguage' part is always limited to 63
   (additional) octets.  Using the 'textWithLanguage' attribute syntax
   rather than the normal 'textWithoutLanguage' syntax is the so-called
   Natural Language Override mechanism and MUST be supported by all IPP
   objects and clients.

   The 'nameWithLanguage' attribute syntax behaves the same as the
   'textWithLanguage' syntax.  Using the 'textWithLanguage' attribute
   syntax rather than the normal 'textWithoutLanguage' syntax is the
   so-called Natural Language Override mechanism and MUST be supported
   by all IPP objects and clients.  If a name is in a language that is
   different than the rest of the object or operation, then this
   'nameWithLanguage' syntax is used rather than the generic
   'nameWithoutLanguage' syntax.

   If the attribute is multi-valued (1setOf text), then the
   'nameWithLanguage' attribute syntax MUST be used to explicitly
   specify each attribute value whose natural language needs to be
   overridden.

Hastings, et al.            Standards Track                    [Page 82]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   Other values in a multi-valued 'name' attribute in a request or a
   response revert to the natural language of the operation attribute.

   In a create request, the Printer object MUST accept and store with
   the Job object any natural language in the "attributes-natural-
   language" operation attribute, whether the Printer object supports
   that natural language or not.  Furthermore, the Printer object MUST
   accept and store any 'nameWithLanguage' attribute value, whether the
   Printer object supports that natural language or not.  These
   requirements are independent of the value of the "ipp-attribute-
   fidelity" operation attribute that the client MAY supply.

   Example:  If the client supplies the "attributes-natural-language"
   operation attribute with the value:  'en' indicating English, but the
   "printer-name" attribute is in German, the client MUST use the
   'nameWithLanguage' attribute syntax as follows:

      'de':  Natural Language Override indicating German
      'Farbdrucker':  the Printer name in German

   See the "Encoding and Transport" document [RFC2910] section 3.9 for
   the encoding of the two parts and Appendix A for a detailed example
   of the 'nameWithLanguage' attribute syntax.

4.1.2.3 Matching 'name' attribute values

   For purposes of matching two 'name' attribute values for equality,
   such as in job validation (where a client-supplied value for
   attribute "xxx" is checked to see if the value is among the values of
   the Printer object's corresponding "xxx-supported" attribute), the
   following match rules apply:

      1. 'keyword' values never match 'name' values.

      2. 'name' (nameWithoutLanguage and nameWithLanguage) values match
         if (1) the name parts match and (2) the Associated Natural-
         Language parts (see section 3.1.4.1) match.  The matching rules
         are:

         a. the name parts match if the two names are identical
            character by character, except it is RECOMMENDED that case
            be ignored.  For example: 'Ajax-letter-head-white' MUST
            match 'Ajax-letter-head-white' and SHOULD match 'ajax-
            letter-head-white' and 'AJAX-LETTER-HEAD-WHITE'.

Hastings, et al.            Standards Track                    [Page 83]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

         b. the Associated Natural-Language parts match if the shorter
            of the two meets the syntactic requirements of RFC 1766
            [RFC1766] and matches byte for byte with the longer.  For
            example, 'en' matches 'en', 'en-us' and 'en-gb', but matches
            neither 'fr' nor 'e'.

4.1.3 'keyword'

   The 'keyword' attribute syntax is a sequence of characters, length: 1
   to 255, containing only the US-ASCII [ASCII] encoded values for
   lowercase letters ("a" - "z"), digits ("0" - "9"), hyphen ("-"), dot
   ("."), and underscore ("_").  The first character MUST be a lowercase
   letter.  Furthermore, keywords MUST be in U.S. English.

   This syntax type is used for enumerating semantic identifiers of
   entities in the abstract protocol, i.e., entities identified in this
   document.  Keywords are used as attribute names or values of
   attributes.  Unlike 'text' and 'name' attribute values, 'keyword'
   values MUST NOT use the Natural Language Override mechanism, since
   they MUST always be US-ASCII and U.S. English.

   Keywords are for use in the protocol.  A user interface will likely
   provide a mapping between protocol keywords and displayable user-
   friendly words and phrases which are localized to the natural
   language of the user.  While the keywords specified in this document
   MAY be displayed to users whose natural language is U.S. English,
   they MAY be mapped to other U.S. English words for U.S. English
   users, since the user interface is outside the scope of this
   document.

   In the definition for each attribute of this syntax type, the full
   set of defined keyword values for that attribute are listed.

   When a keyword is used to represent an attribute (its name), it MUST
   be unique within the full scope of all IPP objects and attributes.
   When a keyword is used to represent a value of an attribute, it MUST
   be unique just within the scope of that attribute.  That is, the same
   keyword MUST NOT be used for two different values within the same
   attribute to mean two different semantic ideas.  However, the same
   keyword MAY be used across two or more attributes, representing
   different semantic ideas for each attribute.  Section 6.1 describes
   how the protocol can be extended with new keyword values.  Examples
   of attribute name keywords:

      "job-name"
      "attributes-charset"

Hastings, et al.            Standards Track                    [Page 84]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   Note:  This document uses "type1", "type2", and "type3" prefixes to
   the "keyword" basic syntax to indicate different levels of review for
   extensions (see section 6.1).

4.1.4 'enum'

   The 'enum' attribute syntax is an enumerated integer value that is in
   the range from 1 to 2**31 - 1 (MAX).   Each value has an associated
   'keyword' name.  In the definition for each attribute of this syntax
   type, the full set of possible values for that attribute are listed.
   This syntax type is used for attributes for which there are enum
   values assigned by other standards, such as SNMP MIBs.  A number of
   attribute enum values in this document are also used for
   corresponding attributes in other standards [RFC1759].  This syntax
   type is not used for attributes to which the administrator may assign
   values.  Section 6.1 describes how the protocol can be extended with
   new enum values.

   Enum values are for use in the protocol.  A user interface will
   provide a mapping between protocol enum values and displayable user-
   friendly words and phrases which are localized to the natural
   language of the user.  While the enum symbols specified in this
   document MAY be displayed to users whose natural language is U.S.
   English, they MAY be mapped to other U.S. English words for U.S.
   English users, since the user interface is outside the scope of this
   document.

   Note: SNMP MIBs use '2' for 'unknown' which corresponds to the IPP
   "out-of-band" value 'unknown'.  See the description of the "out-of-
   band" values at the beginning of Section 4.1.  Therefore, attributes
   of type 'enum' start at '3'.

   Note:  This document uses "type1", "type2", and "type3" prefixes to
   the "enum" basic syntax to indicate different levels of review for
   extensions (see section 6.1).

4.1.5 'uri'

   The 'uri' attribute syntax is any valid Uniform Resource Identifier
   or URI [RFC2396].  Most often, URIs are simply Uniform Resource
   Locators or URLs.  The maximum length of URIs used as values of IPP
   attributes is 1023 octets.  Although most other IPP attribute syntax
   types allow for only lower-cased values, this attribute syntax type
   conforms to the case-sensitive and case-insensitive rules specified
   in [RFC2396].  See also [IPP-IIG] for a discussion of case in URIs.

Hastings, et al.            Standards Track                    [Page 85]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

4.1.6 'uriScheme'

   The 'uriScheme' attribute syntax is a sequence of characters
   representing a URI scheme according to RFC 2396 [RFC2396].  Though
   RFC 2396 requires that the values be case-insensitive, IPP requires
   all lower case values in IPP attributes to simplify comparing by IPP
   clients and Printer objects.

   Standard values for this syntax type are the following keywords:

      'ipp':  for IPP schemed URIs (e.g., "ipp:...")
      'http':  for HTTP schemed URIs (e.g., "http:...")
      'https':  for use with HTTPS schemed URIs (e.g., "https:...") (not
         on IETF standards track)
      'ftp': for FTP schemed URIs (e.g., "ftp:...")
      'mailto': for SMTP schemed URIs (e.g., "mailto:...")
      'file': for file schemed URIs (e.g., "file:...")

   A Printer object MAY support any URI 'scheme' that has been
   registered with IANA [IANA-MT]. The maximum length of URI 'scheme'
   values used to represent IPP attribute values is 63 octets.

4.1.7 'charset'

   The 'charset' attribute syntax is a standard identifier for a
   charset.  A charset is a coded character set and encoding scheme.
   Charsets are used for labeling certain document contents and 'text'
   and 'name' attribute values.  The syntax and semantics of this
   attribute syntax are specified in RFC 2046 [RFC2046] and contained in
   the IANA character-set Registry [IANA-CS] according to the IANA
   procedures [RFC2278].  Though RFC 2046 requires that the values be
   case-insensitive US-ASCII [ASCII], IPP requires all lower case values
   in IPP attributes to simplify comparing by IPP clients and Printer
   objects.  When a character-set in the IANA registry has more than one
   name (alias), the name labeled as "(preferred MIME name)", if
   present, MUST be used.

   The maximum length of 'charset' values used to represent IPP
   attribute values is 63 octets.

   Some examples are:

      'utf-8':  ISO 10646 Universal Multiple-Octet Coded Character Set
         (UCS) represented as the UTF-8 [RFC2279] transfer encoding
         scheme in which US-ASCII is a subset charset.
      'us-ascii':  7-bit American Standard Code for Information
         Interchange (ASCII), ANSI X3.4-1986 [ASCII].  That standard

Hastings, et al.            Standards Track                    [Page 86]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

         defines US-ASCII, but RFC 2045 [RFC2045] eliminates most of the
         control characters from conformant usage in MIME and IPP.
      'iso-8859-1':  8-bit One-Byte Coded Character Set, Latin Alphabet
         Nr 1 [ISO8859-1].  That standard defines a coded character set
         that is used by Latin languages in the Western Hemisphere and
         Western Europe.  US-ASCII is a subset charset.

   Some attribute descriptions MAY place additional requirements on
   charset values that may be used, such as REQUIRED values that MUST be
   supported or additional restrictions, such as requiring that the
   charset have US- ASCII as a subset charset.

4.1.8 'naturalLanguage'

   The 'naturalLanguage' attribute syntax is a standard identifier for a
   natural language and optionally a country.  The values for this
   syntax type are defined by RFC 1766 [RFC1766].  Though RFC 1766
   requires that the values be case-insensitive US-ASCII [ASCII], IPP
   requires all lower case to simplify comparing by IPP clients and
   Printer objects.  Examples include:

      'en':  for English
      'en-us': for US English
      'fr': for French
      'de':  for German

   The maximum length of 'naturalLanguage' values used to represent IPP
   attribute values is 63 octets.

4.1.9 'mimeMediaType'

   The 'mimeMediaType' attribute syntax is the Internet Media Type
   (sometimes called MIME type) as defined by RFC 2046 [RFC2046] and
   registered according to the procedures of RFC 2048 [RFC2048] for
   identifying a document format.  The value MAY include a charset, or
   other, parameter, depending on the specification of the Media Type in
   the IANA Registry [IANA-MT].  Although most other IPP syntax types
   allow for only lower-cased values, this syntax type allows for
   mixed-case values which are case-insensitive.

   Examples are:
      'text/html': An HTML document
      'text/plain': A plain text document in US-ASCII (RFC 2046
         indicates that in the absence of the charset parameter MUST
         mean US-ASCII rather than simply unspecified) [RFC2046].
      'text/plain; charset=US-ASCII':  A plain text document in US-ASCII
         [52, 56].

Hastings, et al.            Standards Track                    [Page 87]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

      'text/plain; charset=ISO-8859-1':  A plain text document in ISO
         8859-1 (Latin 1) [ISO8859-1].
      'text/plain; charset=utf-8':  A plain text document in ISO 10646
         represented as UTF-8 [RFC2279]
      'application/postscript':  A PostScript document [RFC2046]
      'application/vnd.hp-PCL':  A PCL document [IANA-MT] (charset
         escape sequence embedded in the document data)
      'application/pdf':  Portable Document Format - see IANA MIME Media
         Type registry
      'application/octet-stream': Auto-sense - see section 4.1.9.1

   The maximum length of a 'mimeMediaType' value to represent IPP
   attribute values is 255 octets.

4.1.9.1 Application/octet-stream -- Auto-Sensing the document format

   One special type is 'application/octet-stream'.  If the Printer
   object supports this value, the Printer object MUST be capable of
   auto-sensing the format of the document data using an
   implementation-dependent method that examines some number of octets
   of the document data, either as part of the create operation and/or
   at document processing time.  During auto-sensing, a Printer may
   determine that the document-data has a format that the Printer
   doesn't recognize.  If the Printer determines this problem before
   returning an operation response, it rejects the request and returns
   the 'client-error-document-format-not-supported&Daboo                     Expires April 7, 2010                [Page 71]
Internet-Draft                    iTIP                      October 2009

3.6.22.  Status Code 3.9

   Status Code:  3.9
   Status Description:  Unsupported version.
   Status Exception Data:  VERSION property name and value MAY be
      specified.
   Description:  iTIP operation failed because the calendar data version
      is not supported.

3.6.23.  Status Code 3.10

   Status Code:  3.10
   Status Description:  Request entity too large.
   Status Exception Data:  Request entity too large.
   Description:  iTIP operation failed because the calendar data was too
      large.

3.6.24.  Status Code 3.11

   Status Code:  3.11
   Status Description:  Required component or property missing.
   Status Exception Data:  Component or property name MAY be specified.
   Description:  iTIP operation failed because the calendar data did not
      contain a required property or component.

3.6.25.  Status Code 3.12

   Status Code:  3.12
   Status Description:  Unknown component or property found.
   Status Exception Data:  Component or property name MAY be specified.
   Description:  iTIP operation failed because the calendar data
      contained an unknown property or component.

3.6.26.  Status Code 3.13

   Status Code:  3.13
   Status Description:  Unsupported component or property found.
   Status Exception Data:  Component or property name MAY be specified.
   Description:  iTIP operation failed because the calendar data
      contained an unsupported property or component.

3.6.27.  Status Code 3.14

   Status Code:  3.14

Daboo                     Expires April 7, 2010                [Page 72]
Internet-Draft                    iTIP                      October 2009

   Status Description:  Unsupported capability.
   Status Exception Data:  METHOD or action MAY be specified.
   Description:  iTIP operation failed because the operation is not
      supported.

3.6.28.  Status Code 4.0

   Status Code:  4.0
   Status Description:  Event conflict.  Date/time is busy.
   Status Exception Data:  DTSTART and DTEND property name and values
      MAY be specified.
   Description:  iTIP operation failed because the event overlaps the
      date and time of another event.

3.6.29.  Status Code 5.0

   Status Code:  5.0
   Status Description:  Request not supported.
   Status Exception Data:  METHOD property value MAY be specified.
   Description:  iTIP operation failed because the operation is not
      supported.

3.6.30.  Status Code 5.1

   Status Code:  5.1
   Status Description:  Service unavailable.
   Status Exception Data:  ATTENDEE property value MAY be specified.
   Description:  iTIP operation failed because scheduling is not active.

3.6.31.  Status Code 5.2

   Status Code:  5.2
   Status Description:  Invalid calendar service.
   Status Exception Data:  ATTENDEE property value MAY be specified.
   Description:  iTIP operation failed because there is no scheduling
      capability.

3.6.32.  Status Code 5.3

   Status Code:  5.3
   Status Description:  No scheduling support for user.
   Status Exception Data:  ATTENDEE property value MAY be specified.
   Description:  iTIP operation failed because scheduling is not enabled
      for an Attendee.

Daboo                     Expires April 7, 2010                [Page 73]
Internet-Draft                    iTIP                      October 2009

3.7.  Implementation Considerations

3.7.1.  Working With Recurrence Instances

   iCalendar includes a recurrence grammar to represent recurring
   events.  The benefit of such a grammar is the ability to represent a
   number of events in a single object.  However, while this simplifies
   creation of a recurring event, meeting instances still need to be
   referenced.  For instance, an "Attendee" may decline the third
   instance of a recurring Friday event.  Similarly, the "Organizer" may
   change the time or location to a single instance of the recurring
   event.

   Since implementations may elect to store recurring events as either a
   single event object or a collection of discrete, related event
   objects, the protocol is designed so that each recurring instance may
   be both referenced and versioned.  Hence, implementations that choose
   to maintain per-instance properties (such as "ATTENDEE" property
   "PARTSTAT" parameter) may do so.  However, the protocol does not
   require per-instance recognition unless the instance itself must be
   renegotiated.

   The scenarios for recurrence instance referencing are listed below.
   For purposes of simplification a change to an event refers to a
   "trigger property."  That is, a property that has a substantive
   effect on the meeting itself such as start time, location, due date
   (for "VTODO" calendar component components) and possibly description.

   "Organizer" initiated actions:

   o  "Organizer" deletes or changes a single instance of a recurring
      event
   o  "Organizer" makes changes that affect all future instances
   o  "Organizer" makes changes that affect all previous instances
   o  "Organizer" deletes or modifies a previously changed instance

   "Attendee" initiated actions:

   o  "Attendee" changes status for a particular recurrence instance
   o  "Attendee" sends event-Counter for a particular recurrence
      instance

   An instance of a recurring event is assigned a unique identification,
   "RECURRENCE-ID" property, when that instance is renegotiated.
   Negotiation may be necessary when a substantive change to the event
   or to-do has been made (such as changing the start time, end time,
   due date or location).  The "Organizer" can identify a specific
   recurrence instance using the "RECURRENCE-ID" property.  The property

Daboo                     Expires April 7, 2010                [Page 74]
Internet-Draft                    iTIP                      October 2009

   value is equal to the date/time of the instance.  If the "Organizer"
   wishes to change the "DTSTART", the original unmodified "DTSTART"
   value of the instance is used as the value "RECURRENCE-ID" property
   and the new "DTSTART" and "DTEND" values reflect the change.

3.7.2.  Attendee Property Considerations

   The "ORGANIZER" property is required on published events, to-dos, and
   journal entries for two reasons.  First, only the "Organizer" is
   allowed to update and redistribute an event or to-do component.  It
   follows that the "ORGANIZER" property MUST be present in the event,
   to-do, or journal entry component so that the CUA has a basis for
   authorizing an update.  Second, it is prudent to provide a point of
   contact for anyone who receives a published component in case of
   problems.

   Email addresses that correspond to groups of calendar users could be
   specified as a mailto: URI [RFC2368] calendar user address.  Sending
   email to such an address results in email being sent to multiple
   recipients.  Such an address may be used as the value of an
   "ATTENDEE" property.  Thus, it is possible that the recipient of a
   "REQUEST" does not appear explicitly in the list.

   It is recommended that the general approach to finding a "Calendar
   User" in an attendee list be as follows:

   1.  Search for the "Calendar User" in the attendee list where
       "CUTYPE=INDIVIDUAL"
   2.  Failing (1) look for attendees where "CUTYPE=GROUP" or
       'CUTYPE=UNKNOWN".  The CUA then determines if the "Calendar User"
       is a member of one of these groups.  If so, the "REPLY" method
       sent to the "Organizer" MUST contain a new "ATTENDEE" property in
       which:
   3.
       *  the "TYPE" property parameter is set to INDIVIDUAL
       *  the "MEMBER" property parameter is set to the name of the
          group
   4.  Failing (2) the CUA MAY ignore or accept the request as the
       "Calendar User" wishes.

3.7.3.  Extension Tokens

   To make iCalendar objects extensible, new component, property or
   property parameters can be used.  Two types of extension exist: IANA
   registered tokens and X- vendor-specific tokens.  A client SHOULD
   save IANA tokens and MAY use them in replies.  A client MAY save X-
   Tokens and MAY use them in replies.  When delegating or forwarding
   messages to other CUs, a client SHOULD include IANA and X- tokens.

Daboo                     Expires April 7, 2010                [Page 75]
Internet-Draft                    iTIP                      October 2009

4.  Examples

4.1.  Published Event Examples

   In the calendaring and scheduling context, publication refers to the
   one way transfer of event information.  Consumers of published events
   simply incorporate the event into a calendar.  No reply is expected.
   Individual "A" publishes an event.  Individual "B" reads the event
   and incorporates it into their calendar.  Events are published in
   several ways including: embedding the event as an object in a web
   page, e-mailing the event to a distribution list, or posting the
   event to a newsgroup.

   The table below illustrates the sequence of events between the
   publisher and the consumers of a published event.

   +-----------------+-----------------------+-------------------------+
   | Action          | Organizer             | Receiver                |
   +-----------------+-----------------------+-------------------------+
   | Publish an      | "A" sends or posts a  | "B' status code.  If the
   Printer determines this problem after accepting the request and
   returning an operation response with one of the successful status
   codes, the Printer adds the 'unsupported-document-format' value to
   the job's "job-state-reasons" attribute.

   If the Printer object's default value attribute "document-format-
   default" is set to 'application/octet-stream', the Printer object not
   only supports auto-sensing of the document format, but will depend on
   the result of applying its auto-sensing when the client does not
   supply the "document-format" attribute.  If the client supplies a
   document format value, the Printer MUST rely on the supplied
   attribute, rather than trust its auto-sensing algorithm.  To
   summarize:

      1. If the client does not supply a document format value, the
         Printer MUST rely on its default value setting (which may be
         'application/octet-stream' indicating an auto-sensing
         mechanism).
      2. If the client supplies a value other than 'application/octet-
         stream', the client is supplying valid information about the
         format of the document data and the Printer object MUST trust
         the client supplied value more than the outcome of applying an

Hastings, et al.            Standards Track                    [Page 88]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

         automatic format detection mechanism.  For example, the client
         may be requesting the printing of a PostScript file as a
         'text/plain' document.  The Printer object MUST print a text
         representation of the PostScript commands rather than interpret
         the stream of PostScript commands and print the result.
      3. If the client supplies a value of 'application/octet-stream',
         the client is indicating that the Printer object MUST use its
         auto-sensing mechanism on the client supplied document data
         whether auto-sensing is the Printer object's default or not.

   Note:  Since the auto-sensing algorithm is probabilistic, if the
   client requests both auto-sensing ("document-format" set to
   'application/octet-stream') and true fidelity ("ipp-attribute-
   fidelity" set to 'true'), the Printer object might not be able to
   guarantee exactly what the end user intended (the auto-sensing
   algorithm might mistake one document format for another), but it is
   able to guarantee that its auto-sensing mechanism be used.

   When a Printer performs auto-sensing of a document in a submitted
   job, it is RECOMMENDED that the Printer indicate to the user that
   such auto-sensing has occurred and which document-format was auto-
   sensed by printing that information on the job's job-start-sheet.

4.1.10 'octetString'

   The 'octetString' attribute syntax is a sequence of octets encoded in
   a maximum of 1023 octets which is indicated in sub-section headers
   using the notation: octetString(MAX).  This syntax type is used for
   opaque data.

4.1.11 'boolean'

   The 'boolean' attribute syntax has only two values:  'true' and
   'false'.

4.1.12 'integer'

   The 'integer' attribute syntax is an integer value that is in the
   range from -2**31 (MIN) to 2**31 - 1 (MAX).  Each individual
   attribute may specify the range constraint explicitly in sub-section
   headers if the range is different from the full range of possible
   integer values.  For example:  job-priority (integer(1:100)) for the
   "job-priority" attribute.  However, the enforcement of that
   additional constraint is up to the IPP objects, not the protocol.

Hastings, et al.            Standards Track                    [Page 89]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

4.1.13 'rangeOfInteger'

   The 'rangeOfInteger' attribute syntax is an ordered pair of integers
   that defines an inclusive range of integer values.  The first integer
   specifies the lower bound and the second specifies the upper bound.
   If a range constraint is specified in the header description for an
   attribute in this document whose attribute syntax is 'rangeOfInteger'
   (i.e., 'X:Y' indicating X as a minimum value and Y as a maximum
   value), then the constraint applies to both integers.

4.1.14 'dateTime'

   The 'dateTime' attribute syntax is a standard, fixed length, 11 octet
   representation of the "DateAndTime" syntax as defined in RFC 2579
   [RFC2579].  RFC 2579 also identifies an 8 octet representation of a
   "DateAndTime" value, but IPP objects MUST use the 11 octet
   representation.  A user interface will provide a mapping between
   protocol dateTime values and displayable user-friendly words or
   presentation values and phrases which are localized to the natural
   language and date format of the user, including time zone.

4.1.15 'resolution'

   The 'resolution' attribute syntax specifies a two-dimensional
   resolution in the indicated units.  It consists of 3 values: a cross
   feed direction resolution (positive integer value), a feed direction
   resolution (positive integer value), and a units value.  The
   semantics of these three components are taken from the Printer MIB
   [RFC1759] suggested values.  That is, the cross feed direction
   component resolution component is the same as the
   prtMarkerAddressabilityXFeedDir object in the Printer MIB, the feed
   direction component resolution component is the same as the
   prtMarkerAddressabilityFeedDir in the Printer MIB, and the units
   component is the same as the prtMarkerAddressabilityUnit object in
   the Printer MIB (namely, '3' indicates dots per inch and '4'
   indicates dots per centimeter).  All three values MUST be present
   even if the first two values are the same.  Example:  '300', '600',
   '3' indicates a 300 dpi cross-feed direction resolution, a 600 dpi
   feed direction resolution, since a '3' indicates dots per inch (dpi).

4.1.16 '1setOf  X'

   The '1setOf  X' attribute syntax is 1 or more values of attribute
   syntax type X.  This syntax type is used for multi-valued attributes.
   The syntax type is called '1setOf' rather than just 'setOf' as a
   reminder that the set of values MUST NOT be empty (i.e., a set of

Hastings, et al.            Standards Track                    [Page 90]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   size 0).  Sets are normally unordered.  However each attribute
   description of this type may specify that the values MUST be in a
   certain order for that attribute.

4.2 Job Template Attributes

   Job Template attributes describe job processing behavior.  Support
   for Job Template attributes by a Printer object is OPTIONAL (see
   section 12.2.3 for a description of support for OPTIONAL attributes).
   Also, clients OPTIONALLY supply Job Template attributes in create
   requests.

   Job Template attributes conform to the following rules.  For each Job
   Template attribute called "xxx":

      1. If the Printer object supports "xxx" then it MUST support both
         a "xxx-default" attribute (unless there is a "No" in the table
         below) and a "xxx-supported" attribute.  If the Printer object
         doesn't support "xxx", then it MUST support neither an "xxx-
         default" attribute nor an "xxx-supported" attribute, and it
         MUST treat an attribute "xxx" supplied by a client as
         unsupported.  An attribute "xxx" may be supported for some
         document formats and not supported for other document formats.
         For example, it is expected that a Printer object would only
         support "orientation-requested" for some document formats (such
         as 'text/plain' or 'text/html') but not others (such as
         'application/postscript').

      2. "xxx" is OPTIONALLY supplied by the client in a create request.
         If "xxx" is supplied, the client is indicating a desired job
         processing behavior for this Job.  When "xxx" is not supplied,
         the client is indicating that the Printer object apply its
         default job processing behavior at job processing time if the
         document content does not contain an embedded instruction
         indicating an xxx-related behavior.

         Since an administrator MAY change the default value attribute
         after a Job object has been submitted but before it has been
         processed, the default value used by the Printer object at job
         processing time may be different that the default value in
         effect at job submission time.

      3. The "xxx-supported" attribute is a Printer object attribute
         that describes which job processing behaviors are supported by
         that Printer object.  A client can query the Printer object to
         find out what xxx-related behaviors are supported by inspecting
         the returned values of the "xxx-supported" attribute.

Hastings, et al.            Standards Track                    [Page 91]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

         Note: The "xxx" in each "xxx-supported" attribute name is
         singular, even though an "xxx-supported" attribute usually has
         more than one value, such as "job-sheet-supported", unless the
         "xxx" Job Template attribute is plural, such as "finishings" or
         "sides".  In such cases the "xxx-supported" attribute names
         are: "finishings- supported" and "sides-supported".

      4. The "xxx-default" default value attribute describes what will
         be done at job processing time when no other job processing
         information is supplied by the client (either explicitly as an
         IPP attribute in the create request or implicitly as an
         embedded instruction within the document data).

   If an application wishes to present an end user with a list of
   supported values from which to choose, the application SHOULD query
   the Printer object for its supported value attributes.  The
   application SHOULD also query the default value attributes.  If the
   application then limits selectable values to only those value that
   are supported, the application can guarantee that the values supplied
   by the client in the create request all fall within the set of
   supported values at the Printer.  When querying the Printer, the
   client MAY enumerate each attribute by name in the Get-Printer-
   Attributes Request, or the client MAY just name the "job-template"
   group in order to get the complete set of supported attributes (both
   supported and default attributes).

   The "finishings" attribute is an example of a Job Template attribute.
   It can take on a set of values such as 'staple', 'punch', and/or
   'cover'.  A client can query the Printer object for the "finishings-
   supported" attribute and the "finishings-default" attribute.  The
   supported attribute contains a set of supported values.  The default
   value attribute contains the finishing value(s) that will be used for
   a new Job if the client does not supply a "finishings" attribute in
   the create request and the document data does not contain any
   corresponding finishing instructions.  If the client does supply the
   "finishings" attribute in the create request, the IPP object
   validates the value or values to make sure that they are a subset of
   the supported values identified in the Printer object's "finishings-
   supported" attribute.  See section 3.1.7.

   The table below summarizes the names and relationships for all Job
   Template attributes. The first column of the table (labeled "Job
   Attribute") shows the name and syntax for each Job Template attribute
   in the Job object. These are the attributes that can optionally be
   supplied by the client in a create request.   The last two columns
   (labeled "Printer: Default Value Attribute" and "Printer: Supported
   Values Attribute") show the name and syntax for each Job Template
   attribute in the Printer object (the default value attribute and the

Hastings, et al.            Standards Track                    [Page 92]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   supported values attribute).  A "No" in the table means the Printer
   MUST NOT support the attribute (that is, the attribute is simply not
   applicable).  For brevity in the table, the 'text' and 'name' entries
   do not show the maximum length for each attribute.

     +===================+======================+======================+
     | Job Attribute     |Printer: Default Value|  Printer: Supported  |
     |                   |   Attribute          |   Values Attribute   |
     +===================+======================+======================+
     | job-priority      | job-priority-default |job-priority-supported|
     | (integer 1:100)   | (integer 1:100)      |(integer 1:100)       |
     +-------------------+----------------------+----------------------+
     | job-hold-until    | job-hold-until-      |job-hold-until-       |
     | (type3 keyword |  |  default             | supported            |
     |    name)          |  (type3 keyword |    |(1setOf (             |
     |                   |    name)             |type3 keyword | name))|
     +-------------------+----------------------+----------------------+
     | job-sheets        | job-sheets-default   |job-sheets-supported  |
     | (type3 keyword |  | (type3 keyword |     |(1setOf (             |
     |    name)          |    name)             |type3 keyword | name))|
     +-------------------+----------------------+----------------------+
     |multiple-document- |multiple-document-    |multiple-document-    |
     | handling          | handling-default     |handling-supported    |
     | (type2 keyword)   | (type2 keyword)      |(1setOf type2 keyword)|
     +-------------------+----------------------+----------------------+
     | copies            | copies-default       | copies-supported     |
     | (integer (1:MAX)) | (integer (1:MAX))    | (rangeOfInteger      |
     |                   |                      |       (1:MAX))       |
     +-------------------+----------------------+----------------------+
     | finishings        | finishings-default   | finishings-supported |
     |(1setOf type2 enum)|(1setOf type2 enum)   |(1setOf type2 enum)   |
     +-------------------+----------------------+----------------------+
     | page-ranges       | No                   | page-ranges-         |
     | (1setOf           |                      | supported (boolean)  |
     |   rangeOfInteger  |                      |                      |
     |        (1:MAX))   |                      |                      |
     +-------------------+----------------------+----------------------+
     | sides             | sides-default        | sides-supported      |
     | (type2 keyword)   | (type2 keyword)      |(1setOf type2 keyword)|
     +-------------------+----------------------+----------------------+
     | number-up         | number-up-default    | number-up-supported  |
     | (integer (1:MAX)) | (integer (1:MAX))    |(1setOf (integer      |
     |                   |                      | (1:MAX) |            |
     |                   |                      |  rangeOfInteger      |
     |                   |                      |   (1:MAX)))          |

Hastings, et al.            Standards Track                    [Page 93]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

     +-------------------+----------------------+----------------------+
     | orientation-      |orientation-requested-|orientation-requested-|
     |  requested        |  default             |  supported           |
     |   (type2 enum)    |  (type2 enum)        |  (1setOf type2 enum) |
     +-------------------+----------------------+----------------------+
     | media             | media-default        | media-supported      |
     | (type3 keyword |  | (type3 keyword |     |(1setOf (             |
     |    name)          |    name)             |type3 keyword | name))|
     |                   |                      |                      |
     |                   |                      | media-ready          |
     |                   |                      |(1setOf (             |
     |                   |                      |type3 keyword | name))|
     +-------------------+----------------------+----------------------+
     | printer-resolution| printer-resolution-  | printer-resolution-  |
     | (resolution)      |  default             | supported            |
     |                   | (resolution)         |(1setOf resolution)   |
     +-------------------+----------------------+----------------------+
     | print-quality     | print-quality-default| print-quality-       |
     | (type2 enum)      | (type2 enum)         | supported            |
     |                   |                      |(1setOf type2 enum)   |
     +-------------------+----------------------+----------------------+

4.2.1 job-priority (integer(1:100))

   This attribute specifies a priority for scheduling the Job. A higher
   value specifies a higher priority. The value 1 indicates the lowest
   possible priority. The value 100 indicates the highest possible
   priority.  Among those jobs that are ready to print, a Printer MUST
   print all jobs with a priority value of n before printing those with
   a priority value of n-1 for all n.

   If the Printer object supports this attribute, it MUST always support
   the full range from 1 to 100.  No administrative restrictions are
   permitted.  This way an end-user can always make full use of the
   entire range with any Printer object.  If privileged jobs are
   implemented outside IPP/1.1, they MUST have priorities higher than
   100, rather than restricting the range available to end-users.

   If the client does not supply this attribute and this attribute is
   supported by the Printer object, the Printer object MUST use the
   value of the Printer object's "job-priority-default" at job
   submission time (unlike most Job Template attributes that are used if
   necessary at job processing time).

   The syntax for the "job-priority-supported" is also integer(1:100).
   This single integer value indicates the number of priority levels
   supported.  The Printer object MUST take the value supplied by the
   client and map it to the closest integer in a sequence of n integers

Hastings, et al.            Standards Track                    [Page 94]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   values that are evenly distributed over the range from 1 to 100 using
   the formula:

      roundToNearestInt((100x+50)/n)

   where n is the value of "job-priority-supported" and x ranges from 0
   through n-1.

   For example, if n=1 the sequence of values is 50;  if n=2, the
   sequence of values is:  25 and 75;  if n = 3, the sequence of values
   is:  17, 50 and 83;  if n = 10, the sequence of values is: 5, 15, 25,
   35, 45, 55, 65, 75, 85, and 95;  if n = 100, the sequence of values
   is:  1, 2, 3, ... 100.

   If the value of the Printer object's "job-priority-supported" is 10
   and the client supplies values in the range 1 to 10, the Printer
   object maps them to 5, in the range 11 to 20, the Printer object maps
   them to 15, etc.

4.2.2 job-hold-until (type3 keyword | name (MAX))

   This attribute specifies the named time period during which the Job
   MUST become a candidate for printing.

   Standard keyword values for named time periods are:

      'no-hold': immediately, if there are not other reasons to hold the
         job
      'indefinite':  - the job is held indefinitely, until a client
         performs a Release-Job (section 3.3.6)
      'day-time': during the day
      'evening': evening
      'night': night
      'weekend': weekend
      'second-shift': second-shift (after close of business)
      'third-shift': third-shift (after midnight)

   An administrator MUST associate allowable print times with a named
   time period (by means outside the scope of this IPP/1.1 document).
   An administrator is encouraged to pick names that suggest the type of
   time period. An administrator MAY define additional values using the
   'name' or 'keyword' attribute syntax, depending on implementation.

   If the value of this attribute specifies a time period that is in the
   future, the Printer SHOULD add the 'job-hold-until-specified' value
   to the job's "job-state-reasons" attribute, MUST move the job to the

Hastings, et al.            Standards Track                    [Page 95]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   'pending-held' state, and MUST NOT schedule the job for printing
   until the specified time-period arrives.

   When the specified time period arrives, the Printer MUST remove the
   'job-hold-until-specified' value from the job's "job-state-reason"
   attribute, if present.  If there are no other job state reasons that
   keep the job in the 'pending-held' state, the Printer MUST consider
   the job as a candidate for processing by moving the job to the
   'pending' state.

   If this job attribute value is the named value 'no-hold', or the
   specified time period has already started, the job MUST be a
   candidate for processing immediately.

   If the client does not supply this attribute and this attribute is
   supported by the Printer object, the Printer object MUST use the
   value of the Printer object's "job-hold-until-default" at job
   submission time (unlike most Job Template attributes that are used if
   necessary at job processing time).

4.2.3 job-sheets (type3 keyword | name(MAX))

   This attribute determines which job start/end sheet(s), if any, MUST
   be printed with a job.

   Standard keyword values are:

      'none': no job sheet is printed
      'standard': one or more site specific standard job sheets are
         printed, e.g. a single start sheet or both start and end sheet is
         printed

   An administrator MAY define additional values using the 'name' or
   'keyword' attribute syntax, depending on implementation.

   The effect of this attribute on jobs with multiple documents MAY be
   affected by the "multiple-document-handling" job attribute (section
   4.2.4), depending on the job sheet semantics.

4.2.4 multiple-document-handling (type2 keyword)

   This attribute is relevant only if a job consists of two or more
   documents. This attribute MUST be supported with at least one value
   if the Printer supports multiple documents per job (see sections
   3.2.4 and 3.3.1).  The attribute controls finishing operations and
   the placement of one or more print-stream pages into impressions and
   onto media sheets.  When the value of the "copies" attribute exceeds
   1, it also controls the order in which the copies that result from

Hastings, et al.            Standards Track                    [Page 96]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   processing the documents are produced. For the purposes of this
   explanations, if "a" represents an instance of document data, then
   the result of processing the data in document "a" is a sequence of
   media sheets represented by "a(*)".

   Standard keyword values are:

      'single-document': If a Job object has multiple documents, say,
         the document data is called a and b, then the result of
         processing all the document data (a and then b) MUST be treated
         as a single sequence of media sheets for finishing operations;
         that is, finishing would be performed on the concatenation of
         the sequences a(*),b(*).  The Printer object MUST NOT force the
         data in each document instance to be formatted onto a new
         print-stream page, nor to start a new impression on a new media
         sheet. If more than one copy is made, the ordering of the sets
         of media sheets resulting from processing the document data
         MUST be a(*), b(*), a(*), b(*), start on a new media sheet.
      'separate-documents-uncollated-copies': If a Job object has
         multiple documents, say, the document data is called a and b,
         then the result of processing the data in each document
         instance MUST be treated as a single sequence of media sheets
         for finishing operations; that is, the sets a(*) and b(*) would
         each be finished separately. The Printer object MUST force each
         copy of the result of processing the data in a single document
         to start on a new media sheet. If more than one copy is made,
         the ordering of the sets of media sheets resulting from
         processing the document data MUST be a(*), a(*), ..., b(*),
         b(*) ... .
      'separate-documents-collated-copies': If a Job object has multiple
         documents, say, the document data is called a and b, then the
         result of processing the data in each document instance MUST be
         treated as a single sequence of media sheets for finishing
         operations; that is, the sets a(*) and b(*) would each be
         finished separately. The Printer object MUST force each copy of
         the result of processing the data in a single document to start
         on a new media sheet.  If more than one copy is made, the
         ordering of the sets of media sheets resulting from processing
         the document data MUST be a(*), b(*), a(*), b(*), ... .
      'single-document-new-sheet':  Same as 'single-document', except
         that the Printer object MUST ensure that the first impression
         of each document instance in the job is placed on a new media
         sheet.  This value allows multiple documents to be stapled
         together with a single staple where each document starts on a
         new sheet.

Hastings, et al.            Standards Track                    [Page 97]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   The 'single-document' value is the same as 'separate-documents-
   collated-copies' with respect to ordering of print-stream pages, but
   not media sheet generation, since 'single-document' will put the
   first page of the next document on the back side of a sheet if an odd
   number of pages have been produced so far for the job, while
   'separate-documents-collated- copies' always forces the next document
   or document copy on to a new sheet.  In addition, if the "finishings"
   attribute specifies 'staple', then with 'single-document', documents
   a and b are stapled together as a single document with no regard to
   new sheets, with 'single-document-new-sheet', documents a and b are
   stapled together as a single document, but document b starts on a new
   sheet, but with 'separate-documents-uncollated-copies' and
   'separate-documents-collated-copies', documents a and b are stapled
   separately.

   Note: None of these values provide means to produce uncollated sheets
   within a document, i.e., where multiple copies of sheet n are
   produced before sheet n+1 of the same document.

   The relationship of this attribute and the other attributes that
   control document processing is described in section 15.3.

4.2.5 copies (integer(1:MAX))

   This attribute specifies the number of copies to be printed.

   On many devices the supported number of collated copies will be
   limited by the number of physical output bins on the device, and may
   be different from the number of uncollated copies which can be
   supported.

   Note: The effect of this attribute on jobs with multiple documents is
   controlled by the "multiple-document-handling" job attribute (section
   4.2.4) and the relationship of this attribute and the other
   attributes that control document processing is described in section
   15.3.

4.2.6 finishings (1setOf type2 enum)

   This attribute identifies the finishing operations that the Printer
   uses for each copy of each printed document in the Job. For Jobs with
   multiple documents, the "multiple-document-handling" attribute
   determines what constitutes a "copy" for purposes of finishing.

Hastings, et al.            Standards Track                    [Page 98]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   Standard enum values are:

   Value  Symbolic Name and Description

   '3'    'none':  Perform no finishing
   '4'    'staple':  Bind the document(s) with one or more staples. The
             exact number and placement of the staples is site-
             defined.
   '5'    'punch':  This value indicates that holes are required in the
             finished document. The exact number and placement of the
             holes is site-defined  The punch specification MAY be
             satisfied (in a site- and implementation-specific manner)
             either by drilling/punching, or by substituting pre-
             drilled media.
   '6'    'cover':  This value is specified when it is desired to select
             a non-printed (or pre-printed) cover for the document.
             This does not supplant the specification of a printed
             cover (on cover stock medium) by the document itself.
   '7'    'bind':  This value indicates that a binding is to be applied
             to the document; the type and placement of the binding is
             site-defined.
   '8'    'saddle-stitch':  Bind the document(s) with one or more
             staples (wire stitches) along the middle fold.  The exact
             number and placement of the staples and the middle fold
             is implementation and/or site-defined.
   '9'    'edge-stitch':  Bind the document(s) with one or more staples
             (wire stitches) along one edge.  The exact number and
             placement of the staples is implementation and/or site-
             defined.
   '10'-'19'   reserved for future generic finishing enum values.

   The following values are more specific; they indicate a corner or an
   edge as if the document were a portrait document (see below):

   '20'   'staple-top-left':  Bind the document(s) with one or more
             staples in the top left corner.
   '21'   'staple-bottom-left':  Bind the document(s) with one or more
             staples in the bottom left corner.
   '22'   'staple-top-right':  Bind the document(s) with one or more
             staples in the top right corner.
   '23'   'staple-bottom-right':  Bind the document(s) with one or more
             staples in the bottom right corner.
   '24'   'edge-stitch-left':  Bind the document(s) with one or more
             staples (wire stitches) along the left edge.  The exact
             number and placement of the staples is implementation
             and/or site-defined.

quot; reads a published   |
   | event           | PUBLISH message       | event                   |
   |                 |                       |                         |
   | Publish an      | "A" sends or posts a  | "B" reads the updated   |
   | updated event   | PUBLISH message       | event                   |
   |                 |                       |                         |
   | Cancel a        | "A" sends or posts a  | "B" reads the canceled  |
   | published event | CANCEL message        | event publication       |
   +-----------------+-----------------------+-------------------------+

4.1.1.  A Minimal Published Event

   The iCalendar object below describes a single event that begins on
   July 1, 1997 at 20:00 UTC.  This event contains the minimum set of
   properties for a "PUBLISH" for a "VEVENT" calendar component.

      BEGIN:VCALENDAR
      METHOD:PUBLISH
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      DTSTART:19970701T200000Z
      DTSTAMP:19970611T190000Z
      SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
      UID:0981234-1234234-23@example.com
      END:VEVENT
      END:VCALENDAR

Daboo                     Expires April 7, 2010                [Page 76]
Internet-Draft                    iTIP                      October 2009

4.1.2.  Changing A Published Event

   The iCalendar object below describes an update to the event described
   in 4.1.1, the time has been changed, an end time has been added, and
   the sequence number has been adjusted.

      BEGIN:VCALENDAR
      METHOD:PUBLISH
      VERSION:2.0
      PRODID:-//Example/ExampleCalendarClient//EN
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      DTSTAMP:19970612T190000Z
      DTSTART:19970701T210000Z
      DTEND:19970701T230000Z
      SEQUENCE:1
      UID:0981234-1234234-23@example.com
      SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
      END:VEVENT
      END:VCALENDAR

   The "UID" property is used by the client to identify the event.  The
   "SEQUENCE" property indicates that this is a change to the event.
   The event with a matching UID and sequence number 0 is superseded by
   this event.

   The "SEQUENCE" property provides a reliable way to distinguish
   different versions of the same event.  Each time an event is
   published, its sequence number is incremented.  If a client receives
   an event with a sequence number 5 and finds it has the same event
   with sequence number 2, the event SHOULD be updated.  However, if the
   client received an event with sequence number 2 and finds it already
   has sequence number 5 of the same event, the event MUST NOT be
   updated.

4.1.3.  Canceling A Published Event

   The iCalendar object below cancels the event described in 4.1.1.
   This cancels the event with "SEQUENCE" property of 0, 1, and 2.

Daboo                     Expires April 7, 2010                [Page 77]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      METHOD:CANCEL
      VERSION:2.0
      PRODID:-//Example/ExampleCalendarClient//EN
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      COMMENT:DUKES forfeit the game
      SEQUENCE:2
      UID:0981234-1234234-23@example.com
      DTSTAMP:19970613T190000Z
      END:VEVENT
      END:VCALENDAR

4.1.4.  A Rich Published Event

   This example describes the same event as in 4.1.1, but in much
   greater detail.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:PUBLISH
      SCALE:GREGORIAN
      VERSION:2.0
      BEGIN:VTIMEZONE
      TZID:America-Chicago
      TZURL:http://example.com/tz/America-Chicago
      BEGIN:STANDARD
      DTSTART:19671029T020000
      RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
      TZOFFSETFROM:-0500
      TZOFFSETTO:-0600
      TZNAME:CST
      END:STANDARD
      BEGIN:DAYLIGHT
      DTSTART:19870405T020000
      RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
      TZOFFSETFROM:-0600
      TZOFFSETTO:-0500
      TZNAME:CDT
      END:DAYLIGHT
      END:VTIMEZONE
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTACH:http://www.example.com/
      CATEGORIES:SPORTS EVENT,ENTERTAINMENT
      CLASS:PRIVATE

Daboo                     Expires April 7, 2010                [Page 78]
Internet-Draft                    iTIP                      October 2009

      DESCRIPTION:MIDWAY STADIUM\n
       Big time game. MUST see.\n
       Expected duration:2 hours\n
      DTEND;TZID=America-Chicago:19970701T180000
      DTSTART;TZID=America-Chicago:19970702T160000
      DTSTAMP:19970614T190000Z
      STATUS:CONFIRMED
      LOCATION;VALUE=URI:http://stadium.example.com/
      PRIORITY:2
      RESOURCES:SCOREBOARD
      SEQUENCE:3
      SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
      UID:0981234-1234234-23@example.com
      RELATED-TO:0981234-1234234-14@example.com
      BEGIN:VALARM
      TRIGGER:-PT2H
      ACTION:DISPLAY
      DESCRIPTION:You should be leaving for the game now.
      END:VALARM
      BEGIN:VALARM
      TRIGGER:-PT30M
      ACTION:AUDIO
      END:VALARM
      END:VEVENT
      END:VCALENDAR

   The "RELATED-TO" field contains the "UID" property of a related
   calendar event.  The "SEQUENCE" property 3 indicates that this event
   supersedes versions 0, 1, and 2.

4.1.5.  Anniversaries or Events attached to entire days

   This example demonstrates the use of the "VALUE" parameter to tie a
   "VEVENT" to day rather than a specific time.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:PUBLISH
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      DTSTAMP:19970614T190000Z
      UID:0981234-1234234-23@example.com
      DTSTART;VALUE=DATE:19970714
      RRULE:FREQ=YEARLY;INTERVAL=1
      SUMMARY: Bastille Day

Daboo                     Expires April 7, 2010                [Page 79]
Internet-Draft                    iTIP                      October 2009

      END:VEVENT
      END:VCALENDAR

4.2.  Group Event Examples

   Group events are distinguished from published events in that they
   have "Attendees" and that there is interaction between the
   "Attendees" and the "Organizer" with respect to the event.
   Individual "A" requests a meeting between individuals "A", "B", "C"
   and "D".  Individual "B" confirms attendance to the meeting.
   Individual "C" declines attendance.  Individual "D" tentatively
   confirms attendance.  The following table illustrates the the message
   flow between these individuals.  A, the CU scheduling the meeting, is
   referenced as the "Organizer".

   +--------------+-----------------------+----------------------------+
   | Action       | "Organizer"           | Attendee                   |
   +--------------+-----------------------+----------------------------+
   | Initiate a   | "A" sends a REQUEST   |                            |
   | meeting      | message to "B", "C",  |                            |
   | request      | and "D"               |                            |
   |              |                       |                            |
   | Accept the   |                       | "B" sends a REPLY message  |
   | meeting      |                       | to "A" with its ATTENDEE   |
   | request      |                       | "PARTSTAT" parameter set   |
   |              |                       | to "ACCEPTED"              |
   |              |                       |                            |
   | Decline the  |                       | "C" sends a REPLY message  |
   | meeting      |                       | to "A" with its ATTENDEE   |
   | request      |                       | "PARTSTAT" parameter set   |
   |              |                       | to "DECLINED"              |
   |              |                       |                            |
   | Tentatively  |                       | "D" sends a REPLY message  |
   | accept the   |                       | to "A" with its ATTENDEE   |
   | meeting      |                       | "PARTSTAT" parameter set   |
   | request      |                       | to "TENTATIVE"             |
   |              |                       |                            |
   | Confirm      | "A" sends a REQUEST   |                            |
   | meeting      | message to "B" and    |                            |
   | status with  | "D" with updated      |                            |
   | attendees    | information.          |                            |
   +--------------+-----------------------+----------------------------+

Daboo                     Expires April 7, 2010                [Page 80]
Internet-Draft                    iTIP                      October 2009

4.2.1.  A Group Event Request

   A sample meeting request is sent from "A" to "B", "C", and "D".  "E"
   is also sent a copy of the request but is not expected to attend and
   need not reply.  "E" illustrates how CUAs might implement an "FYI"
   type feature.  Note the use of the "ROLE" parameter.  The default
   value for the "ROLE" parameter is "REQ-PARTICIPANT" and it need not
   be enumerated.  In this case we are using the value "NON-PARTICIPANT"
   to indicate "E" is a non-attending CU.  The parameter is not needed
   on other "Attendees" since "PARTICIPANT" is the default value.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:mailto:c@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com
      ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_big@example.com
      ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com
      DTSTAMP:19970611T190000Z
      DTSTART:19970701T200000Z
      DTEND:19970701T2100000Z
      SUMMARY:Conference
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:0
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

4.2.2.  Reply To A Group Event Request

   Attendee "B" accepts the meeting.

Daboo                     Expires April 7, 2010                [Page 81]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REPLY
      VERSION:2.0
      BEGIN:VEVENT
      ATTENDEE;PARTSTAT=ACCEPTED:mailto:b@example.com
      ORGANIZER:mailto:a@example.com
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:0
      REQUEST-STATUS:2.0;Success
      DTSTAMP:19970612T190000Z
      END:VEVENT
      END:VCALENDAR

   "B" could have declined the meeting or indicated tentative acceptance
   by setting the "ATTENDEE" "PARTSTAT" parameter to "DECLINED" or
   "TENTATIVE", respectively.  Also, "REQUEST-STATUS" is not required in
   successful transactions.

4.2.3.  Update An Event

   The event is moved to a different time.  The combination of the "UID"
   property (unchanged) and the "SEQUENCE" (bumped to 1) properties
   indicate the update.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:c@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:mailto:d@example.com
      ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;
       CUTYPE=ROOM:mailto:conf@example.com
      ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:mailto:e@example.com
      DTSTART:19970701T180000Z
      DTEND:19970701T190000Z
      SUMMARY:Phone Conference
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:1
      DTSTAMP:19970613T190000Z
      STATUS:CONFIRMED
      END:VEVENT

Daboo                     Expires April 7, 2010                [Page 82]
Internet-Draft                    iTIP                      October 2009

      END:VCALENDAR

4.2.4.  Countering an Event Proposal

   "A" sends a "REQUEST" to "B" and "C".  "B" makes a counter-proposal
   to "A" to change the time and location.

   "A" sends the following "REQUEST":

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:c@example.com
      DTSTART:19970701T190000Z
      DTEND:19970701T200000Z
      SUMMARY:Discuss the Merits of the election results
      LOCATION:Green Conference Room
      UID:calsrv.example.com-873970198738777a@example.com
      SEQUENCE:0
      DTSTAMP:19970611T190000Z
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

   "B" sends "COUNTER" to "A", requesting changes to time and place.
   "B" uses the "COMMENT" property to communicate a rationale for the
   change.  Note that the "SEQUENCE" property is NOT incremented on a
   "COUNTER".

Daboo                     Expires April 7, 2010                [Page 83]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:COUNTER
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:c@example.com
      DTSTART:19970701T160000Z
      DTEND:19970701T170000Z
      DTSTAMP:19970612T190000Z
      SUMMARY:Discuss the Merits of the election results
      LOCATION:Blue Conference Room
      COMMENT:This time works much better and I think the big conference
       room is too big
      UID:calsrv.example.com-873970198738777a@example.com
      SEQUENCE:0
      END:VEVENT
      END:VCALENDAR

   "A" accepts the changes from "B".  To accept a counter-proposal, the
   "Organizer" sends a new event "REQUEST" with an incremented sequence
   number.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:c@example.com
      DTSTAMP:19970613T190000Z
      DTSTART:19970701T160000Z
      DTEND:19970701T170000Z
      SUMMARY:Discuss the Merits of the election results - changed to
       meet B's schedule
      LOCATION:Blue Conference Room
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:1
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

Daboo                     Expires April 7, 2010                [Page 84]
Internet-Draft                    iTIP                      October 2009

   Instead, "A" rejects "B's" counter proposal

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:DECLINECOUNTER
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
      COMMENT:Sorry, I cannot change this meeting time
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:0
      DTSTAMP:19970614T190000Z
      END:VEVENT
      END:VCALENDAR

4.2.5.  Delegating an Event

   When delegating an event request to another "Calendar User", the
   "Delegator" must both update the "Organizer" with a "REPLY" and send
   a request to the "Delegate".  There is currently no protocol
   limitation to delegation depth.  It is possible for the original
   delegate to delegate the meeting to someone else, and so on.  When a
   request is delegated from one CUA to another there are a number of
   responsibilities required of the "Delegator".  The "Delegator" MUST:

   o  Send a "REPLY" to the "Organizer" with the following updates:
      A.  The "Delegator's" "ATTENDEE" property "PARTSTAT" parameter set
          to "DELEGATED" and the "DELEGATED-TO" parameter is set to the
          address of the "DelegateHastings, et al.            Standards Track                    [Page 99]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   '25'   'edge-stitch-top':  Bind the document(s) with one or more
             staples (wire stitches) along the top edge.  The exact
             number and placement of the staples is implementation
             and/or site-defined.
   '26'   'edge-stitch-right':  Bind the document(s) with one or more
             staples (wire stitches) along the right edge.  The exact
             number and placement of the staples is implementation
             and/or site-defined.
   '27'   'edge-stitch-bottom':  Bind the document(s) with one or more
             staples (wire stitches) along the bottom edge.  The exact
             number and placement of the staples is implementation
             and/or site-defined.
   '28'   'staple-dual-left':  Bind the document(s) with two staples
             (wire stitches) along the left edge assuming a portrait
             document (see above).
   '29'   'staple-dual-top':  Bind the document(s) with two staples
             (wire stitches) along the top edge assuming a portrait
             document (see above).
   '30'   'staple-dual-right':  Bind the document(s) with two staples
             (wire stitches) along the right edge assuming a portrait
             document (see above).
   '31'   'staple-dual-bottom':  Bind the document(s) with two staples
             (wire stitches) along the bottom edge assuming a portrait
             document (see above).

   The 'staple-xxx' values are specified with respect to the document as
   if the document were a portrait document.  If the document is
   actually a landscape or a reverse-landscape document, the client
   supplies the appropriate transformed value.  For example, to position
   a staple in the upper left hand corner of a landscape document when
   held for reading, the client supplies the 'staple-bottom-left' value
   (since landscape is defined as a +90 degree rotation of the image
   with respect to the media from portrait, i.e., anti-clockwise).  On
   the other hand, to position a staple in the upper left hand corner of
   a reverse-landscape document when held for reading, the client
   supplies the 'staple-top-right' value (since reverse-landscape is
   defined as a -90 degree rotation of the image with respect to the
   media from portrait, i.e., clockwise).

   The angle (vertical, horizontal, angled) of each staple with respect
   to the document depends on the implementation which may in turn
   depend on the value of the attribute.

   Note: The effect of this attribute on jobs with multiple documents is
   controlled by the "multiple-document-handling" job attribute (section
   4.2.4) and the relationship of this attribute and the other
   attributes that control document processing is described in section
   15.3.

Hastings, et al.            Standards Track                   [Page 100]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   If the client supplies a value of 'none' along with any other
   combination of values, it is the same as if only that other
   combination of values had been supplied (that is the 'none' value has
   no effect).

4.2.7 page-ranges (1setOf rangeOfInteger (1:MAX))

   This attribute identifies the range(s) of print-stream pages that the
   Printer object uses for each copy of each document which are to be
   printed.  Nothing is printed for any pages identified that do not
   exist in the document(s).  Ranges MUST be in ascending order, for
   example: 1-3, 5-7, 15-19 and MUST NOT overlap, so that a non-spooling
   Printer object can process the job in a single pass.  If the ranges
   are not ascending or are overlapping, the IPP object MUST reject the
   request and return the 'client-error-bad-request' status code.  The
   attribute is associated with print-stream pages not application-
   numbered pages (for example, the page numbers found in the headers
   and or footers for certain word processing applications).

   For Jobs with multiple documents, the "multiple-document-handling"
   attribute determines what constitutes a "copy" for purposes of the
   specified page range(s).  When "multiple-document-handling" is
   'single-document', the Printer object MUST apply each supplied page
   range once to the concatenation of the print-stream pages.  For
   example, if there are 8 documents of 10 pages each, the page-range
   '41:60' prints the pages in the 5th and 6th documents as a single
   document and none of the pages of the other documents are printed.
   When "multiple-document- handling" is 'separate-documents-
   uncollated-copies' or 'separate-documents-collated-copies', the
   Printer object MUST apply each supplied page range repeatedly to each
   document copy.  For the same job, the page-range '1:3, 10:10' would
   print the first 3 pages and the 10th page of each of the 8 documents
   in the Job, as 8 separate documents.

   In most cases, the exact pages to be printed will be generated by a
   device driver and this attribute would not be required.  However,
   when printing an archived document which has already been formatted,
   the end user may elect to print just a subset of the pages contained
   in the document.  In this case, if page-range = n.m is specified, the
   first page to be printed will be page n. All subsequent pages of the
   document will be printed through and including page m.

   "page-ranges-supported" is a boolean value indicating whether or not
   the printer is capable of supporting the printing of page ranges.
   This capability may differ from one PDL to another. There is no
   "page-ranges-default" attribute.  If the "page-ranges" attribute is
   not supplied by the client, all pages of the document will be
   printed.

Hastings, et al.            Standards Track                   [Page 101]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   Note: The effect of this attribute on jobs with multiple documents is
   controlled by the "multiple-document-handling" job attribute (section
   4.2.4) and the relationship of this attribute and the other
   attributes that control document processing is described in section
   15.3.

4.2.8 sides (type2 keyword)

   This attribute specifies how print-stream pages are to be imposed
   upon the sides of an instance of a selected medium, i.e., an
   impression.

   The standard keyword values are:

      'one-sided': imposes each consecutive print-stream page upon the
         same side of consecutive media sheets.
      'two-sided-long-edge': imposes each consecutive pair of print-
         stream pages upon front and back sides of consecutive media
         sheets, such that the orientation of each pair of print-stream
         pages on the medium would be correct for the reader as if for
         binding on the long edge.  This imposition is sometimes called
         'duplex' or 'head-to-head'.
      'two-sided-short-edge': imposes each consecutive pair of print-
         stream pages upon front and back sides of consecutive media
         sheets, such that the orientation of each pair of print-stream
         pages on the medium would be correct for the reader as if for
         binding on the short edge.  This imposition is sometimes called
         'tumble' or 'head-to-toe'.
      'two-sided-long-edge', 'two-sided-short-edge',
         'tumble', and 'duplex' all work the same for portrait or
         landscape.  However
         'head-to-toe' is
      'tumble' in portrait but 'duplex"
      B.  Add an additional "ATTENDEE" property for the "Delegate" with
          the "DELEGATED-FROM" property parameter set to the "Delegator"
      C.  Indicate whether they want to continue to receive updates when
          the "Organizer" sends out updated versions of the event.
          Setting the "RSVP" property parameter to "TRUE" will cause the
          updates to be sent, setting it to "FALSE" causes no further
          updates to be sent.  Note that in either case, if the
          "Delegate" declines the invitation the "Delegator" will be
          notified.
   o  The "Delegator" MUST also send a copy of the original "REQUEST"
      method to the "Delegate", with changes (A) and (B) as detailed
      above applied.

   If the "Delegate" declines the meeting, the "Organizer" MUST send an
   update "REQUEST" to the "Delegator" so that the "Delegator" may elect
   to delegate the "REQUEST" to another CUA.

Daboo                     Expires April 7, 2010                [Page 85]
Internet-Draft                    iTIP                      October 2009

   +-----------------+----------------+--------------------------------+
   | Action          | "Organizer"    | Attendee                       |
   +-----------------+----------------+--------------------------------+
   | Initiate a      | "A" sends a    |                                |
   | meeting request | REQUEST        |                                |
   |                 | message to "B" |                                |
   |                 | and "C"        |                                |
   |                 |                |                                |
   | Delegate: "C"   |                | "C" sends a REPLY to "A" with  |
   | delegates to    |                | the ATTENDEE "PARTSTAT"        |
   | "E"             |                | parameter set to "DELEGATED"   |
   |                 |                | and with a new "ATTENDEE"      |
   |                 |                | property for "E".  "E's"       |
   |                 |                | ATTENDEE "DELEGATED-FROM"      |
   |                 |                | parameter is set to "C".       |
   |                 |                | "C's" ATTENDEE "DELEGATED-TO"  |
   |                 |                | parameter is set to "E".  "C"  |
   |                 |                | sends REQUEST message to "E"   |
   |                 |                | with the original meeting      |
   |                 |                | request information.  The      |
   |                 |                | "PARTSTAT" property parameter  |
   |                 |                | for "C" is set to "DELEGATED"  |
   |                 |                | and the "DELEGATED-TO"         |
   |                 |                | parameter is set to the        |
   |                 |                | address of "E".  An "ATTENDEE" |
   |                 |                | property is added for "E" and  |
   |                 |                | the "DELEGATED-FROM" parameter |
   |                 |                | is set to the address of "C".  |
   |                 |                |                                |
   | Confirm meeting |                | "E" sends REPLY message to "A" |
   | attendance      |                | and optionally "C" with its    |
   |                 |                | "PARTSTAT" property parameter  |
   |                 |                | set to "ACCEPTED"              |
   |                 |                |                                |
   | Optional:       | "A" sends      |                                |
   | Redistribute    | REQUEST        |                                |
   | meeting to      | message to     |                                |
   | attendees       | "B", "C" and   |                                |
   |                 | "E".           |                                |
   +-----------------+----------------+--------------------------------+

   "C" responds to the "Organizer".

Daboo                     Expires April 7, 2010                [Page 86]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REPLY
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-
       TO="mailto:e@example.com":mailto:c@example.com
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:0
      REQUEST-STATUS:2.0;Success
      DTSTAMP:19970611T190000Z
      END:VEVENT
      END:VCALENDAR

   Attendee &Hastings, et al.            Standards Track                   [Page 102]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   Value  Description

   '1'    the Printer MUST place one print-stream page on a single side
             of an instance of the selected medium (MAY add some sort
             of translation, scaling, or rotation).
   '2'    the Printer MUST place two print-stream pages on a single side
             of an instance of the selected medium (MAY add some sort
             of translation, scaling, or rotation).
   '4'    the Printer MUST place four print-stream pages on a single
             side of an instance of the selected medium (MAY add some
             sort of translation, scaling, or rotation).

   This attribute primarily controls the translation, scaling and
   rotation of print-stream pages.

   Note: The effect of this attribute on jobs with multiple documents is
   controlled by the "multiple-document-handling" job attribute (section
   4.2.4) and the relationship of this attribute and the other
   attributes that control document processing is described in section
   15.3.

4.2.10 orientation-requested (type2 enum)

   This attribute indicates the desired orientation for printed print-
   stream pages; it does not describe the orientation of the client-
   supplied print-stream pages.

   For some document formats (such as 'application/postscript'), the
   desired orientation of the print-stream pages is specified within the
   document data.  This information is generated by a device driver
   prior to the submission of the print job.  Other document formats
   (such as 'text/plain') do not include the notion of desired
   orientation within the document data.  In the latter case it is
   possible for the Printer object to bind the desired orientation to
   the document data after it has been submitted.  It is expected that a
   Printer object would only support "orientations-requested" for some
   document formats (e.g., 'text/plain' or 'text/html') but not others
   (e.g., 'application/postscript').  This is no different than any
   other Job Template attribute since section 4.2, item 1, points out
   that a Printer object may support or not support any Job Template
   attribute based on the document format supplied by the client.
   However, a special mention is made here since it is very likely that
   a Printer object will support "orientation-requested" for only a
   subset of the supported document formats.

Hastings, et al.            Standards Track                   [Page 103]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   Standard enum values are:

   Value  Symbolic Name and Description

   '3'    'portrait':  The content will be imaged across the short edge
             of the medium.
   '4'    'landscape':  The content will be imaged across the long edge
             of the medium.  Landscape is defined to be a rotation of
             the print-stream page to be imaged by +90 degrees with
             respect to the medium (i.e. anti-clockwise) from the
             portrait orientation.  Note:  The +90 direction was
             chosen because simple finishing on the long edge is the
             same edge whether portrait or landscape
   '5'    'reverse-landscape':  The content will be imaged across the
             long edge of the medium.  Reverse-landscape is defined to
             be a rotation of the print-stream page to be imaged by -
             90 degrees with respect to the medium (i.e. clockwise)
             from the portrait orientation.  Note: The 'reverse-
             landscape' value was added because some applications
             rotate landscape -90 degrees from portrait, rather than
             +90 degrees.
   '6'    'reverse-portrait':  The content will be imaged across the
             short edge of the medium.  Reverse-portrait is defined to
             be a rotation of the print-stream page to be imaged by
             180 degrees with respect to the medium from the portrait
             orientation.  Note: The 'reverse-portrait' value was
             added for use with the "finishings" attribute in cases
             where the opposite edge is desired for finishing a
             portrait document on simple finishing devices that have
             only one finishing position.  Thus a 'text'/plain'
             portrait document can be stapled "on the right" by a
             simple finishing device as is common use with some middle
             eastern languages such as Hebrew.

   Note: The effect of this attribute on jobs with multiple documents is
   controlled by the "multiple-document-handling" job attribute (section
   4.2.4) and the relationship of this attribute and the other
   attributes that control document processing is described in section
   15.3.

4.2.11 media (type3 keyword | name(MAX))

   This attribute identifies the medium that the Printer uses for all
   impressions of the Job.

   The values for "media" include medium-names, medium-sizes, input-
   trays and electronic forms so that one attribute specifies the media.
   If a Printer object supports a medium name as a value of this

Hastings, et al.            Standards Track                   [Page 104]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   attribute, such a medium name implicitly selects an input-tray that
   contains the specified medium.  If a Printer object supports a medium
   size as a value of this attribute, such a medium size implicitly
   selects a medium name that in turn implicitly selects an input-tray
   that contains the medium with the specified size.  If a Printer
   object supports an input-tray as the value of this attribute, such an
   input-tray implicitly selects the medium that is in that input-tray
   at the time the job prints.  This case includes manual-feed input-
   trays.  If a Printer object supports an electronic form as the value
   of this attribute, such an electronic form implicitly selects a
   medium-name that in turn implicitly selects an input-tray that
   contains the medium specified by the electronic form.  The electronic
   form also implicitly selects an image that the Printer MUST merge
   with the document data as its prints each page.

   Standard keyword values are taken from ISO DPA [ISO10175], the
   Printer MIB [RFC1759], and ASME-Y14.1M [ASME-Y14.1M] and are listed
   in section 14.  An administrator MAY define additional values using
   the 'name' or 'keyword' attribute syntax, depending on
   implementation.

   There is also an additional Printer attribute named "media-ready"
   which differs from "media-supported" in that legal values only
   include the subset of "media-supported" values that are physically
   loaded and ready for printing with no operator intervention required.
   If an IPP object supports "media-supported", it NEED NOT support
   "media-ready".

   The relationship of this attribute and the other attributes that
   control document processing is described in section 15.3.

4.2.12 printer-resolution (resolution)

   This attribute identifies the resolution that Printer uses for the
   Job.

4.2.13 print-quality (type2 enum)

   This attribute specifies the print quality that the Printer uses for
   the Job.

   The standard enum values are:

   Value  Symbolic Name and Description

   '3'    'draft': lowest quality available on the printer
   '4'    'normal': normal or intermediate quality on the printer
   '5'    'high': highest quality available on the printer

Hastings, et al.            Standards Track                   [Page 105]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

4.3 Job Description Attributes

   The attributes in this section form the attribute group called "job-
   description".  The following table summarizes these attributes.  The
   third column indicates whether the attribute is a REQUIRED attribute
   that MUST be supported by Printer objects.  If it is not indicated as
   REQUIRED, then it is OPTIONAL.  The maximum size in octets for 'text'
   and 'name' attributes is indicated in parenthesizes.

   +----------------------------+----------------------+--------------+
   |      Attribute             |     Syntax           |   REQUIRED?  |
   +----------------------------+----------------------+--------------+
   | job-uri                    | uri                  |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | job-id                     | integer(1:MAX)       |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | job-printer-uri            | uri                  |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | job-more-info              | uri                  |              |
   +----------------------------+----------------------+--------------+
   | job-name                   | name (MAX)           |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | job-originating-user-name  | name (MAX)           |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | job-state                  | type1 enum           |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | job-state-reasons          | 1setOf type2 keyword |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | job-state-message          | text (MAX)           |              |
   +----------------------------+----------------------+--------------+
   | job-detailed-status-       | 1setOf text (MAX)    |              |
   |       messages             |                      |              |
   +----------------------------+----------------------+--------------+
   | job-document-access-errors | 1setOf text (MAX)    |              |
   +----------------------------+----------------------+--------------+
   | number-of-documents        | integer (0:MAX)      |              |
   +----------------------------+----------------------+--------------+
   | output-device-assigned     | name (127)           |              |
   +----------------------------+----------------------+--------------+
   | time-at-creation           | integer (MIN:MAX)    |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | time-at-processing         | integer (MIN:MAX)    |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | time-at-completed          | integer (MIN:MAX)    |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | job-printer-up-time        | integer (1:MAX)      |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | date-time-at-creation      | dateTime             |              |

Hastings, et al.            Standards Track                   [Page 106]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   +----------------------------+----------------------+--------------+
   | date-time-at-processing    | dateTime             |              |
   +----------------------------+----------------------+--------------+
   | date-time-at-completed     | dateTime             |              |
   +----------------------------+----------------------+--------------+
   | number-of-intervening-jobs | integer (0:MAX)      |              |
   +----------------------------+----------------------+--------------+
   | job-message-from-operator  | text (127)           |              |
   +----------------------------+----------------------+--------------+
   | job-k-octets               | integer (0:MAX)      |              |
   +----------------------------+----------------------+--------------+
   | job-impressions            | integer (0:MAX)      |              |
   +----------------------------+----------------------+--------------+
   | job-media-sheets           | integer (0:MAX)      |              |
   +----------------------------+----------------------+--------------+
   | job-k-octets-processed     | integer (0:MAX)      |              |
   +----------------------------+----------------------+--------------+
   | job-impressions-completed  | integer (0:MAX)      |              |
   +----------------------------+----------------------+--------------+
   | job-media-sheets-completed | integer (0:MAX)      |              |
   +----------------------------+----------------------+--------------+
   | attributes-charset         | charset              |  REQUIRED    |
   +----------------------------+----------------------+--------------+
   | attributes-natural-language| naturalLanguage      |  REQUIRED    |
   +----------------------------+----------------------+--------------+

4.3.1 job-uri (uri)

   This REQUIRED attribute contains the URI for the job.  The Printer
   object, on receipt of a new job, generates a URI which identifies the
   new Job.  The Printer object returns the value of the "job-uri"
   attribute as part of the response to a create request.  The precise
   format of a Job URI is implementation dependent.  If the Printer
   object supports more than one URI and there is some relationship
   between the newly formed Job URI and the Printer object's URI, the
   Printer object uses the Printer URI supplied by the client in the
   create request.  For example, if the create request comes in over a
   secure channel, the new Job URI MUST use the same secure channel.
   This can be guaranteed because the Printer object is responsible for
   generating the Job URI and the Printer object is aware of its
   security configuration and policy as well as the Printer URI used in
   the create request.

   For a description of this attribute and its relationship to "job-id"
   and "job-printer-uri" attribute, see the discussion in section 2.4 on
   "Object Identity".

Hastings, et al.            Standards Track                   [Page 107]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

4.3.2 job-id (integer(1:MAX))

   This REQUIRED attribute contains the ID of the job.  The Printer, on
   receipt of a new job, generates an ID which identifies the new Job on
   that Printer.  The Printer returns the value of the "job-id"
   attribute as part of the response to a create request.  The 0 value
   is not included to allow for compatibility with SNMP index values
   which also cannot be 0.

   For a description of this attribute and its relationship to "job-uri"
   and "job-printer-uri" attribute, see the discussion in section 2.4 on
   "Object Identity".

4.3.3 job-printer-uri (uri)

   This REQUIRED attribute identifies the Printer object that created
   this Job object.  When a Printer object creates a Job object, it
   populates this attribute with the Printer object URI that was used in
   the create request.  This attribute permits a client to identify the
   Printer object that created this Job object when only the Job
   object's URI is available to the client.  The client queries the
   creating Printer object to determine which languages, charsets,
   operations, are supported for this Job.

   For a description of this attribute and its relationship to "job-uri"
   and "job-id" attribute, see the discussion in section 2.4 on "Object
   Identity".

4.3.4 job-more-info (uri)

   Similar to "printer-more-info", this attribute contains the URI
   referencing some resource with more information about this Job
   object, perhaps an HTML page containing information about the Job.

4.3.5 job-name (name(MAX))

   This REQUIRED attribute is the name of the job.  It is a name that is
   more user friendly than the "job-uri" attribute value.  It does not
   need to be unique between Jobs.  The Job's "job-name" attribute is
   set to the value supplied by the client in the "job-name" operation
   attribute in the create request (see Section 3.2.1.1).   If, however,
   the "job-name" operation attribute is not supplied by the client in
   the create request, the Printer object, on creation of the Job, MUST
   generate a name.  The printer SHOULD generate the value of the Job's
   "job-name" attribute from the first of the following sources that
   produces a value: 1) the "document-name" operation attribute of the

Hastings, et al.            Standards Track                   [Page 108]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   first (or only) document, 2) the "document-URI" attribute of the
   first (or only) document, or 3) any other piece of Job specific
   and/or Document Content information.

4.3.6 job-originating-user-name (name(MAX))

   This REQUIRED attribute contains the name of the end user that
   submitted the print job.  The Printer object sets this attribute to
   the most authenticated printable name that it can obtain from the
   authentication service over which the IPP operation was received.
   Only if such is not available, does the Printer object use the value
   supplied by the client in the "requesting-user-name" operation
   attribute of the create operation (see Sections 4.4.2, 4.4.3, and 8).

   Note:  The Printer object needs to keep an internal originating user
   id of some form, typically as a credential of a principal, with the
   Job object.  Since such an internal attribute is implementation-
   dependent and not of interest to clients, it is not specified as a
   Job Description attribute.  This originating user id is used for
   authorization checks (if any) on all subsequent operations.

4.3.7 job-state (type1 enum)

   This REQUIRED attribute identifies the current state of the job.
   Even though the IPP protocol defines seven values for job states
   (plus the out-of-band 'unknown' value - see Section 4.1),
   implementations only need to support those states which are
   appropriate for the particular implementation.  In other words, a
   Printer supports only those job states implemented by the output
   device and available to the Printer object implementation.

   Standard enum values are:

   Values Symbolic Name and Description

   '3'  'pending':  The job is a candidate to start processing, but is
           not yet processing.

   '4'  'pending-held':  The job is not a candidate for processing for
           any number of reasons but will return to the 'pending'
           state as soon as the reasons are no longer present.  The
           job's "job-state-reason" attribute MUST indicate why the
           job is no longer a candidate for processing.

Hastings, et al.            Standards Track                   [Page 109]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   '5'  'processing':  One or more of:

           1.  the job is using, or is attempting to use, one or
           more purely software processes that are analyzing,
           creating, or interpreting a PDL, etc.,
           2.  the job is using, or is attempting to use, one or
           more hardware devices that are interpreting a PDL, making
           marks on a medium, and/or performing finishing, such as
           stapling, etc.,
           3. the Printer object has made the job ready for
           printing, but the output device is not yet printing it,
           either because the job hasn't reached the output device
           or because the job is queued in the output device or some
           other spooler, awaiting the output device to print it.

           When the job is in the 'processing' state, the entire job
           state includes the detailed status represented in the
           Printer object's "printer-state", "printer-state-
           reasons", and "printer-state-message" attributes.

           Implementations MAY, though they NEED NOT,  include
           additional values in the job's "job-state-reasons"
           attribute to indicate the progress of the job, such as
           adding the 'job-printing' value to indicate when the
           output device is actually making marks on paper and/or
           the 'processing-to-stop-point' value to indicate that the
           IPP object is in the process of canceling or aborting the
           job.  Most implementations won"C" delegates presence at the meeting to "E".

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-
       TO="mailto:e@example.com":mailto:c@example.com
      ATTENDEE;RSVP=TRUE;
       DELEGATED-FROM="mailto:c@example.com":mailto:e@example.com
      DTSTART:19970701T180000Z
      DTEND:19970701T200000Z
      SUMMARY:Phone Conference
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:0
      STATUS:CONFIRMED
      DTSTAMP:19970611T190000Z
      END:VEVENT
      END:VCALENDAR

4.2.6.  Delegate Accepts the Meeting

   To accept a delegated meeting, the delegate, "E", sends the following
   message to "A" and "C":

Daboo                     Expires April 7, 2010                [Page 87]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REPLY
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;PARTSTAT=ACCEPTED;DELEGATED-
       FROM="mailto:c@example.com":mailto:e@example.com
      ATTENDEE;PARTSTAT=DELEGATED;
       DELEGATED-TO="mailto:e@example.com":mailto:c@example.com
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:0
      REQUEST-STATUS:2.0;Success
      DTSTAMP:19970614T190000Z
      END:VEVENT
      END:VCALENDAR

4.2.7.  Delegate Declines the Meeting

   In this example the "Delegate" declines the meeting request and sets
   the "ATTENDEE" property "PARTSTAT" parameter to "DECLINED".  The
   "Organizer" SHOULD resend the "REQUEST" to "C" with the "PARTSTAT"
   parameter of the "Delegate" set to "DECLINED".  This lets the
   "Delegator" know that the "Delegate" has declined and provides an
   opportunity to the "Delegator" to either accept the request or
   delegate it to another CU.

   Response from "E" to "A" and "C".  Note the use of the "COMMENT"
   property "E" uses to indicate why the delegation was declined.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REPLY
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;PARTSTAT=DELEGATED;
       DELEGATED-TO="mailto:e@example.com":mailto:c@example.com
      ATTENDEE;PARTSTAT=DECLINED;
       DELEGATED-FROM="mailto:c@example.com":mailto:e@example.com
      COMMENT:Sorry, I will be out of town at that time.
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:0
      REQUEST-STATUS:2.0;Success
      DTSTAMP:19970614T190000Z
      END:VEVENT

Daboo                     Expires April 7, 2010                [Page 88]
Internet-Draft                    iTIP                      October 2009

      END:VCALENDAR

   "A" resends the "REQUEST" method to "C".  "A" may also wish to
   express the fact that the item was delegated in the "COMMENT"
   property.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;PARTSTAT=DECLINED;
       DELEGATED-FROM="mailto:c@example.com":mailto:e@example.com
      ATTENDEE;RSVP=TRUE:mailto:c@example.com
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:0
      SUMMARY:Phone Conference
      DTSTART:19970701T180000Z
      DTEND:19970701T200000Z
      DTSTAMP:19970614T200000Z
      COMMENT:DELEGATE (ATTENDEE mailto:e@example.com) DECLINED YOUR
       INVITATION
      END:VEVENT
      END:VCALENDAR

4.2.8.  Forwarding an Event Request

   The protocol does not prevent an "Attendee" from "forwarding" an
   "VEVENT" calendar component to other "Calendar Users".  Forwarding
   differs from delegation in that the forwarded "Calendar User" (often
   referred to as a "Party Crasher") does not replace the forwarding
   "Calendar User".  Implementations are not required to add the "Party
   Crasher" to the "Attendee" list and hence there is no guarantee that
   a "Party Crasher" will receive additional updates to the event.  The
   forwarding "Calendar User" SHOULD NOT add the "Party Crasher" to the
   attendee list.  The "Organizer" MAY add the forwarded "Calendar User"
   to the attendee list.

4.2.9.  Cancel A Group Event

   Individual "A" requests a meeting between individuals "A", "B", "C",
   and "D".  Individual "B" declines attendance to the meeting.
   Individual "A" decides to cancel the meeting.  The following table
   illustrates the sequence of messages that would be exchanged between

Daboo                     Expires April 7, 2010                [Page 89]
Internet-Draft                    iTIP                      October 2009

   these individuals.

   Messages related to a previously canceled event ("SEQUENCE" property
   value is less than the "SEQUENCE" property value of the "CANCEL"
   message) MUST be ignored.

   +-------------+--------------------+--------------------------------+
   | Action      | "Organizer"        | "Attendee"                     |
   +-------------+--------------------+--------------------------------+
   | Initiate a  | "A" sends a        |                                |
   | meeting     | REQUEST message to |                                |
   | request     | "B", "C", and "D"  |                                |
   |             |                    |                                |
   | Decline the |                    | "B" sends a "REPLY" message to |
   | meeting     |                    | "A" with its "PARTSTAT"        |
   | request     |                    | parameter set to "DECLINED".   |
   |             |                    |                                |
   | Cancel the  | "A" sends a CANCEL |                                |
   | meeting     | message to "B",    |                                |
   |             | "C" and "D"        |                                |
   +-------------+--------------------+--------------------------------+

   The example shows how "A" cancels the event.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:CANCEL
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;CUTYPE=INDIVIDUAL;mailto:a@example.com
      ATTENDEE;CUTYPE=INDIVIDUAL:mailto:b@example.com
      ATTENDEE;CUTYPE=INDIVIDUAL:mailto:c@example.com
      ATTENDEE;CUTYPE=INDIVIDUAL:mailto:d@example.com
      COMMENT:Mr. B cannot attend. It's raining. Lets cancel.
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:1
      STATUS:CANCELLED
      DTSTAMP:19970613T190000Z
      END:VEVENT
      END:VCALENDAR

Daboo                     Expires April 7, 2010                [Page 90]
Internet-Draft                    iTIP                      October 2009

4.2.10.  Removing Attendees

   "A" wants to remove "B" from a meeting.  This is done by sending a
   "CANCEL" to "B" and removing "B" from the attendee list in the master
   copy of the event.

   +-------------------+----------------------------------+------------+
   | Action            | "Organizer"                      | "Attendee" |
   +-------------------+----------------------------------+------------+
   | Remove "B" as an  | "A" sends a CANCEL message to    |            |
   | "Attendee"        | "B"                              |            |
   |                   |                                  |            |
   | Update the master | "A" optionally sends the updated |            |
   | copy of the event | event to the remaining           |            |
   |                   | "Attendees"                      |            |
   +-------------------+----------------------------------+------------+

   The original meeting includes "A", "B", "C", and "D".  The example
   below shows the "CANCEL" that "A" sends to "B".  Note that in the
   example below the "STATUS" property is omitted.  This is used when
   the meeting itself is cancelled and not when the intent is to remove
   an "Attendee" from the event.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:CANCEL
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      COMMENT:You're off the hook for this meeting
      UID:calsrv.example.com-873970198738777@example.com
      DTSTAMP:19970613T193000Z
      SEQUENCE:1
      END:VEVENT
      END:VCALENDAR

   The updated master copy of the event is shown below.  The "Organizer"
   MAY resend the updated event to the remaining "Attendees".  Note that
   "B" has been removed.

Daboo                     Expires April 7, 2010                [Page 91]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;CUTYPE=INDIVIDUAL:mailto:c@example.com
      ATTENDEE;CUTYPE=INDIVIDUAL:mailto:d@example.com
      ATTENDEE;CUTYPE=ROOM:mailto:cr_big@example.com
      ATTENDEE;ROLE=NON-PARTICIPANT;
       RSVP=FALSE:mailto:e@example.com
      DTSTAMP:19970611T190000Z
      DTSTART:19970701T200000Z
      DTEND:19970701T203000Z
      SUMMARY:Phone Conference
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:2
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

4.2.11.  Replacing the Organizer

   The scenario for this example begins with "A" as the "Organizer" for
   a recurring meeting with "B", "C", and "D".  "A" receives a new job
   offer in another country and drops out of touch.  "A" left no
   forwarding address or way to be reached.  Using out-of-band
   communication, the other "Attendees" eventually learn what has
   happened and reach an agreement that "B" should become the new
   "Organizer" for the meeting.  To do this, "B" sends out a new version
   of the event and the other "Attendees" agree to accept "B" as the new
   "Organizer".  "B" also removes "A" from the event.

   When the "Organizer" is replaced, the "SEQUENCE" property value MUST
   be incremented.

   This is the message "B" sends to "C" and "D"

Daboo                     Expires April 7, 2010                [Page 92]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:b@example.com
      ATTENDEE;ROLE=CHAIR;STATUS=ACCEPTED:mailto:b@example.com
      ATTENDEE;CUTYPE=INDIVIDUAL:mailto:c@example.com
      ATTENDEE;CUTYPE=INDIVIDUAL:mailto:d@example.com
      DTSTAMP:19970611T190000Z
      DTSTART:19970701T200000Z
      DTEND:19970701T203000Z
      RRULE:FREQ=WEEKLY
      SUMMARY:Phone Conference
      UID:123456@example.com
      SEQUENCE:1
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

4.3.  Busy Time Examples

   Busy time objects can be used in several ways.  First, a CU may
   request busy time from another CU for a specific range of time.  That
   request can be answered with a busy time Reply.  Additionally, a CU
   may simply publish their busy time for a given interval and point
   other CUs to the published location.  The following examples outline
   both scenarios.

4.3.1.  Publish Busy Time

   Individual "A" publishes busy time for one week.

Daboo                     Expires April 7, 2010                [Page 93]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      METHOD:PUBLISH
      BEGIN:VFREEBUSY
      DTSTAMP:19980101T124100Z
      ORGANIZER:mailto:a@example.com
      DTSTART:19980101T124200Z
      DTEND:19980108T124200Z
      FREEBUSY:19980101T180000Z/19980101T190000Z
      FREEBUSY:19980103T020000Z/19980103T050000Z
      FREEBUSY:19980107T020000Z/19980107T050000Z
      FREEBUSY:19980113T000000Z/19980113T010000Z
      FREEBUSY:19980115T190000Z/19980115T200000Z
      FREEBUSY:19980115T220000Z/19980115T230000Z
      FREEBUSY:19980116T013000Z/19980116T043000Z
      END:VFREEBUSY
      END:VCALENDAR

4.3.2.  Request Busy Time

   Individual "A" requests busy time from individuals "B", "C".
   Individual "B" and "C" replies with busy time data to individual "A".
   The following table illustrates the sequence of messages that would
   be exchanged between these individuals.

   +----------------------+--------------------+-----------------------+
   | Action               | "Organizer"        | Attendee              |
   +----------------------+--------------------+-----------------------+
   | Initiate a busy time | "A" sends          |                       |
   | request              | "REQUEST" message  |                       |
   |                      | to "B" and "C"     |                       |
   |                      |                    |                       |
   | Reply to the "BUSY"  |                    | "B" sends a "REPLY"   |
   | request with "BUSY"  |                    | message to "A" with   |
   | time data            |                    | busy time data        |
   +----------------------+--------------------+-----------------------+

   "A" sends a "BUSY-REQUEST" to "B" and "C" for busy time

Daboo                     Expires April 7, 2010                [Page 94]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VFREEBUSY
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      ATTENDEE:mailto:c@example.com
      DTSTAMP:19970613T190000Z
      DTSTART:19970701T080000Z
      DTEND:19970701T200000
      UID:calsrv.example.com-873970198738777@example.com
      END:VFREEBUSY
      END:VCALENDAR

4.3.3.  Reply To A Busy Time Request

   "B" sends a "REPLY" method type of a "VFREEBUSY" calendar component
   to "A"

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REPLY
      VERSION:2.0
      BEGIN:VFREEBUSY
      ORGANIZER:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      DTSTART:19970701T080000Z
      DTEND:19970701T200000Z
      UID:calsrv.example.com-873970198738777@example.com
      FREEBUSY:19970701T090000Z/PT1H,19970701T140000Z/PT30M
      DTSTAMP:19970613T190030Z
      END:VFREEBUSY
      END:VCALENDAR

   "B" is busy from 09:00 to 10:00 and from 14:00 to 14:30.

4.4.  Recurring Event and Time Zone Examples

4.4.1.  A Recurring Event Spanning Time Zones

   This event describes a weekly phone conference.  The "Attendees" are
   each in a different time zone.

Daboo                     Expires April 7, 2010                [Page 95]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VTIMEZONE
      TZID:America-SanJose
      TZURL:http://example.com/tz/America-SanJose
      BEGIN:STANDARD
      DTSTART:19671029T020000
      RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
      TZOFFSETFROM:-0700
      TZOFFSETTO:-0800
      TZNAME:PST
      END:STANDARD
      BEGIN:DAYLIGHT
      DTSTART:19870405T020000
      RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
      TZOFFSETFROM:-0800
      TZOFFSETTO:-0700
      TZNAME:PDT
      END:DAYLIGHT
      END:VTIMEZONE
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;
       CUTYPE=INDIVIDUAL:a@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:b@example.fr
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:c@example.jp
      DTSTAMP:19970613T190030Z
      DTSTART;TZID=America-SanJose:19970701T140000
      DTEND;TZID=America-SanJose:19970701T150000
      RRULE:FREQ=WEEKLY;COUNT=20;WKST=SU;BYDAY=TU
      RDATE;TZID=America-SanJose:19970910T140000
      EXDATE;TZID=America-SanJose:19970909T140000
      EXDATE;TZID=America-SanJose:19971028T140000
      SUMMARY:Weekly Phone Conference
      UID:calsrv.example.com-873970198738777@example.com
      SEQUENCE:0
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

   The first component of this iCalendar object is the time zone
   component.  The "DTSTART" date coincides with the first instance of
   the RRULE property.

   The recurring meeting is defined in a particular time zone,

Daboo                     Expires April 7, 2010                [Page 96]
Internet-Draft                    iTIP                      October 2009

   presumably that of the originator.  The client for each "Attendee"
   has the responsibility of determining the recurrence time in the
   "Attendee's" time zone.

   The repeating event starts on Tuesday, July 1, 1997 at 2:00pm PDT
   (UTC-7).  "Attendee" B@example.fr is in France where the local time
   on this date is 9 hours ahead of PDT or 23:00 CEST (UTC+2).
   "Attendee" C@example.jp is in Japan where local time is 16 hours
   ahead of PDT or Wednesday, July 2 at 06:00 JST (UTC+9).  The event
   repeats weekly on Tuesdays (in PST/PDT).  The "RRULE" property
   results in 20 instances.  The last instance falls on Tuesday,
   November 11, 1997 2:00pm PST.  The "RDATE" property adds another
   instance: WED, 10-SEP-1997 2:00 PM PDT.

   There are also two exception dates to the recurrence rule.  The first
   one is:

   o  TUE, 09-SEP-1997 14:00 PDT (UTC-7)
   o  TUE, 09-SEP-1997 23:00 CEST (UTC+2)
   o  WED, 10-SEP-1997 06:00 JST (UTC+9)

   and the second is:

   o  TUE, 28-OCT-1997 14:00 PST (UTC-8)
   o  TUE, 28-OCT-1997 23:00 CET (UTC+1)
   o  WED, 29-OCT-1997 07:00 JST (UTC+9)

4.4.2.  Modify A Recurring Instance

   In this example the "Organizer" issues a recurring meeting.  Later
   the "Organizer" changes an instance of the event by changing the
   "DTSTART" property.  Note the use of "RECURRENCE-ID" property and
   "SEQUENCE" property in the second request.

   Original Request:

Daboo                     Expires April 7, 2010                [Page 97]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      METHOD:REQUEST
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:guid-1@example.com
      SEQUENCE:0
      RRULE:FREQ=MONTHLY;BYMONTHDAY=1;UNTIL=19980901T210000Z
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      ATTENDEE:mailto:c@example.com
      ATTENDEE:mailto:d@example.com
      DESCRIPTION:IETF-C&S Conference Call
      CLASS:PUBLIC
      SUMMARY:IETF Calendaring Working Group Meeting
      DTSTART:19970601T210000Z
      DTEND:19970601T220000Z
      LOCATION:Conference Call
      DTSTAMP:19970526T083000Z
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

   The event request below is to change the time of a specific instance.
   This changes the July 1st instance to July 3rd.

#x27;t bother with this nuance.

   '6'  'processing-stopped':  The job has stopped while processing
           for any number of reasons and will return to the
           'processing' state as soon as the reasons are no longer
           present.

           The job's "job-state-reason" attribute MAY indicate why
           the job has stopped processing.  For example, if the
           output device is stopped, the 'printer-stopped' value MAY
           be included in the job's "job-state-reasons" attribute.

           Note:  When an output device is stopped, the device
           usually indicates its condition in human readable form
           locally at the device.  A client can obtain more complete
           device status remotely by querying the Printer object's
           "printer-state", "printer-state-reasons" and "printer-
           state-message" attributes.

   '7'  'canceled':  The job has been canceled by a Cancel-Job
           operation and the Printer object has completed canceling

Hastings, et al.            Standards Track                   [Page 110]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

           the job and all job status attributes have reached their
           final values for the job.  While the Printer object is
           canceling the job, the job remains in its current state,
           but the job's "job-state-reasons" attribute SHOULD
           contain the 'processing-to-stop-point' value and one of
           the 'canceled-by-user', 'canceled-by-operator', or
           'canceled-at-device' value.  When the job moves to the
           'canceled' state, the  'processing-to-stop-point' value,
           if present, MUST be removed, but the 'canceled-by-xxx',
           if present, MUST remain.

   '8'  'aborted':  The job has been aborted by the system, usually
           while the job was in the 'processing' or 'processing-
           stopped' state and the Printer has completed aborting the
           job and all job status attributes have reached their
           final values for the job.  While the Printer object is
           aborting the job, the job remains in its current state,
           but the job's "job-state-reasons" attribute SHOULD
           contain the 'processing-to-stop-point' and 'aborted-by-
           system' values.  When the job moves to the 'aborted'
           state, the  'processing-to-stop-point' value, if present,
           MUST be removed, but the 'aborted-by-system' value, if
           present, MUST remain.

   '9'  'completed':  The job has completed successfully or with
           warnings or errors after processing and all of the job
           media sheets have been successfully stacked in the
           appropriate output bin(s) and all job status attributes
           have reached their final values for the job.  The job's
           "job-state-reasons" attribute SHOULD contain one of:
           'completed-successfully', 'completed-with-warnings', or
           'completed-with-errors' values.

   The final value for this attribute MUST be one of: 'completed',
   'canceled', or 'aborted' before the Printer removes the job
   altogether.  The length of time that jobs remain in the 'canceled',
   'aborted', and 'completed' states depends on implementation.  See
   section 4.3.7.2.

   The following figure shows the normal job state transitions.

                                                      +----> canceled
                                                     /
       +----> pending --------> processing ---------+------> completed
       |         ^                   ^               \
   --->+         |                   |                +----> aborted
       |         v                   v               /
       +----> pending-held    processing-stopped ---+

Hastings, et al.            Standards Track                   [Page 111]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   Normally a job progresses from left to right.  Other state
   transitions are unlikely, but are not forbidden.  Not shown are the
   transitions to the 'canceled' state from the 'pending', 'pending-
   held', and 'processing-stopped' states.

   Jobs reach one of the three terminal states: 'completed', 'canceled',
   or 'aborted', after the jobs have completed all activity, including
   stacking output media, after the jobs have completed all activity,
   and all job status attributes have reached their final values for the
   job.

4.3.7.1 Forwarding Servers

   As with all other IPP attributes, if the implementation cannot
   determine the correct value for this attribute, it SHOULD respond
   with the out-of-band value 'unknown' (see section 4.1) rather than
   try to guess at some possibly incorrect value and give the end user
   the wrong impression about the state of the Job object.  For example,
   if the implementation is just a gateway into some printing system
   from which it can normally get status, but temporarily is unable,
   then the implementation should return the 'unknown' value.  However,
   if the implementation is a gateway to a printing system that never
   provides detailed status about the print job, the implementation MAY
   set the IPP Job object's state  to 'completed', provided that it also
   sets the 'queued-in-device' value in the job's "job-state-reasons"
   attribute (see section 4.3.8).

4.3.7.2 Partitioning of Job States

   This section partitions the 7 job states into phases:  Job Not
   Completed, Job Retention, Job History, and Job Removal.  This section
   also explains the 'job-restartable' value of the "job-state-reasons"
   Job Description attribute for use with the Restart-Job operation.

   Job Not Completed:  When a job is in the 'pending', 'pending-held',
   'processing', or 'processing-stopped' states, the job is not
   completed.

   Job Retention:  When a job enters one of the three terminal job
   states:  'completed', 'canceled', or 'aborted', the IPP Printer
   object MAY "retain" the job in a restartable condition for an
   implementation-defined time period.  This time period MAY be zero
   seconds and MAY depend on the terminal job state.  This phase is
   called Job Retention.  While in the Job Retention phase, the job's
   document data is retained and a client may restart the job using the
   Restart-Job operation.  If the IPP object supports the Restart-Job

Hastings, et al.            Standards Track                   [Page 112]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   operation, then it SHOULD indicate that the job is restartable by
   adding the 'job-restartable' value to the job's "job-state-reasons"
   attribute (see Section 4.3.8) during the Job Retention phase.

   Job History:  After the Job Retention phase expires for a job, the
   Printer object deletes the document data for the job and the job
   becomes part of the Job History.  The Printer object MAY also delete
   any number of the job attributes.  Since the job is no longer
   restartable, the Printer object MUST remove the 'job-restartable'
   value from the job's "job-state-reasons" attribute, if present.

   Job Removal:  After the job has remained in the Job History for an
   implementation-defined time, such as when the number of jobs exceeds
   a fixed number or after a fixed time period (which MAY be zero
   seconds), the IPP Printer removes the job from the system.

   Using the Get-Jobs operation and supplying the 'not-completed' value
   for the "which-jobs" operation attribute, a client is requesting jobs
   in the Job Not Completed phase.  Using the Get-Jobs operation and
   supplying the 'completed' value for the "which-jobs" operation
   attribute, a client is requesting jobs in the Job Retention and Job
   History phases.  Using the Get-Job-Attributes operation, a client is
   requesting a job in any phase except Job Removal.  After Job Removal,
   the Get-Job-Attributes and Get-Jobs operations no longer are capable
   of returning any information about a job.

4.3.8 job-state-reasons (1setOf type2 keyword)

   This REQUIRED attribute provides additional information about the
   job's current state, i.e., information that augments the value of the
   job's "job-state" attribute.

   These values MAY be used with any job state or states for which the
   reason makes sense.  Some of these value definitions indicate
   conformance requirements; the rest are OPTIONAL.  Furthermore, when
   implemented, the Printer MUST return these values when the reason
   applies and MUST NOT return them when the reason no longer applies
   whether the value of the Job's "job-state" attribute changed or not.
   When the Job does not have any reasons for being in its current
   state, the value of the Job's "job-state-reasons" attribute MUST be
   'none'.

   Note: While values cannot be added to the 'job-state' attribute
   without impacting deployed clients that take actions upon receiving
   "job-state" values, it is the intent that additional "job-state-
   reasons" values can be defined and registered without impacting such
   deployed clients.  In other words, the "job-state-reasons" attribute
   is intended to be extensible.

Hastings, et al.            Standards Track                   [Page 113]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   The following standard keyword values are defined.  For ease of
   understanding, the values are presented in the order in which the
   reasons are likely to occur (if implemented), starting with the
   'job-incoming' value:

      'none':  There are no reasons for the job's current state.  This
         state reason is semantically equivalent to "job-state-reasons"
         without any value and MUST be used when there is no other
         value, since the 1setOf attribute syntax requires at least one
         value.
      'job-incoming':  Either (1) the Printer has accepted the Create-
         Job operation and is expecting additional Send-Document and/or
         Send-URI operations, or (2) the Printer is retrieving/accepting
         document data as a result of a Print-Job, Print-URI, Send-
         Document or Send-URI operation.
      'job-data-insufficient':  The Create-Job operation has been
         accepted by the Printer, but the Printer is expecting
         additional document data before it can move the job into the
         'processing' state.  If a Printer starts processing before it
         has received all data, the Printer removes the 'job-data-
         insufficient' reason, but the 'job-incoming' remains.  If a
         Printer starts processing after it has received all data, the
         Printer removes the 'job-data-insufficient' reason and the
         'job-incoming' at the same time.
      'document-access-error':  After accepting a Print-URI or Send-URI
         request, the Printer could not access one or more documents
         passed by reference.  This reason is intended to cover any file
         access problem, including file does not exist and access denied
         because of an access control problem.  The Printer MAY also
         indicate the document access error using the "job-document-
         access-errors" Job Description attribute (see section 4.3.11).
         Whether the Printer aborts the job and moves the job to the
         'aborted' job state or prints all documents that are accessible
         and moves the job to the 'completed' job state and adds the
         'completed-with-errors' value in the job's "job-state-reasons"
         attribute depends on implementation and/or site policy.  This
         value SHOULD be supported if the Print-URI or Send-URI
         operations are supported.
      'submission-interrupted':  The job was not completely submitted
         for some unforeseen reason, such as: (1) the Printer has
         crashed before the job was closed by the client, (2) the
         Printer or the document transfer method has crashed in some
         non-recoverable way before the document data was entirely
         transferred to the Printer, (3) the client crashed or failed to
         close the job before the time-out period.  See section 4.4.31.
      'job-outgoing':  The Printer is transmitting the job to the output
         device.

Hastings, et al.            Standards Track                   [Page 114]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

      'job-hold-until-specified':  The value of the job's "job-hold-
         until" attribute was specified with a time period that is still
         in the future.  The job MUST NOT be a candidate for processing
         until this reason is removed and there are no other reasons to
         hold the job.  This value SHOULD be supported if the "job-
         hold-until" Job Template attribute is supported.
      'resources-are-not-ready':  At least one of the resources needed
         by the job, such as media, fonts, resource objects, etc., is
         not ready on any of the physical printer's for which the job is
         a candidate.  This condition MAY be detected when the job is
         accepted, or subsequently while the job is pending or
         processing, depending on implementation.  The job may remain in
         its current state or be moved to the 'pending-held' state,
         depending on implementation and/or job scheduling policy.
      'printer-stopped-partly':  The value of the Printer's "printer-
         state-reasons" attribute contains the value 'stopped-partly'.
      'printer-stopped':  The value of the Printer's "printer-state"
         attribute is 'stopped'.
      'job-interpretingDaboo                     Expires April 7, 2010                [Page 98]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      METHOD:REQUEST
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:guid-1@example.com
      RECURRENCE-ID:19970701T210000Z
      SEQUENCE:1
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      ATTENDEE:mailto:c@example.com
      ATTENDEE:mailto:d@example.com
      DESCRIPTION:IETF-C&S Conference Call
      CLASS:PUBLIC
      SUMMARY:IETF Calendaring Working Group Meeting
      DTSTART:19970703T210000Z
      DTEND:19970703T220000Z
      LOCATION:Conference Call
      DTSTAMP:19970626T093000Z
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

4.4.3.  Cancel an Instance

   In this example the "Organizer" of a recurring event deletes the
   August 1st instance.

      BEGIN:VCALENDAR
      METHOD:CANCEL
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:guid-1@example.com
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      ATTENDEE:mailto:c@example.com
      ATTENDEE:mailto:d@example.com
      RECURRENCE-ID:19970801T210000Z
      SEQUENCE:2
      STATUS:CANCELLED
      DTSTAMP:19970721T093000Z
      END:VEVENT
      END:VCALENDAR

Daboo                     Expires April 7, 2010                [Page 99]
Internet-Draft                    iTIP                      October 2009

4.4.4.  Cancel Recurring Event

   In this example the "Organizer" wishes to cancel the entire recurring
   event and any exceptions.

      BEGIN:VCALENDAR
      METHOD:CANCEL
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:guid-1@example.com
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      ATTENDEE:mailto:c@example.com
      ATTENDEE:mailto:d@example.com
      DTSTAMP:19970721T103000Z
      STATUS:CANCELLED
      SEQUENCE:3
      END:VEVENT
      END:VCALENDAR

4.4.5.  Change All Future Instances

   This example changes the meeting location from a conference call to
   Seattle starting September 1 and extends to all future instances.

Daboo                     Expires April 7, 2010               [Page 100]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      METHOD:REQUEST
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:guid-1@example.com
      RECURRENCE-ID;THISANDFUTURE:19970901T210000Z
      SEQUENCE:3
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      ATTENDEE;RSVP=TRUE:mailto:c@example.com
      ATTENDEE;RSVP=TRUE:mailto:d@example.com
      DESCRIPTION:IETF-C&S Discussion
      CLASS:PUBLIC
      SUMMARY:IETF Calendaring Working Group Meeting
      DTSTART:19970901T210000Z
      DTEND:19970901T220000Z
      LOCATION:Building 32, Microsoft, Seattle, WA
      DTSTAMP:19970526T083000Z
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

4.4.6.  Add A New Instance To A Recurring Event

   This example adds a one-time additional instance to the recurring
   event.  "Organizer" adds a second July meeting on the 15th.

Daboo                     Expires April 7, 2010               [Page 101]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      METHOD:ADD
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:123456789@example.com
      SEQUENCE:4
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      ATTENDEE;RSVP=TRUE:mailto:c@example.com
      ATTENDEE;RSVP=TRUE:mailto:d@example.com
      DESCRIPTION:IETF-C&S Conference Call
      CLASS:PUBLIC
      SUMMARY:IETF Calendaring Working Group Meeting
      DTSTART:19970715T210000Z
      DTEND:19970715T220000Z
      LOCATION:Conference Call
      DTSTAMP:19970629T093000Z
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

4.4.7.  Add A New Series of Instances To A Recurring Event

   The scenario for this example involves an ongoing meeting, originally
   set up to occur every Tuesday.  The "Organizer" later decides that
   the meetings need to be on Tuesdays and Thursdays.

   The original event:

Daboo                     Expires April 7, 2010               [Page 102]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      METHOD:REQUEST
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:123456789@example.com
      SEQUENCE:0
      RRULE:WKST=SU;BYDAY=TU;FREQ=WEEKLY
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      SUMMARY:Review Accounts
      DTSTART:19980303T210000Z
      DTEND:19980303T220000Z
      LOCATION:The White Room
      DTSTAMP:19980301T093000Z
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

   The entire event can be rescheduled using a "REQUEST".  This is done
   by using the "UID" of the event to reschedule and including the
   modified "RRULE".  Note, that since this is an entire rescheduling of
   the event, any instance-specific information will be lost, unless
   explicitly included with the update "REQUEST".

      BEGIN:VCALENDAR
      METHOD:REQUEST
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:123456789@example.com
      SEQUENCE:7
      RRULE:WKST=SU;BYDAY=TU,TH;FREQ=WEEKLY
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      SUMMARY:Review Accounts
      DTSTART:19980303T210000Z
      DTEND:19980303T220000Z
      DTSTAMP:19980303T193000Z
      LOCATION:The White Room
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

Daboo                     Expires April 7, 2010               [Page 103]
Internet-Draft                    iTIP                      October 2009

4.4.8.  Refreshing A Recurring Event

   The next series of examples illustrate how an "Organizer" would
   respond to a "REFRESH" submitted by an "Attendee" after a series of
   instance-specific modifications.  To convey all instance-specific
   changes, the "Organizer" must provide the latest event description
   and the relevant instances.  The first three examples show the
   history including the initial "VEVENT" request and subsequent
   instance changes and finally the "REFRESH".

   Original Request:

      BEGIN:VCALENDAR
      METHOD:REQUEST
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:123456789@example.com
      SEQUENCE:0
      RDATE:19980304T180000Z
      RDATE:19980311T180000Z
      RDATE:19980318T180000Z
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      SUMMARY:Review Accounts
      DTSTART:19980304T180000Z
      DTEND:19980304T200000Z
      DTSTAMP:19980303T193000Z
      LOCATION:Conference Room A
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

   Organizer changes 2nd instance Location and Time:

Daboo                     Expires April 7, 2010               [Page 104]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      METHOD:REQUEST
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:123456789@example.com
      SEQUENCE:1
      RECURRENCE-ID:19980311T180000Z
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      SUMMARY:Review Accounts
      DTSTART:19980311T160000Z
      DTEND:19980311T180000Z
      DTSTAMP:19980306T193000Z
      LOCATION:The Small conference room
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

   Organizer adds a 4th instance of the meeting using the "ADD" method

      BEGIN:VCALENDAR
      METHOD:ADD
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:123456789@example.com
      SEQUENCE:2
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      SUMMARY:Review Accounts
      DTSTART:19980315T180000Z
      DTEND:19980315T200000Z
      DTSTAMP:19980307T193000Z
      LOCATION:Conference Room A
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

   If "B" requests a "REFRESH", "A" responds with the following to
   capture all instance-specific data.  In this case both the initial
   request and an additional "VEVENT" that specifies the instance-
   specific data are included.  Because these are both of the same type

Daboo                     Expires April 7, 2010               [Page 105]
Internet-Draft                    iTIP                      October 2009

   (they are both "VEVENTS"), they can be conveyed in the same iCalendar
   object.

      BEGIN:VCALENDAR
      METHOD:REQUEST
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:123456789@example.com
      SEQUENCE:2
      RDATE:19980304T180000Z
      RDATE:19980311T160000Z
      RDATE:19980315T180000Z
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      SUMMARY:Review Accounts
      DTSTART:19980304T180000Z
      DTEND:19980304T200000Z
      DTSTAMP:19980303T193000Z
      LOCATION:Conference Room A
      STATUS:CONFIRMED
      END:VEVENT
      BEGIN:VEVENT
      SEQUENCE:2
      RECURRENCE-ID:19980311T160000Z
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      SUMMARY:Review Accounts
      DTSTART:19980311T160000Z
      DTEND:19980304T180000Z
      DTSTAMP:19980306T193000Z
      LOCATION:The Small conference room
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

4.4.9.  Counter An Instance Of A Recurring Event

   In this example one of the "Attendees" counters the "DTSTART"
   property of the proposed second July meeting.

Daboo                     Expires April 7, 2010               [Page 106]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      METHOD:COUNTER
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:guid-1@example.com
      RECURRENCE-ID:19970715T210000Z
      SEQUENCE:4
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;RSVP=TRUE:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      ATTENDEE;RSVP=TRUE:mailto:c@example.com
      ATTENDEE;RSVP=TRUE:mailto:d@example.com
      DESCRIPTION:IETF-C&S Conference Call
      CLASS:PUBLIC
      SUMMARY:IETF Calendaring Working Group Meeting
      DTSTART:19970715T220000Z
      DTEND:19970715T230000Z
      LOCATION:Conference Call
      COMMENT:May we bump this by an hour? I have a conflict
      DTSTAMP:19970629T094000Z
      END:VEVENT
      END:VCALENDAR

4.4.10.  Error Reply To A Request

   The following example illustrates a scenario where a meeting is
   proposed containing an unsupported property and a bad property.

   Original Request

Daboo                     Expires April 7, 2010               [Page 107]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      METHOD:REQUEST
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:guid-1@example.com
      SEQUENCE:0
      RRULE:FREQ=MONTHLY;BYMONTHDAY=1
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      ATTENDEE;RSVP=TRUE:mailto:c@example.com
      ATTENDEE;RSVP=TRUE:mailto:d@example.com
      DESCRIPTION:IETF-C&S Conference Call
      CLASS:PUBLIC
      SUMMARY:IETF Calendaring Working Group Meeting
      DTSTART:19970601T210000Z
      DTEND:19970601T220000Z
      DTSTAMP:19970602T094000Z
      LOCATION:Conference Call
      STATUS:CONFIRMED
      FOO:BAR
      END:VEVENT
      END:VCALENDAR

   Response from "B" to indicate that RRULE is not supported and an
   unrecognized property was encountered

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REPLY
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      REQUEST-STATUS:3.0;Invalid Property Name;FOO
      UID:guid-1@example.com
      SEQUENCE:0
      DTSTAMP:19970603T094000Z
      END:VEVENT
      END:VCALENDAR

Daboo                     Expires April 7, 2010               [Page 108]
Internet-Draft                    iTIP                      October 2009

4.5.  Group To-do Examples

   Individual "A" creates a group task in which individuals "A", "B",
   "C" and "D" will participate.  Individual "B" confirms acceptance of
   the task.  Individual "C" declines the task.  Individual "D"
   tentatively accepts the task.  The following table illustrates the
   sequence of messages that would be exchanged between these
   individuals.  Individual "A" then issues a "REQUEST" method to obtain
   the status of the to-do from each participant.  The response
   indicates the individual "Attendee's" completion status.  The table
   below illustrates the message flow.

   +--------------+------------------------+---------------------------+
   | Action       | "Organizer"            | Attendee                  |
   +--------------+------------------------+---------------------------+
   | Initiate a   | "A" sends a REQUEST    |                           |
   | to-do        | message to "B", "C",   |                           |
   | request      | and "D"                |                           |
   |              |                        |                           |
   | Accept the   |                        | "B" sends a "REPLY"       |
   | to-do        |                        | message to "A" with its   |
   | request      |                        | "PARTSTAT" parameter set  |
   |              |                        | to "ACCEPTED".            |
   |              |                        |                           |
   | Decline the  |                        | "C" sends a REPLY message |
   | to-do        |                        | to "A" with its           |
   | request      |                        | "PARTSTAT" parameter set  |
   |              |                        | to "DECLINED".            |
   |              |                        |                           |
   | Tentatively  |                        | "D" sends a REPLY message |
   | accept the   |                        | to "A" with its           |
   | to-do        |                        | "PARTSTAT" parameter set  |
   | request      |                        | to "TENTATIVE".           |
   |              |                        |                           |
   | Check        | "A" sends a REQUEST    |                           |
   | attendee     | message to "B" and "D" |                           |
   | completion   | with current           |                           |
   | status       | information.           |                           |
   |              |                        |                           |
   | Attendee     |                        | "B" sends a "REPLY"       |
   | indicates    |                        | message indicating        |
   | percent      |                        | percent complete          |
   | complete     |                        |                           |
   |              |                        |                           |
   | Attendee     |                        | "D" sends a "REPLY"       |
   | indicates    |                        | message indicating        |
   | completion   |                        | completion                |
   +--------------+------------------------+---------------------------+

Daboo                     Expires April 7, 2010               [Page 109]
Internet-Draft                    iTIP                      October 2009

4.5.1.  A VTODO Request

   A sample "REQUEST" for a "VTODO" calendar component that "A" sends to
   "B", "C", and "D&': Job is in the 'processing' state, but more
         specifically, the Printer is interpreting the document data.
      'job-queued': Job is in the 'processing' state, but more
         specifically, the Printer has queued the document data.
      'job-transforming': Job is in the 'processing' state, but more
         specifically, the Printer is interpreting document data and
         producing another electronic representation.
      'job-queued-for-marker': Job is in any of the 'pending-held',
         'pending', or 'processing' states, but more specifically, the
         Printer has completed enough processing of the document to be
         able to start marking and the job is waiting for the marker.
         Systems that require human intervention to release jobs using
         the Release-Job operation, put the job into the 'pending-held'
         job state.  Systems that automatically select a job to use the
         marker put the job into the  'pending' job state or keep the
         job in the 'processing' job state while waiting for the marker,
         depending on implementation.  All implementations put the job
         into (or back into) the 'processing' state when marking does
         begin.
      'job-printing':  The output device is marking media. This value is
         useful for Printers which spend a great deal of time processing
         (1) when no marking is happening and then want to show that
         marking is now happening or (2) when the job is in the process
         of being canceled or aborted while the job remains in the
         'processing' state, but the marking has not yet stopped so that
         impression or sheet counts are still increasing for the job.

Hastings, et al.            Standards Track                   [Page 115]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

      'job-canceled-by-user':  The job was canceled by the owner of the
         job using the Cancel-Job request, i.e., by a user whose
         authenticated identity is the same as the value of the
         originating user that created the Job object, or by some other
         authorized end-user, such as a member of the job owner's
         security group.  This value SHOULD be supported.
      'job-canceled-by-operator':  The job was canceled by the operator
         using the Cancel-Job request, i.e., by a user who has been
         authenticated as having operator privileges (whether local or
         remote).  If the security policy is to allow anyone to cancel
         anyone's job, then this value may be used when the job is
         canceled by other than the owner of the job.  For such a
         security policy, in effect, everyone is an operator as far as
         canceling jobs with IPP is concerned.  This value SHOULD be
         supported if the implementation permits canceling by other than
         the owner of the job.
      'job-canceled-at-device':  The job was canceled by an unidentified
         local user, i.e., a user at a console at the device.  This
         value SHOULD be supported if the implementation supports
         canceling jobs at the console.
      'aborted-by-system':  The job (1) is in the process of being
         aborted, (2) has been aborted by the system and placed in the
         'aborted' state, or (3) has been aborted by the system and
         placed in the 'pending-held' state, so that a user or operator
         can manually try the job again.  This value SHOULD be
         supported.
      'unsupported-compression': The job was aborted by the system
         because the Printer determined while attempting to decompress
         the document-data's that the compression is actually not among
         those supported by the Printer.  This value MUST be supported,
         since "compressions is a REQUIRED operation attribute.
      'compression-error': The job was aborted by the system because the
         Printer encountered an error in the document-data while
         decompressing it.  If the Printer posts this reason, the
         document-data has already passed any tests that would have led
         to the 'unsupported-compression' job-state-reason.
      'unsupported-document-format': The job was aborted by the system
         because the document-data's document-format is not among those
         supported by the Printer.  If the client specifies the
         document-format as 'application/octet-stream', the printer MAY
         abort the job and post this reason even though the format is a
         member of the "document-format-supported" printer attribute,
         but not among the auto-sensed document-formats.  This value
         MUST be supported, since "document-format" is a REQUIRED
         operation attribute.

Hastings, et al.            Standards Track                   [Page 116]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

      'document-format-error': The job was aborted by the system because
         the Printer encountered an error in the document-data while
         processing it.  If the Printer posts this reason, the
         document-data has already passed any tests that would have led
         to the 'unsupported-document-format' job-state-reason.
      'processing-to-stop-point':  The requester has issued a Cancel-Job
         operation or the Printer object has aborted the job, but is
         still performing some actions on the job until a specified stop
         point occurs or job termination/cleanup is completed.

         If the implementation requires some measurable time to cancel
         the job in the 'processing' or 'processing-stopped' job states,
         the IPP object MUST use this value to indicate that the Printer
         object is still performing some actions on the job while the
         job remains in the 'processing' or 'processing-stopped' state.
         After all the job's job description attributes have stopped
         incrementing, the Printer object moves the job from the
         'processing' state to the 'canceled' or
         'aborted' job states.

      'service-off-line':  The Printer is off-line and accepting no
         jobs.  All 'pending' jobs are put into the 'pending-held'
         state.  This situation could be true if the service's or
         document transform's input is impaired or broken.
      'job-completed-successfully':  The job completed successfully.
         This value SHOULD be supported.
      'job-completed-with-warnings':  The job completed with warnings.
         This value SHOULD be supported if the implementation detects
         warnings.
      'job-completed-with-errors':  The job completed with errors (and
         possibly warnings too).  This value SHOULD be supported if the
         implementation detects errors.
      'job-restartable' - This job is retained (see section 4.3.7.2) and
         is currently able to be restarted using the Restart-Job
         operation (see section 3.3.7).  If 'job-restartable' is a value
         of the job's 'job-state-reasons' attribute, then the IPP object
         MUST accept a Restart-Job operation for that job.  This value
         SHOULD be supported if the Restart-Job operation is supported.
      'queued-in-device': The job has been forwarded to a device or
         print system that is unable to send back status.  The Printer
         sets the job's "job-state " attribute to 'completed'  and adds
         the 'queued-in-device' value to the job's "job-state-reasons"
         attribute to indicate that the Printer has no additional
         information about the job and never will have any better
         information.  See section 4.3.7.1.

Hastings, et al.            Standards Track                   [Page 117]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

4.3.9 job-state-message (text(MAX))

   This attribute specifies information about the quot;.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VTODO
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR:mailto:a@example.com
      ATTENDEE;RSVP=TRUE:mailto:b@example.com
      ATTENDEE;RSVP=TRUE:mailto:c@example.com
      ATTENDEE;RSVP=TRUE:mailto:d@example.com
      DTSTART:19970701T170000Z
      DUE:19970722T170000Z
      PRIORITY:1
      SUMMARY:Create the requirements document
      UID:calsrv.example.com-873970198738777-00@example.com
      SEQUENCE:0
      DTSTAMP:19970717T200000Z
      STATUS:NEEDS-ACTION
      END:VTODO
      END:VCALENDAR

4.5.2.  A VTODO Reply

   "B" accepts the to-do.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REPLY
      VERSION:2.0
      BEGIN:VTODO
      ORGANIZER:mailto:a@example.com
      ATTENDEE;PARTSTAT=ACCEPTED:mailto:b@example.com
      UID:calsrv.example.com-873970198738777-00@example.com
      COMMENT:I'll send you my input by e-mail
      SEQUENCE:0
      DTSTAMP:19970717T203000Z
      REQUEST-STATUS:2.0;Success
      END:VTODO
      END:VCALENDAR

Daboo                     Expires April 7, 2010               [Page 110]
Internet-Draft                    iTIP                      October 2009

   "B" could have declined the TODO or indicated tentative acceptance by
   setting the "PARTSTAT" property parameter sequence to "DECLINED" or
   "TENTATIVE", respectively.

4.5.3.  A VTODO Request for Updated Status

   "A" requests status from all "Attendees".

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VTODO
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR:mailto:a@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:d@example.com
      UID:calsrv.example.com-873970198738777-00@example.com
      SUMMARY:Create the requirements document
      PRIORITY:1
      SEQUENCE:0
      STATUS:IN-PROCESS
      DTSTART:19970701T170000Z
      DTSTAMP:19970717T230000Z
      END:VTODO
      END:VCALENDAR

4.5.4.  A Reply: Percent-Complete

   A reply indicating the task being worked on and that "B" is 75%
   complete with "B's" part of the assignment.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REPLY
      VERSION:2.0
      BEGIN:VTODO
      ORGANIZER:mailto:a@example.com
      ATTENDEE;PARTSTAT=IN-PROCESS:mailto:b@example.com
      PERCENT-COMPLETE:75
      UID:calsrv.example.com-873970198738777-00@example.com
      DTSTAMP:19970717T233000Z
      SEQUENCE:0
      END:VTODO
      END:VCALENDAR

Daboo                     Expires April 7, 2010               [Page 111]
Internet-Draft                    iTIP                      October 2009

4.5.5.  A Reply: Completed

   A reply indicating that "D" completed "D's" part of the assignment.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REPLY
      VERSION:2.0
      BEGIN:VTODO
      ORGANIZER:mailto:a@example.com
      ATTENDEE;PARTSTAT=COMPLETED:mailto:d@example.com
      UID:calsrv.example.com-873970198738777-00@example.com
      DTSTAMP:19970717T233000Z
      SEQUENCE:0
      END:VTODO
      END:VCALENDAR

4.5.6.  An Updated VTODO Request

   Organizer "A" resends the "VTODO" calendar component.  "A" sets the
   overall completion for the to-do at 40%.

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VTODO
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:mailto:b@example.com
      ATTENDEE;PARTSTAT=COMPLETED;CUTYPE=INDIVIDUAL:mailto:d@example.com
      DTSTART:19970701T170000Z
      DUE:19970722T170000Z
      PRIORITY:1
      SUMMARY:Create the requirements document
      UID:calsrv.example.com-873970198738777-00@example.com
      SEQUENCE:1
      DTSTAMP:19970718T100000Z
      STATUS:IN-PROCESS
      PERCENT-COMPLETE:40
      END:VTODO
      END:VCALENDAR

Daboo                     Expires April 7, 2010               [Page 112]
Internet-Draft                    iTIP                      October 2009

4.5.7.  Recurring VTODOs

   The following examples relate to recurring "VTODO" calendar
   components.

4.5.7.1.  Request for a Recurring VTODO

   In this example "A" sends a recurring "VTODO" calendar component to
   "B" and "D".

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REQUEST
      VERSION:2.0
      BEGIN:VTODO
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR:mailto:a@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:b@example.com
      ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:d@example.com
      RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR
      DTSTART:19980101T100000Z
      DUE:19980103T100000Z
      SUMMARY:Send Status Reports to Area Managers
      UID:calsrv.example.com-873970198738777-00@example.com
      SEQUENCE:0
      DTSTAMP:19970717T200000Z
      STATUS:NEEDS-ACTION
      PRIORITY:1
      END:VTODO
      END:VCALENDAR

4.5.7.2.  Replying to an instance of a recurring VTODO

   In this example "B" updates "A" on a single instance of the "VTODO"
   calendar component.

Daboo                     Expires April 7, 2010               [Page 113]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REPLY
      VERSION:2.0
      BEGIN:VTODO
      ATTENDEE;PARTSTAT=IN-PROCESS:mailto:b@example.com
      PERCENT-COMPLETE:75
      UID:calsrv.example.com-873970198738777-00@example.com
      DTSTAMP:19970717T233000Z
      RECURRENCE-ID:19980101T170000Z
      SEQUENCE:1
      END:VTODO
      END:VCALENDAR

4.6.  Journal Examples

   The iCalendar object below describes a single journal entry for
   October 2, 1997.  The "RELATED-TO" property references the phone
   conference event for which minutes were taken.

      BEGIN:VCALENDAR
      METHOD:PUBLISH
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VJOURNAL
      DTSTART:19971002T200000Z
      DTSTAMP:19970717T233100Z
      ORGANIZER:mailto:a@example.com
      SUMMARY:Phone conference minutes
      DESCRIPTION:The editors meeting was held on October 1, 1997.
       Details are in the attached document.
      UID:0981234-1234234-2410@example.com
      RELATED-TO:0981234-1234234-2402-35@example.com
      ATTACH:ftp://ftp.example.com/pub/ed/minutes100197.txt
      END:VJOURNAL
      END:VCALENDAR

4.7.  Other Examples

4.7.1.  Event Refresh

   Refresh the event with "UID" property value of
   "guid-1-12345@example.com":

Daboo                     Expires April 7, 2010               [Page 114]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REFRESH
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      ATTENDEE:mailto:c@example.com
      ATTENDEE:mailto:d@example.com
      UID:guid-1-12345@example.com
      DTSTAMP:19970603T094000
      END:VEVENT
      END:VCALENDAR

4.7.2.  Bad RECURRENCE-ID

   Component instances are identified by the combination of "UID",
   "RECURRENCE-ID", and "SEQUENCE".  When an "Organizer" sends an iTIP
   message to an "Attendee", there are three cases in which an instance
   cannot be found.  They are:

   1.  The component with the referenced "UID" and "RECURRENCE-ID" has
       been found but the "SEQUENCE" number in the calendar store does
       not match that of the iTIP message.
   2.  The component with the referenced "UID" has been found, the
       "SEQUENCE" numbers match, but the "RECURRENCE-ID" cannot be
       found.
   3.  The "UID" and "SEQUENCE" numbers are found but the CUA does not
       support recurrences.

   In case (1), two things can happen.  If the "SEQUENCE" number of the
   "Attendee's" instance is larger than that in the "Organizer's"
   message then the "Attendee" is receiving an out-of-sequence message
   and MUST ignore it.  If the "SEQUENCE" number of the "Attendee's"
   instance is smaller, then the "Organizer" is sending out a newer
   version of the component and the "Attendee's" version needs to be
   updated.  Since one or more updates have been missed, the "Attendee"
   SHOULD send a "REFRESH" message to the "Organizer" to get an updated
   version of the event.

   In case (2), something has gone wrong.  Both the "Organizer" and the
   "Attendee" should have the same instances, but the "Attendee" does
   not have the referenced instance.  In this case the "Attendee" SHOULD
   send a "REFRESH" to the "Organizer" to get an updated version of the
   event.

Daboo                     Expires April 7, 2010               [Page 115]
Internet-Draft                    iTIP                      October 2009

   In case (3), the limitations of the "Attendee's" CUA makes it
   impossible to match an instance other than the single instance
   scheduled.  In this case, the "Attendee" need not send a "REFRESH" to
   the "Organizer".

   The example below shows a sequence in which an "Attendee" sends a
   "REFRESH" to the "Organizer".

   +-------------------------+--------------------+--------------------+
   | Action                  | "Organizer"        | Attendee           |
   +-------------------------+--------------------+--------------------+
   | Update an instance      | "A" sends          |                    |
   | request                 | "REQUEST" message  |                    |
   |                         | to "B"             |                    |
   |                         |                    |                    |
   | Attendee requests       |                    | "B" sends a        |
   | refresh because         |                    | "REFRESH" message  |
   | "RECURRENCE-ID" was not |                    | to "A"             |
   | found                   |                    |                    |
   |                         |                    |                    |
   | Refresh the entire      | "A" sends the      |                    |
   | event                   | latest copy of the |                    |
   |                         | event to "B"       |                    |
   |                         |                    |                    |
   | Attendee handles the    |                    | "B" updates to the |
   | request and updates the |                    | latest copy of the |
   | instance                |                    | meeting.           |
   +-------------------------+--------------------+--------------------+

   Request from "A":

Daboo                     Expires April 7, 2010               [Page 116]
Internet-Draft                    iTIP                      October 2009

      BEGIN:VCALENDAR
      METHOD:REQUEST
      PRODID:-//Example/ExampleCalendarClient//EN
      VERSION:2.0
      BEGIN:VEVENT
      UID:example-12345@example.com
      SEQUENCE:3
      RRULE:FREQ=WEEKLY
      RDATE;VALUE=PERIOD:19970819T210000Z/199700819T220000Z
      ORGANIZER:mailto:a@example.com
      ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      DESCRIPTION:IETF-C&S Conference Call
      SUMMARY:IETF Calendaring Working Group Meeting
      DTSTART:19970801T210000Z
      DTEND:19970801T220000Z
      RECURRENCE-ID:19970809T210000Z
      DTSTAMP:19970726T083000
      STATUS:CONFIRMED
      END:VEVENT
      END:VCALENDAR

   "B" has the event with "UID" property "example-12345@example.com" but
   "B's" "SEQUENCE" property value is "1" and the event does not have an
   instance at the specified recurrence time.  This means that "B" has
   missed at least one update and needs a new copy of the event.  "B"
   requests the latest copy of the event with the following refresh
   message:

      BEGIN:VCALENDAR
      PRODID:-//Example/ExampleCalendarClient//EN
      METHOD:REFRESH
      VERSION:2.0
      BEGIN:VEVENT
      ORGANIZER:mailto:a@example.com
      ATTENDEE:mailto:b@example.com
      UID:example-12345@example.com
      DTSTAMP:19970603T094000
      END:VEVENT
      END:VCALENDAR

Daboo                     Expires April 7, 2010               [Page 117]
Internet-Draft                    iTIP                      October 2009

5.  Application Protocol Fallbacks

5.1.  Partial Implementation

   Applications that support this specification are not required to
   support the entire protocol.  The following describes how methods and
   properties SHOULD "fallback" in applications that do not support the
   complete protocol.  If a method or property is not addressed in this
   section, it may be ignored.

5.1.1.  Event-Related Fallbacks

   +----------------+--------------------------------------------------+
   | Method         | Fallback                                         |
   +----------------+--------------------------------------------------+
   | PUBLISH        | Required                                         |
   | REQUEST        | PUBLISH                                          |
   | REPLY          | Required                                         |
   | ADD            | Required if recurrences supported, otherwise     |
   |                | reply with a REQUEST-STATUS "2.8;Success,        |
   |                | repeating event ignored.  Scheduled as a single  |
   |                | component." and schedule as a single component.  |
   | CANCEL         | Required                                         |
   | REFRESH        | Required                                         |
   | COUNTER        | Reply with "Not Supported"                       |
   | DECLINECOUNTER | Required if COUNTER is implemented for VEVENTs,  |
   |                | otherwise reply with "Not Supported"             |
   +----------------+--------------------------------------------------+

   +-----------------+-------------------------------------------------+
   | iCalendar       | Fallback                                        |
   | Property        |                                                 |
   +-----------------+-------------------------------------------------+
   | CALSCALE        | Ignore - assume GREGORIAN                       |
   | PRODID          | Ignore                                          |
   | METHOD          | Required as described in the Method list above  |
   | VERSION         | Ignore                                          |
   +-----------------+-------------------------------------------------+

   +-----------------+-------------------------------------------------+
   | Event-Related   | Fallback                                        |
   | Components      |                                                 |
   +-----------------+-------------------------------------------------+
   | VALARM          | Reply with "Not Supported"                      |
   | VTIMEZONE       | Required if any DateTime value refers to a time |
   |                 | zone.                                           |
   +-----------------+-------------------------------------------------+

Daboo                     Expires April 7, 2010               [Page 118]
Internet-Draft                    iTIP                      October 2009

   +-----------------+-------------------------------------------------+
   | Component       | Fallback                                        |
   | Property        |                                                 |
   +-----------------+-------------------------------------------------+
   | ATTACH          | Ignore                                          |
   | ATTENDEE        | Required if METHOD is REQUEST, otherwise ignore |
   | CATEGORIES      | Ignore                                          |
   | CLASS           | Ignore                                          |
   | COMMENT         | Ignore                                          |
   | COMPLETED       | Ignore                                          |
   | CONTACT         | Ignore                                          |
   | CREATED         | Ignore                                          |
   | DESCRIPTION     | Ignore                                          |
   | DURATION        | Required                                        |
   | DTSTAMP         | Required                                        |
   | DTSTART         | Required                                        |
   | DTEND           | Required                                        |
   | EXDATE          | Ignore                                          |
   | GEO             | Ignore                                          |
   | LAST-MODIFIED   | Ignore                                          |
   | LOCATION        | Required                                        |
   | ORGANIZER       | Required if METHOD is REQUEST, otherwise ignore |
   | PRIORITY        | Ignore                                          |
   | RELATED-TO      | Ignore                                          |
   | RDATE           | Ignore                                          |
   | RRULE           | Ignore - assume the first instance occurs on    |
   |                 | the DTSTART property.  If implemented,          |
   |                 | VTIMEZONE MUST also be implemented.             |
   | RECURRENCE-ID   | Required if RRULE is implemented, otherwise     |
   |                 | Ignore                                          |
   | REQUEST-STATUS  | Required                                        |
   | RESOURCES       | Ignore                                          |
   | SEQUENCE        | Required                                        |
   | STATUS          | Ignore                                          |
   | SUMMARY         | Ignore                                          |
   | TRANSP          | Required if FREEBUSY is implemented, otherwise  |
   |                 | Ignore                                          |
   | URL             | Ignore                                          |
   | UID             | Required                                        |
   | X-              | Ignore                                          |
   +-----------------+-------------------------------------------------+

Daboo                     Expires April 7, 2010               [Page 119]
Internet-Draft                    iTIP                      October 2009

5.1.2.  Free/Busy-Related Fallbacks

   +---------+---------------------------------------------------------+
   | Method  | Fallback                                                |
   +---------+---------------------------------------------------------+
   | PUBLISH | Required if freebusy lookups are supported, otherwise   |
   |         | reply with a REQUEST-STATUS "3.14;Unsupported           |
   |         | capability"                                             |
   | REQUEST | Required if freebusy lookups are supported, otherwise   |
   |         | reply with a REQUEST-STATUS "3.14;Unsupported           |
   |         | capability"                                             |
   | REPLY   | Required if freebusy lookups are supported, otherwise   |
   |         | reply with a REQUEST-STATUS "3.14;Unsupported           |
   |         | capability"                                             |
   +---------+---------------------------------------------------------+

   +-----------------+-------------------------------------------------+
   | iCalendar       | Fallback                                        |
   | Property        |                                                 |
   +-----------------+-------------------------------------------------+
   | CALSCALE        | Ignore - assume GREGORIAN.                      |
   | PRODID          | Ignore                                          |
   | METHOD          | Required as described in the Method list above. |
   | VERSION         | Ignore                                          |
   +-----------------+-------------------------------------------------+

   +-----------------+-------------------------------------------------+
   | Component       | Fallback                                        |
   | Property        |                                                 |
   +-----------------+-------------------------------------------------+
   | ATTENDEE        | Required if METHOD is REQUEST, otherwise ignore |
   | COMMENT         | Ignore                                          |
   | CONTACT         | Ignore                                          |
   | DTEND           | Required                                        |
   | DTSTAMP         | Required                                        |
   | DTSTART         | Required                                        |
   | DURATION        | Ignore                                          |
   | FREEBUSY        | Required                                        |
   | ORGANIZER       | Required if METHOD is REQUEST, otherwise ignore |
   | REQUEST-STATUS  | Ignore                                          |
   | UID             | Required                                        |
   | URL             | Ignore                                          |
   | X-              | Ignore                                          |
   +-----------------+-------------------------------------------------+

Daboo                     Expires April 7, 2010               [Page 120]
Internet-Draft                    iTIP                      October 2009

5.1.3.  To-Do-Related Fallbacks

   +----------------+--------------------------------------------------+
   | Method         | Fallback                                         |
   +----------------+--------------------------------------------------+
   | PUBLISH        | Required                                         |
   | REQUEST        | PUBLISH                                          |
   | REPLY          | Required                                         |
   | ADD            | Required if recurrences supported, otherwise     |
   |                | reply with a REQUEST-STATUS "2.8;Success,        |
   |                | repeating event ignored.  Scheduled as a single  |
   |                | component." and schedule as a single component.  |
   | CANCEL         | Required                                         |
   | REFRESH        | Required                                         |
   | COUNTER        | Reply with "Not Supported"                       |
   | DECLINECOUNTER | Required if COUNTER for VTODOs is implemented,   |
   |                | otherwise reply with "Not Supported"             |
   +----------------+--------------------------------------------------+

   +-----------------+-------------------------------------------------+
   | iCalendar       | Fallback                                        |
   | Property        |                                                 |
   +-----------------+-------------------------------------------------+
   | CALSCALE        | Ignore - assume GREGORIAN.                      |
   | PRODID          | Ignore                                          |
   | METHOD          | Required as described in the Method list above. |
   | VERSION         | Ignore                                          |
   +-----------------+-------------------------------------------------+

   +-----------------+-------------------------------------------------+
   | To-Do-Related   | Fallback                                        |
   | Components      |                                                 |
   +-----------------+-------------------------------------------------+
   | VALARM          | Reply with "Not Supported"                      |
   | VTIMEZONE       | Required if any DateTime value refers to a time |
   |                 | zone.                                           |
   +-----------------+-------------------------------------------------+

Daboo                     Expires April 7, 2010               [Page 121]
Internet-Draft                    iTIP                      October 2009

   +------------------+------------------------------------------------+
   | Component        | Fallback                                       |
   | Property         |                                                |
   +------------------+------------------------------------------------+
   | ATTACH           | Ignore                                         |
   | ATTENDEE         | Required if METHOD is REQUEST, otherwise       |
   |                  | ignore                                         |
   | CATEGORIES       | Ignore                                         |
   | CLASS            | Ignore                                         |
   | COMMENT          | Ignore                                         |
   | COMPLETED        | Required                                       |
   | CONTACT          | Ignore                                         |
   | CREATED          | Ignore                                         |
   | DESCRIPTION      | Required if METHOD is REQUEST, otherwise       |
   |                  | ignore                                         |
   | DUE              | Required                                       |
   | DURATION         | Required                                       |
   | DTSTAMP          | Required                                       |
   | DTSTART          | Required                                       |
   | EXDATE           | Ignore - reply with "Not Supported"            |
   | LAST-MODIFIED    | Ignore                                         |
   | LOCATION         | Ignore                                         |
   | ORGANIZER        | Required if METHOD is REQUEST, otherwise       |
   |                  | ignore                                         |
   | PERCENT-COMPLETE | Ignore                                         |
   | PRIORITY         | Required                                       |
   | RECURRENCE-ID    | Required if RRULE is implemented, otherwise    |
   |                  | Ignore                                         |
   | RELATED-TO       | Ignore                                         |
   | REQUEST-STATUS   | Ignore                                         |
   | RDATE            | Ignore                                         |
   | RRULE            | Ignore - assume the first instance occurs on   |
   |                  | the DTSTART property.  If implemented,         |
   |                  | VTIMEZONE MUST also be implemented.            |
   | RESOURCES        | Ignore                                         |
   | SEQUENCE         | Required                                       |
   | STATUS           | Required                                       |
   | SUMMARY          | Ignore                                         |
   | URL              | Ignore                                         |
   | UID              | Required                                       |
   | X-               | Ignore                                         |
   +------------------+------------------------------------------------+

Daboo                     Expires April 7, 2010               [Page 122]
Internet-Draft                    iTIP                      October 2009

5.1.4.  Journal-Related Fallbacks

   +---------+---------------------------------------------------------+
   | Method  | Fallback                                                |
   +---------+---------------------------------------------------------+
   | PUBLISH | Implementations MAY ignore the METHOD type.  The        |
   |         | REQUEST-STATUS "3.14;Unsupported capability" MUST be    |
   |         | returned.                                               |
   | ADD     | Implementations MAY ignore the METHOD type.  The        |
   |         | REQUEST-STATUS "3.14;Unsupported capability" MUST be    |
   |         | returned.                                               |
   | CANCEL  | Implementations MAY ignore the METHOD type.  The        |
   |         | REQUEST-STATUS "3.14;Unsupported capability" MUST be    |
   |         | returned.                                               |
   +---------+---------------------------------------------------------+

   +-----------------+-------------------------------------------------+
   | iCalendar       | Fallback                                        |
   | Property        |                                                 |
   +-----------------+-------------------------------------------------+
   | CALSCALE        | Ignore - assume GREGORIAN.                      |
   | PRODID          | Ignore                                          |
   | METHOD          | Required as described in the Method list above. |
   | VERSION         | Ignore                                          |
   +-----------------+-------------------------------------------------+

   +-----------------+-------------------------------------------------+
   | Journal-Related | Fallback                                        |
   | Components      |                                                 |
   +-----------------+-------------------------------------------------+
   | VTIMEZONE       | Required if any DateTime value refers to a time |
   |                 | zone                                            |
   +-----------------+-------------------------------------------------+

Daboo                     Expires April 7, 2010               [Page 123]
Internet-Draft                    iTIP                      October 2009

   +-----------------+-------------------------------------------------+
   | Component       | Fallback                                        |
   | Property        |                                                 |
   +-----------------+-------------------------------------------------+
   | ATTACH          | Ignore                                          |
   | ATTENDEE        | Ignore                                          |
   | CATEGORIES      | Ignore                                          |
   | CLASS           | Ignore                                          |
   | COMMENT         | Ignore                                          |
   | CONTACT         | Ignore                                          |
   | CREATED         | Ignore                                          |
   | DESCRIPTION     | Ignore                                          |
   | DTSTAMP         | Required                                        |
   | DTSTART         | Required                                        |
   | EXDATE          | Ignore                                          |
   | LAST-MODIFIED   | Ignore                                          |
   | ORGANIZER       | Ignore                                          |
   | RECURRENCE-ID   | Required if RRULE is implemented, otherwise     |
   |                 | Ignore                                          |
   | RELATED-TO      | Ignore                                          |
   | RDATE           | Ignore.                                         |
   | RRULE           | Ignore - assume the first instance occurs on    |
   |                 | the DTSTART property.  If implemented,          |
   |                 | VTIMEZONE MUST also be implemented.             |
   | SEQUENCE        | Required                                        |
   | STATUS          | Ignore                                          |
   | SUMMARY         | Required                                        |
   | URL             | Ignore                                          |
   | UID             | Required                                        |
   | X-              | Ignore                                          |
   +-----------------+-------------------------------------------------+

5.2.  Latency Issues

   With a store-and-forward transport, it is possible for events to
   arrive out of sequence.  That is, a "CANCEL" method may be received
   prior to receiving the associated "REQUEST" for the calendar
   component.  This section discusses a few of these scenarios.

5.2.1.  Cancellation of an Unknown Calendar Component.

   When a "CANCEL" method is received before the original "REQUEST"
   method the calendar will be unable to correlate the "UID" property of
   the cancellation with an existing calendar component.  It is
   suggested that messages that can not be correlated that also contain
   non-zero sequence numbers be held and not discarded.  Implementations
   MAY age them out if no other messages arrive with the same "UID"
   property value and a lower sequence number.

Daboo                     Expires April 7, 2010               [Page 124]
Internet-Draft                    iTIP                      October 2009

5.2.2.  Unexpected Reply from an Unknown Delegate

   When an "Attendee" delegates an item to another CU they MUST send a
   "REPLY" method to the "Organizer" using the "ATTENDEE" properties to
   indicate that the request was delegated and to whom.  Hence, it is
   possible for an "Organizer" to receive an "REPLY" from a CU not
   listed as one of the original "Attendees".  The resolution is left to
   the implementation but it is expected that the calendaring software
   will either accept the reply or hold it until the related "REPLY"
   method is received from the "Delegator".  If the version of the
   "REPLY" method is out of date the "Organizer" SHOULD treat the
   message as a "REFRESH" message and update the delegate with the
   correct version provided that delegation to that delegate is
   acceptable.

5.3.  Sequence Number

   Under some conditions, a CUA may receive requests and replies with
   the same "SEQUENCE" property value.  The "DTSTAMP" property is
   utilized as a tie-breaker when two items with the same "SEQUENCE"
   property value are evaluated.

6.  Security Considerations

   iTIP is an abstract transport protocol which will be bound to a real-
   time transport, a store-and-forward transport, and perhaps other
   transports.  The transport protocol will be responsible for providing
   facilities for authentication and encryption using standard Internet
   mechanisms that are mutually understood between the sender and
   receiver.

6.1.  Security Threats

6.1.1.  Spoofing the "Organizer"

   In iTIP, the "Organizer" (or someone working on the "Organizer's"
   behalf) is the only person authorized to make changes to an existing
   "VEVENT", "VTODO", "VJOURNAL" calendar component and republish it or
   redistribute updates to the "Attendees".  An iCalendar object that
   maliciously changes or cancels an existing "VEVENT", "VTODO" or
   "VJOURNAL" calendar component may be constructed by someone other
   than the "Organizer" and republished or sent to the "Attendees".

6.1.2.  Spoofing the "Attendee"

   In iTIP, an "Attendee" of a "VEVENT" or "VTODO" calendar component
   (or someone working on the "Attendee's" behalf) is the only person

Daboo                     Expires April 7, 2010               [Page 125]
Internet-Draft                    iTIP                      October 2009

   authorized to update any parameter associated with their "ATTENDEE"
   property and send it to the "Organizer".  An iCalendar object that
   maliciously changes the "ATTENDEE" parameters may be constructed by
   someone other than the real "Attendee" and sent to the "Organizer".

6.1.3.  Unauthorized Replacement of the Organizer

   There will be circumstances when "Attendees" of an event or to-do
   decide, using out-of-band mechanisms, that the "Organizer" must be
   replaced.  When the new "Organizer" sends out the updated "VEVENT" or
   "VTODO" the "Attendee's" CUA will detect that the "Organizer" has
   been changed, but it has no way of knowing whether or not the change
   was mutually agreed upon.

6.1.4.  Eavesdropping and Data Integrity

   The iCalendar object is constructed with human-readable clear text.
   Any information contained in an iCalendar object may be read and/or
   changed by unauthorized persons while the object is in transit.

6.1.5.  Flooding a Calendar

   Implementations could provide a means to automatically incorporate
   "REQUEST" methods into a calendar.  This presents the opportunity for
   a calendar to be flooded with requests, which effectively block all
   the calendar's free time.

6.1.6.  Unauthorized REFRESH Requests

   It is possible for an "Organizer" to receive a "REFRESH" request from
   someone who is not an "Attendee" of an event or to-do.  Only
   "Attendee's" of an event or to-do are authorized to receive replies
   to "REFRESH" requests.  Replying to such requests to anyone who is
   not an "Attendee" may be a security problem.

6.2.  Recommendations

   For an application where the information is sensitive or critical and
   the network is subject to a high probability of attack, iTIP
   transactions SHOULD be encrypted and authenticated.  This helps
   mitigate the threats of spoofing, eavesdropping and malicious changes
   in transit.

6.2.1.  Securing iTIP transactions

   iTIP transport bindings MUST provide a mechanism to enable
   authentication of the sender's identity, and privacy and integrity of
   the data being transmitted.  This allows the receiver of a signed

Daboo                     Expires April 7, 2010               [Page 126]
Internet-Draft                    iTIP                      October 2009

   iCalendar object to verify the identity of the sender.  This sender
   may then be correlated to an "ATTENDEE" property in the iCalendar
   object.  If the correlation is made and the sender is authorized to
   make the requested change or update then the operation may proceed.
   It also allows the message to be encrypted to prevent unauthorized
   reading of the message contents in transit. iTIP transport binding
   documents describe this process in detail.

6.2.2.  Implementation Controls

   The threat of unauthorized replacement of the "Organizer" SHOULD be
   mitigated by a calendar system that uses this protocol by providing
   controls or alerts that make "Calendar Users" aware of such
   "Organizer" changes and allowing them to decide whether or not the
   request should be honored.

   The threat of flooding a calendar SHOULD be mitigated by a calendar
   system that uses this protocol by providing controls that may be used
   to limit the acceptable sources for iTIP transactions, and perhaps
   the size of messages and volume of traffic, by source.

   The threat of unauthorized "REFRESH" requests SHOULD be mitigated by
   a calendar system that uses this protocol by providing controls or
   alerts that allow "Calendar User" to decide whether or not the
   request should be honored.  An implementation MAY decide to maintain,
   for audit or historical purposes, "Calendar Users" who were part of
   an attendee list and who were subsequently uninvited.  Similar
   controls or alerts should be provided when a "REFRESH" request is
   received from these "Calendar Users" as well.

6.2.3.  Access Controls and Filtering

   In many environments there could be restrictions on who is allowed to
   scheduled with whom, and who allowed delegates are for particular
   calendar users.

   iTIP transport bindings SHOULD provide mechanisms for implementing
   access controls or filtering to ensure iTIP transactions only take
   place between authorized calendar users.  That would include
   preventing one calendar user from scheduling with another, or a
   calendar user delegating to another.

6.3.  Privacy Issues

   The "Organizer" might want to keep "Attendees" from knowing which
   other "Attendees" are participating in an event or to-do.  The
   "Organizer" has the choice of sending single iTIP messages with a
   full list of "Attendees" or sending iTIP messages to each "Attendee"

Daboo                     Expires April 7, 2010               [Page 127]
Internet-Draft                    iTIP                      October 2009

   with only that "Attendee" listed.

7.  IANA Consideration

7.1.  Registration Template for REQUEST-STATUS Values

   This specification updates [RFC5545] by adding a "REQUEST-STATUS"
   value registry to the iCalendar Elements registry.

   A "REQUEST-STATUS" value is defined by completing the following
   template.
   Status Code:  Hierarchical, numeric return status code, following the
      rules defined in Section 3.8.8.3 of [RFC5545].
   Status Description:  Textual status description.  A short but clear
      description of the error.
   Status Exception Data:  Textual exception data.  A short but clear
      description of what might appear in this field.
   Description:  Describe the underlying cause for this status code
      value.

7.2.  Additions to iCalendar METHOD Registry

   This documents defines the following values for the iCalendar
   "METHOD" property using the values template from Section 8.2.6 of
   [RFC5545].  These should be added to the Methods Registry defined in
   Section 8.3.12 of [RFC5545]:

7.2.1.  METHOD:PUBLISH

   Value:  PUBLISH
   Purpose:  Standard iTIP "METHOD" value.
   Conformance:  Only used with the "METHOD" property.
   Examples:  See this RFC.

7.2.2.  METHOD:REQUEST

   Value:  REQUEST
   Purpose:  Standard iTIP "METHOD" value.
   Conformance:  Only used with the "METHOD" property.
   Examples:  See this RFC.

7.2.3.  METHOD:REPLY

Daboo                     Expires April 7, 2010               [Page 128]
Internet-Draft                    iTIP                      October 2009

   Value:  REPLY
   Purpose:  Standard iTIP "METHOD" value.
   Conformance:  Only used with the "METHOD" property.
   Examples:  See this RFC.

7.2.4.  METHOD:ADD

   Value:  ADD
   Purpose:  Standard iTIP "METHOD" value.
   Conformance:  Only used with the "METHOD" property.
   Examples:  See this RFC.

7.2.5.  METHOD:CANCEL

   Value:  CANCEL
   Purpose:  Standard iTIP "METHOD" value.
   Conformance:  Only used with the "METHOD" property.
   Examples:  See this RFC.

7.2.6.  METHOD:REFRESH

   Value:  REFRESH
   Purpose:  Standard iTIP "METHOD" value.
   Conformance:  Only used with the "METHOD" property.
   Examples:  See this RFC.

7.2.7.  METHOD:COUNTER

   Value:  COUNTER
   Purpose:  Standard iTIP "METHOD" value.
   Conformance:  Only used with the "METHOD" property.
   Examples:  See this RFC.

7.2.8.  METHOD:DECLINECOUNTER

   Value:  DECLINECOUNTER
   Purpose:  Standard iTIP "METHOD" value.
   Conformance:  Only used with the "METHOD" property.
   Examples:  See this RFC.

7.3.  REQUEST-STATUS Value Registry

   The following table is to be used to initialize the "REQUEST-STATUS"
   value registry.

Daboo                     Expires April 7, 2010               [Page 129]
Internet-Draft                    iTIP                      October 2009

            +-------------+---------+-------------------------+
            | Status Code | Status  | Reference               |
            +-------------+---------+-------------------------+
            | 2.0         | Current | RFCXXXX, Section 3.6.1  |
            | 2.1         | Current | RFCXXXX, Section 3.6.2  |
            | 2.2         | Current | RFCXXXX, Section 3.6.3  |
            | 2.3         | Current | RFCXXXX, Section 3.6.4  |
            | 2.4         | Current | RFCXXXX, Section 3.6.5  |
            | 2.5         | Current | RFCXXXX, Section 3.6.6  |
            | 2.6         | Current | RFCXXXX, Section 3.6.7  |
            | 2.7         | Current | RFCXXXX, Section 3.6.8  |
            | 2.8         | Current | RFCXXXX, Section 3.6.9  |
            | 2.9         | Current | RFCXXXX, Section 3.6.10 |
            | 2.10        | Current | RFCXXXX, Section 3.6.11 |
            | 2.11        | Current | RFCXXXX, Section 3.6.12 |
            | 3.0         | Current | RFCXXXX, Section 3.6.13 |
            | 3.1         | Current | RFCXXXX, Section 3.6.14 |
            | 3.2         | Current | RFCXXXX, Section 3.6.15 |
            | 3.3         | Current | RFCXXXX, Section 3.6.16 |
            | 3.4         | Current | RFCXXXX, Section 3.6.17 |
            | 3.5         | Current | RFCXXXX, Section 3.6.18 |
            | 3.6         | Current | RFCXXXX, Section 3.6.19 |
            | 3.7         | Current | RFCXXXX, Section 3.6.20 |
            | 3.8         | Current | RFCXXXX, Section 3.6.21 |
            | 3.9         | Current | RFCXXXX, Section 3.6.22 |
            | 3.10        | Current | RFCXXXX, Section 3.6.23 |
            | 3.11        | Current | RFCXXXX, Section 3.6.24 |
            | 3.12        | Current | RFCXXXX, Section 3.6.25 |
            | 3.13        | Current | RFCXXXX, Section 3.6.26 |
            | 3.14        | Current | RFCXXXX, Section 3.6.27 |
            | 4.0         | Current | RFCXXXX, Section 3.6.28 |
            | 5.0         | Current | RFCXXXX, Section 3.6.29 |
            | 5.1         | Current | RFCXXXX, Section 3.6.30 |
            | 5.2         | Current | RFCXXXX, Section 3.6.31 |
            | 5.3         | Current | RFCXXXX, Section 3.6.32 |
            +-------------+---------+-------------------------+

8.  Acknowledgments

   This is an update to the original iTIP document authored by S.
   Silverberg, S. Mansour, F. Dawson and R. Hopson.

   This revision is the product of the Calsify IETF Working Group, and
   several participants have made important contributions to this
   specification, including: Oliver Block, Bernard Desruisseaux, Mike
   Douglass, Tim Hare, Ciny Joy, Bruce Kahn, Reinhold Kainhofer, Eliot
   Lear, Jonathan Lennox, Andy Mabbett, Aki Niemi, John W. Noerenberg

Daboo                     Expires April 7, 2010               [Page 130]
Internet-Draft                    iTIP                      October 2009

   II, Robert Ransdell, Caleb Richardson.

9.  References

9.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC2368]  Hoffman, P., Masinter, L., and J. Zawinski, "The mailto
              URL scheme", RFC 2368, July 1998.

   [RFC5545]  Desruisseaux, B., "Internet Calendaring and Scheduling
              Core Object Specification (iCalendar)", RFC 5545,
              September 2009.

9.2.  Informative References

   [I-D.ietf-calsify-rfc2447bis]
              Melnikov, A., "iCalendar Message-Based Interoperability
              Protocol (iMIP)", draft-ietf-calsify-rfc2447bis-06 (work
              in progress), September 2009.

Appendix A.  Differences from RFC 2446

A.1.  Changed Restrictions

   This specification now defines an allowed combination of "REQUEST-
   STATUS" codes when multiple iCalendar components are included in an
   iTIP message.

   This specification now restricts "RECURRENCE-ID" to only a single
   occurrence in any one iCalendar component in an iTIP message as
   required by [RFC5545].

   Changed "RECURRENCE-ID" entry in component restriction table to "0 or
   1" from "0+" to fall in line with [RFC5545].

   Changed "FREEBUSY" entry in "VFREEBUSY" "PUBLISH" and "REPLY"
   restriction table to "0+" from "1+" to fall in line with [RFC5545].

   Changed "FREEBUSY" description in "VFREEBUSY" "REPLY" restriction
   table to indicate that different "FBTYPE" ranges MUST NOT overlap.

   Changed "TZNAME" entry in "VTIMEZONE" restriction table to "0+" from
   "0 or 1" to fall in line with [RFC5545].

Daboo                     Expires April 7, 2010               [Page 131]
Internet-Draft                    iTIP                      October 2009

   Changed "COMMENT" entry in component restriction tables to "0+" from
   "0 or 1" to fall in line with [RFC5545].

   Added "ATTENDEE" entry in "VALARM" restriction table to match email
   alarm type in [RFC5545].

   Changed "CATEGORIES" entry in component restriction tables to "0+"
   from &"job-state" and "job-
   state-reasons" attributes in human readable text.  If the Printer
   object supports this attribute, the Printer object MUST be able to
   generate this message in any of the natural languages identified by
   the Printer's "generated-natural-language-supported" attribute (see
   the "attributes-natural-language" operation attribute specified in
   Section 3.1.4.1).

   The value SHOULD NOT contain additional information not contained in
   the values of the "job-state" and "job-states-reasons" attributes,
   such as interpreter error information.  Otherwise, application
   programs might attempt to parse the (localized text).  For such
   additional information such as interpreter errors for application
   program consumption or specific document access errors, new
   attributes with keyword values, needs to be developed and registered.

4.3.10 job-detailed-status-messages (1setOf text(MAX))

   This attribute specifies additional detailed and technical
   information about the job.  The Printer NEED NOT localize the
   message(s), since they are intended for use by the system
   administrator or other experienced technical persons.  Localization
   might obscure the technical meaning of such messages.  Clients MUST
   NOT attempt to parse the value of this attribute.  See "job-
   document-access-errors" (section 4.3.11) for additional errors that a
   program can process.

4.3.11 job-document-access-errors (1setOf text(MAX))

   This attribute provides additional information about each document
   access error for this job encountered by the Printer after it
   returned a response to the Print-URI or Send-URI operation and
   subsequently attempted to access document(s) supplied in the Print-
   URI or Send-URI operation.  For errors in the protocol that is
   identified by the URI scheme in the "document-uri" operation
   attribute, such as 'http:' or 'ftp:', the error code is returned in
   parentheses, followed by the URI.  For example:

      (404) http://ftp.pwg.org/pub/pwg/ipp/new_MOD/ipp-model-v11.pdf

   Most Internet protocols use decimal error codes (unlike IPP), so the
   ASCII error code representation is in decimal.

Hastings, et al.            Standards Track                   [Page 118]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

4.3.12 number-of-documents (integer(0:MAX))

   This attribute indicates the number of documents in the job, i.e.,
   the number of Send-Document, Send-URI, Print-Job, or Print-URI
   operations that the Printer has accepted for this job, regardless of
   whether the document data has reached the Printer object or not.

   Implementations supporting the OPTIONAL Create-Job/Send-
   Document/Send-URI operations SHOULD support this attribute so that
   clients can query the number of documents in each job.

4.3.13 output-device-assigned (name(127))

   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 "fan-out" - see section 2.1).

4.3.14 Event Time Job Description Attributes

   This section defines the Job Description attributes that indicate the
   time at which certain events occur for a job.  If the job event has
   not yet occurred, then the IPP object MUST return the 'no-value'
   out-of-band value (see the beginning of Section 4.1).  The "time-at-
   xxx(integer)" attributes represent time as an 'integer' representing
   the number of seconds since the device was powered up (informally
   called "time ticks").  The "date-time-at-xxx(dateTime)" attributes
   represent time as 'dateTime' representing date and time (including an
   offset from UTC).

   In order to populate these attributes, the Printer object copies the
   value(s) of the following Printer Description attributes at the time
   the event occurs:

      1. the value in the Printer's "printer-up-time" attribute for the
         "time-at-xxx(integer)" attributes

      2. the value in the Printer's "printer-current-time" attribute for
         the "date-time-at-xxx(dateTime)" attributes.

   If the Printer resets its "printer-up-time" attribute to 1 on power-
   up (see section 4.4.29) and has persistent jobs, then it MUST change
   all of jobs' "time-at-xxx(integer)" (time tick) job attributes whose
   events have occurred either to:

Hastings, et al.            Standards Track                   [Page 119]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

      1. 0 to indicate that the event happened before the most recent
         power up OR

      2. the negative of the number of seconds before the most recent
         power-up that the event took place, though the negative number
         NEED NOT reflect the exact number of seconds.

   If a client queries a "time-at-xxx(integer)" time tick Job attribute
   and finds the value to be 0 or negative, the client MUST assume that
   the event occurred in some life other than the Printer's current
   life.

   Note: A Printer does not change the values of any "date-time-at-
   xxx(dateTime)" job attributes on power-up.

4.3.14.1 time-at-creation (integer(MIN:MAX))

   This REQUIRED attribute indicates the time at which the Job object
   was created.

4.3.14.2 time-at-processing (integer(MIN:MAX))

   This REQUIRED attribute indicates the time at which the Job object
   first began processing after the create operation or the most recent
   Restart-Job operation.  The out-of-band 'no-value' value is returned
   if the job has not yet been in the 'processing' state (see the
   beginning of Section 4.1).

4.3.14.3 time-at-completed (integer(MIN:MAX))

   This REQUIRED attribute indicates the time at which the Job object
   completed (or was canceled or aborted).  The out-of-band 'no-value'
   value is returned if the job has not yet completed, been canceled, or
   aborted (see the beginning of Section 4.1).

4.3.14.4 job-printer-up-time (integer(1:MAX))

   This REQUIRED Job Description attribute indicates the amount of time
   (in seconds) that the Printer implementation has been up and running.
   This attribute is an alias for the "printer-up-time" Printer
   Description attribute (see Section 4.4.29).

   A client MAY request this attribute in a Get-Job-Attributes or Get-
   Jobs request and use the value returned in combination with other
   requested Event Time Job Description Attributes in order to display
   time attributes to a user.  The difference between this attribute and
   the 'integer' value of a "time-at-xxx" attribute is the number of

Hastings, et al.            Standards Track                   [Page 120]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

   seconds ago that the "time-at-xxx" event occurred.  A client can
   compute the wall-clock time at which the "time-at-xxx" event occurred
   by subtracting this difference from the client's wall-clock time.

4.3.14.5 date-time-at-creation (dateTime)

   This attribute indicates the date and time at which the Job object
   was created.

4.3.14.6 date-time-at-processing (dateTime)

   This attribute indicates the date and time at which the Job object
   first began processing after the create operation or the most recent
   Restart-Job operation.

4.3.14.7 date-time-at-completed (dateTime)

   This attribute indicates the date and time at which the Job object
   completed (or was canceled or aborted).

4.3.15 number-of-intervening-jobs (integer(0:MAX))

   This attribute indicates the number of jobs that are "ahead" of this
   job in the relative chronological order of expected time to complete
   (i.e., the current scheduled order). For efficiency, it is only
   necessary to calculate this value when an operation is performed that
   requests this attribute.

4.3.16 job-message-from-operator (text(127))

   This attribute provides a message from an operator, system
   administrator or "intelligent" process to indicate to the end user
   the reasons for modification or other management action taken on a
   job.

4.3.17 Job Size Attributes

   This sub-section defines job attributes that describe the size of the
   job.  These attributes are not intended to be counters; they are
   intended to be useful routing and scheduling information if known.
   For these attributes, the Printer object may try to compute the value
   if it is not supplied in the create request.  Even if the client does
   supply a value for these three attributes in the create request, the
   Printer object MAY choose to change the value if the Printer object
   is able to compute a value which is more accurate than the client
   supplied value.  The Printer object may be able to determine the
   correct value for these attributes either right at job submission
   time or at any later point in time.

Hastings, et al.            Standards Track                   [Page 121]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

4.3.17.1 job-k-octets (integer(0:MAX))

   This attribute specifies the total size of the document(s) in K
   octets, i.e., in units of 1024 octets requested to be processed in
   the job.  The value MUST be rounded up, so that a job between 1 and
   1024 octets MUST be indicated as being 1, 1025 to 2048 MUST be 2,
   etc.

   This value MUST NOT include the multiplicative factors contributed by
   the number of copies specified by the "copies" attribute, independent
   of whether the device can process multiple copies without making
   multiple passes over the job or document data and independent of
   whether the output is collated or not.  Thus the value is independent
   of the implementation and indicates the size of the document(s)
   measured in K octets independent of the number of copies.

   This value MUST also not include the multiplicative factor due to a
   copies instruction embedded in the document data.  If the document
   data actually includes replications of the document data, this value
   will include such replication.  In other words, this value is always
   the size of the source document data, rather than a measure of the
   hardcopy output to be produced.

4.3.17.2 job-impressions (integer(0:MAX))

   This attribute specifies the total size in number of impressions of
   the document(s) being submitted (see the definition of impression in
   section 12.2.5).

   As with "job-k-octets", this value MUST NOT include the
   multiplicative factors contributed by the number of copies specified
   by the "copies" attribute, independent of whether the device can
   process multiple copies without making multiple passes over the job
   or document data and independent of whether the output is collated or
   not.  Thus the value is independent of the implementation and
   reflects the size of the document(s) measured in impressions
   independent of the number of copies.

   As with "job-k-octets", this value MUST also not include the
   multiplicative factor due to a copies instruction embedded in the
   document data.  If the document data actually includes replications
   of the document data, this value will include such replication.  In
   other words, this value is always the number of impressions in the
   source document data, rather than a measure of the number of
   impressions to be produced by the job.

Hastings, et al.            Standards Track                   [Page 122]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

4.3.17.3 job-media-sheets (integer(0:MAX))

   This attribute specifies the total number of media sheets to be
   produced for this job.

   Unlike the "job-k-octets" and the "job-impressions" attributes, this
   value MUST include the multiplicative factors contributed by the
   number of copies specified by the "copies" attribute and a 'number of
   copies' instruction embedded in the document data, if any.  This
   difference allows the system administrator to control the lower and
   upper bounds of both (1) the size of the document(s) with "job-k-
   octets-supported" and "job-impressions-supported" and (2) the size of
   the job with "job-media-sheets-supported".

4.3.18 Job Progress Attributes

   This sub-section defines job attributes that describe the progress of
   the job.  These attributes are intended to be counters.  That is, the
   value for a job that has not started processing MUST be 0.  When the
   job's "job-state" is 'processing' or 'processing-stopped', this value
   is intended to contain the amount of the job that has been processed
   to the time at which the attributes are requested.  When the job
   enters the 'completed', 'canceled', or 'aborted' states, these values
   are the final values for the job.

4.3.18.1 job-k-octets-processed (integer(0:MAX))

   This attribute specifies the total number of octets processed in K
   octets, i.e., in units of 1024 octets so far.  The value MUST be
   rounded up, so that a job between 1 and 1024 octets inclusive MUST be
   indicated as being 1, 1025 to 2048 inclusive MUST be 2, etc.

   For implementations where multiple copies are produced by the
   interpreter with only a single pass over the data, the final value
   MUST be equal to the value of the "job-k-octets" attribute.  For
   implementations where multiple copies are produced by the interpreter
   by processing the data for each copy, the final value MUST be a
   multiple of the value of the "job-k-octets" attribute.

4.3.18.2 job-impressions-completed (integer(0:MAX))

   This job attribute specifies the number of impressions completed for
   the job so far.  For printing devices, the impressions completed
   includes interpreting, marking, and stacking the output.

Hastings, et al.            Standards Track                   [Page 123]
RFC 2911              IPP/1.1: Model and Semantics        September 2000

4.3.18.3 job-media-sheets-completed (integer(0:MAX))

   This job attribute specifies the media-sheets completed marking and
   stacking for the entire job so far whether those sheets have been
   processed on one side or on both.

4.3.19 attributes-charset (charset)

   This REQUIRED attribute is populated using the value in the client
   supplied "attributes-charset" attribute in the create request.  It
   identifies the charset (coded character set and encoding method) used
   by any Job attributes with attribute syntax 'text' and 'name' that
   were supplied by the client in the create request.  See Section 3.1.4
   for a complete description of the "attributes-charset" operation
   attribute.

   This attribute does not indicate the charset in which the 'text' and
   'name' values are stored internally in the Job object.  The internal
   charset is implementation-defined.  The IPP object MUST convert from
   whatever the internal charset is to that being requested in an
   operation as specified in Section 3.1.4.

4.3.20 attributes-natural-language (naturalLanguage)

   This REQUIRED attribute is populated using the value in the client
   supplied "attributes-natural-language" attribute in the create
   request.  It identifies the natural language used for any Job
   attributes with attribute syntax 'text' and 'name' that were supplied
   by the client in the create request.  See Section 3.1.4 for a
   complete description of the "attributes-natural-language" operation
   attribute.  See Sections 4.1.1.2 and 4.1.2.2 for how a Natural
   Language Override may be supplied explicitly for each 'text' and
   'name' attribute value that differs from the value identified by the
   "attributes-natural-language" attribute.

4.4 Printer Description Attributes

   These attributes form the attribute group called "printer-
   description".  The following table summarizes these attributes, their
   syntax, and whether or not they are REQUIRED for a Printer object to
   support.  If they are not indicated as REQUIRED, they are OPTIONAL.
   The maximum size in octets for 'text' and 'name' attributes is
   indicated in parenthesizes.

   Note: How these attributes are set by an Administrator is outside the
   scope of this IPP/1.1 document.

Hastings, et al.            Standards Track                   [Page 124]quot;0 or 1" to fall in line with [RFC5545].

   Changed "RESOURCES" entry in component restriction tables to "0+"
   from "0 or 1" to fall in line with [RFC5545].

   Changed "CONTACT" entry in "VFREEBUSY" restriction table to "0 or 1"
   from "0+" to fall in line with [RFC5545].

   Changed "UID" entry in "VFREEBUSY" "PUBLISH" restriction table to "1"
   from "0" to fall in line with [RFC5545].

   Added "COMPLETED" entry in "VTODO" restriction tables to fall in line
   with [RFC5545].

   Added "REQUEST-STATUS" entry in "VJOURNAL" restriction tables to fall
   in line with [RFC5545].

A.2.  Deprecated features

   The "EXRULE" property was removed in [RFC5545] and references to that
   have been removed in this document too.

   The "PROCEDURE" value for the "ACTION" property was removed in
   [RFC5545] and references to that have been removed in this document
   too.

   The "THISANDPRIOR" option for the "RANGE" parameter was removed in
   [RFC5545] and references to that have been removed in this document
   too.

Appendix B.  Change History (to be removed prior to publication as an
             RFC)

   Changes in -10:
   a.  Gen-ART: changed section title "Eavesdropping" to "Eavesdropping
       and Data Integrity".
   b.  SecDir: changed "encrypted" to "encrypted and authenticated" in
       6.2.

Daboo                     Expires April 7, 2010               [Page 132]
Internet-Draft                    iTIP                      October 2009

   c.  SecDir: removed S/MIME reference and changed text to just talk
       about "generic" authentication and encryption.
   d.  SecDir: added access controls and filtering section.
   e.  IESG: fixed "THISANDFUTURE" -> "THISANDPRIOR" in A.2.
   f.  IESG: 2447bis is now an informative reference.
   g.  IESG: Changed text about email groups to reference mailto URI.
   h.  IESG: tweaked fallback text for free/busy methods.
   i.  IESG: fallback for DURATION in events and to-dos now required.
   j.  IESG: removed last sentence in 6.2.1.
   k.  IESG: added reference to values template section in 2445bis in
       IANA section.
   l.  IESG: clarified that 2.0 is the default REQUEST-STATUS if the
       property is not present.
   m.  IANA: added registry for REQUEST-STATUS codes.
   n.  Updated to RFC 5545 reference!
   o.  Fixed minor typos.

   Changes in -09:
   a.  Updated to RFC5322 reference.
   b.  Fixed more issues from Reinhold Kainhofer review being tracked on
       the WG wiki.

   Changes in -08:
   a.  AD review: Changed "calendar entry" to "iCalendar object".
   b.  AD review: Added extra captions above restriction tables for more
       clarity.
   c.  AD review: Added missing step of uninvited CU replying to
       Organizer in description of event forwarding.
   d.  AD review: Clarified text about "unsuccessful" REQUEST
       processing.
   e.  AD review: VFREEBUSY text about allowing multiple components
       moved into description of PUBLISH method.
   f.  AD review: VTODO description changed to reflect fact that
       originator is not always the Organizer.
   g.  AD review: Changed VTODO ADD description to use proper 3.14 code
       instead of 5.3.
   h.  AD review: Changed short description on 5.0 status code.
   i.  AD review: Added IANA-PROPERTY/COMPONENT items to restrictions
       tables and changed 3.7.3 to better reflect requirements on
       handling extensions.
   j.  AD review: Fixed example in 4.2.4.
   k.  AD review: Clarified who is responsible for updating the
       delegator in 4.2.5.
   l.  AD review: Fixed PARTSTAT in example in 4.2.6.
   m.  AD review: Added reference to IANA methods registry in 2445bis in
       IANA section.

Daboo                     Expires April 7, 2010               [Page 133]
Internet-Draft                    iTIP                      October 2009

   n.  Removed section on calculating recurring due dates as that is
       covered in 2445bis.
   o.  Fixed lots of issues from Reinhold Kainhofer review being tracked
       on the WG wiki.
   p.  Fixed DECLINE-COUNTER -> DECLINECOUNTER.

   Changes in -07:
   a.  IANA considerations now registers METHOD values.
   b.  Added Appendix with key 2446 changes and text to the introduction
       pointing to that.

   Changes in -06:
   a.  Added text to SEQUENCE number description about detecting a
       significant change.
   b.  Added text to REQUEST-STATUS section describing the allowed
       combinations of codes.
   c.  Added text to REQUEST-STATUS section to require new codes to be
       defined in a standard or experimental RFC.
   d.  Removed THISANDFUTURE.
   e.  Cleaned up some examples.

   Changes in -05:
   a.  Changed "memo" to "specification".
   b.  Removed EXRULE as it is no longer in 2445bis.
   c.  Removed section on PROCEDURE alarms since those are no longer in
       2445bis.
   d.  Changed TYPE= to CUTYPE=.
   e.  Fixed formatting of examples.
   f.  Use lowercase mailto everywhere.

   Changes in -04:
   a.  Added empty IANA Considerations section - to be done.
   b.  Formatting fixes.
   c.  Changed VEVENT, VTODO, VJOURNAL cancel descriptions that
       incorrectly implied RECURRENCE-ID could appear multiple times in
       a single component.
   d.  [Issue91] FREEBUSY properties changed to '0+' from '1+' in
       VFREEBUSY PUBLISH and REPLY tables.
   e.  [Issue89] Description for VEVENT ADD method simplified for
       clarity.
   f.  Fixed some iCalendar property/parameter/value capitalization
       issues.
   g.  MAY NOT -> MUST NOT in VFREEBUSY FREEBUSY response type.

   Changes in -03:
   a.  Added empty IANA Considerations section - to be done.

   Changes in -02:

Daboo                     Expires April 7, 2010               [Page 134]
Internet-Draft                    iTIP                      October 2009

   a.  Tweaked abstract wording.
   b.  Fixed some improper references.
   c.  Removed bogus TZOFFSET entry from VTIMEZONE restriction table.
   d.  Changed TZNAME entry in VTIMEZONE restriction table to "0+" from
       "0 or 1" to fall in line with 2445.
   e.  Changed COMMENT entry in component restriction tables to "0+"
       from "0 or 1" to fall in line with 2445.
   f.  Added ATTENDEE entry in VALARM restriction table to match email
       alarm type in 2445.
   g.  Changed CATEGORIES entry in component restriction tables to "0+"
       from "0 or 1" to fall in line with 2445.
   h.  Changed RESOURCES entry in component restriction tables to "0+"
       from "0 or 1" to fall in line with 2445.
   i.  Changed CONTACT entry in VFREEBUSY restriction table to "0 or 1"
       from "0+" to fall in line with 2445.
   j.  Made UID required in VFREEBUSY publish.
   k.  Added COMPLETED entry in VTODO restriction tables to fall in line
       with 2445.
   l.  Added REQUEST-STATUS entry in VJOURNAL restriction tables to fall
       in line with 2445.

   Changes in -01:
   a.  Updated to 2445bis and 2447bis references.

   Changes in -00 (from RFC2446):
   a.  Updated to latest i-d boilerplate text.
   b.  Rewrote abstract and introduction.
   c.  Reformatted Formatting Conventions section.
   d.  Split iTIP Roles and Transactions into two sections
   e.  iTIP roles uses a table to describe different roles
   f.  Converted tables into xml2rfc format.

Author's Address

   Cyrus Daboo (editor)
   Apple Inc.
   1 Infinite Loop
   Cupertino, CA  95014
   USA

   Email: cyrus@daboo.name
   URI:   http://www.apple.com/

Daboo                     Expires April 7, 2010               [Page 135]