7Internet Engineering Task Force (IETF) C. Daboo
8Request for Comments: 7953 Apple
9Updates: 4791, 5545, 6638 M. Douglass
10Category: Standards Track Spherical Cow Group
11ISSN: 2070-1721 August 2016
18 This document specifies a new iCalendar (RFC 5545) component that
19 allows the publication of available and unavailable time periods
20 associated with a calendar user. This component can be used in
21 standard iCalendar free-busy lookups, including the iCalendar
22 Transport-independent Interoperability Protocol (iTIP; RFC 5546)
23 free-busy requests, to generate repeating blocks of available or busy
24 time with exceptions as needed.
26 This document also defines extensions to the Calendaring Extensions
27 to WebDAV (CalDAV) calendar access protocol (RFC 4791) and the
28 associated scheduling protocol (RFC 6638) to specify how this new
29 calendar component can be used when evaluating free-busy time.
33 This is an Internet Standards Track document.
35 This document is a product of the Internet Engineering Task Force
36 (IETF). It represents the consensus of the IETF community. It has
37 received public review and has been approved for publication by the
38 Internet Engineering Steering Group (IESG). Further information on
39 Internet Standards is available in Section 2 of RFC 7841.
41 Information about the current status of this document, any errata,
42 and how to provide feedback on it may be obtained at
43 http://www.rfc-editor.org/info/rfc7953.
58Daboo & Douglass Standards Track [Page 1]
60RFC 7953 Calendar Availability August 2016
65 Copyright (c) 2016 IETF Trust and the persons identified as the
66 document authors. All rights reserved.
68 This document is subject to BCP 78 and the IETF Trust's Legal
69 Provisions Relating to IETF Documents
70 (http://trustee.ietf.org/license-info) in effect on the date of
71 publication of this document. Please review these documents
72 carefully, as they describe your rights and restrictions with respect
73 to this document. Code Components extracted from this document must
74 include Simplified BSD License text as described in Section 4.e of
75 the Trust Legal Provisions and are provided without warranty as
76 described in the Simplified BSD License.
80 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
81 2. Conventions Used in This Document . . . . . . . . . . . . . . 3
82 3. iCalendar Extensions . . . . . . . . . . . . . . . . . . . . 4
83 3.1. VAVAILABILITY Component . . . . . . . . . . . . . . . . . 4
84 3.2. Busy Time Type . . . . . . . . . . . . . . . . . . . . . 10
85 4. Combining VAVAILABILITY Components . . . . . . . . . . . . . 10
86 5. Calculating Free-Busy Time . . . . . . . . . . . . . . . . . 12
87 5.1. Examples . . . . . . . . . . . . . . . . . . . . . . . . 13
88 6. Use with iTIP . . . . . . . . . . . . . . . . . . . . . . . . 15
89 7. CalDAV Extensions . . . . . . . . . . . . . . . . . . . . . . 15
90 7.1. CalDAV Requirements Overview . . . . . . . . . . . . . . 15
91 7.2. New Features in CalDAV . . . . . . . . . . . . . . . . . 16
92 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19
93 9. Privacy Considerations . . . . . . . . . . . . . . . . . . . 19
94 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20
95 10.1. Component Registrations . . . . . . . . . . . . . . . . 20
96 10.2. Property Registrations . . . . . . . . . . . . . . . . . 20
97 11. Normative References . . . . . . . . . . . . . . . . . . . . 20
98 Appendix A. Example Calendar #1 . . . . . . . . . . . . . . . . 22
99 Appendix B. Example Calendar #2 . . . . . . . . . . . . . . . . 23
100 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 24
101 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24
114Daboo & Douglass Standards Track [Page 2]
116RFC 7953 Calendar Availability August 2016
121 Calendar users often have regular periods of time when they are
122 either available to be scheduled or always unavailable. For example,
123 an office worker will often wish only to appear free to their work
124 colleagues during normal 'office hours' (e.g., Monday through Friday,
125 9 am through 5 pm). Or, a university professor might only be
126 available to students during a set period of time (e.g., Thursday
127 afternoons, 2 pm through 5 pm during term time only). Ideally, users
128 ought be able to specify such periods directly via their calendar
129 user agent and have them automatically considered as part of the
130 normal free-busy lookup for that user. In addition, it ought be
131 possible to present different periods of available time depending on
132 which user is making the request.
134 iCalendar [RFC5545] defines a "VFREEBUSY" component that can be used
135 to represent fixed busy time periods, but it does not provide a way
136 to specify a repeating period of available or unavailable time.
137 Since repeating patterns are often the case, "VFREEBUSY" components
138 are not sufficient to solve this problem.
140 This specification defines a new type of iCalendar component that can
141 be used to publish user availability.
143 CalDAV [RFC4791] provides a way for calendar users to access and
144 manage calendar data and exchange this data via scheduling
145 operations. As part of this, the CalDAV calendar-access [RFC4791]
146 feature provides a CALDAV:free-busy-query REPORT that returns free-
147 busy information for a calendar collection or hierarchy of calendar
148 collections. Also, the CalDAV calendar-auto-schedule [RFC6638]
149 feature allows free-busy information for a calendar user to be
150 determined. Both of these operations involve examining user
151 calendars for events that 'block time', with the blocked out periods
152 being returned in a "VFREEBUSY" component.
154 This specification extends the CalDAV calendar-access and CalDAV
155 calendar-auto-schedule features to allow the new iCalendar
156 availability components to be stored and manipulated and to allow
157 free-busy lookups to use the information from any such components, if
1602. Conventions Used in This Document
162 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
163 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
164 "OPTIONAL" in this document are to be interpreted as described in
170Daboo & Douglass Standards Track [Page 3]
172RFC 7953 Calendar Availability August 2016
175 When XML element types in the namespaces "DAV:" and
176 "urn:ietf:params:xml:ns:caldav" are referenced in this document
177 outside of the context of an XML fragment, the string "DAV:" and
178 "CALDAV:" will be prefixed to the element type names respectively.
1803. iCalendar Extensions
182 This specification adds a new "VAVAILABILITY" calendar component to
183 iCalendar. The "VAVAILABILITY" component is itself a container for
184 new "AVAILABLE" subcomponents.
186 The purpose of the "VAVAILABILITY" calendar component is to provide a
187 grouping of available time information over a specific range of time.
188 Within that, there are specific time ranges that are marked as
189 available via a set of "AVAILABLE" calendar subcomponents. Together
190 these can be used to specify available time that can repeat over set
191 periods of time, and which can vary over time.
193 An illustration of how "VAVAILABILITY" and "AVAILABLE" components
197 <=========================================================>
199 +-------------------------------------------------+
201 +-------------------------------------------------+
202 +------------+ +------------+
203 | AVAILABLE | | AVAILABLE |
204 +------------+ +------------+
206 <-> <-----> <-----------> Busy Time
208 The overall time range is shown at the top. A "VAVAILABILITY"
209 component spans part of the range. The time range covered by the
210 "VAVAILABILITY" component is considered to be busy, except for the
211 ranges covered by the "AVAILABLE" components within the
212 "VAVAILABILITY" component.
2143.1. VAVAILABILITY Component
216 Component Name: VAVAILABILITY
218 Purpose: Provide a grouping of component properties and
219 subcomponents that describe the availability associated with a
226Daboo & Douglass Standards Track [Page 4]
228RFC 7953 Calendar Availability August 2016
231 Format Definition: A "VAVAILABILITY" calendar component is defined
232 by the following notation:
234 availabilityc = "BEGIN" ":" "VAVAILABILITY" CRLF
235 availabilityprop *availablec
236 "END" ":" "VAVAILABILITY" CRLF
238 availabilityprop = *(
240 ; the following are REQUIRED
241 ; but MUST NOT occur more than once
245 ; the following are OPTIONAL
246 ; but MUST NOT occur more than once
248 busytype / class / created / description /
249 dtstart / last-mod / location / organizer /
250 priority /seq / summary / url /
252 ; Either 'dtend' or 'duration' MAY appear
253 ; in an 'availableprop', but 'dtend' and
254 ; 'duration' MUST NOT occur in the same
255 ; 'availabilityprop'.
256 ; 'duration' MUST NOT be present if
257 ; 'dtstart' is not present
261 ; the following are OPTIONAL
262 ; and MAY occur more than once
264 categories / comment / contact /
269 availablec = "BEGIN" ":" "AVAILABLE" CRLF
271 "END" ":" "AVAILABLE" CRLF
282Daboo & Douglass Standards Track [Page 5]
284RFC 7953 Calendar Availability August 2016
289 ; the following are REQUIRED
290 ; but MUST NOT occur more than once
292 dtstamp / dtstart / uid /
294 ; Either 'dtend' or 'duration' MAY appear in
295 ; an 'availableprop', but 'dtend' and
296 ; 'duration' MUST NOT occur in the same
301 ; the following are OPTIONAL
302 ; but MUST NOT occur more than once
304 created / description / last-mod /
305 location / recurid / rrule / summary /
307 ; the following are OPTIONAL
308 ; and MAY occur more than once
310 categories / comment / contact / exdate /
311 rdate / x-prop / iana-prop
315 Description: A "VAVAILABILITY" component indicates a period of time
316 within which availability information is provided. A
317 "VAVAILABILITY" component can specify a start time and an end time
318 or duration. If "DTSTART" is not present, then the start time is
319 unbounded. If "DTEND" or "DURATION" are not present, then the end
320 time is unbounded. Within the specified time period, availability
321 defaults to a free-busy type of "BUSY-UNAVAILABLE" (see
322 Section 3.2), except for any time periods corresponding to
323 "AVAILABLE" subcomponents.
325 "AVAILABLE" subcomponents are used to indicate periods of free
326 time within the time range of the enclosing "VAVAILABILITY"
327 component. "AVAILABLE" subcomponents MAY include recurrence
328 properties to specify recurring periods of time, which can be
329 overridden using normal iCalendar recurrence behavior (i.e., use
330 of the "RECURRENCE-ID" property).
338Daboo & Douglass Standards Track [Page 6]
340RFC 7953 Calendar Availability August 2016
343 If specified, the "DTSTART" and "DTEND" properties in
344 "VAVAILABILITY" components and "AVAILABLE" subcomponents MUST be
345 "DATE-TIME" values specified as either the date with UTC time or
346 the date with local time and a time zone reference.
348 The iCalendar object containing the "VAVAILABILITY" component MUST
349 contain appropriate "VTIMEZONE" components corresponding to each
350 unique "TZID" parameter value used in any DATE-TIME properties in
351 all components, unless [RFC7809] is in effect.
353 When used to publish available time, the "ORGANIZER" property
354 specifies the calendar user associated with the published
357 If the "PRIORITY" property is specified in "VAVAILABILITY"
358 components, it is used to determine how that component is combined
359 with other "VAVAILABILITY" components. See Section 4.
361 Other calendar properties MAY be specified in "VAVAILABILITY" or
362 "AVAILABLE" components and are considered attributes of the marked
363 block of time. Their usage is application specific. For example,
364 the "LOCATION" property might be used to indicate that a person is
365 available in one location for part of the week and a different
366 location for another part of the week (but see Section 9 for when
367 it is appropriate to add additional data like this).
369 Example: The following is an example of a "VAVAILABILITY" calendar
370 component used to represent the availability of a user, always
371 available Monday through Friday, 9:00 am to 5:00 pm in the
372 America/Montreal time zone:
375 ORGANIZER:mailto:bernard@example.com
376 UID:0428C7D2-688E-4D2E-AC52-CD112E2469DF
377 DTSTAMP:20111005T133225Z
379 UID:34EDA59B-6BB1-4E94-A66C-64999089C0AF
380 SUMMARY:Monday to Friday from 9:00 to 17:00
381 DTSTART;TZID=America/Montreal:20111002T090000
382 DTEND;TZID=America/Montreal:20111002T170000
383 RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
394Daboo & Douglass Standards Track [Page 7]
396RFC 7953 Calendar Availability August 2016
399 The following is an example of a "VAVAILABILITY" calendar
400 component used to represent the availability of a user available
401 Monday through Thursday, 9:00 am to 5:00 pm, at the main office,
402 and Friday, 9:00 am to 12:00 pm, in the branch office in the
403 America/Montreal time zone between October 2nd and December 2nd
407 ORGANIZER:mailto:bernard@example.com
408 UID:84D0F948-7FC6-4C1D-BBF3-BA9827B424B5
409 DTSTAMP:20111005T133225Z
410 DTSTART;TZID=America/Montreal:20111002T000000
411 DTEND;TZID=America/Montreal:20111202T000000
413 UID:7B33093A-7F98-4EED-B381-A5652530F04D
414 SUMMARY:Monday to Thursday from 9:00 to 17:00
415 DTSTART;TZID=America/Montreal:20111002T090000
416 DTEND;TZID=America/Montreal:20111002T170000
417 RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH
421 UID:DF39DC9E-D8C3-492F-9101-0434E8FC1896
422 SUMMARY:Friday from 9:00 to 12:00
423 DTSTART;TZID=America/Montreal:20111006T090000
424 DTEND;TZID=America/Montreal:20111006T120000
426 LOCATION:Branch Office
430 The following is an example of three "VAVAILABILITY" calendar
431 components used to represent the availability of a traveling
432 worker: Monday through Friday, 9:00 am to 5:00 pm each day.
433 However, for three weeks the calendar user is working in Montreal,
434 then one week in Denver, then back to Montreal. Note that each
435 overall period is covered by separate "VAVAILABILITY" components.
436 The last of these has no DTEND so it continues on "forever". This
437 example shows one way "blocks" of available time can be
438 represented. See Section 4 for another approach using priorities.
450Daboo & Douglass Standards Track [Page 8]
452RFC 7953 Calendar Availability August 2016
456 ORGANIZER:mailto:bernard@example.com
457 UID:BE082249-7BDD-4FE0-BDBA-DE6598C32FC9
458 DTSTAMP:20111005T133225Z
459 DTSTART;TZID=America/Montreal:20111002T000000
460 DTEND;TZID=America/Montreal:20111023T030000
462 UID:54602321-CEDB-4620-9099-757583263981
463 SUMMARY:Monday to Friday from 9:00 to 17:00
464 DTSTART;TZID=America/Montreal:20111002T090000
465 DTEND;TZID=America/Montreal:20111002T170000
466 RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
471 ORGANIZER:mailto:bernard@example.com
472 UID:A1FF55E3-555C-433A-8548-BF4864B5621E
473 DTSTAMP:20111005T133225Z
474 DTSTART;TZID=America/Denver:20111023T000000
475 DTEND;TZID=America/Denver:20111030T000000
477 UID:57DD4AAF-3835-46B5-8A39-B3B253157F01
478 SUMMARY:Monday to Friday from 9:00 to 17:00
479 DTSTART;TZID=America/Denver:20111023T090000
480 DTEND;TZID=America/Denver:20111023T170000
481 RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
486 ORGANIZER:mailto:bernard@example.com
487 UID:1852F9E1-E0AA-4572-B4C4-ED1680A4DA40
488 DTSTAMP:20111005T133225Z
489 DTSTART;TZID=America/Montreal:20111030T030000
491 UID:D27C421F-16C2-4ECB-8352-C45CA352C72A
492 SUMMARY:Monday to Friday from 9:00 to 17:00
493 DTSTART;TZID=America/Montreal:20111030T090000
494 DTEND;TZID=America/Montreal:20111030T170000
495 RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
506Daboo & Douglass Standards Track [Page 9]
508RFC 7953 Calendar Availability August 2016
513 Property Name: BUSYTYPE
515 Purpose: This property specifies the default busy time type.
519 Property Parameters: IANA and nonstandard property parameters can be
520 specified on this property.
522 Conformance: This property can be specified within "VAVAILABILITY"
525 Format Definition: This property is defined by the following
528 busytype = "BUSYTYPE" busytypeparam ":" busytypevalue CRLF
530 busytypeparam = *(";" other-param)
532 busytypevalue = "BUSY" / "BUSY-UNAVAILABLE" /
533 "BUSY-TENTATIVE" / iana-token / x-name
534 ; Default is "BUSY-UNAVAILABLE".
536 Description: This property is used to specify the default busy time
537 type. The values correspond to those used by the "FBTYPE"
538 parameter used on a "FREEBUSY" property, with the exception that
539 the "FREE" value is not used in this property. If not specified
540 on a component that allows this property, the default is "BUSY-
543 Example: The following is an example of this property:
5474. Combining VAVAILABILITY Components
549 The "VAVAILABILITY" component allows a calendar user to describe
550 their availability over extended periods of time through the use of
551 recurrence patterns. This availability might be relatively constant
554 However, there is usually some degree of irregularity, as people take
555 vacations or perhaps spend a few weeks at a different office. For
556 that period of time there is a need to redefine their availability.
557 Rather than modify their existing availability, the "PRIORITY"
558 property allows new "VAVAILABILITY" components to override others of
562Daboo & Douglass Standards Track [Page 10]
564RFC 7953 Calendar Availability August 2016
567 lower ordinal priority. Note that iCalendar [RFC5545] defines the
568 "PRIORITY" property such that a value of 0 is undefined, 1 is the
569 highest priority, and 9 is the lowest.
571 When combining "VAVAILABILITY" components, an absence of a "PRIORITY"
572 property or a value of 0 implies the lowest level of priority. When
573 two or more VAVAILABILITY components overlap, and they have the same
574 PRIORITY value, the overlapping busy time type is determined by the
575 following order: BUSY > BUSY-UNAVAILABLE > BUSY-TENTATIVE. That is,
576 if one component has a BUSYTYPE set to BUSY and the other has
577 BUSYTYPE set to BUSY-UNAVAILABLE, then the effective busy time type
578 over the time range that they overlap would be BUSY. It is up to the
579 creator of such components to ensure that combining them produces a
580 consistent and expected result.
582 To calculate the available time, order the intersecting
583 "VAVAILABILITY" components by priority (the lowest to highest
584 "PRIORITY" values are 0, 9, 8, 7, 6, 5, 4, 3, 2, 1).
586 Step through the resulting list of "VAVAILABILITY" components. For
587 each, the time range covered by the "VAVAILABILITY" component is set
588 to busy and then portions of it defined by the "AVAILABLE" components
589 in the "VAVAILABILITY" component are set to free.
591 Note that, if any "VAVAILABILITY" component completely covers the
592 date range of interest, then any lower priority "VAVAILABILITY"
593 components can be ignored.
595 Typically, a calendar user's "default" availability (e.g., business
596 hours of Monday through Friday, 9:00 am to 5:00 pm) would use the
597 lowest level of priority: zero. Any overrides to the "default" would
598 use higher levels as needed. To avoid having to keep readjusting the
599 "PRIORITY" property value when an override has to be "inserted"
600 between two existing components, priority values SHOULD be "spaced
601 out" over the full range of values. The table below illustrates this
602 via an example. The first row shows the priority range from low to
603 high, the second row shows the corresponding "PRIORITY" property
604 value, and the third row shows which "VAVAILABILITY" component has
605 that priority. The "default" availability is created with priority
606 zero (shown as {a} in the table), then the first override created
607 with priority 5 (shown as {b} in the table), a subsequent
608 availability can be inserted between the two by using priority 7
609 (shown as {c} in the table), and another, taking precedence over all
610 existing ones, with priority 3 (shown as {d} in the table). As seen
611 in the table, additional "slots" are open for more "VAVAILABILITY"
612 components to be added with other priorities if needed.
618Daboo & Douglass Standards Track [Page 11]
620RFC 7953 Calendar Availability August 2016
623 +-----+----+----+-----+----+-----+----+-----+----+------+
624 | Low | | | | | | | | | High |
625 +-----+----+----+-----+----+-----+----+-----+----+------+
626 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
627 +-----+----+----+-----+----+-----+----+-----+----+------+
628 | {a} | | | {c} | | {b} | | {d} | | |
629 +-----+----+----+-----+----+-----+----+-----+----+------+
6315. Calculating Free-Busy Time
633 This section describes how free-busy time information for a calendar
634 user is calculated in the presence of "VAVAILABILITY" calendar
637 An iCalendar "VFREEBUSY" component is used to convey "rolled-up"
638 free-busy time information for a calendar user. This can be
639 generated as the result of an iTIP [RFC5546] free-busy request or
640 through some other mechanism (e.g., a CalDAV calendar-access
641 CALDAV:free-busy-query REPORT).
643 When one or more "VAVAILABILITY" components are present and intersect
644 the time range for the free-busy request, first the available time is
645 calculated, as outlined in Section 4. Once that is done, regular
646 "VEVENT" and "VFREEBUSY" components can be "overlaid" in the usual
647 way to block out time.
649 An example procedure for this is as follows:
651 1. Initially mark the entire period of the free-busy request as
654 2. For each "VAVAILABILITY" component ordered by PRIORITY (lowest to
657 A. Determine if the "VAVAILABILITY" intersects the time range of
658 the free-busy request. If not, ignore it.
660 B. Determine if the "VAVAILABILITY" is completely overridden by
661 a higher priority component. If so, ignore it.
663 C. For the time period covered by the "VAVAILABILITY" component,
664 mark time in the free-busy request result set as busy, using
665 the busy time type derived from the "BUSYTYPE" property in
666 the "VAVAILABILITY" component.
668 D. Append the "VAVAILABILITY" component to a list of components
669 for further processing in step 3, if it has not been ignored.
674Daboo & Douglass Standards Track [Page 12]
676RFC 7953 Calendar Availability August 2016
679 3. For each "VAVAILABILITY" component in the list resulting from
680 step 2, in order from the first item to the last item:
682 A. For each "AVAILABLE" component in the "VAVAILABILITY"
685 i. Expand all recurring instances, taking into account
686 overridden instances, ignoring instances or parts of
687 instances that fall outside of the free-busy request
688 time range or the time period specified by the
689 "VAVAILABILITY" component.
691 ii. For each instance, mark the corresponding time in the
692 free-busy request result set as free.
694 4. For each "VEVENT" or "VFREEBUSY" component, apply normal free-
695 busy processing within the free-busy request time range.
699 In the examples below, a table is used to represent time slots for
700 the period of a free-busy request. Each time slot is two hours long.
701 The column header represents the hours from midnight local time.
702 Each row below the column headers represents a step in the free-busy
703 result set determination, following the procedure outlined above.
705 Each cell in the rows below the column header contains a single
706 character that represents the free-busy type for the corresponding
707 time period at the end of the process step represented by the row.
708 The characters in the row are:
710 F Represents "FREE" time in that slot.
712 B Represents "BUSY" time in that slot.
714 U Represents "BUSY-UNAVAILABLE" time in that slot.
716 T Represents "BUSY-TENTATIVE" time in that slot.
718 I Represents data to be ignored in that slot (as per step 2.B
723 Appendix A shows the user's calendar. This includes one
724 "VAVAILABILITY" component giving available time within the requested
725 time range of 8:00 am to 6:00 pm, together with one "VEVENT"
726 component representing a two hour meeting starting at 12:00 pm.
730Daboo & Douglass Standards Track [Page 13]
732RFC 7953 Calendar Availability August 2016
735 A free-busy request for Monday, 6th November 2011, midnight to
736 midnight in the America/Montreal time zone would be calculated as
737 follows using the steps described above.
739 +------+----+----+----+----+----+----+----+----+----+----+----+----+
740 | Step | 0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | 22 |
741 +------+----+----+----+----+----+----+----+----+----+----+----+----+
742 | 1. | F | F | F | F | F | F | F | F | F | F | F | F |
743 | 2. | U | U | U | U | U | U | U | U | U | U | U | U |
744 | 3. | U | U | U | U | F | F | F | F | F | U | U | U |
745 | 4. | U | U | U | U | F | F | B | F | F | U | U | U |
746 +------+----+----+----+----+----+----+----+----+----+----+----+----+
7485.1.2. Further Example
750 Appendix B shows another way to represent the availability of the
751 traveling worker shown above. Here we represent their base
752 availability of Monday through Friday, 8:00 am to 6:00 pm each day
753 with a "VAVAILABILITY" with default "PRIORITY" (there is no "DTEND"
754 property so that this availability is unbounded). For the week the
755 calendar user is working in Denver (October 23rd through October
756 30th), we represent their availability with a "VAVAILABILITY"
757 component with priority 1, which overrides the base availability.
758 There is also a two hour meeting starting at 12:00 pm (in the
759 America/Denver time zone).
761 A free-busy request for Monday, 24th October 2011, midnight to
762 midnight in the America/Montreal time zone, would be calculated as
763 follows using the steps described above. Note that there is a two
764 hour offset in the in the available time, compared to the previous
765 example, due to the two hour difference between the time zone of the
766 free-busy request and the time zone of the user's availability and
767 meeting. "2.P0" shows the base availability, and "2.P1" shows the
768 higher priority availability. "3.P1" only shows the higher priority
769 availability contributing to the overall free-busy since the default
770 availability is ignored (as per step 2.B described above).
772 +------+----+----+----+----+----+----+----+----+----+----+----+----+
773 | Step | 0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | 22 |
774 +------+----+----+----+----+----+----+----+----+----+----+----+----+
775 | 1. | F | F | F | F | F | F | F | F | F | F | F | F |
776 | 2.P0 | I | I | I | I | I | I | I | I | I | I | I | I |
777 | 2.P1 | U | U | U | U | U | U | U | U | U | U | U | U |
778 | 3.P1 | U | U | U | U | U | F | F | F | F | F | U | U |
779 | 4. | U | U | U | U | U | F | F | B | F | F | U | U |
780 +------+----+----+----+----+----+----+----+----+----+----+----+----+
786Daboo & Douglass Standards Track [Page 14]
788RFC 7953 Calendar Availability August 2016
793 This specification does not define how "VAVAILABILITY" components are
794 used in scheduling messages sent using the iTIP [RFC5546] protocol.
795 It is expected that future specifications will define how iTIP
796 scheduling can make use of "VAVAILABILITY" components.
8007.1. CalDAV Requirements Overview
802 This section lists what functionality is required of a CalDAV server,
803 which supports "VAVAILABILITY" components in stored calendar data. A
806 o MUST advertise support for "VAVAILABILITY" components in
807 CALDAV:supported-calendar-component-set properties on calendars
808 that allow storing of such components;
810 o MUST support CALDAV:free-busy-query REPORTs that aggregate the
811 information in any "VAVAILABILITY" components in the calendar
812 collections targeted by the request;
814 o MUST support "VAVAILABILITY" components stored in a
815 CALDAV:calendar-availability Web Distributed Authoring and
816 Versioning (WebDAV) property on a CalDAV scheduling Inbox
817 collection, if the CalDAV calendar-auto-schedule feature is
820 o MUST support iTIP [RFC5546] free-busy requests that aggregate the
821 information in any "VAVAILABILITY" components in calendar
822 collections that contribute to free-busy, or in any
823 "VAVAILABILITY" components stored in the CALDAV:calendar-
824 availability property on the CalDAV scheduling Inbox collection of
825 the calendar user targeted by the iTIP free-busy request, if the
826 CalDAV calendar-auto-schedule feature is available.
828 Processing of "VAVAILABILITY" components MUST conform to all the
829 requirements CalDAV imposes on calendar object resources (see
830 Section 4.1 of [RFC4791]).
842Daboo & Douglass Standards Track [Page 15]
844RFC 7953 Calendar Availability August 2016
8477.2. New Features in CalDAV
8497.2.1. Calendar Availability Support
851 A server supporting the features described in this document MUST
852 include "calendar-availability" as a field in the DAV response header
853 from an OPTIONS request. A value of "calendar-availability" in the
854 DAV response header indicates to clients that the server supports all
855 the requirements specified in this document.
8577.2.1.1. Example: Using OPTIONS for the Discovery of Calendar
862 OPTIONS /home/bernard/calendars/ HTTP/1.1
863 Host: cal.example.com
868 Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE
869 Allow: PROPFIND, PROPPATCH, LOCK, UNLOCK, REPORT, ACL
870 DAV: 1, 2, 3, access-control, calendar-access,
871 calendar-availability
872 Date: Fri, 11 Nov 2005 09:32:12 GMT
875 In this example, the OPTIONS method returns the value "calendar-
876 availability" in the DAV response header to indicate that the
877 collection "/home/bernard/calendars/" supports the new features
878 defined in this specification.
8807.2.2. CalDAV Time Range Queries
882 Section 9.9 of [RFC4791] describes how to specify time ranges to
883 limit the set of calendar components returned by the server. This
884 specification extends [RFC4791] to describe how to apply time range
885 filtering to "VAVAILABILITY" components.
887 A "VAVAILABILITY" component is said to overlap a given time range if
888 the condition for the corresponding component state specified in the
889 table below is satisfied. The conditions depend on the presence of
890 the "DTSTART", "DTEND", and "DURATION" properties in the
891 "VAVAILABILITY" component. Note that, as specified above, the
892 "DTEND" value MUST be a "DATE-TIME" value equal to or after the
893 "DTSTART" value, if specified.
898Daboo & Douglass Standards Track [Page 16]
900RFC 7953 Calendar Availability August 2016
903 +------------------------------------------------------------+
904 | VAVAILABILITY has the DTSTART property? |
905 | +--------------------------------------------------------+
906 | | VAVAILABILITY has the DTEND property? |
907 | | +----------------------------------------------------+
908 | | | VAVAILABILITY has the DURATION property? |
909 | | | +------------------------------------------------+
910 | | | | Condition to evaluate |
911 +---+---+---+------------------------------------------------+
912 | Y | Y | N | (start < DTEND AND end > DTSTART) |
913 +---+---+---+------------------------------------------------+
914 | Y | N | Y | (start < DTSTART+DURATION AND end > DTSTART) |
915 +---+---+---+------------------------------------------------+
916 | Y | N | N | (end > DTSTART) |
917 +---+---+---+------------------------------------------------+
918 | N | Y | N | (start < DTEND) |
919 +---+---+---+------------------------------------------------+
921 +---+---+---+------------------------------------------------+
9237.2.3. CALDAV:free-busy-query REPORT
925 A CALDAV:free-busy-query REPORT can be executed on a calendar
926 collection that contains iCalendar "VAVAILABILITY" components. When
927 that occurs, the server MUST aggregate the information in any
928 "VAVAILABILITY" components when generating the free-busy response, as
929 described in Section 5.
9317.2.4. CALDAV:calendar-availability Property
933 Name: calendar-availability
935 Namespace: urn:ietf:params:xml:ns:caldav
937 Purpose: Defines a "VAVAILABILITY" component that will be used in
938 calculating free-busy time when an iTIP free-busy request is
939 targeted at the calendar user who owns the Inbox.
941 Conformance: This property MAY be protected and SHOULD NOT be
942 returned by a PROPFIND DAV:allprop request. Support for this
943 property is REQUIRED. The value of this property MUST be a valid
944 iCalendar object containing only one "VAVAILABILITY" component,
945 and optionally, "VTIMEZONE" components - other iCalendar
946 components MUST NOT be present. "VTIMEZONE" components SHOULD NOT
947 be present if [RFC7809] is in effect. For more complex
948 availability scenarios, clients can store multiple "VAVAILABILITY"
949 components in the calendar user's calendar collections.
954Daboo & Douglass Standards Track [Page 17]
956RFC 7953 Calendar Availability August 2016
959 Description: This property allows a user to specify their
960 availability by including an "VAVAILABILITY" component in the
961 value of this property. If present, the server MUST use this
962 "VAVAILABILITY" component when determining free-busy information
963 as part of an iTIP free-busy request being handled by the server.
967 <!ELEMENT calendar-availability (#PCDATA) >
968 ; Data value MUST be an iCalendar object containing
969 ; "VAVAILABILITY" or "VTIMEZONE" components.
973 <C:calendar-availability xmlns:D="DAV:"
974 xmlns:C="urn:ietf:params:xml:ns:caldav"
977 PRODID:-//example.com//iCalendar 2.0//EN
980 UID:9BADC1F6-0FC4-44BF-AC3D-993BEC8C962A
981 DTSTAMP:20111005T133225Z
982 DTSTART;TZID=America/Montreal:20111002T000000
984 UID:6C9F69C3-BDA8-424E-B2CB-7012E796DDF7
985 SUMMARY:Monday to Friday from 9:00 to 18:00
986 DTSTART;TZID=America/Montreal:20111002T090000
987 DTEND;TZID=America/Montreal:20111002T180000
988 RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
992 </C:calendar-availability>
9947.2.5. iTIP Free-Busy Requests
996 The CalDAV calendar-auto-schedule feature (see Section 5 of
997 [RFC6638]) includes a mechanism for free-busy information to be
998 requested via the CalDAV protocol. Any "VAVAILABILITY" components in
999 any calendar collections targeted during such a request MUST be
1000 included as part of the calculation of the overall free-busy
1001 information. In addition, the "VAVAILABILITY" component specified in
1002 the CALDAV:calendar-availability property on the owner's Inbox MUST
1003 also be included in the free-busy calculation. Processing of all
1004 such "VAVAILABILITY" components is done as per Section 5.
1010Daboo & Douglass Standards Track [Page 18]
1012RFC 7953 Calendar Availability August 2016
10158. Security Considerations
1017 Calculation of availability information, particularly with multiple
1018 overlapping time ranges, can be complex, and CalDAV servers MUST
1019 limit the complexity of such data stored by a client.
1021 An attacker able to "inject" availability information into a calendar
1022 user's calendar data could ensure that the user never appears free
1023 for meetings or appears free at inappropriate times. Calendar
1024 systems MUST ensure that availability information for a calendar user
1025 can only be modified by authorized users.
1027 Security considerations in [RFC5545], [RFC5546], [RFC4791],
1028 [RFC6638], and [RFC7809] MUST also be adhered to.
10309. Privacy Considerations
1032 Free-busy and availability information can be used by attackers to
1033 infer the whereabouts or overall level of "activity" of the
1034 corresponding calendar user. Any calendar system that allows a user
1035 to expose their free-busy and availability information MUST limit
1036 access to that information to only authorized users.
1038 When "VAVAILABILITY" components are sent to or shared with other
1039 calendar users, care has to be taken not to expose more information
1040 than is needed by each recipient. For example, a business owner will
1041 likely not want their customers to know where they might be or what
1042 they might be doing, but family members might be willing to expose
1043 such information to each other. Thus, calendaring systems allowing
1044 "VAVAILABILITY" components to be sent or shared to other calendar
1045 users MUST provide a way for nonessential properties to be removed
1046 (e.g., "SUMMARY", "LOCATION", and "DESCRIPTION").
1048 iCalendar "VFREEBUSY" information generated from "VAVAILABILITY"
1049 components MUST NOT include information other than busy or free time
1050 periods. In particular, user specified property values such as
1051 "SUMMARY", "LOCATION", and "DESCRIPTION" MUST NOT be copied into the
1052 free-busy result data.
1054 Privacy considerations in [RFC5545], [RFC5546], [RFC4791], [RFC6638],
1055 and [RFC7809] MUST also be adhered to.
1066Daboo & Douglass Standards Track [Page 19]
1068RFC 7953 Calendar Availability August 2016
107110. IANA Considerations
107310.1. Component Registrations
1075 This document defines the following new iCalendar components, which
1076 have been added to the registry defined in Section 8.3.1 of
1079 +---------------+---------+------------------------+
1080 | Component | Status | Reference |
1081 +---------------+---------+------------------------+
1082 | VAVAILABILITY | Current | RFC 7953, Section 3.1 |
1083 | AVAILABLE | Current | RFC 7953, Section 3.1 |
1084 +---------------+---------+------------------------+
108610.2. Property Registrations
1088 This documents defines the following new iCalendar properties, which
1089 have been added to the registry defined in Section 8.3.2 of
1092 +----------+---------+------------------------+
1093 | Property | Status | Reference |
1094 +----------+---------+------------------------+
1095 | BUSYTYPE | Current | RFC 7953, Section 3.2 |
1096 +----------+---------+------------------------+
109811. Normative References
1100 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
1101 Requirement Levels", BCP 14, RFC 2119,
1102 DOI 10.17487/RFC2119, March 1997,
1103 <http://www.rfc-editor.org/info/rfc2119>.
1105 [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault,
1106 "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791,
1107 DOI 10.17487/RFC4791, March 2007,
1108 <http://www.rfc-editor.org/info/rfc4791>.
1110 [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and
1111 Scheduling Core Object Specification (iCalendar)",
1112 RFC 5545, DOI 10.17487/RFC5545, September 2009,
1113 <http://www.rfc-editor.org/info/rfc5545>.
1115 [RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent
1116 Interoperability Protocol (iTIP)", RFC 5546,
1117 DOI 10.17487/RFC5546, December 2009,
1118 <http://www.rfc-editor.org/info/rfc5546>.
1122Daboo & Douglass Standards Track [Page 20]
1124RFC 7953 Calendar Availability August 2016
1127 [RFC6638] Daboo, C. and B. Desruisseaux, "Scheduling Extensions to
1128 CalDAV", RFC 6638, DOI 10.17487/RFC6638, June 2012,
1129 <http://www.rfc-editor.org/info/rfc6638>.
1131 [RFC7809] Daboo, C., "Calendaring Extensions to WebDAV (CalDAV):
1132 Time Zones by Reference", RFC 7809, DOI 10.17487/RFC7809,
1133 March 2016, <http://www.rfc-editor.org/info/rfc7809>.
1178Daboo & Douglass Standards Track [Page 21]
1180RFC 7953 Calendar Availability August 2016
1183Appendix A. Example Calendar #1
1187 PRODID:-//example.com//iCalendar 2.0//EN
1190 DTSTAMP:20111113T044111Z
1191 DTSTART;TZID=America/Montreal:20111106T120000
1194 UID:768CB0C2-8642-43F7-A6C4-F8BB04B829B4
1197 UID:452DFCA7-3203-4A3D-9A9A-99753A383B41
1198 DTSTAMP:20111005T133225Z
1199 DTSTART;TZID=America/Montreal:20111002T000000
1201 UID:466D5C68-5C4A-4078-AF5D-9C55EA9145D7
1202 SUMMARY:Monday to Friday from 8:00 to 18:00
1203 DTSTART;TZID=America/Montreal:20111002T080000
1204 DTEND;TZID=America/Montreal:20111002T180000
1205 RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
1234Daboo & Douglass Standards Track [Page 22]
1236RFC 7953 Calendar Availability August 2016
1239Appendix B. Example Calendar #2
1243 PRODID:-//example.com//iCalendar 2.0//EN
1246 DTSTAMP:20111113T044111Z
1247 DTSTART;TZID=America/Denver:20111106T120000
1249 SUMMARY:Lunch meeting in Denver
1250 UID:2346C09A-42BF-439E-916C-FC83AF869171
1253 ORGANIZER:mailto:bernard@example.com
1254 UID:627A87FA-E5F1-43C0-B3B1-567DA10F2A83
1255 DTSTAMP:20111005T133225Z
1256 DTSTART;TZID=America/Montreal:20111002T000000
1258 UID:A833E850-892B-43F6-98B6-C15A6BFC5D27
1259 SUMMARY:Monday to Friday from 9:00 to 17:00
1260 DTSTART;TZID=America/Montreal:20111002T080000
1261 DTEND;TZID=America/Montreal:20111002T180000
1262 RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
1267 ORGANIZER:mailto:bernard@example.com
1268 UID:F01411E3-38B8-4490-8A1F-0CCEC57A0943
1269 DTSTAMP:20111005T133225Z
1270 DTSTART;TZID=America/Denver:20111023T000000
1271 DTEND;TZID=America/Denver:20111030T000000
1274 UID:A35AA091-3846-48ED-96F6-881E8A0D0A93
1275 SUMMARY:Monday to Friday from 9:00 to 17:00
1276 DTSTART;TZID=America/Denver:20111023T080000
1277 DTEND;TZID=America/Denver:20111023T180000
1278 RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
1290Daboo & Douglass Standards Track [Page 23]
1292RFC 7953 Calendar Availability August 2016
1297 Thanks to the following for providing feedback: Toby Considine,
1298 Bernard Desruisseaux, Alexey Melnikov, Daniel Migault, Ken Murchison,
1299 Evert Pot, and Dave Thewlis. This specification came about via
1300 discussions at the Calendaring and Scheduling Consortium.
1308 United States of America
1310 Email: cyrus@daboo.name
1311 URI: http://www.apple.com/
1318 United States of America
1320 Email: mdouglass@sphericalcowgroup.com
1321 URI: http://sphericalcowgroup.com
1346Daboo & Douglass Standards Track [Page 24]