TOC 
Network Working GroupD. Royer
Internet-DraftIntelliCal, LLC
Expires: October 2, 2005April 3, 2005

Basic iCalendar Transport-Independent Interoperability Protocol (iTIP) Scheduling Events

draft-royer-itip-basic-00

Status of this Memo

This document is an Internet-Draft and is subject to all provisions of section 3 of RFC 3667. By submitting this Internet-Draft, each author represents that any applicable patent or other IPR claims of which he or she is aware have been or will be disclosed, and any of which he or she become aware will be disclosed, in accordance with RFC 3668.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt.

The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html.

This Internet-Draft will expire on October 2, 2005.

Copyright Notice

Copyright (C) The Internet Society (2005).

Abstract

This is the second release of iTIP. After having learned from RFC-2446 where most of this text comes from. This document represents the common objects needed for basic calendaring. The VTODO, VJOURNAL, VTIMEZONE, recurrence rules (RDATE remains), and scheduling and their associated properties have been removed. These removals are expected to appear in new memos at a later time and will be independent extensions of this specification. The new EXTENSIONS property will exist to allow for compatible sets of extensions.

This document specifies how calendaring systems use iCalendar objects to interoperate with other calendar systems. It does so in a general way so as to allow multiple methods of communication between systems. Subsequent documents specify interoperable methods of communications between systems that use this protocol.

The document outlines a model for calendar exchange that defines both static and dynamic event, to-do, journal and free/busy objects. Static objects are used to transmit information from one entity to another without the expectation of continuity or referential integrity with the original item. Dynamic objects are a superset of static objects and will gracefully degrade to their static counterparts for clients that only support static objects.

This document specifies an Internet protocol based on the iCalendar object specification that provides scheduling interoperability between different calendar systems. The Internet protocol is called the "Basic iCalendar Transport-Independent Interoperability Protocol (iTIP-Basic)". iTIP-Basic complements the iCalendar object specification by adding semantics for group scheduling methods commonly available in current calendar systems. These scheduling methods permit two or more calendar systems to perform transactions such as publish, schedule, reschedule, respond to scheduling requests, negotiation of changes or cancel iCalendar-based calendar components.

iTIP-Basic is defined independent of the particular transport used to transmit the scheduling information. Companion memos to iTIP-Basic provide bindings of the interoperability protocol to a number of Internet protocols.



Table of Contents

1.  Introduction
    1.1  Formatting Conventions
    1.2  Related Documents
    1.3  ITIP-BASIC Roles and Transactions
2.  Interoperability Models
    2.1  Application Protocol
        2.1.1  Calendar Entry State
        2.1.2  Delegation
        2.1.3  Acting on Behalf of other Calendar Users
        2.1.4  Component Revisions
        2.1.5  Message Sequencing
3.  Application Protocol Elements
    3.1  Common Component Restriction Tables
    3.2  Methods for VEVENT Calendar Components
        3.2.1  PUBLISH
        3.2.2  REQUEST
        3.2.3  REPLY
        3.2.4  ADD
        3.2.5  CANCEL
        3.2.6  REFRESH
        3.2.7  COUNTER
        3.2.8  DECLINECOUNTER
    3.3  Methods For VFREEBUSY Components
        3.3.1  PUBLISH
        3.3.2  REQUEST
        3.3.3  REPLY
    3.4  Methods For VTODO Components
    3.5  Methods For VJOURNAL Components
    3.6  Status Replies
    3.7  Implementation Considerations
        3.7.1  Working With Recurrence Instances
        3.7.2  Attendee Property Considerations
        3.7.3  X-Tokens
4.  Examples
5.  Application Protocol Fallbacks
    5.1  Partial Implementation
        5.1.1  Event-Related Fallbacks
        5.1.2  Latency Issues
        5.1.3  Sequence Number
    5.2  Security Considerations
        5.2.1  Security Threats
        5.2.2  Recommendations
    5.3  Acknowledgments
6.  References
§  Author's Address
§  Intellectual Property and Copyright Statements




 TOC 

1. Introduction

This document specifies how calendaring systems use iCalendar objects to interoperate with other calendar systems. In particular, it specifies how to schedule events only. To-dos, or daily journal entries have been removed. It further specifies how to ask for available busy time information. It does so in a general way so as to allow multiple methods of communication between systems. Subsequent documents specify transport bindings between systems that use this protocol.

This protocol is based on messages sent from an originator to one or more recipients. For certain types of messages, a recipient may reply, in order to update their status and may also return transaction/request status information. The protocol supports the ability for the message originator to modify or cancel the original message. The protocol also supports the ability for recipients to suggest changes to the originator of a message. The elements of the protocol also define the user roles for its transactions.

1.1 Formatting Conventions

In order to refer to elements of the calendaring and scheduling model, core object or interoperability protocol defined in [1]Royer, D., Internet Calendaring and Scheduling Core Object Specification - iCalendar Basic, November 2005. and [iTIP-Basic] several formatting conventions have been utilized.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" and "OPTIONAL" in this document are to be interpreted as described in [3]Bradner, S., Key words for use in RFCs to Indicate Requirement Levels, March 1997..

Calendaring and scheduling roles are referred to in quoted-strings of text with the first character of each word in upper case. For example, "Organizer" refers to a role of a "Calendar User" (CU) within the scheduling protocol defined by [iTIP-Basic]. Calendar components defined by [1]Royer, D., Internet Calendaring and Scheduling Core Object Specification - iCalendar Basic, November 2005. are referred to with capitalized, quoted-strings of text. All calendar components start with the letter "V". For example, "VEVENT" refers to the event calendar component. Scheduling methods defined by [iTIP-Basic] are referred to with capitalized, quoted-strings of text. For example, "REQUEST" refers to the method for requesting a scheduling calendar component be created or modified, "REPLY" refers to the method a recipient of a request uses to update their status with the "Organizer" of the calendar component.

Properties defined by [1]Royer, D., Internet Calendaring and Scheduling Core Object Specification - iCalendar Basic, November 2005. are referred to with capitalized, quoted-strings of text, followed by the word "property". For example, "ATTENDEE" property refers to the iCalendar property used to convey the calendar address of a "Calendar User". Property parameters defined by this memo are referred to with lower case, quoted-strings of text, followed by the word "parameter". For example, "value" parameter refers to the iCalendar property parameter used to override the default data type for a property value. Enumerated values defined by this memo are referred to with capitalized text, either alone or followed by the word "value".

In tables, the quoted-string text is specified without quotes in order to minimize the table length.

1.2 Related Documents

Implementers will need to be familiar with several other memos that, along with this one, describe the Internet calendaring and scheduling standards. This document, [iTIP-Basic], specifies an interoperability protocol for scheduling between different implementations. The related documents are:

[1]Royer, D., Internet Calendaring and Scheduling Core Object Specification - iCalendar Basic, November 2005. - specifies the objects, data types, properties and property parameters used in the protocols, along with the methods for representing and encoding them;

[2]Royer, D., Basic iCalendar Message-Based Interoperability Protocol - iMIP Basic, November 2005. specifies an Internet email binding for [iTIP-Basic].

This memo does not attempt to repeat the specification of concepts or definitions from these other memos. Where possible, references are made to the memo that provides for the specification of these concepts or definitions.

1.3 ITIP-BASIC Roles and Transactions

ITIP-BASIC defines methods for exchanging [1]Royer, D., Internet Calendaring and Scheduling Core Object Specification - iCalendar Basic, November 2005. objects for the purposes of group calendaring and scheduling between "Calendar Users" (CUs). CUs take on one of two roles in iTIP-Basic. The CU who initiates an exchange takes on the role of "Organizer". For example, the CU who proposes a group meeting is the "Organizer". The CUs asked to participate in the group meeting by the "Organizer" take on the role of "Attendee". Note that "role" is also a descriptive parameter to the _ATTENDEE_ property. Its use is to convey descriptive context to an "Attendee" such as "chair", "req-participant" or "non-participant" and has nothing to do with the calendaring workflow.

The ITIP-BASIC methods are listed below and their usage and semantics are defined in section 3 of this document.

   +================+==================================================+
   | Method         |  Description                                     |
   |================+==================================================|
   | PUBLISH        | Used to publish a calendar entry to one or more  |
   |                | Calendar Users. There is no interactivity        |
   |                | between the publisher and any other calendar     |
   |                | user. An example might include a baseball team   |
   |                | publishing its schedule to the public.           |
   |                |                                                  |
   | REQUEST        | Used to schedule a calendar entry with other     |
   |                | Calendar Users. Requests are interactive in that |
   |                | they require the receiver to respond using       |
   |                | the Reply methods. Meeting Requests, Busy        |
   |                | Time requests. Requests are also used by the     |
   |                | "Organizer" to                         |
   |                | update the status of a calendar entry.           |
   |                |                                                  |
   | REPLY          | A Reply is used in response to a Request to      |
   |                | convey "Attendee" status to the "Organizer".     |
   |                | Replies are commonly used to respond to meeting  |
   |                | and task requests.                               |
   |                |                                                  |
   | ADD            | The only way to add one or more instances to an  |
   |                | existing VEVENT.                                 |
   |                |                                                  |
   | CANCEL         | Cancel one or more instances of an existing      |
   |                | VEVENT.                                          |
   |                |                                                  |
   | REFRESH        | The Refresh method is used by an "Attendee" to   |
   |                | request the latest version of a calendar entry.  |
   |                |                                                  |
   | COUNTER        | The Counter method is used by an "Attendee" to   |
   |                | ask for a change in the calendar entry.          |
   |                | Examples include the request to change a         |
   |                | proposed Event time.                             |
   |                |                                                  |
   | DECLINE-       | Used by the "Organizer" to decline the proposed  |
   | COUNTER        | counter-proposal.                               |
   +================+==================================================+

Group scheduling in iTIP-Basic is accomplished using the set of "request" and "response" methods described above. The following table shows the methods broken down by who can send them.

   +================+==================================================+
   | Originator     | Methods                                          |
   |================+==================================================|
   | Organizer      | PUBLISH, REQUEST, ADD, CANCEL, DECLINECOUNTER    |
   |                |                                                  |
   | Attendee       | REPLY, REFRESH, COUNTER                          |
   +================+==================================================+

Note that for some calendar component types, the allowable methods are a subset of the above set.



 TOC 

2. Interoperability Models

There are two distinct protocols relevant to interoperability: an "Application Protocol" and a "Transport Protocol". The Application Protocol defines the content of the iCalendar objects sent between sender and receiver to accomplish the scheduling transactions listed above. The Transport Protocol defines how the iCalendar objects are sent between the sender and receiver. This document focuses on the Application Protocol. Binding documents such as [2]Royer, D., Basic iCalendar Message-Based Interoperability Protocol - iMIP Basic, November 2005. focus on the Transport Protocol.

The connection between Sender and Receiver in the diagram below refers to the Application Protocol. The iCalendar objects passed from the Sender to the Receiver are presented in Section 3, Application Protocol Elements.

   +----------+                      +----------+
   |          |        iTIP-Basic   |          |
   |  Sender  |<-------------------->| Receiver |
   |          |                      |          |
   +----------+                      +----------+

There are several variations of this diagram in which the Sender and Receiver take on various roles of a "Calendar User Agent" (CUA) or a "Calendar Service" (CS).

The architecture of iTIP-Basic is depicted in the diagram below. An application written to this specification may work with bindings for the store-and-forward transport, the real time transport, or both. Also note that iTIP-Basic could be bound to other transports.

   +------------------------------------------+
   |                   iTIP-Basic             |
   +------------------------------------------+
   |Real-time | Store-and-Fwd | Other         |
   |Transport | Transport     | Transports... |
   +------------------------------------------+

2.1 Application Protocol

In the iTIP-Basic model, a calendar entry is created and managed by an "Organizer". The "Organizer" interacts with other CUs by sending one or more of the iTIP-Basic messages listed above. "Attendees" use the "REPLY" method to communicate their status. "Attendees" do not make direct changes to the master calendar entry. They can, however, use the "COUNTER" method to suggest changes to the "Organizer". In any case, the "Organizer" has complete control over the master calendar entry.

2.1.1 Calendar Entry State

There are two distinct states relevant to calendar entries: the overall state of the entry and the state associated with an "Attendee" to that entry.

The state of an entry is defined by the "STATUS" property and is controlled by the "Organizer." There is no default value for the "STATUS" property. The "Organizer" sets the "STATUS" property to the appropriate value for each calendar entry.

The state of a particular "Attendee" relative to an entry is defined by the "partstat" parameter in the "ATTENDEE" property for each "Attendee". When an "Organizer" issues the initial entry, "Attendee" status is unknown. The "Organizer" specifies this by setting the "partstat" parameter to "NEEDS-ACTION". Each "Attendee" modifies their "ATTENDEE" property "partstat" parameter to an appropriate value as part of a "REPLY" message sent back to the "Organizer".

2.1.2 Delegation

Delegation is defined as the process by which an "Attendee" grants another CU (or several CUs) the right to attend on their behalf. The "Organizer" is made aware of this change because the delegating "Attendee" informs the "Organizer". These steps are detailed in the REQUEST method section.

This is not supported in iTIP-Basic.

2.1.3 Acting on Behalf of other Calendar Users

In many organizations one user will act on behalf of another to organize and/or respond to meeting requests. ITIP-BASIC provides two mechanisms that support these activities.

First, the "Organizer" is treated as a special entity, separate from "Attendees". All responses from "Attendees" flow to the "Organizer", making it easy to separate a calendar user organizing a meeting from calendar users attending the meeting. Additionally, iCalendar provides descriptive roles for each "Attendee". For instance, a role of "chair" may be ascribed to one or more "Attendees". The "chair" and the "Organizer" may or may not be the same calendar user. This maps well to scenarios where an assistant may manage meeting logistics for another individual who chairs a meeting.

Second, a "sent-by" parameter may be specified in either the "Organizer" or "Attendee" properties. When specified, the "sent-by" parameter indicates that the responding CU acted on behalf of the specified "Attendee" or "Organizer".

2.1.4 Component Revisions

The "SEQUENCE" property is used by the "Organizer" to indicate revisions to the calendar component. The rules for incrementing the "SEQUENCE" number are defined in [1]Royer, D., Internet Calendaring and Scheduling Core Object Specification - iCalendar Basic, November 2005..]

In some circumstances the "Organizer" may not have received responses to the final revision sent out. In this situation, the "Organizer" may wish to send an update "REQUEST", and set "RSVP=TRUE" for all "Attendees", so that current responses can be collected.

The value of the "SEQUENCE" property contained in a response from an "Attendee" may not always match the "Organizer's" revision. Implementations may choose to have the CUA indicate to the CU that the response is to an entry that has been revised and allow the CU to decide whether or not to accept the response.

The "Organizer" is not required to send objects to any "Attendee" unless the change effects the "Attendee". It is possible for an "Attendee" to get invited with an object with a sequence value larger then zero. And it is possible for an "Attendee" to get an update that has a "SEQUENCE" property value that is more than one larger than what the "Attendee" currently has. As an example the "Organizer" may determine that it will not send each "Attendee" an update each time an new "Attendee" is added.

2.1.5 Message Sequencing

CUAs that handle the [iTIP-Basic] application protocol must often correlate a component in a calendar store with a component received in the [iTIP-Basic] message. For example, an event may be updated with a later revision of the same event. To accomplish this, a CUA must correlate the version of the event already in its calendar store with the version sent in the [iTIP-Basic] message. In addition to this correlation, there are several factors that can cause [iTIP-Basic] messages to arrive in an unexpected order. That is, an "Organizer" could receive a reply to an earlier revision of a component AFTER receiving a reply to a later revision.

To maximize interoperability and to handle messages that arrive in an unexpected order, use the following rules:

1. The primary key for referencing a particular iCalendar component is the "UID" property value.

2. The secondary key for referencing a component is the "SEQUENCE" property value. For components where the "UID" is the same, the component with the highest numeric value for the "SEQUENCE" property obsoletes all other revisions of the component with lower values. For an "Attendee" that means that toss the current object and replace it with the new object, keeping any local implementation specific information when possible.

3. "Attendees" send "REPLY" messages to the "Organizer". For replies where the "UID" property value is the same, the value of the "SEQUENCE" property indicates the revision of the component to which the "Attendee" is replying. The reply with the highest numeric value for the "SEQUENCE" property obsoletes all other replies with lower values.

4. In situations where the "UID" and "SEQUENCE" properties match, the "DTSTAMP" property is used as the tie-breaker. The component with the latest "DTSTAMP" overrides all others. Similarly, for "Attendee" responses where the "UID" property values match and the "SEQUENCE" property values match, the response with the latest "DTSTAMP" overrides all others.

Hence, CUAs must persist the following component properties: "UID", "SEQUENCE", and "DTSTAMP". Furthermore, for each "ATTENDEE" property of a component CUAs must persist the "SEQUENCE" and "DTSTAMP" property values associated with the "Attendee's" response.



 TOC 

3. Application Protocol Elements

ITIP-BASIC messages are "text/calendar" MIME entities that contain calendaring and scheduling information. The particular type of [1]Royer, D., Internet Calendaring and Scheduling Core Object Specification - iCalendar Basic, November 2005. message is referred to as the "method type". Each method type is identified by a "METHOD" property specified as part of the "text/calendar" content type. The table below shows various combinations of calendar components and the method types that this memo supports.

   +=================================================+
   |         | VEVENT | VTODO | VJOURNAL | VFREEBUSY |
   |=================================================|
   |Publish  |  Yes   |  No   |  No      |   Yes     |
   |Request  |  Yes   |  No   |  No      |   Yes     |
   |Refresh  |  Yes   |  No   |  No      |   No      |
   |Cancel   |  Yes   |  No   |  No      |   No      |
   |Add      |  Yes   |  No   |  No      |   No      |
   |Reply    |  Yes   |  No   |  No      |   Yes     |
   |Counter  |  Yes   |  No   |  No      |   No      |
   |Decline- |        |       |          |           |
   |Counter  |  Yes   |  No   |  No      |   No      |
   +=================================================+

Each method type is defined in terms of its associated components and properties. Some components and properties are required, some are optional and others are excluded. The restrictions are expressed in this document using a simple "restriction table". The first column indicates the name of a component or property. Properties of the iCalendar object are not indented. Properties of a component are indented. The second column contains "MUST" if the component or property must be present, "MAY" if the component or property is optional, and "NOT" if the component or property must not be present. Entries in the second column sometimes contain comments for further clarification.

3.1 Common Component Restriction Tables

The restriction table below applies to properties of the iCalendar object. That is, the properties at the outermost scope. The presence column uses the following values to assert whether a property is required, is optional and the number of times it may appear in the iCalendar object.

   Presence Value       Description
   --------------------------------------------------------------
   1                 One instance MUST be present
   1+                At least one instance MUST be present
   0                 Instances of this property Must NOT be present
   0+                Multiple instances MAY be present
   0 or 1            Up to 1 instance of this property MAY be present
   ---------------------------------------------------------------

The tables also call out "X-PROPERTY" and "X-COMPONENT" to show where vendor-specific properties and components can appear. The tables do not lay out the restrictions of property parameters. Those restrictions are defined in [1]Royer, D., Internet Calendaring and Scheduling Core Object Specification - iCalendar Basic, November 2005..

   Component/Property  Presence
   ------------------- ----------------------------------------------
   CALSCALE            0 or 1 If '0', the object is GREGORIAN.
   PRODID              1
   VERSION             1       Value MUST be "2.0"
   X-PROPERTY          0+

DateTime values MUST NOT refer to a "VTIMEZONE" component.

   Component/Property  Presence
   ------------------- ----------------------------------------------
   VTIMEZONE           0      MUST NOT be present as iCal-Basic does
                              not support time zones.

The property restrictions in the table below apply to any "VALARM" component in an ITIP-BASIC message.

   Component/Property  Presence
   ------------------- ----------------------------------------------
   VALARM              0+
       ACTION          1
       ATTACH          0+
       DESCRIPTION     0 or 1
       DURATION        0 or 1  if present REPEAT MUST be present
       REPEAT          0 or 1  if present DURATION MUST be present
       SUMMARY         0 or 1
       TRIGGER         1
       X-PROPERTY      0+

3.2 Methods for VEVENT Calendar Components

This section defines the property set restrictions for the method types that are applicable to the "VEVENT" calendar component. Each method is defined using a table that clarifies the property constraints that define the particular method.

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

   +================+==================================================+
   | Method         |  Description                                     |
   |================+==================================================|
   | PUBLISH        | Post notification of an event. Used primarily as |
   |                | a method of advertising the existence of an      |
   |                | event.                                           |
   |                |                                                  |
   | REQUEST        | Make a request for an event. This is an explicit |
   |                | invitation to one or more "Attendees". Event     |
   |                | Requests are also used to update or change an    |
   |                | existing event.                                  |
   |                |                                                  |
   | REPLY          | Reply to an event request. Clients may set their |
   |                | status ("partstat") to ACCEPTED, DECLINED,       |
   |                | TENTATIVE.                                       |
   |                |                                                  |
   | ADD            | Add one or more instances to an existing event.  |
   |                |                                                  |
   | CANCEL         | Cancel one or more instances of an existing      |
   |                | event.                                           |
   |                |                                                  |
   | REFRESH        | A request is sent to an "Organizer" by an        |
   |                | "Attendee" asking for the latest version of an   |
   |                | event to be resent to the requester.             |
   |                |                                                  |
   | COUNTER        | Counter a REQUEST with an alternative proposal,  |
   |                | Sent by an "Attendee" to the "Organizer".        |
   |                |                                                  |
   | DECLINECOUNTER | Decline a counter proposal. Sent to an           |
   |                | "Attendee" by the "Organizer".                   |
   +================+==================================================+

3.2.1 PUBLISH

The "PUBLISH" method in a "VEVENT" calendar component is an unsolicited posting of an iCalendar object. Any CU may add published components to their calendar. The "Organizer" MUST be present in a published iCalendar component. "Attendees" MUST NOT be present. Its expected usage is for encapsulating an arbitrary event as an iCalendar object. The "Organizer" may subsequently update (with another "PUBLISH" method), add instances to (with an "ADD" method), or cancel (with a "CANCEL" method) a previously published "VEVENT" calendar component.

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

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1       MUST equal "PUBLISH"
VEVENT              1+
     DTSTAMP        1
     DTSTART        1
     ORGANIZER      1
     SUMMARY        1       Can be null.
     UID            1
     RECURRENCE-ID  0       iCal-Basic does not support this.
     SEQUENCE       1       MUST be present.
     ATTACH         0+
     CATEGORIES     0 or 1  This property may contain a list of
                            values
     CLASS          0 or 1
     COMMENT        0 or 1
     CONTACT        0+
     CREATED        0 or 1
     DESCRIPTION    0 or 1  Can be empty.
     DTEND          0 or 1  if present DURATION MUST NOT be present
     DURATION       0 or 1  if present DTEND MUST NOT be present
     EXDATE         0       Not needed in iCal-Basic
     EXRULE         0       Not supported in iCal-Basic
     GEO            0       Deprecated in iCal-Basic
     LAST-MODIFIED  0 or 1
     LOCATION       0 or 1
     PRIORITY       0 or 1
     RDATE          0+
     RELATED-TO     0+
     RESOURCES      0 or 1 This property MAY contain a list of values
     RRULE          0      Not supported in iCal-Basic
     STATUS         0 or 1 MAY be one of TENTATIVE/CONFIRMED/CANCELLED
     TRANSP         0 or 1
     URL            0 or 1
     X-PROPERTY     0+

     ATTENDEE       0
     REQUEST-STATUS 0

VALARM              0+
VFREEBUSY           0
VJOURNAL            0

VTODO               0
VTIMEZONE           0       Not supported in iCal-Basic
X-COMPONENT         0+

3.2.2 REQUEST

The "REQUEST" method in a "VEVENT" component provides the following scheduling functions:

. Invite "Attendees" to an event.

. Reschedule an existing event (increment SEQUENCE).

. Response to a REFRESH request (do not increment SEQUENCE, just re-send).

. Update the details of an existing event, without rescheduling it. (increment SEQUENCE)

. Update the status of "Attendees" of an existing event, without rescheduling it. (increment SEQUENCE)

. Forward a "VEVENT" to another uninvited CU. (Do not increment SEQUENCE).

. For an existing "VEVENT" calendar component, changing the role of "Organizer" to another CU. (Increment SEQUENCE)

The "Organizer" originates the "REQUEST". The recipients of the "REQUEST" method are the CUs invited to the event, the "Attendees". "Attendees" use the "REPLY" method to convey attendance status to the "Organizer".

The "UID" and "SEQUENCE" properties are used to distinguish the various uses of the "REQUEST" method. If the "UID" property value in the "REQUEST" is not found on the recipient's calendar, then the "REQUEST" is for a new "VEVENT" calendar component. If the "UID" property value is found on the recipient's calendar, then the "REQUEST" is for a rescheduling, an update, or a reconfirm of the "VEVENT" calendar component.

For the "REQUEST" method, multiple "VEVENT" components in a single iCalendar object are only permitted when for components with the same "UID" property. That is, a series of recurring events may have instance-specific information. In this case, multiple "VEVENT" components are needed to express the entire series. These would have been received as method "ADD" components.

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

Component/Property  Presence
-----------------------------------------------------------------
METHOD              1       MUST be "REQUEST"
VEVENT              1+
    ATTENDEE        1+
    DTSTAMP         1
    DTSTART         1
    ORGANIZER       1
    SEQUENCE        1       MUST be present.
    SUMMARY         1       Can be empty.
    UID             1

    ATTACH          0+
    CATEGORIES      0 or 1  This property may contain a list of values.
    CLASS           0 or 1
    COMMENT         0 or 1
    CONTACT         0+
    CREATED         0 or 1
    DESCRIPTION     0 or 1  Can be '1' and empty.
    DTEND           0 or 1  if present DURATION MUST NOT be present.
    DURATION        0 or 1  if present DTEND MUST NOT be present.
    EXDATE          0       Not needed in iCal-Basic.
    EXRULE          0       Not in iCal-Basic.
    GEO             0       Deprecated in iCal-Basic.
    LAST-MODIFIED   0 or 1
    LOCATION        0 or 1
    PRIORITY        0 or 1
    RDATE           0+
    RECURRENCE-ID   0       Not in iCal-Basic.
    RELATED-TO      0+
    REQUEST-STATUS  0+
    RESOURCES       0 or 1  This property MAY contain a list of values
    RRULE           0       Not in iCal-Basic.
    STATUS          0 or 1  MAY be one of TENTATIVE/CONFIRMED
    TRANSP          0 or 1
    URL             0 or 1
    X-PROPERTY      0+

VALARM              0+
VTIMEZONE           0       Not in iCal-Basic.
X-COMPONENT         0+

VFREEBUSY           0
VJOURNAL            0
VTODO               0

3.2.2.1 Rescheduling an Event

The "REQUEST" method may be used to reschedule an event. A rescheduled event involves a change to the existing event in terms of its time or recurrence intervals and possibly the location or description. If the recipient CUA of a "REQUEST" method finds that the "UID" property value already exists on the calendar, but that the "SEQUENCE" (or "DTSTAMP") property value in the "REQUEST" method is greater than the value for the existing event, then the "REQUEST" method describes a rescheduling of the event. The old contents are tossed an replaced by the new contents. The "Attendee" only needs to reply if their "RSVP" parameter is set to true by the "Organizer".

The "Organizer" sends a method "REQUEST" component with additional method "ADD" components only when needed for each appointment rescheduled. All with the same "UID" property value. As the "ADD" method can be used independently of the "REQUEST" method, each additional "ADD" method sent in the replacement set MUST have the "SEQUENCE" property value incremented. That is if the "REQUEST" component has a "SEQUENCE" property value of '8', then the first "ADD" method after that would have a "SEQUENCE" property value of '9', the second "ADD" method would have a "SEQUENCE" property value of '10', and so on until all of the instances that can not be described by the proceeding components is sent. This the rules consistent with receiving independent "ADD" method components at a later time.

3.2.2.2 Updating or Reconfirmation of an Event

The "REQUEST" method may be used to update or reconfirm an event. An update to an existing event does not involve changes to the time or recurrence intervals, and might not involve a change to the location or description for the event. If the recipient CUA of a "REQUEST" method finds that the "UID" property value already exists on the calendar and that the "SEQUENCE" property value in the "REQUEST" is the same as the value for the existing event, then the "REQUEST" method describes an update of the event details, but no rescheduling of the event. And only if the newer object has a newer "DTSTAMP" property value. Older objects are to be tossed.

The update "REQUEST" method is the appropriate response to a "REFRESH" method sent from an "Attendee" to the "Organizer" of an event.

The "Organizer" of an event may also send unsolicited "REQUEST" methods. The unsolicited "REQUEST" methods may be used to update the details of the event without rescheduling it, to update the "partstat" parameter of "Attendees", or to reconfirm the event.

3.2.2.3 Delegating an Event to another CU

Not supported in iTIP-Basic.

3.2.2.4 Changing the Organizer

The situation may arise where the "Organizer" of a VEVENT is no longer able to perform the "Organizer" role and abdicates without passing on the "Organizer" role to someone else. When this occurs the "Attendees" of the VEVENT may use out-of-band mechanisms to communicate the situation and agree upon a new "Organizer". The new "Organizer" should then send out a new "REQUEST" with a modified version of the VEVENT in which the "SEQUENCE" number has been incremented and value of the "ORGANIZER" property has been changed to the calendar address of the new "Organizer".

3.2.2.5 Sending on Behalf of the Organizer

Not supported in iTIP-Basic.

3.2.2.6 Forwarding to An Uninvited CU

An "Attendee" invited to an event may invite another uninvited CU to the event. The invited "Attendee" accomplishes this by forwarding the original "REQUEST" method to the uninvited CU. The "Organizer" decides whether or not the uninvited CU is added to the attendee

list. If the "Organizer" decides not to add the uninvited CU no further action is required, however the "Organizer" MUST send the uninvited CU a "CANCEL" message. If the "Organizer" decides to add an uninvited CU, a new "ATTENDEE" property is added for the uninvited CU with its property parameters set as the "Organizer" deems appropriate. When forwarding a "REQUEST" to another CU, the forwarding "Attendee" MUST NOT make changes to the VEVENT property set.

3.2.2.7 Updating Attendee Status

The "Organizer" of an event may also request updated status from one or more "Attendees. The "Organizer" sends a "REQUEST" method to the "Attendee" and sets the "ATTENDEE;RSVP=TRUE" property parameter. The "SEQUENCE" property for the event is not changed from its previous value. A recipient will determine that the only change in the "REQUEST" is that their "RSVP" property parameter indicates a request for updated status. The recipient MUST respond with a "REPLY" method indicating their current status with respect to the "REQUEST".

3.2.3 REPLY

The "REPLY" method in a "VEVENT" calendar component is used to respond (e.g., accept or decline) to a "REQUEST".

The "REPLY" method may also be used to respond to an unsuccessful "REQUEST" method. Depending on the value of the "REQUEST-STATUS" property no scheduling action may have been performed.

The "Organizer" of an event may receive the "REPLY" method from a CU not in the original "REQUEST". In addition, the "REPLY" method may be received from an unknown CU (They were forwarded a copy). This unknown "Attendee" may be accepted, or the "Organizer" may cancel the event for the uninvited "Attendee" by sending a "CANCEL" method to the uninvited "Attendee".

An "Attendee" can include a message to the "Organizer" using the "COMMENT" property. For example, if the user indicates tentative acceptance and wants to let the "Organizer" know why, the reason can be expressed in the "COMMENT" property value.

The optional properties listed in the table below (those listed as "0+" or "0 or 1") MUST NOT be changed from those of the original request. If property changes are desired the COUNTER message must be used.

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

The "Attendee" only sends the specific information needed. If the reply is for all instances in the "VEVENT" component, then the "DTSTART", "DTEND", "RDATE", and "DURATION" properties MUST NOT be included.

If the reply is for a subset of the instances, then the "DTSTART", "DTEND", "RDATE", and "DURATION", proprties are used in exactly the same way as a request. Multiple "REPLY" components MUST BE sent to conver all instances in such a case. If the "Attendee" can attend Monday, then two components are sent;, one saying YES to Monday, the other NO to the other dates. The "Attendee" when replying must reply to all instances in the "VEVENT" component.

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1       MUST be "REPLY"
VEVENT              1+
    ATTENDEE        1       MUST be the address of the Attendee
                            replying.
    DTSTAMP         1
    ORGANIZER       1
    RECURRENCE-ID   0       Not supported in iCal-Basic.
    UID             1       MUST be the UID of the original REQUEST

    SEQUENCE        1       MUST be the sequence number of the original
                            REQUEST.
    ATTACH          0
    CATEGORIES      0
    CLASS           0
    COMMENT         0 or 1
    CONTACT         0+
    CREATED         0
    DESCRIPTION     0
    DTEND           0 or 1  If present DURATION MUST NOT be present.
                            Only if DTSTART is supplied.
    DTSTART         0 or 1  Only if this object is a reply for less
                            than all instances.
    DURATION        0 or 1  If present DTEND MUST NOT be present. Only
                            if DTSTART is supplied.
    EXDATE          0       Not in iCal-Basic
    EXRULE          0       Not in iCal-Basic
    GEO             0       Deprecated
    LAST-MODIFIED   0 or 1
    LOCATION        0
    PRIORITY        0
    RDATE           0+
    RELATED-TO      0

    RESOURCES       0
    REQUEST-STATUS  0+
    RRULE           0       Not in iCal-Basic
    STATUS          0 or 1
    SUMMARY         0
    TRANSP          0
    URL             0
    X-PROPERTY      0+

VTIMEZONE           0       Not in iCal-Basic
X-COMPONENT         0+

VALARM              0
VFREEBUSY           0
VJOURNAL            0
VTODO               0

3.2.4 ADD

The "ADD" method in a "VEVENT" calendar component is used to add one or more instances to an existing "VEVENT". Unlike the "REQUEST" method, when using issuing an "ADD" method, the "Organizer" does not send the full "VEVENT" description; only the new instance(s). The "ADD" method is especially useful if there are instance-specific properties to be preserved in a recurring "VEVENT". For instance, an "Organizer" may have originally scheduled a weekly Thursday meeting. At some point, several instances changed. Location or start time may have changed, or some instances may have unique "DESCRIPTION" properties. The "ADD" method allows the "Organizer" to add new instances to an existing event using a single ITIP-BASIC message when it is not possible to define the recurring pattern in one "VEVENT" component.

The "UID" must be that of the existing event. If the "UID" property value in the "ADD" is not found on the recipient's calendar, then the recipient MUST send a "REFRESH" to the "Organizer" in order to be updated with the latest version of the "VEVENT". If an "Attendee" implementation does not support the "ADD" method it should respond with a "REQUEST-STATUS" value of 3.14 and ask for a "REFRESH".

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

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1      MUST be "ADD"
VEVENT              1
    DTSTAMP         1
    DTSTART         1
    ORGANIZER       1
    SEQUENCE        1      MUST be greater than 0.
    SUMMARY         1      Can be empty.
    UID             1      MUST match that of the original event.

    ATTACH          0+
    ATTENDEE        0+
    CATEGORIES      0 or 1 This property MAY contain a list of values.
    CLASS           0 or 1
    COMMENT         0 or 1
    CONTACT         0+
    CREATED         0 or 1
    DESCRIPTION     0 or 1  Can be empty.
    DTEND           0 or 1  if present DURATION MUST NOT be present.
    DURATION        0 or 1  if present DTEND MUST NOT be present.
    EXDATE          0       Not in iCal-Basic.
    EXRULE          0       Not in iCal-Basic.
    GEO             0       Deprecated.
    LAST-MODIFIED   0 or 1
    LOCATION        0 or 1
    PRIORITY        0 or 1
    RDATE           0+
    RELATED-TO      0+
    RESOURCES       0 or 1  This property MAY contain a list of values
    RRULE           0       Not in iCal-Basic.
    STATUS          0 or 1  MAY be one of TENTATIVE/CONFIRMED
    TRANSP          0 or 1
    URL             0 or 1
    X-PROPERTY      0+

    RECURRENCE-ID   0
    REQUEST-STATUS  0

VALARM              0+
VTIMEZONE           0       Not in iCal-Basic
X-COMPONENT         0+

VFREEBUSY           0
VTODO               0
VJOURNAL            0

3.2.5 CANCEL

The "CANCEL" method in a "VEVENT" calendar component is used to send a cancellation notice of an existing event request to the "Attendees". The message is sent by the "Organizer" of the event. For a recurring event, either the whole event or instances of an event may be cancelled.

To cancel the complete appointment and all instances; the "UID" property value for the event MUST be specified and the "DTSTART", "DTEND", "DURATION", and "RDATE" properties must NOT be included. The "SEQUENCE" property is incremented so the "Attendee"'s can tell it is the newest revision of the appointment.

To cancel one or more instances of a "VEVENT", include the "DTSTART", "DTEND", "DURATION", and "RDATE" properties exactly as would be sent in a request. The "UID" property must match what the "Attendee" has. If an "Attendee" gets a "CANCEL" method for a "UID" where the "Attendee" does not have the "UID", then the "Attendee" needs to do a "REFRESH" to get the latest copy of the component.

In all cases, the "SEQUENCE" property value in the "CANCEL" component MUST BE larger than the "Attendee" has, or the "CANCEL" object is to be ignored and the "Attendee" MUST do a "REFRESH" to get the latest details of the appointment.

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

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1      MUST be "CANCEL"

VEVENT              1+
    ATTENDEE        0+     MUST include all "Attendees" being removed
                           the event. MUST be sent to all "Attendees" if
                           the entire event is cancelled. 
    DTSTAMP         1
    ORGANIZER       1
    SEQUENCE        1
    UID             1      MUST be the UID of the original REQUEST

    COMMENT         0 or 1
    ATTACH          0      Not needed in a CANCEL.
    CATEGORIES      0      Not needed in a CANCEL.

    CLASS           0      Not needed in a CANCEL.
    CONTACT         0+
    CREATED         0 or 1
    DESCRIPTION     0      Not needed in a CANCEL.
    DTEND           0 or 1 If present DURATION MUST NOT be present
                           Only supplied if DTSTART is supplied.
                            
    DTSTART         0 or 1 Only supplied if less than all of
                           the instances are being cancled.
    DURATION        0 or 1 if present DTEND MUST NOT be present
                           Only supplied if DTSTART is supplied.
    EXDATE          0      Not in iCal-Basic.
    EXRULE          0      Not in iCal-Basic.
    GEO             0      Deprecated.
    LAST-MODIFIED   0 or 1
    LOCATION        0      Not needed in CANCEL.
    PRIORITY        0      Not needed in CANCEL.
    RDATE           0+     Only if less than all instances are
                           being cancled and only when DTSTART
                           is supplied..
    RECURRENCE-ID   0      Not in iCal-Basic
    RELATED-TO      0      Not needed in CANCEL.
    RESOURCES       0      Not needed in CANCEL.
    RRULE           0      Not in iCal-Basic
    STATUS          0      Not needed in CANCEL.
    SUMMARY         0      Not needed in CANCEL.
    TRANSP          0      Not needed in CANCEL.
    URL             0      Not needed in CANCEL.
    X-PROPERTY      0+
    REQUEST-STATUS  0

VTIMEZONE           0      Not in iCal-Basic.
X-COMPONENT         0+
VTODO               0
VJOURNAL            0
VFREEBUSY           0
VALARM              0

3.2.6 REFRESH

The "REFRESH" method in a "VEVENT" calendar component is used by "Attendees" of an existing event to request an updated description from the event "Organizer". The "REFRESH" method must specify the "UID" property of the event to update.

The "Organizer" replies with the latest copy of the appointment. A "REQUEST" is sent with any additional "ADD" methods if needed.

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

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1      MUST be "REFRESH".

VEVENT              1
    ATTENDEE        1      MUST be the address of requestor.
    DTSTAMP         1
    ORGANIZER       1
    UID             1      MUST be the UID associated with original
                           REQUEST.
    COMMENT         0 or 1
    RECURRENCE-ID   0      Not in iCal-Basic.
    X-PROPERTY      0+

    ATTACH          0
    CATEGORIES      0
    CLASS           0
    CONTACT         0
    CREATED         0
    DESCRIPTION     0
    DTEND           0
    DTSTART         0
    DURATION        0
    EXDATE          0
    EXRULE          0
    GEO             0
    LAST-MODIFIED   0
    LOCATION        0
    PRIORITY        0
    RDATE           0
    RELATED-TO      0
    REQUEST-STATUS  0
    RESOURCES       0
    RRULE           0
    SEQUENCE        0
    STATUS          0
    SUMMARY         0
    TRANSP          0
    URL             0

X-COMPONENT         0+

VTODO               0

VJOURNAL            0
VFREEBUSY           0
VTIMEZONE           0
VALARM              0

3.2.7 COUNTER

The "COUNTER" method for a "VEVENT" calendar component is used by an "Attendee" of an existing event to submit to the "Organizer" a counter proposal to the event description. The "Attendee" sends this message to the "Organizer" of the event.

The counter proposal is an iCalendar object consisting of a VEVENT calendar component describing the complete description of the alternate event.

The "Organizer" rejects the counter proposal by sending the "Attendee" a VEVENT "DECLINECOUNTER" method. The "Organizer" accepts the counter proposal by rescheduling the event as described in section 3.2.2.1 Rescheduling an Event.

This method type is an iCalendar object that conforms to the following property constraints. The compoent is constructed just like a "REQUEST" component with the entire proposal for the proposed appointment, except the following:

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1      MUST be "COUNTER"

VEVENT              1
    ORGANIZER       1       MUST be the "Organizer" of the original
                            event.
    SEQUENCE        1       MUST be present and must match the  
                            appointment being countered.
    UID             1       MUST be the UID associated with the REQUEST
                            being countered.
    ATTENDEE        1       MUST BE the "Attendee" making the proposal.

All other properties and components are identical to the "VEVENT" "REQUEST".

3.2.8 DECLINECOUNTER

The "DECLINECOUNTER" method in a "VEVENT" calendar component is used by the "Organizer" of an event to reject a counter proposal submitted by an "Attendee". The "Organizer" must send the "DECLINECOUNTER" message to the "Attendee" that sent the "COUNTER" method to the "Organizer".

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

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1      MUST be "DECLINECOUNTER"

VEVENT              1
    DTSTAMP         1
    ORGANIZER       1
    UID             1       MUST, same UID specified in original
                            REQUEST and subsequent COUNTER
    COMMENT         0 or 1
    RECURRENCE-ID   0       Not in iCal-Basic
    REQUEST-STATUS  0+
    SEQUENCE        1       MUST match the value in the "Attendee"s
                            COUNTER component.
    X-PROPERTY      0+
    ATTACH          0
    ATTENDEE        0
    CATEGORIES      0
    CLASS           0
    CONTACT         0
    CREATED         0
    DESCRIPTION     0
    DTEND           0
    DTSTART         0
    DURATION        0
    EXDATE          0
    EXRULE          0
    GEO             0
    LAST-MODIFIED   0
    LOCATION        0
    PRIORITY        0
    RDATE           0
    RELATED-TO      0
    RESOURCES       0
    RRULE           0
    STATUS          0
    SUMMARY         0
    TRANSP          0
    URL             0

X-COMPONENT         0+
VTODO               0
VJOURNAL            0
VFREEBUSY           0
VTIMEZONE           0
VALARM              0

3.3 Methods For VFREEBUSY Components

This section defines the property set for the methods that are applicable to the "VFREEBUSY" calendar component. Each of the methods is defined using a restriction table.

This document only addresses the transfer of busy time information. Applications desiring free time information MUST infer this from available busy time information.

The busy time information within the iCalendar object MAY be grouped into more than one "VFREEBUSY" calendar component. This capability allows busy time periods to be grouped according to some common periodicity, such as a calendar week, month, or year. In this case, each "VFREEBUSY" calendar component MUST include the "ATTENDEE", "DTSTART" and "DTEND" properties in order to specify the source of the busy time information and the date and time interval over which the busy time information covers.

The "FREEBUSY" property value MAY include a list of values, separated by the COMMA character ([4], Coded Character Set--7-bit American Standard Code for Information Interchange, ANSI X3.4, 1986. decimal 44). Alternately, multiple busy time periods MAY be specified with multiple instances of the "FREEBUSY" property. Both forms MUST be supported by implementations conforming to this document. Duplicate busy time periods SHOULD NOT be specified in an iCalendar object. However, two different busy time periods MAY overlap.

"FREEBUSY" properties should be sorted such that their values are in ascending order, based on the start time, and then the end time, with the earliest periods first. For example, today's busy time information should appear after yesterday's busy time information. And the busy time for this half-hour should appear after the busy time for earlier today.

Since events may span a day boundary, free busy time period may also span a day boundary. Individual "A" requests busy time from individuals "B", "C" and "D". Individual "B" and "C" replies with busy time data to individual "A". Individual "D" does not support busy time requests and does not reply with any data. If the transport binding supports exception messages, then individual "D" returns an "unsupported capability" message to individual "A4.34.3".

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

   |================|==================================================|
   | Method         |  Description                                     |
   |================|==================================================|
   | PUBLISH        | Publish unsolicited busy time data.              |
   | REQUEST        | Request busy time data.                          |
   | REPLY          | Reply to a busy time request.                    |
   |================|==================================================|

3.3.1 PUBLISH

The "PUBLISH" method in a "VFREEBUSY" calendar component is used to publish busy time data. The method may be sent from one CU to any other. The purpose of the method is to provide a message for sending unsolicited busy time data. That is, the busy time data is not being sent as a "REPLY" to the receipt of a "REQUEST" method.

The "ATTENDEE" property must be specified in the busy time information. The value is the CU address of the originator of the busy time information.

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

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1       MUST be "PUBLISH"

VFREEBUSY           1+
    DTSTAMP         1
    DTSTART         1       DateTime values must be in UTC
    DTEND           1       DateTime values must be in UTC
    FREEBUSY        1+      MUST be BUSYTIME. Multiple instances are
                            allowed. Multiple instances must be sorted
                            in ascending order
    ORGANIZER       1       MUST contain the address of originator of
                            busy time data.

    COMMENT         0 or 1
    CONTACT         0+
    X-PROPERTY      0+
    URL             0 or 1  Specifies busy time URL

    ATTENDEE        0
    DURATION        0
    REQUEST-STATUS  0
    UID             0

X-COMPONENT         0+

VEVENT              0
VTODO               0
VJOURNAL            0
VTIMEZONE           0
VALARM              0

3.3.2 REQUEST

The "REQUEST" method in a "VFREEBUSY" calendar component is used to ask a "Calendar User" for their busy time information. The request may be for a busy time information bounded by a specific date and time interval.

This message only permits requests for busy time information. The message is sent from a "Calendar User" requesting the busy time information to one or more intended recipients.

If the originator of the "REQUEST" method is not authorized to make a busy time request on the recipient's calendar system, then an exception message SHOULD be returned in a "REPLY" method, but no busy time data need be returned.

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

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1      MUST be "REQUEST"

VFREEBUSY           1
    ATTENDEE        1+     contain the address of the calendar store
    DTEND           1      DateTime values must be in UTC
    DTSTAMP         1
    DTSTART         1      DateTime values must be in UTC
    ORGANIZER       1      MUST be the request originator's address
    UID             1
    COMMENT         0 or 1
    CONTACT         0+
    X-PROPERTY      0+

    FREEBUSY        0
    DURATION        0
    REQUEST-STATUS  0
    URL             0

X-COMPONENT         0+
VALARM              0
VEVENT              0

VTODO               0
VJOURNAL            0
VTIMEZONE           0

3.3.3 REPLY

The "REPLY" method in a "VFREEBUSY" calendar component is used to respond to a busy time request. The method is sent by the recipient of a busy time request to the originator of the request.

The "REPLY" method may also be used to respond to an unsuccessful "REQUEST" method. Depending on the "REQUEST-STATUS" value, no busy time information may be returned.

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

Component/Property  Presence
------------------- ----------------------------------------------
METHOD              1      MUST be "REPLY"

VFREEBUSY           1
    ATTENDEE        1      (address of recipient replying)
    DTSTAMP         1
    DTEND           1      DateTime values must be in UTC
    DTSTART         1      DateTime values must be in UTC
    FREEBUSY        1+      (values MUST all be of the same data
                            type. Multiple instances are allowed.
                            Multiple instances MUST be sorted in
                            ascending order. Values MAY NOT overlap)
    ORGANIZER       1       MUST be the request originator's address
    UID             1

    COMMENT         0 or 1
    CONTACT         0+
    REQUEST-STATUS  0+
    URL             0 or 1  (specifies busy time URL)
    X-PROPERTY      0+
    DURATION        0
    SEQUENCE        0

X-COMPONENT         0+
VALARM              0
VEVENT              0
VTODO               0
VJOURNAL            0
VTIMEZONE           0

3.4 Methods For VTODO Components

VTODO's are not in iCal-Basic.

3.5 Methods For VJOURNAL Components

VJOURNAL's are not in iCal-Basic.

3.6 Status Replies

The "REQUEST-STATUS" property may include the following values:

|==============+============================+=========================|
| Short Return | Longer Return Status       | Offending Data          |
| Status Code  | Description                |                         |
|==============+============================+=========================|
| 2.0          | Success.                   | None.                   |
|==============+============================+=========================|
| 2.1          | Success but fallback taken | Property name and value |
|              | on one or more property    | MAY be specified.       |
|              | values.                    |                         |
|==============+============================+=========================|
| 2.2          | Success, invalid property  | Property name MAY be    |
|              | ignored.                   | specified.              |
|==============+============================+=========================|
| 2.3          | Success, invalid property  | Property parameter name |
|              | parameter ignored.         | and value MAY be        |
|              |                            | specified.              |
|==============+============================+=========================|
| 2.4          | Success, unknown non-      | Non-standard property   |
|              | standard property ignored. | name MAY be specified.  |
|==============+============================+=========================|
| 2.5          | Success, unknown non       | Property and non-       |
|              | standard property value    | standard value MAY be   |
|              | ignored.                   | specified.              |
|==============+============================+=========================|
| 2.6          | Success, invalid calendar  | Calendar component      |
|              | component ignored.         | sentinel (e.g., BEGIN:  |
|              |                            | ALARM) MAY be           |
|              |                            | specified.              |
|==============+============================+=========================|
| 2.7          | Success, request forwarded | Original and forwarded  |
|              | to Calendar User.          | caluser addresses MAY   |
|              |                            | be specified.           |
|==============+============================+=========================|
| 2.8          | Success, repeating event   | RRULE or RDATE property |
|              | ignored. Scheduled as a    | name and value MAY be   |
|              | single component.          | specified.              |
|==============+============================+=========================|
| 2.9          | Success, truncated end date| DTEND property value    |
|              | time to date boundary.     | MAY be specified.       |
|==============+============================+=========================|
| 2.10         | Success, repeating VTODO   | RRULE or RDATE property |
|              | ignored. Scheduled as a    | name and value MAY be   |
|              | single VTODO.              | specified.              |
|==============+============================+=========================|
| 2.11         | Success, unbounded RRULE   | RRULE property name and |
|              | clipped at some finite     | value MAY be specified. |
|              | number of instances        | Number of instances MAY |
|              |                            | also be specified.      |
|==============+============================+=========================|
| 3.0          | Invalid property name.     | Property name MAY be    |
|              |                            | specified.              |
|==============+============================+=========================|
| 3.1          | Invalid property value.    | Property name and value |
|              |                            | MAY be specified.       |
|==============+============================+=========================|
| 3.2          | Invalid property parameter.| Property parameter name |
|              |                            | and value MAY be        |
|              |                            | specified.              |
|==============+============================+=========================|
| 3.3          | Invalid property parameter | Property parameter name |
|              | value.                     | and value MAY be        |
|              |                            | specified.              |
|==============+============================+=========================|
| 3.4          | Invalid calendar component | Calendar component      |
|              | sequence.                  | sentinel MAY be         |
|              |                            | specified (e.g., BEGIN: |
|              |                            | VTIMEZONE).             |
|==============+============================+=========================|
| 3.5          | Invalid date or time.      | Date/time value(s) MAY  |
|              |                            | be specified.           |
|==============+============================+=========================|
| 3.6          | Invalid rule.              | Rule value MAY be       |
|              |                            | specified.              |
|==============+============================+=========================|
| 3.7          | Invalid Calendar User.     | Attendee property value |
|              |                            |MAY be specified.        |
|==============+============================+=========================|
| 3.8          | No authority.              | METHOD and Attendee     |
|              |                            | property values MAY be  |
|              |                            | specified.              |
|==============+============================+=========================|
| 3.9          | Unsupported version.       | VERSION property name   |
|              |                            | and value MAY be        |
|              |                            | specified.              |
|==============+============================+=========================|
| 3.10         | Request entity too large.  | None.                   |
|==============+============================+=========================|
| 3.11         | Required component or      | Component or property   |
|              | property missing.          | name MAY be specified.  |
|==============+============================+=========================|
| 3.12         | Unknown component or       | Component or property   |
|              | property found             | name MAY be specified   |
|==============+============================+=========================|
| 3.13         | Unsupported component or   | Component or property   |
|              | property found             | name MAY be specified   |
|==============+============================+=========================|
| 3.14         | Unsupported capability     | Method or action MAY    |
|              |                            | be specified            |
|==============+============================+=========================|
| 4.0          | Event conflict. Date/time  | DTSTART and DTEND       |
|              | is busy.                   | property name and values|
|              |                            | MAY be specified.       |
|==============+============================+=========================|
| 5.0          | Request MAY supported.     | Method property value   |
|              |                            | MAY be specified.       |
|==============+============================+=========================|
| 5.1          | Service unavailable.       | ATTENDEE property value |
|              |                            | MAY be specified.       |
|==============+============================+=========================|
| 5.2          | Invalid calendar service.  | ATTENDEE property value |
|              |                            | MAY be specified.       |
|==============+============================+=========================|
| 5.3          | No scheduling support for  | ATTENDEE property value |
|              | user.                      | MAY be specified.       |
|==============+============================+=========================|

3.7 Implementation Considerations

3.7.1 Working With Recurrence Instances

Not supported in iCal-Basic.

3.7.2 Attendee Property Considerations

3.7.3 X-Tokens



 TOC 

4. Examples

Examples are in a separate document.



 TOC 

5. Application Protocol Fallbacks

5.1 Partial Implementation

iTIP applications that support this memo are required to support the entire protocol.

5.1.1 Event-Related Fallbacks

This section will discuss how to interoperate with iTIP.

5.1.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.1.2.1 Cancellation of an Unknown Calendar Component.

The "Attendee" tosses the "CANCEL" component. If the "Attendee" cares to see the appointment send a "REFRESH". If the "CANCEL" has no "DTSTART" value, then all of the appointnemt has been canceled, no point in doing a "REFRESH".

5.1.2.2 Unexpected Reply from an Unknown Delegate

Not supported in iCal-Basic.

5.1.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. The newest "DTSTAMP" value obsoletes the older.

5.2 Security Considerations

ITIP-BASIC 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.

5.2.1 Security Threats

5.2.1.1 Spoofing the "Organizer"

In iTIP-Basic, 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".

5.2.1.2 Spoofing the "Attendee"

In iTIP-Basic, an "Attendee" of a "VEVENT" or "VTODO" calendar component (or someone working on the "Attendee's" behalf) is the only person 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".

5.2.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.

5.2.1.4 Eavesdropping

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.

5.2.1.5 Flooding a Calendar

Implementations MAY 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.

5.2.1.6 Procedural Alarms

The "REQUEST" methods for "VEVENT" and "VTODO" calendar components MAY contain "VALARM" calendar components. The "VALARM" calendar component may be of type "PROCEDURE" and MAY have an attachment containing an executable program. Implementations that incorporate these types of alarms are subject to any virus or malicious attack that may occur as a result of executing the attachment.

5.2.1.7 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.

5.2.2 Recommendations

For an application where the information is sensitive or critical and the network is subject is subject to a high probability of attack, iTIP-Basic transactions SHOULD be encrypted. This may be accomplished using public key technology, specifically Security Multiparts for MIME

[RFC-1847] in the iTIP-Basic transport binding. This helps mitigate the threats of spoofing, eavesdropping and malicious changes in transit.

5.2.2.1 Use of [RFC-1847] to secure iTIP-Basic transactions

iTIP-Basic transport bindings MUST provide a mechanism based on Security Multiparts for MIME [RFC-1847] to enable authentication of the sender's identity, and privacy and integrity of the data being transmitted. This allows the receiver of a signed 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-Basic transport binding documents describe this process in detail.

Implementations MAY provide controls for users to disable this capability.

5.2.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-Basic transactions, and perhaps the size of messages and volume of traffic, by source.

The threat of malicious procedural alarms SHOULD be mitigated by a calendar system that uses this protocol by providing controls that may be used to disallow procedural alarms in iTIP-Basic transactions and/or remove all alarms from the object before delivery to the recipient.

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.

5.3 Acknowledgments

A hearty thanks to the following individuals who have participated in the drafting, review and discussion of this memo:

tbd



 TOC 

6 References

[1] Royer, D., "Internet Calendaring and Scheduling Core Object Specification - iCalendar Basic", draft-royer-ical-basic-02.txt, November 2005.
[2] Royer, D., "Basic iCalendar Message-Based Interoperability Protocol - iMIP Basic", draft-royer-imip-basic-00.txt, November 2005.
[3] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[4] "Coded Character Set--7-bit American Standard Code for Information Interchange, ANSI X3.4", 1986.


 TOC 

Author's Address

  Doug Royer
  IntelliCal, LLC
  267 Kentlands Blvd., #3041
  Gaithersburg, MD 20878
  USA
Phone:  +1-866-594-8574
EMail:  Doug@Royer.com


 TOC 

Intellectual Property Statement

Disclaimer of Validity

Copyright Statement

Acknowledgment