summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc7953.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc7953.txt')
-rw-r--r--doc/rfc/rfc7953.txt1347
1 files changed, 1347 insertions, 0 deletions
diff --git a/doc/rfc/rfc7953.txt b/doc/rfc/rfc7953.txt
new file mode 100644
index 0000000..6348c23
--- /dev/null
+++ b/doc/rfc/rfc7953.txt
@@ -0,0 +1,1347 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) C. Daboo
+Request for Comments: 7953 Apple
+Updates: 4791, 5545, 6638 M. Douglass
+Category: Standards Track Spherical Cow Group
+ISSN: 2070-1721 August 2016
+
+
+ Calendar Availability
+
+Abstract
+
+ This document specifies a new iCalendar (RFC 5545) component that
+ allows the publication of available and unavailable time periods
+ associated with a calendar user. This component can be used in
+ standard iCalendar free-busy lookups, including the iCalendar
+ Transport-independent Interoperability Protocol (iTIP; RFC 5546)
+ free-busy requests, to generate repeating blocks of available or busy
+ time with exceptions as needed.
+
+ This document also defines extensions to the Calendaring Extensions
+ to WebDAV (CalDAV) calendar access protocol (RFC 4791) and the
+ associated scheduling protocol (RFC 6638) to specify how this new
+ calendar component can be used when evaluating free-busy time.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ http://www.rfc-editor.org/info/rfc7953.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 1]
+
+RFC 7953 Calendar Availability August 2016
+
+
+Copyright Notice
+
+ Copyright (c) 2016 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (http://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 2. Conventions Used in This Document . . . . . . . . . . . . . . 3
+ 3. iCalendar Extensions . . . . . . . . . . . . . . . . . . . . 4
+ 3.1. VAVAILABILITY Component . . . . . . . . . . . . . . . . . 4
+ 3.2. Busy Time Type . . . . . . . . . . . . . . . . . . . . . 10
+ 4. Combining VAVAILABILITY Components . . . . . . . . . . . . . 10
+ 5. Calculating Free-Busy Time . . . . . . . . . . . . . . . . . 12
+ 5.1. Examples . . . . . . . . . . . . . . . . . . . . . . . . 13
+ 6. Use with iTIP . . . . . . . . . . . . . . . . . . . . . . . . 15
+ 7. CalDAV Extensions . . . . . . . . . . . . . . . . . . . . . . 15
+ 7.1. CalDAV Requirements Overview . . . . . . . . . . . . . . 15
+ 7.2. New Features in CalDAV . . . . . . . . . . . . . . . . . 16
+ 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19
+ 9. Privacy Considerations . . . . . . . . . . . . . . . . . . . 19
+ 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20
+ 10.1. Component Registrations . . . . . . . . . . . . . . . . 20
+ 10.2. Property Registrations . . . . . . . . . . . . . . . . . 20
+ 11. Normative References . . . . . . . . . . . . . . . . . . . . 20
+ Appendix A. Example Calendar #1 . . . . . . . . . . . . . . . . 22
+ Appendix B. Example Calendar #2 . . . . . . . . . . . . . . . . 23
+ Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 24
+ Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24
+
+
+
+
+
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 2]
+
+RFC 7953 Calendar Availability August 2016
+
+
+1. Introduction
+
+ Calendar users often have regular periods of time when they are
+ either available to be scheduled or always unavailable. For example,
+ an office worker will often wish only to appear free to their work
+ colleagues during normal 'office hours' (e.g., Monday through Friday,
+ 9 am through 5 pm). Or, a university professor might only be
+ available to students during a set period of time (e.g., Thursday
+ afternoons, 2 pm through 5 pm during term time only). Ideally, users
+ ought be able to specify such periods directly via their calendar
+ user agent and have them automatically considered as part of the
+ normal free-busy lookup for that user. In addition, it ought be
+ possible to present different periods of available time depending on
+ which user is making the request.
+
+ iCalendar [RFC5545] defines a "VFREEBUSY" component that can be used
+ to represent fixed busy time periods, but it does not provide a way
+ to specify a repeating period of available or unavailable time.
+ Since repeating patterns are often the case, "VFREEBUSY" components
+ are not sufficient to solve this problem.
+
+ This specification defines a new type of iCalendar component that can
+ be used to publish user availability.
+
+ CalDAV [RFC4791] provides a way for calendar users to access and
+ manage calendar data and exchange this data via scheduling
+ operations. As part of this, the CalDAV calendar-access [RFC4791]
+ feature provides a CALDAV:free-busy-query REPORT that returns free-
+ busy information for a calendar collection or hierarchy of calendar
+ collections. Also, the CalDAV calendar-auto-schedule [RFC6638]
+ feature allows free-busy information for a calendar user to be
+ determined. Both of these operations involve examining user
+ calendars for events that 'block time', with the blocked out periods
+ being returned in a "VFREEBUSY" component.
+
+ This specification extends the CalDAV calendar-access and CalDAV
+ calendar-auto-schedule features to allow the new iCalendar
+ availability components to be stored and manipulated and to allow
+ free-busy lookups to use the information from any such components, if
+ present.
+
+2. Conventions Used in This Document
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ [RFC2119].
+
+
+
+
+Daboo & Douglass Standards Track [Page 3]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ When XML element types in the namespaces "DAV:" and
+ "urn:ietf:params:xml:ns:caldav" are referenced in this document
+ outside of the context of an XML fragment, the string "DAV:" and
+ "CALDAV:" will be prefixed to the element type names respectively.
+
+3. iCalendar Extensions
+
+ This specification adds a new "VAVAILABILITY" calendar component to
+ iCalendar. The "VAVAILABILITY" component is itself a container for
+ new "AVAILABLE" subcomponents.
+
+ The purpose of the "VAVAILABILITY" calendar component is to provide a
+ grouping of available time information over a specific range of time.
+ Within that, there are specific time ranges that are marked as
+ available via a set of "AVAILABLE" calendar subcomponents. Together
+ these can be used to specify available time that can repeat over set
+ periods of time, and which can vary over time.
+
+ An illustration of how "VAVAILABILITY" and "AVAILABLE" components
+ work is shown below.
+
+ Time Range
+ <=========================================================>
+
+ +-------------------------------------------------+
+ | VAVAILABILITY |
+ +-------------------------------------------------+
+ +------------+ +------------+
+ | AVAILABLE | | AVAILABLE |
+ +------------+ +------------+
+
+ <-> <-----> <-----------> Busy Time
+
+ The overall time range is shown at the top. A "VAVAILABILITY"
+ component spans part of the range. The time range covered by the
+ "VAVAILABILITY" component is considered to be busy, except for the
+ ranges covered by the "AVAILABLE" components within the
+ "VAVAILABILITY" component.
+
+3.1. VAVAILABILITY Component
+
+ Component Name: VAVAILABILITY
+
+ Purpose: Provide a grouping of component properties and
+ subcomponents that describe the availability associated with a
+ calendar user.
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 4]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ Format Definition: A "VAVAILABILITY" calendar component is defined
+ by the following notation:
+
+ availabilityc = "BEGIN" ":" "VAVAILABILITY" CRLF
+ availabilityprop *availablec
+ "END" ":" "VAVAILABILITY" CRLF
+
+ availabilityprop = *(
+ ;
+ ; the following are REQUIRED
+ ; but MUST NOT occur more than once
+ ;
+ dtstamp / uid
+ ;
+ ; the following are OPTIONAL
+ ; but MUST NOT occur more than once
+ ;
+ busytype / class / created / description /
+ dtstart / last-mod / location / organizer /
+ priority /seq / summary / url /
+ ;
+ ; Either 'dtend' or 'duration' MAY appear
+ ; in an 'availableprop', but 'dtend' and
+ ; 'duration' MUST NOT occur in the same
+ ; 'availabilityprop'.
+ ; 'duration' MUST NOT be present if
+ ; 'dtstart' is not present
+ ;
+ dtend / duration /
+ ;
+ ; the following are OPTIONAL
+ ; and MAY occur more than once
+ ;
+ categories / comment / contact /
+ x-prop / iana-prop
+ ;
+ )
+
+ availablec = "BEGIN" ":" "AVAILABLE" CRLF
+ availableprop
+ "END" ":" "AVAILABLE" CRLF
+
+
+
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 5]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ availableprop = *(
+ ;
+ ; the following are REQUIRED
+ ; but MUST NOT occur more than once
+ ;
+ dtstamp / dtstart / uid /
+ ;
+ ; Either 'dtend' or 'duration' MAY appear in
+ ; an 'availableprop', but 'dtend' and
+ ; 'duration' MUST NOT occur in the same
+ ; 'availableprop'.
+ ;
+ dtend / duration /
+ ;
+ ; the following are OPTIONAL
+ ; but MUST NOT occur more than once
+ ;
+ created / description / last-mod /
+ location / recurid / rrule / summary /
+ ;
+ ; the following are OPTIONAL
+ ; and MAY occur more than once
+ ;
+ categories / comment / contact / exdate /
+ rdate / x-prop / iana-prop
+ ;
+ )
+
+ Description: A "VAVAILABILITY" component indicates a period of time
+ within which availability information is provided. A
+ "VAVAILABILITY" component can specify a start time and an end time
+ or duration. If "DTSTART" is not present, then the start time is
+ unbounded. If "DTEND" or "DURATION" are not present, then the end
+ time is unbounded. Within the specified time period, availability
+ defaults to a free-busy type of "BUSY-UNAVAILABLE" (see
+ Section 3.2), except for any time periods corresponding to
+ "AVAILABLE" subcomponents.
+
+ "AVAILABLE" subcomponents are used to indicate periods of free
+ time within the time range of the enclosing "VAVAILABILITY"
+ component. "AVAILABLE" subcomponents MAY include recurrence
+ properties to specify recurring periods of time, which can be
+ overridden using normal iCalendar recurrence behavior (i.e., use
+ of the "RECURRENCE-ID" property).
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 6]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ If specified, the "DTSTART" and "DTEND" properties in
+ "VAVAILABILITY" components and "AVAILABLE" subcomponents MUST be
+ "DATE-TIME" values specified as either the date with UTC time or
+ the date with local time and a time zone reference.
+
+ The iCalendar object containing the "VAVAILABILITY" component MUST
+ contain appropriate "VTIMEZONE" components corresponding to each
+ unique "TZID" parameter value used in any DATE-TIME properties in
+ all components, unless [RFC7809] is in effect.
+
+ When used to publish available time, the "ORGANIZER" property
+ specifies the calendar user associated with the published
+ available time.
+
+ If the "PRIORITY" property is specified in "VAVAILABILITY"
+ components, it is used to determine how that component is combined
+ with other "VAVAILABILITY" components. See Section 4.
+
+ Other calendar properties MAY be specified in "VAVAILABILITY" or
+ "AVAILABLE" components and are considered attributes of the marked
+ block of time. Their usage is application specific. For example,
+ the "LOCATION" property might be used to indicate that a person is
+ available in one location for part of the week and a different
+ location for another part of the week (but see Section 9 for when
+ it is appropriate to add additional data like this).
+
+ Example: The following is an example of a "VAVAILABILITY" calendar
+ component used to represent the availability of a user, always
+ available Monday through Friday, 9:00 am to 5:00 pm in the
+ America/Montreal time zone:
+
+ BEGIN:VAVAILABILITY
+ ORGANIZER:mailto:bernard@example.com
+ UID:0428C7D2-688E-4D2E-AC52-CD112E2469DF
+ DTSTAMP:20111005T133225Z
+ BEGIN:AVAILABLE
+ UID:34EDA59B-6BB1-4E94-A66C-64999089C0AF
+ SUMMARY:Monday to Friday from 9:00 to 17:00
+ DTSTART;TZID=America/Montreal:20111002T090000
+ DTEND;TZID=America/Montreal:20111002T170000
+ RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
+ END:AVAILABLE
+ END:VAVAILABILITY
+
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 7]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ The following is an example of a "VAVAILABILITY" calendar
+ component used to represent the availability of a user available
+ Monday through Thursday, 9:00 am to 5:00 pm, at the main office,
+ and Friday, 9:00 am to 12:00 pm, in the branch office in the
+ America/Montreal time zone between October 2nd and December 2nd
+ 2011:
+
+ BEGIN:VAVAILABILITY
+ ORGANIZER:mailto:bernard@example.com
+ UID:84D0F948-7FC6-4C1D-BBF3-BA9827B424B5
+ DTSTAMP:20111005T133225Z
+ DTSTART;TZID=America/Montreal:20111002T000000
+ DTEND;TZID=America/Montreal:20111202T000000
+ BEGIN:AVAILABLE
+ UID:7B33093A-7F98-4EED-B381-A5652530F04D
+ SUMMARY:Monday to Thursday from 9:00 to 17:00
+ DTSTART;TZID=America/Montreal:20111002T090000
+ DTEND;TZID=America/Montreal:20111002T170000
+ RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH
+ LOCATION:Main Office
+ END:AVAILABLE
+ BEGIN:AVAILABLE
+ UID:DF39DC9E-D8C3-492F-9101-0434E8FC1896
+ SUMMARY:Friday from 9:00 to 12:00
+ DTSTART;TZID=America/Montreal:20111006T090000
+ DTEND;TZID=America/Montreal:20111006T120000
+ RRULE:FREQ=WEEKLY
+ LOCATION:Branch Office
+ END:AVAILABLE
+ END:VAVAILABILITY
+
+ The following is an example of three "VAVAILABILITY" calendar
+ components used to represent the availability of a traveling
+ worker: Monday through Friday, 9:00 am to 5:00 pm each day.
+ However, for three weeks the calendar user is working in Montreal,
+ then one week in Denver, then back to Montreal. Note that each
+ overall period is covered by separate "VAVAILABILITY" components.
+ The last of these has no DTEND so it continues on "forever". This
+ example shows one way "blocks" of available time can be
+ represented. See Section 4 for another approach using priorities.
+
+
+
+
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 8]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ BEGIN:VAVAILABILITY
+ ORGANIZER:mailto:bernard@example.com
+ UID:BE082249-7BDD-4FE0-BDBA-DE6598C32FC9
+ DTSTAMP:20111005T133225Z
+ DTSTART;TZID=America/Montreal:20111002T000000
+ DTEND;TZID=America/Montreal:20111023T030000
+ BEGIN:AVAILABLE
+ UID:54602321-CEDB-4620-9099-757583263981
+ SUMMARY:Monday to Friday from 9:00 to 17:00
+ DTSTART;TZID=America/Montreal:20111002T090000
+ DTEND;TZID=America/Montreal:20111002T170000
+ RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
+ LOCATION:Montreal
+ END:AVAILABLE
+ END:VAVAILABILITY
+ BEGIN:VAVAILABILITY
+ ORGANIZER:mailto:bernard@example.com
+ UID:A1FF55E3-555C-433A-8548-BF4864B5621E
+ DTSTAMP:20111005T133225Z
+ DTSTART;TZID=America/Denver:20111023T000000
+ DTEND;TZID=America/Denver:20111030T000000
+ BEGIN:AVAILABLE
+ UID:57DD4AAF-3835-46B5-8A39-B3B253157F01
+ SUMMARY:Monday to Friday from 9:00 to 17:00
+ DTSTART;TZID=America/Denver:20111023T090000
+ DTEND;TZID=America/Denver:20111023T170000
+ RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
+ LOCATION:Denver
+ END:AVAILABLE
+ END:VAVAILABILITY
+ BEGIN:VAVAILABILITY
+ ORGANIZER:mailto:bernard@example.com
+ UID:1852F9E1-E0AA-4572-B4C4-ED1680A4DA40
+ DTSTAMP:20111005T133225Z
+ DTSTART;TZID=America/Montreal:20111030T030000
+ BEGIN:AVAILABLE
+ UID:D27C421F-16C2-4ECB-8352-C45CA352C72A
+ SUMMARY:Monday to Friday from 9:00 to 17:00
+ DTSTART;TZID=America/Montreal:20111030T090000
+ DTEND;TZID=America/Montreal:20111030T170000
+ RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
+ LOCATION:Montreal
+ END:AVAILABLE
+ END:VAVAILABILITY
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 9]
+
+RFC 7953 Calendar Availability August 2016
+
+
+3.2. Busy Time Type
+
+ Property Name: BUSYTYPE
+
+ Purpose: This property specifies the default busy time type.
+
+ Value Type: TEXT
+
+ Property Parameters: IANA and nonstandard property parameters can be
+ specified on this property.
+
+ Conformance: This property can be specified within "VAVAILABILITY"
+ calendar components.
+
+ Format Definition: This property is defined by the following
+ notation:
+
+ busytype = "BUSYTYPE" busytypeparam ":" busytypevalue CRLF
+
+ busytypeparam = *(";" other-param)
+
+ busytypevalue = "BUSY" / "BUSY-UNAVAILABLE" /
+ "BUSY-TENTATIVE" / iana-token / x-name
+ ; Default is "BUSY-UNAVAILABLE".
+
+ Description: This property is used to specify the default busy time
+ type. The values correspond to those used by the "FBTYPE"
+ parameter used on a "FREEBUSY" property, with the exception that
+ the "FREE" value is not used in this property. If not specified
+ on a component that allows this property, the default is "BUSY-
+ UNAVAILABLE".
+
+ Example: The following is an example of this property:
+
+ BUSYTYPE:BUSY
+
+4. Combining VAVAILABILITY Components
+
+ The "VAVAILABILITY" component allows a calendar user to describe
+ their availability over extended periods of time through the use of
+ recurrence patterns. This availability might be relatively constant
+ from year to year.
+
+ However, there is usually some degree of irregularity, as people take
+ vacations or perhaps spend a few weeks at a different office. For
+ that period of time there is a need to redefine their availability.
+ Rather than modify their existing availability, the "PRIORITY"
+ property allows new "VAVAILABILITY" components to override others of
+
+
+
+Daboo & Douglass Standards Track [Page 10]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ lower ordinal priority. Note that iCalendar [RFC5545] defines the
+ "PRIORITY" property such that a value of 0 is undefined, 1 is the
+ highest priority, and 9 is the lowest.
+
+ When combining "VAVAILABILITY" components, an absence of a "PRIORITY"
+ property or a value of 0 implies the lowest level of priority. When
+ two or more VAVAILABILITY components overlap, and they have the same
+ PRIORITY value, the overlapping busy time type is determined by the
+ following order: BUSY > BUSY-UNAVAILABLE > BUSY-TENTATIVE. That is,
+ if one component has a BUSYTYPE set to BUSY and the other has
+ BUSYTYPE set to BUSY-UNAVAILABLE, then the effective busy time type
+ over the time range that they overlap would be BUSY. It is up to the
+ creator of such components to ensure that combining them produces a
+ consistent and expected result.
+
+ To calculate the available time, order the intersecting
+ "VAVAILABILITY" components by priority (the lowest to highest
+ "PRIORITY" values are 0, 9, 8, 7, 6, 5, 4, 3, 2, 1).
+
+ Step through the resulting list of "VAVAILABILITY" components. For
+ each, the time range covered by the "VAVAILABILITY" component is set
+ to busy and then portions of it defined by the "AVAILABLE" components
+ in the "VAVAILABILITY" component are set to free.
+
+ Note that, if any "VAVAILABILITY" component completely covers the
+ date range of interest, then any lower priority "VAVAILABILITY"
+ components can be ignored.
+
+ Typically, a calendar user's "default" availability (e.g., business
+ hours of Monday through Friday, 9:00 am to 5:00 pm) would use the
+ lowest level of priority: zero. Any overrides to the "default" would
+ use higher levels as needed. To avoid having to keep readjusting the
+ "PRIORITY" property value when an override has to be "inserted"
+ between two existing components, priority values SHOULD be "spaced
+ out" over the full range of values. The table below illustrates this
+ via an example. The first row shows the priority range from low to
+ high, the second row shows the corresponding "PRIORITY" property
+ value, and the third row shows which "VAVAILABILITY" component has
+ that priority. The "default" availability is created with priority
+ zero (shown as {a} in the table), then the first override created
+ with priority 5 (shown as {b} in the table), a subsequent
+ availability can be inserted between the two by using priority 7
+ (shown as {c} in the table), and another, taking precedence over all
+ existing ones, with priority 3 (shown as {d} in the table). As seen
+ in the table, additional "slots" are open for more "VAVAILABILITY"
+ components to be added with other priorities if needed.
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 11]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ +-----+----+----+-----+----+-----+----+-----+----+------+
+ | Low | | | | | | | | | High |
+ +-----+----+----+-----+----+-----+----+-----+----+------+
+ | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
+ +-----+----+----+-----+----+-----+----+-----+----+------+
+ | {a} | | | {c} | | {b} | | {d} | | |
+ +-----+----+----+-----+----+-----+----+-----+----+------+
+
+5. Calculating Free-Busy Time
+
+ This section describes how free-busy time information for a calendar
+ user is calculated in the presence of "VAVAILABILITY" calendar
+ components.
+
+ An iCalendar "VFREEBUSY" component is used to convey "rolled-up"
+ free-busy time information for a calendar user. This can be
+ generated as the result of an iTIP [RFC5546] free-busy request or
+ through some other mechanism (e.g., a CalDAV calendar-access
+ CALDAV:free-busy-query REPORT).
+
+ When one or more "VAVAILABILITY" components are present and intersect
+ the time range for the free-busy request, first the available time is
+ calculated, as outlined in Section 4. Once that is done, regular
+ "VEVENT" and "VFREEBUSY" components can be "overlaid" in the usual
+ way to block out time.
+
+ An example procedure for this is as follows:
+
+ 1. Initially mark the entire period of the free-busy request as
+ free.
+
+ 2. For each "VAVAILABILITY" component ordered by PRIORITY (lowest to
+ highest):
+
+ A. Determine if the "VAVAILABILITY" intersects the time range of
+ the free-busy request. If not, ignore it.
+
+ B. Determine if the "VAVAILABILITY" is completely overridden by
+ a higher priority component. If so, ignore it.
+
+ C. For the time period covered by the "VAVAILABILITY" component,
+ mark time in the free-busy request result set as busy, using
+ the busy time type derived from the "BUSYTYPE" property in
+ the "VAVAILABILITY" component.
+
+ D. Append the "VAVAILABILITY" component to a list of components
+ for further processing in step 3, if it has not been ignored.
+
+
+
+
+Daboo & Douglass Standards Track [Page 12]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ 3. For each "VAVAILABILITY" component in the list resulting from
+ step 2, in order from the first item to the last item:
+
+ A. For each "AVAILABLE" component in the "VAVAILABILITY"
+ component:
+
+ i. Expand all recurring instances, taking into account
+ overridden instances, ignoring instances or parts of
+ instances that fall outside of the free-busy request
+ time range or the time period specified by the
+ "VAVAILABILITY" component.
+
+ ii. For each instance, mark the corresponding time in the
+ free-busy request result set as free.
+
+ 4. For each "VEVENT" or "VFREEBUSY" component, apply normal free-
+ busy processing within the free-busy request time range.
+
+5.1. Examples
+
+ In the examples below, a table is used to represent time slots for
+ the period of a free-busy request. Each time slot is two hours long.
+ The column header represents the hours from midnight local time.
+ Each row below the column headers represents a step in the free-busy
+ result set determination, following the procedure outlined above.
+
+ Each cell in the rows below the column header contains a single
+ character that represents the free-busy type for the corresponding
+ time period at the end of the process step represented by the row.
+ The characters in the row are:
+
+ F Represents "FREE" time in that slot.
+
+ B Represents "BUSY" time in that slot.
+
+ U Represents "BUSY-UNAVAILABLE" time in that slot.
+
+ T Represents "BUSY-TENTATIVE" time in that slot.
+
+ I Represents data to be ignored in that slot (as per step 2.B
+ above).
+
+5.1.1. Simple Example
+
+ Appendix A shows the user's calendar. This includes one
+ "VAVAILABILITY" component giving available time within the requested
+ time range of 8:00 am to 6:00 pm, together with one "VEVENT"
+ component representing a two hour meeting starting at 12:00 pm.
+
+
+
+Daboo & Douglass Standards Track [Page 13]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ A free-busy request for Monday, 6th November 2011, midnight to
+ midnight in the America/Montreal time zone would be calculated as
+ follows using the steps described above.
+
+ +------+----+----+----+----+----+----+----+----+----+----+----+----+
+ | Step | 0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | 22 |
+ +------+----+----+----+----+----+----+----+----+----+----+----+----+
+ | 1. | F | F | F | F | F | F | F | F | F | F | F | F |
+ | 2. | U | U | U | U | U | U | U | U | U | U | U | U |
+ | 3. | U | U | U | U | F | F | F | F | F | U | U | U |
+ | 4. | U | U | U | U | F | F | B | F | F | U | U | U |
+ +------+----+----+----+----+----+----+----+----+----+----+----+----+
+
+5.1.2. Further Example
+
+ Appendix B shows another way to represent the availability of the
+ traveling worker shown above. Here we represent their base
+ availability of Monday through Friday, 8:00 am to 6:00 pm each day
+ with a "VAVAILABILITY" with default "PRIORITY" (there is no "DTEND"
+ property so that this availability is unbounded). For the week the
+ calendar user is working in Denver (October 23rd through October
+ 30th), we represent their availability with a "VAVAILABILITY"
+ component with priority 1, which overrides the base availability.
+ There is also a two hour meeting starting at 12:00 pm (in the
+ America/Denver time zone).
+
+ A free-busy request for Monday, 24th October 2011, midnight to
+ midnight in the America/Montreal time zone, would be calculated as
+ follows using the steps described above. Note that there is a two
+ hour offset in the in the available time, compared to the previous
+ example, due to the two hour difference between the time zone of the
+ free-busy request and the time zone of the user's availability and
+ meeting. "2.P0" shows the base availability, and "2.P1" shows the
+ higher priority availability. "3.P1" only shows the higher priority
+ availability contributing to the overall free-busy since the default
+ availability is ignored (as per step 2.B described above).
+
+ +------+----+----+----+----+----+----+----+----+----+----+----+----+
+ | Step | 0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | 22 |
+ +------+----+----+----+----+----+----+----+----+----+----+----+----+
+ | 1. | F | F | F | F | F | F | F | F | F | F | F | F |
+ | 2.P0 | I | I | I | I | I | I | I | I | I | I | I | I |
+ | 2.P1 | U | U | U | U | U | U | U | U | U | U | U | U |
+ | 3.P1 | U | U | U | U | U | F | F | F | F | F | U | U |
+ | 4. | U | U | U | U | U | F | F | B | F | F | U | U |
+ +------+----+----+----+----+----+----+----+----+----+----+----+----+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 14]
+
+RFC 7953 Calendar Availability August 2016
+
+
+6. Use with iTIP
+
+ This specification does not define how "VAVAILABILITY" components are
+ used in scheduling messages sent using the iTIP [RFC5546] protocol.
+ It is expected that future specifications will define how iTIP
+ scheduling can make use of "VAVAILABILITY" components.
+
+7. CalDAV Extensions
+
+7.1. CalDAV Requirements Overview
+
+ This section lists what functionality is required of a CalDAV server,
+ which supports "VAVAILABILITY" components in stored calendar data. A
+ server:
+
+ o MUST advertise support for "VAVAILABILITY" components in
+ CALDAV:supported-calendar-component-set properties on calendars
+ that allow storing of such components;
+
+ o MUST support CALDAV:free-busy-query REPORTs that aggregate the
+ information in any "VAVAILABILITY" components in the calendar
+ collections targeted by the request;
+
+ o MUST support "VAVAILABILITY" components stored in a
+ CALDAV:calendar-availability Web Distributed Authoring and
+ Versioning (WebDAV) property on a CalDAV scheduling Inbox
+ collection, if the CalDAV calendar-auto-schedule feature is
+ supported;
+
+ o MUST support iTIP [RFC5546] free-busy requests that aggregate the
+ information in any "VAVAILABILITY" components in calendar
+ collections that contribute to free-busy, or in any
+ "VAVAILABILITY" components stored in the CALDAV:calendar-
+ availability property on the CalDAV scheduling Inbox collection of
+ the calendar user targeted by the iTIP free-busy request, if the
+ CalDAV calendar-auto-schedule feature is available.
+
+ Processing of "VAVAILABILITY" components MUST conform to all the
+ requirements CalDAV imposes on calendar object resources (see
+ Section 4.1 of [RFC4791]).
+
+
+
+
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 15]
+
+RFC 7953 Calendar Availability August 2016
+
+
+7.2. New Features in CalDAV
+
+7.2.1. Calendar Availability Support
+
+ A server supporting the features described in this document MUST
+ include "calendar-availability" as a field in the DAV response header
+ from an OPTIONS request. A value of "calendar-availability" in the
+ DAV response header indicates to clients that the server supports all
+ the requirements specified in this document.
+
+7.2.1.1. Example: Using OPTIONS for the Discovery of Calendar
+ Availability Support
+
+ >> Request <<
+
+ OPTIONS /home/bernard/calendars/ HTTP/1.1
+ Host: cal.example.com
+
+ >> Response <<
+
+ HTTP/1.1 200 OK
+ Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE
+ Allow: PROPFIND, PROPPATCH, LOCK, UNLOCK, REPORT, ACL
+ DAV: 1, 2, 3, access-control, calendar-access,
+ calendar-availability
+ Date: Fri, 11 Nov 2005 09:32:12 GMT
+ Content-Length: 0
+
+ In this example, the OPTIONS method returns the value "calendar-
+ availability" in the DAV response header to indicate that the
+ collection "/home/bernard/calendars/" supports the new features
+ defined in this specification.
+
+7.2.2. CalDAV Time Range Queries
+
+ Section 9.9 of [RFC4791] describes how to specify time ranges to
+ limit the set of calendar components returned by the server. This
+ specification extends [RFC4791] to describe how to apply time range
+ filtering to "VAVAILABILITY" components.
+
+ A "VAVAILABILITY" component is said to overlap a given time range if
+ the condition for the corresponding component state specified in the
+ table below is satisfied. The conditions depend on the presence of
+ the "DTSTART", "DTEND", and "DURATION" properties in the
+ "VAVAILABILITY" component. Note that, as specified above, the
+ "DTEND" value MUST be a "DATE-TIME" value equal to or after the
+ "DTSTART" value, if specified.
+
+
+
+
+Daboo & Douglass Standards Track [Page 16]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ +------------------------------------------------------------+
+ | VAVAILABILITY has the DTSTART property? |
+ | +--------------------------------------------------------+
+ | | VAVAILABILITY has the DTEND property? |
+ | | +----------------------------------------------------+
+ | | | VAVAILABILITY has the DURATION property? |
+ | | | +------------------------------------------------+
+ | | | | Condition to evaluate |
+ +---+---+---+------------------------------------------------+
+ | Y | Y | N | (start < DTEND AND end > DTSTART) |
+ +---+---+---+------------------------------------------------+
+ | Y | N | Y | (start < DTSTART+DURATION AND end > DTSTART) |
+ +---+---+---+------------------------------------------------+
+ | Y | N | N | (end > DTSTART) |
+ +---+---+---+------------------------------------------------+
+ | N | Y | N | (start < DTEND) |
+ +---+---+---+------------------------------------------------+
+ | N | N | * | TRUE |
+ +---+---+---+------------------------------------------------+
+
+7.2.3. CALDAV:free-busy-query REPORT
+
+ A CALDAV:free-busy-query REPORT can be executed on a calendar
+ collection that contains iCalendar "VAVAILABILITY" components. When
+ that occurs, the server MUST aggregate the information in any
+ "VAVAILABILITY" components when generating the free-busy response, as
+ described in Section 5.
+
+7.2.4. CALDAV:calendar-availability Property
+
+ Name: calendar-availability
+
+ Namespace: urn:ietf:params:xml:ns:caldav
+
+ Purpose: Defines a "VAVAILABILITY" component that will be used in
+ calculating free-busy time when an iTIP free-busy request is
+ targeted at the calendar user who owns the Inbox.
+
+ Conformance: This property MAY be protected and SHOULD NOT be
+ returned by a PROPFIND DAV:allprop request. Support for this
+ property is REQUIRED. The value of this property MUST be a valid
+ iCalendar object containing only one "VAVAILABILITY" component,
+ and optionally, "VTIMEZONE" components - other iCalendar
+ components MUST NOT be present. "VTIMEZONE" components SHOULD NOT
+ be present if [RFC7809] is in effect. For more complex
+ availability scenarios, clients can store multiple "VAVAILABILITY"
+ components in the calendar user's calendar collections.
+
+
+
+
+Daboo & Douglass Standards Track [Page 17]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ Description: This property allows a user to specify their
+ availability by including an "VAVAILABILITY" component in the
+ value of this property. If present, the server MUST use this
+ "VAVAILABILITY" component when determining free-busy information
+ as part of an iTIP free-busy request being handled by the server.
+
+ Definition:
+
+ <!ELEMENT calendar-availability (#PCDATA) >
+ ; Data value MUST be an iCalendar object containing
+ ; "VAVAILABILITY" or "VTIMEZONE" components.
+
+ Example:
+
+ <C:calendar-availability xmlns:D="DAV:"
+ xmlns:C="urn:ietf:params:xml:ns:caldav"
+ >BEGIN:VCALENDAR
+ CALSCALE:GREGORIAN
+ PRODID:-//example.com//iCalendar 2.0//EN
+ VERSION:2.0
+ BEGIN:VAVAILABILITY
+ UID:9BADC1F6-0FC4-44BF-AC3D-993BEC8C962A
+ DTSTAMP:20111005T133225Z
+ DTSTART;TZID=America/Montreal:20111002T000000
+ BEGIN:AVAILABLE
+ UID:6C9F69C3-BDA8-424E-B2CB-7012E796DDF7
+ SUMMARY:Monday to Friday from 9:00 to 18:00
+ DTSTART;TZID=America/Montreal:20111002T090000
+ DTEND;TZID=America/Montreal:20111002T180000
+ RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
+ END:AVAILABLE
+ END:VAVAILABILITY
+ END:VCALENDAR
+ </C:calendar-availability>
+
+7.2.5. iTIP Free-Busy Requests
+
+ The CalDAV calendar-auto-schedule feature (see Section 5 of
+ [RFC6638]) includes a mechanism for free-busy information to be
+ requested via the CalDAV protocol. Any "VAVAILABILITY" components in
+ any calendar collections targeted during such a request MUST be
+ included as part of the calculation of the overall free-busy
+ information. In addition, the "VAVAILABILITY" component specified in
+ the CALDAV:calendar-availability property on the owner's Inbox MUST
+ also be included in the free-busy calculation. Processing of all
+ such "VAVAILABILITY" components is done as per Section 5.
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 18]
+
+RFC 7953 Calendar Availability August 2016
+
+
+8. Security Considerations
+
+ Calculation of availability information, particularly with multiple
+ overlapping time ranges, can be complex, and CalDAV servers MUST
+ limit the complexity of such data stored by a client.
+
+ An attacker able to "inject" availability information into a calendar
+ user's calendar data could ensure that the user never appears free
+ for meetings or appears free at inappropriate times. Calendar
+ systems MUST ensure that availability information for a calendar user
+ can only be modified by authorized users.
+
+ Security considerations in [RFC5545], [RFC5546], [RFC4791],
+ [RFC6638], and [RFC7809] MUST also be adhered to.
+
+9. Privacy Considerations
+
+ Free-busy and availability information can be used by attackers to
+ infer the whereabouts or overall level of "activity" of the
+ corresponding calendar user. Any calendar system that allows a user
+ to expose their free-busy and availability information MUST limit
+ access to that information to only authorized users.
+
+ When "VAVAILABILITY" components are sent to or shared with other
+ calendar users, care has to be taken not to expose more information
+ than is needed by each recipient. For example, a business owner will
+ likely not want their customers to know where they might be or what
+ they might be doing, but family members might be willing to expose
+ such information to each other. Thus, calendaring systems allowing
+ "VAVAILABILITY" components to be sent or shared to other calendar
+ users MUST provide a way for nonessential properties to be removed
+ (e.g., "SUMMARY", "LOCATION", and "DESCRIPTION").
+
+ iCalendar "VFREEBUSY" information generated from "VAVAILABILITY"
+ components MUST NOT include information other than busy or free time
+ periods. In particular, user specified property values such as
+ "SUMMARY", "LOCATION", and "DESCRIPTION" MUST NOT be copied into the
+ free-busy result data.
+
+ Privacy considerations in [RFC5545], [RFC5546], [RFC4791], [RFC6638],
+ and [RFC7809] MUST also be adhered to.
+
+
+
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 19]
+
+RFC 7953 Calendar Availability August 2016
+
+
+10. IANA Considerations
+
+10.1. Component Registrations
+
+ This document defines the following new iCalendar components, which
+ have been added to the registry defined in Section 8.3.1 of
+ [RFC5545]:
+
+ +---------------+---------+------------------------+
+ | Component | Status | Reference |
+ +---------------+---------+------------------------+
+ | VAVAILABILITY | Current | RFC 7953, Section 3.1 |
+ | AVAILABLE | Current | RFC 7953, Section 3.1 |
+ +---------------+---------+------------------------+
+
+10.2. Property Registrations
+
+ This documents defines the following new iCalendar properties, which
+ have been added to the registry defined in Section 8.3.2 of
+ [RFC5545]:
+
+ +----------+---------+------------------------+
+ | Property | Status | Reference |
+ +----------+---------+------------------------+
+ | BUSYTYPE | Current | RFC 7953, Section 3.2 |
+ +----------+---------+------------------------+
+
+11. Normative References
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <http://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault,
+ "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791,
+ DOI 10.17487/RFC4791, March 2007,
+ <http://www.rfc-editor.org/info/rfc4791>.
+
+ [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and
+ Scheduling Core Object Specification (iCalendar)",
+ RFC 5545, DOI 10.17487/RFC5545, September 2009,
+ <http://www.rfc-editor.org/info/rfc5545>.
+
+ [RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent
+ Interoperability Protocol (iTIP)", RFC 5546,
+ DOI 10.17487/RFC5546, December 2009,
+ <http://www.rfc-editor.org/info/rfc5546>.
+
+
+
+Daboo & Douglass Standards Track [Page 20]
+
+RFC 7953 Calendar Availability August 2016
+
+
+ [RFC6638] Daboo, C. and B. Desruisseaux, "Scheduling Extensions to
+ CalDAV", RFC 6638, DOI 10.17487/RFC6638, June 2012,
+ <http://www.rfc-editor.org/info/rfc6638>.
+
+ [RFC7809] Daboo, C., "Calendaring Extensions to WebDAV (CalDAV):
+ Time Zones by Reference", RFC 7809, DOI 10.17487/RFC7809,
+ March 2016, <http://www.rfc-editor.org/info/rfc7809>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 21]
+
+RFC 7953 Calendar Availability August 2016
+
+
+Appendix A. Example Calendar #1
+
+ BEGIN:VCALENDAR
+ CALSCALE:GREGORIAN
+ PRODID:-//example.com//iCalendar 2.0//EN
+ VERSION:2.0
+ BEGIN:VEVENT
+ DTSTAMP:20111113T044111Z
+ DTSTART;TZID=America/Montreal:20111106T120000
+ DURATION:PT2H
+ SUMMARY:Meeting
+ UID:768CB0C2-8642-43F7-A6C4-F8BB04B829B4
+ END:VEVENT
+ BEGIN:VAVAILABILITY
+ UID:452DFCA7-3203-4A3D-9A9A-99753A383B41
+ DTSTAMP:20111005T133225Z
+ DTSTART;TZID=America/Montreal:20111002T000000
+ BEGIN:AVAILABLE
+ UID:466D5C68-5C4A-4078-AF5D-9C55EA9145D7
+ SUMMARY:Monday to Friday from 8:00 to 18:00
+ DTSTART;TZID=America/Montreal:20111002T080000
+ DTEND;TZID=America/Montreal:20111002T180000
+ RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
+ END:AVAILABLE
+ END:VAVAILABILITY
+ END:VCALENDAR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 22]
+
+RFC 7953 Calendar Availability August 2016
+
+
+Appendix B. Example Calendar #2
+
+ BEGIN:VCALENDAR
+ CALSCALE:GREGORIAN
+ PRODID:-//example.com//iCalendar 2.0//EN
+ VERSION:2.0
+ BEGIN:VEVENT
+ DTSTAMP:20111113T044111Z
+ DTSTART;TZID=America/Denver:20111106T120000
+ DURATION:PT2H
+ SUMMARY:Lunch meeting in Denver
+ UID:2346C09A-42BF-439E-916C-FC83AF869171
+ END:VEVENT
+ BEGIN:VAVAILABILITY
+ ORGANIZER:mailto:bernard@example.com
+ UID:627A87FA-E5F1-43C0-B3B1-567DA10F2A83
+ DTSTAMP:20111005T133225Z
+ DTSTART;TZID=America/Montreal:20111002T000000
+ BEGIN:AVAILABLE
+ UID:A833E850-892B-43F6-98B6-C15A6BFC5D27
+ SUMMARY:Monday to Friday from 9:00 to 17:00
+ DTSTART;TZID=America/Montreal:20111002T080000
+ DTEND;TZID=America/Montreal:20111002T180000
+ RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
+ LOCATION:Montreal
+ END:AVAILABLE
+ END:VAVAILABILITY
+ BEGIN:VAVAILABILITY
+ ORGANIZER:mailto:bernard@example.com
+ UID:F01411E3-38B8-4490-8A1F-0CCEC57A0943
+ DTSTAMP:20111005T133225Z
+ DTSTART;TZID=America/Denver:20111023T000000
+ DTEND;TZID=America/Denver:20111030T000000
+ PRIORITY:1
+ BEGIN:AVAILABLE
+ UID:A35AA091-3846-48ED-96F6-881E8A0D0A93
+ SUMMARY:Monday to Friday from 9:00 to 17:00
+ DTSTART;TZID=America/Denver:20111023T080000
+ DTEND;TZID=America/Denver:20111023T180000
+ RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
+ LOCATION:Denver
+ END:AVAILABLE
+ END:VAVAILABILITY
+ END:VCALENDAR
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 23]
+
+RFC 7953 Calendar Availability August 2016
+
+
+Acknowledgements
+
+ Thanks to the following for providing feedback: Toby Considine,
+ Bernard Desruisseaux, Alexey Melnikov, Daniel Migault, Ken Murchison,
+ Evert Pot, and Dave Thewlis. This specification came about via
+ discussions at the Calendaring and Scheduling Consortium.
+
+Authors' Addresses
+
+ Cyrus Daboo
+ Apple Inc.
+ 1 Infinite Loop
+ Cupertino, CA 95014
+ United States of America
+
+ Email: cyrus@daboo.name
+ URI: http://www.apple.com/
+
+
+ Michael Douglass
+ Spherical Cow Group
+ 226 3rd Street
+ Troy, NY 12180
+ United States of America
+
+ Email: mdouglass@sphericalcowgroup.com
+ URI: http://sphericalcowgroup.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Daboo & Douglass Standards Track [Page 24]
+