mirror of
https://github.com/etesync/android
synced 2024-11-23 00:18:19 +00:00
4372 lines
153 KiB
Plaintext
4372 lines
153 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Internet Engineering Task Force (IETF) C. Daboo
|
||
Request for Comments: 6638 Apple Inc.
|
||
Updates: 4791, 5546 B. Desruisseaux
|
||
Category: Standards Track Oracle
|
||
ISSN: 2070-1721 June 2012
|
||
|
||
|
||
Scheduling Extensions to CalDAV
|
||
|
||
Abstract
|
||
|
||
This document defines extensions to the Calendaring Extensions to
|
||
WebDAV (CalDAV) "calendar-access" feature to specify a standard way
|
||
of performing scheduling operations with iCalendar-based calendar
|
||
components. This document defines the "calendar-auto-schedule"
|
||
feature of CalDAV.
|
||
|
||
Status of This Memo
|
||
|
||
This is an Internet Standards Track document.
|
||
|
||
This document is a product of the Internet Engineering Task Force
|
||
(IETF). It represents the consensus of the IETF community. It has
|
||
received public review and has been approved for publication by the
|
||
Internet Engineering Steering Group (IESG). Further information on
|
||
Internet Standards is available in Section 2 of RFC 5741.
|
||
|
||
Information about the current status of this document, any errata,
|
||
and how to provide feedback on it may be obtained at
|
||
http://www.rfc-editor.org/info/rfc6638.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (c) 2012 IETF Trust and the persons identified as the
|
||
document authors. All rights reserved.
|
||
|
||
This document is subject to BCP 78 and the IETF Trust's Legal
|
||
Provisions Relating to IETF Documents
|
||
(http://trustee.ietf.org/license-info) in effect on the date of
|
||
publication of this document. Please review these documents
|
||
carefully, as they describe your rights and restrictions with respect
|
||
to this document. Code Components extracted from this document must
|
||
include Simplified BSD License text as described in Section 4.e of
|
||
the Trust Legal Provisions and are provided without warranty as
|
||
described in the Simplified BSD License.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 1]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
This document may contain material from IETF Documents or IETF
|
||
Contributions published or made publicly available before November
|
||
10, 2008. The person(s) controlling the copyright in some of this
|
||
material may not have granted the IETF Trust the right to allow
|
||
modifications of such material outside the IETF Standards Process.
|
||
Without obtaining an adequate license from the person(s) controlling
|
||
the copyright in such materials, this document may not be modified
|
||
outside the IETF Standards Process, and derivative works of it may
|
||
not be created outside the IETF Standards Process, except to format
|
||
it for publication as an RFC or to translate it into languages other
|
||
than English.
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction ....................................................5
|
||
1.1. Terminology ................................................6
|
||
1.2. Notational Conventions .....................................7
|
||
1.3. XML Namespaces and Processing ..............................7
|
||
2. Scheduling Support ..............................................8
|
||
2.1. Scheduling Outbox Collection ...............................9
|
||
2.1.1. CALDAV:schedule-outbox-URL Property ................10
|
||
2.2. Scheduling Inbox Collection ...............................10
|
||
2.2.1. CALDAV:schedule-inbox-URL Property .................11
|
||
2.3. Calendaring Reports Extensions ............................12
|
||
2.4. Additional Principal Properties ...........................12
|
||
2.4.1. CALDAV:calendar-user-address-set Property ..........12
|
||
2.4.2. CALDAV:calendar-user-type Property .................13
|
||
3. Scheduling Operations ..........................................14
|
||
3.1. Identifying Scheduling Object Resources ...................14
|
||
3.2. Handling Scheduling Object Resources ......................15
|
||
3.2.1. Organizer Scheduling Object Resources ..............15
|
||
3.2.1.1. Create ....................................16
|
||
3.2.1.2. Modify ....................................17
|
||
3.2.1.3. Remove ....................................18
|
||
3.2.2. Attendee Scheduling Object Resources ...............18
|
||
3.2.2.1. Allowed "Attendee" Changes ................18
|
||
3.2.2.2. Create ....................................19
|
||
3.2.2.3. Modify ....................................20
|
||
3.2.2.4. Remove ....................................21
|
||
3.2.3. HTTP Methods .......................................21
|
||
3.2.3.1. PUT .......................................22
|
||
3.2.3.2. DELETE ....................................22
|
||
3.2.3.3. COPY ......................................23
|
||
3.2.3.4. MOVE ......................................24
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 2]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3.2.4. Additional Method Preconditions ....................24
|
||
3.2.4.1. CALDAV:unique-scheduling-object-resource
|
||
Precondition ..............................24
|
||
3.2.4.2. CALDAV:same-organizer-in-all-components
|
||
Precondition ..............................25
|
||
3.2.4.3. CALDAV:allowed-organizer-scheduling-
|
||
object-change Precondition .............25
|
||
3.2.4.4. CALDAV:allowed-attendee-scheduling-
|
||
object-change Precondition .............26
|
||
3.2.5. DTSTAMP and SEQUENCE Properties ....................26
|
||
3.2.6. Restrict Recurrence Instances Sent to "Attendees" ..27
|
||
3.2.7. Forcing the Server to Send a Scheduling Message ....27
|
||
3.2.8. "Attendee" Participation Status ....................28
|
||
3.2.9. Schedule Status Values .............................29
|
||
3.2.10. Avoiding Conflicts when Updating Scheduling Object
|
||
Resources .........................................31
|
||
3.2.10.1. PUT .....................................33
|
||
3.2.10.2. DELETE, COPY, or MOVE ...................33
|
||
4. Processing Incoming Scheduling Messages ........................34
|
||
4.1. Processing "Organizer" Requests, Additions, and
|
||
Cancellations .............................................34
|
||
4.2. Processing "Attendee" Replies .............................35
|
||
4.3. Default Calendar Collection ...............................35
|
||
4.3.1. Additional Method Preconditions ....................36
|
||
4.3.1.1. CALDAV:default-calendar-needed
|
||
Precondition ..............................36
|
||
4.3.1.2. CALDAV:valid-schedule-default-calendar-URL
|
||
Precondition ..............................36
|
||
5. Request for Busy Time Information ..............................37
|
||
5.1. Status Codes ..............................................38
|
||
5.2. Additional Method Preconditions ...........................38
|
||
5.2.1. CALDAV:valid-scheduling-message Precondition .......38
|
||
5.2.2. CALDAV:valid-organizer Precondition ................39
|
||
6. Scheduling Privileges ..........................................39
|
||
6.1. Privileges on Scheduling Inbox Collections ................39
|
||
6.1.1. CALDAV:schedule-deliver Privilege ..................40
|
||
6.1.2. CALDAV:schedule-deliver-invite Privilege ...........40
|
||
6.1.3. CALDAV:schedule-deliver-reply Privilege ............40
|
||
6.1.4. CALDAV:schedule-query-freebusy Privilege ...........40
|
||
6.2. Privileges on Scheduling Outbox Collections ...............40
|
||
6.2.1. CALDAV:schedule-send Privilege .....................41
|
||
6.2.2. CALDAV:schedule-send-invite Privilege ..............41
|
||
6.2.3. CALDAV:schedule-send-reply Privilege ...............41
|
||
6.2.4. CALDAV:schedule-send-freebusy Privilege ............41
|
||
6.3. Aggregation of Scheduling Privileges ......................42
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 3]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
7. Additional iCalendar Property Parameters .......................42
|
||
7.1. Schedule Agent Parameter ..................................42
|
||
7.2. Schedule Force Send Parameter .............................44
|
||
7.3. Schedule Status Parameter .................................45
|
||
8. Additional Message Header Fields ...............................46
|
||
8.1. Schedule-Reply Request Header .............................46
|
||
8.2. Schedule-Tag Response Header ..............................46
|
||
8.3. If-Schedule-Tag-Match Request Header ......................47
|
||
9. Additional WebDAV Properties ...................................47
|
||
9.1. CALDAV:schedule-calendar-transp Property ..................47
|
||
9.2. CALDAV:schedule-default-calendar-URL Property .............48
|
||
9.3. CALDAV:schedule-tag Property ..............................49
|
||
10. XML Element Definitions .......................................50
|
||
10.1. CALDAV:schedule-response XML Element .....................50
|
||
10.2. CALDAV:response XML Element ..............................50
|
||
10.3. CALDAV:recipient XML Element .............................50
|
||
10.4. CALDAV:request-status XML Element ........................51
|
||
11. Security Considerations .......................................51
|
||
11.1. Preventing Denial-of-Service Attacks .....................51
|
||
11.2. Verifying Scheduling Operations ..........................52
|
||
11.3. Verifying Busy Time Information Requests .................52
|
||
11.4. Privacy Issues ...........................................53
|
||
11.5. Mitigation of iTIP Threats ...............................53
|
||
12. IANA Considerations ...........................................54
|
||
12.1. Message Header Field Registrations .......................54
|
||
12.1.1. Schedule-Reply ....................................54
|
||
12.1.2. Schedule-Tag ......................................54
|
||
12.1.3. If-Schedule-Tag-Match .............................54
|
||
12.2. iCalendar Property Parameter Registrations ...............55
|
||
12.3. iCalendar REQUEST-STATUS Value Registrations .............55
|
||
12.4. Additional iCalendar Elements Registries .................55
|
||
12.4.1. Schedule Agent Values Registry ....................56
|
||
12.4.2. Schedule Force Send Values Registry ...............56
|
||
13. Acknowledgements ..............................................56
|
||
14. References ....................................................57
|
||
14.1. Normative References .....................................57
|
||
14.2. Informative References ...................................58
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 4]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Appendix A. Scheduling Privileges Summary .........................59
|
||
A.1. Scheduling Inbox Privileges ................................59
|
||
A.2. Scheduling Outbox Privileges ...............................60
|
||
Appendix B. Example Scheduling Operations .........................60
|
||
B.1. Example: "Organizer" Inviting Multiple "Attendees" .........61
|
||
B.2. Example: "Attendee" Receiving an Invitation ................63
|
||
B.3. Example: "Attendee" Replying to an Invitation ..............64
|
||
B.4. Example: "Organizer" Receiving a Reply to an Invitation ....66
|
||
B.5. Example: "Organizer" Requesting Busy Time Information ......69
|
||
B.6. Example: User Attempting to Invite "Attendee" on
|
||
Behalf of "Organizer" ......................................71
|
||
B.7. Example: "Attendee" Declining an Instance of a
|
||
Recurring Event ............................................72
|
||
B.8. Example: "Attendee" Removing an Instance of a
|
||
Recurring Event ............................................75
|
||
|
||
1. Introduction
|
||
|
||
This document specifies extensions to the CalDAV "calendar-access"
|
||
[RFC4791] feature to enable scheduling of iCalendar-based [RFC5545]
|
||
calendar components between calendar users.
|
||
|
||
This extension leverages the scheduling methods defined in the
|
||
iCalendar Transport-independent Interoperability Protocol (iTIP)
|
||
[RFC5546] to permit calendar users to perform scheduling operations
|
||
such as schedule, reschedule, respond to scheduling request, or
|
||
cancel calendar components, as well as search for busy time
|
||
information. However, the following iTIP [RFC5546] features are not
|
||
covered: publishing, countering, delegating, refreshing, and
|
||
forwarding calendar components, as well as replacing the "Organizer"
|
||
of a calendar component. It is expected that future extensions will
|
||
be developed to address these.
|
||
|
||
This specification defines a client/server scheduling protocol, where
|
||
the server is made responsible for sending scheduling messages and
|
||
processing incoming scheduling messages. The client operations of
|
||
creating, modifying, or deleting a calendar component in a calendar
|
||
are enough to trigger the server to deliver the necessary scheduling
|
||
messages to the appropriate calendar users. This approach is
|
||
sometimes referred to as "implicit scheduling".
|
||
|
||
This specification only addresses how scheduling occurs with users on
|
||
a single system (i.e., scheduling between CalDAV servers, or some
|
||
other calendaring and scheduling system, is not defined). However,
|
||
this specification is compatible with servers being able to send or
|
||
receive scheduling messages with "external" users (e.g., using the
|
||
iCalendar Message-Based Interoperability Protocol (iMIP) [RFC6047]).
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 5]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Section 3 defines the automated "Scheduling Operations" that allow a
|
||
client to store iCalendar data on a CalDAV server, with the server
|
||
taking specific actions in response. One of three scheduling
|
||
operations can take place -- "create", "modify", or "remove", based
|
||
on the HTTP method used for the request -- in addition to a
|
||
comparison between any existing and any new iCalendar data.
|
||
|
||
Section 4 defines how the server processes scheduling messages sent
|
||
as the result of a scheduling operation.
|
||
|
||
Section 5 defines how freebusy requests with an immediate response
|
||
are accomplished.
|
||
|
||
Section 6 defines access control privileges for the scheduling
|
||
operations defined in this specification.
|
||
|
||
For the majority of the following discussion, scheduling of events
|
||
will be discussed. However, scheduling of to-dos is also fully
|
||
supported by this specification.
|
||
|
||
This specification has been under development for a number of years,
|
||
and most current implementations of CalDAV support it. With the
|
||
publication of this document, it is expected that all new CalDAV
|
||
implementations will support it by default. Interoperability tests
|
||
have been performed regularly. Significant issues with incompatible
|
||
CalDAV implementations are not anticipated.
|
||
|
||
1.1. Terminology
|
||
|
||
This specification reuses much of the same terminology as iCalendar
|
||
[RFC5545], iTIP [RFC5546], WebDAV [RFC4918], and CalDAV [RFC4791].
|
||
Additional terms used by this specification are as follows:
|
||
|
||
Scheduling object resource: A calendar object resource contained in
|
||
a calendar collection for which the server will take care of
|
||
sending scheduling messages on behalf of the owner of the calendar
|
||
collection.
|
||
|
||
Organizer scheduling object resource: A scheduling object resource
|
||
owned by the "Organizer".
|
||
|
||
Attendee scheduling object resource: A scheduling object resource
|
||
owned by an "Attendee".
|
||
|
||
Scheduling operation: Add, change, or remove operations on a
|
||
scheduling object resource for which the server will deliver
|
||
scheduling messages to other calendar users.
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 6]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Scheduling message: A calendar object that describes a scheduling
|
||
operation such as schedule, reschedule, reply, or cancel.
|
||
|
||
Scheduling Outbox collection: A resource at which busy time
|
||
information requests are targeted.
|
||
|
||
Scheduling Inbox collection: A collection in which incoming
|
||
scheduling messages are delivered.
|
||
|
||
1.2. Notational Conventions
|
||
|
||
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 [RFC2119].
|
||
|
||
The Augmented BNF (ABNF) syntax used by this document to specify the
|
||
format definition of new iCalendar elements is defined in [RFC5234].
|
||
|
||
The ABNF syntax used by this document to specify the format
|
||
definition of new message header fields to be used with the HTTP/1.1
|
||
protocol is described in Section 2.1 of [RFC2616]. Since this
|
||
Augmented BNF uses the basic production rules provided in Section 2.2
|
||
of [RFC2616], these rules apply to this document as well.
|
||
|
||
The term "protected" is used in the Conformance field of WebDAV
|
||
property definitions as defined in Section 15 of [RFC4918].
|
||
|
||
Calendaring and scheduling roles are referred to in quoted-strings of
|
||
text with the first character of each word in uppercase. For
|
||
example, "Organizer" refers to a role of a calendar user within the
|
||
scheduling protocol defined by [RFC5546].
|
||
|
||
1.3. XML Namespaces and Processing
|
||
|
||
This document uses XML DTD fragments ([W3C.REC-xml-20081126],
|
||
Section 3.2) as a purely notational convention. WebDAV request and
|
||
response bodies cannot be validated by a DTD due to the specific
|
||
extensibility rules defined in Section 17 of [RFC4918] and due to the
|
||
fact that all XML elements defined by that specification use the XML
|
||
namespace name "DAV:". In particular,
|
||
|
||
1. element names use the "DAV:" namespace,
|
||
|
||
2. element ordering is irrelevant unless explicitly stated,
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 7]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3. extension elements (elements not already defined as valid child
|
||
elements) can be added anywhere, except when explicitly stated
|
||
otherwise, and
|
||
|
||
4. extension attributes (attributes not already defined as valid for
|
||
this element) can be added anywhere, except when explicitly
|
||
stated otherwise.
|
||
|
||
The XML elements specified in this document are defined in the
|
||
"urn:ietf:params:xml:ns:caldav" XML namespace registered by CalDAV
|
||
[RFC4791].
|
||
|
||
When XML element types in the namespaces "DAV:" and
|
||
"urn:ietf:params:xml:ns:caldav" are referenced in this document
|
||
outside of the context of an XML fragment, the strings "DAV:" and
|
||
"CALDAV:" will be prefixed to the element types, respectively.
|
||
|
||
This document inherits, and sometimes extends, DTD productions from
|
||
Section 14 of [RFC4918].
|
||
|
||
Also note that some CalDAV XML element names are identical to WebDAV
|
||
XML element names, though their namespace differs. Care needs to be
|
||
taken not to confuse the two sets of names.
|
||
|
||
2. Scheduling Support
|
||
|
||
A server that supports the features described in this document is
|
||
REQUIRED to support the CalDAV "calendar-access" [RFC4791] feature.
|
||
Servers include "calendar-auto-schedule" as a field in the DAV
|
||
response header from an OPTIONS request on any resource that supports
|
||
any scheduling operations, properties, privileges, or methods.
|
||
|
||
This specification introduces new collection resource types that are
|
||
used to manage scheduling object resources, and scheduling privileges
|
||
(as per Section 6), as well as provide scheduling functionality. It
|
||
is the server's responsibility to create these collection resources,
|
||
and clients have no way to create or delete them.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 8]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
2.1. Scheduling Outbox Collection
|
||
|
||
A scheduling Outbox collection is used as the target for busy time
|
||
information requests, and to manage privileges that apply to outgoing
|
||
scheduling requests.
|
||
|
||
A scheduling Outbox collection MUST report the DAV:collection and
|
||
CALDAV:schedule-outbox XML elements in the value of the DAV:
|
||
resourcetype property. The element type declaration for CALDAV:
|
||
schedule-outbox is
|
||
|
||
<!ELEMENT schedule-outbox EMPTY>
|
||
|
||
Example:
|
||
|
||
<D:resourcetype xmlns:D="DAV:">
|
||
<D:collection/>
|
||
<C:schedule-outbox xmlns:C="urn:ietf:params:xml:ns:caldav"/>
|
||
</D:resourcetype>
|
||
|
||
A scheduling Outbox collection MUST NOT be a child (at any depth) of
|
||
a calendar collection resource.
|
||
|
||
The following WebDAV properties specified in CalDAV "calendar-access"
|
||
[RFC4791] MAY also be defined on scheduling Outbox collections and
|
||
apply to scheduling messages submitted to the scheduling Outbox
|
||
collection with the POST method:
|
||
|
||
o CALDAV:supported-calendar-component-set
|
||
|
||
o CALDAV:supported-calendar-data
|
||
|
||
o CALDAV:max-resource-size
|
||
|
||
o CALDAV:min-date-time
|
||
|
||
o CALDAV:max-date-time
|
||
|
||
o CALDAV:max-attendees-per-instance
|
||
|
||
The use of child resources in a scheduling Outbox collection is
|
||
reserved for future revisions or extensions of this specification.
|
||
|
||
The following WebDAV property is defined on principal resources and
|
||
used to locate the corresponding Outbox collection for the associated
|
||
principal.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 9]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
2.1.1. CALDAV:schedule-outbox-URL Property
|
||
|
||
Name: schedule-outbox-URL
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Purpose: Identify the URL of the scheduling Outbox collection owned
|
||
by the associated principal resource.
|
||
|
||
Protected: This property MAY be protected.
|
||
|
||
PROPFIND behavior: This property SHOULD NOT be returned by a
|
||
PROPFIND DAV:allprop request (as defined in Section 14.2 of
|
||
[RFC4918]).
|
||
|
||
COPY/MOVE behavior: This property value SHOULD be preserved in COPY
|
||
and MOVE operations.
|
||
|
||
Description: This property is needed for a client to determine where
|
||
the scheduling Outbox collection of the current user is located so
|
||
that sending of scheduling messages can occur. If not present,
|
||
then the associated calendar user is not enabled for the sending
|
||
of scheduling messages on the server.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT schedule-outbox-URL (DAV:href)>
|
||
|
||
2.2. Scheduling Inbox Collection
|
||
|
||
A scheduling Inbox collection contains copies of incoming scheduling
|
||
messages. These can be requests sent by an "Organizer", or replies
|
||
sent by an "Attendee" in response to a request. The scheduling Inbox
|
||
collection is also used to manage scheduling privileges.
|
||
|
||
A scheduling Inbox collection MUST report the DAV:collection and
|
||
CALDAV:schedule-inbox XML elements in the value of the DAV:
|
||
resourcetype property. The element type declaration for CALDAV:
|
||
schedule-inbox is
|
||
|
||
<!ELEMENT schedule-inbox EMPTY>
|
||
|
||
Example:
|
||
|
||
<D:resourcetype xmlns:D="DAV:">
|
||
<D:collection/>
|
||
<C:schedule-inbox xmlns:C="urn:ietf:params:xml:ns:caldav"/>
|
||
</D:resourcetype>
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 10]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Scheduling Inbox collections MUST only contain calendar object
|
||
resources that obey the restrictions specified in iTIP [RFC5546].
|
||
Consequently, scheduling Inbox collections MUST NOT contain any types
|
||
of collection resources. Restrictions defined in Section 4.1 of
|
||
CalDAV "calendar-access" [RFC4791] on calendar object resources
|
||
contained in calendar collections (e.g., Unique Identifier ("UID")
|
||
uniqueness) do not apply to calendar object resources contained in a
|
||
scheduling Inbox collection. Thus, multiple calendar object
|
||
resources contained in a scheduling Inbox collection can have the
|
||
same "UID" property value (i.e., multiple scheduling messages for the
|
||
same calendar component).
|
||
|
||
A scheduling Inbox collection MUST NOT be a child (at any depth) of a
|
||
calendar collection resource.
|
||
|
||
The following WebDAV properties specified in CalDAV "calendar-access"
|
||
[RFC4791] MAY also be defined on scheduling Inbox collections and
|
||
apply to scheduling messages delivered to the collection:
|
||
|
||
o CALDAV:supported-calendar-component-set
|
||
|
||
o CALDAV:supported-calendar-data
|
||
|
||
o CALDAV:max-resource-size
|
||
|
||
o CALDAV:min-date-time
|
||
|
||
o CALDAV:max-date-time
|
||
|
||
o CALDAV:max-instances
|
||
|
||
o CALDAV:max-attendees-per-instance
|
||
|
||
o CALDAV:calendar-timezone
|
||
|
||
The following WebDAV property is defined on principal resources and
|
||
used to locate the corresponding Inbox collection for the associated
|
||
principal.
|
||
|
||
2.2.1. CALDAV:schedule-inbox-URL Property
|
||
|
||
Name: schedule-inbox-URL
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Purpose: Identify the URL of the scheduling Inbox collection owned
|
||
by the associated principal resource.
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 11]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Protected: This property MAY be protected.
|
||
|
||
PROPFIND behavior: This property SHOULD NOT be returned by a
|
||
PROPFIND DAV:allprop request (as defined in Section 14.2 of
|
||
[RFC4918]).
|
||
|
||
COPY/MOVE behavior: This property value SHOULD be preserved in COPY
|
||
and MOVE operations.
|
||
|
||
Description: This property allows a client to determine where the
|
||
scheduling Inbox collection of the current user is located so that
|
||
processing of scheduling messages can occur. If not present, then
|
||
the associated calendar user is not enabled for reception of
|
||
scheduling messages on the server.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT schedule-inbox-URL (DAV:href)>
|
||
|
||
2.3. Calendaring Reports Extensions
|
||
|
||
This specification extends the CALDAV:calendar-query and CALDAV:
|
||
calendar-multiget REPORTs to return results for calendar object
|
||
resources in scheduling Inbox collections.
|
||
|
||
When a CALDAV:calendar-query REPORT includes a time-range query and
|
||
targets a scheduling Inbox collection, if any calendar object
|
||
resources contain "VEVENT" calendar components that do not include a
|
||
"DTSTART" iCalendar property (as allowed by iTIP [RFC5546]) then such
|
||
components MUST always match the time-range query test.
|
||
|
||
Note that the CALDAV:free-busy-query REPORT is not supported on
|
||
scheduling Inbox collections.
|
||
|
||
2.4. Additional Principal Properties
|
||
|
||
This section defines new properties for WebDAV principal resources as
|
||
defined in [RFC3744]. These properties are likely to be protected,
|
||
but the server MAY allow them to be written by appropriate users.
|
||
|
||
2.4.1. CALDAV:calendar-user-address-set Property
|
||
|
||
Name: calendar-user-address-set
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Purpose: Identify the calendar addresses of the associated principal
|
||
resource.
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 12]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Protected: This property MAY be protected.
|
||
|
||
PROPFIND behavior: This property SHOULD NOT be returned by a
|
||
PROPFIND DAV:allprop request (as defined in Section 14.2 of
|
||
[RFC4918]).
|
||
|
||
COPY/MOVE behavior: This property value SHOULD be preserved in COPY
|
||
and MOVE operations.
|
||
|
||
Description: Support for this property is REQUIRED. This property
|
||
is needed to map calendar user addresses in iCalendar data to
|
||
principal resources and their associated scheduling Inbox and
|
||
Outbox collections. In the event that a user has no well-defined
|
||
identifier for his calendar user address, the URI of his principal
|
||
resource can be used. This property SHOULD be searchable using
|
||
the DAV:principal-property-search REPORT. The DAV:principal-
|
||
search-property-set REPORT SHOULD identify this property as such.
|
||
If not present, then the associated calendar user is not enabled
|
||
for scheduling on the server.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT calendar-user-address-set (DAV:href*)>
|
||
|
||
Example:
|
||
|
||
<C:calendar-user-address-set xmlns:D="DAV:"
|
||
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||
<D:href>mailto:bernard@example.com</D:href>
|
||
<D:href>mailto:bernard.desruisseaux@example.com</D:href>
|
||
</C:calendar-user-address-set>
|
||
|
||
2.4.2. CALDAV:calendar-user-type Property
|
||
|
||
Name: calendar-user-type
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Purpose: Identifies the calendar user type of the associated
|
||
principal resource.
|
||
|
||
Value: Same values allowed for the iCalendar "CUTYPE" property
|
||
parameter defined in Section 3.2.3 of [RFC5545].
|
||
|
||
Protected: This property MAY be protected.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 13]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
PROPFIND behavior: This property SHOULD NOT be returned by a
|
||
PROPFIND DAV:allprop request (as defined in Section 14.2 of
|
||
[RFC4918]).
|
||
|
||
COPY/MOVE behavior: This property value SHOULD be preserved in COPY
|
||
and MOVE operations.
|
||
|
||
Description: Clients can query principal resources in order to look
|
||
up "Attendees" available on the server. When doing this, it is
|
||
useful to know, or restrict the query to, certain types of
|
||
calendar users (e.g., only search for "people", or only search for
|
||
"rooms"). This property MAY be defined on principal resources to
|
||
indicate the type of calendar user associated with the principal
|
||
resource. Its value is the same as the iCalendar "CUTYPE"
|
||
property parameter that can be used on "ATTENDEE" properties.
|
||
This property SHOULD be searchable using the DAV:principal-
|
||
property-search REPORT. The DAV:principal-search-property-set
|
||
REPORT SHOULD identify this property as such.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT calendar-user-type (#PCDATA)>
|
||
|
||
Example:
|
||
|
||
<C:calendar-user-type
|
||
xmlns:C="urn:ietf:params:xml:ns:caldav">INDIVIDUAL<
|
||
/C:calendar-user-type>
|
||
|
||
3. Scheduling Operations
|
||
|
||
When a calendar object resource is created, modified, or removed from
|
||
a calendar collection, the server examines the calendar data and
|
||
checks to see whether the data represents a scheduling object
|
||
resource. If it does, the server will automatically attempt to
|
||
deliver a scheduling message to the appropriate calendar users.
|
||
Several types of scheduling operations can occur in this case,
|
||
equivalent to iTIP "REQUEST", "REPLY", "CANCEL", and "ADD"
|
||
operations.
|
||
|
||
3.1. Identifying Scheduling Object Resources
|
||
|
||
Calendar object resources on which the server performs scheduling
|
||
operations are referred to as scheduling object resources. There are
|
||
two types of scheduling object resources: organizer scheduling object
|
||
resources, and attendee scheduling object resources.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 14]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
A calendar object resource is considered to be a valid organizer
|
||
scheduling object resource if the "ORGANIZER" iCalendar property is
|
||
present and set in all the calendar components to a value that
|
||
matches one of the calendar user addresses of the owner of the
|
||
calendar collection.
|
||
|
||
A calendar object resource is considered to be a valid attendee
|
||
scheduling object resource if the "ORGANIZER" iCalendar property is
|
||
present and set in all the calendar components to the same value and
|
||
doesn't match one of the calendar user addresses of the owner of the
|
||
calendar collection, and if at least one of the "ATTENDEE" iCalendar
|
||
property values matches one of the calendar user addresses of the
|
||
owner of the calendar collection.
|
||
|
||
The creation of attendee scheduling object resources is typically
|
||
done by the server, with the resource being created in an appropriate
|
||
calendar collection (see Section 4.3).
|
||
|
||
3.2. Handling Scheduling Object Resources
|
||
|
||
The server's behavior when processing a scheduling object resource
|
||
depends on whether it is owned by the "Organizer" or an "Attendee"
|
||
specified in the calendar data.
|
||
|
||
3.2.1. Organizer Scheduling Object Resources
|
||
|
||
An "Organizer" can create, modify, or remove a scheduling object
|
||
resource, subject to access privileges, preconditions, and the
|
||
restrictions defined in Section 4.1 of [RFC4791]. These operations
|
||
are each described next, and how they are invoked via HTTP requests
|
||
is described in Section 3.2.3.
|
||
|
||
The "Organizer" of a calendar component can also be an "Attendee" of
|
||
that calendar component. In such cases, the server MUST NOT send a
|
||
scheduling message to the "Attendee" that matches the "Organizer".
|
||
|
||
The server SHOULD reject any attempt to set the "PARTSTAT" iCalendar
|
||
property parameter value of the "ATTENDEE" iCalendar property of
|
||
other users in the calendar object resource to a value other than
|
||
"NEEDS-ACTION" if the "SCHEDULE-AGENT" property parameter value is
|
||
not present or set to the value "SERVER".
|
||
|
||
The server MAY reject attempts to create a scheduling object resource
|
||
that specifies a "UID" property value already specified in a
|
||
scheduling object resource contained in another calendar collection
|
||
of the "Organizer".
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 15]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3.2.1.1. Create
|
||
|
||
When an "Organizer" creates a scheduling object resource, the server
|
||
MUST inspect each "ATTENDEE" property to determine whether to send a
|
||
scheduling message. The table below indicates the appropriate iTIP
|
||
method used by the server, taking into account any "SCHEDULE-AGENT"
|
||
property parameter (see Section 7.1) specified on each "ATTENDEE"
|
||
property.
|
||
|
||
+------------------+-------------+
|
||
| SCHEDULE-AGENT | iTIP METHOD |
|
||
+------------------+-------------+
|
||
| SERVER (default) | REQUEST |
|
||
| | |
|
||
| CLIENT | -- |
|
||
| | |
|
||
| NONE | -- |
|
||
+------------------+-------------+
|
||
|
||
"SCHEDULE-STATUS" iCalendar property parameters are added or changed
|
||
on "ATTENDEE" iCalendar properties in the scheduling object resource
|
||
being created as described in Section 7.3, with the value set as
|
||
described in Section 3.2.9. This will result in the created calendar
|
||
object resource differing from the calendar data sent in the HTTP
|
||
request. As a result, clients MAY reload the calendar data from the
|
||
server in order to update to the new server-generated state
|
||
information.
|
||
|
||
The server MUST add a "SCHEDULE-STATUS" iCalendar property parameter
|
||
(see Section 7.3) to the "ATTENDEE" iCalendar property in the
|
||
scheduling object resource being created, and set its value as
|
||
described in Section 3.2.9. This will result in the created calendar
|
||
object resource differing from the calendar data sent in the HTTP
|
||
request. As a result, clients MAY reload the calendar data from the
|
||
server in order to update to the new server-generated state
|
||
information. Servers MUST NOT set the "SCHEDULE-STATUS" property
|
||
parameter on the "ATTENDEE" property of "Attendees" for which it did
|
||
not attempt to deliver a scheduling message.
|
||
|
||
The server MUST return an error with the CALDAV:allowed-organizer-
|
||
scheduling-object-change precondition code (Section 3.2.4.3) when the
|
||
"Organizer" attempts to change the iCalendar data in a manner that is
|
||
forbidden.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 16]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3.2.1.2. Modify
|
||
|
||
When an "Organizer" modifies a scheduling object resource, the server
|
||
MUST inspect each "ATTENDEE" property in both the original and
|
||
modified iCalendar data on a per-instance basis to determine whether
|
||
to send a scheduling message. The table below indicates the
|
||
appropriate iTIP method used by the server, taking into account any
|
||
"SCHEDULE-AGENT" property parameter (see Section 7.1) specified on
|
||
each "ATTENDEE" property. The values "SERVER", "CLIENT", and "NONE"
|
||
in the top and left titles of the table refer to the "SCHEDULE-AGENT"
|
||
parameter value of the "ATTENDEE" property, and the values "<Absent>"
|
||
and "<Removed>" are used to cover the cases where the "ATTENDEE"
|
||
property is not present (Original) or is being removed (Modified).
|
||
|
||
+---------------+-----------------------------------------------+
|
||
| | Modified |
|
||
| +-----------+-----------+-----------+-----------+
|
||
| | <Removed> | SERVER | CLIENT | NONE |
|
||
| | | (default) | | |
|
||
+===+===========+===========+===========+===========+===========+
|
||
| | <Absent> | -- | REQUEST / | -- | -- |
|
||
| O | | | ADD | | |
|
||
| r +-----------+-----------+-----------+-----------+-----------+
|
||
| i | SERVER | CANCEL | REQUEST | CANCEL | CANCEL |
|
||
| g | (default) | | | | |
|
||
| i +-----------+-----------+-----------+-----------+-----------+
|
||
| n | CLIENT | -- | REQUEST / | -- | -- |
|
||
| a | | | ADD | | |
|
||
| l +-----------+-----------+-----------+-----------+-----------+
|
||
| | NONE | -- | REQUEST / | -- | -- |
|
||
| | | | ADD | | |
|
||
+---+-----------+-----------+-----------+-----------+-----------+
|
||
|
||
"SCHEDULE-STATUS" iCalendar property parameters are added or changed
|
||
on "ATTENDEE" iCalendar properties in the scheduling object resource
|
||
being modified as described in Section 7.3, with the value set as
|
||
described in Section 3.2.9. This will result in the created calendar
|
||
object resource differing from the calendar data sent in the HTTP
|
||
request. As a result, clients MAY reload the calendar data from the
|
||
server in order to update to the new server-generated state
|
||
information.
|
||
|
||
The server MUST return an error with the CALDAV:allowed-organizer-
|
||
scheduling-object-change precondition code (Section 3.2.4.3) when the
|
||
"Organizer" attempts to change the iCalendar data in a manner that is
|
||
forbidden.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 17]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3.2.1.3. Remove
|
||
|
||
When an "Organizer" removes a scheduling object resource, the server
|
||
MUST inspect each "ATTENDEE" property to determine whether to send a
|
||
scheduling message. The table below indicates the appropriate iTIP
|
||
method used by the server, taking into account any "SCHEDULE-AGENT"
|
||
property parameter (see Section 7.1) specified on each "ATTENDEE"
|
||
property.
|
||
|
||
+------------------+-------------+
|
||
| SCHEDULE-AGENT | iTIP METHOD |
|
||
+------------------+-------------+
|
||
| SERVER (default) | CANCEL |
|
||
| | |
|
||
| CLIENT | -- |
|
||
| | |
|
||
| NONE | -- |
|
||
+------------------+-------------+
|
||
|
||
3.2.2. Attendee Scheduling Object Resources
|
||
|
||
An "Attendee" can create, modify, or remove a scheduling object
|
||
resource. These operations are each described next, and how they are
|
||
invoked via HTTP requests is described in Section 3.2.3.
|
||
|
||
3.2.2.1. Allowed "Attendee" Changes
|
||
|
||
"Attendees" are allowed to make some changes to a scheduling object
|
||
resource, though key properties such as start time, end time,
|
||
location, and summary are typically under the control of the
|
||
"Organizer".
|
||
|
||
Servers MUST allow "Attendees" to make the following iCalendar data
|
||
changes, subject to other restrictions, such as access privileges and
|
||
preconditions:
|
||
|
||
1. change their own "PARTSTAT" iCalendar property parameter value.
|
||
|
||
2. add, modify, or remove any "TRANSP" iCalendar properties.
|
||
|
||
3. add, modify, or remove any "PERCENT-COMPLETE" iCalendar
|
||
properties.
|
||
|
||
4. add, modify, or remove any "COMPLETED" iCalendar properties.
|
||
|
||
5. add, modify, or remove any "VALARM" iCalendar components.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 18]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
6. add, modify, or remove the "CALSCALE" iCalendar property within
|
||
the top-level "VCALENDAR" component.
|
||
|
||
7. modify the "PRODID" iCalendar property within the top-level
|
||
"VCALENDAR" component.
|
||
|
||
8. add "EXDATE" iCalendar properties and possibly remove components
|
||
for overridden recurrence instances.
|
||
|
||
9. add, modify, or remove any "CREATED", "DTSTAMP", and
|
||
"LAST-MODIFIED" iCalendar properties.
|
||
|
||
10. add, modify, or remove "SCHEDULE-STATUS" iCalendar property
|
||
parameters on "ATTENDEE" properties that have a "SCHEDULE-AGENT"
|
||
parameter set to "CLIENT".
|
||
|
||
11. add new components to represent overridden recurrence instances,
|
||
provided the only changes to the recurrence instance follow the
|
||
rules above.
|
||
|
||
The server MUST return an error with the CALDAV:allowed-attendee-
|
||
scheduling-object-change precondition code (Section 3.2.4.4) when the
|
||
"Attendee" attempts to change the iCalendar data in a manner
|
||
forbidden by the server.
|
||
|
||
3.2.2.2. Create
|
||
|
||
Typically, an "Attendee" does not create scheduling object resources,
|
||
as scheduling messages delivered to him on the server are
|
||
automatically processed by the server and placed on one of his
|
||
calendars (see Section 4). However, in some cases, a scheduling
|
||
message can get delivered directly to the client (e.g., via email
|
||
[RFC6047]), and the "Attendee" might wish to store that on the
|
||
server. In that case, the client creates a scheduling object
|
||
resource in a calendar belonging to the "Attendee". It can then set
|
||
the "SCHEDULE-AGENT" iCalendar property parameter on all "ORGANIZER"
|
||
iCalendar properties in the resource to determine how the server
|
||
treats the resource. The value of the "SCHEDULE-AGENT" iCalendar
|
||
property parameter on all "ORGANIZER" iCalendar properties MUST be
|
||
the same.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 19]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
+----------------+--------------------------------------------------+
|
||
| SCHEDULE-AGENT | Action |
|
||
+----------------+--------------------------------------------------+
|
||
| SERVER | The server will attempt to process changes to |
|
||
| (default) | the resource using the normal rules for attendee |
|
||
| | scheduling object resources. |
|
||
| | |
|
||
| CLIENT | The server does no special processing of the |
|
||
| | resource. The client is assumed to be handling |
|
||
| | "Attendee" replies, etc. |
|
||
| | |
|
||
| NONE | The server does no special processing of the |
|
||
| | resource. |
|
||
+----------------+--------------------------------------------------+
|
||
|
||
"SCHEDULE-STATUS" iCalendar property parameters are added or changed
|
||
on "ORGANIZER" iCalendar properties in the scheduling object resource
|
||
being created as described in Section 7.3, with the value set as
|
||
described in Section 3.2.9.
|
||
|
||
3.2.2.3. Modify
|
||
|
||
When a scheduling object resource is modified by an "Attendee", the
|
||
server's behavior depends on the value of the "SCHEDULE-AGENT"
|
||
iCalendar property parameter on the "ORGANIZER" iCalendar properties:
|
||
|
||
+----------------+--------------------------------------------------+
|
||
| SCHEDULE-AGENT | Action |
|
||
+----------------+--------------------------------------------------+
|
||
| SERVER | The server will attempt to process the update |
|
||
| (default) | using the behavior listed below. |
|
||
| | |
|
||
| CLIENT | The server does no special processing of the |
|
||
| | resource. The client is assumed to be handling |
|
||
| | any "Attendee" replies, etc. |
|
||
| | |
|
||
| NONE | The server does no special processing of the |
|
||
| | resource. |
|
||
+----------------+--------------------------------------------------+
|
||
|
||
The server will inspect the changes by comparing the new scheduling
|
||
object resource with the existing scheduling object resource.
|
||
|
||
If the "Attendee" changes one or more "PARTSTAT" iCalendar property
|
||
values on any component, or adds an overridden component with a
|
||
changed "PARTSTAT" property, then the server MUST deliver an iTIP
|
||
"REPLY" scheduling message to the "Organizer" to indicate the new
|
||
participation status of the "Attendee".
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 20]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
If the "Attendee" adds an "EXDATE" property value to effectively
|
||
remove a recurrence instance, the server MUST deliver an iTIP "REPLY"
|
||
scheduling message to the "Organizer" to indicate that the "Attendee"
|
||
has declined the instance.
|
||
|
||
"SCHEDULE-STATUS" iCalendar property parameters are added or changed
|
||
on "ORGANIZER" iCalendar properties in the scheduling object resource
|
||
being modified as described in Section 7.3, with the value set as
|
||
described in Section 3.2.9. This will result in the updated calendar
|
||
object resource differing from the calendar data sent in the HTTP
|
||
request. As a result, clients MAY reload the calendar data from the
|
||
server in order to update to the new server-generated state
|
||
information.
|
||
|
||
3.2.2.4. Remove
|
||
|
||
When a scheduling object resource is removed by an "Attendee", the
|
||
server's behavior depends on the value of the "SCHEDULE-AGENT"
|
||
iCalendar property parameter on the "ORGANIZER" iCalendar properties:
|
||
|
||
+----------------+--------------------------------------------------+
|
||
| SCHEDULE-AGENT | Action |
|
||
+----------------+--------------------------------------------------+
|
||
| SERVER | The server will attempt to process the removal, |
|
||
| (default) | taking into account any "Schedule-Reply" request |
|
||
| | header as per Section 8.1. |
|
||
| | |
|
||
| CLIENT | The server does no special processing of the |
|
||
| | resource. The client is assumed to be handling |
|
||
| | any "Attendee" replies, etc. |
|
||
| | |
|
||
| NONE | The server does no special processing of the |
|
||
| | resource. |
|
||
+----------------+--------------------------------------------------+
|
||
|
||
3.2.3. HTTP Methods
|
||
|
||
This section describes how the use of various HTTP [RFC2616] and
|
||
WebDAV [RFC4918] methods on a scheduling object resource will cause a
|
||
create, modify, or remove operation on that resource as described
|
||
above. The use of these methods is subject to the restrictions in
|
||
[RFC4791], in addition to what is described below.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 21]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3.2.3.1. PUT
|
||
|
||
When the server receives a PUT method request, it MUST execute the
|
||
following operations, provided all appropriate preconditions are met:
|
||
|
||
+------------------------+--------------------------+---------------+
|
||
| Existing Destination | Resulting Destination | Server |
|
||
| Resource | Resource | Operation |
|
||
+------------------------+--------------------------+---------------+
|
||
| None | Calendar object resource | None |
|
||
| | | |
|
||
| None | Scheduling object | Create |
|
||
| | resource | |
|
||
| | | |
|
||
| Calendar object | Calendar object resource | None |
|
||
| resource | | |
|
||
| | | |
|
||
| Calendar object | Scheduling object | Create |
|
||
| resource | resource | |
|
||
| Scheduling object | Calendar object resource | Remove |
|
||
| resource | | |
|
||
| | | |
|
||
| Scheduling object | Scheduling object | Modify |
|
||
| resource | resource | |
|
||
+------------------------+--------------------------+---------------+
|
||
|
||
3.2.3.2. DELETE
|
||
|
||
When the server receives a DELETE method request targeted at a
|
||
scheduling object resource, it MUST execute the Remove operation.
|
||
|
||
When the server receives a DELETE method request targeted at a
|
||
calendar collection, it MUST execute the Remove operation on all
|
||
scheduling object resources contained in the calendar collection.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 22]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3.2.3.3. COPY
|
||
|
||
When the server receives a COPY method request, it MUST execute the
|
||
following operations based on the source and destination collections
|
||
in the request:
|
||
|
||
+-----------------------+------------------------+------------------+
|
||
| Source Collection | Destination Collection | Server Operation |
|
||
+-----------------------+------------------------+------------------+
|
||
| Non-calendar | Non-calendar | None |
|
||
| collection | collection | |
|
||
| | | |
|
||
| Non-calendar | Calendar collection | (1) |
|
||
| collection | | |
|
||
| | | |
|
||
| Calendar collection | Non-calendar | None |
|
||
| | collection | |
|
||
| | | |
|
||
| Calendar collection | Calendar collection | (2) |
|
||
+-----------------------+------------------------+------------------+
|
||
|
||
Note (1): The rules in Section 3.2.3.1 are applied for the
|
||
destination of the COPY request.
|
||
|
||
Note (2): The server MAY reject this as per Section 3.2.4.1;
|
||
otherwise, None.
|
||
|
||
The behavior of a COPY method request on a calendar collection is
|
||
undefined.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 23]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3.2.3.4. MOVE
|
||
|
||
When the server receives a MOVE method request, it MUST execute the
|
||
following operations based on the source and destination collections
|
||
in the request:
|
||
|
||
+-----------------------+------------------------+------------------+
|
||
| Source Collection | Destination Collection | Server Operation |
|
||
+-----------------------+------------------------+------------------+
|
||
| Non-calendar | Non-calendar | None |
|
||
| collection | collection | |
|
||
| | | |
|
||
| Non-calendar | Calendar collection | (1) |
|
||
| collection | | |
|
||
| | | |
|
||
| Calendar collection | Non-calendar | (2) |
|
||
| | collection | |
|
||
| | | |
|
||
| Calendar collection | Calendar collection | None |
|
||
+-----------------------+------------------------+------------------+
|
||
|
||
Note (1): The rules in Section 3.2.3.1 are applied for the
|
||
destination of the MOVE request.
|
||
|
||
Note (2): The rules in Section 3.2.3.2 are applied for the source of
|
||
the MOVE request.
|
||
|
||
The behavior of a MOVE method request on a calendar collection is
|
||
undefined.
|
||
|
||
3.2.4. Additional Method Preconditions
|
||
|
||
This specification defines method preconditions (see Section 16 of
|
||
WebDAV [RFC4918]), in addition to those in [RFC4791], to provide
|
||
machine-parseable information in error responses.
|
||
|
||
3.2.4.1. CALDAV:unique-scheduling-object-resource Precondition
|
||
|
||
Name: unique-scheduling-object-resource
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Apply to: PUT, COPY, and MOVE
|
||
|
||
Use with: 403 Forbidden
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 24]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Purpose: (precondition) -- Servers MAY reject requests to create a
|
||
scheduling object resource with an iCalendar "UID" property value
|
||
already in use by another scheduling object resource owned by the
|
||
same user in other calendar collections. Servers SHOULD report
|
||
the URL of the scheduling object resource that is already making
|
||
use of the same "UID" property value in the DAV:href element.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT unique-scheduling-object-resource (DAV:href?)>
|
||
|
||
Example:
|
||
|
||
<C:unique-scheduling-object-resource xmlns:D="DAV:"
|
||
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||
<D:href>/home/bernard/calendars/personal/abc123.ics</D:href>
|
||
</C:unique-scheduling-object-resource>
|
||
|
||
3.2.4.2. CALDAV:same-organizer-in-all-components Precondition
|
||
|
||
Name: same-organizer-in-all-components
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Apply to: PUT, COPY, and MOVE
|
||
|
||
Use with: 403 Forbidden
|
||
|
||
Purpose: (precondition) -- All the calendar components in a
|
||
scheduling object resource MUST contain the same "ORGANIZER"
|
||
property value when present.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT same-organizer-in-all-components EMPTY>
|
||
|
||
3.2.4.3. CALDAV:allowed-organizer-scheduling-object-change Precondition
|
||
|
||
Name: allowed-organizer-scheduling-object-change
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Apply to: PUT, COPY, and MOVE
|
||
|
||
Use with: 403 Forbidden
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 25]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Purpose: (precondition) -- Servers MAY impose restrictions on
|
||
modifications allowed by an "Organizer". For instance, servers
|
||
MAY prevent the "Organizer" from setting the "PARTSTAT" property
|
||
parameter to a value other than "NEEDS-ACTION" if the
|
||
corresponding "ATTENDEE" property has the "SCHEDULE-AGENT"
|
||
property parameter set to "SERVER", or does not have the
|
||
"SCHEDULE-AGENT" property parameter. See Section 3.2.1.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT allowed-organizer-scheduling-object-change EMPTY>
|
||
|
||
3.2.4.4. CALDAV:allowed-attendee-scheduling-object-change Precondition
|
||
|
||
Name: allowed-attendee-scheduling-object-change
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Apply to: PUT, COPY, and MOVE
|
||
|
||
Use with: 403 Forbidden
|
||
|
||
Purpose: (precondition) -- Servers MAY impose restrictions on
|
||
modifications allowed by an "Attendee", subject to the allowed
|
||
changes specified in Section 3.2.2.1.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT allowed-attendee-scheduling-object-change EMPTY>
|
||
|
||
3.2.5. DTSTAMP and SEQUENCE Properties
|
||
|
||
The server MUST ensure that a "DTSTAMP" iCalendar property is present
|
||
and set the value to the UTC time that the scheduling message was
|
||
generated (as required by iCalendar).
|
||
|
||
The server MUST ensure that for each type of scheduling operation,
|
||
the "SEQUENCE" iCalendar property value is updated as per iTIP
|
||
[RFC5546].
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 26]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3.2.6. Restrict Recurrence Instances Sent to "Attendees"
|
||
|
||
Servers MUST ensure that "Attendees" only get information about
|
||
recurrence instances that explicitly include them as an "Attendee",
|
||
when delivering scheduling messages for recurring calendar
|
||
components.
|
||
|
||
For example, if an "Attendee" is invited to only a single instance of
|
||
a recurring event, the organizer scheduling object resource will
|
||
contain an overridden instance in the form of a separate calendar
|
||
component. That separate calendar component will include the
|
||
"ATTENDEE" property referencing the "one-off" "Attendee". That
|
||
"Attendee" will not be listed in any other calendar components in the
|
||
scheduling object resource. Any scheduling messages delivered to the
|
||
"Attendee" will only contain information about this overridden
|
||
instance.
|
||
|
||
As another example, an "Attendee" could be excluded from one instance
|
||
of a recurring event. In that case, the organizer scheduling object
|
||
resource will include an overridden instance with an "ATTENDEE" list
|
||
that does not include the "Attendee" being excluded. Any scheduling
|
||
messages delivered to the "Attendee" will not specify the overridden
|
||
instance but rather will include an "EXDATE" property in the "master"
|
||
component that defines the recurrence set.
|
||
|
||
3.2.7. Forcing the Server to Send a Scheduling Message
|
||
|
||
The iCalendar property parameter "SCHEDULE-FORCE-SEND", defined in
|
||
Section 7.2, can be used by a calendar user to force the server to
|
||
send a scheduling message to an "Attendee" or the "Organizer" in a
|
||
situation where the server would not normally send a scheduling
|
||
message. For instance, an "Organizer" could use this property
|
||
parameter to request an "Attendee" that previously declined an
|
||
invitation to reconsider his participation status without being
|
||
forced to modify the event.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 27]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3.2.8. "Attendee" Participation Status
|
||
|
||
This section specifies additional requirements on the handling of the
|
||
"PARTSTAT" property parameter when the "SCHEDULE-AGENT" property
|
||
parameter on the corresponding "ATTENDEE" property is set to the
|
||
value "SERVER" or is not present.
|
||
|
||
A reschedule occurs when any "DTSTART", "DTEND", "DURATION", "DUE",
|
||
"RRULE", "RDATE", or "EXDATE" property changes in a calendar
|
||
component such that existing recurrence instances are impacted by the
|
||
changes, as shown in the table below. Servers MUST reset the
|
||
"PARTSTAT" property parameter value of all "ATTENDEE" properties,
|
||
except the one that corresponds to the "Organizer", to "NEEDS-ACTION"
|
||
for each calendar component change that causes any instance to be
|
||
rescheduled.
|
||
|
||
+-----------+-------------------------------------------------------+
|
||
| Property | Server Action |
|
||
+-----------+-------------------------------------------------------+
|
||
| DTSTART, | Any change to these properties results in "PARTSTAT" |
|
||
| DTEND, | being set to "NEEDS-ACTION". |
|
||
| DURATION, | |
|
||
| DUE | |
|
||
| | |
|
||
| RRULE | A change to or addition of this property that results |
|
||
| | in the addition of new recurring instances or a |
|
||
| | change in time for existing recurring instances |
|
||
| | results in "PARTSTAT" being reset to "NEEDS-ACTION" |
|
||
| | on each affected component. |
|
||
| | |
|
||
| RDATE | A change to or addition of this property that results |
|
||
| | in the addition of new recurring instances or a |
|
||
| | change in time for existing recurring instances |
|
||
| | results in "PARTSTAT" being reset to "NEEDS-ACTION" |
|
||
| | on each affected component. |
|
||
| | |
|
||
| EXDATE | A change to or removal of this property that results |
|
||
| | in the reinstatement of recurring instances results |
|
||
| | in "PARTSTAT" being set to "NEEDS-ACTION" on each |
|
||
| | affected component. |
|
||
+-----------+-------------------------------------------------------+
|
||
|
||
The server MAY allow the "Organizer's" client to change an
|
||
"Attendee's" "PARTSTAT" property parameter value to "NEEDS-ACTION" at
|
||
any other time (e.g., when the "LOCATION" property value changes, an
|
||
"Organizer" might wish to re-invite "Attendees" who might be impacted
|
||
by the change).
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 28]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3.2.9. Schedule Status Values
|
||
|
||
When scheduling with an "Attendee", there are two types of status
|
||
information that can be returned during the operation. The first
|
||
type of status information is a "delivery" status that indicates
|
||
whether the scheduling message from the "Organizer" to the "Attendee"
|
||
was delivered or not, or what the current status of delivery is. The
|
||
second type of status information is a "reply" status corresponding
|
||
to the "Attendee's" own "REQUEST-STATUS" information from the
|
||
scheduling message reply that is sent back to the "Organizer".
|
||
|
||
Similarly, when an "Attendee" sends a reply back to the "Organizer",
|
||
there will be "delivery" status information for the scheduling
|
||
message sent to the "Organizer". However, there is no
|
||
"REQUEST-STATUS" sent back by the "Organizer", so there is no
|
||
equivalent of the "reply" status as per scheduling messages to
|
||
"Attendees".
|
||
|
||
The "delivery" status information on an "ORGANIZER" or "ATTENDEE"
|
||
iCalendar property is conveyed in the "SCHEDULE-STATUS" property
|
||
parameter value (Section 7.3). The status code value for "delivery"
|
||
status can be one of the following:
|
||
|
||
+----------+--------------------------------------------------------+
|
||
| Delivery | Description |
|
||
| Status | |
|
||
| Code | |
|
||
+----------+--------------------------------------------------------+
|
||
| 1.0 | The scheduling message is pending. That is, the |
|
||
| | server is still in the process of sending the message. |
|
||
| | The status code value can be expected to change once |
|
||
| | the server has completed its sending and delivery |
|
||
| | attempts. |
|
||
| | |
|
||
| 1.1 | The scheduling message has been successfully sent. |
|
||
| | However, the server does not have explicit information |
|
||
| | about whether the scheduling message was successfully |
|
||
| | delivered to the recipient. This state can occur with |
|
||
| | "store and forward" style scheduling protocols such as |
|
||
| | iMIP [RFC6047] (iTIP using email). |
|
||
| | |
|
||
| 1.2 | The scheduling message has been successfully |
|
||
| | delivered. |
|
||
| | |
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 29]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
| 3.7 | The scheduling message was not delivered because the |
|
||
| | server did not recognize the calendar user address as |
|
||
| | a valid calendar user. Note that this code applies to |
|
||
| | both "Organizer" and "Attendee" calendar user |
|
||
| | addresses. |
|
||
| | |
|
||
| 3.8 | The scheduling message was not delivered due to |
|
||
| | insufficient privileges. Note that this code applies |
|
||
| | to privileges granted by both the "Organizer" and |
|
||
| | "Attendee" calendar users. |
|
||
| | |
|
||
| 5.1 | The scheduling message was not delivered because the |
|
||
| | server could not complete delivery of the message. |
|
||
| | This is likely due to a temporary failure, and the |
|
||
| | originator can try to send the message again at a |
|
||
| | later time. |
|
||
| | |
|
||
| 5.2 | The scheduling message was not delivered because the |
|
||
| | server was not able to find a way to deliver the |
|
||
| | message. This is likely a permanent failure, and the |
|
||
| | originator ought not try to send the message again, at |
|
||
| | least without verifying/correcting the calendar user |
|
||
| | address of the recipient. |
|
||
| | |
|
||
| 5.3 | The scheduling message was not delivered and was |
|
||
| | rejected because scheduling with that recipient is not |
|
||
| | allowed. This is likely a permanent failure, and the |
|
||
| | originator ought not try to send the message again. |
|
||
+----------+--------------------------------------------------------+
|
||
|
||
The status code for "reply" status can be any of the valid iTIP
|
||
[RFC5546] "REQUEST-STATUS" values.
|
||
|
||
The 1.xx "REQUEST-STATUS" codes are new. This specification modifies
|
||
item (2) of Section 3.6 of [RFC5546] by adding the following
|
||
restriction:
|
||
|
||
For a 1.xx code, all components MUST have exactly the same code.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 30]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Definition of the new 1.xx codes is as follows:
|
||
|
||
3.2.9.1. Status Code 1.0
|
||
|
||
Status Code: 1.0
|
||
|
||
Status Description: Pending.
|
||
|
||
Status Exception Data: None.
|
||
|
||
Description: Delivery of the iTIP message is pending.
|
||
|
||
3.2.9.2. Status Code 1.1
|
||
|
||
Status Code: 1.1
|
||
|
||
Status Description: Sent.
|
||
|
||
Status Exception Data: None.
|
||
|
||
Description: The iTIP message has been sent, though no information
|
||
about successful delivery is known.
|
||
|
||
3.2.9.3. Status Code 1.2
|
||
|
||
Status Code: 1.2
|
||
|
||
Status Description: Delivered.
|
||
|
||
Status Exception Data: None.
|
||
|
||
Description: The iTIP message has been sent and delivered.
|
||
|
||
3.2.10. Avoiding Conflicts when Updating Scheduling Object Resources
|
||
|
||
Scheduling object resources on the server might change frequently as
|
||
"Attendees" change their participation status, triggering updates to
|
||
the "Organizer", and refreshes of other "Attendees'" copies of the
|
||
scheduling object resource. This can lead to an "inconsequential"
|
||
change to a calendar user's data -- one that does not directly impact
|
||
the user's own participation status. When this occurs, clients have
|
||
to reload calendar data and reconcile with changes being made by
|
||
calendar users. To avoid the need for this, the server can instead
|
||
merge calendar data changes from a client with changes made as a
|
||
result of a scheduling operation carried out by some other calendar
|
||
user.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 31]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
This specification introduces a new WebDAV resource property CALDAV:
|
||
schedule-tag with a corresponding response header "Schedule-Tag", and
|
||
a new "If-Schedule-Tag-Match" request header to allow client changes
|
||
to be appropriately merged with server changes in the case where the
|
||
changes on the server were the result of an "inconsequential"
|
||
scheduling message update (one that simply updates the status
|
||
information of "Attendees" due to a reply from another "Attendee").
|
||
|
||
Servers MUST automatically resolve conflicts with "inconsequential"
|
||
changes done to scheduling object resources when the "If-Schedule-
|
||
Tag-Match" request header is specified. The If-Schedule-Tag-Match
|
||
request header applies only to the Request-URI, and not to the
|
||
destination of a COPY or MOVE.
|
||
|
||
A response to any successful GET or PUT request targeting a
|
||
scheduling object resource MUST include a Schedule-Tag response
|
||
header with the value set to the same value as the CALDAV:schedule-
|
||
tag WebDAV property of the resource.
|
||
|
||
A response to any successful COPY or MOVE request that specifies a
|
||
Destination request header targeting a scheduling object resource
|
||
MUST include a Schedule-Tag response header with the value set to the
|
||
same value as the CALDAV:schedule-tag WebDAV property of the
|
||
destination resource.
|
||
|
||
Clients SHOULD use the If-Schedule-Tag-Match header on requests that
|
||
update scheduling object resources, instead of HTTP ETag-based
|
||
precondition tests (e.g., If-Match). Normal ETag-based precondition
|
||
tests are used in all other cases, e.g., for synchronization.
|
||
|
||
The value of the CALDAV:schedule-tag property changes according to
|
||
these rules:
|
||
|
||
o For an "Organizer's" copy of a scheduling object resource:
|
||
|
||
1. The server MUST NOT change the CALDAV:schedule-tag property
|
||
value when the scheduling object resource is updated as the
|
||
result of automatically processing a scheduling message reply
|
||
from an "Attendee". For instance, when an "Attendee" replies
|
||
to the "Organizer", the CALDAV:schedule-tag property is
|
||
unchanged after the "Organizer's" scheduling object resource
|
||
has been automatically updated by the server with the
|
||
"Attendee's" new participation status.
|
||
|
||
2. The server MUST change the CALDAV:schedule-tag property value
|
||
when the scheduling object resource is changed directly via an
|
||
HTTP request (e.g., PUT, COPY, or MOVE).
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 32]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
o For an "Attendee's" copy of a scheduling object resource:
|
||
|
||
1. The server MUST change the CALDAV:schedule-tag property value
|
||
when the scheduling object resource is changed as the result
|
||
of processing a scheduling message update from an "Organizer"
|
||
that contains changes other than just the participation status
|
||
of "Attendees".
|
||
|
||
2. The server MUST NOT change the CALDAV:schedule-tag property
|
||
value when the scheduling object resource is changed as the
|
||
result of processing a scheduling message update from an
|
||
"Organizer" that only specifies changes in the participation
|
||
status of "Attendees". For instance, when "Attendee" "A"
|
||
replies to "Organizer" "O", and "Attendee" "B" receives a
|
||
scheduling message update from "Organizer" "O" with the new
|
||
participation status of "Attendee" "A", the CALDAV:schedule-
|
||
tag property of "Attendee" "B"'s scheduling object resource
|
||
would remain the same.
|
||
|
||
3. The server MUST change the CALDAV:schedule-tag property value
|
||
when the scheduling object resource is changed directly via an
|
||
HTTP request (e.g., PUT, COPY, or MOVE).
|
||
|
||
3.2.10.1. PUT
|
||
|
||
Clients MAY use the If-Schedule-Tag-Match request header to do a PUT
|
||
request that ensures that "inconsequential" changes on the server do
|
||
not result in a precondition error. The value of the request header
|
||
is set to the last Schedule-Tag value received for the resource being
|
||
modified. If the value of the If-Schedule-Tag-Match header matches
|
||
the current value of the CALDAV:schedule-tag property, the server
|
||
MUST take any "ATTENDEE" property changes for all "Attendees" other
|
||
than the owner of the scheduling object resource and apply those to
|
||
the new resource being stored. Otherwise, the server MUST fail the
|
||
request with a 412 Precondition Failed status code.
|
||
|
||
3.2.10.2. DELETE, COPY, or MOVE
|
||
|
||
Clients MAY use the If-Schedule-Tag-Match request header to do a
|
||
DELETE, COPY, or MOVE request that ensures that "inconsequential"
|
||
changes on the server do not result in a precondition error. The
|
||
value of the request header is set to the last Schedule-Tag value
|
||
received for the resource being deleted. If the value of the
|
||
If-Schedule-Tag-Match header matches the current value of the CALDAV:
|
||
schedule-tag property, the server performs the normal DELETE, COPY,
|
||
or MOVE request processing for the resource. Otherwise, the server
|
||
MUST fail the request with a 412 Precondition Failed status code.
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 33]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
4. Processing Incoming Scheduling Messages
|
||
|
||
Scheduling operations can cause the delivery of a scheduling message
|
||
into an "Organizer's" or "Attendee's" scheduling Inbox collection.
|
||
Servers MUST automatically process incoming scheduling messages using
|
||
the rules defined by [RFC5546], by creating or updating the
|
||
corresponding scheduling object resources on calendars owned by the
|
||
owner of the scheduling Inbox collection. In addition, the
|
||
scheduling message is stored in the scheduling Inbox collection as an
|
||
indicator to the client that a scheduling operation has taken place.
|
||
Scheduling messages are typically removed from the scheduling Inbox
|
||
collection by the client once the calendar user has acknowledged the
|
||
change.
|
||
|
||
The server MUST take into account privileges on the scheduling Inbox
|
||
collection when processing incoming scheduling messages, to determine
|
||
whether delivery of the scheduling message is allowed. Privileges on
|
||
calendars containing any matching scheduling object resource are not
|
||
considered in this case (i.e., a schedule message from another user
|
||
can cause modifications to resources in calendar collections that the
|
||
other user would not normally have read or write access to).
|
||
Additionally, servers MUST take into account any scheduling Inbox
|
||
collection preconditions (see Section 2.2) when delivering the
|
||
scheduling message, and MUST take into account the similar
|
||
preconditions on any calendar collection that contains, or would
|
||
contain, the corresponding scheduling object resource.
|
||
|
||
4.1. Processing "Organizer" Requests, Additions, and Cancellations
|
||
|
||
For a scheduling message sent by an "Organizer", the server first
|
||
tries to locate a corresponding scheduling object resource belonging
|
||
to the "Attendee". If no matching scheduling object resource exists,
|
||
the server treats the scheduling message as a new message; otherwise,
|
||
it is treated as an update.
|
||
|
||
In the case of a new message, the server processes the scheduling
|
||
message and creates a new scheduling object resource as per
|
||
Section 4.3.
|
||
|
||
In the case of an update, the server processes the scheduling message
|
||
and updates the matching scheduling object resource belonging to the
|
||
"Attendee" to reflect the changes sent by the "Organizer".
|
||
|
||
In each case, the scheduling message MUST only appear in the
|
||
"Attendee's" scheduling Inbox collection once all automatic
|
||
processing has been done.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 34]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
4.2. Processing "Attendee" Replies
|
||
|
||
For a scheduling message reply sent by an "Attendee", the server
|
||
first locates the corresponding scheduling object resource belonging
|
||
to the "Organizer". If the corresponding scheduling object resource
|
||
cannot be found, the server SHOULD ignore the scheduling message.
|
||
|
||
The server MUST then update the "PARTSTAT" iCalendar property
|
||
parameter value of each "ATTENDEE" iCalendar property in the
|
||
scheduling object resource to match the changes indicated in the
|
||
reply (taking into account the fact that an "Attendee" could have
|
||
created a new overridden iCalendar component to indicate different
|
||
participation status on one or more instances of a recurring event).
|
||
|
||
The server MUST also update or add the "SCHEDULE-STATUS" property
|
||
parameter on each matching "ATTENDEE" iCalendar property and set its
|
||
value to that of the "REQUEST-STATUS" property in the reply, or to
|
||
"2.0" if "REQUEST-STATUS" is not present (also taking into account
|
||
recurrence instances). If there are multiple "REQUEST-STATUS"
|
||
properties in the reply, the "SCHEDULE-STATUS" property parameter
|
||
value is set to a comma-separated list of status codes, one from each
|
||
"REQUEST-STATUS" property.
|
||
|
||
The server SHOULD send scheduling messages to all the other
|
||
"Attendees" indicating the change in participation status of the
|
||
"Attendee" replying, subject to the recurrence requirements of
|
||
Section 3.2.6.
|
||
|
||
The scheduling message MUST only appear in the "Organizer's"
|
||
scheduling Inbox collection once all automatic processing has been
|
||
done.
|
||
|
||
4.3. Default Calendar Collection
|
||
|
||
The server processes scheduling messages received for an "Attendee"
|
||
by creating a new scheduling object resource in a calendar collection
|
||
belonging to the "Attendee", when one does not already exist. A
|
||
calendar user that is an "Attendee" in a scheduling operation MUST
|
||
have at least one valid calendar collection available. If there is
|
||
no valid calendar collection, then the server MUST reject the attempt
|
||
to deliver the scheduling message to the "Attendee".
|
||
|
||
Servers MAY provide support for a default calendar collection -- that
|
||
is, the calendar collection in which new scheduling object resources
|
||
will be created. The CALDAV:schedule-default-calendar-URL WebDAV
|
||
property, which can be present on the scheduling Inbox collection of
|
||
a calendar user, specifies whether this calendar user has a default
|
||
calendar collection. See Section 9.2.
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 35]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Servers SHOULD create new scheduling object resources in the default
|
||
calendar collection, if the CALDAV:schedule-default-calendar-URL
|
||
WebDAV property is set.
|
||
|
||
Servers MAY allow clients to change the default calendar collection
|
||
by changing the value of the CALDAV:schedule-default-calendar-URL
|
||
WebDAV property on the scheduling Inbox collection. However, the
|
||
server MUST ensure that any new value for that property refers to a
|
||
valid calendar collection belonging to the owner of the scheduling
|
||
Inbox collection.
|
||
|
||
Servers MUST reject any attempt to delete the default calendar
|
||
collection.
|
||
|
||
4.3.1. Additional Method Preconditions
|
||
|
||
This specification defines additional method preconditions (see
|
||
Section 16 of WebDAV [RFC4918]) to provide machine-parseable
|
||
information in error responses.
|
||
|
||
4.3.1.1. CALDAV:default-calendar-needed Precondition
|
||
|
||
Name: default-calendar-needed
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Apply to: DELETE
|
||
|
||
Use with: 403 Forbidden
|
||
|
||
Purpose: (precondition) -- The client attempted to delete the
|
||
calendar collection currently referenced by the CALDAV:schedule-
|
||
default-calendar-URL property, or attempted to remove the CALDAV:
|
||
schedule-default-calendar-URL property on the scheduling Inbox
|
||
collection on a server that doesn't allow such operations.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT default-calendar-needed EMPTY>
|
||
|
||
4.3.1.2. CALDAV:valid-schedule-default-calendar-URL Precondition
|
||
|
||
Name: valid-schedule-default-calendar-URL
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Apply to: PROPPATCH
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 36]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Use with: 403 Forbidden
|
||
|
||
Purpose: (precondition) -- The client attempted to set the CALDAV:
|
||
schedule-default-calendar-URL property to a DAV:href element that
|
||
doesn't reference a valid calendar collection. Note: Servers that
|
||
do not allow clients to change the CALDAV:schedule-default-
|
||
calendar-URL property would simply return the DAV:cannot-modify-
|
||
protected-property precondition defined in Section 16 of WebDAV
|
||
[RFC4918].
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT valid-schedule-default-calendar-URL EMPTY>
|
||
|
||
5. Request for Busy Time Information
|
||
|
||
Busy time information of one or more calendar users can be determined
|
||
by submitting a POST request targeted at the scheduling Outbox
|
||
collection of the calendar user requesting the information (the
|
||
"Organizer"). To accomplish this, the request body MUST contain a
|
||
"VFREEBUSY" calendar component with the "METHOD" iCalendar property
|
||
set to the value "REQUEST" as specified in Section 3.3.2 of iTIP
|
||
[RFC5546]. The resource identified by the Request-URI MUST be a
|
||
resource collection of type CALDAV:schedule-outbox (Section 2.1).
|
||
The "ORGANIZER" property value in the "VFREEBUSY" component MUST
|
||
match one of the calendar user addresses of the owner of the Outbox
|
||
collection.
|
||
|
||
A response to a busy time request that indicates status for one or
|
||
more calendar users MUST be an XML document with a CALDAV:schedule-
|
||
response XML element as its root element. This element MUST contain
|
||
one CALDAV:response element for each calendar user, with each such
|
||
element in turn containing elements that indicate which calendar user
|
||
they correspond to, the scheduling status for that calendar user, any
|
||
error codes, and an optional description. For a successful busy time
|
||
request, a CALDAV:calendar-data element is also present for each
|
||
calendar user, containing the actual busy time information (i.e., an
|
||
iCalendar "VFREEBUSY" component). See Section 10 for details on the
|
||
child elements. See Appendix B.5 for an example busy time request
|
||
and response.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 37]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
5.1. Status Codes
|
||
|
||
The list below summarizes the most common status codes used for this
|
||
method. However, clients need to be prepared to handle other
|
||
2/3/4/5xx series status codes as well.
|
||
|
||
200 (OK) - The command succeeded.
|
||
|
||
204 (No Content) - The command succeeded.
|
||
|
||
400 (Bad Request) - The client has provided an invalid scheduling
|
||
message.
|
||
|
||
403 (Forbidden) - The client cannot submit a scheduling message to
|
||
the specified Request-URI.
|
||
|
||
404 (Not Found) - The URL in the Request-URI was not present.
|
||
|
||
423 (Locked) - The specified resource is locked, and the client
|
||
either is not a lock owner or the lock type requires a lock token
|
||
to be submitted and the client did not submit it.
|
||
|
||
5.2. Additional Method Preconditions
|
||
|
||
The following are existing preconditions that are reused for the POST
|
||
method on an Outbox collection.
|
||
|
||
o DAV:need-privileges [RFC3744]
|
||
|
||
o CALDAV:supported-calendar-data [RFC4791]
|
||
|
||
o CALDAV:valid-calendar-data [RFC4791]
|
||
|
||
o CALDAV:max-resource-size [RFC4791]
|
||
|
||
The following are new method preconditions for the POST method on an
|
||
Outbox collection.
|
||
|
||
5.2.1. CALDAV:valid-scheduling-message Precondition
|
||
|
||
Name: valid-scheduling-message
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Apply to: POST
|
||
|
||
Use with: 400 Bad Request
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 38]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Purpose: (precondition) -- The resource submitted in the POST
|
||
request MUST obey all the restrictions specified in Section 3.3.2
|
||
of iTIP [RFC5546].
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT valid-scheduling-message EMPTY>
|
||
|
||
5.2.2. CALDAV:valid-organizer Precondition
|
||
|
||
Name: valid-organizer
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Apply to: POST
|
||
|
||
Use with: 403 Forbidden
|
||
|
||
Purpose: (precondition) -- The "ORGANIZER" property value in the
|
||
POST request's scheduling message MUST match one of the calendar
|
||
user addresses of the owner of the scheduling Outbox collection
|
||
being targeted by the request.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT valid-organizer EMPTY>
|
||
|
||
6. Scheduling Privileges
|
||
|
||
New scheduling privileges are defined in this section. All the
|
||
scheduling privileges MUST be non-abstract and MUST appear in the
|
||
DAV:supported-privilege-set property of scheduling Outbox and Inbox
|
||
collections on which they are defined.
|
||
|
||
The tables specified in Appendix A clarify which scheduling methods
|
||
(e.g., "REQUEST", "REPLY", etc.) are controlled by each scheduling
|
||
privilege defined in this section.
|
||
|
||
6.1. Privileges on Scheduling Inbox Collections
|
||
|
||
This section defines new WebDAV Access Control List (ACL) [RFC3744]
|
||
privileges that are defined for use on scheduling Inbox collections.
|
||
These privileges determine whether delivery of scheduling messages
|
||
from a calendar user is allowed by the calendar user who "owns" the
|
||
scheduling Inbox collection. This allows calendar users to choose
|
||
which other calendar users can schedule with them.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 39]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Note that when a scheduling message is delivered to a calendar user,
|
||
in addition to a scheduling object resource being created in the
|
||
calendar user's scheduling Inbox collection, a new scheduling object
|
||
resource might be created or an existing one updated in a calendar
|
||
belonging to the calendar user. In that case, the ability to create
|
||
or update the scheduling object resource in the calendar is
|
||
controlled by the privileges assigned to the scheduling Inbox
|
||
collection.
|
||
|
||
The privileges defined in this section are ignored if applied to a
|
||
resource other than a scheduling Inbox collection.
|
||
|
||
6.1.1. CALDAV:schedule-deliver Privilege
|
||
|
||
CALDAV:schedule-deliver is an aggregate privilege as per Section 6.3.
|
||
|
||
<!ELEMENT schedule-deliver EMPTY>
|
||
|
||
6.1.2. CALDAV:schedule-deliver-invite Privilege
|
||
|
||
The CALDAV:schedule-deliver-invite privilege controls the processing
|
||
and delivery of scheduling messages coming from an "Organizer".
|
||
|
||
<!ELEMENT schedule-deliver-invite EMPTY>
|
||
|
||
6.1.3. CALDAV:schedule-deliver-reply Privilege
|
||
|
||
The CALDAV:schedule-deliver-reply privilege controls the processing
|
||
and delivery of scheduling messages coming from an "Attendee".
|
||
|
||
<!ELEMENT schedule-deliver-reply EMPTY>
|
||
|
||
6.1.4. CALDAV:schedule-query-freebusy Privilege
|
||
|
||
The CALDAV:schedule-query-freebusy privilege controls freebusy
|
||
requests targeted at the owner of the scheduling Inbox collection.
|
||
|
||
<!ELEMENT schedule-query-freebusy EMPTY>
|
||
|
||
6.2. Privileges on Scheduling Outbox Collections
|
||
|
||
This section defines new WebDAV ACL [RFC3744] privileges that are
|
||
defined for use on scheduling Outbox collections. These privileges
|
||
determine which calendar users are allowed to send scheduling
|
||
messages on behalf of the calendar user who "owns" the scheduling
|
||
Outbox collection. This allows calendar users to choose other
|
||
calendar users who can act on their behalf (e.g., assistants working
|
||
on behalf of their boss).
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 40]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
The privileges defined in this section are ignored if applied to a
|
||
resource other than a scheduling Outbox collection.
|
||
|
||
6.2.1. CALDAV:schedule-send Privilege
|
||
|
||
CALDAV:schedule-send is an aggregate privilege as per Section 6.3.
|
||
|
||
<!ELEMENT schedule-send EMPTY>
|
||
|
||
6.2.2. CALDAV:schedule-send-invite Privilege
|
||
|
||
The CALDAV:schedule-send-invite privilege controls the sending of
|
||
scheduling messages by "Organizers".
|
||
|
||
Users granted the DAV:bind privilege on a calendar collection, or the
|
||
DAV:write privilege on scheduling object resources, will also need
|
||
the CALDAV:schedule-send-invite privilege granted on the scheduling
|
||
Outbox collection of the owner of the calendar collection or
|
||
scheduling object resource in order to be allowed to create, modify,
|
||
or delete scheduling object resources in a way that will trigger the
|
||
CalDAV server to deliver scheduling messages to "Attendees".
|
||
|
||
<!ELEMENT schedule-send-invite EMPTY>
|
||
|
||
6.2.3. CALDAV:schedule-send-reply Privilege
|
||
|
||
The CALDAV:schedule-send-reply privilege controls the sending of
|
||
scheduling messages by "Attendees".
|
||
|
||
Users granted the DAV:bind privilege on a calendar collection, or the
|
||
DAV:write privilege on scheduling object resources, will also need
|
||
the CALDAV:schedule-send-reply privilege granted on the scheduling
|
||
Outbox collection of the owner of the calendar collection or
|
||
scheduling object resource in order to be allowed to create, modify,
|
||
or delete scheduling object resources in a way that will trigger the
|
||
CalDAV server to deliver scheduling message replies to the
|
||
"Organizer".
|
||
|
||
<!ELEMENT schedule-send-reply EMPTY>
|
||
|
||
6.2.4. CALDAV:schedule-send-freebusy Privilege
|
||
|
||
The CALDAV:schedule-send-freebusy privilege controls the use of the
|
||
POST method to submit scheduling messages that specify the scheduling
|
||
method "REQUEST" with a "VFREEBUSY" calendar component.
|
||
|
||
<!ELEMENT schedule-send-freebusy EMPTY>
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 41]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
6.3. Aggregation of Scheduling Privileges
|
||
|
||
Server implementations MUST aggregate the scheduling privileges as
|
||
follows:
|
||
|
||
DAV:all contains CALDAV:schedule-deliver and CALDAV:schedule-send;
|
||
|
||
CALDAV:schedule-deliver contains CALDAV:schedule-deliver-invite,
|
||
CALDAV:schedule-deliver-reply, and CALDAV:schedule-query-freebusy;
|
||
|
||
CALDAV:schedule-send contains CALDAV:schedule-send-invite, CALDAV:
|
||
schedule-send-reply, and CALDAV:schedule-send-freebusy.
|
||
|
||
The following diagram illustrates how scheduling privileges are
|
||
aggregated according to the above requirements.
|
||
|
||
[DAV:all] (aggregate)
|
||
|
|
||
+-- [CALDAV:schedule-deliver] (aggregate)
|
||
| |
|
||
| +-- [CALDAV:schedule-deliver-invite]
|
||
| +-- [CALDAV:schedule-deliver-reply]
|
||
| +-- [CALDAV:schedule-query-freebusy]
|
||
|
|
||
+-- [CALDAV:schedule-send] (aggregate)
|
||
|
|
||
+-- [CALDAV:schedule-send-invite]
|
||
+-- [CALDAV:schedule-send-reply]
|
||
+-- [CALDAV:schedule-send-freebusy]
|
||
|
||
7. Additional iCalendar Property Parameters
|
||
|
||
This specification defines additional iCalendar property parameters
|
||
to support the CalDAV scheduling extensions.
|
||
|
||
7.1. Schedule Agent Parameter
|
||
|
||
Parameter Name: SCHEDULE-AGENT
|
||
|
||
Purpose: To specify the agent expected to deliver scheduling
|
||
messages to the corresponding "Organizer" or "Attendee".
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 42]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Format Definition: This property parameter is defined by the
|
||
following notation:
|
||
|
||
scheduleagentparam = "SCHEDULE-AGENT" "="
|
||
("SERVER" ; The server handles scheduling
|
||
/ "CLIENT" ; The client handles scheduling
|
||
/ "NONE" ; No scheduling
|
||
/ x-name ; Experimental type
|
||
/ iana-token) ; Other IANA-registered type
|
||
;
|
||
; If the parameter is not present, its value defaults to SERVER.
|
||
; "x-name" and "iana-token" are defined in Section 3.1 of
|
||
; [RFC5545].
|
||
|
||
Description: This property parameter MAY be specified on "ORGANIZER"
|
||
or "ATTENDEE" iCalendar properties. In the absence of this
|
||
parameter, the value "SERVER" MUST be used for the default
|
||
behavior. The value determines whether or not a scheduling
|
||
operation on a server will cause a scheduling message to be sent
|
||
to the corresponding calendar user identified by the "ORGANIZER"
|
||
or "ATTENDEE" property value. When the value "SERVER" is
|
||
specified, or the parameter is absent, then it is the server's
|
||
responsibility to send a scheduling message as part of a
|
||
scheduling operation. When the value "CLIENT" is specified, that
|
||
indicates that the client is handling scheduling messages with the
|
||
calendar user itself. When "NONE" is specified, no scheduling
|
||
messages are being sent to the calendar user.
|
||
|
||
Servers MUST NOT include this parameter in any scheduling messages
|
||
sent as the result of a scheduling operation.
|
||
|
||
Clients MUST NOT include this parameter in any scheduling messages
|
||
that they themselves send.
|
||
|
||
The parameter value MUST be the same on every "ORGANIZER" property
|
||
in a scheduling object resource.
|
||
|
||
The parameter value MUST be the same on each "ATTENDEE" property
|
||
whose values match in a scheduling object resource.
|
||
|
||
Servers and clients MUST treat x-name and iana-token values they
|
||
do not recognize the same way as they would the "NONE" value.
|
||
|
||
Example:
|
||
|
||
ORGANIZER;SCHEDULE-AGENT=SERVER:mailto:bernard@example.com
|
||
ATTENDEE;SCHEDULE-AGENT=NONE:mailto:cyrus@example.com
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 43]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
7.2. Schedule Force Send Parameter
|
||
|
||
Parameter Name: SCHEDULE-FORCE-SEND
|
||
|
||
Purpose: To force a scheduling message to be sent to the calendar
|
||
user specified by the property.
|
||
|
||
Format Definition: This property parameter is defined by the
|
||
following notation:
|
||
|
||
scheduleforcesendparam = "SCHEDULE-FORCE-SEND" "="
|
||
("REQUEST" ; Force a "REQUEST"
|
||
/ "REPLY" ; Force a "REPLY"
|
||
/ iana-token)
|
||
;
|
||
; "iana-token" is defined in Section 3.1 of [RFC5545]. Its value
|
||
; MUST be an IANA-registered iCalendar "METHOD" property value.
|
||
|
||
Description: This property parameter MAY be specified on "ATTENDEE"
|
||
and "ORGANIZER" properties on which the "SCHEDULE-AGENT" property
|
||
parameter is set to the value "SERVER" or is not specified. This
|
||
property parameter is used to force a server to send a scheduling
|
||
message to a specific calendar user in situations where the server
|
||
would not send a scheduling message otherwise (e.g., when no
|
||
change that warrants the delivery of a new scheduling message was
|
||
performed on the scheduling object resource). An "Organizer" MAY
|
||
specify this parameter on an "ATTENDEE" property with the value
|
||
"REQUEST" to force a "REQUEST" scheduling message to be sent to
|
||
this "Attendee". An "Attendee" MAY specify this parameter on the
|
||
"ORGANIZER" with the value "REPLY" to force a "REPLY" scheduling
|
||
message to be sent to the "Organizer".
|
||
|
||
Servers MUST NOT preserve this property parameter in scheduling
|
||
object resources, nor include it in any scheduling messages sent
|
||
as the result of a scheduling operation.
|
||
|
||
Clients MUST NOT include this parameter in any scheduling messages
|
||
that they themselves send.
|
||
|
||
Servers MUST set the "SCHEDULE-STATUS" parameter of the "ATTENDEE"
|
||
or "ORGANIZER" to 2.3 (i.e., "Success; invalid property parameter
|
||
ignored"; see Section 3.6 of [RFC5546]) when the "SCHEDULE-FORCE-
|
||
SEND" parameter is set to an iana-token value they do not
|
||
recognize.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 44]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Example:
|
||
|
||
ORGANIZER;SCHEDULE-FORCE-SEND=REPLY:mailto:cyrus@example.com
|
||
ATTENDEE;SCHEDULE-FORCE-SEND=REQUEST:mailto:bernard@example.com
|
||
|
||
7.3. Schedule Status Parameter
|
||
|
||
Parameter Name: SCHEDULE-STATUS
|
||
|
||
Purpose: To specify the status codes returned from processing of the
|
||
most recent scheduling message sent to the corresponding
|
||
"Attendee", or received from the corresponding "Organizer".
|
||
|
||
Format Definition: This property parameter is defined by the
|
||
following notation:
|
||
|
||
schedulestatusparam = "SCHEDULE-STATUS" "="
|
||
( statcode
|
||
/ DQUOTE statcode *("," statcode) DQUOTE)
|
||
;
|
||
; "statcode" is defined in Section 3.8.8.3 of [RFC5545]. The
|
||
; value is a single "statcode" or a comma-separated list of
|
||
; "statcode" values.
|
||
|
||
Description: This property parameter MAY be specified on the
|
||
"ATTENDEE" and "ORGANIZER" properties.
|
||
|
||
Servers MUST only add or change this property parameter on any
|
||
"ATTENDEE" properties corresponding to calendar users who were
|
||
sent a scheduling message via a scheduling operation. Clients
|
||
SHOULD NOT change or remove this parameter if it was provided by
|
||
the server. In the case where the client is handling the
|
||
scheduling, the client MAY add, change, or remove this parameter
|
||
to indicate the last scheduling message status it received.
|
||
|
||
Servers MUST add this parameter to any "ORGANIZER" properties
|
||
corresponding to calendar users who were sent a scheduling message
|
||
reply by an "Attendee" via a scheduling operation. Clients SHOULD
|
||
NOT change or remove this parameter if it was provided by the
|
||
server. In the case where the client is handling the scheduling,
|
||
the client MAY add, change, or remove this parameter to indicate
|
||
the last scheduling message status it received.
|
||
|
||
Servers MUST NOT include this parameter in any scheduling messages
|
||
sent as the result of a scheduling operation.
|
||
|
||
Clients MUST NOT include this parameter in any scheduling messages
|
||
that they themselves send.
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 45]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Values for this property parameter are described in Section 3.2.9.
|
||
|
||
Example:
|
||
|
||
ATTENDEE;SCHEDULE-STATUS="2.0":mailto:bernard@example.com
|
||
ATTENDEE;SCHEDULE-STATUS="2.0,2.4":mailto:cyrus@example.com
|
||
|
||
8. Additional Message Header Fields
|
||
|
||
This specification defines additional HTTP request and response
|
||
headers for use with CalDAV.
|
||
|
||
8.1. Schedule-Reply Request Header
|
||
|
||
Schedule-Reply = "Schedule-Reply" ":" ("T" | "F")
|
||
|
||
Example:
|
||
|
||
Schedule-Reply: F
|
||
|
||
When an "Attendee" removes a scheduling object resource as per
|
||
Section 3.2.2.4, and the Schedule-Reply header is set to the value
|
||
"T" (true) or is not present, the server MUST send an appropriate
|
||
reply scheduling message with the "Attendee's" "PARTSTAT" iCalendar
|
||
property parameter value set to "DECLINED" as part of its normal
|
||
scheduling operation processing.
|
||
|
||
When the Schedule-Reply header is set to the value "F" (false), the
|
||
server MUST NOT send a scheduling message as part of its normal
|
||
scheduling operation processing.
|
||
|
||
The Schedule-Reply request header is used by a client to indicate to
|
||
a server whether or not a scheduling operation ought to occur when an
|
||
"Attendee" deletes a scheduling object resource. In particular, it
|
||
controls whether a reply scheduling message is sent to the
|
||
"Organizer" as a result of the removal. There are situations in
|
||
which unsolicited scheduling messages need to be silently removed (or
|
||
ignored) for security or privacy reasons. This request header allows
|
||
the scheduling object resource to be removed if such a need arises.
|
||
|
||
8.2. Schedule-Tag Response Header
|
||
|
||
The Schedule-Tag response header provides the current value of the
|
||
CALDAV:schedule-tag property value. The behavior of this response
|
||
header is described in Section 3.2.10.
|
||
|
||
All scheduling object resources MUST support the Schedule-Tag header.
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 46]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Schedule-Tag = "Schedule-Tag" ":" opaque-tag
|
||
; "opaque-tag" is defined in Section 3.11 of [RFC2616].
|
||
|
||
Example:
|
||
|
||
Schedule-Tag: "12ab34-cd56ef"
|
||
|
||
8.3. If-Schedule-Tag-Match Request Header
|
||
|
||
The If-Schedule-Tag-Match request header field is used with a method
|
||
to make it conditional. Clients can set this header to the value
|
||
returned in the Schedule-Tag response header, or the CALDAV:schedule-
|
||
tag property, of a scheduling object resource previously retrieved
|
||
from the server to avoid overwriting "consequential" changes to the
|
||
scheduling object resource.
|
||
|
||
All scheduling object resources MUST support the If-Schedule-Tag-
|
||
Match header.
|
||
|
||
If-Schedule-Tag-Match = "If-Schedule-Tag-Match" ":" opaque-tag
|
||
; "opaque-tag" is defined in Section 3.11 of [RFC2616].
|
||
|
||
Example:
|
||
|
||
If-Schedule-Tag-Match: "12ab34-cd56ef"
|
||
|
||
9. Additional WebDAV Properties
|
||
|
||
This specification defines the following new WebDAV properties for
|
||
use with CalDAV.
|
||
|
||
9.1. CALDAV:schedule-calendar-transp Property
|
||
|
||
Name: schedule-calendar-transp
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Purpose: Determines whether the calendar object resources in a
|
||
calendar collection will affect the owner's busy time information.
|
||
|
||
Protected: This property MAY be protected and SHOULD NOT be returned
|
||
by a PROPFIND DAV:allprop request (as defined in Section 14.2 of
|
||
[RFC4918]).
|
||
|
||
COPY/MOVE behavior: This property value SHOULD be kept during a MOVE
|
||
operation, and SHOULD be copied and preserved in a COPY.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 47]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Description: This property SHOULD be defined on all calendar
|
||
collections. If present, it contains one of two XML elements that
|
||
indicate whether the calendar object resources in the calendar
|
||
collection ought to contribute to the owner's busy time. When the
|
||
CALDAV:opaque element is used, all calendar object resources in
|
||
the corresponding calendar collection MUST contribute to busy
|
||
time, assuming that access privileges and other iCalendar
|
||
properties allow it to. When the CALDAV:transparent XML element
|
||
is used, the calendar object resources in the corresponding
|
||
calendar collection MUST NOT contribute to busy time.
|
||
|
||
If this property is not present on a calendar collection, then the
|
||
default value CALDAV:opaque MUST be assumed.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT schedule-calendar-transp (opaque | transparent)>
|
||
|
||
<!ELEMENT opaque EMPTY>
|
||
<!-- Affects busy time searches -->
|
||
|
||
<!ELEMENT transparent EMPTY>
|
||
<!-- Invisible to busy time searches -->
|
||
|
||
Example:
|
||
|
||
<C:schedule-calendar-transp
|
||
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||
<C:opaque/>
|
||
</C:schedule-calendar-transp>
|
||
|
||
9.2. CALDAV:schedule-default-calendar-URL Property
|
||
|
||
Name: schedule-default-calendar-URL
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Purpose: Specifies a default calendar for an "Attendee" where new
|
||
scheduling object resources are created.
|
||
|
||
Protected: This property MAY be protected in the case where a server
|
||
does not support changing the default calendar, or does not
|
||
support a default calendar.
|
||
|
||
COPY/MOVE behavior: This property is only defined on a scheduling
|
||
Inbox collection that cannot be moved or copied.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 48]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Description: This property MAY be defined on a scheduling Inbox
|
||
collection. If present, it contains zero or one DAV:href XML
|
||
elements. When a DAV:href element is present, its value indicates
|
||
a URL to a calendar collection that is used as the default
|
||
calendar. When no DAV:href element is present, it indicates that
|
||
there is no default calendar. In the absence of this property,
|
||
there is no default calendar. When there is no default calendar,
|
||
the server is free to choose the calendar in which a new
|
||
scheduling object resource is created. See Section 4.3.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT schedule-default-calendar-URL (DAV:href?)>
|
||
|
||
Example:
|
||
|
||
<C:schedule-default-calendar-URL xmlns:D="DAV:"
|
||
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||
<D:href>/home/cyrus/calendars/work/</D:href>
|
||
</C:schedule-default-calendar-URL>
|
||
|
||
9.3. CALDAV:schedule-tag Property
|
||
|
||
Name: schedule-tag
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Purpose: Indicates whether a scheduling object resource has had a
|
||
"consequential" change made to it.
|
||
|
||
Value: opaque-tag (defined in Section 3.11 of [RFC2616])
|
||
|
||
Protected: This property MUST be protected, as only the server can
|
||
update the value.
|
||
|
||
COPY/MOVE behavior: This property value is determined by the server
|
||
and MAY be different from the value on the source resource.
|
||
|
||
Description: The CALDAV:schedule-tag property MUST be defined on all
|
||
scheduling object resources. This property is described in
|
||
Section 3.2.10.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT schedule-tag (#PCDATA)>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 49]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Example:
|
||
|
||
<C:schedule-tag xmlns:C="urn:ietf:params:xml:ns:caldav"
|
||
>"12345-67890"</C:schedule-tag>
|
||
|
||
10. XML Element Definitions
|
||
|
||
10.1. CALDAV:schedule-response XML Element
|
||
|
||
Name: schedule-response
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Purpose: Contains the set of responses for a POST method request.
|
||
|
||
Description: See Section 5.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT schedule-response (response*)>
|
||
|
||
10.2. CALDAV:response XML Element
|
||
|
||
Name: response
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Purpose: Contains a single response for a POST method request.
|
||
|
||
Description: See Section 5.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT response (recipient,
|
||
request-status,
|
||
calendar-data?,
|
||
DAV:error?,
|
||
DAV:responsedescription?)>
|
||
|
||
<!-- CALDAV:calendar-data is defined in Section 9.6 of
|
||
RFC 4791 and when used here uses the definition with
|
||
content (#PCDATA) only. -->
|
||
|
||
10.3. CALDAV:recipient XML Element
|
||
|
||
Name: recipient
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 50]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Purpose: The calendar user address that the enclosing response for a
|
||
POST method request is for.
|
||
|
||
Description: See Section 5.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT recipient (DAV:href)>
|
||
|
||
10.4. CALDAV:request-status XML Element
|
||
|
||
Name: request-status
|
||
|
||
Namespace: urn:ietf:params:xml:ns:caldav
|
||
|
||
Purpose: The iTIP "REQUEST-STATUS" property value for this response.
|
||
|
||
Description: See Section 5.
|
||
|
||
Definition:
|
||
|
||
<!ELEMENT request-status (#PCDATA)>
|
||
|
||
11. Security Considerations
|
||
|
||
The process of scheduling involves the sending and receiving of
|
||
scheduling messages. As a result, the security problems related to
|
||
messaging in general are relevant here. In particular, the
|
||
authenticity of the scheduling messages needs to be verified.
|
||
Servers and clients MUST use an HTTP connection protected with
|
||
Transport Layer Security (TLS) as defined in [RFC2818] for all
|
||
scheduling operations. Clients MUST use the procedures detailed in
|
||
Section 6 of [RFC6125] to verify the authenticity of the server.
|
||
Servers MUST make use of HTTP authentication [RFC2617] to verify the
|
||
authenticity of the calendar user for whom the client is sending
|
||
requests.
|
||
|
||
11.1. Preventing Denial-of-Service Attacks
|
||
|
||
Servers MUST ensure that clients cannot consume excessive server
|
||
resources by carrying out "large" scheduling operations. In
|
||
particular, servers SHOULD enforce CALDAV:max-resource-size, CALDAV:
|
||
max-instances, and CALDAV:max-attendees-per-instance preconditions as
|
||
applicable for scheduling Inbox and Outbox collections.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 51]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
11.2. Verifying Scheduling Operations
|
||
|
||
When handling a scheduling operation:
|
||
|
||
1. Servers MUST verify that the principal associated with the DAV:
|
||
owner of the calendar collection in which a scheduling object
|
||
resource is being manipulated contains a CALDAV:schedule-outbox-
|
||
URL property value.
|
||
|
||
2. Servers MUST verify that the currently authenticated user has the
|
||
CALDAV:schedule-send privilege, or a sub-privilege aggregated
|
||
under this privilege, on the scheduling Outbox collection of the
|
||
DAV:owner of the calendar collection in which a scheduling object
|
||
resource is being manipulated.
|
||
|
||
3. Servers MUST only deliver scheduling messages to recipients when
|
||
the CALDAV:schedule-deliver privilege, or a sub-privilege
|
||
aggregated under this privilege, is granted on the recipient's
|
||
scheduling Inbox collection for the principal associated with the
|
||
DAV:owner of the calendar collection in which a scheduling object
|
||
resource is being manipulated.
|
||
|
||
4. To prevent impersonation of calendar users, the server MUST
|
||
verify that the "ORGANIZER" property in an organizer scheduling
|
||
object resource matches one of the calendar user addresses of the
|
||
DAV:owner of the calendar collection in which the resource is
|
||
stored.
|
||
|
||
5. To prevent spoofing of an existing scheduling object resource,
|
||
servers MUST verify that the "UID" iCalendar property value in a
|
||
new scheduling object resource does not match that of an existing
|
||
scheduling object resource with a different "ORGANIZER" property
|
||
value.
|
||
|
||
11.3. Verifying Busy Time Information Requests
|
||
|
||
When handling a POST request on a scheduling Outbox collection:
|
||
|
||
1. Servers MUST verify that the principal associated with the
|
||
calendar user address specified in the "ORGANIZER" property of
|
||
the scheduling message data in the request contains a CALDAV:
|
||
schedule-outbox-URL property value that matches the scheduling
|
||
Outbox collection targeted by the request.
|
||
|
||
2. Servers MUST verify that the currently authenticated user has the
|
||
CALDAV:schedule-send privilege, or a sub-privilege aggregated
|
||
under this privilege, on the scheduling Outbox collection
|
||
targeted by the request.
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 52]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
3. Servers MUST only return valid freebusy information for
|
||
recipients when the CALDAV:schedule-deliver privilege, or a
|
||
sub-privilege aggregated under this privilege, is granted on the
|
||
recipient's scheduling Inbox collection for the principal
|
||
associated with the DAV:owner of the scheduling Outbox collection
|
||
targeted by the request.
|
||
|
||
11.4. Privacy Issues
|
||
|
||
This specification only defines how calendar users on the same server
|
||
are able to schedule with each other -- unauthenticated users have no
|
||
way to carry out scheduling operations. Access control privileges
|
||
(as per Section 6) can control which of those users can schedule with
|
||
others. Calendar users not wishing to expose their calendar
|
||
information to other users can do so by denying privileges to
|
||
specific users, or all users, for all scheduling operations, or
|
||
perhaps only freebusy.
|
||
|
||
"Attendees" can also use the Schedule-Reply request header
|
||
(Section 8.1) with the value set to "F" to prevent notification to an
|
||
"Organizer" that a scheduling object resource was deleted. This
|
||
allows "Attendees" to remove unwanted scheduling messages without any
|
||
response to the "Organizer".
|
||
|
||
Servers MUST NOT expose any private iCalendar data, or WebDAV
|
||
resource state information (URLs, WebDAV properties, etc.) for one
|
||
calendar user to another via scheduling messages or error responses
|
||
to scheduling operations. In particular, as per Section 8.1 of
|
||
[RFC4918], authorization errors MUST take preference over other
|
||
errors.
|
||
|
||
11.5. Mitigation of iTIP Threats
|
||
|
||
Section 6.1 of iTIP [RFC5546] defines a set of potential threats in a
|
||
scheduling system, and Section 6.2 of [RFC5546] defines
|
||
recommendations on how those can be addressed in protocols using
|
||
iTIP. This specification addresses the iTIP threats in the following
|
||
manner:
|
||
|
||
Spoofing the "Organizer": Addressed by item 4 in Section 11.2.
|
||
|
||
Spoofing the "Attendee": Addressed by Section 3.2.2.1 and item 2 in
|
||
Section 11.2.
|
||
|
||
Unauthorized Replacement of the "Organizer": Addressed by item 5 in
|
||
Section 11.2.
|
||
|
||
Eavesdropping and Data Integrity: Addressed by requiring TLS.
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 53]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Flooding a Calendar: Addressed by requirements in Section 11.1.
|
||
|
||
Unauthorized REFRESH Requests: This specification does not support
|
||
the REFRESH method.
|
||
|
||
12. IANA Considerations
|
||
|
||
12.1. Message Header Field Registrations
|
||
|
||
The message header fields below have been added to the Permanent
|
||
Message Header Field Registry (see [RFC3864]).
|
||
|
||
12.1.1. Schedule-Reply
|
||
|
||
Header field name: Schedule-Reply
|
||
|
||
Applicable protocol: http
|
||
|
||
Status: standard
|
||
|
||
Author/Change controller: IETF
|
||
|
||
Specification document(s): this specification (Section 8.1)
|
||
|
||
Related information: none
|
||
|
||
12.1.2. Schedule-Tag
|
||
|
||
Header field name: Schedule-Tag
|
||
|
||
Applicable protocol: http
|
||
|
||
Status: standard
|
||
|
||
Author/Change controller: IETF
|
||
|
||
Specification document(s): this specification (Section 8.2)
|
||
|
||
Related information: none
|
||
|
||
12.1.3. If-Schedule-Tag-Match
|
||
|
||
Header field name: If-Schedule-Tag-Match
|
||
|
||
Applicable protocol: http
|
||
|
||
Status: standard
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 54]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Author/Change controller: IETF
|
||
|
||
Specification document(s): this specification (Section 8.3)
|
||
|
||
Related information: none
|
||
|
||
12.2. iCalendar Property Parameter Registrations
|
||
|
||
The following iCalendar property parameter names have been added to
|
||
the iCalendar Parameters Registry defined in Section 8.3.3 of
|
||
[RFC5545].
|
||
|
||
+---------------------+---------+-----------------------+
|
||
| Parameter | Status | Reference |
|
||
+---------------------+---------+-----------------------+
|
||
| SCHEDULE-AGENT | Current | RFC 6638, Section 7.1 |
|
||
| | | |
|
||
| SCHEDULE-STATUS | Current | RFC 6638, Section 7.3 |
|
||
| | | |
|
||
| SCHEDULE-FORCE-SEND | Current | RFC 6638, Section 7.2 |
|
||
+---------------------+---------+-----------------------+
|
||
|
||
12.3. iCalendar REQUEST-STATUS Value Registrations
|
||
|
||
The following iCalendar "REQUEST-STATUS" values have been added to
|
||
the iCalendar REQUEST-STATUS Value Registry defined in Section 7.3 of
|
||
[RFC5546].
|
||
|
||
+-------------+---------+---------------------------+
|
||
| Status Code | Status | Reference |
|
||
+-------------+---------+---------------------------+
|
||
| 1.0 | Current | RFC 6638, Section 3.2.9.1 |
|
||
| | | |
|
||
| 1.1 | Current | RFC 6638, Section 3.2.9.2 |
|
||
| | | |
|
||
| 1.2 | Current | RFC 6638, Section 3.2.9.3 |
|
||
+-------------+---------+---------------------------+
|
||
|
||
12.4. Additional iCalendar Elements Registries
|
||
|
||
Per this specification, two new IANA registries for iCalendar
|
||
elements have been added. Additional codes MAY be used, provided the
|
||
process described in Section 8.2.1 of [RFC5545] is used to register
|
||
them.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 55]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
12.4.1. Schedule Agent Values Registry
|
||
|
||
The following table has been used to initialize the Schedule Agent
|
||
Values Registry.
|
||
|
||
+----------------+---------+-----------------------+
|
||
| Schedule Agent | Status | Reference |
|
||
+----------------+---------+-----------------------+
|
||
| SERVER | Current | RFC 6638, Section 7.1 |
|
||
| | | |
|
||
| CLIENT | Current | RFC 6638, Section 7.1 |
|
||
| | | |
|
||
| NONE | Current | RFC 6638, Section 7.1 |
|
||
+----------------+---------+-----------------------+
|
||
|
||
12.4.2. Schedule Force Send Values Registry
|
||
|
||
The following table has been used to initialize the Schedule Force
|
||
Send Values Registry.
|
||
|
||
+---------------------+---------+-----------------------+
|
||
| Schedule Force Send | Status | Reference |
|
||
+---------------------+---------+-----------------------+
|
||
| REQUEST | Current | RFC 6638, Section 7.2 |
|
||
| | | |
|
||
| REPLY | Current | RFC 6638, Section 7.2 |
|
||
+---------------------+---------+-----------------------+
|
||
|
||
13. Acknowledgements
|
||
|
||
The authors would like to thank the following individuals for
|
||
contributing their ideas and support for writing this specification:
|
||
Mike Douglass, Lisa Dusseault, Red Dutta, Jacob Farkas, Jeffrey
|
||
Harris, Helge Hess, Eliot Lear, Andrew McMillan, Alexey Melnikov,
|
||
Arnaud Quillaud, Julian F. Reschke, Wilfredo Sanchez Vega, and Simon
|
||
Vaillancourt.
|
||
|
||
The authors would also like to thank the Calendaring and Scheduling
|
||
Consortium for advice with this specification, and for organizing
|
||
interoperability testing events to help refine it.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 56]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
14. References
|
||
|
||
14.1. Normative References
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||
|
||
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
|
||
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
|
||
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
|
||
|
||
[RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S.,
|
||
Leach, P., Luotonen, A., and L. Stewart, "HTTP
|
||
Authentication: Basic and Digest Access Authentication",
|
||
RFC 2617, June 1999.
|
||
|
||
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.
|
||
|
||
[RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web
|
||
Distributed Authoring and Versioning (WebDAV)
|
||
Access Control Protocol", RFC 3744, May 2004.
|
||
|
||
[RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration
|
||
Procedures for Message Header Fields", BCP 90, RFC 3864,
|
||
September 2004.
|
||
|
||
[RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault,
|
||
"Calendaring Extensions to WebDAV (CalDAV)", RFC 4791,
|
||
March 2007.
|
||
|
||
[RFC4918] Dusseault, L., Ed., "HTTP Extensions for Web Distributed
|
||
Authoring and Versioning (WebDAV)", RFC 4918, June 2007.
|
||
|
||
[RFC5234] Crocker, D., Ed., and P. Overell, "Augmented BNF for
|
||
Syntax Specifications: ABNF", STD 68, RFC 5234,
|
||
January 2008.
|
||
|
||
[RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and
|
||
Scheduling Core Object Specification (iCalendar)",
|
||
RFC 5545, September 2009.
|
||
|
||
[RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent
|
||
Interoperability Protocol (iTIP)", RFC 5546,
|
||
December 2009.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 57]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
[RFC6125] Saint-Andre, P. and J. Hodges, "Representation and
|
||
Verification of Domain-Based Application Service Identity
|
||
within Internet Public Key Infrastructure Using X.509
|
||
(PKIX) Certificates in the Context of Transport Layer
|
||
Security (TLS)", RFC 6125, March 2011.
|
||
|
||
[W3C.REC-xml-20081126]
|
||
Bray, T., Paoli, J., Sperberg-McQueen, C., Maler, E.,
|
||
and F. Yergeau, "Extensible Markup Language (XML) 1.0
|
||
(Fifth Edition)", World Wide Web Consortium
|
||
Recommendation REC-xml-20081126, November 2008,
|
||
<http://www.w3.org/TR/2008/REC-xml-20081126>.
|
||
|
||
14.2. Informative References
|
||
|
||
[RFC6047] Melnikov, A., Ed., "iCalendar Message-Based
|
||
Interoperability Protocol (iMIP)", RFC 6047,
|
||
December 2010.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 58]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Appendix A. Scheduling Privileges Summary
|
||
|
||
A.1. Scheduling Inbox Privileges
|
||
|
||
The following tables specify which scheduling privileges grant the
|
||
right to a calendar user to deliver a scheduling message to the
|
||
scheduling Inbox collection of another calendar user. The
|
||
appropriate behavior depends on the calendar component type as well
|
||
as the scheduling "METHOD" specified in the scheduling message.
|
||
|
||
+--------------------------------+
|
||
| METHOD for VEVENT and VTODO |
|
||
+-----------------------------+---------+-------+-----+--------+
|
||
| Scheduling Inbox Privilege | REQUEST | REPLY | ADD | CANCEL |
|
||
+-----------------------------+---------+-------+-----+--------+
|
||
| schedule-deliver | * | * | * | * |
|
||
| schedule-deliver-invite | * | | * | * |
|
||
| schedule-deliver-reply | | * | | |
|
||
| schedule-query-freebusy | | | | |
|
||
+-----------------------------+---------+-------+-----+--------+
|
||
|
||
|
||
+----------------------+
|
||
| METHOD for VFREEBUSY |
|
||
+-----------------------------+----------------------+
|
||
| Scheduling Inbox Privilege | REQUEST |
|
||
+-----------------------------+----------------------+
|
||
| schedule-deliver | * |
|
||
| schedule-deliver-invite | |
|
||
| schedule-deliver-reply | |
|
||
| schedule-query-freebusy | * |
|
||
+-----------------------------+----------------------+
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 59]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
A.2. Scheduling Outbox Privileges
|
||
|
||
The following tables specify which scheduling privileges grant the
|
||
right to a calendar user to perform busy time information requests
|
||
and to submit scheduling messages to other calendar users as the
|
||
result of a scheduling operation. The appropriate behavior depends
|
||
on the calendar component type as well as the scheduling "METHOD"
|
||
specified in the scheduling message.
|
||
|
||
+--------------------------------+
|
||
| METHOD for VEVENT and VTODO |
|
||
+-----------------------------+---------+-------+-----+--------+
|
||
| Scheduling Outbox Privilege | REQUEST | REPLY | ADD | CANCEL |
|
||
+-----------------------------+---------+-------+-----+--------+
|
||
| schedule-send | * | * | * | * |
|
||
| schedule-send-invite | * | | * | * |
|
||
| schedule-send-reply | | * | | |
|
||
| schedule-send-freebusy | | | | |
|
||
+-----------------------------+---------+-------+-----+--------+
|
||
|
||
|
||
+----------------------+
|
||
| METHOD for VFREEBUSY |
|
||
+-----------------------------+----------------------+
|
||
| Scheduling Outbox Privilege | REQUEST |
|
||
+-----------------------------+----------------------+
|
||
| schedule-send | * |
|
||
| schedule-send-invite | |
|
||
| schedule-send-reply | |
|
||
| schedule-send-freebusy | * |
|
||
+-----------------------------+----------------------+
|
||
|
||
Appendix B. Example Scheduling Operations
|
||
|
||
This section describes some example scheduling operations that give a
|
||
general idea of how scheduling is carried out between CalDAV clients
|
||
and servers from the perspective of meeting "Organizers" and
|
||
"Attendees".
|
||
|
||
The server is assumed to be hosted in the "example.com" domain, and
|
||
users whose email addresses are at the "example.com" domain are
|
||
assumed to be hosted by the server. In addition, the email addresses
|
||
in the "example.net" domain are also valid email addresses for
|
||
calendar users hosted by the server. Calendar users with an email
|
||
address at the "example.org" domain are assumed to not be hosted by
|
||
the server.
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 60]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
In the following examples, the requests and responses are incomplete
|
||
and are only for illustrative purposes. In particular, HTTP
|
||
authentication headers and behaviors are not shown, even though they
|
||
are required in normal operation.
|
||
|
||
B.1. Example: "Organizer" Inviting Multiple "Attendees"
|
||
|
||
In the following example, Cyrus invites Wilfredo, Bernard, and Mike
|
||
to a single instance event by simply creating a new scheduling object
|
||
resource in one of his calendar collections by using the PUT method.
|
||
|
||
>> Request <<
|
||
|
||
PUT /home/cyrus/calendars/work/9263504FD3AD.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
If-None-Match: *
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090602T185254Z
|
||
DTSTART:20090602T160000Z
|
||
DTEND:20090602T170000Z
|
||
TRANSP:OPAQUE
|
||
SUMMARY:Lunch
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
|
||
mailto:cyrus@example.com
|
||
ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
|
||
=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@
|
||
example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
|
||
NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex
|
||
ample.net
|
||
ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
|
||
CTION;RSVP=TRUE:mailto:mike@example.org
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 201 Created
|
||
Content-Length: 0
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 61]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Date: Tue, 02 Jun 2009 18:52:54 GMT
|
||
Last-Modified: Tue, 02 Jun 2009 18:52:54 GMT
|
||
ETag: "d85561cfe74a4e785eb4639451b434fb"
|
||
Schedule-Tag: "488177c8-2ea7-4176-a6cb-fab8cfccdea2"
|
||
|
||
Once the event creation has been completed, Cyrus's client will
|
||
retrieve the event back from the server to get the schedule status of
|
||
each "Attendee", as well as record the Schedule-Tag value for future
|
||
use. In this example, the server reports that a scheduling message
|
||
was delivered to Wilfredo, a scheduling message is still pending for
|
||
Bernard, and the server was unable to deliver a scheduling message to
|
||
Mike.
|
||
|
||
>> Request <<
|
||
|
||
GET /home/cyrus/calendars/work/9263504FD3AD.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Date: Tue, 02 Jun 2009 18:52:58 GMT
|
||
Last-Modified: Tue, 02 Jun 2009 18:52:58 GMT
|
||
ETag: "eb897deabc8939589da116714bc99265"
|
||
Schedule-Tag: "488177c8-2ea7-4176-a6cb-fab8cfccdea2"
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Server//EN
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090602T185300Z
|
||
DTSTART:20090602T160000Z
|
||
DTEND:20090602T170000Z
|
||
TRANSP:OPAQUE
|
||
SUMMARY:Lunch
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
|
||
mailto:cyrus@example.com
|
||
ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
|
||
=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=
|
||
1.2:mailto:wilfredo@e
|
||
xample.com
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 62]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
|
||
NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=
|
||
1.0:mailto:bernard@example.net
|
||
ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
|
||
CTION;RSVP=TRUE;SCHEDULE-STATUS=3.7:mailto:mike@example.org
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
B.2. Example: "Attendee" Receiving an Invitation
|
||
|
||
In the following example, Wilfredo's client retrieves and deletes the
|
||
new scheduling message that appeared in his scheduling Inbox
|
||
collection after the server automatically processed it and created a
|
||
new scheduling object resource in his default calendar collection.
|
||
|
||
>> Request <<
|
||
|
||
GET /home/wilfredo/calendars/inbox/27d93fc0a58c.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Date: Tue, 02 Jun 2009 18:59:58 GMT
|
||
Last-Modified: Tue, 02 Jun 2009 18:59:58 GMT
|
||
ETag: "da116714bc9926c89395895eb897deab"
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Server//EN
|
||
METHOD:REQUEST
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090602T185254Z
|
||
DTSTART:20090602T160000Z
|
||
DTEND:20090602T170000Z
|
||
TRANSP:OPAQUE
|
||
SUMMARY:Lunch
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
|
||
mailto:cyrus@example.com
|
||
ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
|
||
=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@
|
||
example.com
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 63]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
|
||
NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex
|
||
ample.net
|
||
ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
|
||
CTION;RSVP=TRUE:mailto:mike@example.org
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
>> Request <<
|
||
|
||
DELETE /home/wilfredo/calendars/inbox/27d93fc0a58c.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 204 No Content
|
||
Date: Tue, 02 Jun 2009 20:40:36 GMT
|
||
|
||
B.3. Example: "Attendee" Replying to an Invitation
|
||
|
||
In the following example, Wilfredo accepts Cyrus's invitation and
|
||
sets an alarm reminder on the event. It uses the If-Schedule-Tag-
|
||
Match precondition behavior to ensure it does not overwrite any
|
||
significant changes from the "Organizer" that might have occurred
|
||
after it retrieved the initial resource data.
|
||
|
||
>> Request <<
|
||
|
||
PUT /home/wilfredo/calendars/work/BB64861C2228.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
If-Schedule-Tag-Match: "e78f23ed-0188-4bab-938d-2aeb3324c7e8"
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090602T185254Z
|
||
DTSTART:20090602T160000Z
|
||
DTEND:20090602T170000Z
|
||
TRANSP:OPAQUE
|
||
SUMMARY:Lunch
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
|
||
mailto:cyrus@example.com
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 64]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
|
||
=ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@exam
|
||
ple.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
|
||
NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex
|
||
ample.net
|
||
ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
|
||
CTION;RSVP=TRUE:mailto:mike@example.org
|
||
BEGIN:VALARM
|
||
TRIGGER:-PT15M
|
||
ACTION:DISPLAY
|
||
DESCRIPTION:Reminder
|
||
END:VALARM
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Content-Length: 0
|
||
Date: Tue, 02 Jun 2009 18:57:54 GMT
|
||
Last-Modified: Tue, 02 Jun 2009 18:57:54 GMT
|
||
ETag: "eb4639451b434fbd85561cfe74a4e785"
|
||
Schedule-Tag: "8893ee45-eb9d-428f-b53c-c777daf19e41"
|
||
|
||
Once the event modification has been completed, Wilfredo's client
|
||
will retrieve the event back from the server to get the schedule
|
||
status of the "Organizer".
|
||
|
||
>> Request <<
|
||
|
||
GET /home/wilfredo/calendars/work/BB64861C2228.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Date: Tue, 02 Jun 2009 19:03:03 GMT
|
||
Last-Modified: Tue, 02 Jun 2009 19:02:21 GMT
|
||
ETag: "5eb897deabda116714bc9926c8939589"
|
||
Schedule-Tag: "8893ee45-eb9d-428f-b53c-c777daf19e41"
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 65]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090602T190221Z
|
||
DTSTART:20090602T160000Z
|
||
DTEND:20090602T170000Z
|
||
TRANSP:OPAQUE
|
||
SUMMARY:Lunch
|
||
ORGANIZER;CN="Cyrus Daboo";SCHEDULE-STATUS=1.2:mailto:cyrus@ex
|
||
ample.com
|
||
ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
|
||
mailto:cyrus@example.com
|
||
ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
|
||
=ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@exam
|
||
ple.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
|
||
NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex
|
||
ample.net
|
||
ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
|
||
CTION;RSVP=TRUE:mailto:mike@example.org
|
||
BEGIN:VALARM
|
||
TRIGGER:-PT15M
|
||
ACTION:DISPLAY
|
||
DESCRIPTION:Reminder
|
||
END:VALARM
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
B.4. Example: "Organizer" Receiving a Reply to an Invitation
|
||
|
||
On reception of Wilfredo's reply, Cyrus's server will automatically
|
||
update Cyrus's scheduling object resource, make Wilfredo's scheduling
|
||
message available in Cyrus's scheduling Inbox collection, and deliver
|
||
an updated scheduling message to Bernard to share Wilfredo's updated
|
||
participation status. In this example, Cyrus's client retrieves and
|
||
deletes this scheduling message in his scheduling Inbox collection.
|
||
|
||
>> Request <<
|
||
|
||
GET /home/cyrus/calendars/inbox/c0a58c27d93f.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 66]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Date: Tue, 02 Jun 2009 19:05:02 GMT
|
||
Last-Modified: Tue, 02 Jun 2009 19:04:20 GMT
|
||
ETag: "9265eb897deabc8939589da116714bc9"
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Server//EN
|
||
METHOD:REPLY
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090602T185754Z
|
||
DTSTART:20090602T160000Z
|
||
DTEND:20090602T170000Z
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Wilfredo Sanchez Vega";PARTSTAT=ACCEPTED:mailto:w
|
||
ilfredo@example.com
|
||
REQUEST-STATUS:2.0;Success
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
>> Request <<
|
||
|
||
DELETE /home/cyrus/calendars/inbox/c0a58c27d93f.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 204 No Content
|
||
Date: Tue, 02 Jun 2009 19:05:05 GMT
|
||
|
||
Cyrus's client then retrieves the event back from the server with
|
||
Wilfredo's updated participation status.
|
||
|
||
>> Request <<
|
||
|
||
GET /home/cyrus/calendars/work/9263504FD3AD.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 67]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Date: Tue, 02 Jun 2009 19:05:02 GMT
|
||
Last-Modified: Tue, 02 Jun 2009 19:04:20 GMT
|
||
ETag: "eb897deabc8939589da116714bc99265"
|
||
Schedule-Tag: "132cab27-1fe3-67ab-de13-abd348d1dee3"
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Server//EN
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090602T190420Z
|
||
DTSTART:20090602T160000Z
|
||
DTEND:20090602T170000Z
|
||
TRANSP:OPAQUE
|
||
SUMMARY:Lunch
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
|
||
mailto:cyrus@example.com
|
||
ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
|
||
=ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=2.0:
|
||
mailto:wilfredo@example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
|
||
NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1
|
||
.0:mailto:bernard@example.net
|
||
ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
|
||
CTION;RSVP=TRUE;SCHEDULE-STATUS=3.7:mailto:mike@example.org
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 68]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
B.5. Example: "Organizer" Requesting Busy Time Information
|
||
|
||
In this example, Cyrus requests the busy time information of
|
||
Wilfredo, Bernard, and Mike.
|
||
|
||
>> Request <<
|
||
|
||
POST /home/cyrus/calendars/outbox/ HTTP/1.1
|
||
Host: cal.example.com
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||
METHOD:REQUEST
|
||
BEGIN:VFREEBUSY
|
||
UID:4FD3AD926350
|
||
DTSTAMP:20090602T190420Z
|
||
DTSTART:20090602T000000Z
|
||
DTEND:20090604T000000Z
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Wilfredo Sanchez Vega":mailto:wilfredo@example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux":mailto:bernard@example.net
|
||
ATTENDEE;CN="Mike Douglass":mailto:mike@example.org
|
||
END:VFREEBUSY
|
||
END:VCALENDAR
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Date: Tue, 02 Jun 2009 20:07:34 GMT
|
||
Content-Type: application/xml; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<C:schedule-response xmlns:D="DAV:"
|
||
xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||
<C:response>
|
||
<C:recipient>
|
||
<D:href>mailto:wilfredo@example.com</D:href>
|
||
</C:recipient>
|
||
<C:request-status>2.0;Success</C:request-status>
|
||
<C:calendar-data>BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Server//EN
|
||
METHOD:REPLY
|
||
BEGIN:VFREEBUSY
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 69]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
UID:4FD3AD926350
|
||
DTSTAMP:20090602T200733Z
|
||
DTSTART:20090602T000000Z
|
||
DTEND:20090604T000000Z
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Wilfredo Sanchez Vega":mailto:wilfredo@example.com
|
||
FREEBUSY;FBTYPE=BUSY:20090602T110000Z/20090602T120000Z
|
||
FREEBUSY;FBTYPE=BUSY:20090603T170000Z/20090603T180000Z
|
||
END:VFREEBUSY
|
||
END:VCALENDAR
|
||
</C:calendar-data>
|
||
</C:response>
|
||
<C:response>
|
||
<C:recipient>
|
||
<D:href>mailto:bernard@example.net</D:href>
|
||
</C:recipient>
|
||
<C:request-status>2.0;Success</C:request-status>
|
||
<C:calendar-data>BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Server//EN
|
||
METHOD:REPLY
|
||
BEGIN:VFREEBUSY
|
||
UID:4FD3AD926350
|
||
DTSTAMP:20090602T200733Z
|
||
DTSTART:20090602T000000Z
|
||
DTEND:20090604T000000Z
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux":mailto:bernard@example.net
|
||
FREEBUSY;FBTYPE=BUSY:20090602T150000Z/20090602T160000Z
|
||
FREEBUSY;FBTYPE=BUSY:20090603T090000Z/20090603T100000Z
|
||
FREEBUSY;FBTYPE=BUSY:20090603T180000Z/20090603T190000Z
|
||
END:VFREEBUSY
|
||
END:VCALENDAR
|
||
</C:calendar-data>
|
||
</C:response>
|
||
<C:response>
|
||
<C:recipient>
|
||
<D:href>mailto:mike@example.org</D:href>
|
||
</C:recipient>
|
||
<C:request-status>3.7;Invalid calendar user</C:request-status>
|
||
</C:response>
|
||
</C:schedule-response>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 70]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
B.6. Example: User Attempting to Invite "Attendee" on Behalf of
|
||
"Organizer"
|
||
|
||
In the following example, Cyrus attempts to create, on behalf of
|
||
Wilfredo, an event with Bernard specified as an "Attendee". The
|
||
request fails, since Wilfredo didn't grant Cyrus the right to invite
|
||
other calendar users on his behalf.
|
||
|
||
>> Request <<
|
||
|
||
PUT /home/wilfredo/calendars/work/def456.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
If-None-Match: *
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||
BEGIN:VEVENT
|
||
UID:3504F926D3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090602T190221Z
|
||
DTSTART:20090602T230000Z
|
||
DTEND:20090603T000000Z
|
||
TRANSP:OPAQUE
|
||
SUMMARY:Dinner
|
||
ORGANIZER;CN="Wilfredo Sanchez Vega":mailto:wilfredo@example.com
|
||
ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT=A
|
||
CCEPTED:mailto:wilfredo@example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=NE
|
||
EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl
|
||
e.net
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 71]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 403 Forbidden
|
||
Content-Type: application/xml; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
<?xml version="1.0" encoding="utf-8" ?>
|
||
<D:error xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||
<D:need-privileges>
|
||
<D:resource>
|
||
<D:href>/home/wilfredo/calendars/outbox/</D:href>
|
||
<D:privilege><C:schedule-send-invite/></D:privilege>
|
||
</D:resource>
|
||
</D:need-privileges>
|
||
</D:error>
|
||
|
||
B.7. Example: "Attendee" Declining an Instance of a Recurring Event
|
||
|
||
In the following example, Bernard declines the second recurrence
|
||
instance of a daily recurring event he's been invited to by Cyrus.
|
||
|
||
>> Request <<
|
||
|
||
PUT /home/bernard/calendars/work/4FD3AD926350.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
If-Schedule-Tag-Match: "7775FB30-7534-489E-A79A-0EA147B933EB"
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||
BEGIN:VTIMEZONE
|
||
TZID:America/Montreal
|
||
BEGIN:STANDARD
|
||
DTSTART:20071104T020000
|
||
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
|
||
TZNAME:EST
|
||
TZOFFSETFROM:-0400
|
||
TZOFFSETTO:-0500
|
||
END:STANDARD
|
||
BEGIN:DAYLIGHT
|
||
DTSTART:20070311T020000
|
||
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
|
||
TZNAME:EDT
|
||
TZOFFSETFROM:-0500
|
||
TZOFFSETTO:-0400
|
||
END:DAYLIGHT
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 72]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
END:VTIMEZONE
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090602T185254Z
|
||
DTSTART;TZID=America/Montreal:20090601T150000
|
||
DTEND;TZID=America/Montreal:20090601T160000
|
||
RRULE:FREQ=DAILY;INTERVAL=1;COUNT=5
|
||
TRANSP:OPAQUE
|
||
SUMMARY:Review Internet-Draft
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
|
||
mailto:cyrus@example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
|
||
ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl
|
||
e.net
|
||
END:VEVENT
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090603T183823Z
|
||
RECURRENCE-ID;TZID=America/Montreal:20090602T150000
|
||
DTSTART;TZID=America/Montreal:20090602T150000
|
||
DTEND;TZID=America/Montreal:20090602T160000
|
||
TRANSP:TRANSPARENT
|
||
SUMMARY:Review Internet-Draft
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
|
||
mailto:cyrus@example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
|
||
DECLINED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl
|
||
e.net
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Content-Length: 0
|
||
Date: Tue, 02 Jun 2009 18:52:54 GMT
|
||
Last-Modified: Tue, 02 Jun 2009 18:52:54 GMT
|
||
ETag: "d85561cfe74a4e785eb4639451b434fb"
|
||
Schedule-Tag: "488177c8-2ea7-4176-a6cb-fab8cfccdea2"
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 73]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Bernard's participation status update will cause his server to
|
||
deliver a scheduling message to Cyrus. Cyrus's client will find the
|
||
following reply message from Bernard in Cyrus's scheduling Inbox
|
||
collection:
|
||
|
||
>> Request <<
|
||
|
||
GET /home/cyrus/calendars/inbox/9263504FD3AD.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Date: Tue, 02 Jun 2009 18:52:58 GMT
|
||
Last-Modified: Tue, 02 Jun 2009 18:52:58 GMT
|
||
ETag: "eb897deabc8939589da116714bc99265"
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||
METHOD:REPLY
|
||
BEGIN:VTIMEZONE
|
||
TZID:America/Montreal
|
||
BEGIN:STANDARD
|
||
DTSTART:20071104T020000
|
||
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
|
||
TZNAME:EST
|
||
TZOFFSETFROM:-0400
|
||
TZOFFSETTO:-0500
|
||
END:STANDARD
|
||
BEGIN:DAYLIGHT
|
||
DTSTART:20070311T020000
|
||
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
|
||
TZNAME:EDT
|
||
TZOFFSETFROM:-0500
|
||
TZOFFSETTO:-0400
|
||
END:DAYLIGHT
|
||
END:VTIMEZONE
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090603T183823Z
|
||
RECURRENCE-ID;TZID=America/Montreal:20090602T150000
|
||
DTSTART;TZID=America/Montreal:20090602T150000
|
||
DTEND;TZID=America/Montreal:20090602T160000
|
||
SUMMARY:Review Internet-Draft
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 74]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";PARTSTAT=DECLINED:
|
||
mailto:bernard@example.net
|
||
REQUEST-STATUS:2.0;Success
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
B.8. Example: "Attendee" Removing an Instance of a Recurring Event
|
||
|
||
In the following example, Bernard removes from his calendar the third
|
||
recurrence instance of a daily recurring event he's been invited to
|
||
by Cyrus. This is accomplished by the addition of an "EXDATE"
|
||
property to the scheduling object resource stored by Bernard.
|
||
|
||
>> Request <<
|
||
|
||
PUT /home/bernard/calendars/work/4FD3AD926350.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
If-Schedule-Tag-Match: "488177c8-2ea7-4176-a6cb-fab8cfccdea2"
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||
BEGIN:VTIMEZONE
|
||
TZID:America/Montreal
|
||
BEGIN:STANDARD
|
||
DTSTART:20071104T020000
|
||
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
|
||
TZNAME:EST
|
||
TZOFFSETFROM:-0400
|
||
TZOFFSETTO:-0500
|
||
END:STANDARD
|
||
BEGIN:DAYLIGHT
|
||
DTSTART:20070311T020000
|
||
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
|
||
TZNAME:EDT
|
||
TZOFFSETFROM:-0500
|
||
TZOFFSETTO:-0400
|
||
END:DAYLIGHT
|
||
END:VTIMEZONE
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090602T185254Z
|
||
DTSTART;TZID=America/Montreal:20090601T150000
|
||
DTEND;TZID=America/Montreal:20090601T160000
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 75]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
RRULE:FREQ=DAILY;INTERVAL=1;COUNT=5
|
||
EXDATE;TZID=America/Montreal:20090603T150000
|
||
TRANSP:OPAQUE
|
||
SUMMARY:Review Internet-Draft
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
|
||
mailto:cyrus@example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
|
||
ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl
|
||
e.net
|
||
END:VEVENT
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090603T183823Z
|
||
RECURRENCE-ID;TZID=America/Montreal:20090602T150000
|
||
DTSTART;TZID=America/Montreal:20090602T150000
|
||
DTEND;TZID=America/Montreal:20090602T160000
|
||
TRANSP:TRANSPARENT
|
||
SUMMARY:Review Internet-Draft
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
|
||
mailto:cyrus@example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
|
||
DECLINED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl
|
||
e.net
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
Bernard's deletion of a recurrence instance will cause his server to
|
||
deliver a scheduling message to Cyrus. Cyrus's client will find the
|
||
following reply message from Bernard in Cyrus's scheduling Inbox
|
||
collection:
|
||
|
||
>> Request <<
|
||
|
||
GET /home/cyrus/calendars/inbox/6504923FD3AD.ics HTTP/1.1
|
||
Host: cal.example.com
|
||
|
||
>> Response <<
|
||
|
||
HTTP/1.1 200 OK
|
||
Date: Tue, 02 Jun 2009 18:52:58 GMT
|
||
Last-Modified: Tue, 02 Jun 2009 18:52:58 GMT
|
||
ETag: "eb897deabc8939589da116714bc99265"
|
||
Content-Type: text/calendar; charset="utf-8"
|
||
Content-Length: xxxx
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 76]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
BEGIN:VCALENDAR
|
||
VERSION:2.0
|
||
PRODID:-//Example Corp.//CalDAV Client//EN
|
||
METHOD:REPLY
|
||
BEGIN:VTIMEZONE
|
||
TZID:America/Montreal
|
||
BEGIN:STANDARD
|
||
DTSTART:20071104T020000
|
||
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
|
||
TZNAME:EST
|
||
TZOFFSETFROM:-0400
|
||
TZOFFSETTO:-0500
|
||
END:STANDARD
|
||
BEGIN:DAYLIGHT
|
||
DTSTART:20070311T020000
|
||
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
|
||
TZNAME:EDT
|
||
TZOFFSETFROM:-0500
|
||
TZOFFSETTO:-0400
|
||
END:DAYLIGHT
|
||
END:VTIMEZONE
|
||
BEGIN:VEVENT
|
||
UID:9263504FD3AD
|
||
SEQUENCE:0
|
||
DTSTAMP:20090603T183823Z
|
||
RECURRENCE-ID;TZID=America/Montreal:20090603T150000
|
||
DTSTART;TZID=America/Montreal:20090603T150000
|
||
DTEND;TZID=America/Montreal:20090603T160000
|
||
SUMMARY:Review Internet-Draft
|
||
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
|
||
ATTENDEE;CN="Bernard Desruisseaux";PARTSTAT=DECLINED:
|
||
mailto:bernard@example.net
|
||
REQUEST-STATUS:2.0;Success
|
||
END:VEVENT
|
||
END:VCALENDAR
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 77]
|
||
|
||
RFC 6638 CalDAV Scheduling June 2012
|
||
|
||
|
||
Authors' Addresses
|
||
|
||
Cyrus Daboo
|
||
Apple Inc.
|
||
1 Infinite Loop
|
||
Cupertino, CA 95014
|
||
USA
|
||
|
||
EMail: cyrus@daboo.name
|
||
URI: http://www.apple.com/
|
||
|
||
|
||
Bernard Desruisseaux
|
||
Oracle Corporation
|
||
600 Blvd. de Maisonneuve West
|
||
Suite 1900
|
||
Montreal, QC H3A 3J2
|
||
CANADA
|
||
|
||
EMail: bernard.desruisseaux@oracle.com
|
||
URI: http://www.oracle.com/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Daboo & Desruisseaux Standards Track [Page 78]
|
||
|