GENWiki

Premier IT Outsourcing and Support Services within the UK

User Tools

Site Tools


rfc:rfc7953

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]

/data/webs/external/dokuwiki/data/pages/rfc/rfc7953.txt · Last modified: 2016/08/17 21:32 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki