Network Working Group | E. York, Ed. |
Internet-Draft | C. Daboo, Ed. |
Intended status: Standards Track | Apple Inc. |
Expires: September 05, 2014 | M. Douglass, Ed. |
RPI | |
March 04, 2014 |
VPOLL: Consensus Scheduling Component for iCalendar
draft-york-vpoll-01
This specification introduces a new iCalendar component which allows for consensus scheduling, that is voting on a number of alternative meeting or task alternatives.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 05, 2014.
Copyright (c) 2014 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.
The currently existing approach to agreeing on meeting times using iTip [RFC5546] and/or iMip [RFC6047] have some significant failings. There is no useful bargaining or suggestion mechanism in iTip, only the ability for a potential attendee to accept or refuse or to counter with a time of their own choosing.
Part of the problem is that for many potential attendees, their freebusy is not an accurate representation of their availability. In fact, when trying to schedule conference calls across different organizations, attendees may not be allowed to provide freebusy information or availability as this may reveal something of the organizations internal activities.
A number of studies have shown that large amounts of time are spent trying to come to an agreement - up to and beyond 20 working hours per meeting. many organizers fall back on other approaches such as phone calls and email to determine a suitable time.
Online services have appeared as a result and these allow participants to vote on a number of alternatives without revealing or using freebusy or availability. When agreement is reached a conventional scheduling message may be sent to the attendees. This approach appears to reach consensus fairly rapidly. Peer pressure may have some bearing on this as all voters are usually able to see the current state of the voting and may adjust their own meeting schedules to make themselves available for a popular choice.
The component and properties defined in this specification provide a standardized structure for this process and allow calendar clients and servers and web based services to interact.
These structures also have uses beyond the relatively simple needs of most meeting organizers. The process of coming to consensus can also be viewed as a bidding process.
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].
Additionally we will use the following terms:
This specification defines components and properties which can be used for simple consensus scheduling but also have the generality to handle more complex cases. To provide an easy (and for many - sufficient) introduction to consensus scheduling and VPOLL we will outline the flow of information for the simple case of voting on a number of meeting alternatives which differ only in time. In addition the voters will all be potential attendees.
This specification not only defines data structures but adds a new iTip method used when consensus has been reached. we will show how a VPOLL object is used to inform voters of the state of a simple vote on some alternatives.
The VPOLL component acts as a wrapper for a number of alternatives to be voted on, together with some properties used to maintain the state of the voting. For our simple example the following VPOLL properties and sub-components are either required or appropriate:
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example//Example METHOD:REQUEST BEGIN:VPOLL POLL-MODE:BASIC POLL-PROPERTIES:DTSTART,LOCATION ORGANIZER:mailto:mike@example.com UID:sched01-1234567890 DTSTAMP:20120101T000000Z SUMMARY:What to do this week DTEND:20120101T000000Z VOTER:mailto:cyrus@exmaple.com VOTER:mailto:eric@example.com BEGIN:VEVENT.......(with a poll-item-id=1) END:VEVENT BEGIN:VEVENT.......(with a poll-item-id=2) END:VEVENT BEGIN:VEVENT.......(with a poll-item-id=3) END:VEVENT END:VPOLL END:VCALENDAR
Putting that together we can construct an example VPOLL with 3 voters and 3 alternative meetings:
As can be seen in the example above, there is an iTip METHOD property with the value REQUEST. The VPOLL object will be distributed to all the voters, either through iMip or through some VPOLL enabled service.
Within the VPOLL component we have the alternatives to vote on. In many respects these are standard [RFC5545] components. For our simple use case they are all VEVENT components. In addition to the usual [RFC5545] properties some extra properties are used for a VPOLL.
Upon receipt of a VPOLL REQUEST the voter will reply with a VPOLL component containing their vote. In our simple case it will have the following properties:
Note that a voter can send a number of REPLYs for each REQUEST sent by the organizer. Each REPLY completely replaces the voting record for that voter for all components being voted on. In our example, if Eric responds and votes for items 1 and 2 and then responds again with a vote for only item 3, the final outcome is one vote on item 3.
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example//Example METHOD: REPLY BEGIN:VPOLL ORGANIZER:mailto:douglm@example.com VOTER:mailto:cyrus@example.com UID:sched01-1234567890 DTSTAMP:20120101T010000Z SUMMARY:What to do this week POLL-ITEM-ID;RESPONSE=50;PUBLIC-COMMENT=Work on iTIP:1 POLL-ITEM-ID;RESPONSE=100;COMMENT=Work on WebDAV:2 POLL-ITEM-ID;RESPONSE=0:3 END:VPOLL END:VCALENDAR
Putting this together we can construct an example REPLY VPOLL from Cyrus:
When the organizer receives a response from one or more voters the current state of the poll is sent to all voters. The new iTip method POLLSTATUS is used. The VPOLL can contain a reduced set of properties but MUST contain DTSTAMP, SEQUENCE (if not 0), UID, ORGANIZER and VOTER.
In addition, for our use case, it will contain skeleton VEVENT sub-components with the POLL-ITEM-ID and VOTER properties. Clients receiving this poll status SHOULD merge it in to their own copy to give the full current status
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example//Example METHOD: POLLSTATUS BEGIN:VPOLL ORGANIZER:mailto:douglm@example.com VOTER:mailto:cyrus@example.com VOTER:mailto:eric@example.com UID:sched01-1234567890 DTSTAMP:20120101T020000Z SEQUENCE:0 SUMMARY:What to do this week BEGIN:VEVENT POLL-ITEM-ID: 1 VOTER;RESPONSE=50;COMMENT=Work on iTIP: mailto:cyrus@exmaple.com VOTER;RESPONSE=100:mailto:eric@example.com END:VEVENT BEGIN:VEVENT POLL-ITEM-ID: 2 VOTER;RESPONSE=100;COMMENT=Work on WebDAV: mailto:cyrus@exmaple.com VOTER;RESPONSE=100:mailto:eric@example.com END:VEVENT BEGIN:VEVENT POLL-ITEM-ID: 3 VOTER;RESPONSE=0:mailto:cyrus@example.com VOTER;RESPONSE=0:mailto:eric@example.com END:VEVENT END:VPOLL END:VCALENDAR
An example:
After a number of REPLY messages have been received the poll will be considered complete. If there is a DTEND on the poll the system may automatically close the poll, or the organizer may, at any time, consider the poll complete. A VPOLL can be completed (and effectively closed for voting) by sending an iTip REQUEST message with the VPOLL STATUS property set to COMPLETED.
The poll winner is confirmed by sending a final iTip REQUEST message with the VPOLL STATUS property set to CONFIRMED. In this case the VPOLL component contains all the events being voted on along with a POLL-WINNER property to identify the winning event.
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example//Example METHOD: REQUEST BEGIN:VPOLL ORGANIZER:mailto:douglm@example.com UID:sched01-1234567890 DTSTAMP:20120101T030000Z COMPLETED:20120101T030000Z SEQUENCE:0 SUMMARY:What to do this week STATUS:CONFIRMED POLL-WINNER:3 BEGIN:VEVENT.......(with a poll-item-id=1) END:VEVENT BEGIN:VEVENT.......(with a poll-item-id=2) END:VEVENT BEGIN:VEVENT.......(with a poll-item-id=3) END:VEVENT END:VPOLL END:VCALENDAR
The VPOLL confirmation example:
Relationship parameter type values are defined in section 3.2.15. of [RFC5545]. This specification updates that type to include the new relationship value POLL to provide a link to the VPOLL component in which the current component appears.
This property parameter is redefined by the following notation:
reltypeparam /= "RELTYPE" "=" "POLL" ; Property value is a VPOLL uid
Status property values are defined in section 3.8.1.11. of [RFC5545]. This specification updates that type to valid VPOLL status values.
This property parameter is redefined by the following notation:
statvalue /= statvalue-poll ; Status values for "VPOLL". statvalue-poll = "IN-PROCESS" / "COMPLETED" ; Poll has closed, ; nothing has been chosen yet / "CONFIRMED" ; Poll has closed and ;winning items confirmed / "CANCELLED"
This parameter is defined by the following notation:
public-comment-param = "PUBLIC-COMMENT=" DQUOTE text DQUOTE
This parameter is defined by the following notation:
responseparam = "RESPONSE=" integer ; integer value 0..100
This parameter is defined by the following notation:
stayinformedparam = "STAY-INFORMED" "=" boolean
This property is defined by the following notation:
acceptresponse = "ACCEPT-RESPONSE" "=" acceptresponseparams ":" iana-token ("," iana-token) CRLF acceptresponseparams = *(";" other-param)
This property is defined by the following notation:
pollitemid = "POLL-ITEM-ID" pollitemdparams ":" integer CRLF pollitemidparams = *( (";" responseparam) / (";" stayinformedparam) / (";" public-comment-param) / (";" other-param) )
This property is defined by the following notation:
pollmode = "POLL-MODE" pollmodeparams ":" ("BASIC" / iana-token / other-token) CRLF pollmodeparams = *(";" other-param)
This property is defined by the following notation:
pollproperties = "POLL-PROPERTIES" pollpropparams ":" text *("," text) CRLF pollpropparams = *(";" other-param)
This property is defined by the following notation:
pollwinner = "POLL-WINNER" pollwinnerparams ":" integer CRLF pollwinnerparams = *(";" other-param) ; Used with a STATUS:CONFIRMED VPOLL to indicate which ; components have been confirmed
This property is defined by the following notation:
voter = "VOTER" voterparams ":" cal-address CRLF voterparam = *( ; ; The following are OPTIONAL, ; but MUST NOT occur more than once. ; (";" cutypeparam) / (";" memberparam) / (";" roleparam) / (";" rsvpparam) / (";" deltoparam) / (";" delfromparam) / (";" sentbyparam) / (";" cnparam) / (";" dirparam) / (";" languageparam) / (";" responseparam) / (";" stayinformedparam) / ; ; The following are OPTIONAL, but MUST NOT occur ; more than once. They are defined in RFC6638 ; (";" scheduleagentparam) / (";" scheduleforcesendparam) / (";" schedulestatusparam) / ; ; The following is OPTIONAL, ; and MAY occur more than once. ; (";" other-param) ; )
This property is defined by the following notation:
pollc = "BEGIN" ":" "VPOLL" CRLF pollprop *eventc *todoc *journalc *freebusyc *availabilityc *alarmc *iana-comp *x-comp "END" ":" "VPOLL" CRLF pollprop = *( ; ; The following are REQUIRED, ; but MUST NOT occur more than once. ; dtstamp / uid / organizer / ; ; The following are OPTIONAL, ; but MUST NOT occur more than once. ; acceptresponse / class / created / completed / description / dtstart / last-mod / pollmode / pollproperties / priority / seq / status / summary / url / ; ; Either 'dtend' or 'duration' MAY appear in ; a 'pollprop', but 'dtend' and 'duration' ; MUST NOT occur in the same 'pollprop'. ; 'duration' MUST only occur when 'dtstart' ; is present ; dtend / duration / ; ; The following are OPTIONAL, ; and MAY occur more than once. ; attach / categories / comment / contact / rstatus / related / resources / voter / x-prop / iana-prop ; ; The following is OPTIONAL, it SHOULD appear ; once for the confirmation of a BASIC mode ; VPOLL. Other modes may define differing ; requirements. ; pollwinner / ; )
The VPOLL component is intended to allow for various forms of polling. The particular form in efffect is indicated by the POLL-MODE property.
To define new poll modes create an RFC defining the new mode and provide the registration information as specified in Section 9.3.
BASIC poll mode is the form of voting in which one possible outcome is chosen from a set of possibilities. Usually this will be represented as a number of possible event objects one of which will be selected.
This poll mode has the following property requirements:
To confirm the winner the POLL-WINNER property must be present and the STATUS MUST be set to CONFIRMED.
Winning Non-scheduled VEVENTs or VTODOs MUST be assigned an ORGANIZER property and a list of non-participating ATTENDEEs.
This specification introduces a number of extensions to [RFC5546]. In group scheduling the parties involved are organizer and attendees. In VPOLL the parties are organizer and voters.
For many of the iTip processing rules the voters take the place of attendees.
There are some extensions to the behavior of iTip methods for a VPOLL object and two new methods are defined.
Method | Description |
---|---|
PUBLISH | No changes (yet) |
REQUEST | Each child component MUST have a POLL-ITEM-ID property. Each set of components with the same POLL-ITEM-ID value represents one overall set of items to be voted on. |
REPLY | There MUST be a single VPOLL component which MUST have: either one or more POLL-ITEM-ID properties with a RESPONSE param matching that from a REQUEST or a VFREEBUSY or VAVAILABILITY child component showing overall busy/available time. The VPOLL MUST have one VOTER only. |
ADD | Not supported for VPOLL. |
CANCEL | There MUST be a single VPOLL component with UID matching that of the poll being cancelled. |
REFRESH | The organizer returns a METHOD:REQUEST with the current full state, or a METHOD:CANCEL or an error if no matching poll is found. |
COUNTER | Not supported for VPOLL. |
DECLINECOUNTER | Not supported for VPOLL. |
POLLSTATUS | Used to send the current state of the poll to all voters. The VPOLL can contain a reduced set of properties but MUST contain DTSTAMP, SEQUENCE (if not 0), UID, ORGANIZER and VOTER. |
The following table shows the above methods broken down by who can send them with VPOLL components.
Originator | Methods |
---|---|
Organizer | PUBLISH, REQUEST, POLLSTATUS |
Voter | REPLY, REFRESH, REQUEST (only when delegating) |
Most of the standard iTip specification applies with respect to organizer and voters.
TBD
TBD
Need to talk about what a change in SEQUENCE means
Sequence change forces a revote.
New voter - no sequence change
Add another poll set or change poll item ids or any change to a child component - bump sequence
TBD
This section defines the property set restrictions for the method types that are applicable to the "VPOLL" calendar component. Each method is defined using a table that clarifies the property constraints that define the particular method.
The presence column uses the following values to assert whether a property is required or optional, and the number of times it may appear in the iCalendar object.
Presence Value | Description |
---|---|
1 | One instance MUST be present. |
1+ | At least one instance MUST be present. |
0 | Instances of this property MUST NOT be present. |
0+ | Multiple instances MAY be present. |
0 or 1 | Up to 1 instance of this property MAY be present. |
The following summarizes the methods that are defined for the "VPOLL" calendar component.
Method | Description |
---|---|
PUBLISH | Post notification of an poll. Used primarily as a method of advertising the existence of a poll. |
REQUEST | To make a request for a poll. This is an explicit invitation to one or more voters. Poll requests are also used to update, change or confirm an existing poll. Clients that cannot handle REQUEST MAY degrade the poll to view it as a PUBLISH. |
REPLY | Reply to a poll request. Voters may set their RESPONSE parameter to supply the current vote in the range 0 to 100. |
CANCEL | Cancel a poll. |
REFRESH | A request is sent to an Organizer by a Voter asking for the latest version of a poll to be resent to the requester. |
POLLSTATUS | Used to send the current state of the poll to all voters. The VPOLL can contain a reduced set of properties but MUST contain DTSTAMP, SEQUENCE (if not 0), UID, ORGANIZER and VOTER. |
The "PUBLISH" method in a "VPOLL" calendar component is an unsolicited posting of an iCalendar object. Any CU may add published components to their calendar. The "Organizer" MUST be present in a published iCalendar component. "Voters" MUST NOT be present. Its expected usage is for encapsulating an arbitrary poll as an iCalendar object. The "Organizer" may subsequently update (with another "PUBLISH" method) or cancel (with a "CANCEL" method) a previously published "VPOLL" calendar component.
This method type is an iCalendar object that conforms to the following property constraints:
Constraints for a METHOD:PUBLISH of a VPOLL |
---|
Component/Property | Presence | Comment |
---|---|---|
METHOD | 1 | MUST equal PUBLISH. |
VPOLL | 1+ | |
DTSTAMP | 1 | |
DTSTART | 1 | |
ORGANIZER | 1 | |
SUMMARY | 1 | Can be null. |
UID | 1 | |
SEQUENCE | 0 or 1 | MUST be present if value is greater than 0; MAY be present if 0. |
ACCEPT-RESPONSE | 0 or 1 | |
ATTACH | 0+ | |
CATEGORIES | 0+ | |
CLASS | 0 or 1 | |
COMMENT | 0+ | |
COMPLETED | 0 or 1 | |
CONTACT | 0 or 1 | |
CREATED | 0 or 1 | |
DESCRIPTION | 0 or 1 | Can be null. |
DTEND | 0 or 1 | If present, DURATION MUST NOT be present. |
DURATION | 0 or 1 | If present, DTEND MUST NOT be present. |
LAST-MODIFIED | 0 or 1 | |
POLL-ITEM-ID | 0 | |
POLL-MODE | 0 or 1 | |
POLL-PROPERTIES | 0 or 1 | |
PRIORITY | 0 or 1 | |
RELATED-TO | 0+ | |
RESOURCES | 0+ | |
STATUS | 0 or 1 | MAY be one of COMPLETED/CONFIRMED/CANCELLED. |
URL | 0 or 1 | |
IANA-PROPERTY | 0+ | |
X-PROPERTY | 0+ | |
VOTER | 0 | |
REQUEST-STATUS | 0 | |
VALARM | 0+ | |
VEVENT | 0+ | Depending upon the poll mode in effect there MAY be candidate components included in the poll component. If voting has already taken place, these components MUST include the VOTER property to indicate each voters current response. |
VFREEBUSY | 0 | |
VJOURNAL | 0+ | Depending upon the poll mode in effect there MAY be candidate components included in the poll component. If voting has already taken place, these components MUST include the VOTER property to indicate each voters current response. |
VTODO | 0+ | Depending upon the poll mode in effect there MAY be candidate components included in the poll component. If voting has already taken place, these components MUST include the VOTER property to indicate each voters current response. |
VTIMEZONE | 0+ | MUST be present if any date/time refers to a timezone. |
IANA-COMPONENT | 0+ | |
X-COMPONENT | 0+ |
The "REQUEST" method in a "VPOLL" component provides the following scheduling functions:
The "Organizer" originates the "REQUEST". The recipients of the "REQUEST" method are the CUs voting in th epoll, the "Voters". "Voters" use the "REPLY" method to convey votesto the "Organizer".
The "UID" and "SEQUENCE" properties are used to distinguish the various uses of the "REQUEST" method. If the "UID" property value in the "REQUEST" is not found on the recipient's calendar, then the "REQUEST" is for a new "VPOLL" calendar component. If the "UID" property value is found on the recipient's calendar, then the "REQUEST" is for an update, or a reconfirmation of the "VPOLL" calendar component.
For the "REQUEST" method only a single iCalendar object is permitted.
This method type is an iCalendar object that conforms to the following property constraints:
Constraints for a METHOD:REQUEST of a VPOLL |
---|
Component/Property | Presence | Comment |
---|---|---|
METHOD | 1 | MUST be REQUEST. |
VPOLL | 1 | |
VOTER | 1+ | |
DTSTAMP | 1 | |
DTSTART | 1 | |
ORGANIZER | 1 | |
SEQUENCE | 0 or 1 | MUST be present if value is greater than 0; MAY be present if 0. |
SUMMARY | 1 | Can be null. |
UID | 1 | |
ACCEPT-RESPONSE | 0 or 1 | |
ATTACH | 0+ | |
CATEGORIES | 0+ | |
CLASS | 0 or 1 | |
COMMENT | 0+ | |
COMPLETED | 0 or 1 | |
CONTACT | 0+ | |
CREATED | 0 or 1 | |
DESCRIPTION | 0 or 1 | Can be null. |
DTEND | 0 or 1 | If present, DURATION MUST NOT be present. |
DURATION | 0 or 1 | If present, DTEND MUST NOT be present. |
GEO | 0 or 1 | |
LAST-MODIFIED | 0 or 1 | |
LOCATION | 0 or 1 | |
POLL-ITEM-ID | 0 | |
POLL-MODE | 0 or 1 | |
POLL-PROPERTIES | 0 or 1 | |
PRIORITY | 0 or 1 | |
RELATED-TO | 0+ | |
REQUEST-STATUS | 0 | |
RESOURCES | 0+ | |
STATUS | 0 or 1 | MAY be one of COMPLETED/CONFIRMED/CANCELLED. |
TRANSP | 0 or 1 | |
URL | 0 or 1 | |
IANA-PROPERTY | 0+ | |
X-PROPERTY | 0+ | |
VALARM | 0+ | |
VTIMEZONE | 0+ | MUST be present if any date/time refers to a timezone. |
IANA-COMPONENT | 0+ | |
X-COMPONENT | 0+ | |
VEVENT | 0+ | Depending upon the poll mode in effect there MAY be candidate components included in the poll component. If voting has already taken place, these components MUST include the VOTER property to indicate each voters current response. |
VFREEBUSY | 0 | |
VJOURNAL | 0+ | Depending upon the poll mode in effect there MAY be candidate components included in the poll component. If voting has already taken place, these components MUST include the VOTER property to indicate each voters current response. |
VTODO | 0+ | Depending upon the poll mode in effect there MAY be candidate components included in the poll component. If voting has already taken place, these components MUST include the VOTER property to indicate each voters current response. |
The "REQUEST" method may be used to reschedule a poll, that is force a revote. A rescheduled poll involves a change to the existing poll in terms of its time the components being voted on may have changed. If the recipient CUA of a "REQUEST" method finds that the "UID" property value already exists on the calendar but that the "SEQUENCE" (or "DTSTAMP") property value in the "REQUEST" method is greater than the value for the existing poll, then the "REQUEST" method describes a rescheduling of the poll.
The "REQUEST" method may be used to update or reconfirm a poll. An update to an existing poll does not involve changes to the time or candidates, and might not involve a change to the location or description for the poll. If the recipient CUA of a "REQUEST" method finds that the "UID" property value already exists on the calendar and that the "SEQUENCE" property value in the "REQUEST" is the same as the value for the existing poll, then the "REQUEST" method describes an update of the poll details, but not a rescheduling of the POLL.
The update "REQUEST" method is the appropriate response to a "REFRESH" method sent from an "Voter" to the "Organizer" of a poll.
The "Organizer" of a poll may also send unsolicited "REQUEST" methods. The unsolicited "REQUEST" methods may be used to update the details of the poll without rescheduling it, to update the "RESPONSE" parameter of "Voters", or to reconfirm the poll.
The "REQUEST" method may be used to confirm a poll, that is announce the winner in BASIC mode. The STATUS MUST be set to CONFIRMED and for BASIC mode a VPOLL POLL-WINNER property must be provided with the poll-id of the winning component.
The "REQUEST" method may be used to close a poll, that is indicate voting is completed. The STATUS MUST be set to COMPLETED.
Some calendar and scheduling systems allow "Voters" to delegate the vote to another "Calendar User". iTIP supports this concept using the following workflow. Any "Voter" may delegate their right to vote in a poll to another CU. The implication is that the delegate participates in lieu of the original "Voter", NOT in addition to the "Voter". The delegator MUST notify the "Organizer" of this action using the steps outlined below. Implementations may support or restrict delegation as they see fit. For instance, some implementations may restrict a delegate from delegating a "REQUEST" to another CU.
The "Delegator" of a poll forwards the existing "REQUEST" to the "Delegate". The "REQUEST" method MUST include a "Voter" property with the calendar address of the "Delegate". The "Delegator" MUST also send a "REPLY" method to the "Organizer" with the "Delegator's" "Voter" property "DELEGATED-TO" parameter set to the calendar address of the "Delegate". Also, a new "Voter" property for the "Delegate" MUST be included and must specify the calendar user address set in the "DELEGATED-TO" parameter, as above.
In response to the request, the "Delegate" MUST send a "REPLY" method to the "Organizer", and optionally to the "Delegator". The "REPLY" method SHOULD include the "Voter" property with the "DELEGATED-FROM" parameter value of the "Delegator's" calendar address.
The "Delegator" may continue to receive updates to the poll even though they will not be attending. This is accomplished by the "Delegator" setting their "role" attribute to "NON-PARTICIPANT" in the "REPLY" to the "Organizer".
The situation may arise where the "Organizer" of a "VPOLL" is no longer able to perform the "Organizer" role and abdicates without passing on the "Organizer" role to someone else. When this occurs, the "Voters" of the "VPOLL" may use out-of-band mechanisms to communicate the situation and agree upon a new "Organizer". The new "Organizer" should then send out a new "REQUEST" with a modified version of the "VPOLL" in which the "SEQUENCE" number has been incremented and the "ORGANIZER" property has been changed to the new "Organizer".
There are a number of scenarios that support the need for a "Calendar User" to act on behalf of the "Organizer" without explicit role changing. This might be the case if the CU designated as "Organizer" is sick or unable to perform duties associated with that function. In these cases, iTIP supports the notion of one CU acting on behalf of another. Using the "SENT-BY" parameter, a "Calendar User" could send an updated "VPOLL" "REQUEST". In the case where one CU sends on behalf of another CU, the "Voter" responses are still directed back towards the CU designated as "Organizer".
A "Voter" invited to a "VPOLL" calendar component may send the "VPOLL" calendar component to another new CU not previously associated with the "VPOLL" calendar component. The current "Voter" participating in the "VPOLL" calendar component does this by forwarding the original "REQUEST" method to the new CU. The new CU can send a "REPLY" to the "Organizer" of the "VPOLL" calendar component. The reply contains an "Voter" property for the new CU.
The "Organizer" ultimately decides whether or not the new CU becomes part of the poll and is not obligated to do anything with a "REPLY" from a new (uninvited) CU. If the "Organizer" does not want the new CU to be part of the poll, the new "Voter" property is not added to the "VPOLL" calendar component. The "Organizer" MAY send the CU a "CANCEL" message to indicate that they will not be added to the poll. If the "Organizer" decides to add the new CU, the new "Voter" property is added to the "VPOLL" calendar component. Furthermore, the "Organizer" is free to change any "Voter" property parameter from the values supplied by the new CU to something the "Organizer" considers appropriate. The "Organizer" SHOULD send the new CU a "REQUEST" message to inform them that they have been added.
When forwarding a "REQUEST" to another CU, the forwarding "Voter" MUST NOT make changes to the original message.
The "Organizer" of an poll may also request updated status from one or more "Voters". The "Organizer" sends a "REQUEST" method to the "Voter" and sets the "VOTER;RSVP=TRUE" property parameter. The "SEQUENCE" property for the poll is not changed from its previous value. A recipient will determine that the only change in the "REQUEST" is that their "RSVP" property parameter indicates a request for updated status. The recipient SHOULD respond with a "REPLY" method indicating their current vote with respect to the "REQUEST".
The "REPLY" method in a "VPOLL" calendar component is used to respond (e.g., accept or decline) to a "REQUEST" or to reply to a delegation "REQUEST". When used to provide a delegation response, the "Delegator" SHOULD include the calendar address of the "Delegate" on the "DELEGATED-TO" property parameter of the "Delegator's" "Voter" property. The "Delegate" SHOULD include the calendar address of the "Delegator" on the "DELEGATED-FROM" property parameter of the "Delegate's" "Voter" property.
The "REPLY" method is also used when processing of a "REQUEST" fails. Depending on the value of the "REQUEST-STATUS" property, no action may have been performed.
The "Organizer" of a poll may receive the "REPLY" method from a CU not in the original "REQUEST". For example, a "REPLY" may be received from a "Delegate" to a poll. In addition, the "REPLY" method may be received from an unknown CU (a "Party Crasher"). This uninvited "Voter" may be accepted, or the "Organizer" may cancel the poll for the uninvited "Voter" by sending a "CANCEL" method to the uninvited "Voter".
An "Voter" MAY include a message to the "Organizer" using the "COMMENT" property. For example, if the user indicates a low interest and wants to let the "Organizer" know why, the reason can be expressed in the "COMMENT" property value.
The "Organizer" may also receive a "REPLY" from one CU on behalf of another. Like the scenario enumerated above for the "Organizer", "Voters" may have another CU respond on their behalf. This is done using the "SENT-BY" parameter.
The optional properties listed in the table below (those listed as "0+" or "0 or 1") MUST NOT be changed from those of the original request.
This method type is an iCalendar object that conforms to the following property constraints:
Constraints for a METHOD:REPLY of a VPOLL |
---|
Component/Property | Presence | Comment |
---|---|---|
METHOD | 1 | MUST be REPLY. |
VPOLL | 1+ | All components MUST have the same UID. |
VOTER | 1 | MUST be the address of the Voter replying. |
DTSTAMP | 1 | |
ORGANIZER | 1 | |
UID | 1 | MUST be the UID of the original REQUEST. |
SEQUENCE | 0 or 1 | If non-zero, MUST be the sequence number of the original REQUEST. MAY be present if 0. |
ACCEPT-RESPONSE | 0 or 1 | |
ATTACH | 0+ | |
CATEGORIES | 0+ | |
CLASS | 0 or 1 | |
COMMENT | 0+ | |
COMPLETED | 0 or 1 | |
CONTACT | 0+ | |
CREATED | 0 or 1 | |
DESCRIPTION | 0 or 1 | |
DTEND | 0 or 1 | If present, DURATION MUST NOT be present. |
DTSTART | 0 or 1 | |
DURATION | 0 or 1 | If present, DTEND MUST NOT be present. |
GEO | 0 or 1 | |
LAST-MODIFIED | 0 or 1 | |
LOCATION | 0 or 1 | |
POLL-ITEM-ID | 1+ | One per item being voted on. |
POLL-MODE | 0 | |
POLL-PROPERTIES | 0 | |
PRIORITY | 0 or 1 | |
RELATED-TO | 0+ | |
RESOURCES | 0+ | |
REQUEST-STATUS | 0+ | |
STATUS | 0 or 1 | |
SUMMARY | 0 or 1 | |
TRANSP | 0 or 1 | |
URL | 0 or 1 | |
IANA-PROPERTY | 0+ | |
X-PROPERTY | 0+ | |
VALARM | 0 | |
VTIMEZONE | 0 or 1 | MUST be present if any date/time refers to a timezone. |
IANA-COMPONENT | 0+ | |
X-COMPONENT | 0+ | |
VEVENT | 0 | |
VFREEBUSY | 0 | |
VJOURNAL | 0 | |
VTODO | 0 |
The "CANCEL" method in a "VPOLL" calendar component is used to send a cancellation notice of an existing poll request to the affected "Voters". The message is sent by the "Organizer" of the poll.
The "Organizer" MUST send a "CANCEL" message to each "Voter" affected by the cancellation. This can be done using a single "CANCEL" message for all "Voters" or by using multiple messages with different subsets of the affected "Voters" in each.
When a "VPOLL" is cancelled, the "SEQUENCE" property value MUST be incremented as described in Section 6.2.3.
Once a CANCEL message has been sent to all voters no further voting may take place. The poll is considered closed.
This method type is an iCalendar object that conforms to the following property constraints:
Constraints for a METHOD:CANCEL of a VPOLL |
---|
Component/Property | Presence | Comment |
---|---|---|
METHOD | 1 | MUST be CANCEL. |
VPOLL | 1+ | All must have the same UID. |
VOTER | 0+ | MUST include some or all Voters being removed from the poll. MUST include some or all Voters if the entire poll is cancelled. |
UID | 1 | MUST be the UID of the original REQUEST. |
DTSTAMP | 1 | |
ORGANIZER | 1 | |
SEQUENCE | 1 | |
ATTACH | 0+ | ACCEPT-RESPONSE |
0 or 1 | ||
COMMENT | 0+ | |
COMPLETED | 0 or 1 | |
CATEGORIES | 0+ | |
CLASS | 0 or 1 | |
CONTACT | 0+ | |
CREATED | 0 or 1 | |
DESCRIPTION | 0 or 1 | |
DTEND | 0 or 1 | If present, DURATION MUST NOT be present. |
DTSTART | 0 or 1 | |
DURATION | 0 or 1 | If present, DTEND MUST NOT be present. |
GEO | 0 or 1 | |
LAST-MODIFIED | 0 or 1 | |
LOCATION | 0 or 1 | |
POLL-ITEM-ID | 0 | |
POLL-MODE | 0 | |
POLL-PROPERTIES | 0 | |
PRIORITY | 0 or 1 | |
RELATED-TO | 0+ | |
RESOURCES | 0+ | |
STATUS | 0 or 1 | MUST be set to CANCELLED to cancel the entire event. If uninviting specific Attendees, then MUST NOT be included. |
SUMMARY | 0 or 1 | |
TRANSP | 0 or 1 | |
URL | 0 or 1 | |
IANA-PROPERTY | 0+ | |
X-PROPERTY | 0+ | |
REQUEST-STATUS | 0 | |
VALARM | 0 | |
VTIMEZONE | 0+ | MUST be present if any date/time refers to a timezone. |
IANA-COMPONENT | 0+ | |
X-COMPONENT | 0+ | |
VTODO | 0 | |
VJOURNAL | 0 | |
VEVENT | 0 | |
VFREEBUSY | 0 |
The "REFRESH" method in a "VPOLL" calendar component is used by "Voters" of an existing event to request an updated description from the poll "Organizer". The "REFRESH" method must specify the "UID" property of the poll to update. The "Organizer" responds with the latest description and version of the poll.
This method type is an iCalendar object that conforms to the following property constraints:
Constraints for a METHOD:REFRESH of a VPOLL |
---|
Component/Property | Presence | Comment |
---|---|---|
METHOD | 1 | MUST be REFRESH. |
VPOLL | 1 | |
VOTER | 1 | MUST be the address of requester. |
DTSTAMP | 1 | |
ORGANIZER | 1 | |
UID | 1 | MUST be the UID associated with original REQUEST. |
COMMENT | 0+ | |
COMPLETED | 0 | |
IANA-PROPERTY | 0+ | |
X-PROPERTY | 0+ | |
ACCEPT-RESPONSE | 0 | |
ATTACH | 0 | |
CATEGORIES | 0 | |
CLASS | 0 | |
CONTACT | 0 | |
CREATED | 0 | |
DESCRIPTION | 0 | |
DTEND | 0 | |
DTSTART | 0 | |
DURATION | 0 | |
GEO | 0 | |
LAST-MODIFIED | 0 | |
LOCATION | 0 | |
POLL-ITEM-ID | 0 | |
POLL-MODE | 0 | |
POLL-PROPERTIES | 0 | |
PRIORITY | 0 | |
RELATED-TO | 0 | |
REQUEST-STATUS | 0 | |
RESOURCES | 0 | |
SEQUENCE | 0 | |
STATUS | 0 | |
SUMMARY | 0 | |
URL | 0 | |
VALARM | 0 | |
VTIMEZONE | 0+ | |
IANA-COMPONENT | 0+ | |
X-COMPONENT | 0+ | |
VTODO | 0 | |
VJOURNAL | 0 | |
VEVENT | 0 | |
VFREEBUSY | 0 |
The "POLLSTATUS" method in a "VPOLL" calendar component is used to inform recipients of the current status of the poll in a compact manner. The "Organizer" MUST be present in the confirmed poll component. "Voters" MUST NOT be present. The selected component(s) according to the poll mode MUST also be present in the poll component. Clients receiving this message may store the confirmed items in their calendars.
This method type is an iCalendar object that conforms to the following property constraints:
Constraints for a METHOD:POLLSTATUS of a VPOLL |
---|
Component/Property | Presence | Comment |
---|---|---|
METHOD | 1 | MUST equal POLLSTATUS. |
VPOLL | 1+ | |
COMPLETED | 0 or 1 | Only present for a completed poll |
DTSTAMP | 1 | |
DTSTART | 0 or 1 | |
ORGANIZER | 1 | |
SUMMARY | 1 | Can be null. |
VOTER | 1+ | |
UID | 1 | |
SEQUENCE | 0 or 1 | MUST be present if value is greater than 0; MAY be present if 0. |
ACCEPT-RESPONSE | 0 | |
ATTACH | 0 | |
CATEGORIES | 0 | |
CLASS | 0 | |
COMMENT | 0+ | |
CONTACT | 0 | |
CREATED | 0 or 1 | |
DESCRIPTION | 0 or 1 | Can be null. |
DTEND | 0 or 1 | If present, DURATION MUST NOT be present. |
DURATION | 0 or 1 | If present, DTEND MUST NOT be present. |
LAST-MODIFIED | 0 or 1 | |
POLL-ITEM-ID | 0 | |
POLL-MODE | 0 or 1 | |
POLL-PROPERTIES | 0 | |
PRIORITY | 0 or 1 | |
RELATED-TO | 0+ | |
RESOURCES | 0+ | |
STATUS | 0 or 1 | MAY be one of TENTATIVE/CONFIRMED/CANCELLED. |
URL | 0 or 1 | |
IANA-PROPERTY | 0+ | |
X-PROPERTY | 0+ | |
REQUEST-STATUS | 0 | |
VALARM | 0+ | |
VEVENT | 0+ | All candidate components MUST be present but in a reduced form sufficient to provide the voting status. |
VFREEBUSY | 0 | |
VJOURNAL | 0+ | All candidate components MUST be present but in a reduced form sufficient to provide the voting status. |
VTODO | 0+ | All candidate components MUST be present but in a reduced form sufficient to provide the voting status. |
VTIMEZONE | 0+ | MUST be present if any date/time refers to a timezone. |
IANA-COMPONENT | 0+ | |
X-COMPONENT | 0+ |
This specification extends [RFC4791] in that it defines a new component and new iCalendar properties to be supported and requires extra definitions related to time-ranges and reports.
This section defines new CalDAV properties for calendar collections.
<!ELEMENT supported-vpoll-component-sets (supported-vpoll-component-set*) > <!ELEMENT supported-vpoll-component-set (comp+)>
<C:supported-vpoll-component-sets xmlns:C="urn:ietf:params:xml:ns:caldav"> <!-- VPOLLs with VEVENT, VFREEBUSY or VTODO --> <C:supported-vpoll-component-set> <C:comp name="VEVENT" /> <C:comp name="VFREEBUSY" /> <C:comp name="VTODO" /> </C:supported-vpoll-component-set> <!-- VPOLLs with just VEVENT or VFREEBUSY --> <C:supported-vpoll-component-set> <C:comp name="VEVENT" /> <C:comp name="VFREEBUSY" /> </C:supported-vpoll-component-set> <!-- VPOLLs with just VEVENT --> <C:supported-vpoll-component-set> <C:comp name="VEVENT" /> </C:supported-vpoll-component-set> <!-- VPOLLs with just VTODO --> <C:supported-vpoll-component-set> <C:comp name="VTODO" /> </C:supported-vpoll-component-set> </C:supported-vpoll-component-sets>
<!ELEMENT vpoll-max-items (#PCDATA)> PCDATA value: a numeric value (integer greater than zero)
<C:vpoll-max-items xmlns:C="urn:ietf:params:xml:ns:caldav" >25</C:vpoll-max-items>
<!ELEMENT vpoll-max-active (#PCDATA)> PCDATA value: a numeric value (integer greater than zero)
<C:vpoll-max-active xmlns:C="urn:ietf:params:xml:ns:caldav" >25</C:vpoll-max-active>
<!ELEMENT vpoll-max-voters (#PCDATA)> PCDATA value: a numeric value (integer greater than zero)
<C:vpoll-max-voters xmlns:C="urn:ietf:params:xml:ns:caldav" >25</C:vpoll-max-voters>
This specification creates additional Preconditions for PUT, COPY, and MOVE methods. These preconditions apply when a PUT operation of a VPOLL calendar object resource into a calendar collection occurs, or when a COPY or MOVE operation of a calendar object resource into a calendar collection occurs, or when a COPY or MOVE operation occurs on a calendar collection.
The new preconditions are:
This allows the retrieval of VPOLLs and their included components. The query specification allows queries to be directed at the contained sub-components. For VPOLL queries this feature is disallowed. Time-range queries can only target the vpoll component itself.
>> Request << REPORT /cyrus/work/ HTTP/1.1 Host: cal.example.com Depth: 1 Content-Type: application/xml; charset="utf-8" Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"> <D:prop> <D:getetag/> <C:calendar-data> <C:comp name="VCALENDAR"> <C:prop name="VERSION"/> <C:comp name="VPOLL"> <C:prop name="SUMMARY"/> <C:prop name="UID"/> <C:prop name="DTSTART"/> <C:prop name="DTEND"/> <C:prop name="DURATION"/> </C:comp> </C:comp> </C:calendar-data> </D:prop> <C:filter> <C:comp-filter name="VCALENDAR"> <C:comp-filter name="VPOLL"> <C:time-range start="20121204T000000Z" end="20121205T000000Z"/> </C:comp-filter> </C:comp-filter> </C:filter> </C:calendar-query> >> Response << HTTP/1.1 207 Multi-Status Date: Sat, 11 Nov 2012 09:32:12 GMT Content-Type: application/xml; charset="utf-8" Content-Length: xxxx <?xml version="1.0" encoding="utf-8" ?> <D:multistatus xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav"> <D:response> <D:href>http://cal.example.com/cyrus/work/poll2.ics</D:href> <D:propstat> <D:prop> <D:getetag>"fffff-abcd2"</D:getetag> <C:calendar-data>BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT DTSTART;TZID=US/Eastern:20121202T120000 DURATION:PT4D SUMMARY:Poll #2 UID:00959BC664CA650E933C892C@example.com END:VPOLL END:VCALENDAR </C:calendar-data> </D:prop> <D:status>HTTP/1.1 200 OK</D:status> </D:propstat> </D:response> <D:response> <D:href>http://cal.example.com/cyrus/work/poll3.ics</D:href> <D:propstat> <D:prop> <D:getetag>"fffff-abcd3"</D:getetag> <C:calendar-data>BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Example Corp.//CalDAV Client//EN BEGIN:VPOLL DTSTART;TZID=US/Eastern:20121204T100000 DURATION:PT4D SUMMARY:Poll #3 UID:DC6C50A017428C5216A2F1CD@example.com END:VPOLL END:VCALENDAR </C:calendar-data> </D:prop> <D:status>HTTP/1.1 200 OK</D:status> </D:propstat> </D:response> </D:multistatus>
In this example, the client requests the server to return specific components and properties of the VPOLL components that overlap the time range from December 4, 2012, at 00:00:00 A.M. UTC to December 5, 2012, at 00:00:00 A.M. UTC. In addition, the DAV:getetag property is also requested and returned as part of the response. Note that due to the CALDAV: calendar-data element restrictions, the DTSTAMP property in VPOLL components has not been returned, and the only property returned in the VCALENDAR object is VERSION.
Section 9.9 "CALDAV:time-range XML Element" in [RFC4791] describes how to specify time ranges to limit the set of calendar components returned by the server. This specification extends [RFC4791] to describe the meaning of time ranges for VPOLL
+-------------------------------------------------------------------+ | VPOLL has the DTSTART property? | | +---------------------------------------------------------------+ | | VPOLL has the DURATION property? | | | +-----------------------------------------------------------+ | | | VPOLL has the DTEND property? | | | | +-------------------------------------------------------+ | | | | VPOLL has the COMPLETED property? | | | | | +---------------------------------------------------+ | | | | | VPOLL has the CREATED property? | | | | | | +-----------------------------------------------+ | | | | | | Condition to evaluate | +---+---+---+---+---+-----------------------------------------------+ | Y | Y | N | * | * | (start <= DTSTART+DURATION) AND | | | | | | | ((end > DTSTART) OR | | | | | | | (end >= DTSTART+DURATION)) | +---+---+---+---+---+-----------------------------------------------+ | Y | N | Y | * | * | ((start < DTEND) OR (start <= DTSTART)) | | | | | | | AND | | | | | | | ((end > DTSTART) OR (end >= DTEND)) | +---+---+---+---+---+-----------------------------------------------+ | Y | N | N | * | * | (start <= DTSTART) AND (end > DTSTART) | +---+---+---+---+---+-----------------------------------------------+ | N | N | Y | * | * | (start < DTEND) AND (end >= DTEND) | +---+---+---+---+---+-----------------------------------------------+ | N | N | N | Y | Y | ((start <= CREATED) OR (start <= COMPLETED))| | | | | | | AND | | | | | | | ((end >= CREATED) OR (end >= COMPLETED))| +---+---+---+---+---+-----------------------------------------------+ | N | N | N | Y | N | (start <= COMPLETED) AND (end >= COMPLETED) | +---+---+---+---+---+-----------------------------------------------+ | N | N | N | N | Y | (end > CREATED) | +---+---+---+---+---+-----------------------------------------------+ | N | N | N | N | N | TRUE | +---+---+---+---+---+-----------------------------------------------+
A VPOLL 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, DURATION, DTEND, COMPLETED and CREATED properties in the VPOLL component. Note that, as specified above, the DTEND value MUST be a DATE-TIME value equal to or after the DTSTART value if specified.
Applications using these property need to be aware of the risks entailed in using the URIs provided as values. See [RFC3986] for a discussion of the security considerations relating to URIs.
This document defines the following new iCalendar property parameters to be added to the registry defined in Section 8.2.4 of [RFC5545]:
Property Parameter | Status | Reference |
---|---|---|
PUBLIC-COMMENT | Current | RFCXXXX, Section 4.2.1 |
RESPONSE | Current | RFCXXXX, Section 4.2.2 |
STAY-INFORMED | Current | RFCXXXX, Section 4.2.3 |
This document defines the following new iCalendar properties to be added to the registry defined in Section 8.2.3 of [RFC5545]:
Property | Status | Reference |
---|---|---|
ACCEPT-RESPONSE | Current | RFCXXXX, Section 4.3.1 |
POLL-ITEM-ID | Current | RFCXXXX, Section 4.3.2 |
POLL-MODE | Current | RFCXXXX, Section 4.3.3 |
VOTER | Current | RFCXXXX, Section 4.3.6 |
A poll mode is defined by completing the following template.
This document defines the following registered poll modes.
Poll mode name | Purpose | Reference |
---|---|---|
BASIC | To provide simple voting for a single outcome from a number of candidates. | Current |
The authors would like to thank the members of the Calendaring and Scheduling Consortium Freebusy technical committee and the following individuals for contributing their ideas and support:
...
The authors would also like to thank the Calendaring and Scheduling Consortium for advice with this specification.
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest METHOD: REPLY BEGIN:VPOLL ORGANIZER:mailto:douglm@mysite.edu VOTER:mailto:eric@example.com UID:sched01-1234567890 DTSTAMP:20120101T010000Z SEQUENCE:0 SUMMARY:What to do this week BEGIN:VFREEBUSY ....... END:VFREEBUSY END:VPOLL END:VCALENDAR
V01: 2013-08-07 MD
2012-11-02 MD Initial version