12. IANA Considerations
12.1. Message Header Field Registrations
The message header fields below have been added to the Permanent Message Header Field Registry (see [RFC3864]).12.1.1. Schedule-Reply
Header field name: Schedule-Reply Applicable protocol: http Status: standard Author/Change controller: IETF Specification document(s): this specification (Section 8.1) Related information: none12.1.2. Schedule-Tag
Header field name: Schedule-Tag Applicable protocol: http Status: standard Author/Change controller: IETF Specification document(s): this specification (Section 8.2) Related information: none12.1.3. If-Schedule-Tag-Match
Header field name: If-Schedule-Tag-Match Applicable protocol: http Status: standard
Author/Change controller: IETF Specification document(s): this specification (Section 8.3) Related information: none12.2. iCalendar Property Parameter Registrations
The following iCalendar property parameter names have been added to the iCalendar Parameters Registry defined in Section 8.3.3 of [RFC5545]. +---------------------+---------+-----------------------+ | Parameter | Status | Reference | +---------------------+---------+-----------------------+ | SCHEDULE-AGENT | Current | RFC 6638, Section 7.1 | | | | | | SCHEDULE-STATUS | Current | RFC 6638, Section 7.3 | | | | | | SCHEDULE-FORCE-SEND | Current | RFC 6638, Section 7.2 | +---------------------+---------+-----------------------+12.3. iCalendar REQUEST-STATUS Value Registrations
The following iCalendar "REQUEST-STATUS" values have been added to the iCalendar REQUEST-STATUS Value Registry defined in Section 7.3 of [RFC5546]. +-------------+---------+---------------------------+ | Status Code | Status | Reference | +-------------+---------+---------------------------+ | 1.0 | Current | RFC 6638, Section 3.2.9.1 | | | | | | 1.1 | Current | RFC 6638, Section 3.2.9.2 | | | | | | 1.2 | Current | RFC 6638, Section 3.2.9.3 | +-------------+---------+---------------------------+12.4. Additional iCalendar Elements Registries
Per this specification, two new IANA registries for iCalendar elements have been added. Additional codes MAY be used, provided the process described in Section 8.2.1 of [RFC5545] is used to register them.
12.4.1. Schedule Agent Values Registry
The following table has been used to initialize the Schedule Agent Values Registry. +----------------+---------+-----------------------+ | Schedule Agent | Status | Reference | +----------------+---------+-----------------------+ | SERVER | Current | RFC 6638, Section 7.1 | | | | | | CLIENT | Current | RFC 6638, Section 7.1 | | | | | | NONE | Current | RFC 6638, Section 7.1 | +----------------+---------+-----------------------+12.4.2. Schedule Force Send Values Registry
The following table has been used to initialize the Schedule Force Send Values Registry. +---------------------+---------+-----------------------+ | Schedule Force Send | Status | Reference | +---------------------+---------+-----------------------+ | REQUEST | Current | RFC 6638, Section 7.2 | | | | | | REPLY | Current | RFC 6638, Section 7.2 | +---------------------+---------+-----------------------+13. Acknowledgements
The authors would like to thank the following individuals for contributing their ideas and support for writing this specification: Mike Douglass, Lisa Dusseault, Red Dutta, Jacob Farkas, Jeffrey Harris, Helge Hess, Eliot Lear, Andrew McMillan, Alexey Melnikov, Arnaud Quillaud, Julian F. Reschke, Wilfredo Sanchez Vega, and Simon Vaillancourt. The authors would also like to thank the Calendaring and Scheduling Consortium for advice with this specification, and for organizing interoperability testing events to help refine it.
14. References
14.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., and L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999. [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol", RFC 3744, May 2004. [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration Procedures for Message Header Fields", BCP 90, RFC 3864, September 2004. [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault, "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791, March 2007. [RFC4918] Dusseault, L., Ed., "HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)", RFC 4918, June 2007. [RFC5234] Crocker, D., Ed., and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", STD 68, RFC 5234, January 2008. [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and Scheduling Core Object Specification (iCalendar)", RFC 5545, September 2009. [RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent Interoperability Protocol (iTIP)", RFC 5546, December 2009.
[RFC6125] Saint-Andre, P. and J. Hodges, "Representation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509 (PKIX) Certificates in the Context of Transport Layer Security (TLS)", RFC 6125, March 2011. [W3C.REC-xml-20081126] Bray, T., Paoli, J., Sperberg-McQueen, C., Maler, E., and F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth Edition)", World Wide Web Consortium Recommendation REC-xml-20081126, November 2008, <http://www.w3.org/TR/2008/REC-xml-20081126>.14.2. Informative References
[RFC6047] Melnikov, A., Ed., "iCalendar Message-Based Interoperability Protocol (iMIP)", RFC 6047, December 2010.
Appendix A. Scheduling Privileges Summary
A.1. Scheduling Inbox Privileges
The following tables specify which scheduling privileges grant the right to a calendar user to deliver a scheduling message to the scheduling Inbox collection of another calendar user. The appropriate behavior depends on the calendar component type as well as the scheduling "METHOD" specified in the scheduling message. +--------------------------------+ | METHOD for VEVENT and VTODO | +-----------------------------+---------+-------+-----+--------+ | Scheduling Inbox Privilege | REQUEST | REPLY | ADD | CANCEL | +-----------------------------+---------+-------+-----+--------+ | schedule-deliver | * | * | * | * | | schedule-deliver-invite | * | | * | * | | schedule-deliver-reply | | * | | | | schedule-query-freebusy | | | | | +-----------------------------+---------+-------+-----+--------+ +----------------------+ | METHOD for VFREEBUSY | +-----------------------------+----------------------+ | Scheduling Inbox Privilege | REQUEST | +-----------------------------+----------------------+ | schedule-deliver | * | | schedule-deliver-invite | | | schedule-deliver-reply | | | schedule-query-freebusy | * | +-----------------------------+----------------------+
A.2. Scheduling Outbox Privileges
The following tables specify which scheduling privileges grant the right to a calendar user to perform busy time information requests and to submit scheduling messages to other calendar users as the result of a scheduling operation. The appropriate behavior depends on the calendar component type as well as the scheduling "METHOD" specified in the scheduling message. +--------------------------------+ | METHOD for VEVENT and VTODO | +-----------------------------+---------+-------+-----+--------+ | Scheduling Outbox Privilege | REQUEST | REPLY | ADD | CANCEL | +-----------------------------+---------+-------+-----+--------+ | schedule-send | * | * | * | * | | schedule-send-invite | * | | * | * | | schedule-send-reply | | * | | | | schedule-send-freebusy | | | | | +-----------------------------+---------+-------+-----+--------+ +----------------------+ | METHOD for VFREEBUSY | +-----------------------------+----------------------+ | Scheduling Outbox Privilege | REQUEST | +-----------------------------+----------------------+ | schedule-send | * | | schedule-send-invite | | | schedule-send-reply | | | schedule-send-freebusy | * | +-----------------------------+----------------------+Appendix B. Example Scheduling Operations
This section describes some example scheduling operations that give a general idea of how scheduling is carried out between CalDAV clients and servers from the perspective of meeting "Organizers" and "Attendees". The server is assumed to be hosted in the "example.com" domain, and users whose email addresses are at the "example.com" domain are assumed to be hosted by the server. In addition, the email addresses in the "example.net" domain are also valid email addresses for calendar users hosted by the server. Calendar users with an email address at the "example.org" domain are assumed to not be hosted by the server.
In the following examples, the requests and responses are incomplete and are only for illustrative purposes. In particular, HTTP authentication headers and behaviors are not shown, even though they are required in normal operation.B.1. Example: "Organizer" Inviting Multiple "Attendees"
In the following example, Cyrus invites Wilfredo, Bernard, and Mike to a single instance event by simply creating a new scheduling object resource in one of his calendar collections by using the PUT method. >> Request << PUT /home/cyrus/calendars/work/9263504FD3AD.ics HTTP/1.1 Host: cal.example.com Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx If-None-Match: * BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090602T185254Z DTSTART:20090602T160000Z DTEND:20090602T170000Z TRANSP:OPAQUE SUMMARY:Lunch ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:cyrus@example.com ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT =NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@ example.com ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT= NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex ample.net ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A CTION;RSVP=TRUE:mailto:mike@example.org END:VEVENT END:VCALENDAR >> Response << HTTP/1.1 201 Created Content-Length: 0
Date: Tue, 02 Jun 2009 18:52:54 GMT Last-Modified: Tue, 02 Jun 2009 18:52:54 GMT ETag: "d85561cfe74a4e785eb4639451b434fb" Schedule-Tag: "488177c8-2ea7-4176-a6cb-fab8cfccdea2" Once the event creation has been completed, Cyrus's client will retrieve the event back from the server to get the schedule status of each "Attendee", as well as record the Schedule-Tag value for future use. In this example, the server reports that a scheduling message was delivered to Wilfredo, a scheduling message is still pending for Bernard, and the server was unable to deliver a scheduling message to Mike. >> Request << GET /home/cyrus/calendars/work/9263504FD3AD.ics HTTP/1.1 Host: cal.example.com >> Response << HTTP/1.1 200 OK Date: Tue, 02 Jun 2009 18:52:58 GMT Last-Modified: Tue, 02 Jun 2009 18:52:58 GMT ETag: "eb897deabc8939589da116714bc99265" Schedule-Tag: "488177c8-2ea7-4176-a6cb-fab8cfccdea2" Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Server//EN BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090602T185300Z DTSTART:20090602T160000Z DTEND:20090602T170000Z TRANSP:OPAQUE SUMMARY:Lunch ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:cyrus@example.com ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT =NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS= 1.2:mailto:wilfredo@e xample.com
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT= NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS= 1.0:mailto:bernard@example.net ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A CTION;RSVP=TRUE;SCHEDULE-STATUS=3.7:mailto:mike@example.org END:VEVENT END:VCALENDARB.2. Example: "Attendee" Receiving an Invitation
In the following example, Wilfredo's client retrieves and deletes the new scheduling message that appeared in his scheduling Inbox collection after the server automatically processed it and created a new scheduling object resource in his default calendar collection. >> Request << GET /home/wilfredo/calendars/inbox/27d93fc0a58c.ics HTTP/1.1 Host: cal.example.com >> Response << HTTP/1.1 200 OK Date: Tue, 02 Jun 2009 18:59:58 GMT Last-Modified: Tue, 02 Jun 2009 18:59:58 GMT ETag: "da116714bc9926c89395895eb897deab" Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Server//EN METHOD:REQUEST BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090602T185254Z DTSTART:20090602T160000Z DTEND:20090602T170000Z TRANSP:OPAQUE SUMMARY:Lunch ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:cyrus@example.com ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT =NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@ example.com
ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT= NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex ample.net ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A CTION;RSVP=TRUE:mailto:mike@example.org END:VEVENT END:VCALENDAR >> Request << DELETE /home/wilfredo/calendars/inbox/27d93fc0a58c.ics HTTP/1.1 Host: cal.example.com >> Response << HTTP/1.1 204 No Content Date: Tue, 02 Jun 2009 20:40:36 GMTB.3. Example: "Attendee" Replying to an Invitation
In the following example, Wilfredo accepts Cyrus's invitation and sets an alarm reminder on the event. It uses the If-Schedule-Tag- Match precondition behavior to ensure it does not overwrite any significant changes from the "Organizer" that might have occurred after it retrieved the initial resource data. >> Request << PUT /home/wilfredo/calendars/work/BB64861C2228.ics HTTP/1.1 Host: cal.example.com If-Schedule-Tag-Match: "e78f23ed-0188-4bab-938d-2aeb3324c7e8" Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090602T185254Z DTSTART:20090602T160000Z DTEND:20090602T170000Z TRANSP:OPAQUE SUMMARY:Lunch ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:cyrus@example.com
ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT =ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@exam ple.com ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT= NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex ample.net ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A CTION;RSVP=TRUE:mailto:mike@example.org BEGIN:VALARM TRIGGER:-PT15M ACTION:DISPLAY DESCRIPTION:Reminder END:VALARM END:VEVENT END:VCALENDAR >> Response << HTTP/1.1 200 OK Content-Length: 0 Date: Tue, 02 Jun 2009 18:57:54 GMT Last-Modified: Tue, 02 Jun 2009 18:57:54 GMT ETag: "eb4639451b434fbd85561cfe74a4e785" Schedule-Tag: "8893ee45-eb9d-428f-b53c-c777daf19e41" Once the event modification has been completed, Wilfredo's client will retrieve the event back from the server to get the schedule status of the "Organizer". >> Request << GET /home/wilfredo/calendars/work/BB64861C2228.ics HTTP/1.1 Host: cal.example.com >> Response << HTTP/1.1 200 OK Date: Tue, 02 Jun 2009 19:03:03 GMT Last-Modified: Tue, 02 Jun 2009 19:02:21 GMT ETag: "5eb897deabda116714bc9926c8939589" Schedule-Tag: "8893ee45-eb9d-428f-b53c-c777daf19e41" Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090602T190221Z DTSTART:20090602T160000Z DTEND:20090602T170000Z TRANSP:OPAQUE SUMMARY:Lunch ORGANIZER;CN="Cyrus Daboo";SCHEDULE-STATUS=1.2:mailto:cyrus@ex ample.com ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:cyrus@example.com ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT =ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@exam ple.com ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT= NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex ample.net ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A CTION;RSVP=TRUE:mailto:mike@example.org BEGIN:VALARM TRIGGER:-PT15M ACTION:DISPLAY DESCRIPTION:Reminder END:VALARM END:VEVENT END:VCALENDARB.4. Example: "Organizer" Receiving a Reply to an Invitation
On reception of Wilfredo's reply, Cyrus's server will automatically update Cyrus's scheduling object resource, make Wilfredo's scheduling message available in Cyrus's scheduling Inbox collection, and deliver an updated scheduling message to Bernard to share Wilfredo's updated participation status. In this example, Cyrus's client retrieves and deletes this scheduling message in his scheduling Inbox collection. >> Request << GET /home/cyrus/calendars/inbox/c0a58c27d93f.ics HTTP/1.1 Host: cal.example.com
>> Response << HTTP/1.1 200 OK Date: Tue, 02 Jun 2009 19:05:02 GMT Last-Modified: Tue, 02 Jun 2009 19:04:20 GMT ETag: "9265eb897deabc8939589da116714bc9" Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Server//EN METHOD:REPLY BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090602T185754Z DTSTART:20090602T160000Z DTEND:20090602T170000Z ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Wilfredo Sanchez Vega";PARTSTAT=ACCEPTED:mailto:w ilfredo@example.com REQUEST-STATUS:2.0;Success END:VEVENT END:VCALENDAR >> Request << DELETE /home/cyrus/calendars/inbox/c0a58c27d93f.ics HTTP/1.1 Host: cal.example.com >> Response << HTTP/1.1 204 No Content Date: Tue, 02 Jun 2009 19:05:05 GMT Cyrus's client then retrieves the event back from the server with Wilfredo's updated participation status. >> Request << GET /home/cyrus/calendars/work/9263504FD3AD.ics HTTP/1.1 Host: cal.example.com
>> Response << HTTP/1.1 200 OK Date: Tue, 02 Jun 2009 19:05:02 GMT Last-Modified: Tue, 02 Jun 2009 19:04:20 GMT ETag: "eb897deabc8939589da116714bc99265" Schedule-Tag: "132cab27-1fe3-67ab-de13-abd348d1dee3" Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Server//EN BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090602T190420Z DTSTART:20090602T160000Z DTEND:20090602T170000Z TRANSP:OPAQUE SUMMARY:Lunch ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:cyrus@example.com ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT =ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=2.0: mailto:wilfredo@example.com ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT= NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1 .0:mailto:bernard@example.net ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A CTION;RSVP=TRUE;SCHEDULE-STATUS=3.7:mailto:mike@example.org END:VEVENT END:VCALENDAR
B.5. Example: "Organizer" Requesting Busy Time Information
In this example, Cyrus requests the busy time information of Wilfredo, Bernard, and Mike. >> Request << POST /home/cyrus/calendars/outbox/ HTTP/1.1 Host: cal.example.com Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN METHOD:REQUEST BEGIN:VFREEBUSY UID:4FD3AD926350 DTSTAMP:20090602T190420Z DTSTART:20090602T000000Z DTEND:20090604T000000Z ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Wilfredo Sanchez Vega":mailto:wilfredo@example.com ATTENDEE;CN="Bernard Desruisseaux":mailto:bernard@example.net ATTENDEE;CN="Mike Douglass":mailto:mike@example.org END:VFREEBUSY END:VCALENDAR >> Response << HTTP/1.1 200 OK Date: Tue, 02 Jun 2009 20:07:34 GMT Content-Type: application/xml; charset="utf-8" Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <C:schedule-response xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"> <C:response> <C:recipient> <D:href>mailto:wilfredo@example.com</D:href> </C:recipient> <C:request-status>2.0;Success</C:request-status> <C:calendar-data>BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Server//EN METHOD:REPLY BEGIN:VFREEBUSY
UID:4FD3AD926350 DTSTAMP:20090602T200733Z DTSTART:20090602T000000Z DTEND:20090604T000000Z ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Wilfredo Sanchez Vega":mailto:wilfredo@example.com FREEBUSY;FBTYPE=BUSY:20090602T110000Z/20090602T120000Z FREEBUSY;FBTYPE=BUSY:20090603T170000Z/20090603T180000Z END:VFREEBUSY END:VCALENDAR </C:calendar-data> </C:response> <C:response> <C:recipient> <D:href>mailto:bernard@example.net</D:href> </C:recipient> <C:request-status>2.0;Success</C:request-status> <C:calendar-data>BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Server//EN METHOD:REPLY BEGIN:VFREEBUSY UID:4FD3AD926350 DTSTAMP:20090602T200733Z DTSTART:20090602T000000Z DTEND:20090604T000000Z ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Bernard Desruisseaux":mailto:bernard@example.net FREEBUSY;FBTYPE=BUSY:20090602T150000Z/20090602T160000Z FREEBUSY;FBTYPE=BUSY:20090603T090000Z/20090603T100000Z FREEBUSY;FBTYPE=BUSY:20090603T180000Z/20090603T190000Z END:VFREEBUSY END:VCALENDAR </C:calendar-data> </C:response> <C:response> <C:recipient> <D:href>mailto:mike@example.org</D:href> </C:recipient> <C:request-status>3.7;Invalid calendar user</C:request-status> </C:response> </C:schedule-response>
B.6. Example: User Attempting to Invite "Attendee" on Behalf of "Organizer"
In the following example, Cyrus attempts to create, on behalf of Wilfredo, an event with Bernard specified as an "Attendee". The request fails, since Wilfredo didn't grant Cyrus the right to invite other calendar users on his behalf. >> Request << PUT /home/wilfredo/calendars/work/def456.ics HTTP/1.1 Host: cal.example.com Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx If-None-Match: * BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN BEGIN:VEVENT UID:3504F926D3AD SEQUENCE:0 DTSTAMP:20090602T190221Z DTSTART:20090602T230000Z DTEND:20090603T000000Z TRANSP:OPAQUE SUMMARY:Dinner ORGANIZER;CN="Wilfredo Sanchez Vega":mailto:wilfredo@example.com ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT=A CCEPTED:mailto:wilfredo@example.com ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=NE EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl e.net END:VEVENT END:VCALENDAR
>> Response << HTTP/1.1 403 Forbidden Content-Type: application/xml; charset="utf-8" Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:error xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"> <D:need-privileges> <D:resource> <D:href>/home/wilfredo/calendars/outbox/</D:href> <D:privilege><C:schedule-send-invite/></D:privilege> </D:resource> </D:need-privileges> </D:error>B.7. Example: "Attendee" Declining an Instance of a Recurring Event
In the following example, Bernard declines the second recurrence instance of a daily recurring event he's been invited to by Cyrus. >> Request << PUT /home/bernard/calendars/work/4FD3AD926350.ics HTTP/1.1 Host: cal.example.com Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx If-Schedule-Tag-Match: "7775FB30-7534-489E-A79A-0EA147B933EB" BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN BEGIN:VTIMEZONE TZID:America/Montreal BEGIN:STANDARD DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 END:STANDARD BEGIN:DAYLIGHT DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 END:DAYLIGHT
END:VTIMEZONE BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090602T185254Z DTSTART;TZID=America/Montreal:20090601T150000 DTEND;TZID=America/Montreal:20090601T160000 RRULE:FREQ=DAILY;INTERVAL=1;COUNT=5 TRANSP:OPAQUE SUMMARY:Review Internet-Draft ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:cyrus@example.com ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT= ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl e.net END:VEVENT BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090603T183823Z RECURRENCE-ID;TZID=America/Montreal:20090602T150000 DTSTART;TZID=America/Montreal:20090602T150000 DTEND;TZID=America/Montreal:20090602T160000 TRANSP:TRANSPARENT SUMMARY:Review Internet-Draft ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:cyrus@example.com ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT= DECLINED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl e.net END:VEVENT END:VCALENDAR >> Response << HTTP/1.1 200 OK Content-Length: 0 Date: Tue, 02 Jun 2009 18:52:54 GMT Last-Modified: Tue, 02 Jun 2009 18:52:54 GMT ETag: "d85561cfe74a4e785eb4639451b434fb" Schedule-Tag: "488177c8-2ea7-4176-a6cb-fab8cfccdea2"
Bernard's participation status update will cause his server to deliver a scheduling message to Cyrus. Cyrus's client will find the following reply message from Bernard in Cyrus's scheduling Inbox collection: >> Request << GET /home/cyrus/calendars/inbox/9263504FD3AD.ics HTTP/1.1 Host: cal.example.com >> Response << HTTP/1.1 200 OK Date: Tue, 02 Jun 2009 18:52:58 GMT Last-Modified: Tue, 02 Jun 2009 18:52:58 GMT ETag: "eb897deabc8939589da116714bc99265" Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN METHOD:REPLY BEGIN:VTIMEZONE TZID:America/Montreal BEGIN:STANDARD DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 END:STANDARD BEGIN:DAYLIGHT DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090603T183823Z RECURRENCE-ID;TZID=America/Montreal:20090602T150000 DTSTART;TZID=America/Montreal:20090602T150000 DTEND;TZID=America/Montreal:20090602T160000 SUMMARY:Review Internet-Draft
ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Bernard Desruisseaux";PARTSTAT=DECLINED: mailto:bernard@example.net REQUEST-STATUS:2.0;Success END:VEVENT END:VCALENDARB.8. Example: "Attendee" Removing an Instance of a Recurring Event
In the following example, Bernard removes from his calendar the third recurrence instance of a daily recurring event he's been invited to by Cyrus. This is accomplished by the addition of an "EXDATE" property to the scheduling object resource stored by Bernard. >> Request << PUT /home/bernard/calendars/work/4FD3AD926350.ics HTTP/1.1 Host: cal.example.com Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx If-Schedule-Tag-Match: "488177c8-2ea7-4176-a6cb-fab8cfccdea2" BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN BEGIN:VTIMEZONE TZID:America/Montreal BEGIN:STANDARD DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 END:STANDARD BEGIN:DAYLIGHT DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090602T185254Z DTSTART;TZID=America/Montreal:20090601T150000 DTEND;TZID=America/Montreal:20090601T160000
RRULE:FREQ=DAILY;INTERVAL=1;COUNT=5 EXDATE;TZID=America/Montreal:20090603T150000 TRANSP:OPAQUE SUMMARY:Review Internet-Draft ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:cyrus@example.com ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT= ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl e.net END:VEVENT BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090603T183823Z RECURRENCE-ID;TZID=America/Montreal:20090602T150000 DTSTART;TZID=America/Montreal:20090602T150000 DTEND;TZID=America/Montreal:20090602T160000 TRANSP:TRANSPARENT SUMMARY:Review Internet-Draft ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED: mailto:cyrus@example.com ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT= DECLINED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl e.net END:VEVENT END:VCALENDAR Bernard's deletion of a recurrence instance will cause his server to deliver a scheduling message to Cyrus. Cyrus's client will find the following reply message from Bernard in Cyrus's scheduling Inbox collection: >> Request << GET /home/cyrus/calendars/inbox/6504923FD3AD.ics HTTP/1.1 Host: cal.example.com >> Response << HTTP/1.1 200 OK Date: Tue, 02 Jun 2009 18:52:58 GMT Last-Modified: Tue, 02 Jun 2009 18:52:58 GMT ETag: "eb897deabc8939589da116714bc99265" Content-Type: text/calendar; charset="utf-8" Content-Length: xxxx
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN METHOD:REPLY BEGIN:VTIMEZONE TZID:America/Montreal BEGIN:STANDARD DTSTART:20071104T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 END:STANDARD BEGIN:DAYLIGHT DTSTART:20070311T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT UID:9263504FD3AD SEQUENCE:0 DTSTAMP:20090603T183823Z RECURRENCE-ID;TZID=America/Montreal:20090603T150000 DTSTART;TZID=America/Montreal:20090603T150000 DTEND;TZID=America/Montreal:20090603T160000 SUMMARY:Review Internet-Draft ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com ATTENDEE;CN="Bernard Desruisseaux";PARTSTAT=DECLINED: mailto:bernard@example.net REQUEST-STATUS:2.0;Success END:VEVENT END:VCALENDAR
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/