1
2
3
4
5
6
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
12
13
14 Calendar Availability
15
16Abstract
17
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.
25
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.
30
31Status of This Memo
32
33 This is an Internet Standards Track document.
34
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.
40
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.
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58Daboo & Douglass Standards Track [Page 1]
59
60RFC 7953 Calendar Availability August 2016
61
62
63Copyright Notice
64
65 Copyright (c) 2016 IETF Trust and the persons identified as the
66 document authors. All rights reserved.
67
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.
77
78Table of Contents
79
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
102
103
104
105
106
107
108
109
110
111
112
113
114Daboo & Douglass Standards Track [Page 2]
115
116RFC 7953 Calendar Availability August 2016
117
118
1191. Introduction
120
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.
133
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.
139
140 This specification defines a new type of iCalendar component that can
141 be used to publish user availability.
142
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.
153
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
158 present.
159
1602. Conventions Used in This Document
161
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
165 [RFC2119].
166
167
168
169
170Daboo & Douglass Standards Track [Page 3]
171
172RFC 7953 Calendar Availability August 2016
173
174
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.
179
1803. iCalendar Extensions
181
182 This specification adds a new "VAVAILABILITY" calendar component to
183 iCalendar. The "VAVAILABILITY" component is itself a container for
184 new "AVAILABLE" subcomponents.
185
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.
192
193 An illustration of how "VAVAILABILITY" and "AVAILABLE" components
194 work is shown below.
195
196 Time Range
197 <=========================================================>
198
199 +-------------------------------------------------+
200 | VAVAILABILITY |
201 +-------------------------------------------------+
202 +------------+ +------------+
203 | AVAILABLE | | AVAILABLE |
204 +------------+ +------------+
205
206 <-> <-----> <-----------> Busy Time
207
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.
213
2143.1. VAVAILABILITY Component
215
216 Component Name: VAVAILABILITY
217
218 Purpose: Provide a grouping of component properties and
219 subcomponents that describe the availability associated with a
220 calendar user.
221
222
223
224
225
226Daboo & Douglass Standards Track [Page 4]
227
228RFC 7953 Calendar Availability August 2016
229
230
231 Format Definition: A "VAVAILABILITY" calendar component is defined
232 by the following notation:
233
234 availabilityc = "BEGIN" ":" "VAVAILABILITY" CRLF
235 availabilityprop *availablec
236 "END" ":" "VAVAILABILITY" CRLF
237
238 availabilityprop = *(
239 ;
240 ; the following are REQUIRED
241 ; but MUST NOT occur more than once
242 ;
243 dtstamp / uid
244 ;
245 ; the following are OPTIONAL
246 ; but MUST NOT occur more than once
247 ;
248 busytype / class / created / description /
249 dtstart / last-mod / location / organizer /
250 priority /seq / summary / url /
251 ;
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
258 ;
259 dtend / duration /
260 ;
261 ; the following are OPTIONAL
262 ; and MAY occur more than once
263 ;
264 categories / comment / contact /
265 x-prop / iana-prop
266 ;
267 )
268
269 availablec = "BEGIN" ":" "AVAILABLE" CRLF
270 availableprop
271 "END" ":" "AVAILABLE" CRLF
272
273
274
275
276
277
278
279
280
281
282Daboo & Douglass Standards Track [Page 5]
283
284RFC 7953 Calendar Availability August 2016
285
286
287 availableprop = *(
288 ;
289 ; the following are REQUIRED
290 ; but MUST NOT occur more than once
291 ;
292 dtstamp / dtstart / uid /
293 ;
294 ; Either 'dtend' or 'duration' MAY appear in
295 ; an 'availableprop', but 'dtend' and
296 ; 'duration' MUST NOT occur in the same
297 ; 'availableprop'.
298 ;
299 dtend / duration /
300 ;
301 ; the following are OPTIONAL
302 ; but MUST NOT occur more than once
303 ;
304 created / description / last-mod /
305 location / recurid / rrule / summary /
306 ;
307 ; the following are OPTIONAL
308 ; and MAY occur more than once
309 ;
310 categories / comment / contact / exdate /
311 rdate / x-prop / iana-prop
312 ;
313 )
314
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.
324
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).
331
332
333
334
335
336
337
338Daboo & Douglass Standards Track [Page 6]
339
340RFC 7953 Calendar Availability August 2016
341
342
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.
347
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.
352
353 When used to publish available time, the "ORGANIZER" property
354 specifies the calendar user associated with the published
355 available time.
356
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.
360
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).
368
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:
373
374 BEGIN:VAVAILABILITY
375 ORGANIZER:mailto:bernard@example.com
376 UID:0428C7D2-688E-4D2E-AC52-CD112E2469DF
377 DTSTAMP:20111005T133225Z
378 BEGIN:AVAILABLE
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
384 END:AVAILABLE
385 END:VAVAILABILITY
386
387
388
389
390
391
392
393
394Daboo & Douglass Standards Track [Page 7]
395
396RFC 7953 Calendar Availability August 2016
397
398
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
404 2011:
405
406 BEGIN:VAVAILABILITY
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
412 BEGIN:AVAILABLE
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
418 LOCATION:Main Office
419 END:AVAILABLE
420 BEGIN:AVAILABLE
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
425 RRULE:FREQ=WEEKLY
426 LOCATION:Branch Office
427 END:AVAILABLE
428 END:VAVAILABILITY
429
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.
439
440
441
442
443
444
445
446
447
448
449
450Daboo & Douglass Standards Track [Page 8]
451
452RFC 7953 Calendar Availability August 2016
453
454
455 BEGIN:VAVAILABILITY
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
461 BEGIN:AVAILABLE
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
467 LOCATION:Montreal
468 END:AVAILABLE
469 END:VAVAILABILITY
470 BEGIN:VAVAILABILITY
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
476 BEGIN:AVAILABLE
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
482 LOCATION:Denver
483 END:AVAILABLE
484 END:VAVAILABILITY
485 BEGIN:VAVAILABILITY
486 ORGANIZER:mailto:bernard@example.com
487 UID:1852F9E1-E0AA-4572-B4C4-ED1680A4DA40
488 DTSTAMP:20111005T133225Z
489 DTSTART;TZID=America/Montreal:20111030T030000
490 BEGIN:AVAILABLE
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
496 LOCATION:Montreal
497 END:AVAILABLE
498 END:VAVAILABILITY
499
500
501
502
503
504
505
506Daboo & Douglass Standards Track [Page 9]
507
508RFC 7953 Calendar Availability August 2016
509
510
5113.2. Busy Time Type
512
513 Property Name: BUSYTYPE
514
515 Purpose: This property specifies the default busy time type.
516
517 Value Type: TEXT
518
519 Property Parameters: IANA and nonstandard property parameters can be
520 specified on this property.
521
522 Conformance: This property can be specified within "VAVAILABILITY"
523 calendar components.
524
525 Format Definition: This property is defined by the following
526 notation:
527
528 busytype = "BUSYTYPE" busytypeparam ":" busytypevalue CRLF
529
530 busytypeparam = *(";" other-param)
531
532 busytypevalue = "BUSY" / "BUSY-UNAVAILABLE" /
533 "BUSY-TENTATIVE" / iana-token / x-name
534 ; Default is "BUSY-UNAVAILABLE".
535
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-
541 UNAVAILABLE".
542
543 Example: The following is an example of this property:
544
545 BUSYTYPE:BUSY
546
5474. Combining VAVAILABILITY Components
548
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
552 from year to year.
553
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
559
560
561
562Daboo & Douglass Standards Track [Page 10]
563
564RFC 7953 Calendar Availability August 2016
565
566
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.
570
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.
581
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).
585
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.
590
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.
594
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.
613
614
615
616
617
618Daboo & Douglass Standards Track [Page 11]
619
620RFC 7953 Calendar Availability August 2016
621
622
623 +-----+----+----+-----+----+-----+----+-----+----+------+
624 | Low | | | | | | | | | High |
625 +-----+----+----+-----+----+-----+----+-----+----+------+
626 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
627 +-----+----+----+-----+----+-----+----+-----+----+------+
628 | {a} | | | {c} | | {b} | | {d} | | |
629 +-----+----+----+-----+----+-----+----+-----+----+------+
630
6315. Calculating Free-Busy Time
632
633 This section describes how free-busy time information for a calendar
634 user is calculated in the presence of "VAVAILABILITY" calendar
635 components.
636
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).
642
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.
648
649 An example procedure for this is as follows:
650
651 1. Initially mark the entire period of the free-busy request as
652 free.
653
654 2. For each "VAVAILABILITY" component ordered by PRIORITY (lowest to
655 highest):
656
657 A. Determine if the "VAVAILABILITY" intersects the time range of
658 the free-busy request. If not, ignore it.
659
660 B. Determine if the "VAVAILABILITY" is completely overridden by
661 a higher priority component. If so, ignore it.
662
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.
667
668 D. Append the "VAVAILABILITY" component to a list of components
669 for further processing in step 3, if it has not been ignored.
670
671
672
673
674Daboo & Douglass Standards Track [Page 12]
675
676RFC 7953 Calendar Availability August 2016
677
678
679 3. For each "VAVAILABILITY" component in the list resulting from
680 step 2, in order from the first item to the last item:
681
682 A. For each "AVAILABLE" component in the "VAVAILABILITY"
683 component:
684
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.
690
691 ii. For each instance, mark the corresponding time in the
692 free-busy request result set as free.
693
694 4. For each "VEVENT" or "VFREEBUSY" component, apply normal free-
695 busy processing within the free-busy request time range.
696
6975.1. Examples
698
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.
704
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:
709
710 F Represents "FREE" time in that slot.
711
712 B Represents "BUSY" time in that slot.
713
714 U Represents "BUSY-UNAVAILABLE" time in that slot.
715
716 T Represents "BUSY-TENTATIVE" time in that slot.
717
718 I Represents data to be ignored in that slot (as per step 2.B
719 above).
720
7215.1.1. Simple Example
722
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.
727
728
729
730Daboo & Douglass Standards Track [Page 13]
731
732RFC 7953 Calendar Availability August 2016
733
734
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.
738
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 +------+----+----+----+----+----+----+----+----+----+----+----+----+
747
7485.1.2. Further Example
749
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).
760
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).
771
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 +------+----+----+----+----+----+----+----+----+----+----+----+----+
781
782
783
784
785
786Daboo & Douglass Standards Track [Page 14]
787
788RFC 7953 Calendar Availability August 2016
789
790
7916. Use with iTIP
792
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.
797
7987. CalDAV Extensions
799
8007.1. CalDAV Requirements Overview
801
802 This section lists what functionality is required of a CalDAV server,
803 which supports "VAVAILABILITY" components in stored calendar data. A
804 server:
805
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;
809
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;
813
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
818 supported;
819
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.
827
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]).
831
832
833
834
835
836
837
838
839
840
841
842Daboo & Douglass Standards Track [Page 15]
843
844RFC 7953 Calendar Availability August 2016
845
846
8477.2. New Features in CalDAV
848
8497.2.1. Calendar Availability Support
850
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.
856
8577.2.1.1. Example: Using OPTIONS for the Discovery of Calendar
858 Availability Support
859
860 >> Request <<
861
862 OPTIONS /home/bernard/calendars/ HTTP/1.1
863 Host: cal.example.com
864
865 >> Response <<
866
867 HTTP/1.1 200 OK
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
873 Content-Length: 0
874
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.
879
8807.2.2. CalDAV Time Range Queries
881
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.
886
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.
894
895
896
897
898Daboo & Douglass Standards Track [Page 16]
899
900RFC 7953 Calendar Availability August 2016
901
902
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 +---+---+---+------------------------------------------------+
920 | N | N | * | TRUE |
921 +---+---+---+------------------------------------------------+
922
9237.2.3. CALDAV:free-busy-query REPORT
924
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.
930
9317.2.4. CALDAV:calendar-availability Property
932
933 Name: calendar-availability
934
935 Namespace: urn:ietf:params:xml:ns:caldav
936
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.
940
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.
950
951
952
953
954Daboo & Douglass Standards Track [Page 17]
955
956RFC 7953 Calendar Availability August 2016
957
958
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.
964
965 Definition:
966
967 <!ELEMENT calendar-availability (#PCDATA) >
968 ; Data value MUST be an iCalendar object containing
969 ; "VAVAILABILITY" or "VTIMEZONE" components.
970
971 Example:
972
973 <C:calendar-availability xmlns:D="DAV:"
974 xmlns:C="urn:ietf:params:xml:ns:caldav"
975 >BEGIN:VCALENDAR
976 CALSCALE:GREGORIAN
977 PRODID:-//example.com//iCalendar 2.0//EN
978 VERSION:2.0
979 BEGIN:VAVAILABILITY
980 UID:9BADC1F6-0FC4-44BF-AC3D-993BEC8C962A
981 DTSTAMP:20111005T133225Z
982 DTSTART;TZID=America/Montreal:20111002T000000
983 BEGIN:AVAILABLE
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
989 END:AVAILABLE
990 END:VAVAILABILITY
991 END:VCALENDAR
992 </C:calendar-availability>
993
9947.2.5. iTIP Free-Busy Requests
995
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.
1005
1006
1007
1008
1009
1010Daboo & Douglass Standards Track [Page 18]
1011
1012RFC 7953 Calendar Availability August 2016
1013
1014
10158. Security Considerations
1016
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.
1020
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.
1026
1027 Security considerations in [RFC5545], [RFC5546], [RFC4791],
1028 [RFC6638], and [RFC7809] MUST also be adhered to.
1029
10309. Privacy Considerations
1031
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.
1037
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").
1047
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.
1053
1054 Privacy considerations in [RFC5545], [RFC5546], [RFC4791], [RFC6638],
1055 and [RFC7809] MUST also be adhered to.
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066Daboo & Douglass Standards Track [Page 19]
1067
1068RFC 7953 Calendar Availability August 2016
1069
1070
107110. IANA Considerations
1072
107310.1. Component Registrations
1074
1075 This document defines the following new iCalendar components, which
1076 have been added to the registry defined in Section 8.3.1 of
1077 [RFC5545]:
1078
1079 +---------------+---------+------------------------+
1080 | Component | Status | Reference |
1081 +---------------+---------+------------------------+
1082 | VAVAILABILITY | Current | RFC 7953, Section 3.1 |
1083 | AVAILABLE | Current | RFC 7953, Section 3.1 |
1084 +---------------+---------+------------------------+
1085
108610.2. Property Registrations
1087
1088 This documents defines the following new iCalendar properties, which
1089 have been added to the registry defined in Section 8.3.2 of
1090 [RFC5545]:
1091
1092 +----------+---------+------------------------+
1093 | Property | Status | Reference |
1094 +----------+---------+------------------------+
1095 | BUSYTYPE | Current | RFC 7953, Section 3.2 |
1096 +----------+---------+------------------------+
1097
109811. Normative References
1099
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>.
1104
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>.
1109
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>.
1114
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>.
1119
1120
1121
1122Daboo & Douglass Standards Track [Page 20]
1123
1124RFC 7953 Calendar Availability August 2016
1125
1126
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>.
1130
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>.
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178Daboo & Douglass Standards Track [Page 21]
1179
1180RFC 7953 Calendar Availability August 2016
1181
1182
1183Appendix A. Example Calendar #1
1184
1185 BEGIN:VCALENDAR
1186 CALSCALE:GREGORIAN
1187 PRODID:-//example.com//iCalendar 2.0//EN
1188 VERSION:2.0
1189 BEGIN:VEVENT
1190 DTSTAMP:20111113T044111Z
1191 DTSTART;TZID=America/Montreal:20111106T120000
1192 DURATION:PT2H
1193 SUMMARY:Meeting
1194 UID:768CB0C2-8642-43F7-A6C4-F8BB04B829B4
1195 END:VEVENT
1196 BEGIN:VAVAILABILITY
1197 UID:452DFCA7-3203-4A3D-9A9A-99753A383B41
1198 DTSTAMP:20111005T133225Z
1199 DTSTART;TZID=America/Montreal:20111002T000000
1200 BEGIN:AVAILABLE
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
1206 END:AVAILABLE
1207 END:VAVAILABILITY
1208 END:VCALENDAR
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234Daboo & Douglass Standards Track [Page 22]
1235
1236RFC 7953 Calendar Availability August 2016
1237
1238
1239Appendix B. Example Calendar #2
1240
1241 BEGIN:VCALENDAR
1242 CALSCALE:GREGORIAN
1243 PRODID:-//example.com//iCalendar 2.0//EN
1244 VERSION:2.0
1245 BEGIN:VEVENT
1246 DTSTAMP:20111113T044111Z
1247 DTSTART;TZID=America/Denver:20111106T120000
1248 DURATION:PT2H
1249 SUMMARY:Lunch meeting in Denver
1250 UID:2346C09A-42BF-439E-916C-FC83AF869171
1251 END:VEVENT
1252 BEGIN:VAVAILABILITY
1253 ORGANIZER:mailto:bernard@example.com
1254 UID:627A87FA-E5F1-43C0-B3B1-567DA10F2A83
1255 DTSTAMP:20111005T133225Z
1256 DTSTART;TZID=America/Montreal:20111002T000000
1257 BEGIN:AVAILABLE
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
1263 LOCATION:Montreal
1264 END:AVAILABLE
1265 END:VAVAILABILITY
1266 BEGIN:VAVAILABILITY
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
1272 PRIORITY:1
1273 BEGIN:AVAILABLE
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
1279 LOCATION:Denver
1280 END:AVAILABLE
1281 END:VAVAILABILITY
1282 END:VCALENDAR
1283
1284
1285
1286
1287
1288
1289
1290Daboo & Douglass Standards Track [Page 23]
1291
1292RFC 7953 Calendar Availability August 2016
1293
1294
1295Acknowledgements
1296
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.
1301
1302Authors' Addresses
1303
1304 Cyrus Daboo
1305 Apple Inc.
1306 1 Infinite Loop
1307 Cupertino, CA 95014
1308 United States of America
1309
1310 Email: cyrus@daboo.name
1311 URI: http://www.apple.com/
1312
1313
1314 Michael Douglass
1315 Spherical Cow Group
1316 226 3rd Street
1317 Troy, NY 12180
1318 United States of America
1319
1320 Email: mdouglass@sphericalcowgroup.com
1321 URI: http://sphericalcowgroup.com
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346Daboo & Douglass Standards Track [Page 24]
1347
1348