Network Working Group                                           C. Daboo
Internet-Draft                                                     Apple
Intended status: Standards Track                         B. Desruisseaux
Expires: May 21, 2008                                             Oracle
                                                            L. Dusseault
                                                             CommerceNet
                                                       November 18, 2007


                 CalDAV Scheduling Extensions to WebDAV
                   draft-desruisseaux-caldav-sched-04

Status of This Memo

   By submitting this Internet-Draft, each author represents that any
   applicable patent or other IPR claims of which he or she is aware
   have been or will be disclosed, and any of which he or she becomes
   aware will be disclosed, in accordance with Section 6 of BCP 79.

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

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

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

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

   This Internet-Draft will expire on May 21, 2008.

Copyright Notice

   Copyright (C) The IETF Trust (2007).

Abstract

   This document defines extensions to the Web Distributed Authoring and
   Versioning (WebDAV) protocol to specify a standard way of exchanging
   and processing scheduling messages based on the iCalendar Transport-
   Independent Interoperability Protocol (iTIP).  This document defines
   the "calendar-schedule" feature of CalDAV.



Daboo, et al.             Expires May 21, 2008                  [Page 1]


Internet-Draft               CalDAV Schedule               November 2007


Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  4
     1.1.  XML Namespaces . . . . . . . . . . . . . . . . . . . . . .  4
     1.2.  Notational Conventions . . . . . . . . . . . . . . . . . .  4
     1.3.  Terminology  . . . . . . . . . . . . . . . . . . . . . . .  5
   2.  Required Scheduling features . . . . . . . . . . . . . . . . .  5
   3.  CalDAV Scheduling Support Discovery  . . . . . . . . . . . . .  6
     3.1.  Example: Using OPTIONS for the Discovery of Support
           for CalDAV . . . . . . . . . . . . . . . . . . . . . . . .  6
   4.  Scheduling Process . . . . . . . . . . . . . . . . . . . . . .  6
     4.1.  Scheduling Collections . . . . . . . . . . . . . . . . . .  8
     4.2.  Scheduling Transactions  . . . . . . . . . . . . . . . . .  9
   5.  New Resource Types and Properties  . . . . . . . . . . . . . . 10
     5.1.  Scheduling Outbox Collection . . . . . . . . . . . . . . . 10
     5.2.  Scheduling Inbox Collection  . . . . . . . . . . . . . . . 11
     5.3.  Scheduling Inbox Collection Properties . . . . . . . . . . 11
       5.3.1.  CALDAV:calendar-free-busy-set Property . . . . . . . . 12
       5.3.2.  Additional Precondition for PROPPATCH  . . . . . . . . 12
     5.4.  Calendar Object Resource Properties  . . . . . . . . . . . 13
       5.4.1.  CALDAV:originator Property . . . . . . . . . . . . . . 13
       5.4.2.  CALDAV:recipient Property  . . . . . . . . . . . . . . 13
   6.  Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . 15
     6.1.  POST Method  . . . . . . . . . . . . . . . . . . . . . . . 15
       6.1.1.  Originator request header  . . . . . . . . . . . . . . 16
       6.1.2.  ORGANIZER Property . . . . . . . . . . . . . . . . . . 17
       6.1.3.  Recipient request header . . . . . . . . . . . . . . . 17
       6.1.4.  Response to a POST request . . . . . . . . . . . . . . 18
       6.1.5.  Status Codes for use with the POST method  . . . . . . 18
       6.1.6.  Example - Simple meeting invitation  . . . . . . . . . 20
       6.1.7.  Example - Free-Busy lookup . . . . . . . . . . . . . . 22
       6.1.8.  Example - Simple task assignment . . . . . . . . . . . 24
     6.2.  Retrieving incoming scheduling messages  . . . . . . . . . 25
       6.2.1.  Example - Retrieve incoming scheduling message . . . . 25
     6.3.  Acting on incoming scheduling messages . . . . . . . . . . 26
   7.  Additional iCalendar Property Parameters . . . . . . . . . . . 27
     7.1.  Received Sequence  . . . . . . . . . . . . . . . . . . . . 27
     7.2.  Received Date/Time Stamp . . . . . . . . . . . . . . . . . 28
   8.  HTTP Request Headers for CalDAV  . . . . . . . . . . . . . . . 28
     8.1.  Originator Request Header  . . . . . . . . . . . . . . . . 28
     8.2.  Recipient Request Header . . . . . . . . . . . . . . . . . 28
   9.  Scheduling Access Control  . . . . . . . . . . . . . . . . . . 29
     9.1.  Scheduling Privileges  . . . . . . . . . . . . . . . . . . 29
       9.1.1.  CALDAV:schedule-post Privilege . . . . . . . . . . . . 29
       9.1.2.  CALDAV:schedule-post-vevent Privilege  . . . . . . . . 29
       9.1.3.  CALDAV:schedule-post-vtodo Privilege . . . . . . . . . 29
       9.1.4.  CALDAV:schedule-post-vjournal Privilege  . . . . . . . 29
       9.1.5.  CALDAV:schedule-post-vfreebusy Privilege . . . . . . . 30



Daboo, et al.             Expires May 21, 2008                  [Page 2]


Internet-Draft               CalDAV Schedule               November 2007


       9.1.6.  CALDAV:schedule-deliver Privilege  . . . . . . . . . . 30
       9.1.7.  CALDAV:schedule-deliver-vevent Privilege . . . . . . . 30
       9.1.8.  CALDAV:schedule-deliver-vtodo Privilege  . . . . . . . 30
       9.1.9.  CALDAV:schedule-deliver-vjournal Privilege . . . . . . 31
       9.1.10. CALDAV:schedule-deliver-vfreebusy Privilege  . . . . . 31
       9.1.11. CALDAV:schedule-respond Privilege  . . . . . . . . . . 31
       9.1.12. CALDAV:schedule-respond-vevent Privilege . . . . . . . 32
       9.1.13. CALDAV:schedule-respond-vtodo Privilege  . . . . . . . 32
       9.1.14. CALDAV:schedule Privilege  . . . . . . . . . . . . . . 32
       9.1.15. Aggregation of Scheduling Privileges . . . . . . . . . 32
     9.2.  Additional Principal Properties  . . . . . . . . . . . . . 33
       9.2.1.  CALDAV:schedule-inbox-URL Property . . . . . . . . . . 33
       9.2.2.  CALDAV:schedule-outbox-URL Property  . . . . . . . . . 34
       9.2.3.  CALDAV:calendar-user-address-set Property  . . . . . . 34
       9.2.4.  Example: Searching for calendars belonging to a
               user based on a calendar user address  . . . . . . . . 35
       9.2.5.  Example: Finding the scheduling Inbox and Outbox
               Collection belonging to the currently
               authenticated user . . . . . . . . . . . . . . . . . . 36
   10. Reports  . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
   11. XML Element Definitions  . . . . . . . . . . . . . . . . . . . 37
     11.1. CALDAV:schedule-response XML Element . . . . . . . . . . . 37
     11.2. CALDAV:response XML Element  . . . . . . . . . . . . . . . 37
     11.3. CALDAV:recipient XML Element . . . . . . . . . . . . . . . 37
     11.4. CALDAV:request-status XML Element  . . . . . . . . . . . . 38
   12. Security Considerations  . . . . . . . . . . . . . . . . . . . 38
     12.1. Verifying scheduling requests  . . . . . . . . . . . . . . 38
   13. IANA Consideration . . . . . . . . . . . . . . . . . . . . . . 39
     13.1. Originator Header Registration . . . . . . . . . . . . . . 39
     13.2. Recipient Header Registration  . . . . . . . . . . . . . . 39
   14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 40
   15. References . . . . . . . . . . . . . . . . . . . . . . . . . . 40
     15.1. Normative References . . . . . . . . . . . . . . . . . . . 40
     15.2. Informative References . . . . . . . . . . . . . . . . . . 41
   Appendix A.  Scheduling Privileges Summary . . . . . . . . . . . . 41
     A.1.  Scheduling Inbox Privileges  . . . . . . . . . . . . . . . 41
     A.2.  Scheduling Outbox Privileges . . . . . . . . . . . . . . . 44
   Appendix B.  Example Scheduling Workflow . . . . . . . . . . . . . 45
     B.1.  Inviting Attendees to an Event . . . . . . . . . . . . . . 46
     B.2.  Receiving and Replying to an Event Invitation  . . . . . . 46
     B.3.  Receiving a Reply to an Event Invitation . . . . . . . . . 46
     B.4.  Rescheduling an existing event . . . . . . . . . . . . . . 47
     B.5.  Receiving an Updated Event Invitation  . . . . . . . . . . 47
   Appendix C.  Changes . . . . . . . . . . . . . . . . . . . . . . . 48
     C.1.  Changes in -04 . . . . . . . . . . . . . . . . . . . . . . 48
     C.2.  Changes in -03 . . . . . . . . . . . . . . . . . . . . . . 49
     C.3.  Changes in -02 . . . . . . . . . . . . . . . . . . . . . . 49
     C.4.  Changes in -01 . . . . . . . . . . . . . . . . . . . . . . 49



Daboo, et al.             Expires May 21, 2008                  [Page 3]


Internet-Draft               CalDAV Schedule               November 2007


1.  Introduction

   This document specifies a set of headers, properties and privileges
   that define the CalDAV [RFC4791] scheduling extensions to the WebDAV
   [RFC4918] protocol.  This document also provides the transport
   specific information necessary to convey iCalendar [RFC2445]
   Transport-independent Interoperability Protocol iTIP [RFC2446]
   messages over WebDAV which enables transactions such as publish,
   schedule, reschedule, respond to scheduling requests, negotiation of
   changes or cancel iCalendar-based calendar components, as well as
   search for busy time information.

   Discussion of this Internet-Draft is taking place on the mailing list
   <http://lists.osafoundation.org/mailman/listinfo/ietf-caldav>.

1.1.  XML Namespaces

   Definitions of XML elements in this document use XML element type
   declarations (as found in XML Document Type Declarations), described
   in Section 3.2 of [W3C.REC-xml-20060816].

   The namespace "urn:ietf:params:xml:ns:caldav" is reserved for the XML
   elements defined in this specification, or in other Standards Track
   IETF RFCs written to extend CalDAV.  It MUST NOT be used for
   proprietary extensions.

   Note that the XML declarations used in this document are incomplete,
   in that they do not include namespace information.  Thus, the reader
   MUST NOT use these declarations as the only way to create valid
   CalDAV properties or to validate CalDAV XML element types.  Some of
   the declarations refer to XML elements defined by WebDAV which use
   the "DAV:" namespace.  Wherever such elements appear, they are
   explicitly given the "DAV:" prefix to help avoid confusion.
   Additionally, some of the elements used here are defined in CalDAV
   [RFC4791].

   Also note that some CalDAV XML element names are identical to WebDAV
   XML element names, though their namespace differs.  Care MUST be
   taken not to confuse the two sets of names.

1.2.  Notational Conventions

   The augmented BNF used by this document to describe protocol elements
   is described in Section 2.1 of [RFC2616].  Because this augmented BNF
   uses the basic production rules provided in Section 2.2 of [RFC2616],
   those rules apply to this document as well.

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",



Daboo, et al.             Expires May 21, 2008                  [Page 4]


Internet-Draft               CalDAV Schedule               November 2007


   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

   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 string "DAV:" and
   "CALDAV:" will be prefixed to the element types respectively.

1.3.  Terminology

   Scheduling message:  A message that describes a transaction such as
      publish, schedule, reschedule, respond to scheduling requests,
      negotiation of changes or cancel calendar components.

   Free busy message:  A message that describes a transaction such as
      publish unsolicited busy time information, request busy time
      information, or respond to a busy time request.

   Outgoing Scheduling message:  A scheduling message that uses an
      scheduling method set to one of PUBLISH, REQUEST, ADD, CANCEL or
      DECLINE-COUNTER.

   Incoming Scheduling message:  A scheduling message that uses an
      scheduling method set to one of REPLY, REFRESH or COUNTER.

   Calendar User Agent (CUA)  Software with which the calendar user
      communicates with a calendar service or local calendar store to
      access calendar information.

2.  Required Scheduling features

   This section lists what functionality is required of a CalDAV
   scheduling server.  To advertise support for this specification a
   server:

   o  MUST support iCalendar [RFC2445] as a media type for the calendar
      object resource format;

   o  MUST support iTIP [RFC2446].

   o  MUST support WebDAV Class 1, 2, and 3 [RFC4918];

   o  MUST support WebDAV ACL [RFC3744] with the additional privileges
      defined in Section 9.1 of this document;

   o  MUST support transport over TLS [RFC2246] as defined in [RFC2818]
      (note that [RFC2246] has been obsoleted by [RFC4346]);




Daboo, et al.             Expires May 21, 2008                  [Page 5]


Internet-Draft               CalDAV Schedule               November 2007


   o  MUST support ETags [RFC2616];

   o  MUST support the CALDAV:schedule-inbox and CALDAV:schedule-outbox
      collection resource types.

   o  MUST support the POST method with the Recipient and Originator
      request headers targeted at a CALDAV:schedule-outbox collection
      resource type.

   A CalDAV scheduling server MAY also support the CalDAV calendar-
   access feature [RFC4791], and that adds the following requirements:

      MUST support the CALDAV:calendar-query and CALDAV:multiget REPORTs
      on CALDAV:schedule-inbox and CALDAV:schedule-outbox collection
      resource types.

3.  CalDAV Scheduling Support Discovery

   If the server supports the calendar scheduling features described in
   this document it MUST include "calendar-schedule" as a field in the
   DAV response header from an OPTIONS request on any resource that
   supports any scheduling properties, privileges or methods.

3.1.  Example: Using OPTIONS for the Discovery of Support for CalDAV

   >> Request <<

   OPTIONS /lisa/calendar/outbox/ HTTP/1.1
   Host: cal.example.com

   >> Response <<

   HTTP/1.1 200 OK
   Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE
   Allow: MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, REPORT, ACL
   DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule
   Content-Length: 0

   In this example, the OPTIONS response indicates that the server
   supports both the calendar-access and calendar-schedule features and
   that /lisa/calendar/outbox/ can be specified as a Request-URI to the
   POST method.

4.  Scheduling Process

   The process of scheduling a meeting between different parties often
   involves a series of steps with different "actors" playing particular
   roles during the whole process.  Typically there is a meeting



Daboo, et al.             Expires May 21, 2008                  [Page 6]


Internet-Draft               CalDAV Schedule               November 2007


   "Organizer" whose role is to setup a meeting between one or more
   meeting "Attendees", and this is done by sending out invitations and
   handling responses from each Attendee.

   This process can typically be broken down into two phases.

   In the first phase the Organizer tries to determine a time for the
   meeting that ought to be the most acceptable to each Attendee.  This
   involves finding out when each Attendee is available during the
   period of time in which the meeting needs to occur (or simply finding
   a suitable time for all attendees to come together for the meeting),
   and determining when the most appropriate time is for which each
   Attendee is free.  This process is called a "free-busy" lookup.

   In the second phase the Organizer sends out invitations to each
   Attendee using the time determined from the free-busy lookup - or a
   suitable guess as to an appropriate time based on other factors if
   free-busy lookup is not feasible.  There then follows a process of
   negotiation between Organizer and Attendees regarding the invitation.
   Some Attendees may choose to attend at the original time provided by
   the Organizer, others may decline to attend at that time, but suggest
   another time, others may decline to attend at any time.  The
   Organizer needs to process each of the replies from the Attendees and
   take appropriate action to confirm the meeting, reschedule it or
   perhaps cancel it depending on those replies.

   The user "expectation" as to how a calendaring and scheduling system
   should respond in each of these two phases is somewhat different.  In
   the case of a free-busy lookup, users expect to get back results
   immediately so that they can then move on to the invitation phase as
   quickly as possible.  In the case of invitations, its expected that
   each Attendee will reply in their own time, so delays in receiving
   replies are anticipated.  Thus calendaring and scheduling systems
   should treat these two operational phases in different ways to
   accommodate the user expectations, and this specification does that.

   The scenario above covers the case of scheduling events (VEVENT
   components) between calendar users, and doing free-busy lookups
   (VFREEBUSY components).  However, iCalendar [RFC2445] also allows for
   sending VTODO and VJOURNAL components as described in iTIP [RFC2446].
   Since this specification is based on iTIP, VTODO and VJOURNAL
   components can also be used.  For the majority of the following
   discussion, scheduling of events and free-busy lookups will be
   discussed as these are the more common operations, however
   implementations MUST be able to handle all the types of iCalendar
   components specified for scheduling in iTIP.





Daboo, et al.             Expires May 21, 2008                  [Page 7]


Internet-Draft               CalDAV Schedule               November 2007


4.1.  Scheduling Collections

   This specification introduces two new collection resource types that
   are used for managing incoming and outgoing scheduling messages
   separate from other calendar object resources.

   A calendar user may have multiple calendars representing different
   spheres of activity, but scheduling requests are targeted at calendar
   user addresses, and there is no formal way to have those indicate
   which sphere of activity they might apply to.  By storing all
   incoming scheduling requests in a separate collection, clients can
   process the requests in that collection and choose what calendar the
   request belongs to and make its own arrangements to place the
   relevant calendar object in that calendar to "book" it.

   The scheduling "Outbox" collection is used for sending scheduling
   messages via a POST request targeted at the collection and containing
   the scheduling message in the body of the request.  Servers MAY save
   scheduling messages targeted at the scheduling Outbox collection as
   resources in the collection, and these can then be used to track the
   history of scheduling messages.

   The scheduling "Inbox" collection is used to receive scheduling
   messages, which are stored as calendar object resources in the
   collection.  The server deposits scheduling messages into the
   scheduling Inbox collection as the result of a scheduling request
   that targets the calendar user associated with the scheduling Inbox
   collection.  Scheduling messages could be delivered as the result of
   a POST request targeted at a scheduling Outbox collection (as
   described above) or as the result of some external process (not
   defined here).

   New WebDAV ACL [RFC3744] privileges on each of these new collections
   can be used to separately control who is able to send scheduling
   messages on behalf of a user (when applied to a scheduling Outbox
   collection), or who a user will accept scheduling messages from (when
   applied to an scheduling Inbox collection).

   Note that calendar object resources stored in the new scheduling
   collections MUST obey the restrictions for (iTIP) [RFC2446] calendar
   objects.  The restrictions for calendar object resources stored in
   regular calendar collections defined in calendar-access do not apply,
   irrespective of whether the calendar-access feature is available or
   not.







Daboo, et al.             Expires May 21, 2008                  [Page 8]


Internet-Draft               CalDAV Schedule               November 2007


4.2.  Scheduling Transactions

   The iCalendar Transport-independent Interoperability Protocol (iTIP)
   [RFC2446] outlines a model for scheduling and free-busy message
   exchanges to perform scheduling transactions.  This specification
   makes use of scheduling messages to handle scheduling transactions on
   the server by having such messages passed between different users on
   the server depending on their role in the scheduling process.

   To that end each scheduling message is modeled as a calendar object
   resource which contains the iCalendar object that conforms to the
   iTIP requirements for the type of transaction being requested.

   This specification defines the POST method, acting on an Organizer's
   scheduling Outbox collection, to trigger schedule processing by the
   server.  This can take one of two forms: for free-busy messages the
   POST request returns immediately with free busy results; for
   scheduling messages, a copy of the scheduling message specified in
   the request body is deposited into each recipient's scheduling Inbox
   collection.

   The server may support delivery of scheduling messages to other
   CalDAV servers if the client specifies a remote calendar user address
   for any recipient, but the server is not bound to support or complete
   remote delivery operations even if it advertises support for the
   "calendar-schedule" feature.  Note that remote delivery mechanisms
   are not defined in this specification.  This specification does not
   define a server-to-server or server-to-client protocol to deliver
   remote scheduling messages.  Implementations may do this in a
   proprietary way, with iMIP [RFC2447], or with iTIP bindings as yet
   unspecified.

   After the delivery is completed, CalDAV clients will see the
   scheduling message the next time they synchronize or query a
   scheduling Inbox collection.  To reply to a scheduling REQUEST, the
   client uses the POST method to send another scheduling message (this
   time a REPLY) back to the Organizer.  If the user has decided to
   accept the REQUEST, the client can create a suitable calendar object
   resource in the appropriate calendar collection for the recipient.
   The step of putting the calendar object resource in the calendar is
   left up to the client, so that the client can make appropriate
   choices about where to put the calendar object resource, and with
   what alarms, etc.  However, the server MAY be configured to
   automatically accept or reject invitations, and if the server auto-
   accepts invitations then the server is responsible for creating
   calendar object resources in a calendar collection specified by the
   user, or via some other configuration option.




Daboo, et al.             Expires May 21, 2008                  [Page 9]


Internet-Draft               CalDAV Schedule               November 2007


5.  New Resource Types and Properties

   The CalDAV scheduling extension defines the following new resource
   types for use with CalDAV.

5.1.  Scheduling Outbox Collection

   A scheduling Outbox collection is used as the target for initiating
   the processing of outgoing scheduling messages.  These may be
   requests initiated by or on behalf of the calendar user associated
   with the scheduling Outbox collection, or responses to requests
   received by the calendar user associated with the scheduling Outbox
   collection.

   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:

      <resourcetype xmlns="DAV:">
        <collection/>
        <C:schedule-outbox xmlns:C="urn:ietf:params:xml:ns:caldav"/>
      </resourcetype>

   Every non-collection resource in the scheduling Outbox collection
   MUST be a valid calendar object resource that defines a scheduling
   message (i.e. an iCalendar object that follows the iTIP semantic).
   When a client targets the POST method at a scheduling Outbox
   collection, the server MAY create a copy of the scheduling message in
   that scheduling Outbox collection, unless the request contains a
   free-busy message, in which case the server MUST NOT store a copy of
   the free-busy message.  Copies that are created serve as a record of
   outgoing scheduling messages.

   The server MAY auto-delete calendar object resources in the
   scheduling Outbox collection (e.g., after a period of time or to keep
   within a quota).

   New access control privileges can be used on the scheduling Outbox
   collection to control who is allowed to send scheduling messages on
   behalf of the calendar user associated with the scheduling Outbox
   collection.  See Section 9.1 for more details.

   When the server also supports the calendar-access feature, a



Daboo, et al.             Expires May 21, 2008                 [Page 10]


Internet-Draft               CalDAV Schedule               November 2007


   scheduling Outbox collection MUST not be a child (at any depth) of a
   calendar collection resource.

5.2.  Scheduling Inbox Collection

   A scheduling Inbox collection contains incoming scheduling messages.
   These may be requests sent by an Organizer, or replies sent by an
   Attendee in response to a request.

   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:

      <resourcetype xmlns="DAV:">
        <collection/>
        <C:schedule-inbox xmlns:C="urn:ietf:params:xml:ns:caldav"/>
      </resourcetype>

   Every non-collection resource in the scheduling Inbox collection MUST
   be a valid calendar object resource that defines a scheduling message
   (i.e. an iCalendar object that follows the iTIP semantic).  Note,
   that unlike calendar collections defined by the calendar-access
   feature, there are no restrictions on the nature of the resources
   stored (e.g., there is no need to verify that the UIDs of each
   resource are unique) beyond the restrictions of iTIP itself.  The
   removal of the UID restriction, in particular, is needed because
   multiple scheduling messages may be sent for one particular calendar
   component, and each of those will have the same UID property in the
   calendar object resource.

   New access control privileges can be set on the scheduling Inbox
   collection to control who is allowed to send scheduling messages to
   the calendar user associated with the scheduling Inbox collection.
   See Section 9.1 for more details.

   When the server also supports the calendar-access feature, a
   scheduling Inbox collection MUST not be a child (at any depth) of a
   calendar collection resource.

5.3.  Scheduling Inbox Collection Properties

   This section describes new WebDAV properties on scheduling Inbox
   collection resources.



Daboo, et al.             Expires May 21, 2008                 [Page 11]


Internet-Draft               CalDAV Schedule               November 2007


5.3.1.  CALDAV:calendar-free-busy-set Property

   Name:  calendar-free-busy-set

   Namespace:  urn:ietf:params:xml:ns:caldav

   Purpose:  Identify the calendars that contribute to the free-busy
      information for the calendar user associated with the scheduling
      Inbox collection.

   Conformance:  This property MAY be protected and SHOULD NOT be
      returned by a PROPFIND allprop request (as defined in Section 14.2
      of [RFC4918]).  Support for this property is REQUIRED.

   Description:  This property is required to allow a POST request to
      automatically determine the free busy information for each
      specified Recipient for immediate return in the response.  A
      server with a fixed set of calendars per user can make this
      property protected.  A server that allows users to create their
      own calendars SHOULD allow users to change their own property
      value.

   Definition:

      <!ELEMENT calendar-free-busy-set (DAV:href*) >

   Example:

      <C:calendar-free-busy-set xmlns:D="DAV:"
                            xmlns:C="urn:ietf:params:xml:ns:caldav">
        <D:href>/calendars/bernard/work/</D:href>
        <D:href>/calendars/bernard/home/</D:href>
        <D:href>/public/holidays/CA/</D:href>
      </C:calendar-free-busy-set>

5.3.2.  Additional Precondition for PROPPATCH

   This specification requires an additional Precondition for the
   PROPPATCH method.  The precondition is:

      (CALDAV:valid-free-busy-set): One or more resources referenced in
      a CALDAV:calendar-free-busy-set property being stored on a
      scheduling Inbox collection is invalid.  For example, a DAV:href
      element references a collection that is not a calendar collection.
      Note that server's MUST accept unmapped URIs (i.e. ones where a
      DAV:href refers to a non-existent resource) in the CALDAV:
      calendar-free-busy-set property and MUST ignore those when
      determining the free-busy information.  This ensures that clients



Daboo, et al.             Expires May 21, 2008                 [Page 12]


Internet-Draft               CalDAV Schedule               November 2007


      can add and remove calendar collections without affecting the
      validity of the CALDAV:calendar-free-busy-set property, and
      without requiring a specific order in which the client should
      carry out calendar create/delete operations and changes to the
      CALDAV:calendar-free-busy-set property.

5.4.  Calendar Object Resource Properties

   This section describes new WebDAV properties for calendar object
   resources stored in scheduling Inbox or Outbox collections.

5.4.1.  CALDAV:originator Property

   Name:  originator

   Namespace:  urn:ietf:params:xml:ns:caldav

   Purpose:  Indicates the Originator of the scheduling message
      contained in a scheduling Inbox or Outbox collection.

   Conformance:  This property MUST be protected and SHOULD NOT be
      returned by [RFC4918]).

   Description:  The CALDAV:originator property MUST be defined on
      calendar object resources stored in a scheduling Inbox or Outbox
      collection.  Typically this will be as the result of a POST
      request on a scheduling Outbox collection.  In that case, the
      value of the property MUST be the value of the Originator request
      header in the POST request.

   Definition:

      <!ELEMENT originator (DAV:href)>
      DAV:href value: a CAL-ADDRESS (see Section 4.3.3 in [RFC 2445])

   Example:

      <C:originator xmlns:D="DAV:"
                    xmlns:C="urn:ietf:params:xml:ns:caldav">
        <D:href>mailto:bernard@example.com</D:href>
      </C:originator>

5.4.2.  CALDAV:recipient Property








Daboo, et al.             Expires May 21, 2008                 [Page 13]


Internet-Draft               CalDAV Schedule               November 2007


   Name:  recipient

   Namespace:  urn:ietf:params:xml:ns:caldav

   Purpose:  On a calendar object resource contained in a scheduling
      Outbox collection, this indicates the list of Recipients to whom
      the scheduling message was sent.  On a calendar object resource in
      a scheduling Inbox collection, this indicates the recipient
      calendar user address that caused the scheduling message to be
      delivered into the scheduling Inbox collection.

   Conformance:  This property MUST be protected and SHOULD NOT be
      returned by a PROPFIND allprop request (as defined in Section 14.2
      of [RFC4918]).

   Description:  The CALDAV:recipient property MUST be defined on
      calendar object resources stored in a scheduling Outbox or Inbox
      collection.  Typically this will be as the result of a POST
      request.  In that case, for calendar object resources in a
      scheduling Outbox collection, the value of the property MUST be a
      list of calendar user addresses formed from all the addresses in
      any Recipient request headers in the POST request that caused the
      resource to be created in the collection.  For calendar object
      resources in a scheduling Inbox collection, the value of the
      property MUST be the calendar user address from the Recipient
      request header in the POST request that caused the resource to be
      created in the collection.  Typically this calendar user address
      will be one of those listed in the CALDAV:calendar-user-address-
      set (see Section 9.2.3) property for the principal that owns the
      scheduling Inbox collection.  However, it could, for example, be a
      calendar user address of a group that includes the calendar user
      associated with the scheduling Inbox collection.

   Definition:

      <!ELEMENT recipient (DAV:href+)>
      DAV:href value: a CAL-ADDRESS (see Section 4.3.3 in [RFC 2445])

   Example:

      <C:recipient xmlns:D="DAV:"
                   xmlns:C="urn:ietf:params:xml:ns:caldav">
        <D:href>mailto:cyrus@example.com</D:href>
        <D:href>mailto:lisa@example.com</D:href>
      </C:recipient>






Daboo, et al.             Expires May 21, 2008                 [Page 14]


Internet-Draft               CalDAV Schedule               November 2007


6.  Scheduling

6.1.  POST Method

   The POST method submits a scheduling or free-busy message to one or
   more recipients by targeting the request at the URI of a scheduling
   Outbox collection.  The request body of a POST method MUST contain a
   scheduling message or free-busy message (e.g., an iCalendar object
   that follows the iTIP semantic).  The resource identified by the
   Request-URI MUST be a resource collection of type CALDAV:schedule-
   outbox (Section 5.1).

   A submitted scheduling message will be delivered to the calendar user
   addresses specified in the Recipient request header.  A submitted
   free-busy message will be immediately executed and a free-busy
   response returned.

   Preconditions:

      (CALDAV:supported-collection): The Request-URI MUST identify the
      location of a scheduling Outbox collection;

      (CALDAV:supported-calendar-data): The resource submitted in the
      POST request MUST be a supported media type (i.e. text/calendar)
      for scheduling or free-busy messages;

      (CALDAV:valid-calendar-data): The resource submitted in the POST
      request MUST be valid data for the media type being specified
      (i.e. valid iCalendar object);

      (CALDAV:valid-scheduling-message): The resource submitted in the
      POST request MUST obey all restrictions specified for the POST
      request (e.g., the scheduling message follows the restrictions of
      iTIP);

      (CALDAV:originator-specified): The POST request MUST include a
      valid Originator request header specifying a single calendar user
      address of the currently authenticated user;

      (CALDAV:originator-allowed): The calendar user identified by the
      Originator request header in the POST request MUST be granted the
      CALDAV:schedule privilege or a suitable sub-privilege on the
      scheduling Outbox collection being targeted by the request;

      (CALDAV:organizer-allowed): The calendar user identified by the
      ORGANIZER property in the POST request's scheduling message MUST
      be the calendar user (or one of the calendar users) associated
      with the scheduling Outbox collection being targeted by the



Daboo, et al.             Expires May 21, 2008                 [Page 15]


Internet-Draft               CalDAV Schedule               November 2007


      request when the scheduling message is an outgoing scheduling
      message;

      (CALDAV:recipient-specified): The POST request MUST include one or
      more valid Recipient request headers specifying the calendar user
      address of users to whom the scheduling message will be delivered.

      (CALDAV:originator-reply): The calendar user identified by the
      Originator request header in the POST request MUST have previously
      received the scheduling message that is being replied to when the
      scheduling message is an incoming scheduling message;

      (CALDAV:max-resource-size): The resource submitted in the POST
      request MUST have an octet size less than or equal to the value of
      the CALDAV:max-resource-size property value [RFC4791] on the
      scheduling Outbox collection targeted by the request;

      (CALDAV:attachments-allowed): The resource submitted in the POST
      request MUST NOT contain any inline ATTACH properties;

   Postconditions: None

6.1.1.  Originator request header

   Every POST request MUST include a single Originator request header
   that specifies the calendar user address of the originator of a given
   scheduling message.  The value specified in this request header MUST
   be a calendar user address specified in the CALDAV:calendar-user-
   address-set property defined on the principal resource of the
   currently authenticated user.  Also, the currently authenticated user
   MUST have the CALDAV:schedule privilege or a suitable sub-privilege
   granted on the targeted scheduling Outbox collection.

   In the case of an outgoing scheduling message the value of the
   Originator request header will typically match that of the ORGANIZER
   property in the scheduling message, or be one of the calendar user
   addresses of the calendar user associated with the scheduling Outbox
   collection being targeted.

   In the case of an incoming scheduling message the value of the
   Originator request header will typically match that of one of the
   ATTENDEE properties in the scheduling message, or be one of the
   calendar user addresses of the calendar user associated with the
   scheduling Outbox collection being targeted.

   However, in both of the above cases, another user may be acting on
   behalf of the actual calendar user to send scheduling messages.  To
   allow for this a new privilege has been defined to allow the calendar



Daboo, et al.             Expires May 21, 2008                 [Page 16]


Internet-Draft               CalDAV Schedule               November 2007


   user associated with a scheduling Outbox collection to grant to other
   users the right to execute POST requests on that scheduling Outbox
   collection.

   The value of the Originator request header is kept in the CALDAV:
   originator property on any resources saved as a result of the
   schedule request.  This includes the copy of the scheduling message
   saved in the scheduling Outbox collection (if saved by the server),
   and scheduling messages delivered to any scheduling Inbox collection.

6.1.2.  ORGANIZER Property

   iTIP requires that every scheduling message contains an ORGANIZER
   property identifying the calendar user address of the Organizer of
   the calendar object.  To prevent 'spoofing' (forgeries) of outgoing
   scheduling messages, CalDAV servers MUST verify that the calendar
   user address identified by the ORGANIZER property in the outgoing
   scheduling message data corresponds to the principal owning the
   scheduling Outbox collection targeted by the POST request.  This MUST
   be done during the processing of the POST request.  Note that this
   check is not required for incoming scheduling messages.

6.1.3.  Recipient request header

   Every POST request MUST include one or more Recipient request
   headers.  The value of this header is a list of one or more calendar
   user addresses and corresponds to the set of calendar users who will
   have the scheduling message delivered to them.  The calendar user
   associated with of the scheduling Outbox collection being targeted by
   the POST method MUST have the CALDAV:schedule privilege or a suitable
   sub-privilege granted on the scheduling Inbox collection of each
   recipient.

   In the case of outgoing scheduling messages, typically the list of
   recipients would correspond to any ATTENDEE property values listed in
   the scheduling message data.  However, there are cases when an
   ATTENDEE property valie is not listed as a Recipient, or when a
   Recipient is not one of the ATTENDEE property values.

   For example, if the Organizer of an event wishes to attend the event
   themselves, they must do that by including ATTENDEE property with
   their calendar user address as the value, as the Organizer of an
   event does not implicitly attend.  However, the Organizer does not
   need to receive an invitation as they know their own participation
   status, so there is no need to be listed as a Recipient of the
   scheduling message.

   Alternatively, a client may have determined participation status of



Daboo, et al.             Expires May 21, 2008                 [Page 17]


Internet-Draft               CalDAV Schedule               November 2007


   some Attendee's out-of-band and has no need to send another request
   via CalDAV.

   In some cases it is handy to be able to send information about a
   meeting to someone who is not an Attendee.  In that case, there would
   be a Recipient in the request without a corresponding ATTENDEE
   property in the scheduling message data.

   Note that the recipient of a CalDAV scheduling message has no
   knowledge of who the other recipients are - they only get to see the
   ATTENDEE property information listed in the scheduling message data.
   So listing a calendar user as a Recipient and not in an ATTENDEE
   property is the equivalent of a 'Bcc' (blind-carbon-copy) operation
   in email.

   In the case of incoming scheduling messages, there would be one
   Recipient corresponding to the ORGANIZER property value listed in the
   scheduling message.

6.1.4.  Response to a POST request

   A POST request may deliver a scheduling message to one or more
   calendar users specified in the Recipient request header.  Since the
   behavior of each recipient may vary, it is useful to get response
   status information for each recipient in the overall POST response.
   This specification defines a new XML response to convey multiple
   recipient status.

   A response to a POST method that indicates status for one or more
   recipients MUST be a CALDAV:schedule-response XML element.  This MUST
   contain one or more CALDAV:response elements for each recipient, with
   each of those containing elements that indicate which recipient they
   correspond to, the scheduling status of the request for that
   recipient, any error codes and an optional description.  See
   Section 11.1.

   In the case of a free-busy request, the CALDAV:response elements can
   also contain CALDAV:calendar-data elements which contain free busy
   information (e.g., an iCalendar VFREEBUSY component) indicating the
   busy state of the corresponding recipient, assuming that the free-
   busy request for that recipient succeeded.

6.1.5.  Status Codes for use with the POST method

   The following are examples of response codes one would expect to be
   used for this method.  Note, however, that unless explicitly
   prohibited any 2/3/4/5xx series response code may be used in a
   response.



Daboo, et al.             Expires May 21, 2008                 [Page 18]


Internet-Draft               CalDAV Schedule               November 2007


      200 (OK) - The command succeeded.

      201 (Created) - The command succeeded and a new resource was
      created in the scheduling Outbox collection.

      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.

      507 (Insufficient Storage) - The server did not have sufficient
      space to record the scheduling message in a scheduling outbox
      being targeted by the POST request.































Daboo, et al.             Expires May 21, 2008                 [Page 19]


Internet-Draft               CalDAV Schedule               November 2007


6.1.6.  Example - Simple meeting invitation

   >> Request <<

   POST /lisa/calendar/outbox/ HTTP/1.1
   Host: cal.example.com
   Originator: mailto:lisa@example.com
   Recipient: mailto:bernard@example.com
   Recipient: mailto:cyrus@example.com
   Content-Type: text/calendar
   Content-Length: xxxx

   BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   METHOD:REQUEST
   BEGIN:VEVENT
   DTSTAMP:20040901T200200Z
   ORGANIZER:mailto:lisa@example.com
   DTSTART:20040902T130000Z
   DTEND:20040902T140000Z
   SUMMARY:Design meeting
   UID:34222-232@example.com
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR;CUTYPE=IND
    IVIDUAL;CN=Lisa Dusseault:mailto:lisa@example.c
    om
   ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;ROLE=RE
    Q-PARTICIPANT;CUTYPE=INDIVIDUAL;CN=Bernard Desr
    uisseaux:mailto:bernard@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;ROLE=RE
    Q-PARTICIPANT;CUTYPE=INDIVIDUAL;CN=Cyrus Daboo:
    mailto:cyrus@example.com
   END:VEVENT
   END:VCALENDAR

















Daboo, et al.             Expires May 21, 2008                 [Page 20]


Internet-Draft               CalDAV Schedule               November 2007


   >> Response <<

   HTTP/1.1 200 OK
   Date: Thu, 02 Sep 2004 16:53:32 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>mailto:bernard@example.com</C:recipient>
     <C:request-status>2.0;Success</C:request-status>
     <D:responsedescription>Delivered to recipient
     scheduling inbox</D:responsedescription>
   </C:response>
   <C:response>
     <C:recipient>mailto:cyrus@example.com</C:recipient>
     <C:request-status>2.0;Success</C:request-status>
     <D:responsedescription>Delivered to recipient
     scheduling inbox</D:responsedescription>
   </C:response>
   </C:schedule-response>


   In this example, the client requests the server to deliver a meeting
   invitation (scheduling REQUEST) to the calendar users
   mailto:bernard@example.com and mailto:cyrus@example.com.  The
   response indicates that delivery to the relevant scheduling Inbox
   collections of each recipient was accomplished successfully.

   Note that the Originator and Organizer calendar user addresses were
   both set to mailto:lisa@example.com.  In order to indicate that she
   is also attending the meeting, mailto:lisa@example.com also included
   an ATTENDEE property in the iCalendar data corresponding to her
   calendar user address, however she did not include a Recipient
   request header for that calendar user address since she already has
   here own copy of the meeting stored in a calendar collection.













Daboo, et al.             Expires May 21, 2008                 [Page 21]


Internet-Draft               CalDAV Schedule               November 2007


6.1.7.  Example - Free-Busy lookup

   >> Request <<

   POST /lisa/calendar/outbox/ HTTP/1.1
   Host: cal.example.com
   Originator: mailto:lisa@example.com
   Recipient: mailto:bernard@example.com
   Recipient: mailto:cyrus@example.com
   Content-Type: text/calendar
   Content-Length: xxxx

   BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   METHOD:REQUEST
   BEGIN:VFREEBUSY
   DTSTAMP:20040901T200200Z
   ORGANIZER:mailto:lisa@example.com
   DTSTART:20040902T000000Z
   DTEND:20040903T000000Z
   UID:34222-232@example.com
   ATTENDEE;CN=Bernard Desruisseaux:mailto:bernard@
    example.com
   ATTENDEE;CN=Cyrus Daboo:mailto:cyrus@example.com
   END:VFREEBUSY
   END:VCALENDAR


   >> Response <<

   HTTP/1.1 200 OK
   Date: Thu, 02 Sep 2004 16:53:32 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>mailto:bernard@example.com</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
   DTSTAMP:20040901T200200Z



Daboo, et al.             Expires May 21, 2008                 [Page 22]


Internet-Draft               CalDAV Schedule               November 2007


   ORGANIZER:mailto:lisa@example.com
   DTSTART:20040902T000000Z
   DTEND:20040903T000000Z
   UID:34222-232@example.com
   ATTENDEE;CN=Bernard Desruisseaux:mailto:bernard@
    example.com
   FREEBUSY;FBTYPE=BUSY-UNAVAILABLE:20040902T000000Z/
    20040902T090000Z,20040902T170000Z/20040903T000000Z
   END:VFREEBUSY
   END:VCALENDAR
   </C:calendar-data>
   </C:response>
   <C:response>
     <C:recipient>mailto:cyrus@example.com</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
   DTSTAMP:20040901T200200Z
   ORGANIZER:mailto:lisa@example.com
   DTSTART:20040902T000000Z
   DTEND:20040903T000000Z
   UID:34222-232@example.com
   ATTENDEE;CN=Cyrus Daboo:mailto:cyrus@example.com
   FREEBUSY;FBTYPE=BUSY-UNAVAILABLE:20040902T000000Z/
    20040902T090000Z,20040902T170000Z/20040903T000000Z
   FREEBUSY;FBTYPE=BUSY:20040902T120000Z/20040902T130000Z
   END:VFREEBUSY
   END:VCALENDAR
   </C:calendar-data>
   </C:response>
   </C:schedule-response>


   In this example, the client requests the server to determine the busy
   information of the calendar users mailto:bernard@example.com and
   mailto:cyrus@example.com, over the time range specified by the
   scheduling message sent in the request.  The response includes
   VFREEBUSY components for each of those calendar users with their busy
   time indicated.









Daboo, et al.             Expires May 21, 2008                 [Page 23]


Internet-Draft               CalDAV Schedule               November 2007


6.1.8.  Example - Simple task assignment

   >> Request <<

   POST /lisa/calendar/outbox/ HTTP/1.1
   Host: cal.example.com
   Originator: mailto:lisa@example.com
   Recipient: mailto:bernard@example.com
   Recipient: mailto:cyrus@example.com
   Content-Type: text/calendar
   Content-Length: xxxx

   BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   METHOD:REQUEST
   BEGIN:VTODO
   DTSTAMP:20040901T200200Z
   ORGANIZER:mailto:lisa@example.com
   DUE:20070505
   SUMMARY:Finish CalDAV schedule spec
   UID:34222-456@example.com
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR;CUTYPE=IND
    IVIDUAL;CN=Lisa Dusseault:mailto:lisa@example.c
    om
   ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;ROLE=RE
    Q-PARTICIPANT;CUTYPE=INDIVIDUAL;CN=Bernard Desr
    uisseaux:mailto:bernard@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;ROLE=RE
    Q-PARTICIPANT;CUTYPE=INDIVIDUAL;CN=Cyrus Daboo:
    mailto:cyrus@example.com
   END:VEVENT
   END:VCALENDAR


















Daboo, et al.             Expires May 21, 2008                 [Page 24]


Internet-Draft               CalDAV Schedule               November 2007


   >> Response <<

   HTTP/1.1 200 OK
   Date: Thu, 02 Sep 2004 16:53:32 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>mailto:bernard@example.com</C:recipient>
     <C:request-status>2.0;Success</C:request-status>
     <D:responsedescription>Delivered to recipient
     scheduling inbox</D:responsedescription>
   </C:response>
   <C:response>
     <C:recipient>mailto:cyrus@example.com</C:recipient>
     <C:request-status>2.0;Success</C:request-status>
     <D:responsedescription>Delivered to recipient
     scheduling inbox</D:responsedescription>
   </C:response>
   </C:schedule-response>


   In this example, the client requests the server to deliver a task
   assignment (scheduling REQUEST) to the calendar users
   mailto:bernard@example.com and mailto:cyrus@example.com.  The
   response indicates that delivery to the relevant scheduling Inbox
   collections of each recipient was accomplished successfully.

6.2.  Retrieving incoming scheduling messages

   Incoming scheduling messages will be stored in a scheduling Inbox
   collection.  As per Section 10, CalDAV calendar-access reports work
   on scheduling collections, so the client can use those to get partial
   information on scheduling messages in the scheduling inbox.

6.2.1.  Example - Retrieve incoming scheduling message

   >> Request <<

   GET /bernard/calendar/inbox/mtg456.ics HTTP/1.1
   Host: cal.example.com







Daboo, et al.             Expires May 21, 2008                 [Page 25]


Internet-Draft               CalDAV Schedule               November 2007


   >> Response <<

   HTTP/1.1 200 OK
   Date: Thu, 02 Sep 2004 17:05:23 GMT
   Content-Type: text/calendar
   Content-Length: xxxx

   BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Server//EN
   METHOD:REQUEST
   BEGIN:VEVENT
   DTSTAMP:20040901T200200Z
   CATEGORIES:APPOINTMENT
   ORGANIZER:mailto:lisa@example.com
   DTSTART:20040902T130000Z
   DTEND:20040902T140000Z
   SUMMARY:CalDAV draft review
   UID:34222-232@example.com
   ATTENDEE;PARTSTAT=ACCEPTED;ROLE=CHAIR;CUTYPE=IND
    IVIDUAL;CN=Lisa Dusseault:mailto:lisa@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIP
    ANT;CUTYPE=INDIVIDUAL;CN=Bernard Desruisseaux:
    mailto:bernard@example.com
   ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIP
    ANT;CUTYPE=INDIVIDUAL;CN=Cyrus Daboo:mailto:cyr
    us@example.com
   END:VEVENT
   END:VCALENDAR


6.3.  Acting on incoming scheduling messages

   Scheduling messages are delivered into a recipient's scheduling Inbox
   collection.  To process these messages a calendar user agent client
   needs to follow a sequence of steps to ensure good interoperability
   with other clients that may also be monitoring or processing the
   scheduling Inbox collection.

   Processing a scheduling message in a scheduling Inbox collection
   requires the client to read the message, determine the nature of the
   scheduling operation, make appropriate adjustments to the recipients
   actual calendars, and then, if required, send a response.

   In order to ensure that only one client at a time is processing
   scheduling messages in a scheduling Inbox collection, clients SHOULD
   use the WebDAV locking feature to lock the entire scheduling Inbox
   collection for the duration of its processing step.  Once a



Daboo, et al.             Expires May 21, 2008                 [Page 26]


Internet-Draft               CalDAV Schedule               November 2007


   collection is locked, other clients attempting to obtain their own
   lock will fail as the WebDAV server will return a protocol error at
   that point.

   When a scheduling message has been processed by a client it MUST
   delete that message from the scheduling Inbox collection before
   removing the WebDAV lock on the scheduling Inbox collection.  This
   ensures that other clients will not in the future attempt to process
   the scheduling message again.

   Appendix B describes some sample workflows of scheduling message
   processing.

7.  Additional iCalendar Property Parameters

   This specification defines additional property parameters to allow
   the Organizer and the Attendees to register state information about
   incoming scheduling messages to allow them to handle messages that
   arrive in an unexpected order, as per Section 2.1.5 in [RFC2446].

7.1.  Received Sequence

   Parameter Name:  RECEIVED-SEQUENCE

   Purpose:  To specify the value of the SEQUENCE iCalendar property
      that was specified in the most recent scheduling message received
      by the Organizer.

   Format Definition:  This iCalendar property parameter is defined by
      the following notation:

        received-sequenceparam = "RECEIVED-SEQUENCE" "=" integer

   Description:  This iCalendar parameter can be specified on the
      ATTENDEE iCalendar property to specify the value of the SEQUENCE
      iCalendar property that was specified in the most recent
      scheduling message received from the corresponding Attendee.

   Example:  The following is an example of this parameter on the
      ATTENDEE property:

        ATTENDEE;CN="Cyrus Daboo";PARTSTAT=ACCEPTED;RECEIVED-SEQUENCE=2;
         RECEIVED-DTSTAMP=20070214T123456Z:mailto:cyrus@example.com








Daboo, et al.             Expires May 21, 2008                 [Page 27]


Internet-Draft               CalDAV Schedule               November 2007


7.2.  Received Date/Time Stamp

   Parameter Name:  RECEIVED-DTSTAMP

   Purpose:  To specify the value of the DTSTAMP iCalendar property that
      was specified in the most recent scheduling message received by
      the Organizer or an Attendee.

   Format Definition:  This iCalendar property parameter is defined by
      the following notation:

        received-dtstampparam = "RECEIVED-DTSTAMP" "=" date-time

   Description:  This iCalendar parameter can be specified on the
      ATTENDEE and ORGANIZER iCalendar properties.  When specified on
      the ATTENDEE iCalendar property this parameter specifies the value
      of the DTSTAMP iCalendar property that was specified in the most
      recent reply scheduling message received from the corresponding
      Attendee.  When specified on the ORGANIZER iCalendar property this
      parameter specifies the value of the DTSTAMP iCalendar property
      that was specified in the most recent scheduling message received
      from the Organizer.  This parameter MUST be specified as a DATE-
      TIME value in UTC.

   Example:  The following are examples of this parameter on the
      ATTENDEE and ORGANIZER iCalendar properties:

        ATTENDEE;CN="Cyrus Daboo";PARTSTAT=ACCEPTED;RECEIVED-SEQUENCE=2;
         RECEIVED-DTSTAMP=20070214T123456Z:mailto:cyrus@example.com

        ORGANIZER;CN="Bernard Desruisseaux";RECEIVED-DTSTAMP=20070214T11
         4523Z:mailto:bernard@example.com

8.  HTTP Request Headers for CalDAV

8.1.  Originator Request Header

      Originator = "Originator" ":" absoluteURI


   The Originator request header value is a URI which specifies the
   calendar user address of the originator of the scheduling message.
   Note that the absoluteURI production is defined in RFC3986 [RFC3986].

8.2.  Recipient Request Header

      Recipient = "Recipient" ":" 1#absoluteURI




Daboo, et al.             Expires May 21, 2008                 [Page 28]


Internet-Draft               CalDAV Schedule               November 2007


   The Recipient request header value is a URI which specifies the
   calendar user address of the recipients to which the POST method
   should deliver the submitted scheduling message.  Note that the
   absoluteURI production is defined in RFC3986 [RFC3986]

9.  Scheduling Access Control

9.1.  Scheduling Privileges

   Server implementations that advertise support for the "calendar-
   schedule" feature of CalDAV MUST support WebDAV ACL [RFC3744] as well
   as the scheduling privileges defined in this section.

   The tables specified in Appendix A clarifies which scheduling methods
   (e.g., REQUEST, REPLY, etc.) are controlled by each scheduling
   privilege defined in this section.

9.1.1.  CALDAV:schedule-post Privilege

   The CALDAV:schedule-post privilege controls the use of the POST
   method to submit scheduling messages for any type of calendar
   components on the resource.  It is ignored for resources that are not
   scheduling Outbox collections.

   <!ELEMENT schedule-post EMPTY >

9.1.2.  CALDAV:schedule-post-vevent Privilege

   The CALDAV:schedule-post-vevent privilege controls the use of the
   POST method to submit scheduling messages for VEVENT calendar
   components on the resource.  It is ignored for resources that are not
   scheduling Outbox collections.

   <!ELEMENT schedule-post-vevent EMPTY >

9.1.3.  CALDAV:schedule-post-vtodo Privilege

   The CALDAV:schedule-post-vtodo privilege controls the use of the POST
   method to submit scheduling messages for VTODO calendar components on
   the resource.  It is ignored for resources that are not scheduling
   Outbox collections.

   <!ELEMENT schedule-post-vtodo EMPTY >

9.1.4.  CALDAV:schedule-post-vjournal Privilege

   The CALDAV:schedule-post-vjournal privilege controls the use of the
   POST method to submit scheduling messages for VJOURNAL calendar



Daboo, et al.             Expires May 21, 2008                 [Page 29]


Internet-Draft               CalDAV Schedule               November 2007


   components on the resource.  It is ignored for resources that are not
   scheduling Outbox collections.

   <!ELEMENT schedule-post-vjournal EMPTY >

9.1.5.  CALDAV:schedule-post-vfreebusy Privilege

   The CALDAV:schedule-post-vfreebusy privilege controls the use of the
   POST method to submit scheduling messages for VFREEBUSY calendar
   components on the resource.  It is ignored for resources that are not
   scheduling Outbox collections.

   <!ELEMENT schedule-post-vfreebusy EMPTY >

9.1.6.  CALDAV:schedule-deliver Privilege

   The CALDAV:schedule-deliver privilege controls the delivery of a
   scheduling message containing any type of calendar components coming
   from an Organizer.  It is ignored for resources that are not
   scheduling Inbox collections.

   Server implementations MUST only deliver a scheduling message coming
   from an Organizer when the Originator is granted this privilege (or
   an appropriate sub-privilege) on the scheduling Inbox collection of
   the Recipient.

   <!ELEMENT schedule-deliver EMPTY >

9.1.7.  CALDAV:schedule-deliver-vevent Privilege

   The CALDAV:schedule-deliver-vevent privilege controls the delivery of
   a scheduling message containing VEVENT calendar components coming
   from an Organizer.  It is ignored for resources that are not
   scheduling Inbox collections.

   Server implementations MUST only deliver a scheduling message for
   VEVENT calendar components coming from an Organizer when the
   Originator is granted this privilege on the scheduling Inbox
   collection of the Recipient.

   <!ELEMENT schedule-deliver-vevent EMPTY >

9.1.8.  CALDAV:schedule-deliver-vtodo Privilege

   The CALDAV:schedule-deliver-vtodo privilege controls the delivery of
   a scheduling message containing VTODO calendar components coming from
   an Organizer.  It is ignored for resources that are not scheduling
   Inbox collections.



Daboo, et al.             Expires May 21, 2008                 [Page 30]


Internet-Draft               CalDAV Schedule               November 2007


   Server implementations MUST only deliver a scheduling message for
   VTODO calendar components coming from an Organizer when the
   Originator is granted this privilege on the scheduling Inbox
   collection of the Recipient.

   <!ELEMENT schedule-deliver-vtodo EMPTY >

9.1.9.  CALDAV:schedule-deliver-vjournal Privilege

   The CALDAV:schedule-deliver-vjournal privilege controls the delivery
   of a scheduling message containing VJOURNAL calendar components
   coming from an Organizer.  It is ignored for resources that are not
   scheduling Inbox collections.

   Server implementations MUST only deliver a scheduling message for
   VJOURNAL calendar components coming from an Organizer when the
   Originator is granted this privilege on the scheduling Inbox
   collection of the Recipient.

   <!ELEMENT schedule-deliver-vjournal EMPTY >

9.1.10.  CALDAV:schedule-deliver-vfreebusy Privilege

   The CALDAV:schedule-deliver-vfreebusy privilege controls the delivery
   of a scheduling message containing VFREEBUSY calendar components
   coming from an Organizer.  It is ignored for resources that are not
   scheduling Inbox collections.

   Server implementations MUST only deliver a scheduling message for
   VFREEBUSY calendar components coming from an Organizer when the
   Originator is granted this privilege on the scheduling Inbox
   collection of the Recipient.

   Only the delivery of VFREEBUSY calendar components that specify the
   PUBLISH scheduling method is allowed in scheduling Inbox collections.
   The use of VFREEBUSY calendar components that specify the REQUEST
   scheduling method is controlled by the DAV:read and CALDAV:read-free-
   busy privileges.

   <!ELEMENT schedule-deliver-vfreebusy EMPTY >

9.1.11.  CALDAV:schedule-respond Privilege

   The CALDAV:schedule-respond privilege controls the delivery of a
   scheduling message containing any type of calendar components coming
   from an Attendee.  It is ignored for resources that are not
   scheduling Inbox collections.




Daboo, et al.             Expires May 21, 2008                 [Page 31]


Internet-Draft               CalDAV Schedule               November 2007


   Server implementations MUST only deliver a scheduling message coming
   from an Attendee when the Originator is granted this privilege (or an
   appropriate sub-privilege) on the scheduling Inbox collection of the
   Recipient.

   <!ELEMENT schedule-respond EMPTY >

9.1.12.  CALDAV:schedule-respond-vevent Privilege

   The CALDAV:schedule-respond-vevent privilege controls the delivery of
   a scheduling message containing VEVENT calendar components coming
   from an Attendee.  It is ignored for resources that are not
   scheduling Inbox collections.

   Server implementations MUST only deliver a scheduling message for
   VEVENT calendar components coming from an Attendee when the
   Originator is granted this privilege on the scheduling Inbox
   collection of the Recipient.

   <!ELEMENT schedule-deliver-vevent EMPTY >

9.1.13.  CALDAV:schedule-respond-vtodo Privilege

   The CALDAV:schedule-respond-vtodo privilege controls the delivery of
   a scheduling message containing VTODO calendar components coming from
   an Attendee.  It is ignored for resources that are not scheduling
   Inbox collections.

   Server implementations MUST only deliver a scheduling message for
   VTODO calendar components coming from an Attendee when the Originator
   is granted this privilege on the scheduling Inbox collection of the
   Recipient.

   <!ELEMENT schedule-deliver-vtodo EMPTY >

9.1.14.  CALDAV:schedule Privilege

   CALDAV:schedule is an aggregate privilege that contains the entire
   set of scheduling privileges that can be applied to the resource.  It
   is ignored for resources that are not scheduling Outbox or Inbox
   collections.

   <!ELEMENT schedule EMPTY >

9.1.15.  Aggregation of Scheduling Privileges

   Server implementations MUST aggregate the scheduling privileges as
   follows:



Daboo, et al.             Expires May 21, 2008                 [Page 32]


Internet-Draft               CalDAV Schedule               November 2007


      DAV:bind MUST contain CALDAV:schedule.

      CALDAV:schedule MUST contain CALDAV:schedule-post, CALDAV:
      schedule-deliver, and CALDAV:schedule-respond.

      CALDAV:schedule-post MUST contain CALDAV:schedule-post-vevent,
      CALDAV:schedule-post-vtodo, CALDAV:schedule-post-vjournal, and
      CALDAV:schedule-post-vfreebusy.

      CALDAV:schedule-deliver MUST contain CALDAV:schedule-deliver-
      vevent, CALDAV:schedule-deliver-vtodo, CALDAV:schedule-deliver-
      vjournal, and CALDAV:schedule-deliver-vfreebusy.

      CALDAV:schedule-respond MUST contain CALDAV:schedule-respond-
      vevent, and CALDAV:schedule-respond-vtodo.

   All the scheduling privileges MUST be non-abstract and MUST appear in
   the DAV:supported-privilege-set property of scheduling Outbox and
   Inbox collections.

9.2.  Additional Principal Properties

   This section defines new properties for WebDAV principal resources as
   defined in RFC3744 [RFC3744].  These properties are likely to be
   protected but the server MAY allow them to be written by appropriate
   users.

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

   Conformance:  This property MAY be protected and SHOULD NOT be
      returned by a PROPFIND allprop request (as defined in Section 14.2
      of [RFC4918]).

   Description:  This property is needed for a client to determine where
      the scheduling Inbox collection of the current user is located so
      that processing of scheduling messages can occur.

   Definition:

      <!ELEMENT schedule-inbox-URL (DAV:href)>




Daboo, et al.             Expires May 21, 2008                 [Page 33]


Internet-Draft               CalDAV Schedule               November 2007


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

   Conformance:  This property MAY be protected and SHOULD NOT be
      returned by a PROPFIND allprop request (as defined in Section 14.2
      of [RFC4918]).

   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.

   Definition:

      <!ELEMENT schedule-outbox-URL DAV:href>

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

   Conformance:  This property MAY be protected and SHOULD NOT be
      returned by a PROPFIND allprop request (as defined in Section 14.2
      of [RFC4918]).  Support for this property is REQUIRED.  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.

   Description:  This property is needed to map Originator and Recipient
      values in a POST request to principal resources and their
      associated scheduling Inbox and Outbox collections.  In the event
      that a user has no well defined identifier for their calendar user
      address, the URI of their principal resource can be used.

   Definition:

      <!ELEMENT calendar-user-address-set (DAV:href*)>





Daboo, et al.             Expires May 21, 2008                 [Page 34]


Internet-Draft               CalDAV Schedule               November 2007


   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>

9.2.4.  Example: Searching for calendars belonging to a user based on a
        calendar user address

   In this example, the client requests the CALDAV:calendar-home-set of
   the principal resources whose CALDAV:calendar-user-address-set
   property contains the substring "mailto:bernard@example.com".  In
   addition, the client requests the DAV:displayname of each principal
   to also be returned for the matching principals.

   The response shows that only one principal resource meets the search
   specification, "mailto:bernard@example.com".

   >> Request <<

   REPORT /users/ HTTP/1.1
   Host: cal.example.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx
   Depth: 0

   <?xml version="1.0" encoding="utf-8" ?>
   <D:principal-property-search xmlns:D="DAV:"
               xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:property-search>
       <D:prop>
         <C:calendar-user-address-set/>
       </D:prop>
       <D:match>mailto:bernard@example.com</D:match>
     </D:property-search>
     <D:prop>
       <C:calendar-home-set/>
       <D:displayname/>
     </D:prop>
   </D:principal-property-search>









Daboo, et al.             Expires May 21, 2008                 [Page 35]


Internet-Draft               CalDAV Schedule               November 2007


   >> Response <<

   HTTP/1.1 207 Multi-Status
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx

   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D="DAV:"
            xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:response>
       <D:href>/users/bernard</D:href>
       <D:propstat>
         <D:prop>
           <C:calendar-home-set>
             <D:href>/home/bernard/</D:href>
           </C:calendar-home-set>
           <D:displayname>Bernard Desruisseaux</D:displayname>
         </D:prop>
         <D:status>HTTP/1.1 200 OK</D:status>
       </D:propstat>
     </D:response>
   </D:multistatus>

9.2.5.  Example: Finding the scheduling Inbox and Outbox Collection
        belonging to the currently authenticated user

   In this example, the client requests the CALDAV:schedule-inbox-URL
   and CALDAV:schedule-outbox-URL of the currently authenticated user.

   TODO: principal-match report

10.  Reports

   When the calendar-access feature is supported in addition to
   calendar-schedule, this specification extends the CALDAV:calendar-
   query and CALDAV:calendar-multiget reports to return results for
   calendar object resources in scheduling Inbox and Outbox collections
   when the report directly targets such a collection. i.e. the Request-
   URI for a REPORT MUST be the URI of the scheduling Inbox or Outbox
   collection or of a child resource within a scheduling Inbox or Outbox
   collection.  A report run on a regular collection that includes a
   scheduling Inbox or Outbox collection as a child resource at any
   depth MUST NOT examine or return any calendar object resources from
   within any scheduling Inbox or Outbox collections.

   Note that the CALDAV:free-busy-query report is NOT supported on
   scheduling Inbox or Outbox collections when the calendar-access
   feature is also present.



Daboo, et al.             Expires May 21, 2008                 [Page 36]


Internet-Draft               CalDAV Schedule               November 2007


11.  XML Element Definitions

11.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 6.1.4.

   Definition:

       <!ELEMENT schedule-response (response*)>

11.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 6.1.4.

   Definition:

   <!ELEMENT response (recipient,
                       request-status,
                       calendar-data?,
                       DAV:error?,
                       DAV:responsedescription?)>

11.3.  CALDAV:recipient XML Element

   Name:  recipient

   Namespace:  urn:ietf:params:xml:ns:caldav

   Purpose:  The calendar user address (recipient header value) that the
      enclosing response for a POST method request is for.

   Description:  See Section 6.1.4.







Daboo, et al.             Expires May 21, 2008                 [Page 37]


Internet-Draft               CalDAV Schedule               November 2007


   Definition:


       <!ELEMENT recipient (DAV:href)>


11.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 6.1.4.

   Definition:


       <!ELEMENT request-status (#PCDATA)>


12.  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
   absolutely.  Servers and clients MUST use an HTTP connection
   protected with TLS as defined in [RFC2818] for all scheduling
   transactions.

12.1.  Verifying scheduling requests

   When handling a POST request on a scheduling Outbox collection:

      Servers MUST verify that the principal associated with the
      calendar user address specified in the Originator request header
      in the request matches the currently authenticated user.

      Servers MUST verify that the currently authenticated user has the
      CALDAV:schedule privilege or a suitable sub-privilege on the
      scheduling Outbox collection targeted by the request.

      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



Daboo, et al.             Expires May 21, 2008                 [Page 38]


Internet-Draft               CalDAV Schedule               November 2007


      collection targeted by the request.

      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 has the CALDAV:schedule
      privilege or a suitable sub-privilege on all of the scheduling
      Inbox collections for the principals associated with all of the
      calendar user addresses specified in any Recipient request headers
      in the request.

      The CALDAV:calendar-free-busy-set property on principal resources
      SHOULD only be accessible when that principal is authenticated
      (i.e., the property SHOULD be hidden from other principals).

13.  IANA Consideration

   This specification registers two new headers for use with HTTP as per
   [RFC3864].

13.1.  Originator Header Registration

   Header field name: Originator

   Applicable protocol: http

   Status: standard

   Author/Change controller: IETF

   Specification document(s): this specification

   Related information: none

13.2.  Recipient Header Registration

   Header field name: Recipient

   Applicable protocol: http

   Status: standard

   Author/Change controller: IETF

   Specification document(s): this specification

   Related information: none





Daboo, et al.             Expires May 21, 2008                 [Page 39]


Internet-Draft               CalDAV Schedule               November 2007


14.  Acknowledgements

   The authors would like to thank the following individuals for
   contributing their ideas and support for writing this specification:
   Mike Douglass, Julian F. Reschke, Wilfredo Sanchez Vega, Simon
   Vaillancourt, and Jim Whitehead.

   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.

15.  References

15.1.  Normative References

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

   [RFC2246]               Dierks, T. and C. Allen, "The TLS Protocol
                           Version 1.0", RFC 2246, January 1999.

   [RFC2445]               Dawson, F. and Stenerson, D., "Internet
                           Calendaring and Scheduling Core Object
                           Specification (iCalendar)", RFC 2445,
                           November 1998.

   [RFC2446]               Silverberg, S., Mansour, S., Dawson, F., and
                           R. Hopson, "iCalendar Transport-Independent
                           Interoperability Protocol (iTIP) Scheduling
                           Events, BusyTime, To-dos and Journal
                           Entries", RFC 2446, November 1998.

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

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

   [RFC3986]               Berners-Lee, T., Fielding, R., and L.
                           Masinter, "Uniform Resource Identifier (URI):



Daboo, et al.             Expires May 21, 2008                 [Page 40]


Internet-Draft               CalDAV Schedule               November 2007


                           Generic Syntax", STD 66, RFC 3986,
                           January 2005.

   [RFC4346]               Dierks, T. and E. Rescorla, "The Transport
                           Layer Security (TLS) Protocol Version 1.1",
                           RFC 4346, April 2006.

   [RFC4791]               Daboo, C., Desruisseaux, B., and L.
                           Dusseault, "Calendaring Extensions to WebDAV
                           (CalDAV)", RFC 4791, March 2007.

   [RFC4918]               Dusseault, L., "HTTP Extensions for Web
                           Distributed Authoring and Versioning
                           (WebDAV)", RFC 4918, June 2007.

   [W3C.REC-xml-20060816]  Bray, T., Paoli, J., Sperberg-McQueen, C.,
                           Yergeau, F., and E. Maler, "Extensible Markup
                           Language (XML) 1.0 (Fourth Edition)", World
                           Wide Web Consortium Recommendation REC-xml-
                           20060816, August 2006,
                           <http://www.w3.org/TR/2006/REC-xml-20060816>.

15.2.  Informative References

   [RFC2447]               Dawson, F., Mansour, S., and S. Silverberg,
                           "iCalendar Message-Based Interoperability
                           Protocol (iMIP)", RFC 2447, November 1998.

   [RFC3864]               Klyne, G., Nottingham, M., and J. Mogul,
                           "Registration Procedures for Message Header
                           Fields", BCP 90, RFC 3864, September 2004.

Appendix A.  Scheduling Privileges Summary

A.1.  Scheduling Inbox Privileges

   The following tables specify which scheduling privileges can grant
   the right to a user to have a scheduling message of a specific
   calendar component type with a specific scheduling method be
   delivered in the scheduling Inbox of another user.











Daboo, et al.             Expires May 21, 2008                 [Page 41]


Internet-Draft               CalDAV Schedule               November 2007


                                     +---------------------------------+
                                     |   Scheduling METHOD for VEVENT  |
                                     +---+---+---+---+---+---+---+-----+
                                     | P | R | R | A | C | R | C | D C |
                                     | U | E | E | D | A | E | O | E O |
                                     | B | Q | P | D | N | F | U | C U |
                                     | L | U | L |   | C | R | N | L N |
                                     | I | E | Y |   | E | E | T | I T |
   +--------------------------------+| S | S |   |   | L | S | E | N E |
   | Scheduling Inbox Privilege     || H | T |   |   |   | H | R | E R |
   +================================++===+===+===+===+===+===+===+=====+
   | schedule                       || * | * | * | * | * | * | * |  *  |
   |   schedule-deliver             || * | * |   | * | * |   |   |  *  |
   |     schedule-deliver-vevent    || * | * |   | * | * |   |   |  *  |
   |     schedule-deliver-vtodo     ||   |   |   |   |   |   |   |     |
   |     schedule-deliver-vjournal  ||   |   |   |   |   |   |   |     |
   |     schedule-deliver-vfreebusy ||   |   |   |   |   |   |   |     |
   |   schedule-respond             ||   |   | * |   |   | * | * |     |
   |     schedule-respond-vevent    ||   |   | * |   |   | * | * |     |
   |     schedule-respond-vtodo     ||   |   |   |   |   |   |   |     |
   +--------------------------------++---+---+---+---+---+---+---+-----+


                                     +---------------------------------+
                                     |   Scheduling METHOD for VTODO   |
                                     +---+---+---+---+---+---+---+-----+
                                     | P | R | R | A | C | R | C | D C |
                                     | U | E | E | D | A | E | O | E O |
                                     | B | Q | P | D | N | F | U | C U |
                                     | L | U | L |   | C | R | N | L N |
                                     | I | E | Y |   | E | E | T | I T |
   +--------------------------------+| S | S |   |   | L | S | E | N E |
   | Scheduling Inbox Privilege     || H | T |   |   |   | H | R | E R |
   +================================++===+===+===+===+===+===+===+=====+
   | schedule                       || * | * | * | * | * | * | * |  *  |
   |   schedule-deliver             || * | * |   | * | * |   |   |  *  |
   |     schedule-deliver-vevent    ||   |   |   |   |   |   |   |     |
   |     schedule-deliver-vtodo     || * | * |   | * | * |   |   |  *  |
   |     schedule-deliver-vjournal  ||   |   |   |   |   |   |   |     |
   |     schedule-deliver-vfreebusy ||   |   |   |   |   |   |   |     |
   |   schedule-respond             ||   |   | * |   |   | * | * |     |
   |     schedule-respond-vevent    ||   |   |   |   |   |   |   |     |
   |     schedule-respond-vtodo     ||   |   | * |   |   | * | * |     |
   +--------------------------------++---+---+---+---+---+---+---+-----+







Daboo, et al.             Expires May 21, 2008                 [Page 42]


Internet-Draft               CalDAV Schedule               November 2007


                                     +-----------------------+
                                     | Scheduling METHOD for |
                                     |        VJOURNAL       |
                                     +-------+-------+-------+
                                     |   P   |   A   |   C   |
                                     |   U   |   D   |   A   |
                                     |   B   |   D   |   N   |
                                     |   L   |       |   C   |
                                     |   I   |       |   E   |
   +--------------------------------+|   S   |       |   L   |
   | Scheduling Inbox Privilege     ||   H   |       |       |
   +================================++=======+=======+=======+
   | schedule                       ||   *   |   *   |   *   |
   |  schedule-deliver              ||   *   |   *   |   *   |
   |    schedule-deliver-vevent     ||       |       |       |
   |    schedule-deliver-vtodo      ||       |       |       |
   |    schedule-deliver-vjournal   ||   *   |   *   |   *   |
   |    schedule-deliver-vfreebusy  ||       |       |       |
   |  schedule-respond              ||       |       |       |
   |    schedule-respond-vevent     ||       |       |       |
   |    schedule-respond-vtodo      ||       |       |       |
   +--------------------------------++-------+-------+-------+


                                     +-----------------------+
                                     | Scheduling METHOD for |
                                     |       VFREEBUSY       |
                                     +-------+-------+-------+
                                     |   P   |   R   |   R   |
                                     |   U   |   E   |   E   |
                                     |   B   |   Q   |   P   |
                                     |   L   |   U   |   L   |
                                     |   I   |   E   |   Y   |
   +--------------------------------+|   S   |   S   |       |
   | Scheduling Inbox Privilege     ||   H   |   T   |       |
   +================================++=======+=======+=======+
   | schedule                       ||   *   |   *   | xxxxx |
   |  schedule-deliver              ||   *   |       | xxxxx |
   |    schedule-deliver-vevent     ||       |       | xxxxx |
   |    schedule-deliver-vtodo      ||       |       | xxxxx |
   |    schedule-deliver-vjournal   ||       |       | xxxxx |
   |    schedule-deliver-vfreebusy  ||   *   |       | xxxxx |
   |  schedule-respond              ||       |       | xxxxx |
   |    schedule-respond-vevent     ||       |       | xxxxx |
   |    schedule-respond-vtodo      ||       |       | xxxxx |
   +--------------------------------++-------+-------+-------+





Daboo, et al.             Expires May 21, 2008                 [Page 43]


Internet-Draft               CalDAV Schedule               November 2007


A.2.  Scheduling Outbox Privileges

   The following tables specify which scheduling privileges can grant
   the right to a user to submit, with the POST request method, a
   scheduling message of a specific calendar component type with a
   specific scheduling method on a scheduling Outbox collection.

                                     +---------------------------------+
                                     |   Scheduling METHOD for VEVENT  |
                                     +---+---+---+---+---+---+---+-----+
                                     | P | R | R | A | C | R | C | D C |
                                     | U | E | E | D | A | E | O | E O |
                                     | B | Q | P | D | N | F | U | C U |
                                     | L | U | L |   | C | R | N | L N |
                                     | I | E | Y |   | E | E | T | I T |
   +--------------------------------+| S | S |   |   | L | S | E | N E |
   | Scheduling Outbox Privilege    || H | T |   |   |   | H | R | E R |
   +================================++===+===+===+===+===+===+===+=====+
   | schedule                       || * | * | * | * | * | * | * |  *  |
   |   schedule-post                || * | * | * | * | * | * | * |  *  |
   |     schedule-post-vevent       || * | * | * | * | * | * | * |  *  |
   |     schedule-post-vtodo        ||   |   |   |   |   |   |   |     |
   |     schedule-post-vjournal     ||   |   |   |   |   |   |   |     |
   |     schedule-post-vfreebusy    ||   |   |   |   |   |   |   |     |
   +--------------------------------++---+---+---+---+---+---+---+-----+


                                     +---------------------------------+
                                     |   Scheduling METHOD for VTODO   |
                                     +---+---+---+---+---+---+---+-----+
                                     | P | R | R | A | C | R | C | D C |
                                     | U | E | E | D | A | E | O | E O |
                                     | B | Q | P | D | N | F | U | C U |
                                     | L | U | L |   | C | R | N | L N |
                                     | I | E | Y |   | E | E | T | I T |
   +--------------------------------+| S | S |   |   | L | S | E | N E |
   | Scheduling Outbox Privilege    || H | T |   |   |   | H | R | E R |
   +================================++===+===+===+===+===+===+===+=====+
   | schedule                       || * | * | * | * | * | * | * |  *  |
   |   schedule-post                || * | * | * | * | * | * | * |  *  |
   |     schedule-post-vevent       ||   |   |   |   |   |   |   |     |
   |     schedule-post-vtodo        || * | * | * | * | * | * | * |  *  |
   |     schedule-post-vjournal     ||   |   |   |   |   |   |   |     |
   |     schedule-post-vfreebusy    ||   |   |   |   |   |   |   |     |
   +--------------------------------++---+---+---+---+---+---+---+-----+






Daboo, et al.             Expires May 21, 2008                 [Page 44]


Internet-Draft               CalDAV Schedule               November 2007


                                     +-----------------------+
                                     | Scheduling METHOD for |
                                     |        VJOURNAL       |
                                     +-------+-------+-------+
                                     |   P   |   A   |   C   |
                                     |   U   |   D   |   A   |
                                     |   B   |   D   |   N   |
                                     |   L   |       |   C   |
                                     |   I   |       |   E   |
   +--------------------------------+|   S   |       |   L   |
   | Scheduling Outbox Privilege    ||   H   |       |       |
   +================================++=======+=======+=======+
   | schedule                       ||   *   |   *   |   *   |
   |  schedule-post                 ||   *   |   *   |   *   |
   |    schedule-post-vevent        ||       |       |       |
   |    schedule-post-vtodo         ||       |       |       |
   |    schedule-post-vjournal      ||   *   |   *   |   *   |
   |    schedule-post-vfreebusy     ||       |       |       |
   +--------------------------------++-------+-------+-------+


                                     +-----------------------+
                                     | Scheduling METHOD for |
                                     |       VFREEBUSY       |
                                     +-------+-------+-------+
                                     |   P   |   R   |   R   |
                                     |   U   |   E   |   E   |
                                     |   B   |   Q   |   P   |
                                     |   L   |   U   |   L   |
                                     |   I   |   E   |   Y   |
   +--------------------------------+|   S   |   S   |       |
   | Scheduling Outbox Privilege    ||   H   |   T   |       |
   +================================++=======+=======+=======+
   | schedule                       ||   *   |   *   | xxxxx |
   |  schedule-post                 ||   *   |   *   | xxxxx |
   |    schedule-post-vevent        ||       |       | xxxxx |
   |    schedule-post-vtodo         ||       |       | xxxxx |
   |    schedule-post-vjournal      ||       |       | xxxxx |
   |    schedule-post-vfreebusy     ||   *   |   *   | xxxxx |
   +--------------------------------++-------+-------+-------+

Appendix B.  Example Scheduling Workflow

   This section describes some example scheduling workflows that give a
   general idea of how scheduling is carried out between CalDAV clients
   and servers from the perspective of meeting organizers and attendees.





Daboo, et al.             Expires May 21, 2008                 [Page 45]


Internet-Draft               CalDAV Schedule               November 2007


B.1.  Inviting Attendees to an Event

   1.  Bernard creates a new event with Lisa, Cyrus and himself as
       attendees and decides to send Lisa and Cyrus an invitation to
       this event.

   2.  Bernard's CUA creates a new event in a calendar collection and
       submits a scheduling request message through Bernard's scheduling
       Outbox collection to cause the server to deliver the event
       invitation to Lisa and Cyrus.

   3.  Lisa and Cyrus will receive the scheduling request message in
       their scheduling Inbox collection.

B.2.  Receiving and Replying to an Event Invitation

   1.  Cyrus' CUA polls his scheduling Inbox collection for new
       scheduling messages.  When the new scheduling request message
       from Bernard is found, the CUA alerts Cyrus.

   2.  When Cyrus is ready to process the new scheduling request
       message, Cyrus' CUA locks the scheduling Inbox collection and
       retrieves the new scheduling request message.  The CUA then
       searches Cyrus' calendar collections to find an event with the
       same UID property value as the one specified in the scheduling
       request message.  Here, no event is found since the scheduling
       request message is for a new event.

   3.  Cyrus is presented with the new scheduling request message and
       decides to accept the event invitation and to reply to Bernard.

   4.  Cyrus' CUA creates a new event in a calendar collection for the
       event invitation that was received.  The created event specifies
       Cyrus' updated PARTSTAT parameter on his ATTENDEE property, as
       well as the RECEIVED-DTSTAMP parameter on the ORGANIZER property.

   5.  Cyrus' CUA submits a scheduling reply message through Cyrus'
       scheduling Outbox collection to cause the server to deliver the
       reply to Bernard.

   6.  Cyrus' CUA deletes the scheduling request message contained in
       Cyrus' scheduling Inbox collection and unlocks the collection.

B.3.  Receiving a Reply to an Event Invitation

   1.  Bernard's CUA polls his scheduling Inbox collection to retrieve
       the list of scheduling messages currently contained in the
       collection.  When the new scheduling reply message is found,



Daboo, et al.             Expires May 21, 2008                 [Page 46]


Internet-Draft               CalDAV Schedule               November 2007


       Bernard's CUA locks the scheduling Inbox collection and retrieves
       the new scheduling reply message.  The CUA will then search
       Bernard's calendar collections to find an event with the same UID
       property value as the one specified in the scheduling reply
       message.  The original event created by Bernard will be found.

   2.  Bernard's CUA updates the PARTSTAT, RECEIVED-DTSTAMP, and
       RECEIVED-SEQUENCE parameters of Cyrus' ATTENDEE property in the
       original event that was found.

   3.  Bernard's CUA deletes the scheduling reply message contained in
       the Bernard's scheduling Inbox collection and unlocks the
       collection.

B.4.  Rescheduling an existing event

   1.  Bernard reschedules the event with Lisa and Cyrus and decides to
       send an updated event invitation to Lisa and Cyrus.

   2.  Bernard's CUA updates the event in the calendar collection and
       submits a new scheduling request message through Bernard's
       scheduling Outbox collection to cause the server to deliver the
       event invitation to Lisa and Cyrus.

   3.  Lisa and Cyrus will receive the scheduling request message in
       their scheduling Inbox collection.

B.5.  Receiving an Updated Event Invitation

   1.  Lisa's CUA polls her scheduling Inbox collection for new
       scheduling messages.

   2.  When the new scheduling request message from Bernard is found,
       Lisa's CUA locks the scheduling Inbox collection and retrieves
       the new scheduling request message.  The CUA will then search
       Lisa's calendar collections to find an event with the same UID
       property value as the one specified in the scheduling request
       message.  The event previously created in Lisa's calendar
       collection will be found.

   3.  Lisa's CUA automatically updates the event with the new
       information provided in the new scheduling request message and
       also updates the PARTSTAT parameter of Lisa's ATTENDEE property
       to NEEDS-ACTION, as well as the value of the RECEIVED-DTSTAMP
       parameter on the ORGANIZER property to match the value of the
       DTSTAMP property specified in the received scheduling request
       message.




Daboo, et al.             Expires May 21, 2008                 [Page 47]


Internet-Draft               CalDAV Schedule               November 2007


   4.  Lisa's CUA deletes the scheduling request messages contained in
       Lisa's scheduling Inbox collection and unlocks the collection.

   5.  At some later point, Lisa decides to accept the updated event.
       Lisa's CUA updates the PARTSTAT parameter on her ATTENDEE
       property for the event stored in her calendar collection.

   6.  Lisa's CUA submits a scheduling reply message through Lisa's
       scheduling Outbox collection to cause the server to deliver the
       reply to Bernard.

Appendix C.  Changes

C.1.  Changes in -04

   a.  Updated to rfc3986 reference.

   b.  Added Appendix with example workflow.

   c.  Change calendar-home-URL to calendar-home-set.

   d.  Updated to RFC 4791 reference.

   e.  Updated to RFC 4918 reference.

   f.  Changed title.

   g.  Added text to explain that VTODO and VJOURNAL are also valid
       scheduling components in CalDAV.

   h.  Changed order of Inbox and Outbox definition in section 5.

   i.  Added CALDAV:valid-free-busy-set pre-condition.

   j.  Re-worked descriptions of originator, recipient request headers
       to distinguish between iTIP outgoing and incoming modes.

   k.  Removed 502 status code description for POST.

   l.  Modified 507 status code description for POST to apply to Outbox
       storage only.

   m.  Added example of task assignment.

   n.  Use application/xml instead of text/xml.

   o.  Inbox and Outbox cannot be contained within a calendar
       collection.



Daboo, et al.             Expires May 21, 2008                 [Page 48]


Internet-Draft               CalDAV Schedule               November 2007


   p.  Added an appendix summarizing scheduling privileges.

   q.  Added registration for the new HTTP headers.

   r.  Redefined the set of scheduling privileges.

   s.  Minor terminology/formatting tweaks.

C.2.  Changes in -03

   a.  Added free-busy example.

   b.  Better abstract.

   c.  Requiring DAV level 2 for locking of Inbox.

   d.  Do not require servers to actually save Outbox requests.

   e.  Removed CALDAV:schedule-state Property.  Clients now must remove
       inbox items after processing them, using locking etc to prevent
       race conditions.

   f.  Switched back to 2518 reference from 2518bis.

   g.  Updated to more recent XML reference.

   h.  Revised required features section to better match caldav-access.

C.3.  Changes in -02

   a.  Split schedule privilege into three sub-privileges.

   b.  Made support for caldav-access optional.

   c.  Changed SCHEDULE method to POST.

C.4.  Changes in -01

   a.  Updated to latest references including 2518bis.

   b.  Added principal property CALDAV:calendar-user-address-set.

   c.  Major changes to schedule method, including addition of
       preconditions.

   d.  New principal properties added.





Daboo, et al.             Expires May 21, 2008                 [Page 49]


Internet-Draft               CalDAV Schedule               November 2007


   e.  Text related to alternative ways of doing scheduling (some
       speculative) removed.

   f.  Added Security Considerations text.

   g.  Added IANA consideration text.

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/


   Lisa Dusseault
   CommerceNet
   169 University Ave.
   Palo Alto, CA  94301
   USA

   EMail: ldusseault@commerce.net
   URI:   http://commerce.net/













Daboo, et al.             Expires May 21, 2008                 [Page 50]


Internet-Draft               CalDAV Schedule               November 2007


Full Copyright Statement

   Copyright (C) The IETF Trust (2007).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.

Acknowledgement

   Funding for the RFC Editor function is provided by the IETF
   Administrative Support Activity (IASA).







Daboo, et al.             Expires May 21, 2008                 [Page 51]