From 89bf61b49c6bfd3a5d63b9212b5bb1b51d655af7 Mon Sep 17 00:00:00 2001 From: Ronald Tse Date: Tue, 12 May 2026 01:01:56 +0800 Subject: [PATCH 1/2] ci: update metanorma workflows and add release manifest --- .github/workflows/generate.yml | 34 +- .github/workflows/release.yml | 29 + .tmp.xml | 5256 ++++++++++++ deploy_key.pub | 1 + documents.html | 1268 +++ documents.rxl | 215 + documents/cc-51006.doc | 5720 +++++++++++++ documents/cc-51006.html | 3868 +++++++++ documents/cc-51006.pdf | Bin 0 -> 864006 bytes documents/cc-51006.presentation.xml | 4916 +++++++++++ documents/cc-51006.rxl | 67 + documents/cc-51006.xml | 4916 +++++++++++ documents/draft-ietf-calext-vpoll.html | 9150 +++++++++++++++++++++ documents/draft-ietf-calext-vpoll.rfc.xml | 3140 +++++++ documents/draft-ietf-calext-vpoll.rxl | 73 + documents/draft-ietf-calext-vpoll.txt | 3472 ++++++++ documents/draft-ietf-calext-vpoll.xml | 4859 +++++++++++ documents/draft-york-vpoll.html | 9150 +++++++++++++++++++++ documents/draft-york-vpoll.rfc.xml | 3140 +++++++ documents/draft-york-vpoll.rxl | 73 + documents/draft-york-vpoll.txt | 3472 ++++++++ documents/draft-york-vpoll.xml | 4859 +++++++++++ documents/metadata.min.js | 1 + metanorma.release.yml | 4 + sources/cc-51006.html | 3560 ++++++++ sources/cc-51006.pdf | Bin 0 -> 858194 bytes sources/cc-51006.presentation.xml | 4916 +++++++++++ sources/cc-51006.rxl | 67 + sources/draft-ietf-calext-vpoll.html | 9150 +++++++++++++++++++++ sources/draft-ietf-calext-vpoll.rfc.xml | 3134 +++++++ sources/draft-ietf-calext-vpoll.txt | 3472 ++++++++ sources/metadata.min.js | 1 + 32 files changed, 91954 insertions(+), 29 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .tmp.xml create mode 100644 deploy_key.pub create mode 100644 documents.html create mode 100644 documents.rxl create mode 100644 documents/cc-51006.doc create mode 100644 documents/cc-51006.html create mode 100644 documents/cc-51006.pdf create mode 100644 documents/cc-51006.presentation.xml create mode 100644 documents/cc-51006.rxl create mode 100644 documents/cc-51006.xml create mode 100644 documents/draft-ietf-calext-vpoll.html create mode 100644 documents/draft-ietf-calext-vpoll.rfc.xml create mode 100644 documents/draft-ietf-calext-vpoll.rxl create mode 100644 documents/draft-ietf-calext-vpoll.txt create mode 100644 documents/draft-ietf-calext-vpoll.xml create mode 100644 documents/draft-york-vpoll.html create mode 100644 documents/draft-york-vpoll.rfc.xml create mode 100644 documents/draft-york-vpoll.rxl create mode 100644 documents/draft-york-vpoll.txt create mode 100644 documents/draft-york-vpoll.xml create mode 100644 documents/metadata.min.js create mode 100644 metanorma.release.yml create mode 100644 sources/cc-51006.html create mode 100644 sources/cc-51006.pdf create mode 100644 sources/cc-51006.presentation.xml create mode 100644 sources/cc-51006.rxl create mode 100644 sources/draft-ietf-calext-vpoll.html create mode 100644 sources/draft-ietf-calext-vpoll.rfc.xml create mode 100644 sources/draft-ietf-calext-vpoll.txt create mode 100644 sources/metadata.min.js diff --git a/.github/workflows/generate.yml b/.github/workflows/generate.yml index 459e972..8a94620 100644 --- a/.github/workflows/generate.yml +++ b/.github/workflows/generate.yml @@ -2,7 +2,7 @@ name: generate on: push: - branches: [ main ] + branches: [main] pull_request: workflow_dispatch: @@ -12,34 +12,10 @@ permissions: id-token: write concurrency: - group: "pages" + group: pages cancel-in-progress: true jobs: - build: - runs-on: ubuntu-latest - container: - image: metanorma/metanorma:latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Cache Metanorma assets - uses: actions-mn/cache@v1 - - - name: Metanorma generate site - uses: actions-mn/build-and-publish@v2 - with: - agree-to-terms: true - destination: gh-pages - deploy: - if: ${{ github.ref == 'refs/heads/main' }} - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file + site: + uses: actions-mn/.github/.github/workflows/metanorma-generate.yml@v1 + secrets: inherit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a604cf4 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,29 @@ +name: Release + +on: + push: + branches: [main] + paths: ['sources/**', 'metanorma.yml', 'metanorma.release.yml'] + workflow_dispatch: + inputs: + include-pattern: + description: 'Glob pattern to filter documents for release' + required: false + default: '*' + force: + description: 'Force release even if content is unchanged' + required: false + type: boolean + default: false + +permissions: + contents: write + +jobs: + release: + uses: actions-mn/.github/.github/workflows/metanorma-release.yml@v1 + with: + default-visibility: private + include-pattern: ${{ github.event.inputs.include-pattern || '*' }} + force: ${{ github.event.inputs.force || 'false' }} + secrets: inherit diff --git a/.tmp.xml b/.tmp.xml new file mode 100644 index 0000000..b8c71ac --- /dev/null +++ b/.tmp.xml @@ -0,0 +1,5256 @@ + + + + Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component + CC/CD 51005:2018 + 51005 + + 2018-11-19 + + + + + CalConnect + + + + + + + Eric York + + + + + + + + Cyrus Daboo + + + + + + + + Michael Douglass + + + + + + + CalConnect + + + en + + committee-draft + + 2018 + + + CalConnect + + + + + FREEBUSY + + + 1 + 2018-11-19 + +Foreword +

The Calendaring and Scheduling Consortium ("CalConnect") is global +non-profit organization with the aim to facilitate interoperability of +collaborative technologies and tools through open standards.

+

CalConnect works closely with international and regional partners, +of which the full list is available on our website +().

+

The procedures used to develop this document and those intended for its +further maintenance are described in the CalConnect Directives.

+

In particular the different approval criteria needed for the different +types of CalConnect documents should be noted. This document was drafted in +accordance with the editorial rules of the CalConnect Directives.

+

Attention is drawn to the possibility that some of the elements of this +document may be the subject of patent rights. CalConnect shall not be +held responsible for identifying any or all such patent rights. Details +of any patent rights identified during the development of the document +will be provided in the Introduction.

+

Any trade name used in this document is information given for the +convenience of users and does not constitute an endorsement.

+

This document was prepared by Technical Committee +FREEBUSY.

Introduction

The currently existing approach to agreeing on meeting times using +iTip and/or iMip has 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.

+ + + Scope +

This document provides a mechanism in iCalendar for consensus scheduling.

+
+ +Terms and definitions + consensus scheduling +

process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task

+
+ + active Vpoll +

VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+
+voter

participant who votes on the alternatives

+ +

A voter need not be an attendee of any of the alternatives presented.

+
+Simple Consensus Scheduling

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+The VPOLL Component: An Overview

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+
+
DTSTAMP
+
+

The usual property.

+
+
SEQUENCE
+
+

The usual property. See below for SEQUENCE +behavior.

+
+
UID
+
+

The usual property.

+
+
ORGANIZER
+
+

The usual property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+
+
SUMMARY
+
+

The usual property. This optional but +recommended property provides the a short title to the poll.

+
+
DESCRIPTION
+
+

The usual property. This optional property +provides more details.

+
+
DTEND
+
+

The usual property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+
+
POLL-MODE
+
+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value "BASIC" +meaning one event will be chosen from the alternatives.

+
+
POLL-COMPLETION
+
+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is "SERVER-SUBMIT" which means the client chooses the winner +but the server will submit the winning choice.

+
+
POLL-PROPERTIES
+
+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value "DTSTART, LOCATION" meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+
+
VVOTER
+
+

A new component. There is one of these for each voter and +it contains a VOTER property to identify the voter and one VOTE +component for each item being voted on.

+
+
VOTE
+
+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+
+
VOTER
+
+

A new property. There is one of these for each voter and it +is similar to the ATTENDEE property. It identifies the +VVOTER component to show who is taking part in the voting and +their results.

+
+
VEVENT
+
+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+
+

VPOLL with 3 voters and 3 alternative meetings:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD:REQUEST +BEGIN:VPOLL +POLL-MODE:BASIC +POLL-COMPLETION:SERVER-SUBMIT +POLL-PROPERTIES:DTSTART,LOCATION +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T000000Z +SUMMARY:What to do this week +DTEND:20120101T000000Z +BEGIN: VVOTER +VOTER:mailto:cyrus@example.com +END VVOTER +BEGIN: VVOTER +VOTER:mailto:eric@example.com +END VVOTER +BEGIN: VVOTER +VOTER:mailto:mike@example.com +END VVOTER +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
+

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.

+The VPOLL Subcomponents: An Overview

Within the VPOLL component we have the alternatives to vote on. In +many respects these are standard components. For our +simple use case they are all VEVENT components. In addition to the +usual properties some extra properties are used for a +VPOLL.

+
+
POLL-ITEM-ID
+
+

This provides a unique reference to the sub-component +within the VPOLL. It’s value SHOULD be a small integer.

+
+
+VPOLL responses

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 and components:

+
+
DTSTAMP
+
+

The usual property.

+
+
SEQUENCE
+
+

The usual property. See below for SEQUENCE +behavior.

+
+
UID
+
+

Same as the request.

+
+
ORGANIZER
+
+

Same as the request.

+
+
SUMMARY
+
+

Same as the request.

+
+
VVOTER
+
+

One only.

+
+
VOTER
+
+

One only inside the VVOTER component - the voter replying.

+
+
VOTE
+
+

One per item being voted on. There does not need to be one +for each choice.

+
+
POLL-ITEM-ID
+
+

One inside each VOTE component to identify the choice.

+
+
RESPONSE
+
+

One inside each VOTE component to specify the vote.

+
+
+

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.

+

REPLY VPOLL from Cyrus:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SUMMARY:What to do this week +BEGIN:VVOTER +VOTER:mailto:cyrus@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:VVOTER +END:VPOLL +END:VCALENDAR
+VPOLL updates

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 one or more VVOTER components each populated with a +VOTER property and zero or more VOTE components.

+ + BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: POLLSTATUS +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T020000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:VVOTER +VOTER:mailto:cyrus@example.com +BEGIN: VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:VVOTER +BEGIN:VVOTER +VOTER:mailto:eric@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:VVOTER +END:VPOLL +END:VCALENDAR +
+VPOLL Completion

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +"SUBMITTED".

+

VPOLL confirmation:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REQUEST +BEGIN:VPOLL +ORGANIZER:mailto:douglm@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T030000Z +COMPLETED:20120101T030000Z +POLL-COMPLETION:SERVER-SUBMIT +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
+Other Responses

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+iCalendar ExtensionsUpdated Relation Type Value

Relationship parameter type values are defined in section 3.2.15. of +. 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.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+reltypeparam /= "RELTYPE" "=" "POLL" +; Property value is a VPOLL uid +
+
Description
+
+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+
+Updated Status Value

Status property values are defined in section 3.8.1.11. of . +This specification updates that type to define valid VPOLL status +values.

+
+
Format Definition
+
+

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 + / "SUBMITTED" ; The winning item has been + ; submitted + / "CANCELLED" +
+
Description
+
+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+
+
+
+New Property ParametersRequired
+
Parameter name
+
+

REQUIRED

+
+
Purpose
+
+

To specify whether the associated property is required in +the current context.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+requirededparam = "REQUIRED" "=" ("TRUE" / "FALSE") + ; Default is FALSE +
+
Description
+
+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+
+Stay-Informed
+
Parameter name
+
+

STAY-INFORMED

+
+
Purpose
+
+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+stayinformedparam = "STAY-INFORMED" "=" ("TRUE" / "FALSE") + ; Default is FALSE +
+
Description
+
+

This parameter MAY be specified on VOTER and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+
+New PropertiesAccept-Response
+
Property name
+
+

ACCEPT-RESPONSE

+
+
Purpose
+
+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+

If this property is not present voters are only allowed to respond +to the choices in the request.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":" + iana-token ("," iana-token) CRLF + +acceptresponseparams = *(";" other-param)
+Poll-Completion
+
Property name
+
+

POLL-COMPLETION

+
+
Purpose
+
+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+
+
Description
+

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

+

in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+
+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

+
Format Definition
+
+

This property is defined by the following notation:

+
+
+poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF + +pcparam = *(";" other-param) + +pcvalue = "SERVER" ; The server is responsible for both choosing and + ; submitting the winner(s) + / "SERVER-SUBMIT" ; The server is responsible for + ; submitting the winner(s). The client chooses. + / "SERVER-CHOICE" ; The server is responsible for + ; choosing the winner(s). The client will submit. + / "CLIENT" ; The client is responsible for both choosing and + ; submitting the winner(s) + / iana-token + / x-name + ;Default is CLIENT + +

The following is an example of this property:

+
+

+

+POLL-COMPLETION: SERVER-SUBMIT
+Poll-Item-Id
+
Property name
+
+

POLL-ITEM-ID

+
+
Purpose
+
+

This property is used in VPOLL child components as an +identifier.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+
+
Description
+
+

In a METHOD:REQUEST each choice 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.

+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollitemid = "POLL-ITEM-ID" pollitemdparams ":" + integer CRLF + +pollitemidparams = *( + (";" other-param) + )
+Poll-Mode
+
Property name
+
+

POLL-MODE

+
+
Purpose
+
+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component or +its sub-components.

+
+
Description
+
+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollmode = "POLL-MODE" pollmodeparams ":" + ("BASIC" / iana-token / other-token) CRLF + +pollmodeparams = *(";" other-param)
+Poll-properties
+
Property name
+
+

POLL-PROPERTIES

+
+
Purpose
+
+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollproperties = "POLL-PROPERTIES" pollpropparams ":" + text *("," text) CRLF + +pollpropparams = *(";" other-param)
+Poll-Winner
+
Property name
+
+

POLL-WINNER

+
+
Purpose
+
+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+
+
Format Definition
+
+

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
+Reply-URL
+
Property name
+
+

REPLY-URL

+
+
Purpose
+
+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+
+
Property Parameters
+
+

Non-standard, required or iana parameters can +be specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF + +reply-urlparams = *( + (";" requiredparam) / + (";" other-param) + )
+Response
+
Property name
+
+

RESPONSE

+
+
Purpose
+
+

To specify a response vote.

+
+
Value type
+
+

INTEGER

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+response = "RESPONSE" response-params ":" integer CRLF + ; integer value 0..100 + +responseparams = *(";" other-param) +
+
Description
+
+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
    +
  • +

    0 - 39 A "NO vote"

    +
  • +
  • +

    40 - 79 A "MAYBE" vote

    +
  • +
  • +

    80 - 89 A "YES - but not preferred vote"

    +
  • +
  • +

    90-100 A "YES" vote.

    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
  • +
+
+
+Voter
+
Property name
+
+

VOTER

+
+
Purpose
+
+

This property is used in VVOTER components to indicate +recipients of the poll and to identify that component as +containing the voters responses.

+
+
Value type
+
+

The value type for this property is cal-address.

+
+
Property Parameters
+
+

Non-standard, cutype, member, role, rsvp, +delto, delfrom, sentby, cn, dir, lang or stayinformed parameters +can be specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component or +its sub-components.

+
+
Description
+
+

This property appears in the VVOTER component only and +indicates a recipient of the poll and their responses.

+
+
Format Definition
+
+

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) / + (";" 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) + ; + ) + +

RSVP=TRUE MAY be used by the organizer to force the voter to + reset their state and re-vote.

+
+ +

scheduleagentparam, scheduleforcesendparam and + schedulestatusparam are all related to CalDAV scheduling and are + defined in . Their semantics are exactly as defined in + that specification.

+
+New ComponentsVPOLL Component
+
Component name
+
+

VPOLL

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollc = "BEGIN" ":" "VPOLL" CRLF + pollprop + *voterc *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 / 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 / + ; + ) +
+
Description
+

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

The VVOTER components in VPOLL requests provide information on +each recipient who will be voting - both their identity through +the VOTER property and their votes through the VOTE components.

+

If specified, the "DTSTART" property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+

If "DTSTART" is present "DURATION" MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+

"DTEND" MAY be specified with or without "DTSTART" and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+
+

TODO: Need some text to describe what relative alarms are relative to.

+VVOTER Component
+
Component name
+
+

VPOLL

+
+
Purpose
+
+

This component contains identification of the recipient and +voter and their responses.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+voterc = "BEGIN" ":" "VVOTER" CRLF + voterprop + *votec *iana-comp *x-comp + "END" ":" "VVOTER" CRLF + +voterprop = *( + ; + ; The following are REQUIRED, + ; but MUST NOT occur more than once. + ; + dtstamp / voter / + ; + ; The following are OPTIONAL, + ; but MUST NOT occur more than once. + ; + created / description / last-mod / seq / + status / summary / url / + ; + ; The following are OPTIONAL, + ; and MAY occur more than once. + ; + attach / categories / comment / + contact / rstatus / related / + resources / x-prop / iana-prop + ; + ) +
+
Description
+
+

This component contains a VOTER property identifying a +recipient and voter and zero or more VOTE components containing +their responses.

+

The VOTER property in VVOTER objects refers to a recipient who +will be voting - RSVP=TRUE is used by the organizer to force the +voter to reset their state and re-vote

+
+
+VOTE Component
+
Component name
+
+

VPOLL

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+votec = "BEGIN" ":" "VOTE" CRLF + voteprop + *eventc *todoc *journalc *freebusyc + *availabilityc *alarmc *iana-comp *x-comp + "END" ":" "VOTE" CRLF + +voteprop = *( + ; + ; The following are REQUIRED, + ; but MUST NOT occur more than once. + ; + pollitemid / response / + ; + ; The following are OPTIONAL, + ; and MAY occur more than once. + ; + comment / x-prop / iana-prop + ; + ) +
+
Description
+

This component identifies voters and contains their +responses.

The required and optional properties and their meanings depend +upon the POLL-MODE in effect.

+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer.

+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER - such as the respondees +availability.

+
+Poll Modes

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see ) in a published RFC.

+POLL-MODE:BASIC

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.

+Property restrictions

This poll mode has the following property requirements:

+
+
POLL-ITEM-ID
+
+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+
+
POLL-WINNER
+
+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+
+Outcome reporting

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+iTIP Extensions

This specification introduces a number of extensions to . +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.

+Methods

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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.

+ + + + + + + + + + + + + + + + + +
OriginatorMethods
+

Organizer

+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+

Voter

+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+Interoperability Models

Most of the standard iTip specification applies with respect to +organizer and voters.

+ + Delegation +

TBD

+
+ + Acting on Behalf of Other Calendar Users +

TBD

+
+ + Component Revisions +
    +
  • +

    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

    +
  • +
+
+ + Message Sequencing +

TBD

+
+Application Protocol ElementsMethods for VPOLL Calendar Components

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 ValueDescription
+

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.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+

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.

+
+Method: PUBLISH

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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal PUBLISH.

+
+

VPOLL

+
+

1+

+
+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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+

+
+
+Method: REQUEST

The "REQUEST" method in a "VPOLL" component provides the following +scheduling functions:

+
    +
  • +

    Invite "Voters" to respond to the poll.

    +
  • +
  • +

    Change the items being voted upon.

    +
  • +
  • +

    Complete or confirm the poll.

    +
  • +
  • +

    Response to a "REFRESH" request.

    +
  • +
  • +

    Update the details of an existing vpoll.

    +
  • +
  • +

    Update the status of "Voters".

    +
  • +
  • +

    Forward a "VPOLL" to another uninvited CU.

    +
  • +
  • +

    For an existing "VPOLL" calendar component, delegate the role of +"Voter" to another CU.

    +
  • +
  • +

    For an existing "VPOLL" calendar component, change the role of +"Organizer" to another CU.

    +
  • +
+

The "Organizer" originates the "REQUEST". The recipients of the +"REQUEST" method are the CUs voting in the poll, the "Voters". +"Voters" use the "REPLY" method to convey votes to 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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REQUEST.

+
+

VPOLL

+
+

1

+
+
+

VOTER

+
+

1+

+
+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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.

+
+ + Rescheduling a poll +

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.

+
+Updating or Reconfirmation of a 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 a "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.

+ + Confirmation of a 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.

+
+ + Closing a Poll +

The "REQUEST" method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+Delegating a Poll to Another CU

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".

+ + Changing 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".

+
+ + Sending on Behalf of the 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".

+
+Forwarding to an Uninvited CU

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 a "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.

+ + Updating Voter Status +

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".

+
+Method: REPLY

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".

+

A "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. (But see comments on VFREEBUSY and VAVAILABILITY)

+

This method type is an iCalendar object that conforms to the +following property constraints:

+ + Constraints for a METHOD:REPLY of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

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 or 1

+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+

VAVAILABILITY

+
+

0

+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+

VJOURNAL

+
+

0

+
+
+

VTODO

+
+

0

+
+
+Method: CANCEL

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 .

+

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/PropertyPresenceComment
+

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

+
+
+

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

+
+
+Method: REFRESH

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/PropertyPresenceComment
+

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

+
+
+Method: POLLSTATUS

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/PropertyPresenceComment
+

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+

+
+
+CalDAV Extensions

This specification extends in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports.

+

Additionally, it extends as it a VPOLL component is a +schedulable entity.

+Calendar Collection Properties

This section defines new CalDAV properties for calendar collections.

+CALDAV:supported-vpoll-component-sets
+
Name
+
+

supported-vpoll-component-sets

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

It also specifies the combination of allowed component types.

+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

+
Definition
+
+
+<!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>
+CALDAV:vpoll-max-items
+
Name
+
+

vpoll-max-items

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+
+
Definition
+
+
+<!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>
+CALDAV:vpoll-max-active
+
Name
+
+

vpoll-max-active

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+
+
Definition
+
+
+<!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>
+CALDAV:vpoll-max-voters
+
Name
+
+

+ vpoll-max-voters +

+
+
Namespace
+
+

+ urn:ietf:params:xml:ns:caldav +

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of VOTER +properties for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more VOTER properties per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+
+
Definition
+
+
+<!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>
+ + CalDAV:even-more-properties +

TODO: vpoll-supported-mode poll options - e.g "vpoll-basic"

+
+Extensions to CalDAV scheduling

This specification extends .

+

Each section of Appendix A "Scheduling Privileges Summary" is +extended to include VPOLL.

+

Any reference to the ATTENDEE property should be read to include the +VOTER property. That is, for scheduling purposes the VOTER property +is handled in exactly the same manner as the ATTENDEE property.

+Additional Preconditions for PUT, COPY, and MOVE

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:

+
+
(CALDAV:supported-vpoll-component-sets)
+
+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+
+
(CALDAV:vpoll-max-items)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value +on the calendar collection where the resource will be stored;

+
+
(CALDAV:vpoll-max-active)
+
+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value + on the calendar collection where the resource will +be stored;

+
+
(CALDAV:vpoll-max-voters)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of VOTER properties less than or equal to the value of the +CALDAV:vpoll-max-voters property value on the +calendar collection where the resource will be stored;

+
+
+CalDAV:calendar-query Report

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.

+Example: Partial Retrieval of VPOLL

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.

+>> 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:VPOLL +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>
+CalDAV time ranges

"CALDAV:time-range XML Element" in 9.9 describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends to +describe the meaning of time ranges for VPOLL

+

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.

++-------------------------------------------------------------------+ +| 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 | ++---+---+---+---+---+-----------------------------------------------+
+ + Security Considerations +

Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See for a +discussion of the security considerations relating to URIs.

+
+IANA ConsiderationsParameter Registrations

This document defines the following new iCalendar property parameters +to be added to the registry defined in 8.2.4:

+ + + + + + + + + + + + + + + + + + + + +
Property ParameterStatusReference
+

REQUIRED

+
+

Current

+
+

+ +

+
+

STAY-INFORMED

+
+

Current

+
+

+ +

+
+Property Registrations

This document defines the following new iCalendar properties to be +added to the registry defined in 8.2.3:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyStatusReference
+

ACCEPT-RESPONSE

+
+

Current

+
+

+ +

+
+

POLL-ITEM-ID

+
+

Current

+
+

+ +

+
+

POLL-MODE

+
+

Current

+
+

+ +

+
+

POLL-PROPERTIES

+
+

Current

+
+

+ +

+
+

POLL-WINNER

+
+

Current

+
+

+ +

+
+

RESPONSE

+
+

Current

+
+

+ +

+
+

VOTER

+
+

Current

+
+

+ +

+
+POLL-MODE Registration Template

A poll mode is defined by completing the following template.

+
+
Poll mode name
+
+

The name of the poll mode.

+
+
Purpose
+
+

The purpose of the poll mode. Give a short but clear +description.

+
+
Reference
+
+

A reference to the RFC in which the poll mode is defined

+
+
+POLL-MODE Registrations

This document defines the following registered poll modes.

+ + + + + + + + + + + + + + + +
Poll mode namePurposeReference
+

BASIC

+
+

To provide simple voting for a single outcome from a number of candidates.

+
+

Current

+
+ + +
Open issues

Notifications: Need to do a section on what Notifications to + support. + A. VPOLL is about to end and you haven’t voted on it yet. + Instead reuse VALARMS to notify the user?

+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No - VOTER + has indicated now unable to attend - want to revote

+

Future: Voting on a confirmed/completed VPOLL Can a VOTER vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user’s isn’t the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can’t create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+

Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event.

+

Need to write down what isn’t valid in a VPOLL + a. Can’t change POLL-MODE

+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+

? - some iTip notes On confirm - send itip if appropriate (PUBLISH) + - all non-participating - shared - feeds + Organizer can specify where result is? + Confirm can specify that itip is sent - ITIP / NONE - parameter ? + on POLL-WINNER

+

Need to add example of freebusy in response

+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
Change log

V03: 2014-10-28 MD

+
    +
  • +

    Add VVOTER and VOTE components.

    +
  • +
  • +

    Add RESPONSE property.

    +
  • +
  • +

    Remove RESPONSE parameter from VOTER.

    +
  • +
+

V03: 2014-05-12 MD

+
    +
  • +

    Add reply-url property and required parameter.

    +
  • +
  • +

    Fix ACCEPT-RESPONSE definition.

    +
  • +
+

V02: 2014-05-12 MD

+
    +
  • +

    Typos fixed, clarifications made.

    +
  • +
  • +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
  • +
  • +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
  • +
  • +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
  • +
  • +

    iTip: fix broken table cells

    +
  • +
  • +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
  • +
  • +

    Added Caldav scheduling section

    +
  • +
+

V01: 2013-08-07 MD

+
    +
  • +

    Removed method CONFIRM

    +
  • +
  • +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
  • +
  • +

    Added POLL-WINNER and verbiage

    +
  • +
  • +

    Added STATUS values

    +
  • +
  • +

    Added RELTYPE=POLL

    +
  • +
  • +

    Added supported-vpoll-component-sets

    +
  • +
  • +

    Added CalDAV related parameters to VOTER

    +
  • +
  • +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
  • +
+

Initial version: 2012-11-02 MD

Normative References + + 2018-12-10 + HTTP Extensions for Distributed Authoring — WEBDAV + https://www.rfc-editor.org/info/rfc2518 + RFC 2518 + 10.17487/RFC2518 + + 1999 + + + + + + Y. Goland + + + + IETF + IETF + + + + + + + + + E. Whitehead + + + + IETF + IETF + + + + + + + + + A. Faizi + + + + IETF + IETF + + + + + + + + + S. Carter + + + + IETF + IETF + + + + + + + + + D. Jensen + + + + IETF + IETF + + + + + en + + RFC + 2518 + + + + + 2018-12-10 + Uniform Resource Identifier (URI): Generic Syntax + https://www.rfc-editor.org/info/rfc3986 + RFC 3986 + 10.17487/RFC3986 + + 2005 + + + + + + T. Berners-Lee + + + + IETF + IETF + + + + + + + + + R. Fielding + + + + IETF + IETF + + + + + + + + + L. Masinter + + + + IETF + IETF + + + + + en + + STD + 66 + + + RFC + 3986 + + + + + 2018-12-10 + Calendaring Extensions to WebDAV (CalDAV) + https://www.rfc-editor.org/info/rfc4791 + RFC 4791 + 10.17487/RFC4791 + + 2007 + + + + + + C. Daboo + + + + IETF + IETF + + + + + + + + + B. Desruisseaux + + + + IETF + IETF + + + + + + + + + L. Dusseault + + + + IETF + IETF + + + + + en + + RFC + 4791 + + + + + 2018-12-10 + Internet Calendaring and Scheduling Core Object Specification (iCalendar) + https://www.rfc-editor.org/info/rfc5545 + RFC 5545 + 10.17487/RFC5545 + + 2009 + + + + + + B. Desruisseaux + + + + IETF + IETF + + + + + en + + RFC + 5545 + + + + + 2018-12-10 + iCalendar Transport-Independent Interoperability Protocol (iTIP) + https://www.rfc-editor.org/info/rfc5546 + RFC 5546 + 10.17487/RFC5546 + + 2009 + + + + + + C. Daboo + + + + IETF + IETF + + + + + en + + RFC + 5546 + + + + + 2018-12-10 + iCalendar Message-Based Interoperability Protocol (iMIP) + https://www.rfc-editor.org/info/rfc6047 + RFC 6047 + 10.17487/RFC6047 + + 2010 + + + + + + A. Melnikov + + + + IETF + IETF + + + + + en + + RFC + 6047 + + + + + 2018-12-10 + Scheduling Extensions to CalDAV + https://www.rfc-editor.org/info/rfc6638 + RFC 6638 + 10.17487/RFC6638 + + 2012 + + + + + + C. Daboo + + + + IETF + IETF + + + + + + + + + B. Desruisseaux + + + + IETF + IETF + + + + + en + + RFC + 6638 + + + Bibliography + +
diff --git a/deploy_key.pub b/deploy_key.pub new file mode 100644 index 0000000..a944093 --- /dev/null +++ b/deploy_key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC2HA3U4Bxd5FNTgI6cxmPCqtlAlbL62ibInqtm6j6/lyem8PAuCA3zsC2jXZCqs0eNrY2bpNK4WMFneDcJEvJuKpiODmKvh+mIDCvQ87hDQxzCXO7HiQTVKFgi9acvVL5o10he51PFh49ab69hXH4hikhlG/T2j5I8IQqFAPpM8Hh2LCupbQDHl3VWQB/oe7/stBkq3/zKj8Klyy/82cNjpk3h27X/JzB3BrwIoIjO+do5muWEKvkHkjlESXS57jYaG4U7xUf5yVUtU6V2J1RxGVkq36uCQsqnG7cpg1XouvzfkA4d+pQypXxtwQJ/FpeoYYTMdo2dCYb3OAqkKAYH ci@metanorma.org diff --git a/documents.html b/documents.html new file mode 100644 index 0000000..4938fce --- /dev/null +++ b/documents.html @@ -0,0 +1,1268 @@ + + + + Calendaring and scheduling -- Consensus scheduling -- iCalendar VPOLL component + + + + + + + + + +
+
+
CalConnect
+
+
+
+
+
+
Calendaring and scheduling -- Consensus scheduling -- iCalendar VPOLL component
+
+
+
+
+
+
+
+
+

+ + CC/CD 51006:2018 + +

+
+ +
+
+ standard +
+
+
+ + + +
+
+ + + committee-draft + +
+
+ +
+ + 2018-11-19 +
+
+
+ +
+ +
+ +
+ + +
+ HTML +
+ + +
+ PDF +
+ + +
+ Word +
+ + +
+ XML +
+ +
+
+ + +
+
+ standard +
+
+
+ + + +
+
+ + + standard + +
+
+ +
+ + 2019-11-05 +
+
+
+ +
+ +
+ +
+ +
+ URI +
+ + +
+ HTML +
+ + + + +
+ XML +
+ +
+
+
+

+ + draft-york-vpoll-05 + +

+
+ +
+
+ standard +
+
+
+ + + +
+
+ + + standard + +
+
+ +
+ + 2019-05-15 +
+
+
+ +
+ +
+ +
+ +
+ URI +
+ + +
+ HTML +
+ + + + +
+ XML +
+ +
+
+
+ + + + diff --git a/documents.rxl b/documents.rxl new file mode 100644 index 0000000..3557010 --- /dev/null +++ b/documents.rxl @@ -0,0 +1,215 @@ +Calendaring and scheduling -- Consensus scheduling -- iCalendar VPOLL componentCalConnect + Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component + documents/cc-51006.xml + documents/cc-51006.pdf + documents/cc-51006.doc + documents/cc-51006.html + documents/cc-51006.rxl + CC/CD 51006:2018 + 51006 + + 2018-11-19 + + + + + CalConnect + + + + + + + Eric York + + + + + + + + Cyrus Daboo + + + + + + + + Michael Douglass + + + + + + + CalConnect + + + 1 + + 2018-11-19 + + en + + + committee-draft + + + 2018 + + + CalConnect + + + + + standard + + FREEBUSY + + + + + VPOLL: Consensus Scheduling Component for iCalendar + VPOLL + www.linkedin.com/in/eryork + documents/draft-ietf-calext-vpoll.xml + documents/draft-ietf-calext-vpoll.html + documents/draft-ietf-calext-vpoll.rxl + documents/draft-ietf-calext-vpoll.txt + draft-ietf-calext-vpoll-00 + draft-ietf-calext-vpoll-00 + + + + + Eric York + + eric.york@gmail.com + + + + + + + Cyrus Daboo + + cyrus@daboo.name + + + + + + + Michael Douglass + + mikeadouglass@gmail.com + + + + + + Internet Engineering Task Force + IETF + + + + 2019-11-05 + + en + + + standard + + + 2020 + + + Internet Engineering Task Force + IETF + + + + + IETF + + + standard + + + internet-draft + + + + VPOLL: Consensus Scheduling Component for iCalendar + VPOLL + https://www.apple.com + documents/draft-york-vpoll.xml + documents/draft-york-vpoll.html + documents/draft-york-vpoll.rxl + documents/draft-york-vpoll.txt + draft-york-vpoll-05 + draft-york-vpoll-05 + + + + + Eric York + + eyork@apple.com + + + + + + + Cyrus Daboo + + cyrus@daboo.name + + + + + + + Michael Douglass + + mikeadouglass@gmail.com + + + + + + Internet Engineering Task Force + IETF + + + + 2019-05-15 + + en + + + standard + + + 2020 + + + Internet Engineering Task Force + IETF + + + + + IETF + + + standard + + + internet-draft + + + diff --git a/documents/cc-51006.doc b/documents/cc-51006.doc new file mode 100644 index 0000000..8a385c3 --- /dev/null +++ b/documents/cc-51006.doc @@ -0,0 +1,5720 @@ +MIME-Version: 1.0 +Content-Type: multipart/related; boundary="----=_NextPart_81178210.676e.4040" + +------=_NextPart_81178210.676e.4040 +Content-Location: file:///C:/Doc/cc-51006.htm +Content-Type: text/html; charset="utf-8" + + + + + + + + + + + + +

+ + CC/CD 51006:2018 + + + +

+ + +

+ +

+ CalConnect  + + FREEBUSY + +

+ +

+ Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component + +
+ +

+ + + + + + +

+ +Eric York,Cyrus Daboo,Michael Douglass: Author + +

+ + +

+ +

 

+ +

+ +
+ +

Committee Draft Standard

+ + +
+ +

+ +

 

+ +

+ + +
+ +
+

Warning for Drafts

+ +

This document is not a CalConnect Standard. It is distributed for review and + comment, and is subject to change without notice and may not be referred to as + a Standard. Recipients of this draft are invited to submit, with their + comments, notification of any relevant patent rights of which they are aware + and to provide supporting documentation. +

+
+
+ +
+ + +
+ +
+ + + + + +

 

+
+

+
+

+
+ +

+ Contents +

+ +

 TOC + \o "1-2" \h \z \u + +Warning for Drafts +. + + + PAGEREF _Toc152491099 \h + 1 +

+ +

+ + +Foreword +. + + + PAGEREF _Toc462273049 \h + 1 + + +

+ +

+ + +Introduction +. + + + PAGEREF _Toc446024011 \h + 1 + + +

+ +

+ + +1. Scope +. + + + PAGEREF _Toc966012744 \h + 1 + + +

+ +

+ + +2. Normative references +. + + + PAGEREF _Toc557134655 \h + 1 + + +

+ +

+ + +3. Terms and definitions +. + + + PAGEREF _Toc589175531 \h + 1 + + +

+ +

+ + +4. Simple Consensus Scheduling +. + + + PAGEREF _Toc407218810 \h + 1 + + +

+ +

+ + +4.1. The VPOLL Component: An Overview +. + + + PAGEREF _Toc096181560 \h + 1 + + +

+ +

+ + +4.2. The VPOLL Alternative Choices: An Overview +. + + + PAGEREF _Toc882873898 \h + 1 + + +

+ +

+ + +4.3. VPOLL responses +. + + + PAGEREF _Toc347627947 \h + 1 + + +

+ +

+ + +4.4. VPOLL updates +. + + + PAGEREF _Toc851488776 \h + 1 + + +

+ +

+ + +4.5. VPOLL Completion +. + + + PAGEREF _Toc613248817 \h + 1 + + +

+ +

+ + +4.6. Other Responses +. + + + PAGEREF _Toc689712291 \h + 1 + + +

+ +

+ + +5. iCalendar Extensions +. + + + PAGEREF _Toc603627010 \h + 1 + + +

+ +

+ + +5.1. Updated Participant Type Value +. + + + PAGEREF _Toc003831251 \h + 1 + + +

+ +

+ + +5.2. Updated Relation Type Value +. + + + PAGEREF _Toc765199081 \h + 1 + + +

+ +

+ + +5.3. Updated Status Value +. + + + PAGEREF _Toc230787947 \h + 1 + + +

+ +

+ + +5.4. New Property Parameters +. + + + PAGEREF _Toc032504140 \h + 1 + + +

+ +

+ + +5.5. New Properties +. + + + PAGEREF _Toc002502442 \h + 1 + + +

+ +

+ + +5.6. New Components +. + + + PAGEREF _Toc365823424 \h + 1 + + +

+ +

+ + +6. Poll Modes +. + + + PAGEREF _Toc231716705 \h + 1 + + +

+ +

+ + +6.1. POLL-MODE:BASIC +. + + + PAGEREF _Toc111004680 \h + 1 + + +

+ +

+ + +7. iTIP Extensions +. + + + PAGEREF _Toc454076725 \h + 1 + + +

+ +

+ + +7.1. Methods +. + + + PAGEREF _Toc383225496 \h + 1 + + +

+ +

+ + +7.2. Interoperability Models +. + + + PAGEREF _Toc106318282 \h + 1 + + +

+ +

+ + +7.3. Application Protocol Elements +. + + + PAGEREF _Toc383432178 \h + 1 + + +

+ +

+ + +8. CalDAV Extensions +. + + + PAGEREF _Toc213667439 \h + 1 + + +

+ +

+ + +8.1. Calendar Collection Properties +. + + + PAGEREF _Toc137150676 \h + 1 + + +

+ +

+ + +8.2. Additional Preconditions for PUT, COPY, and MOVE +. + + + PAGEREF _Toc714041037 \h + 1 + + +

+ +

+ + +8.3. CalDAV:calendar-query Report +. + + + PAGEREF _Toc491246963 \h + 1 + + +

+ +

+ + +8.4. CalDAV time ranges +. + + + PAGEREF _Toc260366626 \h + 1 + + +

+ +

+ + +9. Security Considerations +. + + + PAGEREF _Toc908835294 \h + 1 + + +

+ +

+ + +10. IANA Considerations +. + + + PAGEREF _Toc778860954 \h + 1 + + +

+ +

+ + +10.1. Parameter Registrations +. + + + PAGEREF _Toc457802717 \h + 1 + + +

+ +

+ + +10.2. Property Registrations +. + + + PAGEREF _Toc293240268 \h + 1 + + +

+ +

+ + +10.3. POLL-MODE Registration Template +. + + + PAGEREF _Toc567158213 \h + 1 + + +

+ +

+ + +10.4. POLL-MODE Registrations +. + + + PAGEREF _Toc138095927 \h + 1 + + +

+ +

+ + +Appendix A (informative) Open issues +. + + + PAGEREF _Toc651661189 \h + 1 + + +

+ +

+ + +Appendix B (informative) Change log +. + + + PAGEREF _Toc743832500 \h + 1 + + +

+ +

+ + +Bibliography +. + + + PAGEREF _Toc094736531 \h + 1 + + +

+ +

+ + + + +

 

+ +

+ + +
+ + + + + + + + + +
+

+
+

+
+

Foreword

+

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+

The Calendaring and Scheduling Consortium (“CalConnect”) is a global +non-profit organization with the aim to facilitate interoperability of +collaborative technologies and tools through open standards.

+

CalConnect works closely with international and regional partners, +of which the full list is available on our website +(https://www.calconnect.org/about/liaisons-and-relationships).

+

The procedures used to develop this document and those intended for its +further maintenance are described in the CalConnect Directives.

+

In particular the different approval criteria needed for the different +types of CalConnect documents should be noted. This document was drafted in +accordance with the editorial rules of the CalConnect Directives.

+

Attention is drawn to the possibility that some of the elements of this +document may be the subject of patent rights. CalConnect shall not be +held responsible for identifying any or all such patent rights. Details +of any patent rights identified during the development of the document +will be provided in the Introduction.

+

Any trade name used in this document is information given for the +convenience of users and does not constitute an endorsement.

+

This document was prepared by Technical Committee +FREEBUSY.

+
+

+
+

+
+

Introduction

+

The currently existing approach to agreeing on meeting times using +iTip RFC 5546 and/or iMip RFC 6047 has 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.

+
+

 

+
+

+
+

+
+

Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component

+
+

1.  Scope

+

This document provides a mechanism in iCalendar for consensus scheduling.

+
+

2.  Normative references

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

IETF RFC 2518, HTTP Extensions for Distributed Authoring — WEBDAV

IETF RFC 3986, Uniform Resource Identifier (URI): Generic Syntax

IETF RFC 4791, Calendaring Extensions to WebDAV (CalDAV)

IETF RFC 5545, Internet Calendaring and Scheduling Core Object Specification (iCalendar)

IETF RFC 5546, iCalendar Transport-Independent Interoperability Protocol (iTIP)

IETF RFC 6047, iCalendar Message-Based Interoperability Protocol (iMIP)

IETF RFC 6638, Scheduling Extensions to CalDAV

IETF I-D.ietf-calext-eventpub-extensions, Event Publishing Extensions to iCalendar

+

3.  Terms and definitions

For the purposes of this document, + the following terms and definitions apply.

3.1. 

consensus scheduling

+ +

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+

3.2. 

active Vpoll

+ +

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+

3.3. 

voter

+ +

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+
+

4.  Simple Consensus Scheduling

+

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+

4.1.  The VPOLL Component: An Overview

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+

DTSTAMP

+

The usual RFC 5545 property.

+

SEQUENCE

+

The usual RFC 5545 property. See below for SEQUENCE +behavior.

+

UID

+

The usual RFC 5545 property.

+

ORGANIZER

+

The usual RFC 5545 property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+

SUMMARY

+

The usual RFC 5545 property. This optional but +recommended property provides the a short title to the poll.

+

DESCRIPTION

+

The usual RFC 5545 property. This optional property +provides more details.

+

DTEND

+

The usual RFC 5545 property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+

POLL-MODE

+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value “BASIC” +meaning one event will be chosen from the alternatives.

+

POLL-COMPLETION

+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is “SERVER-SUBMIT” which means the client chooses the winner +but the server will submit the winning choice.

+

POLL-PROPERTIES

+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value “DTSTART, LOCATION” meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+

PARTICIPANT

+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to “VOTER”. The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+

VOTE

+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+

VEVENT

+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+

EXAMPLE

VPOLL with 3 voters and 3 alternative meetings:

+

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD:REQUEST
BEGIN:VPOLL
POLL-MODE:BASIC
POLL-COMPLETION:SERVER-SUBMIT
POLL-PROPERTIES:DTSTART,LOCATION
ORGANIZER:mailto:mike@example.com
UID:sched01-1234567890
DTSTAMP:20120101T000000Z
SUMMARY:What to do this week
DTEND:20120101T000000Z
BEGIN: PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:cyrus@example.com
END PARTICIPANT
BEGIN: PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:eric@example.com
END PARTICIPANT
BEGIN: PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:mike@example.com
END PARTICIPANT
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

+
+

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.

+

4.2.  The VPOLL Alternative Choices: An Overview

Within the VPOLL component we have the alternatives to vote on. In +many respects these are standard RFC 5545 components. For our +simple use case they are all VEVENT components. In addition to the +usual RFC 5545 properties some extra properties are used for a +VPOLL.

+

POLL-ITEM-ID

+

This provides a unique reference to the sub-component +within the VPOLL. It’s value SHOULD be a small integer.

+
+

4.3.  VPOLL responses

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 and components:

+

DTSTAMP

+

The usual RFC 5545 property.

+

SEQUENCE

+

The usual RFC 5545 property. See below for SEQUENCE +behavior.

+

UID

+

Same as the request.

+

ORGANIZER

+

Same as the request.

+

SUMMARY

+

Same as the request.

+

PARTICIPANT

+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+

VOTE

+

One per item being voted on.

+

POLL-ITEM-ID

+

One inside each VOTE component to identify the choice.

+

RESPONSE

+

One inside each VOTE component to specify the vote.

+
+

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.

+

NOTE

+

This is poll-mode specific behavior?

+
+

EXAMPLE

REPLY VPOLL from Cyrus:

+

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD: REPLY
BEGIN:VPOLL
ORGANIZER:mailto:mike@example.com
UID:sched01-1234567890
DTSTAMP:20120101T010000Z
SUMMARY:What to do this week
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:cyrus@example.com
BEGIN:VOTE
POLL-ITEM-ID:1
RESPONSE:50
COMMENT:Work on iTIP
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:2
RESPONSE:100
COMMENT:Work on WebDAV
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:3
RESPONSE:0
END:VOTE
END:PARTICIPANT
END:VPOLL
END:VCALENDAR

+
+

4.4.  VPOLL updates

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+

EXAMPLE

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD: POLLSTATUS
BEGIN:VPOLL
ORGANIZER:mailto:mike@example.com
UID:sched01-1234567890
DTSTAMP:20120101T020000Z
SEQUENCE:0
SUMMARY:What to do this week
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:cyrus@example.com
BEGIN: VOTE
POLL-ITEM-ID:1
RESPONSE:50
COMMENT:Work on iTIP
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:2
RESPONSE:100
COMMENT:Work on WebDAV
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:3
RESPONSE:0
END:VOTE
END:PARTICIPANT
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:eric@example.com
BEGIN:VOTE
POLL-ITEM-ID:1
RESPONSE:100
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:2
RESPONSE:100
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:3
RESPONSE:0
END:VOTE
END:PARTICIPANT
END:VPOLL
END:VCALENDAR

+
+

4.5.  VPOLL Completion

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +“SUBMITTED”.

+

EXAMPLE

VPOLL confirmation:

+

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD: REQUEST
BEGIN:VPOLL
ORGANIZER:mailto:douglm@example.com
UID:sched01-1234567890
DTSTAMP:20120101T030000Z
COMPLETED:20120101T030000Z
POLL-COMPLETION:SERVER-SUBMIT
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

+
+

4.6.  Other Responses

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+
+
+

5.  iCalendar Extensions

+

5.1.  Updated Participant Type Value

Participant type property values are defined in section 11.2.1. of +I-D.ietf-calext-eventpub-extensions. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+

Format Definition

+

This property parameter is redefined by the following notation:

+
+

partvalue       /= "VOTER"

Figure 1

+ +

Description

+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+

5.2.  Updated Relation Type Value

Relationship parameter type values are defined in section 3.2.15. of +RFC 5545. 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.

+

Format Definition

+

This property parameter is redefined by the following notation:

+
+

reltypeparam       /= "RELTYPE" "=" "POLL"
; Property value is a VPOLL uid

Figure 2

+ +

Description

+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+

5.3.  Updated Status Value

Status property values are defined in section 3.8.1.11. of RFC 5545. +This specification updates that type to define valid VPOLL status +values.

+

Format Definition

+

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
          / "SUBMITTED"  ; The winning item has been
                         ; submitted
          / "CANCELLED"

Figure 3

+ +

Description

+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+

Figure 4

+
+

5.4.  New Property Parameters

5.4.1.  Required

Parameter name

+

REQUIRED

+

Purpose

+

To specify whether the associated property is required in +the current context.

+

Format Definition

+

This parameter is defined by the following notation:

+
+

requirededparam = "REQUIRED"  "=" ("TRUE" / "FALSE")
  ; Default is FALSE

Figure 5

+ +

Description

+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+

5.4.2.  Stay-Informed

Parameter name

+

STAY-INFORMED

+

Purpose

+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+

Format Definition

+

This parameter is defined by the following notation:

+
+

stayinformedparam = "STAY-INFORMED"  "=" ("TRUE" / "FALSE")
                  ; Default is FALSE

Figure 6

+ +

Description

+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+

5.5.  New Properties

5.5.1.  Accept-Response

Property name

+

ACCEPT-RESPONSE

+

Purpose

+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+

Property Parameters

+

Non-standard or iana parameters can be +specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+

If this property is not present voters are only allowed to respond +to the choices in the request.

+

Format Definition

+

This property is defined by the following notation:

+
+

acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":"
                    iana-token ("," iana-token) CRLF

acceptresponseparams = *(";" other-param)

Figure 7

+
+

5.5.2.  Poll-Completion

Property name

+

POLL-COMPLETION

+

Purpose

+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+

Description

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

Format Definition

+

This property is defined by the following notation:

+
+

poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF

pcparam = *(";" other-param)

pcvalue = "SERVER"  ; The server is responsible for both choosing and
                   ; submitting the winner(s)
        / "SERVER-SUBMIT" ; The server is responsible for
                   ; submitting the winner(s). The client chooses.
        / "SERVER-CHOICE"  ; The server is responsible for
                   ; choosing the winner(s). The client will submit.
        / "CLIENT" ; The client is responsible for both choosing and
                   ; submitting the winner(s)
        / iana-token
        / x-name
        ;Default is CLIENT

Figure 8

+ +

Example

+

The following is an example of this property:

+
+

POLL-COMPLETION: SERVER-SUBMIT

Figure 9

+
+

5.5.3.  Poll-Item-Id

Property name

+

POLL-ITEM-ID

+

Purpose

+

This property is used in VPOLL child components as an +identifier.

+

Value type

+

INTEGER

+

Property Parameters

+

Non-standard parameters can be specified on +this property.

+

Conformance

+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+

Description

+

In a METHOD:REQUEST each choice 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.

+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+

Format Definition

+

This property is defined by the following notation:

+
+

pollitemid = "POLL-ITEM-ID" pollitemdparams ":"
                  integer CRLF

pollitemidparams = *(
                   (";" other-param)
            )

Figure 10

+
+

5.5.4.  Poll-Mode

Property name

+

POLL-MODE

+

Purpose

+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+

Property Parameters

+

Non-standard or iana parameters can be +specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component or +its sub-components.

+

Description

+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+

Format Definition

+

This property is defined by the following notation:

+
+

pollmode = "POLL-MODE" pollmodeparams ":"
             ("BASIC" / iana-token / other-token) CRLF

pollmodeparams = *(";" other-param)

Figure 11

+
+

5.5.5.  Poll-properties

Property name

+

POLL-PROPERTIES

+

Purpose

+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+

Property Parameters

+

Non-standard or iana parameters can be +specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+

Format Definition

+

This property is defined by the following notation:

+
+

pollproperties = "POLL-PROPERTIES" pollpropparams ":"
             text *("," text) CRLF

pollpropparams = *(";" other-param)

Figure 12

+
+

5.5.6.  Poll-Winner

Property name

+

POLL-WINNER

+

Purpose

+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+

Value type

+

INTEGER

+

Property Parameters

+

Non-standard parameters can be specified on +this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+

Format Definition

+

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

Figure 13

+
+

5.5.7.  Reply-URL

Property name

+

REPLY-URL

+

Purpose

+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+

Property Parameters

+

Non-standard, required or iana parameters can +be specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+

Format Definition

+

This property is defined by the following notation:

+
+

reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF

reply-urlparams = *(
                  (";" requiredparam) /
                  (";" other-param)
                  )

Figure 14

+
+

5.5.8.  Response

Property name

+

RESPONSE

+

Purpose

+

To specify a response vote.

+

Value type

+

INTEGER

+

Format Definition

+

This property is defined by the following notation:

+
+

response = "RESPONSE" response-params ":" integer CRLF
                 ; integer value 0..100

responseparams = *(";" other-param)

Figure 15

+ +

Description

+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+ +

+0 — 39 A “NO vote” +

+

+40 — 79 A “MAYBE” vote +

+

+80 — 89 A “YES — but not preferred vote” +

+

+90-100 A “YES” vote. +

Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

+

+ +
+

5.6.  New Components

5.6.1.  VPOLL Component

Component name

+

VPOLL

+

Purpose

+

This component provides a mechanism by which voters can +vote on provided choices.

+

Format Definition

+

This property is defined by the following notation:

+
+

pollc    = "BEGIN" ":" "VPOLL" CRLF
            pollprop
            *participantc *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 / 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 /
          ;
          )

Figure 16

+ +

Description

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting — both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+

If specified, the “DTSTART” property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+

If “DTSTART” is present “DURATION” MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+

“DTEND” MAY be specified with or without “DTSTART” and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+

5.6.2.  VOTE Component

Component name

+

VOTE

+

Purpose

+

This component provides a mechanism by which voters can +vote on provided choices.

+

Conformance

+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+

Format Definition

+

This property is defined by the following notation:

+
+

votec     = "BEGIN" ":" "VOTE" CRLF
            voteprop
            *eventc *todoc *journalc *freebusyc
            *availabilityc *alarmc *iana-comp *x-comp
            "END" ":" "VOTE" CRLF

voteprop = *(
           ;
           ; The following are REQUIRED,
           ; but MUST NOT occur more than once.
           ;
           pollitemid / response /
           ;
           ; The following are OPTIONAL,
           ; and MAY occur more than once.
           ;
           comment / x-prop / iana-prop
           ;
           )

Figure 17

+ +

Description

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER — such as the respondees +availability.

+
+
+

6.  Poll Modes

+

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see Clause 10.3) in a published RFC.

+

6.1.  POLL-MODE:BASIC

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.

+

6.1.1.  Property restrictions

This poll mode has the following property requirements:

+

POLL-ITEM-ID

+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+

POLL-WINNER

+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+

6.1.2.  Outcome reporting

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+
+
+

7.  iTIP Extensions

+

This specification introduces a number of extensions to RFC 5546. +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.

+

7.1.  Methods

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+

Table 1

MethodDescription
+

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 PARTICIPANTS.

+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+

Table 2

OriginatorMethods
+

Organizer

+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+

Voter

+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+

7.2.  Interoperability Models

Most of the standard iTip specification applies with respect to +organizer and voters.

+

7.2.1.  Delegation

+ +

TBD

+
+

7.2.2.  Acting on Behalf of Other Calendar Users

+ +

TBD

+
+

7.2.3.  Component Revisions

+ + +

+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 +

+ +
+

7.2.4.  Message Sequencing

+ +

TBD

+
+

7.3.  Application Protocol Elements

7.3.1.  Methods for VPOLL Calendar Components

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.

+

Table 3

Presence ValueDescription
+

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.

+

Table 4

MethodDescription
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+

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 PARTICIPANT.

+
+

7.3.2.  Method: PUBLISH

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.

+

Note

+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+

Table 5 — Constraints for a METHOD:PUBLISH of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal PUBLISH.

+
+

VPOLL

+
+

1+

+
+

DTSTAMP

+
+

1

+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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+

+
+

PARTICIPANT

+
+

0+

+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to “VOTER” — that is, no voters

+
+

REQUEST-STATUS

+
+

0

+
+

VALARM

+
+

0+

+
+

VEVENT

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VFREEBUSY

+
+

0

+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+

X-COMPONENT

+
+

0+

+
+

7.3.3.  Method: REQUEST

The “REQUEST” method in a “VPOLL” component provides the following +scheduling functions:

+ +

+Invite “Voters” to respond to the poll. +

+

+Change the items being voted upon. +

+

+Complete or confirm the poll. +

+

+Response to a “REFRESH” request. +

+

+Update the details of an existing vpoll. +

+

+Update the status of “Voters”. +

+

+Forward a “VPOLL” to another uninvited CU. +

+

+For an existing “VPOLL” calendar component, delegate the role of +“Voter” to another CU. +

+

+For an existing “VPOLL” calendar component, change the role of +“Organizer” to another CU. +

+ +

The “Organizer” originates the “REQUEST”. The recipients of the +“REQUEST” method are the CUs voting in the poll, the “Voters”. +“Voters” use the “REPLY” method to convey votes to 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:

+

Table 6 — Constraints for a METHOD:REQUEST of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REQUEST.

+
+

VPOLL

+
+

1

+
+

PARTICIPANT

+
+

1+

+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+

DTSTAMP

+
+

1

+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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.

+
+

VFREEBUSY

+
+

0

+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

7.3.3.1.  Rescheduling a poll

+ +

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.

+
+

7.3.3.2.  Updating or Reconfirmation of a 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 a “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.

+

7.3.3.3.  Confirmation of a 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.

+
+

7.3.3.4.  Closing a Poll

+ +

The “REQUEST” method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+

7.3.3.5.  Delegating a Poll to Another CU

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”.

+

7.3.3.6.  Changing 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”.

+
+

7.3.3.7.  Sending on Behalf of the 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”.

+
+

7.3.3.8.  Forwarding to an Uninvited CU

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 a “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.

+

7.3.3.9.  Updating Voter Status

+ +

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 “RSVP=TRUE” property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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”.

+
+

7.3.4.  Method: REPLY

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” “CALENDAR-ADDRESS” +property. The “Delegate” SHOULD include the calendar address of the +“Delegator” on the “DELEGATED-FROM” property parameter of the +“Delegate’s” “CALENDAR-ADDRESS” 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”.

+

A “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. (But see comments on VFREEBUSY and VAVAILABILITY)

+

This method type is an iCalendar object that conforms to the +following property constraints:

+

Table 7 — Constraints for a METHOD:REPLY of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REPLY.

+
+

VPOLL

+
+

1+

+
+

All components MUST have the same

+
+

UID.

+
+

PARTICIPANT

+
+

1

+
+

Identifies 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 or 1

+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+

VAVAILABILITY

+
+

0

+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+

VJOURNAL

+
+

0

+
+

VTODO

+
+

0

+
+

7.3.5.  Method: CANCEL

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 Clause 7.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:

+

Table 8 — Constraints for a METHOD:CANCEL of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be CANCEL.

+
+

VPOLL

+
+

1+

+
+

All must have the same UID.

+
+

PARTICIPANT

+
+

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

+
+

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

+
+

7.3.6.  Method: REFRESH

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:

+

Table 9 — Constraints for a METHOD:REFRESH of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REFRESH.

+
+

VPOLL

+
+

1

+
+

PARTICIPANT

+
+

1

+
+

MUST identify the requester as a voter.

+
+

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

+
+

7.3.7.  Method: POLLSTATUS

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. All “Voters” MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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:

+

Table 10 — Constraints for a METHOD:POLLSTATUS of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal POLLSTATUS.

+
+

VPOLL

+
+

1+

+
+

PARTICIPANT

+
+

1+

+
+

The voters containing their current vote

+
+

COMPLETED

+
+

0 or 1

+
+

Only present for a completed poll

+
+

DTSTAMP

+
+

1

+
+

DTSTART

+
+

0 or 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

+
+

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 SHOULD NOT be present.

+
+

VFREEBUSY

+
+

0

+
+

VJOURNAL

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTODO

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+

X-COMPONENT

+
+

0+

+
+
+
+

8.  CalDAV Extensions

+

This specification extends RFC 4791 in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports.

+

Additionally, it extends RFC 6638 as it a VPOLL component is a +schedulable entity.

+

8.1.  Calendar Collection Properties

This section defines new CalDAV properties for calendar collections.

+

8.1.1.  CALDAV:supported-vpoll-component-sets

Name

+

supported-vpoll-component-sets

+

Namespace

+

urn:ietf:params:xml:ns:caldav

+

Purpose

+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

It also specifies the combination of allowed component types.

+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition Clause 8.2 being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

Definition

+

<!ELEMENT supported-vpoll-component-sets
     (supported-vpoll-component-set*) >

<!ELEMENT supported-vpoll-component-set (comp+)>

Figure 18

+ +

<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>

Figure 19

+
+

8.1.2.  CALDAV:vpoll-max-items

Name

+

vpoll-max-items

+

Namespace

+

urn:ietf:params:xml:ns:caldav

+

Purpose

+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition +Clause 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+

Definition

+

<!ELEMENT vpoll-max-items (#PCDATA)>
PCDATA value: a numeric value (integer greater than zero)

Figure 20

+ +

<C:vpoll-max-items xmlns:C="urn:ietf:params:xml:ns:caldav"
>25</C:vpoll-max-items>

Figure 21

+
+

8.1.3.  CALDAV:vpoll-max-active

Name

+

vpoll-max-active

+

Namespace

+

urn:ietf:params:xml:ns:caldav

+

Purpose

+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition +Clause 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+

Definition

+

<!ELEMENT vpoll-max-active (#PCDATA)>
PCDATA value: a numeric value (integer greater than zero)

Figure 22

+ +

<C:vpoll-max-active xmlns:C="urn:ietf:params:xml:ns:caldav"
>25</C:vpoll-max-active>

Figure 23

+
+

8.1.4.  CALDAV:vpoll-max-voters

Name

+

+vpoll-max-voters +

+

Namespace

+

+urn:ietf:params:xml:ns:caldav +

+

Purpose

+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition Clause 8.2 +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+

Definition

+

<!ELEMENT vpoll-max-voters (#PCDATA)>
PCDATA value: a numeric value (integer greater than zero)

Figure 24

+ +

<C:vpoll-max-voters xmlns:C="urn:ietf:params:xml:ns:caldav"
>25</C:vpoll-max-voters>

Figure 25

+
+

8.1.5.  CalDAV:even-more-properties

+ +
+

8.1.6.  Extensions to CalDAV scheduling

This specification extends RFC 6638.

+

Each section of Appendix A “Scheduling Privileges Summary” is +extended to include VPOLL.

+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+

8.2.  Additional Preconditions for PUT, COPY, and MOVE

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:

+

(CALDAV:supported-vpoll-component-sets)

+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+

(CALDAV:vpoll-max-items)

+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value Clause 8.1.2 +on the calendar collection where the resource will be stored;

+

(CALDAV:vpoll-max-active)

+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value +Clause 8.1.3 on the calendar collection where the resource will +be stored;

+

(CALDAV:vpoll-max-voters)

+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value Clause 8.1.4 on the +calendar collection where the resource will be stored;

+
+

8.3.  CalDAV:calendar-query Report

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.

+

8.3.1.  Example: Partial Retrieval of VPOLL

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.

+

>> 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:VPOLL
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>

Figure 26

+
+

8.4.  CalDAV time ranges

“CALDAV:time-range XML Element” in RFC 4791, Section 9.9 describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends RFC 4791 to +describe the meaning of time ranges for VPOLL

+

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.

+

+-------------------------------------------------------------------+
| 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                                          |
+---+---+---+---+---+-----------------------------------------------+

Figure 27

+
+
+
+

9.  Security Considerations

+

Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See RFC 3986 for a +discussion of the security considerations relating to URIs.

+
+
+

10.  IANA Considerations

+

10.1.  Parameter Registrations

This document defines the following new iCalendar property parameters +to be added to the registry defined in RFC 5545, Section 8.2.4:

+

Table 11

Property ParameterStatusReference
+

REQUIRED

+
+

Current

+
+

+Clause 5.4.1 +

+
+

STAY-INFORMED

+
+

Current

+
+

+Clause 5.4.2 +

+
+

10.2.  Property Registrations

This document defines the following new iCalendar properties to be +added to the registry defined in RFC 5545, Section 8.2.3:

+

Table 12

PropertyStatusReference
+

ACCEPT-RESPONSE

+
+

Current

+
+

+Clause 5.5.7 +

+
+

POLL-ITEM-ID

+
+

Current

+
+

+Clause 5.5.3 +

+
+

POLL-MODE

+
+

Current

+
+

+Clause 5.5.4 +

+
+

POLL-PROPERTIES

+
+

Current

+
+

+Clause 5.5.5 +

+
+

POLL-WINNER

+
+

Current

+
+

+Clause 5.5.6 +

+
+

RESPONSE

+
+

Current

+
+

+Clause 5.5.8 +

+
+

10.3.  POLL-MODE Registration Template

A poll mode is defined by completing the following template.

+

Poll mode name

+

The name of the poll mode.

+

Purpose

+

The purpose of the poll mode. Give a short but clear +description.

+

Reference

+

A reference to the RFC in which the poll mode is defined

+
+

10.4.  POLL-MODE Registrations

This document defines the following registered poll modes.

+

Table 13

Poll mode namePurposeReference
+

BASIC

+
+

To provide simple voting for a single outcome from a number of candidates.

+
+

Current

+
+
+

+
+

+
+

Appendix A
(informative)
Open issues

+

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+

Notifications: Need to do a section on what Notifications to + support.
+ A. VPOLL is about to end and you haven’t voted on it yet. + Instead reuse VALARMS to notify the user?

+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No — voter + has indicated now unable to attend — want to revote

+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user’s isn’t the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can’t create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+

Update to existing event after poll confirm When voting on existing + event — winning properties ONLY are merged in to the real event.

+

Need to write down what isn’t valid in a VPOLL
+ a. Can’t change POLL-MODE

+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+

? — some iTip notes On confirm — send itip if appropriate (PUBLISH) +  — all non-participating — shared — feeds + Organizer can specify where result is? + Confirm can specify that itip is sent — ITIP / NONE — parameter ? + on POLL-WINNER

+

Need to add example of freebusy in response

+

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest
METHOD: REPLY
BEGIN:VPOLL
ORGANIZER:mailto:douglm@mysite.edu
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:eric@example.com
UID:sched01-1234567890
DTSTAMP:20120101T010000Z
SEQUENCE:0
SUMMARY:What to do this week
BEGIN:VFREEBUSY
.......
END:VFREEBUSY
END:PARTICIPANT
END:VPOLL
END:VCALENDAR

+

Figure A.1

+
+

+
+

+
+

Appendix B
(informative)
Change log

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Calext V01: 2019-10-17 MD

+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+

Calext V00: 2019-05-17 MD

+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+

V03: 2014-10-28 MD

+
+ +

+Add VVOTER and VOTE components. +

+

+Add RESPONSE property. +

+

+Remove RESPONSE parameter from VOTER. +

+ +
+

V03: 2014-05-12 MD

+
+ +

+Add reply-url property and required parameter. +

+

+Fix ACCEPT-RESPONSE definition. +

+ +
+

V02: 2014-05-12 MD

+
+ +

+Typos fixed, clarifications made. +

+

+Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT +

+

+Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values. +

+

+iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent +

+

+iTip: fix broken table cells +

+

+Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table +

+

+Added Caldav scheduling section +

+ +
+

V01: 2013-08-07 MD

+
+ +

+Removed method CONFIRM +

+

+Removed pollitemid from VPOLL abnf. Added text for pollwinner +

+

+Added POLL-WINNER and verbiage +

+

+Added STATUS values +

+

+Added RELTYPE=POLL +

+

+Added supported-vpoll-component-sets +

+

+Added CalDAV related parameters to VOTER +

+

+Removed bad CalDAV query example. State that queries cannot +target the sub-components. +

+ +
+

Initial version: 2012-11-02 MD

+
+
+

+
+

+

Bibliography

+ +
+
+
+ + + +------=_NextPart_81178210.676e.4040 +Content-Location: file:///C:/Doc/cc-51006_files/filelist.xml +Content-Transfer-Encoding: base64 +Content-Type: application/xml + +PHhtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiPgog +ICAgICAgIDxvOk1haW5GaWxlIEhSZWY9Ii4uL2RvY3VtZW50cy9jYy01MTAwNi5odG0iLz4gIDxv +OkZpbGUgSFJlZj0iZmlsZWxpc3QueG1sIi8+CiAgPG86RmlsZSBIUmVmPSJoZWFkZXIuaHRtbCIv +Pgo8L3htbD4K + +------=_NextPart_81178210.676e.4040 +Content-Location: file:///C:/Doc/cc-51006_files/header.html +Content-Transfer-Encoding: base64 +Content-Type: text/html charset="utf-8" + +PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiDQp4bWxuczpvPSJ1 +cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiDQp4bWxuczp3PSJ1cm46c2No +ZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIg0KeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMu +bWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIg0KeG1sbnM6bXY9Imh0dHA6Ly9tYWNW +bWxTY2hlbWFVcmkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCg0K +PGhlYWQ+DQo8bWV0YSBuYW1lPVRpdGxlIGNvbnRlbnQ9IiI+DQo8bWV0YSBuYW1lPUtleXdvcmRz +IGNvbnRlbnQ9IiI+DQo8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0 +L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRv +Y3VtZW50Pg0KPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUi +Pg0KPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDE1Ij4NCjxs +aW5rIGlkPU1haW4tRmlsZSByZWw9TWFpbi1GaWxlIGhyZWY9Ii4uL2RvY3VtZW50cy9jYy01MTAw +Ni5odG1sIj4NCjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KIDxvOnNoYXBlZGVmYXVsdHMgdjpl +eHQ9ImVkaXQiIHNwaWRtYXg9IjIwNDkiLz4NCjwveG1sPjwhW2VuZGlmXS0tPg0KPC9oZWFkPg0K +DQo8Ym9keSBsYW5nPUVOIGxpbms9Ymx1ZSB2bGluaz0iIzk1NEY3MiI+DQoNCjxkaXYgc3R5bGU9 +J21zby1lbGVtZW50OmZvb3Rub3RlLXNlcGFyYXRvcicgaWQ9ZnM+DQoNCjxwIGNsYXNzPU1zb05v +cm1hbCBzdHlsZT0nbWFyZ2luLWJvdHRvbTowY207bWFyZ2luLWJvdHRvbTouMDAwMXB0O2xpbmUt +aGVpZ2h0Og0Kbm9ybWFsJz48c3BhbiBsYW5nPUVOLUdCPjxzcGFuIHN0eWxlPSdtc28tc3BlY2lh +bC1jaGFyYWN0ZXI6Zm9vdG5vdGUtc2VwYXJhdG9yJz48IVtpZiAhc3VwcG9ydEZvb3Rub3Rlc10+ +DQoNCjxociBhbGlnbj1sZWZ0IHNpemU9MSB3aWR0aD0iMzMlIj4NCg0KPCFbZW5kaWZdPjwvc3Bh +bj48L3NwYW4+PC9wPg0KDQo8L2Rpdj4NCg0KPGRpdiBzdHlsZT0nbXNvLWVsZW1lbnQ6Zm9vdG5v +dGUtY29udGludWF0aW9uLXNlcGFyYXRvcicgaWQ9ZmNzPg0KDQo8cCBjbGFzcz1Nc29Ob3JtYWwg +c3R5bGU9J21hcmdpbi1ib3R0b206MGNtO21hcmdpbi1ib3R0b206LjAwMDFwdDtsaW5lLWhlaWdo +dDoNCm5vcm1hbCc+PHNwYW4gbGFuZz1FTi1HQj48c3BhbiBzdHlsZT0nbXNvLXNwZWNpYWwtY2hh +cmFjdGVyOmZvb3Rub3RlLWNvbnRpbnVhdGlvbi1zZXBhcmF0b3InPjwhW2lmICFzdXBwb3J0Rm9v +dG5vdGVzXT4NCg0KPGhyIGFsaWduPWxlZnQgc2l6ZT0xPg0KDQo8IVtlbmRpZl0+PC9zcGFuPjwv +c3Bhbj48L3A+DQoNCjwvZGl2Pg0KDQo8ZGl2IHN0eWxlPSdtc28tZWxlbWVudDplbmRub3RlLXNl +cGFyYXRvcicgaWQ9ZXM+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWJvdHRv +bTowY207bWFyZ2luLWJvdHRvbTouMDAwMXB0O2xpbmUtaGVpZ2h0Og0Kbm9ybWFsJz48c3BhbiBs +YW5nPUVOLUdCPjxzcGFuIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6Zm9vdG5vdGUtc2Vw +YXJhdG9yJz48IVtpZiAhc3VwcG9ydEZvb3Rub3Rlc10+DQoNCjxociBhbGlnbj1sZWZ0IHNpemU9 +MSB3aWR0aD0iMzMlIj4NCg0KPCFbZW5kaWZdPjwvc3Bhbj48L3NwYW4+PC9wPg0KDQo8L2Rpdj4N +Cg0KPGRpdiBzdHlsZT0nbXNvLWVsZW1lbnQ6ZW5kbm90ZS1jb250aW51YXRpb24tc2VwYXJhdG9y +JyBpZD1lY3M+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWJvdHRvbTowY207 +bWFyZ2luLWJvdHRvbTouMDAwMXB0O2xpbmUtaGVpZ2h0Og0Kbm9ybWFsJz48c3BhbiBsYW5nPUVO +LUdCPjxzcGFuIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6Zm9vdG5vdGUtY29udGludWF0 +aW9uLXNlcGFyYXRvcic+PCFbaWYgIXN1cHBvcnRGb290bm90ZXNdPg0KDQo8aHIgYWxpZ249bGVm +dCBzaXplPTE+DQoNCjwhW2VuZGlmXT48L3NwYW4+PC9zcGFuPjwvcD4NCg0KPC9kaXY+DQoNCjxk +aXYgc3R5bGU9J21zby1lbGVtZW50OmhlYWRlcicgaWQ9ZWgxPg0KPHAgY2xhc3M9TXNvSGVhZGVy +IGFsaWduPWxlZnQgc3R5bGU9J3RleHQtYWxpZ246bGVmdDtsaW5lLWhlaWdodDoxMi4wcHQ7DQpt +c28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5Jz48c3BhbiBsYW5nPUVOLUdCPkNDJm5ic3A7Q0Mv +Q0QgNTEwMDY6MjAxODoyMDE4PC9zcGFuPjwvcD4NCjwvZGl2Pg0KDQo8ZGl2IHN0eWxlPSdtc28t +ZWxlbWVudDpoZWFkZXInIGlkPWgxPg0KDQo8cCBjbGFzcz1Nc29IZWFkZXIgc3R5bGU9J21hcmdp +bi1ib3R0b206MTguMHB0Jz48c3BhbiBsYW5nPUVOLUdCDQpzdHlsZT0nZm9udC1zaXplOjEwLjBw +dDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0O2ZvbnQtd2VpZ2h0Om5vcm1hbCc+wqkNClRoZSBD +YWxlbmRhcmluZyBhbmQgU2NoZWR1bGluZyBDb25zb3J0aXVtLCBJbmMuJm5ic3A7MjAxOCZuYnNw +O+KAkyBBbGwgcmlnaHRzIHJlc2VydmVkPC9zcGFuPjxzcGFuIGxhbmc9RU4tR0INCnN0eWxlPSdm +b250LXdlaWdodDpub3JtYWwnPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCg0KPC9kaXY+DQoNCjxk +aXYgc3R5bGU9J21zby1lbGVtZW50OmZvb3RlcicgaWQ9ZWYxPg0KDQo8cCBjbGFzcz1Nc29Gb290 +ZXIgc3R5bGU9J21hcmdpbi10b3A6MTIuMHB0O2xpbmUtaGVpZ2h0OjEyLjBwdDttc28tbGluZS1o +ZWlnaHQtcnVsZToNCmV4YWN0bHknPjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PGIgc3R5bGU9J21z +by1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbCc+PHNwYW4NCmxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQt +c2l6ZToxMC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCnN0eWxlPSdtc28t +ZWxlbWVudDpmaWVsZC1iZWdpbic+PC9zcGFuPjxzcGFuDQpzdHlsZT0nbXNvLXNwYWNlcnVuOnll +cyc+wqA8L3NwYW4+UEFHRTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz7CoMKgDQo8L3Nw +YW4+XCogTUVSR0VGT1JNQVQgPHNwYW4gc3R5bGU9J21zby1lbGVtZW50OmZpZWxkLXNlcGFyYXRv +cic+PC9zcGFuPjwvc3Bhbj48L2I+PCFbZW5kaWZdLS0+PGINCnN0eWxlPSdtc28tYmlkaS1mb250 +LXdlaWdodDpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7 +DQptc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3BhbiBzdHlsZT0nbXNvLW5vLXByb29mOnll +cyc+Mjwvc3Bhbj48L3NwYW4+PC9iPjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PGINCnN0eWxlPSdt +c28tYmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQt +c2l6ZToxMC4wcHQ7DQptc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3BhbiBzdHlsZT0nbXNv +LWVsZW1lbnQ6ZmllbGQtZW5kJz48L3NwYW4+PC9zcGFuPjwvYj48IVtlbmRpZl0tLT48c3Bhbg0K +bGFuZz1FTi1HQiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250LXNpemU6MTEu +MHB0Jz48c3Bhbg0Kc3R5bGU9J21zby10YWItY291bnQ6MSc+wqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA8L3NwYW4+wqkNClRoZSBDYWxlbmRh +cmluZyBhbmQgU2NoZWR1bGluZyBDb25zb3J0aXVtLCBJbmMuJm5ic3A7MjAxOCZuYnNwO+KAkyBB +bGwgcmlnaHRzIHJlc2VydmVkPG86cD48L286cD48L3NwYW4+PC9wPg0KDQo8L2Rpdj4NCg0KPGRp +diBzdHlsZT0nbXNvLWVsZW1lbnQ6aGVhZGVyJyBpZD1laDI+DQo8cCBjbGFzcz1Nc29IZWFkZXIg +YWxpZ249bGVmdCBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0O2xpbmUtaGVpZ2h0OjEyLjBwdDsNCm1z +by1saW5lLWhlaWdodC1ydWxlOmV4YWN0bHknPjxzcGFuIGxhbmc9RU4tR0I+VGhlIENhbGVuZGFy +aW5nIGFuZCBTY2hlZHVsaW5nIENvbnNvcnRpdW0sIEluYy4mbmJzcDtDQy9DRCA1MTAwNjoyMDE4 +OjIwMTg8L3NwYW4+PC9wPg0KPC9kaXY+DQoNCjxkaXYgc3R5bGU9J21zby1lbGVtZW50OmhlYWRl +cicgaWQ9ZWgybD4NCjxwIGNsYXNzPU1zb0hlYWRlckxhbmRzY2FwZSBhbGlnbj1sZWZ0IHN0eWxl +PSd0ZXh0LWFsaWduOmxlZnQ7bGluZS1oZWlnaHQ6MTIuMHB0Ow0KbXNvLWxpbmUtaGVpZ2h0LXJ1 +bGU6ZXhhY3RseSc+PHNwYW4gbGFuZz1FTi1HQj5UaGUgQ2FsZW5kYXJpbmcgYW5kIFNjaGVkdWxp +bmcgQ29uc29ydGl1bSwgSW5jLiZuYnNwO0NDL0NEIDUxMDA2OjIwMTg6MjAxODwvc3Bhbj48L3A+ +DQo8L2Rpdj4NCg0KPGRpdiBzdHlsZT0nbXNvLWVsZW1lbnQ6aGVhZGVyJyBpZD1oMj4NCjxwIGNs +YXNzPU1zb0hlYWRlciBhbGlnbj1yaWdodCBzdHlsZT0ndGV4dC1hbGlnbjpyaWdodDtsaW5lLWhl +aWdodDoxMi4wcHQ7DQptc28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5Jz48c3BhbiBsYW5nPUVO +LUdCPlRoZSBDYWxlbmRhcmluZyBhbmQgU2NoZWR1bGluZyBDb25zb3J0aXVtLCBJbmMuJm5ic3A7 +Q0MvQ0QgNTEwMDY6MjAxODoyMDE4PC9zcGFuPjwvcD4NCjwvZGl2Pg0KDQo8ZGl2IHN0eWxlPSdt +c28tZWxlbWVudDpoZWFkZXInIGlkPWgybD4NCjxwIGNsYXNzPU1zb0hlYWRlckxhbmRzY2FwZSBh +bGlnbj1yaWdodCBzdHlsZT0ndGV4dC1hbGlnbjpyaWdodDtsaW5lLWhlaWdodDoxMi4wcHQ7DQpt +c28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5Jz48c3BhbiBsYW5nPUVOLUdCPlRoZSBDYWxlbmRh +cmluZyBhbmQgU2NoZWR1bGluZyBDb25zb3J0aXVtLCBJbmMuJm5ic3A7Q0MvQ0QgNTEwMDY6MjAx +ODoyMDE4PC9zcGFuPjwvcD4NCjwvZGl2Pg0KDQo8ZGl2IHN0eWxlPSdtc28tZWxlbWVudDpmb290 +ZXInIGlkPWVmMj4NCjxwIGNsYXNzPU1zb0Zvb3RlciBzdHlsZT0nbGluZS1oZWlnaHQ6MTIuMHB0 +O21zby1saW5lLWhlaWdodC1ydWxlOmV4YWN0bHknPjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PHNw +YW4NCmxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7bXNvLWJpZGktZm9udC1zaXpl +OjExLjBwdCc+PHNwYW4NCnN0eWxlPSdtc28tZWxlbWVudDpmaWVsZC1iZWdpbic+PC9zcGFuPjxz +cGFuDQpzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+wqA8L3NwYW4+UEFHRTxzcGFuIHN0eWxlPSdt +c28tc3BhY2VydW46eWVzJz7CoMKgDQo8L3NwYW4+XCogTUVSR0VGT1JNQVQgPHNwYW4gc3R5bGU9 +J21zby1lbGVtZW50OmZpZWxkLXNlcGFyYXRvcic+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0tLT48 +c3Bhbg0KbGFuZz1FTi1HQiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250LXNp +emU6MTEuMHB0Jz48c3Bhbg0Kc3R5bGU9J21zby1uby1wcm9vZjp5ZXMnPmlpPC9zcGFuPjwvc3Bh +bj48IS0tW2lmIHN1cHBvcnRGaWVsZHNdPjxzcGFuDQpsYW5nPUVOLUdCIHN0eWxlPSdmb250LXNp +emU6MTAuMHB0O21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQpzdHlsZT0nbXNvLWVs +ZW1lbnQ6ZmllbGQtZW5kJz48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXS0tPjxzcGFuIGxhbmc9RU4t +R0INCnN0eWxlPSdmb250LXNpemU6MTAuMHB0O21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxz +cGFuIHN0eWxlPSdtc28tdGFiLWNvdW50Og0KMSc+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA8L3NwYW4+wqkNClRoZSBDYWxlbmRhcmluZyBh +bmQgU2NoZWR1bGluZyBDb25zb3J0aXVtLCBJbmMuJm5ic3A7MjAxOCZuYnNwO+KAkyBBbGwgcmln +aHRzIHJlc2VydmVkPG86cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQoNCjxkaXYgc3R5bGU9 +J21zby1lbGVtZW50OmZvb3RlcicgaWQ9ZWYybD4NCjxwIGNsYXNzPU1zb0Zvb3RlckxhbmRzY2Fw +ZSBzdHlsZT0nbGluZS1oZWlnaHQ6MTIuMHB0O21zby1saW5lLWhlaWdodC1ydWxlOmV4YWN0bHkn +PjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PHNwYW4NCmxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6 +ZToxMC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCnN0eWxlPSdtc28tZWxl +bWVudDpmaWVsZC1iZWdpbic+PC9zcGFuPjxzcGFuDQpzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+ +wqA8L3NwYW4+UEFHRTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz7CoMKgDQo8L3NwYW4+ +XCogTUVSR0VGT1JNQVQgPHNwYW4gc3R5bGU9J21zby1lbGVtZW50OmZpZWxkLXNlcGFyYXRvcic+ +PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0tLT48c3Bhbg0KbGFuZz1FTi1HQiBzdHlsZT0nZm9udC1z +aXplOjEwLjBwdDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3Bhbg0Kc3R5bGU9J21zby1u +by1wcm9vZjp5ZXMnPmlpPC9zcGFuPjwvc3Bhbj48IS0tW2lmIHN1cHBvcnRGaWVsZHNdPjxzcGFu +DQpsYW5nPUVOLUdCIHN0eWxlPSdmb250LXNpemU6MTAuMHB0O21zby1iaWRpLWZvbnQtc2l6ZTox +MS4wcHQnPjxzcGFuDQpzdHlsZT0nbXNvLWVsZW1lbnQ6ZmllbGQtZW5kJz48L3NwYW4+PC9zcGFu +PjwhW2VuZGlmXS0tPjxzcGFuIGxhbmc9RU4tR0INCnN0eWxlPSdmb250LXNpemU6MTAuMHB0O21z +by1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuIHN0eWxlPSdtc28tdGFiLWNvdW50Og0KMSc+ +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA8 +L3NwYW4+wqkNClRoZSBDYWxlbmRhcmluZyBhbmQgU2NoZWR1bGluZyBDb25zb3J0aXVtLCBJbmMu +Jm5ic3A7MjAxOCZuYnNwO+KAkyBBbGwgcmlnaHRzIHJlc2VydmVkPG86cD48L286cD48L3NwYW4+ +PC9wPg0KPC9kaXY+DQoNCjxkaXYgc3R5bGU9J21zby1lbGVtZW50OmZvb3RlcicgaWQ9ZjI+DQo8 +cCBjbGFzcz1Nc29Gb290ZXIgc3R5bGU9J2xpbmUtaGVpZ2h0OjEyLjBwdCc+PHNwYW4gbGFuZz1F +Ti1HQg0Kc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+ +wqkgVGhlIENhbGVuZGFyaW5nIGFuZCBTY2hlZHVsaW5nIENvbnNvcnRpdW0sIEluYy4mbmJzcDsy +MDE4Jm5ic3A74oCTIEFsbA0KcmlnaHRzIHJlc2VydmVkPHNwYW4gc3R5bGU9J21zby10YWItY291 +bnQ6MSc+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqAgPC9zcGFuPjwvc3Bhbj48IS0tW2lmIHN1cHBvcnRGaWVsZHNdPjxzcGFuDQpsYW5nPUVOLUdC +IHN0eWxlPSdmb250LXNpemU6MTAuMHB0O21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFu +DQpzdHlsZT0nbXNvLWVsZW1lbnQ6ZmllbGQtYmVnaW4nPjwvc3Bhbj4gUEFHRTxzcGFuIHN0eWxl +PSdtc28tc3BhY2VydW46eWVzJz7CoMKgDQo8L3NwYW4+XCogTUVSR0VGT1JNQVQgPHNwYW4gc3R5 +bGU9J21zby1lbGVtZW50OmZpZWxkLXNlcGFyYXRvcic+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0t +LT48c3Bhbg0KbGFuZz1FTi1HQiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250 +LXNpemU6MTEuMHB0Jz48c3Bhbg0Kc3R5bGU9J21zby1uby1wcm9vZjp5ZXMnPmlpaTwvc3Bhbj48 +L3NwYW4+PCEtLVtpZiBzdXBwb3J0RmllbGRzXT48c3Bhbg0KbGFuZz1FTi1HQiBzdHlsZT0nZm9u +dC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3Bhbg0Kc3R5bGU9J21z +by1lbGVtZW50OmZpZWxkLWVuZCc+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0tLT48c3BhbiBsYW5n +PUVOLUdCDQpzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0 +Jz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4NCg0KPGRpdiBzdHlsZT0nbXNvLWVsZW1l +bnQ6Zm9vdGVyJyBpZD1mMmw+DQo8cCBjbGFzcz1Nc29Gb290ZXJMYW5kc2NhcGUgc3R5bGU9J2xp +bmUtaGVpZ2h0OjEyLjBwdCc+PHNwYW4gbGFuZz1FTi1HQg0Kc3R5bGU9J2ZvbnQtc2l6ZToxMC4w +cHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+wqkgVGhlIENhbGVuZGFyaW5nIGFuZCBTY2hl +ZHVsaW5nIENvbnNvcnRpdW0sIEluYy4mbmJzcDsyMDE4Jm5ic3A74oCTIEFsbA0KcmlnaHRzIHJl +c2VydmVkPHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6MSc+wqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPC9zcGFuPjwvc3Bhbj48IS0tW2lmIHN1 +cHBvcnRGaWVsZHNdPjxzcGFuDQpsYW5nPUVOLUdCIHN0eWxlPSdmb250LXNpemU6MTAuMHB0O21z +by1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQpzdHlsZT0nbXNvLWVsZW1lbnQ6ZmllbGQt +YmVnaW4nPjwvc3Bhbj4gUEFHRTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz7CoMKgDQo8 +L3NwYW4+XCogTUVSR0VGT1JNQVQgPHNwYW4gc3R5bGU9J21zby1lbGVtZW50OmZpZWxkLXNlcGFy +YXRvcic+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0tLT48c3Bhbg0KbGFuZz1FTi1HQiBzdHlsZT0n +Zm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3Bhbg0Kc3R5bGU9 +J21zby1uby1wcm9vZjp5ZXMnPmlpaTwvc3Bhbj48L3NwYW4+PCEtLVtpZiBzdXBwb3J0RmllbGRz +XT48c3Bhbg0KbGFuZz1FTi1HQiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250 +LXNpemU6MTEuMHB0Jz48c3Bhbg0Kc3R5bGU9J21zby1lbGVtZW50OmZpZWxkLWVuZCc+PC9zcGFu +Pjwvc3Bhbj48IVtlbmRpZl0tLT48c3BhbiBsYW5nPUVOLUdCDQpzdHlsZT0nZm9udC1zaXplOjEw +LjBwdDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8 +L2Rpdj4NCg0KPGRpdiBzdHlsZT0nbXNvLWVsZW1lbnQ6Zm9vdGVyJyBpZD1lZjM+DQo8cCBjbGFz +cz1Nc29Gb290ZXIgc3R5bGU9J21hcmdpbi10b3A6MTIuMHB0O2xpbmUtaGVpZ2h0OjEyLjBwdDtt +c28tbGluZS1oZWlnaHQtcnVsZToNCmV4YWN0bHknPjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PGIg +c3R5bGU9J21zby1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbCc+PHNwYW4NCmxhbmc9RU4tR0Igc3R5 +bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCnN0 +eWxlPSdtc28tZWxlbWVudDpmaWVsZC1iZWdpbic+PC9zcGFuPjxzcGFuDQpzdHlsZT0nbXNvLXNw +YWNlcnVuOnllcyc+wqA8L3NwYW4+UEFHRTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz7C +oMKgDQo8L3NwYW4+XCogTUVSR0VGT1JNQVQgPHNwYW4gc3R5bGU9J21zby1lbGVtZW50OmZpZWxk +LXNlcGFyYXRvcic+PC9zcGFuPjwvc3Bhbj48L2I+PCFbZW5kaWZdLS0+PGINCnN0eWxlPSdtc28t +YmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6 +ZToxMC4wcHQ7DQptc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3BhbiBzdHlsZT0nbXNvLW5v +LXByb29mOnllcyc+Mjwvc3Bhbj48L3NwYW4+PC9iPjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PGIN +CnN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0Igc3R5 +bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7DQptc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3BhbiBz +dHlsZT0nbXNvLWVsZW1lbnQ6ZmllbGQtZW5kJz48L3NwYW4+PC9zcGFuPjwvYj48IVtlbmRpZl0t +LT48c3Bhbg0KbGFuZz1FTi1HQiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250 +LXNpemU6MTEuMHB0Jz48c3Bhbg0Kc3R5bGU9J21zby10YWItY291bnQ6MSc+wqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA8L3NwYW4+wqkNClRo +ZSBDYWxlbmRhcmluZyBhbmQgU2NoZWR1bGluZyBDb25zb3J0aXVtLCBJbmMuJm5ic3A7MjAxOCZu +YnNwO+KAkyBBbGwgcmlnaHRzIHJlc2VydmVkPG86cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+ +DQoNCjxkaXYgc3R5bGU9J21zby1lbGVtZW50OmZvb3RlcicgaWQ9ZWYzbD4NCjxwIGNsYXNzPU1z +b0Zvb3RlckxhbmRzY2FwZSBzdHlsZT0nbWFyZ2luLXRvcDoxMi4wcHQ7bGluZS1oZWlnaHQ6MTIu +MHB0O21zby1saW5lLWhlaWdodC1ydWxlOg0KZXhhY3RseSc+PCEtLVtpZiBzdXBwb3J0RmllbGRz +XT48YiBzdHlsZT0nbXNvLWJpZGktZm9udC13ZWlnaHQ6bm9ybWFsJz48c3Bhbg0KbGFuZz1FTi1H +QiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3Bh +bg0Kc3R5bGU9J21zby1lbGVtZW50OmZpZWxkLWJlZ2luJz48L3NwYW4+PHNwYW4NCnN0eWxlPSdt +c28tc3BhY2VydW46eWVzJz7CoDwvc3Bhbj5QQUdFPHNwYW4gc3R5bGU9J21zby1zcGFjZXJ1bjp5 +ZXMnPsKgwqANCjwvc3Bhbj5cKiBNRVJHRUZPUk1BVCA8c3BhbiBzdHlsZT0nbXNvLWVsZW1lbnQ6 +ZmllbGQtc2VwYXJhdG9yJz48L3NwYW4+PC9zcGFuPjwvYj48IVtlbmRpZl0tLT48Yg0Kc3R5bGU9 +J21zby1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbCc+PHNwYW4gbGFuZz1FTi1HQiBzdHlsZT0nZm9u +dC1zaXplOjEwLjBwdDsNCm1zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuIHN0eWxlPSdt +c28tbm8tcHJvb2Y6eWVzJz4yPC9zcGFuPjwvc3Bhbj48L2I+PCEtLVtpZiBzdXBwb3J0RmllbGRz +XT48Yg0Kc3R5bGU9J21zby1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1hbCc+PHNwYW4gbGFuZz1FTi1H +QiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDsNCm1zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxz +cGFuIHN0eWxlPSdtc28tZWxlbWVudDpmaWVsZC1lbmQnPjwvc3Bhbj48L3NwYW4+PC9iPjwhW2Vu +ZGlmXS0tPjxzcGFuDQpsYW5nPUVOLUdCIHN0eWxlPSdmb250LXNpemU6MTAuMHB0O21zby1iaWRp +LWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQpzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz7CoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDwvc3Bhbj7C +qQ0KVGhlIENhbGVuZGFyaW5nIGFuZCBTY2hlZHVsaW5nIENvbnNvcnRpdW0sIEluYy4mbmJzcDsy +MDE4Jm5ic3A74oCTIEFsbCByaWdodHMgcmVzZXJ2ZWQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8 +L2Rpdj4NCg0KPGRpdiBzdHlsZT0nbXNvLWVsZW1lbnQ6Zm9vdGVyJyBpZD1mMz4NCjxwIGNsYXNz +PU1zb0Zvb3RlciBzdHlsZT0nbGluZS1oZWlnaHQ6MTIuMHB0Jz48c3BhbiBsYW5nPUVOLUdCDQpz +dHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz7CqSBUaGUg +Q2FsZW5kYXJpbmcgYW5kIFNjaGVkdWxpbmcgQ29uc29ydGl1bSwgSW5jLiZuYnNwOzIwMTgmbmJz +cDvigJMgQWxsDQpyaWdodHMgcmVzZXJ2ZWQ8c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz7C +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDwv +c3Bhbj48L3NwYW4+PCEtLVtpZiBzdXBwb3J0RmllbGRzXT48Yg0Kc3R5bGU9J21zby1iaWRpLWZv +bnQtd2VpZ2h0Om5vcm1hbCc+PHNwYW4gbGFuZz1FTi1HQiBzdHlsZT0nZm9udC1zaXplOjEwLjBw +dDsNCm1zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuIHN0eWxlPSdtc28tZWxlbWVudDpm +aWVsZC1iZWdpbic+PC9zcGFuPg0KUEFHRTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz7C +oMKgIDwvc3Bhbj5cKiBNRVJHRUZPUk1BVCA8c3Bhbg0Kc3R5bGU9J21zby1lbGVtZW50OmZpZWxk +LXNlcGFyYXRvcic+PC9zcGFuPjwvc3Bhbj48L2I+PCFbZW5kaWZdLS0+PGINCnN0eWxlPSdtc28t +YmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6 +ZToxMC4wcHQ7DQptc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3BhbiBzdHlsZT0nbXNvLW5v +LXByb29mOnllcyc+Mzwvc3Bhbj48L3NwYW4+PC9iPjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PGIN +CnN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0Igc3R5 +bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7DQptc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3BhbiBz +dHlsZT0nbXNvLWVsZW1lbnQ6ZmllbGQtZW5kJz48L3NwYW4+PC9zcGFuPjwvYj48IVtlbmRpZl0t +LT48c3Bhbg0KbGFuZz1FTi1HQiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250 +LXNpemU6MTEuMHB0Jz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4NCg0KPGRpdiBzdHls +ZT0nbXNvLWVsZW1lbnQ6Zm9vdGVyJyBpZD1mM2w+DQo8cCBjbGFzcz1Nc29Gb290ZXJMYW5kc2Nh +cGUgc3R5bGU9J2xpbmUtaGVpZ2h0OjEyLjBwdCc+PHNwYW4gbGFuZz1FTi1HQg0Kc3R5bGU9J2Zv +bnQtc2l6ZToxMC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+wqkgVGhlIENhbGVuZGFy +aW5nIGFuZCBTY2hlZHVsaW5nIENvbnNvcnRpdW0sIEluYy4mbmJzcDsyMDE4Jm5ic3A74oCTIEFs +bA0KcmlnaHRzIHJlc2VydmVkPHNwYW4gc3R5bGU9J21zby10YWItY291bnQ6MSc+wqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC +oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg +wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA8L3NwYW4+PC9z +cGFuPjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PGINCnN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdo +dDpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7DQptc28t +YmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3BhbiBzdHlsZT0nbXNvLWVsZW1lbnQ6ZmllbGQtYmVn +aW4nPjwvc3Bhbj4NClBBR0U8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+wqDCoCA8L3Nw +YW4+XCogTUVSR0VGT1JNQVQgPHNwYW4NCnN0eWxlPSdtc28tZWxlbWVudDpmaWVsZC1zZXBhcmF0 +b3InPjwvc3Bhbj48L3NwYW4+PC9iPjwhW2VuZGlmXS0tPjxiDQpzdHlsZT0nbXNvLWJpZGktZm9u +dC13ZWlnaHQ6bm9ybWFsJz48c3BhbiBsYW5nPUVOLUdCIHN0eWxlPSdmb250LXNpemU6MTAuMHB0 +Ow0KbXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PHNwYW4gc3R5bGU9J21zby1uby1wcm9vZjp5 +ZXMnPjM8L3NwYW4+PC9zcGFuPjwvYj48IS0tW2lmIHN1cHBvcnRGaWVsZHNdPjxiDQpzdHlsZT0n +bXNvLWJpZGktZm9udC13ZWlnaHQ6bm9ybWFsJz48c3BhbiBsYW5nPUVOLUdCIHN0eWxlPSdmb250 +LXNpemU6MTAuMHB0Ow0KbXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PHNwYW4gc3R5bGU9J21z +by1lbGVtZW50OmZpZWxkLWVuZCc+PC9zcGFuPjwvc3Bhbj48L2I+PCFbZW5kaWZdLS0+PHNwYW4N +Cmxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjEx +LjBwdCc+PG86cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQoNCjwvYm9keT4NCg0KPC9odG1s +Pg0K + +------=_NextPart_81178210.676e.4040-- \ No newline at end of file diff --git a/documents/cc-51006.html b/documents/cc-51006.html new file mode 100644 index 0000000..2abdf42 --- /dev/null +++ b/documents/cc-51006.html @@ -0,0 +1,3868 @@ + + + + Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component + + + + + + + + + + + + + + + + +
+

Committee Draft

+
+ +
+

CalConnect Standard

+
+ +
+ +
+ + +
+
+ +
+
+ CC/CD 51006:2018 + +
+ +
+ Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component + +
+
+ + + +
+ TC FREEBUSY +
+ + + + + +
+ +
+ + + Eric YorkAuthor + + Cyrus DabooAuthor + + Michael DouglassAuthor + +
+ +
+ + +
+
+ +
+
+ CalConnect Standard +
+ +
+ Committee Draft +
+ + +
+
+

Warning for Drafts

+ +

This document is not a CalConnect Standard. It is distributed for review and + comment, and is subject to change without notice and may not be referred to as + a Standard. Recipients of this draft are invited to submit, with their + comments, notification of any relevant patent rights of which they are aware + and to provide supporting documentation. +

+
+
+
+ + + + +
+
+
+
+ +

 

+
+
+ +
+
+
+ + + + + + + + + +
+
+
+

Foreword

+

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+

The Calendaring and Scheduling Consortium (“CalConnect”) is a global +non-profit organization with the aim to facilitate interoperability of +collaborative technologies and tools through open standards.

+

CalConnect works closely with international and regional partners, +of which the full list is available on our website +(https://www.calconnect.org/about/liaisons-and-relationships).

+

The procedures used to develop this document and those intended for its +further maintenance are described in the CalConnect Directives.

+

In particular the different approval criteria needed for the different +types of CalConnect documents should be noted. This document was drafted in +accordance with the editorial rules of the CalConnect Directives.

+

Attention is drawn to the possibility that some of the elements of this +document may be the subject of patent rights. CalConnect shall not be +held responsible for identifying any or all such patent rights. Details +of any patent rights identified during the development of the document +will be provided in the Introduction.

+

Any trade name used in this document is information given for the +convenience of users and does not constitute an endorsement.

+

This document was prepared by Technical Committee +FREEBUSY.

+
+
+
+

Introduction

+

The currently existing approach to agreeing on meeting times using +iTip RFC 5546 and/or iMip RFC 6047 has 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.

+
+

Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component

+
+

1.  Scope

+

This document provides a mechanism in iCalendar for consensus scheduling.

+
+

2.  Normative references

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

IETF RFC 2518, HTTP Extensions for Distributed Authoring — WEBDAV

IETF RFC 3986, Uniform Resource Identifier (URI): Generic Syntax

IETF RFC 4791, Calendaring Extensions to WebDAV (CalDAV)

IETF RFC 5545, Internet Calendaring and Scheduling Core Object Specification (iCalendar)

IETF RFC 5546, iCalendar Transport-Independent Interoperability Protocol (iTIP)

IETF RFC 6047, iCalendar Message-Based Interoperability Protocol (iMIP)

IETF RFC 6638, Scheduling Extensions to CalDAV

IETF I-D.ietf-calext-eventpub-extensions, Event Publishing Extensions to iCalendar

+

3.  Terms and definitions

For the purposes of this document, + the following terms and definitions apply.

3.1. 

consensus scheduling

+ +

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+

3.2. 

active Vpoll

+ +

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+

3.3. 

voter

+ +

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+
+

4.  Simple Consensus Scheduling

+

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+

4.1.  The VPOLL Component: An Overview

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+

DTSTAMP

+

The usual RFC 5545 property.

+

SEQUENCE

+

The usual RFC 5545 property. See below for SEQUENCE +behavior.

+

UID

+

The usual RFC 5545 property.

+

ORGANIZER

+

The usual RFC 5545 property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+

SUMMARY

+

The usual RFC 5545 property. This optional but +recommended property provides the a short title to the poll.

+

DESCRIPTION

+

The usual RFC 5545 property. This optional property +provides more details.

+

DTEND

+

The usual RFC 5545 property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+

POLL-MODE

+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value “BASIC” +meaning one event will be chosen from the alternatives.

+

POLL-COMPLETION

+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is “SERVER-SUBMIT” which means the client chooses the winner +but the server will submit the winning choice.

+

POLL-PROPERTIES

+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value “DTSTART, LOCATION” meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+

PARTICIPANT

+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to “VOTER”. The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+

VOTE

+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+

VEVENT

+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+

EXAMPLE

VPOLL with 3 voters and 3 alternative meetings:

+
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD:REQUEST
BEGIN:VPOLL
POLL-MODE:BASIC
POLL-COMPLETION:SERVER-SUBMIT
POLL-PROPERTIES:DTSTART,LOCATION
ORGANIZER:mailto:mike@example.com
UID:sched01-1234567890
DTSTAMP:20120101T000000Z
SUMMARY:What to do this week
DTEND:20120101T000000Z
BEGIN: PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:cyrus@example.com
END PARTICIPANT
BEGIN: PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:eric@example.com
END PARTICIPANT
BEGIN: PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:mike@example.com
END PARTICIPANT
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
+
+

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.

+

4.2.  The VPOLL Alternative Choices: An Overview

Within the VPOLL component we have the alternatives to vote on. In +many respects these are standard RFC 5545 components. For our +simple use case they are all VEVENT components. In addition to the +usual RFC 5545 properties some extra properties are used for a +VPOLL.

+

POLL-ITEM-ID

+

This provides a unique reference to the sub-component +within the VPOLL. It’s value SHOULD be a small integer.

+
+

4.3.  VPOLL responses

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 and components:

+

DTSTAMP

+

The usual RFC 5545 property.

+

SEQUENCE

+

The usual RFC 5545 property. See below for SEQUENCE +behavior.

+

UID

+

Same as the request.

+

ORGANIZER

+

Same as the request.

+

SUMMARY

+

Same as the request.

+

PARTICIPANT

+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+

VOTE

+

One per item being voted on.

+

POLL-ITEM-ID

+

One inside each VOTE component to identify the choice.

+

RESPONSE

+

One inside each VOTE component to specify the vote.

+
+

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.

+

NOTE

+

This is poll-mode specific behavior?

+
+

EXAMPLE

REPLY VPOLL from Cyrus:

+
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD: REPLY
BEGIN:VPOLL
ORGANIZER:mailto:mike@example.com
UID:sched01-1234567890
DTSTAMP:20120101T010000Z
SUMMARY:What to do this week
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:cyrus@example.com
BEGIN:VOTE
POLL-ITEM-ID:1
RESPONSE:50
COMMENT:Work on iTIP
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:2
RESPONSE:100
COMMENT:Work on WebDAV
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:3
RESPONSE:0
END:VOTE
END:PARTICIPANT
END:VPOLL
END:VCALENDAR
+
+

4.4.  VPOLL updates

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+

EXAMPLE

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD: POLLSTATUS
BEGIN:VPOLL
ORGANIZER:mailto:mike@example.com
UID:sched01-1234567890
DTSTAMP:20120101T020000Z
SEQUENCE:0
SUMMARY:What to do this week
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:cyrus@example.com
BEGIN: VOTE
POLL-ITEM-ID:1
RESPONSE:50
COMMENT:Work on iTIP
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:2
RESPONSE:100
COMMENT:Work on WebDAV
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:3
RESPONSE:0
END:VOTE
END:PARTICIPANT
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:eric@example.com
BEGIN:VOTE
POLL-ITEM-ID:1
RESPONSE:100
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:2
RESPONSE:100
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:3
RESPONSE:0
END:VOTE
END:PARTICIPANT
END:VPOLL
END:VCALENDAR
+
+

4.5.  VPOLL Completion

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +“SUBMITTED”.

+

EXAMPLE

VPOLL confirmation:

+
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD: REQUEST
BEGIN:VPOLL
ORGANIZER:mailto:douglm@example.com
UID:sched01-1234567890
DTSTAMP:20120101T030000Z
COMPLETED:20120101T030000Z
POLL-COMPLETION:SERVER-SUBMIT
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
+
+

4.6.  Other Responses

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+
+
+

5.  iCalendar Extensions

+

5.1.  Updated Participant Type Value

Participant type property values are defined in section 11.2.1. of +I-D.ietf-calext-eventpub-extensions. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+

Format Definition

+

This property parameter is redefined by the following notation:

+
+
partvalue       /= "VOTER"

Figure 1

+ +

Description

+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+

5.2.  Updated Relation Type Value

Relationship parameter type values are defined in section 3.2.15. of +RFC 5545. 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.

+

Format Definition

+

This property parameter is redefined by the following notation:

+
+
reltypeparam       /= "RELTYPE" "=" "POLL"
; Property value is a VPOLL uid

Figure 2

+ +

Description

+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+

5.3.  Updated Status Value

Status property values are defined in section 3.8.1.11. of RFC 5545. +This specification updates that type to define valid VPOLL status +values.

+

Format Definition

+

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
          / "SUBMITTED"  ; The winning item has been
                         ; submitted
          / "CANCELLED"

Figure 3

+ +

Description

+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+

Figure 4

+
+

5.4.  New Property Parameters

5.4.1.  Required

Parameter name

+

REQUIRED

+

Purpose

+

To specify whether the associated property is required in +the current context.

+

Format Definition

+

This parameter is defined by the following notation:

+
+
requirededparam = "REQUIRED"  "=" ("TRUE" / "FALSE")
  ; Default is FALSE

Figure 5

+ +

Description

+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+

5.4.2.  Stay-Informed

Parameter name

+

STAY-INFORMED

+

Purpose

+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+

Format Definition

+

This parameter is defined by the following notation:

+
+
stayinformedparam = "STAY-INFORMED"  "=" ("TRUE" / "FALSE")
                  ; Default is FALSE

Figure 6

+ +

Description

+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+

5.5.  New Properties

5.5.1.  Accept-Response

Property name

+

ACCEPT-RESPONSE

+

Purpose

+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+

Property Parameters

+

Non-standard or iana parameters can be +specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+

If this property is not present voters are only allowed to respond +to the choices in the request.

+

Format Definition

+

This property is defined by the following notation:

+
+
acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":"
                    iana-token ("," iana-token) CRLF

acceptresponseparams = *(";" other-param)

Figure 7

+
+

5.5.2.  Poll-Completion

Property name

+

POLL-COMPLETION

+

Purpose

+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+

Description

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

Format Definition

+

This property is defined by the following notation:

+
+
poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF

pcparam = *(";" other-param)

pcvalue = "SERVER"  ; The server is responsible for both choosing and
                   ; submitting the winner(s)
        / "SERVER-SUBMIT" ; The server is responsible for
                   ; submitting the winner(s). The client chooses.
        / "SERVER-CHOICE"  ; The server is responsible for
                   ; choosing the winner(s). The client will submit.
        / "CLIENT" ; The client is responsible for both choosing and
                   ; submitting the winner(s)
        / iana-token
        / x-name
        ;Default is CLIENT

Figure 8

+ +

Example

+

The following is an example of this property:

+
+
POLL-COMPLETION: SERVER-SUBMIT

Figure 9

+
+

5.5.3.  Poll-Item-Id

Property name

+

POLL-ITEM-ID

+

Purpose

+

This property is used in VPOLL child components as an +identifier.

+

Value type

+

INTEGER

+

Property Parameters

+

Non-standard parameters can be specified on +this property.

+

Conformance

+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+

Description

+

In a METHOD:REQUEST each choice 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.

+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+

Format Definition

+

This property is defined by the following notation:

+
+
pollitemid = "POLL-ITEM-ID" pollitemdparams ":"
                  integer CRLF

pollitemidparams = *(
                   (";" other-param)
            )

Figure 10

+
+

5.5.4.  Poll-Mode

Property name

+

POLL-MODE

+

Purpose

+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+

Property Parameters

+

Non-standard or iana parameters can be +specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component or +its sub-components.

+

Description

+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+

Format Definition

+

This property is defined by the following notation:

+
+
pollmode = "POLL-MODE" pollmodeparams ":"
             ("BASIC" / iana-token / other-token) CRLF

pollmodeparams = *(";" other-param)

Figure 11

+
+

5.5.5.  Poll-properties

Property name

+

POLL-PROPERTIES

+

Purpose

+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+

Property Parameters

+

Non-standard or iana parameters can be +specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+

Format Definition

+

This property is defined by the following notation:

+
+
pollproperties = "POLL-PROPERTIES" pollpropparams ":"
             text *("," text) CRLF

pollpropparams = *(";" other-param)

Figure 12

+
+

5.5.6.  Poll-Winner

Property name

+

POLL-WINNER

+

Purpose

+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+

Value type

+

INTEGER

+

Property Parameters

+

Non-standard parameters can be specified on +this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+

Format Definition

+

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

Figure 13

+
+

5.5.7.  Reply-URL

Property name

+

REPLY-URL

+

Purpose

+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+

Property Parameters

+

Non-standard, required or iana parameters can +be specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+

Format Definition

+

This property is defined by the following notation:

+
+
reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF

reply-urlparams = *(
                  (";" requiredparam) /
                  (";" other-param)
                  )

Figure 14

+
+

5.5.8.  Response

Property name

+

RESPONSE

+

Purpose

+

To specify a response vote.

+

Value type

+

INTEGER

+

Format Definition

+

This property is defined by the following notation:

+
+
response = "RESPONSE" response-params ":" integer CRLF
                 ; integer value 0..100

responseparams = *(";" other-param)

Figure 15

+ +

Description

+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
    +
  • +

    0 — 39 A “NO vote”

    +
  • +
  • +

    40 — 79 A “MAYBE” vote

    +
  • +
  • +

    80 — 89 A “YES — but not preferred vote”

    +
  • +
  • +

    90-100 A “YES” vote.

    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
  • +
+
+

5.6.  New Components

5.6.1.  VPOLL Component

Component name

+

VPOLL

+

Purpose

+

This component provides a mechanism by which voters can +vote on provided choices.

+

Format Definition

+

This property is defined by the following notation:

+
+
pollc    = "BEGIN" ":" "VPOLL" CRLF
            pollprop
            *participantc *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 / 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 /
          ;
          )

Figure 16

+ +

Description

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting — both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+

If specified, the “DTSTART” property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+

If “DTSTART” is present “DURATION” MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+

“DTEND” MAY be specified with or without “DTSTART” and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+

5.6.2.  VOTE Component

Component name

+

VOTE

+

Purpose

+

This component provides a mechanism by which voters can +vote on provided choices.

+

Conformance

+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+

Format Definition

+

This property is defined by the following notation:

+
+
votec     = "BEGIN" ":" "VOTE" CRLF
            voteprop
            *eventc *todoc *journalc *freebusyc
            *availabilityc *alarmc *iana-comp *x-comp
            "END" ":" "VOTE" CRLF

voteprop = *(
           ;
           ; The following are REQUIRED,
           ; but MUST NOT occur more than once.
           ;
           pollitemid / response /
           ;
           ; The following are OPTIONAL,
           ; and MAY occur more than once.
           ;
           comment / x-prop / iana-prop
           ;
           )

Figure 17

+ +

Description

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER — such as the respondees +availability.

+
+
+

6.  Poll Modes

+

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see Clause 10.3) in a published RFC.

+

6.1.  POLL-MODE:BASIC

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.

+

6.1.1.  Property restrictions

This poll mode has the following property requirements:

+

POLL-ITEM-ID

+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+

POLL-WINNER

+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+

6.1.2.  Outcome reporting

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+
+
+

7.  iTIP Extensions

+

This specification introduces a number of extensions to RFC 5546. +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.

+

7.1.  Methods

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+

Table 1

MethodDescription
+

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 PARTICIPANTS.

+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+

Table 2

OriginatorMethods
+

Organizer

+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+

Voter

+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+

7.2.  Interoperability Models

Most of the standard iTip specification applies with respect to +organizer and voters.

+

7.2.1.  Delegation

+ +

TBD

+
+

7.2.2.  Acting on Behalf of Other Calendar Users

+ +

TBD

+
+

7.2.3.  Component Revisions

+ +
    +
  • +

    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

    +
  • +
+
+

7.2.4.  Message Sequencing

+ +

TBD

+
+

7.3.  Application Protocol Elements

7.3.1.  Methods for VPOLL Calendar Components

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.

+

Table 3

Presence ValueDescription
+

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.

+

Table 4

MethodDescription
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+

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 PARTICIPANT.

+
+

7.3.2.  Method: PUBLISH

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.

+

Note

+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+

Table 5 — Constraints for a METHOD:PUBLISH of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal PUBLISH.

+
+

VPOLL

+
+

1+

+
+

DTSTAMP

+
+

1

+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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+

+
+

PARTICIPANT

+
+

0+

+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to “VOTER” — that is, no voters

+
+

REQUEST-STATUS

+
+

0

+
+

VALARM

+
+

0+

+
+

VEVENT

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VFREEBUSY

+
+

0

+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+

X-COMPONENT

+
+

0+

+
+

7.3.3.  Method: REQUEST

The “REQUEST” method in a “VPOLL” component provides the following +scheduling functions:

+
    +
  • +

    Invite “Voters” to respond to the poll.

    +
  • +
  • +

    Change the items being voted upon.

    +
  • +
  • +

    Complete or confirm the poll.

    +
  • +
  • +

    Response to a “REFRESH” request.

    +
  • +
  • +

    Update the details of an existing vpoll.

    +
  • +
  • +

    Update the status of “Voters”.

    +
  • +
  • +

    Forward a “VPOLL” to another uninvited CU.

    +
  • +
  • +

    For an existing “VPOLL” calendar component, delegate the role of +“Voter” to another CU.

    +
  • +
  • +

    For an existing “VPOLL” calendar component, change the role of +“Organizer” to another CU.

    +
  • +
+

The “Organizer” originates the “REQUEST”. The recipients of the +“REQUEST” method are the CUs voting in the poll, the “Voters”. +“Voters” use the “REPLY” method to convey votes to 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:

+

Table 6 — Constraints for a METHOD:REQUEST of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REQUEST.

+
+

VPOLL

+
+

1

+
+

PARTICIPANT

+
+

1+

+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+

DTSTAMP

+
+

1

+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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.

+
+

VFREEBUSY

+
+

0

+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

7.3.3.1.  Rescheduling a poll

+ +

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.

+
+

7.3.3.2.  Updating or Reconfirmation of a 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 a “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.

+

7.3.3.3.  Confirmation of a 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.

+
+

7.3.3.4.  Closing a Poll

+ +

The “REQUEST” method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+

7.3.3.5.  Delegating a Poll to Another CU

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”.

+

7.3.3.6.  Changing 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”.

+
+

7.3.3.7.  Sending on Behalf of the 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”.

+
+

7.3.3.8.  Forwarding to an Uninvited CU

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 a “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.

+

7.3.3.9.  Updating Voter Status

+ +

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 “RSVP=TRUE” property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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”.

+
+

7.3.4.  Method: REPLY

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” “CALENDAR-ADDRESS” +property. The “Delegate” SHOULD include the calendar address of the +“Delegator” on the “DELEGATED-FROM” property parameter of the +“Delegate’s” “CALENDAR-ADDRESS” 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”.

+

A “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. (But see comments on VFREEBUSY and VAVAILABILITY)

+

This method type is an iCalendar object that conforms to the +following property constraints:

+

Table 7 — Constraints for a METHOD:REPLY of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REPLY.

+
+

VPOLL

+
+

1+

+
+

All components MUST have the same

+
+

UID.

+
+

PARTICIPANT

+
+

1

+
+

Identifies 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 or 1

+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+

VAVAILABILITY

+
+

0

+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+

VJOURNAL

+
+

0

+
+

VTODO

+
+

0

+
+

7.3.5.  Method: CANCEL

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 Clause 7.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:

+

Table 8 — Constraints for a METHOD:CANCEL of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be CANCEL.

+
+

VPOLL

+
+

1+

+
+

All must have the same UID.

+
+

PARTICIPANT

+
+

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

+
+

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

+
+

7.3.6.  Method: REFRESH

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:

+

Table 9 — Constraints for a METHOD:REFRESH of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REFRESH.

+
+

VPOLL

+
+

1

+
+

PARTICIPANT

+
+

1

+
+

MUST identify the requester as a voter.

+
+

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

+
+

7.3.7.  Method: POLLSTATUS

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. All “Voters” MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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:

+

Table 10 — Constraints for a METHOD:POLLSTATUS of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal POLLSTATUS.

+
+

VPOLL

+
+

1+

+
+

PARTICIPANT

+
+

1+

+
+

The voters containing their current vote

+
+

COMPLETED

+
+

0 or 1

+
+

Only present for a completed poll

+
+

DTSTAMP

+
+

1

+
+

DTSTART

+
+

0 or 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

+
+

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 SHOULD NOT be present.

+
+

VFREEBUSY

+
+

0

+
+

VJOURNAL

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTODO

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+

X-COMPONENT

+
+

0+

+
+
+
+

8.  CalDAV Extensions

+

This specification extends RFC 4791 in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports.

+

Additionally, it extends RFC 6638 as it a VPOLL component is a +schedulable entity.

+

8.1.  Calendar Collection Properties

This section defines new CalDAV properties for calendar collections.

+

8.1.1.  CALDAV:supported-vpoll-component-sets

Name

+

supported-vpoll-component-sets

+

Namespace

+

urn:ietf:params:xml:ns:caldav

+

Purpose

+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

It also specifies the combination of allowed component types.

+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition Clause 8.2 being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

Definition

+
<!ELEMENT supported-vpoll-component-sets
     (supported-vpoll-component-set*) >

<!ELEMENT supported-vpoll-component-set (comp+)>

Figure 18

+ +
<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>

Figure 19

+
+

8.1.2.  CALDAV:vpoll-max-items

Name

+

vpoll-max-items

+

Namespace

+

urn:ietf:params:xml:ns:caldav

+

Purpose

+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition +Clause 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+

Definition

+
<!ELEMENT vpoll-max-items (#PCDATA)>
PCDATA value: a numeric value (integer greater than zero)

Figure 20

+ +
<C:vpoll-max-items xmlns:C="urn:ietf:params:xml:ns:caldav"
>25</C:vpoll-max-items>

Figure 21

+
+

8.1.3.  CALDAV:vpoll-max-active

Name

+

vpoll-max-active

+

Namespace

+

urn:ietf:params:xml:ns:caldav

+

Purpose

+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition +Clause 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+

Definition

+
<!ELEMENT vpoll-max-active (#PCDATA)>
PCDATA value: a numeric value (integer greater than zero)

Figure 22

+ +
<C:vpoll-max-active xmlns:C="urn:ietf:params:xml:ns:caldav"
>25</C:vpoll-max-active>

Figure 23

+
+

8.1.4.  CALDAV:vpoll-max-voters

Name

+

+vpoll-max-voters +

+

Namespace

+

+urn:ietf:params:xml:ns:caldav +

+

Purpose

+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition Clause 8.2 +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+

Definition

+
<!ELEMENT vpoll-max-voters (#PCDATA)>
PCDATA value: a numeric value (integer greater than zero)

Figure 24

+ +
<C:vpoll-max-voters xmlns:C="urn:ietf:params:xml:ns:caldav"
>25</C:vpoll-max-voters>

Figure 25

+
+

8.1.5.  CalDAV:even-more-properties

+ +
+

8.1.6.  Extensions to CalDAV scheduling

This specification extends RFC 6638.

+

Each section of Appendix A “Scheduling Privileges Summary” is +extended to include VPOLL.

+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+

8.2.  Additional Preconditions for PUT, COPY, and MOVE

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:

+

(CALDAV:supported-vpoll-component-sets)

+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+

(CALDAV:vpoll-max-items)

+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value Clause 8.1.2 +on the calendar collection where the resource will be stored;

+

(CALDAV:vpoll-max-active)

+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value +Clause 8.1.3 on the calendar collection where the resource will +be stored;

+

(CALDAV:vpoll-max-voters)

+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value Clause 8.1.4 on the +calendar collection where the resource will be stored;

+
+

8.3.  CalDAV:calendar-query Report

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.

+

8.3.1.  Example: Partial Retrieval of VPOLL

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.

+
>> 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:VPOLL
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>

Figure 26

+
+

8.4.  CalDAV time ranges

“CALDAV:time-range XML Element” in RFC 4791, Section 9.9 describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends RFC 4791 to +describe the meaning of time ranges for VPOLL

+

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.

+
+-------------------------------------------------------------------+
| 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                                          |
+---+---+---+---+---+-----------------------------------------------+

Figure 27

+
+
+
+

9.  Security Considerations

+

Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See RFC 3986 for a +discussion of the security considerations relating to URIs.

+
+
+

10.  IANA Considerations

+

10.1.  Parameter Registrations

This document defines the following new iCalendar property parameters +to be added to the registry defined in RFC 5545, Section 8.2.4:

+

Table 11

Property ParameterStatusReference
+

REQUIRED

+
+

Current

+
+

+Clause 5.4.1 +

+
+

STAY-INFORMED

+
+

Current

+
+

+Clause 5.4.2 +

+
+

10.2.  Property Registrations

This document defines the following new iCalendar properties to be +added to the registry defined in RFC 5545, Section 8.2.3:

+

Table 12

PropertyStatusReference
+

ACCEPT-RESPONSE

+
+

Current

+
+

+Clause 5.5.7 +

+
+

POLL-ITEM-ID

+
+

Current

+
+

+Clause 5.5.3 +

+
+

POLL-MODE

+
+

Current

+
+

+Clause 5.5.4 +

+
+

POLL-PROPERTIES

+
+

Current

+
+

+Clause 5.5.5 +

+
+

POLL-WINNER

+
+

Current

+
+

+Clause 5.5.6 +

+
+

RESPONSE

+
+

Current

+
+

+Clause 5.5.8 +

+
+

10.3.  POLL-MODE Registration Template

A poll mode is defined by completing the following template.

+

Poll mode name

+

The name of the poll mode.

+

Purpose

+

The purpose of the poll mode. Give a short but clear +description.

+

Reference

+

A reference to the RFC in which the poll mode is defined

+
+

10.4.  POLL-MODE Registrations

This document defines the following registered poll modes.

+

Table 13

Poll mode namePurposeReference
+

BASIC

+
+

To provide simple voting for a single outcome from a number of candidates.

+
+

Current

+
+
+
+
+

Appendix A
(informative)
Open issues

+

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+

Notifications: Need to do a section on what Notifications to + support.
+ A. VPOLL is about to end and you haven’t voted on it yet. + Instead reuse VALARMS to notify the user?

+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No — voter + has indicated now unable to attend — want to revote

+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user’s isn’t the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can’t create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+

Update to existing event after poll confirm When voting on existing + event — winning properties ONLY are merged in to the real event.

+

Need to write down what isn’t valid in a VPOLL
+ a. Can’t change POLL-MODE

+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+

? — some iTip notes On confirm — send itip if appropriate (PUBLISH) +  — all non-participating — shared — feeds + Organizer can specify where result is? + Confirm can specify that itip is sent — ITIP / NONE — parameter ? + on POLL-WINNER

+

Need to add example of freebusy in response

+
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest
METHOD: REPLY
BEGIN:VPOLL
ORGANIZER:mailto:douglm@mysite.edu
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:eric@example.com
UID:sched01-1234567890
DTSTAMP:20120101T010000Z
SEQUENCE:0
SUMMARY:What to do this week
BEGIN:VFREEBUSY
.......
END:VFREEBUSY
END:PARTICIPANT
END:VPOLL
END:VCALENDAR
+

Figure A.1

+
+
+
+

Appendix B
(informative)
Change log

+
+
+

Calext V01: 2019-10-17 MD

+
+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+
+

Calext V00: 2019-05-17 MD

+
+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+
+

V03: 2014-10-28 MD

+
+
+
    +
  • +

    Add VVOTER and VOTE components.

    +
  • +
  • +

    Add RESPONSE property.

    +
  • +
  • +

    Remove RESPONSE parameter from VOTER.

    +
  • +
+
+
+

V03: 2014-05-12 MD

+
+
+
    +
  • +

    Add reply-url property and required parameter.

    +
  • +
  • +

    Fix ACCEPT-RESPONSE definition.

    +
  • +
+
+
+

V02: 2014-05-12 MD

+
+
+
    +
  • +

    Typos fixed, clarifications made.

    +
  • +
  • +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
  • +
  • +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
  • +
  • +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
  • +
  • +

    iTip: fix broken table cells

    +
  • +
  • +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
  • +
  • +

    Added Caldav scheduling section

    +
  • +
+
+
+

V01: 2013-08-07 MD

+
+
+
    +
  • +

    Removed method CONFIRM

    +
  • +
  • +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
  • +
  • +

    Added POLL-WINNER and verbiage

    +
  • +
  • +

    Added STATUS values

    +
  • +
  • +

    Added RELTYPE=POLL

    +
  • +
  • +

    Added supported-vpoll-component-sets

    +
  • +
  • +

    Added CalDAV related parameters to VOTER

    +
  • +
  • +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
  • +
+
+
+

Initial version: 2012-11-02 MD

+
+
+
+
+
+

Bibliography

+ +
+
+ + + + + + + + + + + + + diff --git a/documents/cc-51006.pdf b/documents/cc-51006.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9dd4e8f16fd9c08910c0e9654b7dba9d79963928 GIT binary patch literal 864006 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
ym1{d8H|!+Mie7K(NuN+o{zw_~J15WWocCYs!m zESF3n2uj(-%c7b!o|S{a%VJm;hnJ52{3#msi)%NX3dgVUcwEehTWOS4=bJ0PSk z8bKqXb{N4SqAY4Gn|N6NyzC1C$s|BxRjeL7VABsC?i=c!3Ui%`cKkYPqu{ZpVSh$P z(nC{&h#EewPefg$VNOKa3xPY1qCIJM97lU%?)Vw)aRjzT01z0B00N`&M3nH|vh|1c zsbw1vfx?>)>jTTSkn3ZxxycpDf}Hrx6z?Cnc3|lg@~cgIYvRTh-Wi?=)5KGY&#~s2 zN6Q;ZqF+;C@Qc9SFy~oB%WD`M-HDFj( zO+pGOPg1RL!2?n6o?mtxZqih5kf8-*{= z=SHYZO+{FexfO@La+loq9?))m6;$&EUH(;elzQ7NN?DvgbgA=|2k;q8S?M0Qrq_D< z21BZz>G;bnEro^+Iu2{(n0`&Di#faDCVA+6@6s!W4@+dDUGlDqqP^h{?u=)r%arkS zeD=VL9i27Zr2v_{;k3S6^S<9Q3%Vq)6n%5Jxw8Vwz{zkB64=dLn4$h`r5t*#YPIc| zvbK`t?05y%!G0`rriDje#H;m4N2*uk&eznc)?N#!HpLRJQd@9GWs<@kEj27eu75rB z52_kU+c6awIoy$V=#j@&ejrx6dv~=**o7{qhmO0fqVh3syHz$Zg+TQtFZ9rfNvksH zea_6B?U5DJtn)%MZ^6^&tL{(x1q)o#_73)^=)5$NjLzHQmh;|D&WYi8lpzxI#1T7# zE2Kv%j7+q!Q!Sn2eH-WFrJ-uB7m}d^_m!2opUJx5KcR=b*h;uvG+dI}R^o_zWoe#+ z1^sDZX67bAV6!9Mutry9Ez@p?wtN@*^x#!No%~F9r(67Hw%ibg>wfJu9b>KH=XCNN z7}Fvz*25#;ugcjBOlV*s0>kM2rczMz+I>knEJZrX)WK;(vgrMz;6x2ZsO+g~7W<#JhQ$d*B^soM@>rz;i>uMFk-mzj7=}Zh9OIf$GGu)~bki!=py6 zB2Tmlgf1TcJ~6)4I2kohgN&#fq4J~6QlN6tz;Ud@g|_Sg;iP?fMxu!5^6CBbfoS_6 znhnV<_AI^ES|GYubN1U**B_e~k*0=(CdFVbnO_D5b#RxUx-Mc~MEpD?6x0xUCqy9h zMrt}lT4|t^z*fARaTny+bvGt9vyDkYraOBsR~`wIqL09^?`EZ@K_#t zGieo=&hL3l$a@UscWU=0ipsl|sx8)y`K49ueXw5LrsugL`a=DpM;6Ds^}{`R)fda4(_xDc&9FB}39#QzA#w ziKXL~1VIFI8RwDmoEE^toDT0(ZfgB9`Wd{~BFr;*YQ?x`a5J;sW!^=qPt6uYs_)Ad zLaGnU7WS;$v?Ds_*;C4L&T}A7@toDbg<=ShUxuCu<|u-n!H&fhr{0;Nxbjgs0qOCQ z<0~ZLh%2im_(*yBnc(5Jfd47i=FS_rGr=*%N@wtfi&f9y(!nNs=@6>jM$#GXyIrlV z|EN3zjn8bX6g-Ao(Acutf|bjV9!siKAU!r$t3vYQ9tqC8kI+mTp_z_n9l1qQFB6hZ zw-OXdXJHhIB==qk2I6^I?u^c7Hu@BuZ*d?7oo(^+Q*}iY%Ayes6iRzDeH3Ci#ha#H zIFe4Q5-XC4n7v&vEFB&|NOMATj-3=)YGhPp>JmvW0z*v)0bw`+P`deFU>}}ksi)^5yzC6 zm+a?~jcS?;M=B40u$<)`3_N5gb&QM4&bH)TM4$h#o#x2pVQ+HuWT%7SXe8uv`9Zqw zoTuN)jwy!g*HtZ}`x%KnpPz=lD*bVv&ww{g{+5WfxfTWaA7e9uby(ti&HR z=gtMG$)N19t;k@^%1CTpz14e+NoU+)E~#Vo!V}LA^CIM?Rkk1bSJc+$Ytn5?Dxs-F zXU`l_Do$%%6nI9M>F-tzutB_G`08O8L|8Hq>eHb@rHW7xCo0db%vczT8}&7lfqRdB zujiZd%Ej~Pgxu7)X3WnDHJJ)~Y=_aS&0oiSWPai$QK{JHT$l%!GrnYLIS3>rnw`bs znWNpN!Y#ep%BOkfV+$XjV=koM3I~^8e5;2M5esgW?~ykzOgY>-an)Gq!+

7`yAIxKnjr18Wniw=rH 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≫F$4PNsPvT+DYvx=XqoCi=#Y>mkMcEqtQG)ku63+ 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

bL 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 z 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≷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 QMHvh)zWeUyKmYRL-|LOa + + +Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component +CC/CD 51006:2018 +51006 + +2018-11-19 + + + + +CalConnect + + + + + + +Eric York + + + + + + + +Cyrus Daboo + + + + + + + +Michael Douglass + + + + + + +CalConnect + + +1 + +2018-11-19 + +en + + +committee-draft + + +2018 + + +CalConnect + + + + +standard + +FREEBUSY + + + + + + +

© 2018 The Calendaring and Scheduling Consortium, Inc.

+ + + + + + + Warning for Drafts +

This document is not a CalConnect Standard. It is distributed for review and + comment, and is subject to change without notice and may not be referred to as + a Standard. Recipients of this draft are invited to submit, with their + comments, notification of any relevant patent rights of which they are aware + and to provide supporting documentation. +

+
+
+ + + + +

All rights reserved. Unless otherwise specified, no part of this + publication may be reproduced or utilized otherwise in any form or by any + means, electronic or mechanical, including photocopying, or posting on the + internet or an intranet, without prior written permission. Permission can + be requested from the address below.

+
+
+ + + +

The Calendaring and Scheduling Consortium, Inc.

+

4390 Chaffin Lane
+ McKinleyville
+ California 95519
+ United States of America
+
+ copyright@calconnect.org
+ www.calconnect.org +

+
+
+ + +Foreword

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+

The Calendaring and Scheduling Consortium (“CalConnect”) is a global +non-profit organization with the aim to facilitate interoperability of +collaborative technologies and tools through open standards.

+

CalConnect works closely with international and regional partners, +of which the full list is available on our website +().

+

The procedures used to develop this document and those intended for its +further maintenance are described in the CalConnect Directives.

+

In particular the different approval criteria needed for the different +types of CalConnect documents should be noted. This document was drafted in +accordance with the editorial rules of the CalConnect Directives.

+

Attention is drawn to the possibility that some of the elements of this +document may be the subject of patent rights. CalConnect shall not be +held responsible for identifying any or all such patent rights. Details +of any patent rights identified during the development of the document +will be provided in the Introduction.

+

Any trade name used in this document is information given for the +convenience of users and does not constitute an endorsement.

+

This document was prepared by Technical Committee +FREEBUSY.

Introduction

The currently existing approach to agreeing on meeting times using +iTip RFC 5546 and/or iMip RFC 6047 has 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.

+ + +1.<tab/>Scope +

This document provides a mechanism in iCalendar for consensus scheduling.

+
+ +3.<tab/>Terms and definitions

For the purposes of this document, + the following terms and definitions apply.

+ + +3.1. +consensus scheduling +

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+
+3.2. +active Vpoll +

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+
+3.3. +voter +

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+4.<tab/>Simple Consensus Scheduling

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+4.1.<tab/>The VPOLL Component: An Overview

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+
+
DTSTAMP
+
+

The usual RFC 5545 property.

+
+
SEQUENCE
+
+

The usual RFC 5545 property. See below for SEQUENCE +behavior.

+
+
UID
+
+

The usual RFC 5545 property.

+
+
ORGANIZER
+
+

The usual RFC 5545 property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+
+
SUMMARY
+
+

The usual RFC 5545 property. This optional but +recommended property provides the a short title to the poll.

+
+
DESCRIPTION
+
+

The usual RFC 5545 property. This optional property +provides more details.

+
+
DTEND
+
+

The usual RFC 5545 property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+
+
POLL-MODE
+
+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value “BASIC” +meaning one event will be chosen from the alternatives.

+
+
POLL-COMPLETION
+
+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is “SERVER-SUBMIT” which means the client chooses the winner +but the server will submit the winning choice.

+
+
POLL-PROPERTIES
+
+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value “DTSTART, LOCATION” meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+
+
PARTICIPANT
+
+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to “VOTER”. The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+
+
VOTE
+
+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+
+
VEVENT
+
+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+
+EXAMPLE

VPOLL with 3 voters and 3 alternative meetings:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD:REQUEST +BEGIN:VPOLL +POLL-MODE:BASIC +POLL-COMPLETION:SERVER-SUBMIT +POLL-PROPERTIES:DTSTART,LOCATION +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T000000Z +SUMMARY:What to do this week +DTEND:20120101T000000Z +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +END PARTICIPANT +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +END PARTICIPANT +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:mike@example.com +END PARTICIPANT +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 +
+

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.

+4.2.<tab/>The VPOLL Alternative Choices: An Overview

Within the VPOLL component we have the alternatives to vote on. In +many respects these are standard RFC 5545 components. For our +simple use case they are all VEVENT components. In addition to the +usual RFC 5545 properties some extra properties are used for a +VPOLL.

+
+
POLL-ITEM-ID
+
+

This provides a unique reference to the sub-component +within the VPOLL. It’s value SHOULD be a small integer.

+
+
+4.3.<tab/>VPOLL responses

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 and components:

+
+
DTSTAMP
+
+

The usual RFC 5545 property.

+
+
SEQUENCE
+
+

The usual RFC 5545 property. See below for SEQUENCE +behavior.

+
+
UID
+
+

Same as the request.

+
+
ORGANIZER
+
+

Same as the request.

+
+
SUMMARY
+
+

Same as the request.

+
+
PARTICIPANT
+
+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+
+
VOTE
+
+

One per item being voted on.

+
+
POLL-ITEM-ID
+
+

One inside each VOTE component to identify the choice.

+
+
RESPONSE
+
+

One inside each VOTE component to specify the vote.

+
+
+

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.

+
+
NOTE
+
+

This is poll-mode specific behavior?

+
+
+EXAMPLE

REPLY VPOLL from Cyrus:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SUMMARY:What to do this week +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+4.4.<tab/>VPOLL updates

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+EXAMPLEBEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: POLLSTATUS +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T020000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +BEGIN: VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+4.5.<tab/>VPOLL Completion

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +“SUBMITTED”.

+EXAMPLE

VPOLL confirmation:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REQUEST +BEGIN:VPOLL +ORGANIZER:mailto:douglm@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T030000Z +COMPLETED:20120101T030000Z +POLL-COMPLETION:SERVER-SUBMIT +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 +
+4.6.<tab/>Other Responses

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+5.<tab/>iCalendar Extensions5.1.<tab/>Updated Participant Type Value

Participant type property values are defined in section 11.2.1. of +I-D.ietf-calext-eventpub-extensions. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+Figure 1partvalue /= "VOTER" + +
+
Description
+
+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+
+5.2.<tab/>Updated Relation Type Value

Relationship parameter type values are defined in section 3.2.15. of +RFC 5545. 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.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+Figure 2reltypeparam /= "RELTYPE" "=" "POLL" +; Property value is a VPOLL uid + +
+
Description
+
+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+
+5.3.<tab/>Updated Status Value

Status property values are defined in section 3.8.1.11. of RFC 5545. +This specification updates that type to define valid VPOLL status +values.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+Figure 3statvalue /= 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 + / "SUBMITTED" ; The winning item has been + ; submitted + / "CANCELLED" + +
+
Description
+
+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
Figure 4 +
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+
+
+
+5.4.<tab/>New Property Parameters5.4.1.<tab/>Required
+
Parameter name
+
+

REQUIRED

+
+
Purpose
+
+

To specify whether the associated property is required in +the current context.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+Figure 5requirededparam = "REQUIRED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + +
+
Description
+
+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+
+5.4.2.<tab/>Stay-Informed
+
Parameter name
+
+

STAY-INFORMED

+
+
Purpose
+
+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+Figure 6stayinformedparam = "STAY-INFORMED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + +
+
Description
+
+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+
+5.5.<tab/>New Properties5.5.1.<tab/>Accept-Response
+
Property name
+
+

ACCEPT-RESPONSE

+
+
Purpose
+
+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+

If this property is not present voters are only allowed to respond +to the choices in the request.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+Figure 7acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":" + iana-token ("," iana-token) CRLF + +acceptresponseparams = *(";" other-param) +
+5.5.2.<tab/>Poll-Completion
+
Property name
+
+

POLL-COMPLETION

+
+
Purpose
+
+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+
+
Description
+

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

+
Format Definition
+
+

This property is defined by the following notation:

+
+
+Figure 8poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF + +pcparam = *(";" other-param) + +pcvalue = "SERVER" ; The server is responsible for both choosing and + ; submitting the winner(s) + / "SERVER-SUBMIT" ; The server is responsible for + ; submitting the winner(s). The client chooses. + / "SERVER-CHOICE" ; The server is responsible for + ; choosing the winner(s). The client will submit. + / "CLIENT" ; The client is responsible for both choosing and + ; submitting the winner(s) + / iana-token + / x-name + ;Default is CLIENT + +
+
Example
+
+

The following is an example of this property:

+
+
+Figure 9POLL-COMPLETION: SERVER-SUBMIT +
+5.5.3.<tab/>Poll-Item-Id
+
Property name
+
+

POLL-ITEM-ID

+
+
Purpose
+
+

This property is used in VPOLL child components as an +identifier.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+
+
Description
+
+

In a METHOD:REQUEST each choice 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.

+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+Figure 10pollitemid = "POLL-ITEM-ID" pollitemdparams ":" + integer CRLF + +pollitemidparams = *( + (";" other-param) + ) +
+5.5.4.<tab/>Poll-Mode
+
Property name
+
+

POLL-MODE

+
+
Purpose
+
+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component or +its sub-components.

+
+
Description
+
+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+Figure 11pollmode = "POLL-MODE" pollmodeparams ":" + ("BASIC" / iana-token / other-token) CRLF + +pollmodeparams = *(";" other-param) +
+5.5.5.<tab/>Poll-properties
+
Property name
+
+

POLL-PROPERTIES

+
+
Purpose
+
+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+Figure 12pollproperties = "POLL-PROPERTIES" pollpropparams ":" + text *("," text) CRLF + +pollpropparams = *(";" other-param) +
+5.5.6.<tab/>Poll-Winner
+
Property name
+
+

POLL-WINNER

+
+
Purpose
+
+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+Figure 13pollwinner = "POLL-WINNER" pollwinnerparams ":" + integer CRLF + +pollwinnerparams = *(";" other-param) + + ; Used with a STATUS:CONFIRMED VPOLL to indicate which + ; components have been confirmed +
+5.5.7.<tab/>Reply-URL
+
Property name
+
+

REPLY-URL

+
+
Purpose
+
+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+
+
Property Parameters
+
+

Non-standard, required or iana parameters can +be specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+Figure 14reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF + +reply-urlparams = *( + (";" requiredparam) / + (";" other-param) + ) +
+5.5.8.<tab/>Response
+
Property name
+
+

RESPONSE

+
+
Purpose
+
+

To specify a response vote.

+
+
Value type
+
+

INTEGER

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+Figure 15response = "RESPONSE" response-params ":" integer CRLF + ; integer value 0..100 + +responseparams = *(";" other-param) + +
+
Description
+
+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
    +
  • +

    0 — 39 A “NO vote”

    +
  • +
  • +

    40 — 79 A “MAYBE” vote

    +
  • +
  • +

    80 — 89 A “YES — but not preferred vote”

    +
  • +
  • +

    90-100 A “YES” vote.

    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
  • +
+
+
+5.6.<tab/>New Components5.6.1.<tab/>VPOLL Component
+
Component name
+
+

VPOLL

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+Figure 16pollc = "BEGIN" ":" "VPOLL" CRLF + pollprop + *participantc *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 / 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 / + ; + ) + +
+
Description
+

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting — both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+

If specified, the “DTSTART” property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+

If “DTSTART” is present “DURATION” MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+

“DTEND” MAY be specified with or without “DTSTART” and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+
+5.6.2.<tab/>VOTE Component
+
Component name
+
+

VOTE

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Conformance
+
+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+Figure 17votec = "BEGIN" ":" "VOTE" CRLF + voteprop + *eventc *todoc *journalc *freebusyc + *availabilityc *alarmc *iana-comp *x-comp + "END" ":" "VOTE" CRLF + +voteprop = *( + ; + ; The following are REQUIRED, + ; but MUST NOT occur more than once. + ; + pollitemid / response / + ; + ; The following are OPTIONAL, + ; and MAY occur more than once. + ; + comment / x-prop / iana-prop + ; + ) + +
+
Description
+

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER — such as the respondees +availability.

+
+6.<tab/>Poll Modes

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see Clause 10.3) in a published RFC.

+6.1.<tab/>POLL-MODE:BASIC

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.

+6.1.1.<tab/>Property restrictions

This poll mode has the following property requirements:

+
+
POLL-ITEM-ID
+
+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+
+
POLL-WINNER
+
+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+
+6.1.2.<tab/>Outcome reporting

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+7.<tab/>iTIP Extensions

This specification introduces a number of extensions to RFC 5546. +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.

+7.1.<tab/>Methods

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+Table 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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 PARTICIPANTS.

+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+Table 2 + + + + + + + + + + + + + + + + +
OriginatorMethods
+

Organizer

+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+

Voter

+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+7.2.<tab/>Interoperability Models

Most of the standard iTip specification applies with respect to +organizer and voters.

+ +7.2.1.<tab/>Delegation +

TBD

+
+ +7.2.2.<tab/>Acting on Behalf of Other Calendar Users +

TBD

+
+ +7.2.3.<tab/>Component Revisions +
    +
  • +

    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

    +
  • +
+
+ +7.2.4.<tab/>Message Sequencing +

TBD

+
+7.3.<tab/>Application Protocol Elements7.3.1.<tab/>Methods for VPOLL Calendar Components

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.

+Table 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Presence ValueDescription
+

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.

+Table 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+

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 PARTICIPANT.

+
+7.3.2.<tab/>Method: PUBLISH

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.

+
+
Note
+
+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+ +Table 5 — Constraints for a METHOD:PUBLISH of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal PUBLISH.

+
+

VPOLL

+
+

1+

+
+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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+

+
+
+

PARTICIPANT

+
+

0+

+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to “VOTER” — that is, no voters

+
+

REQUEST-STATUS

+
+

0

+
+
+

VALARM

+
+

0+

+
+
+

VEVENT

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+
+

X-COMPONENT

+
+

0+

+
+
+7.3.3.<tab/>Method: REQUEST

The “REQUEST” method in a “VPOLL” component provides the following +scheduling functions:

+
    +
  • +

    Invite “Voters” to respond to the poll.

    +
  • +
  • +

    Change the items being voted upon.

    +
  • +
  • +

    Complete or confirm the poll.

    +
  • +
  • +

    Response to a “REFRESH” request.

    +
  • +
  • +

    Update the details of an existing vpoll.

    +
  • +
  • +

    Update the status of “Voters”.

    +
  • +
  • +

    Forward a “VPOLL” to another uninvited CU.

    +
  • +
  • +

    For an existing “VPOLL” calendar component, delegate the role of +“Voter” to another CU.

    +
  • +
  • +

    For an existing “VPOLL” calendar component, change the role of +“Organizer” to another CU.

    +
  • +
+

The “Organizer” originates the “REQUEST”. The recipients of the +“REQUEST” method are the CUs voting in the poll, the “Voters”. +“Voters” use the “REPLY” method to convey votes to 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:

+ +Table 6 — Constraints for a METHOD:REQUEST of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REQUEST.

+
+

VPOLL

+
+

1

+
+
+

PARTICIPANT

+
+

1+

+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+ +7.3.3.1.<tab/>Rescheduling a poll +

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.

+
+7.3.3.2.<tab/>Updating or Reconfirmation of a 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 a “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.

+ +7.3.3.3.<tab/>Confirmation of a 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.

+
+ +7.3.3.4.<tab/>Closing a Poll +

The “REQUEST” method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+7.3.3.5.<tab/>Delegating a Poll to Another CU

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”.

+ +7.3.3.6.<tab/>Changing 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”.

+
+ +7.3.3.7.<tab/>Sending on Behalf of the 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”.

+
+7.3.3.8.<tab/>Forwarding to an Uninvited CU

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 a “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.

+ +7.3.3.9.<tab/>Updating Voter Status +

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 “RSVP=TRUE” property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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”.

+
+7.3.4.<tab/>Method: REPLY

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” “CALENDAR-ADDRESS” +property. The “Delegate” SHOULD include the calendar address of the +“Delegator” on the “DELEGATED-FROM” property parameter of the +“Delegate’s” “CALENDAR-ADDRESS” 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”.

+

A “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. (But see comments on VFREEBUSY and VAVAILABILITY)

+

This method type is an iCalendar object that conforms to the +following property constraints:

+ +Table 7 — Constraints for a METHOD:REPLY of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REPLY.

+
+

VPOLL

+
+

1+

+
+

All components MUST have the same

+
+ + +

UID.

+
+

PARTICIPANT

+
+

1

+
+

Identifies 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 or 1

+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+

VAVAILABILITY

+
+

0

+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+

VJOURNAL

+
+

0

+
+
+

VTODO

+
+

0

+
+
+7.3.5.<tab/>Method: CANCEL

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 Clause 7.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:

+ +Table 8 — Constraints for a METHOD:CANCEL of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be CANCEL.

+
+

VPOLL

+
+

1+

+
+

All must have the same UID.

+
+

PARTICIPANT

+
+

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

+
+
+

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

+
+
+7.3.6.<tab/>Method: REFRESH

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:

+ +Table 9 — Constraints for a METHOD:REFRESH of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REFRESH.

+
+

VPOLL

+
+

1

+
+
+

PARTICIPANT

+
+

1

+
+

MUST identify the requester as a voter.

+
+

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

+
+
+7.3.7.<tab/>Method: POLLSTATUS

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. All “Voters” MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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:

+ +Table 10 — Constraints for a METHOD:POLLSTATUS of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal POLLSTATUS.

+
+

VPOLL

+
+

1+

+
+
+

PARTICIPANT

+
+

1+

+
+

The voters containing their current vote

+
+

COMPLETED

+
+

0 or 1

+
+

Only present for a completed poll

+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 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

+
+
+

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 SHOULD NOT be present.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTODO

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+
+

X-COMPONENT

+
+

0+

+
+
+8.<tab/>CalDAV Extensions

This specification extends RFC 4791 in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports.

+

Additionally, it extends RFC 6638 as it a VPOLL component is a +schedulable entity.

+8.1.<tab/>Calendar Collection Properties

This section defines new CalDAV properties for calendar collections.

+8.1.1.<tab/>CALDAV:supported-vpoll-component-sets
+
Name
+
+

supported-vpoll-component-sets

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1RFC 2518, Section 12.14.1).

+
+
Description
+

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

It also specifies the combination of allowed component types.

+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition Clause 8.2 being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

+
Definition
+
+
+Figure 18<!ELEMENT supported-vpoll-component-sets + (supported-vpoll-component-set*) > + +<!ELEMENT supported-vpoll-component-set (comp+)> + +Figure 19<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> +
+8.1.2.<tab/>CALDAV:vpoll-max-items
+
Name
+
+

vpoll-max-items

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1RFC 2518, Section 12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition +Clause 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+
+
Definition
+
+
+Figure 20<!ELEMENT vpoll-max-items (#PCDATA)> +PCDATA value: a numeric value (integer greater than zero) + +Figure 21<C:vpoll-max-items xmlns:C="urn:ietf:params:xml:ns:caldav" +>25</C:vpoll-max-items> +
+8.1.3.<tab/>CALDAV:vpoll-max-active
+
Name
+
+

vpoll-max-active

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1RFC 2518, Section 12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition +Clause 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+
+
Definition
+
+
+Figure 22<!ELEMENT vpoll-max-active (#PCDATA)> +PCDATA value: a numeric value (integer greater than zero) + +Figure 23<C:vpoll-max-active xmlns:C="urn:ietf:params:xml:ns:caldav" +>25</C:vpoll-max-active> +
+8.1.4.<tab/>CALDAV:vpoll-max-voters
+
Name
+
+

+vpoll-max-voters +

+
+
Namespace
+
+

+urn:ietf:params:xml:ns:caldav +

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1RFC 2518, Section 12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition Clause 8.2 +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+
+
Definition
+
+
+Figure 24<!ELEMENT vpoll-max-voters (#PCDATA)> +PCDATA value: a numeric value (integer greater than zero) + +Figure 25<C:vpoll-max-voters xmlns:C="urn:ietf:params:xml:ns:caldav" +>25</C:vpoll-max-voters> +
+ +8.1.5.<tab/>CalDAV:even-more-properties + +8.1.6.<tab/>Extensions to CalDAV scheduling

This specification extends RFC 6638.

+

Each section of Appendix A “Scheduling Privileges Summary” is +extended to include VPOLL.

+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+8.2.<tab/>Additional Preconditions for PUT, COPY, and MOVE

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:

+
+
(CALDAV:supported-vpoll-component-sets)
+
+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+
+
(CALDAV:vpoll-max-items)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value Clause 8.1.2 +on the calendar collection where the resource will be stored;

+
+
(CALDAV:vpoll-max-active)
+
+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value +Clause 8.1.3 on the calendar collection where the resource will +be stored;

+
+
(CALDAV:vpoll-max-voters)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value Clause 8.1.4 on the +calendar collection where the resource will be stored;

+
+
+8.3.<tab/>CalDAV:calendar-query Report

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.

+8.3.1.<tab/>Example: Partial Retrieval of VPOLL

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.

+Figure 26>> 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:VPOLL +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> +
+8.4.<tab/>CalDAV time ranges

“CALDAV:time-range XML Element” in 9.9RFC 4791, Section 9.9 describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends RFC 4791 to +describe the meaning of time ranges for VPOLL

+

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.

+Figure 27+-------------------------------------------------------------------+ +| 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 | ++---+---+---+---+---+-----------------------------------------------+ +
+ +9.<tab/>Security Considerations +

Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See RFC 3986 for a +discussion of the security considerations relating to URIs.

+
+10.<tab/>IANA Considerations10.1.<tab/>Parameter Registrations

This document defines the following new iCalendar property parameters +to be added to the registry defined in 8.2.4RFC 5545, Section 8.2.4:

+Table 11 + + + + + + + + + + + + + + + + + + + +
Property ParameterStatusReference
+

REQUIRED

+
+

Current

+
+

+Clause 5.4.1 +

+
+

STAY-INFORMED

+
+

Current

+
+

+Clause 5.4.2 +

+
+10.2.<tab/>Property Registrations

This document defines the following new iCalendar properties to be +added to the registry defined in 8.2.3RFC 5545, Section 8.2.3:

+Table 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyStatusReference
+

ACCEPT-RESPONSE

+
+

Current

+
+

+Clause 5.5.7 +

+
+

POLL-ITEM-ID

+
+

Current

+
+

+Clause 5.5.3 +

+
+

POLL-MODE

+
+

Current

+
+

+Clause 5.5.4 +

+
+

POLL-PROPERTIES

+
+

Current

+
+

+Clause 5.5.5 +

+
+

POLL-WINNER

+
+

Current

+
+

+Clause 5.5.6 +

+
+

RESPONSE

+
+

Current

+
+

+Clause 5.5.8 +

+
+10.3.<tab/>POLL-MODE Registration Template

A poll mode is defined by completing the following template.

+
+
Poll mode name
+
+

The name of the poll mode.

+
+
Purpose
+
+

The purpose of the poll mode. Give a short but clear +description.

+
+
Reference
+
+

A reference to the RFC in which the poll mode is defined

+
+
+10.4.<tab/>POLL-MODE Registrations

This document defines the following registered poll modes.

+Table 13 + + + + + + + + + + + + + + +
Poll mode namePurposeReference
+

BASIC

+
+

To provide simple voting for a single outcome from a number of candidates.

+
+

Current

+
+ + +
<strong>Appendix A</strong><br/>(informative)<br/><strong>Open issues</strong>

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+

Notifications: Need to do a section on what Notifications to + support.
+ A. VPOLL is about to end and you haven’t voted on it yet. + Instead reuse VALARMS to notify the user?

+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No — voter + has indicated now unable to attend — want to revote

+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user’s isn’t the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can’t create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+

Update to existing event after poll confirm When voting on existing + event — winning properties ONLY are merged in to the real event.

+

Need to write down what isn’t valid in a VPOLL
+ a. Can’t change POLL-MODE

+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+

? — some iTip notes On confirm — send itip if appropriate (PUBLISH) +  — all non-participating — shared — feeds + Organizer can specify where result is? + Confirm can specify that itip is sent — ITIP / NONE — parameter ? + on POLL-WINNER

+

Need to add example of freebusy in response

+Figure A.1BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:douglm@mysite.edu +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:VFREEBUSY +....... +END:VFREEBUSY +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+<strong>Appendix B</strong><br/>(informative)<br/><strong>Change log</strong> +
+
Calext V01: 2019-10-17 MD
+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+
Calext V00: 2019-05-17 MD
+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+
V03: 2014-10-28 MD
+
+
    +
  • +

    Add VVOTER and VOTE components.

    +
  • +
  • +

    Add RESPONSE property.

    +
  • +
  • +

    Remove RESPONSE parameter from VOTER.

    +
  • +
+
+
V03: 2014-05-12 MD
+
+
    +
  • +

    Add reply-url property and required parameter.

    +
  • +
  • +

    Fix ACCEPT-RESPONSE definition.

    +
  • +
+
+
V02: 2014-05-12 MD
+
+
    +
  • +

    Typos fixed, clarifications made.

    +
  • +
  • +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
  • +
  • +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
  • +
  • +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
  • +
  • +

    iTip: fix broken table cells

    +
  • +
  • +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
  • +
  • +

    Added Caldav scheduling section

    +
  • +
+
+
V01: 2013-08-07 MD
+
+
    +
  • +

    Removed method CONFIRM

    +
  • +
  • +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
  • +
  • +

    Added POLL-WINNER and verbiage

    +
  • +
  • +

    Added STATUS values

    +
  • +
  • +

    Added RELTYPE=POLL

    +
  • +
  • +

    Added supported-vpoll-component-sets

    +
  • +
  • +

    Added CalDAV related parameters to VOTER

    +
  • +
  • +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
  • +
+
+
Initial version: 2012-11-02 MD
+
+
+
2.<tab/>Normative references

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

2020-07-16 HTTP Extensions for Distributed Authoring — WEBDAV https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2518.xml https://www.rfc-editor.org/info/rfc2518 RFC 2518 RFC2518 10.17487/RFC2518 1999-02 Y. Goland Internet Engineering Task Force IETF E. Whitehead Internet Engineering Task Force IETF A. Faizi Internet Engineering Task Force IETF S. Carter Internet Engineering Task Force IETF D. Jensen Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document specifies a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, namespace manipulation, and resource locking (collision avoidance). [STANDARDS-TRACK] RFC 2518 Fremont, CA 2020-07-16 Uniform Resource Identifier (URI): Generic Syntax https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml https://www.rfc-editor.org/info/rfc3986 RFC 3986 RFC3986 10.17487/RFC3986 2005-01 T. Berners-Lee Internet Engineering Task Force IETF R. Fielding Internet Engineering Task Force IETF L. Masinter Internet Engineering Task Force IETF Internet Engineering Task Force IETF en A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK] STD 66 RFC 3986 Fremont, CA 2020-07-16 Calendaring Extensions to WebDAV (CalDAV) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4791.xml https://www.rfc-editor.org/info/rfc4791 RFC 4791 RFC4791 10.17487/RFC4791 2007-03 C. Daboo Internet Engineering Task Force IETF B. Desruisseaux Internet Engineering Task Force IETF L. Dusseault Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing calendaring and scheduling information based on the iCalendar format. This document defines the “calendar-access” feature of CalDAV. [STANDARDS-TRACK] RFC 4791 Fremont, CA 2020-07-16 Internet Calendaring and Scheduling Core Object Specification (iCalendar) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5545.xml https://www.rfc-editor.org/info/rfc5545 RFC 5545 RFC5545 10.17487/RFC5545 2009-09 B. Desruisseaux Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK] RFC 5545 Fremont, CA 2020-07-16 iCalendar Transport-Independent Interoperability Protocol (iTIP) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5546.xml https://www.rfc-editor.org/info/rfc5546 RFC 5546 RFC5546 10.17487/RFC5546 2009-12 C. Daboo Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document specifies a protocol that uses the iCalendar object specification to provide scheduling interoperability between different calendaring systems. This is done without reference to a specific transport protocol so as to allow multiple methods of communication between systems. Subsequent documents will define profiles of this protocol that use specific, interoperable methods of communication between systems.The iCalendar Transport-Independent Interoperability Protocol (iTIP) complements the iCalendar object specification by adding semantics for group scheduling methods commonly available in current calendaring systems. These scheduling methods permit two or more calendaring systems to perform transactions such as publishing, scheduling, rescheduling, responding to scheduling requests, negotiating changes, or canceling. [STANDARDS-TRACK] RFC 5546 Fremont, CA 2020-07-16 iCalendar Message-Based Interoperability Protocol (iMIP) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6047.xml https://www.rfc-editor.org/info/rfc6047 RFC 6047 RFC6047 10.17487/RFC6047 2010-12 A. Melnikov Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document, “iCalendar Message-Based Interoperability Protocol (iMIP)”, specifies a binding from the iCalendar Transport-independent Interoperability Protocol (iTIP) to Internet email-based transports. Calendaring entries defined by the iCalendar Object Model (iCalendar) are wrapped using constructs from RFC 5322 and MIME (RFC 2045, RFC 2046, RFC 2047, and RFC 2049), and then transported over SMTP. [STANDARDS-TRACK] RFC 6047 Fremont, CA 2020-07-16 Scheduling Extensions to CalDAV https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6638.xml https://www.rfc-editor.org/info/rfc6638 RFC 6638 RFC6638 10.17487/RFC6638 2012-06 C. Daboo Internet Engineering Task Force IETF B. Desruisseaux Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines extensions to the Calendaring Extensions to WebDAV (CalDAV) “calendar-access” feature to specify a standard way of performing scheduling operations with iCalendar-based calendar components. This document defines the “calendar-auto-schedule” feature of CalDAV. [STANDARDS-TRACK] RFC 6638 Fremont, CA 2020-07-30 Event Publishing Extensions to iCalendar https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-calext-eventpub-extensions.xml http://www.ietf.org/internet-drafts/draft-ietf-calext-eventpub-extensions-15.txt http://www.ietf.org/internet-drafts/draft-ietf-calext-eventpub-extensions-15.pdf I-D.ietf-calext-eventpub-extensions I-D.ietf-calext-eventpub-extensions draft-ietf-calext-eventpub-extensions-15 2019-10 Michael Douglass Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This specification updates RFC5545 by introducing a number of new iCalendar properties and components which are of particular use for event publishers and in social networking. This specification also defines a new STRUCTURED-DATA property for iCalendar RFC5545 to allow for data that is directly pertinent to an event or task to be included with the calendar data. Internet-Draft draft-ietf-calext-eventpub-extensions-15 Fremont, CA
+Bibliography +
+ diff --git a/documents/cc-51006.rxl b/documents/cc-51006.rxl new file mode 100644 index 0000000..5bc1c99 --- /dev/null +++ b/documents/cc-51006.rxl @@ -0,0 +1,67 @@ + +Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component +CC/CD 51006:2018 +51006 + +2018-11-19 + + + + +CalConnect + + + + + + +Eric York + + + + + + + +Cyrus Daboo + + + + + + + +Michael Douglass + + + + + + +CalConnect + + +1 + +2018-11-19 + +en + + +committee-draft + + +2018 + + +CalConnect + + + + +standard + +FREEBUSY + + + \ No newline at end of file diff --git a/documents/cc-51006.xml b/documents/cc-51006.xml new file mode 100644 index 0000000..4222333 --- /dev/null +++ b/documents/cc-51006.xml @@ -0,0 +1,4916 @@ + + + +Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component +CC/CD 51006:2018 +51006 + +2018-11-19 + + + + +CalConnect + + + + + + +Eric York + + + + + + + +Cyrus Daboo + + + + + + + +Michael Douglass + + + + + + +CalConnect + + +1 + +2018-11-19 + +en + + +committee-draft + + +2018 + + +CalConnect + + + + +standard + +FREEBUSY + + + + + + +

© 2018 The Calendaring and Scheduling Consortium, Inc.

+
+
+ + + + + Warning for Drafts +

This document is not a CalConnect Standard. It is distributed for review and + comment, and is subject to change without notice and may not be referred to as + a Standard. Recipients of this draft are invited to submit, with their + comments, notification of any relevant patent rights of which they are aware + and to provide supporting documentation. +

+
+
+ + + + +

All rights reserved. Unless otherwise specified, no part of this + publication may be reproduced or utilized otherwise in any form or by any + means, electronic or mechanical, including photocopying, or posting on the + internet or an intranet, without prior written permission. Permission can + be requested from the address below.

+
+
+ + + +

The Calendaring and Scheduling Consortium, Inc.

+

4390 Chaffin Lane
+ McKinleyville
+ California 95519
+ United States of America
+
+ copyright@calconnect.org
+ www.calconnect.org +

+
+
+
+ +Foreword

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+

The Calendaring and Scheduling Consortium (“CalConnect”) is a global +non-profit organization with the aim to facilitate interoperability of +collaborative technologies and tools through open standards.

+

CalConnect works closely with international and regional partners, +of which the full list is available on our website +().

+

The procedures used to develop this document and those intended for its +further maintenance are described in the CalConnect Directives.

+

In particular the different approval criteria needed for the different +types of CalConnect documents should be noted. This document was drafted in +accordance with the editorial rules of the CalConnect Directives.

+

Attention is drawn to the possibility that some of the elements of this +document may be the subject of patent rights. CalConnect shall not be +held responsible for identifying any or all such patent rights. Details +of any patent rights identified during the development of the document +will be provided in the Introduction.

+

Any trade name used in this document is information given for the +convenience of users and does not constitute an endorsement.

+

This document was prepared by Technical Committee +FREEBUSY.

Introduction

The currently existing approach to agreeing on meeting times using +iTip and/or iMip has 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.

+ + +Scope +

This document provides a mechanism in iCalendar for consensus scheduling.

+
+ +Terms and definitions

For the purposes of this document, + the following terms and definitions apply.

+ + + +consensus scheduling +

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+
+ +active Vpoll +

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+
+ +voter +

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+Simple Consensus Scheduling

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+The VPOLL Component: An Overview

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+
+
DTSTAMP
+
+

The usual property.

+
+
SEQUENCE
+
+

The usual property. See below for SEQUENCE +behavior.

+
+
UID
+
+

The usual property.

+
+
ORGANIZER
+
+

The usual property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+
+
SUMMARY
+
+

The usual property. This optional but +recommended property provides the a short title to the poll.

+
+
DESCRIPTION
+
+

The usual property. This optional property +provides more details.

+
+
DTEND
+
+

The usual property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+
+
POLL-MODE
+
+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value “BASIC” +meaning one event will be chosen from the alternatives.

+
+
POLL-COMPLETION
+
+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is “SERVER-SUBMIT” which means the client chooses the winner +but the server will submit the winning choice.

+
+
POLL-PROPERTIES
+
+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value “DTSTART, LOCATION” meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+
+
PARTICIPANT
+
+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to “VOTER”. The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+
+
VOTE
+
+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+
+
VEVENT
+
+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+
+

VPOLL with 3 voters and 3 alternative meetings:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD:REQUEST +BEGIN:VPOLL +POLL-MODE:BASIC +POLL-COMPLETION:SERVER-SUBMIT +POLL-PROPERTIES:DTSTART,LOCATION +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T000000Z +SUMMARY:What to do this week +DTEND:20120101T000000Z +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +END PARTICIPANT +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +END PARTICIPANT +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:mike@example.com +END PARTICIPANT +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 +
+

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.

+The VPOLL Alternative Choices: An Overview

Within the VPOLL component we have the alternatives to vote on. In +many respects these are standard components. For our +simple use case they are all VEVENT components. In addition to the +usual properties some extra properties are used for a +VPOLL.

+
+
POLL-ITEM-ID
+
+

This provides a unique reference to the sub-component +within the VPOLL. It’s value SHOULD be a small integer.

+
+
+VPOLL responses

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 and components:

+
+
DTSTAMP
+
+

The usual property.

+
+
SEQUENCE
+
+

The usual property. See below for SEQUENCE +behavior.

+
+
UID
+
+

Same as the request.

+
+
ORGANIZER
+
+

Same as the request.

+
+
SUMMARY
+
+

Same as the request.

+
+
PARTICIPANT
+
+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+
+
VOTE
+
+

One per item being voted on.

+
+
POLL-ITEM-ID
+
+

One inside each VOTE component to identify the choice.

+
+
RESPONSE
+
+

One inside each VOTE component to specify the vote.

+
+
+

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.

+
+
NOTE
+
+

This is poll-mode specific behavior?

+
+
+

REPLY VPOLL from Cyrus:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SUMMARY:What to do this week +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+VPOLL updates

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: POLLSTATUS +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T020000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +BEGIN: VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+VPOLL Completion

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +“SUBMITTED”.

+

VPOLL confirmation:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REQUEST +BEGIN:VPOLL +ORGANIZER:mailto:douglm@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T030000Z +COMPLETED:20120101T030000Z +POLL-COMPLETION:SERVER-SUBMIT +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 +
+Other Responses

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+iCalendar ExtensionsUpdated Participant Type Value

Participant type property values are defined in section 11.2.1. of +. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+partvalue /= "VOTER" + +
+
Description
+
+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+
+Updated Relation Type Value

Relationship parameter type values are defined in section 3.2.15. of +. 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.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+reltypeparam /= "RELTYPE" "=" "POLL" +; Property value is a VPOLL uid + +
+
Description
+
+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+
+Updated Status Value

Status property values are defined in section 3.8.1.11. of . +This specification updates that type to define valid VPOLL status +values.

+
+
Format Definition
+
+

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 + / "SUBMITTED" ; The winning item has been + ; submitted + / "CANCELLED" + +
+
Description
+
+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+
+
+
+New Property ParametersRequired
+
Parameter name
+
+

REQUIRED

+
+
Purpose
+
+

To specify whether the associated property is required in +the current context.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+requirededparam = "REQUIRED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + +
+
Description
+
+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+
+Stay-Informed
+
Parameter name
+
+

STAY-INFORMED

+
+
Purpose
+
+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+stayinformedparam = "STAY-INFORMED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + +
+
Description
+
+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+
+New PropertiesAccept-Response
+
Property name
+
+

ACCEPT-RESPONSE

+
+
Purpose
+
+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+

If this property is not present voters are only allowed to respond +to the choices in the request.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":" + iana-token ("," iana-token) CRLF + +acceptresponseparams = *(";" other-param) +
+Poll-Completion
+
Property name
+
+

POLL-COMPLETION

+
+
Purpose
+
+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+
+
Description
+

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

+
Format Definition
+
+

This property is defined by the following notation:

+
+
+poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF + +pcparam = *(";" other-param) + +pcvalue = "SERVER" ; The server is responsible for both choosing and + ; submitting the winner(s) + / "SERVER-SUBMIT" ; The server is responsible for + ; submitting the winner(s). The client chooses. + / "SERVER-CHOICE" ; The server is responsible for + ; choosing the winner(s). The client will submit. + / "CLIENT" ; The client is responsible for both choosing and + ; submitting the winner(s) + / iana-token + / x-name + ;Default is CLIENT + +
+
Example
+
+

The following is an example of this property:

+
+
+POLL-COMPLETION: SERVER-SUBMIT +
+Poll-Item-Id
+
Property name
+
+

POLL-ITEM-ID

+
+
Purpose
+
+

This property is used in VPOLL child components as an +identifier.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+
+
Description
+
+

In a METHOD:REQUEST each choice 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.

+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollitemid = "POLL-ITEM-ID" pollitemdparams ":" + integer CRLF + +pollitemidparams = *( + (";" other-param) + ) +
+Poll-Mode
+
Property name
+
+

POLL-MODE

+
+
Purpose
+
+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component or +its sub-components.

+
+
Description
+
+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollmode = "POLL-MODE" pollmodeparams ":" + ("BASIC" / iana-token / other-token) CRLF + +pollmodeparams = *(";" other-param) +
+Poll-properties
+
Property name
+
+

POLL-PROPERTIES

+
+
Purpose
+
+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollproperties = "POLL-PROPERTIES" pollpropparams ":" + text *("," text) CRLF + +pollpropparams = *(";" other-param) +
+Poll-Winner
+
Property name
+
+

POLL-WINNER

+
+
Purpose
+
+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+
+
Format Definition
+
+

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 +
+Reply-URL
+
Property name
+
+

REPLY-URL

+
+
Purpose
+
+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+
+
Property Parameters
+
+

Non-standard, required or iana parameters can +be specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF + +reply-urlparams = *( + (";" requiredparam) / + (";" other-param) + ) +
+Response
+
Property name
+
+

RESPONSE

+
+
Purpose
+
+

To specify a response vote.

+
+
Value type
+
+

INTEGER

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+response = "RESPONSE" response-params ":" integer CRLF + ; integer value 0..100 + +responseparams = *(";" other-param) + +
+
Description
+
+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
    +
  • +

    0 — 39 A “NO vote”

    +
  • +
  • +

    40 — 79 A “MAYBE” vote

    +
  • +
  • +

    80 — 89 A “YES — but not preferred vote”

    +
  • +
  • +

    90-100 A “YES” vote.

    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
  • +
+
+
+New ComponentsVPOLL Component
+
Component name
+
+

VPOLL

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollc = "BEGIN" ":" "VPOLL" CRLF + pollprop + *participantc *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 / 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 / + ; + ) + +
+
Description
+

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting — both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+

If specified, the “DTSTART” property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+

If “DTSTART” is present “DURATION” MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+

“DTEND” MAY be specified with or without “DTSTART” and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+
+VOTE Component
+
Component name
+
+

VOTE

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Conformance
+
+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+votec = "BEGIN" ":" "VOTE" CRLF + voteprop + *eventc *todoc *journalc *freebusyc + *availabilityc *alarmc *iana-comp *x-comp + "END" ":" "VOTE" CRLF + +voteprop = *( + ; + ; The following are REQUIRED, + ; but MUST NOT occur more than once. + ; + pollitemid / response / + ; + ; The following are OPTIONAL, + ; and MAY occur more than once. + ; + comment / x-prop / iana-prop + ; + ) + +
+
Description
+

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER — such as the respondees +availability.

+
+Poll Modes

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see ) in a published RFC.

+POLL-MODE:BASIC

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.

+Property restrictions

This poll mode has the following property requirements:

+
+
POLL-ITEM-ID
+
+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+
+
POLL-WINNER
+
+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+
+Outcome reporting

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+iTIP Extensions

This specification introduces a number of extensions to . +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.

+Methods

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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 PARTICIPANTS.

+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+ + + + + + + + + + + + + + + + + +
OriginatorMethods
+

Organizer

+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+

Voter

+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+Interoperability Models

Most of the standard iTip specification applies with respect to +organizer and voters.

+ +Delegation +

TBD

+
+ +Acting on Behalf of Other Calendar Users +

TBD

+
+ +Component Revisions +
    +
  • +

    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

    +
  • +
+
+ +Message Sequencing +

TBD

+
+Application Protocol ElementsMethods for VPOLL Calendar Components

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 ValueDescription
+

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.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+

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 PARTICIPANT.

+
+Method: PUBLISH

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.

+
+
Note
+
+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+ +Constraints for a METHOD:PUBLISH of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal PUBLISH.

+
+

VPOLL

+
+

1+

+
+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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+

+
+
+

PARTICIPANT

+
+

0+

+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to “VOTER” — that is, no voters

+
+

REQUEST-STATUS

+
+

0

+
+
+

VALARM

+
+

0+

+
+
+

VEVENT

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+
+

X-COMPONENT

+
+

0+

+
+
+Method: REQUEST

The “REQUEST” method in a “VPOLL” component provides the following +scheduling functions:

+
    +
  • +

    Invite “Voters” to respond to the poll.

    +
  • +
  • +

    Change the items being voted upon.

    +
  • +
  • +

    Complete or confirm the poll.

    +
  • +
  • +

    Response to a “REFRESH” request.

    +
  • +
  • +

    Update the details of an existing vpoll.

    +
  • +
  • +

    Update the status of “Voters”.

    +
  • +
  • +

    Forward a “VPOLL” to another uninvited CU.

    +
  • +
  • +

    For an existing “VPOLL” calendar component, delegate the role of +“Voter” to another CU.

    +
  • +
  • +

    For an existing “VPOLL” calendar component, change the role of +“Organizer” to another CU.

    +
  • +
+

The “Organizer” originates the “REQUEST”. The recipients of the +“REQUEST” method are the CUs voting in the poll, the “Voters”. +“Voters” use the “REPLY” method to convey votes to 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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REQUEST.

+
+

VPOLL

+
+

1

+
+
+

PARTICIPANT

+
+

1+

+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+ +Rescheduling a poll +

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.

+
+Updating or Reconfirmation of a 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 a “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.

+ +Confirmation of a 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.

+
+ +Closing a Poll +

The “REQUEST” method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+Delegating a Poll to Another CU

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”.

+ +Changing 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”.

+
+ +Sending on Behalf of the 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”.

+
+Forwarding to an Uninvited CU

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 a “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.

+ +Updating Voter Status +

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 “RSVP=TRUE” property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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”.

+
+Method: REPLY

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” “CALENDAR-ADDRESS” +property. The “Delegate” SHOULD include the calendar address of the +“Delegator” on the “DELEGATED-FROM” property parameter of the +“Delegate’s” “CALENDAR-ADDRESS” 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”.

+

A “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. (But see comments on VFREEBUSY and VAVAILABILITY)

+

This method type is an iCalendar object that conforms to the +following property constraints:

+ +Constraints for a METHOD:REPLY of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REPLY.

+
+

VPOLL

+
+

1+

+
+

All components MUST have the same

+
+ + +

UID.

+
+

PARTICIPANT

+
+

1

+
+

Identifies 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 or 1

+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+

VAVAILABILITY

+
+

0

+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+

VJOURNAL

+
+

0

+
+
+

VTODO

+
+

0

+
+
+Method: CANCEL

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 .

+

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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be CANCEL.

+
+

VPOLL

+
+

1+

+
+

All must have the same UID.

+
+

PARTICIPANT

+
+

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

+
+
+

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

+
+
+Method: REFRESH

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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REFRESH.

+
+

VPOLL

+
+

1

+
+
+

PARTICIPANT

+
+

1

+
+

MUST identify the requester as a voter.

+
+

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

+
+
+Method: POLLSTATUS

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. All “Voters” MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal POLLSTATUS.

+
+

VPOLL

+
+

1+

+
+
+

PARTICIPANT

+
+

1+

+
+

The voters containing their current vote

+
+

COMPLETED

+
+

0 or 1

+
+

Only present for a completed poll

+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 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

+
+
+

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 SHOULD NOT be present.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTODO

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+
+

X-COMPONENT

+
+

0+

+
+
+CalDAV Extensions

This specification extends in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports.

+

Additionally, it extends as it a VPOLL component is a +schedulable entity.

+Calendar Collection Properties

This section defines new CalDAV properties for calendar collections.

+CALDAV:supported-vpoll-component-sets
+
Name
+
+

supported-vpoll-component-sets

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

It also specifies the combination of allowed component types.

+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-items
+
Name
+
+

vpoll-max-items

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+
+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-active
+
Name
+
+

vpoll-max-active

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+
+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-voters
+
Name
+
+

+vpoll-max-voters +

+
+
Namespace
+
+

+urn:ietf:params:xml:ns:caldav +

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+
+
Definition
+
+
+<!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> +
+ +CalDAV:even-more-properties + +Extensions to CalDAV scheduling

This specification extends .

+

Each section of Appendix A “Scheduling Privileges Summary” is +extended to include VPOLL.

+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+Additional Preconditions for PUT, COPY, and MOVE

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:

+
+
(CALDAV:supported-vpoll-component-sets)
+
+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+
+
(CALDAV:vpoll-max-items)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value +on the calendar collection where the resource will be stored;

+
+
(CALDAV:vpoll-max-active)
+
+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value + on the calendar collection where the resource will +be stored;

+
+
(CALDAV:vpoll-max-voters)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value on the +calendar collection where the resource will be stored;

+
+
+CalDAV:calendar-query Report

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.

+Example: Partial Retrieval of VPOLL

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.

+>> 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:VPOLL +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> +
+CalDAV time ranges

“CALDAV:time-range XML Element” in 9.9 describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends to +describe the meaning of time ranges for VPOLL

+

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.

++-------------------------------------------------------------------+ +| 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 | ++---+---+---+---+---+-----------------------------------------------+ +
+ +Security Considerations +

Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See for a +discussion of the security considerations relating to URIs.

+
+IANA ConsiderationsParameter Registrations

This document defines the following new iCalendar property parameters +to be added to the registry defined in 8.2.4:

+ + + + + + + + + + + + + + + + + + + + +
Property ParameterStatusReference
+

REQUIRED

+
+

Current

+
+

+ +

+
+

STAY-INFORMED

+
+

Current

+
+

+ +

+
+Property Registrations

This document defines the following new iCalendar properties to be +added to the registry defined in 8.2.3:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyStatusReference
+

ACCEPT-RESPONSE

+
+

Current

+
+

+ +

+
+

POLL-ITEM-ID

+
+

Current

+
+

+ +

+
+

POLL-MODE

+
+

Current

+
+

+ +

+
+

POLL-PROPERTIES

+
+

Current

+
+

+ +

+
+

POLL-WINNER

+
+

Current

+
+

+ +

+
+

RESPONSE

+
+

Current

+
+

+ +

+
+POLL-MODE Registration Template

A poll mode is defined by completing the following template.

+
+
Poll mode name
+
+

The name of the poll mode.

+
+
Purpose
+
+

The purpose of the poll mode. Give a short but clear +description.

+
+
Reference
+
+

A reference to the RFC in which the poll mode is defined

+
+
+POLL-MODE Registrations

This document defines the following registered poll modes.

+ + + + + + + + + + + + + + + +
Poll mode namePurposeReference
+

BASIC

+
+

To provide simple voting for a single outcome from a number of candidates.

+
+

Current

+
+ + +
Open issues

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+

Notifications: Need to do a section on what Notifications to + support.
+ A. VPOLL is about to end and you haven’t voted on it yet. + Instead reuse VALARMS to notify the user?

+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No — voter + has indicated now unable to attend — want to revote

+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user’s isn’t the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can’t create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+

Update to existing event after poll confirm When voting on existing + event — winning properties ONLY are merged in to the real event.

+

Need to write down what isn’t valid in a VPOLL
+ a. Can’t change POLL-MODE

+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+

? — some iTip notes On confirm — send itip if appropriate (PUBLISH) +  — all non-participating — shared — feeds + Organizer can specify where result is? + Confirm can specify that itip is sent — ITIP / NONE — parameter ? + on POLL-WINNER

+

Need to add example of freebusy in response

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:douglm@mysite.edu +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:VFREEBUSY +....... +END:VFREEBUSY +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+Change log +
+
Calext V01: 2019-10-17 MD
+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+
Calext V00: 2019-05-17 MD
+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+
V03: 2014-10-28 MD
+
+
    +
  • +

    Add VVOTER and VOTE components.

    +
  • +
  • +

    Add RESPONSE property.

    +
  • +
  • +

    Remove RESPONSE parameter from VOTER.

    +
  • +
+
+
V03: 2014-05-12 MD
+
+
    +
  • +

    Add reply-url property and required parameter.

    +
  • +
  • +

    Fix ACCEPT-RESPONSE definition.

    +
  • +
+
+
V02: 2014-05-12 MD
+
+
    +
  • +

    Typos fixed, clarifications made.

    +
  • +
  • +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
  • +
  • +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
  • +
  • +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
  • +
  • +

    iTip: fix broken table cells

    +
  • +
  • +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
  • +
  • +

    Added Caldav scheduling section

    +
  • +
+
+
V01: 2013-08-07 MD
+
+
    +
  • +

    Removed method CONFIRM

    +
  • +
  • +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
  • +
  • +

    Added POLL-WINNER and verbiage

    +
  • +
  • +

    Added STATUS values

    +
  • +
  • +

    Added RELTYPE=POLL

    +
  • +
  • +

    Added supported-vpoll-component-sets

    +
  • +
  • +

    Added CalDAV related parameters to VOTER

    +
  • +
  • +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
  • +
+
+
Initial version: 2012-11-02 MD
+
+
+
Normative references

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

2020-07-16 HTTP Extensions for Distributed Authoring — WEBDAV https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2518.xml https://www.rfc-editor.org/info/rfc2518 RFC 2518 RFC2518 10.17487/RFC2518 1999-02 Y. Goland Internet Engineering Task Force IETF E. Whitehead Internet Engineering Task Force IETF A. Faizi Internet Engineering Task Force IETF S. Carter Internet Engineering Task Force IETF D. Jensen Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document specifies a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, namespace manipulation, and resource locking (collision avoidance). [STANDARDS-TRACK] RFC 2518 Fremont, CA 2020-07-16 Uniform Resource Identifier (URI): Generic Syntax https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml https://www.rfc-editor.org/info/rfc3986 RFC 3986 RFC3986 10.17487/RFC3986 2005-01 T. Berners-Lee Internet Engineering Task Force IETF R. Fielding Internet Engineering Task Force IETF L. Masinter Internet Engineering Task Force IETF Internet Engineering Task Force IETF en A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK] STD 66 RFC 3986 Fremont, CA 2020-07-16 Calendaring Extensions to WebDAV (CalDAV) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4791.xml https://www.rfc-editor.org/info/rfc4791 RFC 4791 RFC4791 10.17487/RFC4791 2007-03 C. Daboo Internet Engineering Task Force IETF B. Desruisseaux Internet Engineering Task Force IETF L. Dusseault Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing calendaring and scheduling information based on the iCalendar format. This document defines the “calendar-access” feature of CalDAV. [STANDARDS-TRACK] RFC 4791 Fremont, CA 2020-07-16 Internet Calendaring and Scheduling Core Object Specification (iCalendar) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5545.xml https://www.rfc-editor.org/info/rfc5545 RFC 5545 RFC5545 10.17487/RFC5545 2009-09 B. Desruisseaux Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK] RFC 5545 Fremont, CA 2020-07-16 iCalendar Transport-Independent Interoperability Protocol (iTIP) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5546.xml https://www.rfc-editor.org/info/rfc5546 RFC 5546 RFC5546 10.17487/RFC5546 2009-12 C. Daboo Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document specifies a protocol that uses the iCalendar object specification to provide scheduling interoperability between different calendaring systems. This is done without reference to a specific transport protocol so as to allow multiple methods of communication between systems. Subsequent documents will define profiles of this protocol that use specific, interoperable methods of communication between systems.The iCalendar Transport-Independent Interoperability Protocol (iTIP) complements the iCalendar object specification by adding semantics for group scheduling methods commonly available in current calendaring systems. These scheduling methods permit two or more calendaring systems to perform transactions such as publishing, scheduling, rescheduling, responding to scheduling requests, negotiating changes, or canceling. [STANDARDS-TRACK] RFC 5546 Fremont, CA 2020-07-16 iCalendar Message-Based Interoperability Protocol (iMIP) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6047.xml https://www.rfc-editor.org/info/rfc6047 RFC 6047 RFC6047 10.17487/RFC6047 2010-12 A. Melnikov Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document, “iCalendar Message-Based Interoperability Protocol (iMIP)”, specifies a binding from the iCalendar Transport-independent Interoperability Protocol (iTIP) to Internet email-based transports. Calendaring entries defined by the iCalendar Object Model (iCalendar) are wrapped using constructs from RFC 5322 and MIME (RFC 2045, RFC 2046, RFC 2047, and RFC 2049), and then transported over SMTP. [STANDARDS-TRACK] RFC 6047 Fremont, CA 2020-07-16 Scheduling Extensions to CalDAV https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6638.xml https://www.rfc-editor.org/info/rfc6638 RFC 6638 RFC6638 10.17487/RFC6638 2012-06 C. Daboo Internet Engineering Task Force IETF B. Desruisseaux Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines extensions to the Calendaring Extensions to WebDAV (CalDAV) “calendar-access” feature to specify a standard way of performing scheduling operations with iCalendar-based calendar components. This document defines the “calendar-auto-schedule” feature of CalDAV. [STANDARDS-TRACK] RFC 6638 Fremont, CA 2020-07-30 Event Publishing Extensions to iCalendar https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-calext-eventpub-extensions.xml http://www.ietf.org/internet-drafts/draft-ietf-calext-eventpub-extensions-15.txt http://www.ietf.org/internet-drafts/draft-ietf-calext-eventpub-extensions-15.pdf I-D.ietf-calext-eventpub-extensions I-D.ietf-calext-eventpub-extensions draft-ietf-calext-eventpub-extensions-15 2019-10 Michael Douglass Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This specification updates RFC5545 by introducing a number of new iCalendar properties and components which are of particular use for event publishers and in social networking. This specification also defines a new STRUCTURED-DATA property for iCalendar RFC5545 to allow for data that is directly pertinent to an event or task to be included with the calendar data. Internet-Draft draft-ietf-calext-eventpub-extensions-15 Fremont, CA
+Bibliography +
+
diff --git a/documents/draft-ietf-calext-vpoll.html b/documents/draft-ietf-calext-vpoll.html new file mode 100644 index 0000000..e3bbd4f --- /dev/null +++ b/documents/draft-ietf-calext-vpoll.html @@ -0,0 +1,9150 @@ + + + + + + +VPOLL: Consensus Scheduling Component for iCalendar + + + + + + + + + + + + + + + + + + + + + + + + +
Internet-DraftVPOLLJuly 2020
York, et al.Expires 31 January 2021[Page]
+
+
+
+
Workgroup:
+
Network Working Group
+
Internet-Draft:
+
draft-ietf-calext-vpoll-00
+
:
+
+
Published:
+
+ +
+
Intended Status:
+
Standards Track
+
Expires:
+
+
Authors:
+
+
+
E. York
+
+
+
C. Daboo
+
+
+
M. Douglass
+
+
+
+
+

VPOLL: Consensus Scheduling Component for iCalendar

+
+
+

Abstract

+
+

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+
+
+
+
+
+

+Status of This Memo +

+

+ 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 https://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 31 January 2021.

+
+
+ +
+
+

+Table of Contents +

+ +
+
+
+
+

+1. Acknowledgements +

+
+

The authors would like to thank the members of the Calendaring and Scheduling Consortium (CalConnect) for contributing their ideas and support.

+
+
+
+
+
+

+2. Introduction +

+
+

The currently existing approach to agreeing on meeting times using +iTip [RFC5546] and/or iMip [RFC6047] has 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.

+
+
+
+
+
+

+3. Terms and definitions +

+
+

For the purposes of this document, + the following terms and definitions apply.

+
+
+
+

+3.1. consensus scheduling +

+
+

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+
+
+
+
+
+

+3.2. active Vpoll +

+
+

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+
+
+
+
+
+

+3.3. voter +

+
+

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+
+
+
+
+
+
+

+4. Simple Consensus Scheduling +

+
+

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+
+
+
+

+4.1. The VPOLL Component: An Overview +

+
+

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+
+
+
+
DTSTAMP
+
+
+

The usual [RFC5545] property.

+
+
+
+
SEQUENCE
+
+
+

The usual [RFC5545] property. See below for SEQUENCE +behavior.

+
+
+
+
UID
+
+
+

The usual [RFC5545] property.

+
+
+
+
ORGANIZER
+
+
+

The usual [RFC5545] property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+
+
+
+
SUMMARY
+
+
+

The usual [RFC5545] property. This optional but +recommended property provides the a short title to the poll.

+
+
+
+
DESCRIPTION
+
+
+

The usual [RFC5545] property. This optional property +provides more details.

+
+
+
+
DTEND
+
+
+

The usual [RFC5545] property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+
+
+
+
POLL-MODE
+
+
+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value "BASIC" +meaning one event will be chosen from the alternatives.

+
+
+
+
POLL-COMPLETION
+
+
+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is "SERVER-SUBMIT" which means the client chooses the winner +but the server will submit the winning choice.

+
+
+
+
POLL-PROPERTIES
+
+
+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value "DTSTART, LOCATION" meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+
+
+
+
PARTICIPANT
+
+
+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to "VOTER". The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+
+
+
+
VOTE
+
+
+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+
+
+
+
VEVENT
+
+
+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+
+
+
+
+
+

EXAMPLE

+
+
+

VPOLL with 3 voters and 3 alternative meetings:

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD:REQUEST
+BEGIN:VPOLL
+POLL-MODE:BASIC
+POLL-COMPLETION:SERVER-SUBMIT
+POLL-PROPERTIES:DTSTART,LOCATION
+ORGANIZER:mailto:mike@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T000000Z
+SUMMARY:What to do this week
+DTEND:20120101T000000Z
+BEGIN: PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:cyrus@example.com
+END PARTICIPANT
+BEGIN: PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:eric@example.com
+END PARTICIPANT
+BEGIN: PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:mike@example.com
+END PARTICIPANT
+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
+
+
Figure 1
+
+
+

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.

+
+
+
+
+
+

+4.2. The VPOLL Alternative Choices: An Overview +

+
+

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.

+
+
+
+
POLL-ITEM-ID
+
+
+

This provides a unique reference to the sub-component +within the VPOLL. It's value SHOULD be a small integer.

+
+
+
+
+
+
+
+
+
+

+4.3. VPOLL responses +

+
+

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 and components:

+
+
+
+
DTSTAMP
+
+
+

The usual [RFC5545] property.

+
+
+
+
SEQUENCE
+
+
+

The usual [RFC5545] property. See below for SEQUENCE +behavior.

+
+
+
+
UID
+
+
+

Same as the request.

+
+
+
+
ORGANIZER
+
+
+

Same as the request.

+
+
+
+
SUMMARY
+
+
+

Same as the request.

+
+
+
+
PARTICIPANT
+
+
+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+
+
+
+
VOTE
+
+
+

One per item being voted on.

+
+
+
+
POLL-ITEM-ID
+
+
+

One inside each VOTE component to identify the choice.

+
+
+
+
RESPONSE
+
+
+

One inside each VOTE component to specify the vote.

+
+
+
+
+
+
+

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.

+
+
+
+
NOTE
+
+
+

This is poll-mode specific behavior?

+
+
+
+
+
+
+

EXAMPLE

+
+
+

REPLY VPOLL from Cyrus:

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD: REPLY
+BEGIN:VPOLL
+ORGANIZER:mailto:mike@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T010000Z
+SUMMARY:What to do this week
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:cyrus@example.com
+BEGIN:VOTE
+POLL-ITEM-ID:1
+RESPONSE:50
+COMMENT:Work on iTIP
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:2
+RESPONSE:100
+COMMENT:Work on WebDAV
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:3
+RESPONSE:0
+END:VOTE
+END:PARTICIPANT
+END:VPOLL
+END:VCALENDAR
+
+
Figure 2
+
+
+
+
+
+

+4.4. VPOLL updates +

+
+

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+
+
+

EXAMPLE

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD: POLLSTATUS
+BEGIN:VPOLL
+ORGANIZER:mailto:mike@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T020000Z
+SEQUENCE:0
+SUMMARY:What to do this week
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:cyrus@example.com
+BEGIN: VOTE
+POLL-ITEM-ID:1
+RESPONSE:50
+COMMENT:Work on iTIP
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:2
+RESPONSE:100
+COMMENT:Work on WebDAV
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:3
+RESPONSE:0
+END:VOTE
+END:PARTICIPANT
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:eric@example.com
+BEGIN:VOTE
+POLL-ITEM-ID:1
+RESPONSE:100
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:2
+RESPONSE:100
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:3
+RESPONSE:0
+END:VOTE
+END:PARTICIPANT
+END:VPOLL
+END:VCALENDAR
+
+
Figure 3
+
+
+
+
+
+

+4.5. VPOLL Completion +

+
+

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +"SUBMITTED".

+
+
+

EXAMPLE

+
+
+

VPOLL confirmation:

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD: REQUEST
+BEGIN:VPOLL
+ORGANIZER:mailto:douglm@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T030000Z
+COMPLETED:20120101T030000Z
+POLL-COMPLETION:SERVER-SUBMIT
+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
+
+
Figure 4
+
+
+
+
+
+

+4.6. Other Responses +

+
+

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+
+
+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+
+
+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+
+
+
+
+
+
+
+

+5. iCalendar Extensions +

+
+
+

+5.1. Updated Participant Type Value +

+
+

Participant type property values are defined in section 11.2.1. of +[I-D.ietf-calext-eventpub-extensions]. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+
+
+
+
Format Definition
+
+
+

This property parameter is redefined by the following notation:

+
+
+
+
+
+
+
+
+
partvalue       /= "VOTER"
+
+
Figure 5
+
+
+
+
Description
+
+
+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+
+
+
+
+
+
+
+
+

+5.2. Updated Relation Type Value +

+
+

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.

+
+
+
+
Format Definition
+
+
+

This property parameter is redefined by the following notation:

+
+
+
+
+
+
+
+
+
reltypeparam       /= "RELTYPE" "=" "POLL"
+; Property value is a VPOLL uid
+
+
Figure 6
+
+
+
+
Description
+
+
+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+
+
+
+
+
+
+
+
+

+5.3. Updated Status Value +

+
+

Status property values are defined in section 3.8.1.11. of [RFC5545]. +This specification updates that type to define valid VPOLL status +values.

+
+
+
+
Format Definition
+
+
+

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
+          / "SUBMITTED"  ; The winning item has been
+                         ; submitted
+          / "CANCELLED"
+
+
Figure 7
+
+
+
+
Description
+
+
+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
+
+
+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+
+
+
Figure 8
+
+
+
+
+
+
+
+
+
+

+5.4. New Property Parameters +

+
+
+

+5.4.1. Required +

+
+
+
Parameter name
+
+
+

REQUIRED

+
+
+
+
Purpose
+
+
+

To specify whether the associated property is required in +the current context.

+
+
+
+
Format Definition
+
+
+

This parameter is defined by the following notation:

+
+
+
+
+
+
+
+
+
requirededparam = "REQUIRED"  "=" ("TRUE" / "FALSE")
+  ; Default is FALSE
+
+
Figure 9
+
+
+
+
Description
+
+
+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+
+
+
+
+
+
+
+
+

+5.4.2. Stay-Informed +

+
+
+
Parameter name
+
+
+

STAY-INFORMED

+
+
+
+
Purpose
+
+
+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+
+
+
+
Format Definition
+
+
+

This parameter is defined by the following notation:

+
+
+
+
+
+
+
+
+
stayinformedparam = "STAY-INFORMED"  "=" ("TRUE" / "FALSE")
+                  ; Default is FALSE
+
+
Figure 10
+
+
+
+
Description
+
+
+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+
+
+
+
+
+
+
+
+
+
+

+5.5. New Properties +

+
+
+

+5.5.1. Accept-Response +

+
+
+
Property name
+
+
+

ACCEPT-RESPONSE

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+
+
+
+
Property Parameters
+
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+
+
+

If this property is not present voters are only allowed to respond +to the choices in the request.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":"
+                    iana-token ("," iana-token) CRLF
+
+acceptresponseparams = *(";" other-param)
+
+
Figure 11
+
+
+
+
+
+

+5.5.2. Poll-Completion +

+
+
+
Property name
+
+
+

POLL-COMPLETION

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+
+
+
+
Description
+
+
+

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

+
+
+

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+
+
+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+
+
+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF
+
+pcparam = *(";" other-param)
+
+pcvalue = "SERVER"  ; The server is responsible for both choosing and
+                   ; submitting the winner(s)
+        / "SERVER-SUBMIT" ; The server is responsible for
+                   ; submitting the winner(s). The client chooses.
+        / "SERVER-CHOICE"  ; The server is responsible for
+                   ; choosing the winner(s). The client will submit.
+        / "CLIENT" ; The client is responsible for both choosing and
+                   ; submitting the winner(s)
+        / iana-token
+        / x-name
+        ;Default is CLIENT
+
+
Figure 12
+
+
+
+
Example
+
+
+

The following is an example of this property:

+
+
+
+
+
+
+
+
+
POLL-COMPLETION: SERVER-SUBMIT
+
+
Figure 13
+
+
+
+
+
+

+5.5.3. Poll-Item-Id +

+
+
+
Property name
+
+
+

POLL-ITEM-ID

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL child components as an +identifier.

+
+
+
+
Value type
+
+
+

INTEGER

+
+
+
+
Property Parameters
+
+
+

Non-standard parameters can be specified on +this property.

+
+
+
+
Conformance
+
+
+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+
+
+
+
Description
+
+
+

In a METHOD:REQUEST each choice 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.

+
+
+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollitemid = "POLL-ITEM-ID" pollitemdparams ":"
+                  integer CRLF
+
+pollitemidparams = *(
+                   (";" other-param)
+            )
+
+
Figure 14
+
+
+
+
+
+

+5.5.4. Poll-Mode +

+
+
+
Property name
+
+
+

POLL-MODE

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+
+
+
+
Property Parameters
+
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component or +its sub-components.

+
+
+
+
Description
+
+
+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+
+
+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollmode = "POLL-MODE" pollmodeparams ":"
+             ("BASIC" / iana-token / other-token) CRLF
+
+pollmodeparams = *(";" other-param)
+
+
Figure 15
+
+
+
+
+
+

+5.5.5. Poll-properties +

+
+
+
Property name
+
+
+

POLL-PROPERTIES

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+
+
+
+
Property Parameters
+
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollproperties = "POLL-PROPERTIES" pollpropparams ":"
+             text *("," text) CRLF
+
+pollpropparams = *(";" other-param)
+
+
Figure 16
+
+
+
+
+
+

+5.5.6. Poll-Winner +

+
+
+
Property name
+
+
+

POLL-WINNER

+
+
+
+
Purpose
+
+
+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+
+
+
+
Value type
+
+
+

INTEGER

+
+
+
+
Property Parameters
+
+
+

Non-standard parameters can be specified on +this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+
+
+
+
Format Definition
+
+
+

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
+
+
Figure 17
+
+
+
+
+
+

+5.5.7. Reply-URL +

+
+
+
Property name
+
+
+

REPLY-URL

+
+
+
+
Purpose
+
+
+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+
+
+
+
Property Parameters
+
+
+

Non-standard, required or iana parameters can +be specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF
+
+reply-urlparams = *(
+                  (";" requiredparam) /
+                  (";" other-param)
+                  )
+
+
Figure 18
+
+
+
+
+
+

+5.5.8. Response +

+
+
+
Property name
+
+
+

RESPONSE

+
+
+
+
Purpose
+
+
+

To specify a response vote.

+
+
+
+
Value type
+
+
+

INTEGER

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
response = "RESPONSE" response-params ":" integer CRLF
+                 ; integer value 0..100
+
+responseparams = *(";" other-param)
+
+
Figure 19
+
+
+
+
Description
+
+
+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
+
    +
  • +
    +

    0 - 39 A "NO vote"

    +
    +
  • +
  • +
    +

    40 - 79 A "MAYBE" vote

    +
    +
  • +
  • +
    +

    80 - 89 A "YES - but not preferred vote"

    +
    +
  • +
  • +
    +

    90-100 A "YES" vote.

    +
    +
    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
    +
  • +
+
+
+
+
+
+
+
+
+
+
+

+5.6. New Components +

+
+
+

+5.6.1. VPOLL Component +

+
+
+
Component name
+
+
+

VPOLL

+
+
+
+
Purpose
+
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollc    = "BEGIN" ":" "VPOLL" CRLF
+            pollprop
+            *participantc *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 / 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 /
+          ;
+          )
+
+
Figure 20
+
+
+
+
Description
+
+
+

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

+
+
+

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting - both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+
+
+

If specified, the "DTSTART" property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+
+
+

If "DTSTART" is present "DURATION" MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+
+
+

"DTEND" MAY be specified with or without "DTSTART" and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+
+
+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+
+
+
+
+
+
+
+
+
+

+5.6.2. VOTE Component +

+
+
+
Component name
+
+
+

VOTE

+
+
+
+
Purpose
+
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
+
+
Conformance
+
+
+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
votec     = "BEGIN" ":" "VOTE" CRLF
+            voteprop
+            *eventc *todoc *journalc *freebusyc
+            *availabilityc *alarmc *iana-comp *x-comp
+            "END" ":" "VOTE" CRLF
+
+voteprop = *(
+           ;
+           ; The following are REQUIRED,
+           ; but MUST NOT occur more than once.
+           ;
+           pollitemid / response /
+           ;
+           ; The following are OPTIONAL,
+           ; and MAY occur more than once.
+           ;
+           comment / x-prop / iana-prop
+           ;
+           )
+
+
Figure 21
+
+
+
+
Description
+
+
+

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

+
+
+

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+
+
+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+
+
+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER - such as the respondees +availability.

+
+
+
+
+
+
+
+
+
+
+
+
+
+

+6. Poll Modes +

+
+

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+
+
+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see Section 10.3) in a published RFC.

+
+
+
+

+6.1. POLL-MODE:BASIC +

+
+

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.

+
+
+
+

+6.1.1. Property restrictions +

+
+

This poll mode has the following property requirements:

+
+
+
+
POLL-ITEM-ID
+
+
+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+
+
+
+
POLL-WINNER
+
+
+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+
+
+
+
+
+
+
+
+

+6.1.2. Outcome reporting +

+
+

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+
+
+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+
+
+
+
+
+
+
+
+
+

+7. iTIP Extensions +

+
+

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.

+
+
+
+

+7.1. Methods +

+
+

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1
MethodDescription
+
+

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 PARTICIPANTS.

+
+
+
+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+
+
+ + + + + + + + + + + + + + + + + + +
Table 2
OriginatorMethods
+
+

Organizer

+
+
+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+
+
+

Voter

+
+
+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+
+
+
+
+
+
+

+7.2. Interoperability Models +

+
+

Most of the standard iTip specification applies with respect to +organizer and voters.

+
+
+
+

+7.2.1. Delegation +

+
+

TBD

+
+
+
+ +
+
+

+7.2.3. Component Revisions +

+
    +
  • +
    +

    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

    +
    +
  • +
+
+
+
+
+

+7.2.4. Message Sequencing +

+
+

TBD

+
+
+
+
+
+
+
+

+7.3. Application Protocol Elements +

+
+
+

+7.3.1. Methods for VPOLL Calendar Components +

+
+

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.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3
Presence ValueDescription
+
+

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.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4
MethodDescription
+
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+
+
+

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 PARTICIPANT.

+
+
+
+
+
+
+
+

+7.3.2. Method: PUBLISH +

+
+

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.

+
+
+
+
Note
+
+
+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+
+
+
+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 5: +Constraints for a METHOD:PUBLISH of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST equal PUBLISH.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

DTSTAMP

+
+
+
+

1

+
+
+
+

DTSTART

+
+
+
+

0 or 1

+
+
+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+
+
+

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+

+
+
+
+

PARTICIPANT

+
+
+
+

0+

+
+
+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to "VOTER" - that is, no voters

+
+
+
+

REQUEST-STATUS

+
+
+
+

0

+
+
+
+

VALARM

+
+
+
+

0+

+
+
+
+

VEVENT

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VFREEBUSY

+
+
+
+

0

+
+
+
+

VJOURNAL

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VTODO

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VTIMEZONE

+
+
+
+

0+

+
+
+
+

MUST be present if any date/time refers to a timezone.

+
+
+
+

IANA-COMPONENT

+
+
+
+

0+

+
+
+
+

X-COMPONENT

+
+
+
+

0+

+
+
+
+
+
+
+
+

+7.3.3. Method: REQUEST +

+
+

The "REQUEST" method in a "VPOLL" component provides the following +scheduling functions:

+
+
    +
  • +
    +

    Invite "Voters" to respond to the poll.

    +
    +
  • +
  • +
    +

    Change the items being voted upon.

    +
    +
  • +
  • +
    +

    Complete or confirm the poll.

    +
    +
  • +
  • +
    +

    Response to a "REFRESH" request.

    +
    +
  • +
  • +
    +

    Update the details of an existing vpoll.

    +
    +
  • +
  • +
    +

    Update the status of "Voters".

    +
    +
  • +
  • +
    +

    Forward a "VPOLL" to another uninvited CU.

    +
    +
  • +
  • +
    +

    For an existing "VPOLL" calendar component, delegate the role of +"Voter" to another CU.

    +
    +
  • +
  • +
    +

    For an existing "VPOLL" calendar component, change the role of +"Organizer" to another CU.

    +
    +
  • +
+
+

The "Organizer" originates the "REQUEST". The recipients of the +"REQUEST" method are the CUs voting in the poll, the "Voters". +"Voters" use the "REPLY" method to convey votes to 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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 6: +Constraints for a METHOD:REQUEST of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be REQUEST.

+
+
+
+

VPOLL

+
+
+
+

1

+
+
+
+

PARTICIPANT

+
+
+
+

1+

+
+
+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+
+
+

DTSTAMP

+
+
+
+

1

+
+
+
+

DTSTART

+
+
+
+

0 or 1

+
+
+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+
+
+

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.

+
+
+
+

VFREEBUSY

+
+
+
+

0

+
+
+
+

VJOURNAL

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VTODO

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+
+
+
+7.3.3.1. Rescheduling a poll +
+
+

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.

+
+
+
+
+
+
+7.3.3.2. Updating or Reconfirmation of a 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 a "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.

+
+
+
+
+
+
+7.3.3.3. Confirmation of a 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.

+
+
+
+
+
+
+7.3.3.4. Closing a Poll +
+
+

The "REQUEST" method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+
+
+
+
+
+7.3.3.5. Delegating a Poll to Another CU +
+
+

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".

+
+
+
+
+
+
+7.3.3.6. Changing 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".

+
+
+
+
+
+
+7.3.3.7. Sending on Behalf of the 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".

+
+
+
+
+
+
+7.3.3.8. Forwarding to an Uninvited CU +
+
+

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 a "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.

+
+
+
+
+
+
+7.3.3.9. Updating Voter Status +
+
+

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 "RSVP=TRUE" property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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".

+
+
+
+
+
+
+
+

+7.3.4. Method: REPLY +

+
+

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" "CALENDAR-ADDRESS" +property. The "Delegate" SHOULD include the calendar address of the +"Delegator" on the "DELEGATED-FROM" property parameter of the +"Delegate's" "CALENDAR-ADDRESS" 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".

+
+
+

A "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. (But see comments on VFREEBUSY and VAVAILABILITY)

+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 7: +Constraints for a METHOD:REPLY of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be REPLY.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

All components MUST have the same

+
+
+
+

UID.

+
+
+
+

PARTICIPANT

+
+
+
+

1

+
+
+
+

Identifies 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 or 1

+
+
+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+
+
+

VAVAILABILITY

+
+
+
+

0

+
+
+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+
+
+

VJOURNAL

+
+
+
+

0

+
+
+
+

VTODO

+
+
+
+

0

+
+
+
+
+
+
+
+

+7.3.5. Method: CANCEL +

+
+

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 7.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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 8: +Constraints for a METHOD:CANCEL of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be CANCEL.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

All must have the same UID.

+
+
+
+

PARTICIPANT

+
+
+
+

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

+
+
+
+

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

+
+
+
+
+
+
+
+

+7.3.6. Method: REFRESH +

+
+

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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 9: +Constraints for a METHOD:REFRESH of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be REFRESH.

+
+
+
+

VPOLL

+
+
+
+

1

+
+
+
+

PARTICIPANT

+
+
+
+

1

+
+
+
+

MUST identify the requester as a voter.

+
+
+
+

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

+
+
+
+
+
+
+
+

+7.3.7. Method: POLLSTATUS +

+
+

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. All "Voters" MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 10: +Constraints for a METHOD:POLLSTATUS of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST equal POLLSTATUS.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

PARTICIPANT

+
+
+
+

1+

+
+
+
+

The voters containing their current vote

+
+
+
+

COMPLETED

+
+
+
+

0 or 1

+
+
+
+

Only present for a completed poll

+
+
+
+

DTSTAMP

+
+
+
+

1

+
+
+
+

DTSTART

+
+
+
+

0 or 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

+
+
+
+

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 SHOULD NOT be present.

+
+
+
+

VFREEBUSY

+
+
+
+

0

+
+
+
+

VJOURNAL

+
+
+
+

0

+
+
+
+

All candidate components SHOULD NOT be present.

+
+
+
+

VTODO

+
+
+
+

0

+
+
+
+

All candidate components SHOULD NOT be present.

+
+
+
+

VTIMEZONE

+
+
+
+

0+

+
+
+
+

MUST be present if any date/time refers to a timezone.

+
+
+
+

IANA-COMPONENT

+
+
+
+

0+

+
+
+
+

X-COMPONENT

+
+
+
+

0+

+
+
+
+
+
+
+
+
+
+
+
+

+8. CalDAV Extensions +

+
+

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.

+
+
+

Additionally, it extends [RFC6638] as it a VPOLL component is a +schedulable entity.

+
+
+
+

+8.1. Calendar Collection Properties +

+
+

This section defines new CalDAV properties for calendar collections.

+
+
+
+

+8.1.1. CALDAV:supported-vpoll-component-sets +

+
+
+
Name
+
+
+

supported-vpoll-component-sets

+
+
+
+
Namespace
+
+
+

urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

+
+
+

It also specifies the combination of allowed component types.

+
+
+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition Section 8.2 being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
<!ELEMENT supported-vpoll-component-sets
+     (supported-vpoll-component-set*) >
+
+<!ELEMENT supported-vpoll-component-set (comp+)>
+
+
Figure 22
+
+
+
+
+
<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>
+
+
Figure 23
+
+
+
+
+
+

+8.1.2. CALDAV:vpoll-max-items +

+
+
+
Name
+
+
+

vpoll-max-items

+
+
+
+
Namespace
+
+
+

urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition +Section 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
<!ELEMENT vpoll-max-items (#PCDATA)>
+PCDATA value: a numeric value (integer greater than zero)
+
+
Figure 24
+
+
+
+
+
<C:vpoll-max-items xmlns:C="urn:ietf:params:xml:ns:caldav"
+>25</C:vpoll-max-items>
+
+
Figure 25
+
+
+
+
+
+

+8.1.3. CALDAV:vpoll-max-active +

+
+
+
Name
+
+
+

vpoll-max-active

+
+
+
+
Namespace
+
+
+

urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition +Section 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
<!ELEMENT vpoll-max-active (#PCDATA)>
+PCDATA value: a numeric value (integer greater than zero)
+
+
Figure 26
+
+
+
+
+
<C:vpoll-max-active xmlns:C="urn:ietf:params:xml:ns:caldav"
+>25</C:vpoll-max-active>
+
+
Figure 27
+
+
+
+
+
+

+8.1.4. CALDAV:vpoll-max-voters +

+
+
+
Name
+
+
+

+vpoll-max-voters

+
+
+
+
Namespace
+
+
+

+urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition Section 8.2 +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
<!ELEMENT vpoll-max-voters (#PCDATA)>
+PCDATA value: a numeric value (integer greater than zero)
+
+
Figure 28
+
+
+
+
+
<C:vpoll-max-voters xmlns:C="urn:ietf:params:xml:ns:caldav"
+>25</C:vpoll-max-voters>
+
+
Figure 29
+
+
+
+ +
+
+

+8.1.6. Extensions to CalDAV scheduling +

+
+

This specification extends [RFC6638].

+
+
+

Each section of Appendix A "Scheduling Privileges Summary" is +extended to include VPOLL.

+
+
+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+
+
+
+
+
+
+
+

+8.2. Additional Preconditions for PUT, COPY, and MOVE +

+
+

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:

+
+
+
+
(CALDAV:supported-vpoll-component-sets)
+
+
+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+
+
+
+
(CALDAV:vpoll-max-items)
+
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value Section 8.1.2 +on the calendar collection where the resource will be stored;

+
+
+
+
(CALDAV:vpoll-max-active)
+
+
+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value +Section 8.1.3 on the calendar collection where the resource will +be stored;

+
+
+
+
(CALDAV:vpoll-max-voters)
+
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value Section 8.1.4 on the +calendar collection where the resource will be stored;

+
+
+
+
+
+
+
+
+
+

+8.3. CalDAV:calendar-query Report +

+
+

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.

+
+
+
+

+8.3.1. Example: Partial Retrieval of VPOLL +

+
+

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.

+
+
+
+
+
>> 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:VPOLL
+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>
+
+
Figure 30
+
+
+
+
+
+
+
+

+8.4. CalDAV time ranges +

+
+

"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

+
+
+

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.

+
+
+
+
+
+-------------------------------------------------------------------+
+| 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                                          |
++---+---+---+---+---+-----------------------------------------------+
+
+
Figure 31
+
+
+
+
+
+
+
+

+9. Security Considerations +

+
+

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.

+
+
+
+
+
+

+10. IANA Considerations +

+
+
+

+10.1. Parameter Registrations +

+
+

This document defines the following new iCalendar property parameters +to be added to the registry defined in [RFC5545]:

+
+
+ + + + + + + + + + + + + + + + + + + + + +
Table 11
Property ParameterStatusReference
+
+

REQUIRED

+
+
+
+

Current

+
+
+ +
+
+

STAY-INFORMED

+
+
+
+

Current

+
+
+ +
+
+
+
+
+
+

+10.2. Property Registrations +

+
+

This document defines the following new iCalendar properties to be +added to the registry defined in [RFC5545]:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 12
PropertyStatusReference
+
+

ACCEPT-RESPONSE

+
+
+
+

Current

+
+
+ +
+
+

POLL-ITEM-ID

+
+
+
+

Current

+
+
+ +
+
+

POLL-MODE

+
+
+
+

Current

+
+
+ +
+
+

POLL-PROPERTIES

+
+
+
+

Current

+
+
+ +
+
+

POLL-WINNER

+
+
+
+

Current

+
+
+ +
+
+

RESPONSE

+
+
+
+

Current

+
+
+ +
+
+
+
+
+
+

+10.3. POLL-MODE Registration Template +

+
+

A poll mode is defined by completing the following template.

+
+
+
+
Poll mode name
+
+
+

The name of the poll mode.

+
+
+
+
Purpose
+
+
+

The purpose of the poll mode. Give a short but clear +description.

+
+
+
+
Reference
+
+
+

A reference to the RFC in which the poll mode is defined

+
+
+
+
+
+
+
+
+
+

+10.4. POLL-MODE Registrations +

+
+

This document defines the following registered poll modes.

+
+
+ + + + + + + + + + + + + + + + +
Table 13
Poll mode namePurposeReference
+
+

BASIC

+
+
+
+

To provide simple voting for a single outcome from a number of candidates.

+
+
+
+

Current

+
+
+
+
+
+
+
+
+
+

+11. Normative references +

+
+
[RFC2518]
+
+Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. Jensen, "HTTP Extensions for Distributed Authoring - WEBDAV", IETF RFC 2518, IETF RFC 2518, DOI 10.17487/RFC2518, , <https://www.rfc-editor.org/info/rfc2518>.
+
+
[RFC3986]
+
+Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", IETF RFC 3986, IETF RFC 3986, DOI 10.17487/RFC3986, , <https://www.rfc-editor.org/info/rfc3986>.
+
+
[RFC4791]
+
+Daboo, C., Desruisseaux, B., and L. Dusseault, "Calendaring Extensions to WebDAV (CalDAV)", IETF RFC 4791, IETF RFC 4791, DOI 10.17487/RFC4791, , <https://www.rfc-editor.org/info/rfc4791>.
+
+
[RFC5545]
+
+Desruisseaux, B., Ed., "Internet Calendaring and Scheduling Core Object Specification (iCalendar)", IETF RFC 5545, IETF RFC 5545, DOI 10.17487/RFC5545, , <https://www.rfc-editor.org/info/rfc5545>.
+
+
[RFC5546]
+
+Daboo, C., Ed., "iCalendar Transport-Independent Interoperability Protocol (iTIP)", IETF RFC 5546, IETF RFC 5546, DOI 10.17487/RFC5546, , <https://www.rfc-editor.org/info/rfc5546>.
+
+
[RFC6047]
+
+Melnikov, A., Ed., "iCalendar Message-Based Interoperability Protocol (iMIP)", IETF RFC 6047, IETF RFC 6047, DOI 10.17487/RFC6047, , <https://www.rfc-editor.org/info/rfc6047>.
+
+
[RFC6638]
+
+Daboo, C. and B. Desruisseaux, "Scheduling Extensions to CalDAV", IETF RFC 6638, IETF RFC 6638, DOI 10.17487/RFC6638, , <https://www.rfc-editor.org/info/rfc6638>.
+
+
[I-D.ietf-calext-eventpub-extensions]
+
+Douglass, M., "Event Publishing Extensions to iCalendar", IETF I-D.ietf-calext-eventpub-extensions, IETF I-D.ietf-calext-eventpub-extensions, .
+
+
+
+
+
+
+

+12. Bibliography +

+
+
+
+
+

+Appendix A. Open issues +

+
+

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+
+
+

Notifications: Need to do a section on what Notifications to + support. + A. VPOLL is about to end and you haven't voted on it yet. + Instead reuse VALARMS to notify the user?

+
+
+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No - voter + has indicated now unable to attend - want to revote

+
+
+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+
+
+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+
+
+

Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event.

+
+
+

Need to write down what isn't valid in a VPOLL + a. Can't change POLL-MODE

+
+
+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+
+
+

? - some iTip notes On confirm - send itip if appropriate (PUBLISH) + - all non-participating - shared - feeds + Organizer can specify where result is? + Confirm can specify that itip is sent - ITIP / NONE - parameter ? + on POLL-WINNER

+
+
+

Need to add example of freebusy in response

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest
+METHOD: REPLY
+BEGIN:VPOLL
+ORGANIZER:mailto:douglm@mysite.edu
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:eric@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T010000Z
+SEQUENCE:0
+SUMMARY:What to do this week
+BEGIN:VFREEBUSY
+.......
+END:VFREEBUSY
+END:PARTICIPANT
+END:VPOLL
+END:VCALENDAR
+
+
Figure 32
+
+
+
+
+
+

+Appendix B. Change log +

+
+
+
Calext V01: 2019-10-17 MD
+
+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+
+
+
Calext V00: 2019-05-17 MD
+
+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+
+
+
V03: 2014-10-28 MD
+
+
    +
  • +
    +

    Add VVOTER and VOTE components.

    +
    +
  • +
  • +
    +

    Add RESPONSE property.

    +
    +
  • +
  • +
    +

    Remove RESPONSE parameter from VOTER.

    +
    +
  • +
+
+
+
V03: 2014-05-12 MD
+
+
    +
  • +
    +

    Add reply-url property and required parameter.

    +
    +
  • +
  • +
    +

    Fix ACCEPT-RESPONSE definition.

    +
    +
  • +
+
+
+
V02: 2014-05-12 MD
+
+
    +
  • +
    +

    Typos fixed, clarifications made.

    +
    +
  • +
  • +
    +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
    +
  • +
  • +
    +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
    +
  • +
  • +
    +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
    +
  • +
  • +
    +

    iTip: fix broken table cells

    +
    +
  • +
  • +
    +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
    +
  • +
  • +
    +

    Added Caldav scheduling section

    +
    +
  • +
+
+
+
V01: 2013-08-07 MD
+
+
    +
  • +
    +

    Removed method CONFIRM

    +
    +
  • +
  • +
    +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
    +
  • +
  • +
    +

    Added POLL-WINNER and verbiage

    +
    +
  • +
  • +
    +

    Added STATUS values

    +
    +
  • +
  • +
    +

    Added RELTYPE=POLL

    +
    +
  • +
  • +
    +

    Added supported-vpoll-component-sets

    +
    +
  • +
  • +
    +

    Added CalDAV related parameters to VOTER

    +
    +
  • +
  • +
    +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
    +
  • +
+
+
+
Initial version: 2012-11-02 MD
+
+
+
+
+
+
+
+
+

+Authors' Addresses +

+
+
Eric York
+ +
+
+
Cyrus Daboo
+ +
+
+
Michael Douglass
+ +
+
+
+ + + diff --git a/documents/draft-ietf-calext-vpoll.rfc.xml b/documents/draft-ietf-calext-vpoll.rfc.xml new file mode 100644 index 0000000..f27533f --- /dev/null +++ b/documents/draft-ietf-calext-vpoll.rfc.xml @@ -0,0 +1,3140 @@ + + + + + + + + + + VPOLL: Consensus Scheduling Component for iCalendar + + + +
+ + eric.york@gmail.com + +
+
+ +
+ + cyrus@daboo.name + +
+
+ +
+ + mikeadouglass@gmail.com + +
+
+ Internet + + +This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives. + +
+ +
+ Acknowledgements + The authors would like to thank the members of the Calendaring and Scheduling Consortium (CalConnect) for contributing their ideas and support. +
+
+ Introduction + The currently existing approach to agreeing on meeting times using +iTip and/or iMip has 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. +
+
+ Terms and definitions + For the purposes of this document, + the following terms and definitions apply. +
+consensus scheduling +The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task. +
+
+active Vpoll +A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period +
+
+voter +A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented. +
+
+
+ Simple Consensus Scheduling + 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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives. +
The VPOLL Component: An OverviewThe VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate: +
DTSTAMP
+The usual property. +
SEQUENCE
+The usual property. See below for SEQUENCE +behavior. +
UID
+The usual property. +
ORGANIZER
+The usual property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same. +
SUMMARY
+The usual property. This optional but +recommended property provides the a short title to the poll. +
DESCRIPTION
+The usual property. This optional property +provides more details. +
DTEND
+The usual property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active. +
POLL-MODE
+A new property which defines how the votes are used to +obtain a result. For our use case it will take the value "BASIC" +meaning one event will be chosen from the alternatives. +
POLL-COMPLETION
+A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is "SERVER-SUBMIT" which means the client chooses the winner +but the server will submit the winning choice. +
POLL-PROPERTIES
+A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value "DTSTART, LOCATION" meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process. +
PARTICIPANT
+There is one of these components for each voter with +the PARTICIPANT-TYPE set to "VOTER". The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on. +
VOTE
+A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration. +
VEVENT
+In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting. +
+EXAMPLEVPOLL 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.
+
The VPOLL Alternative Choices: An OverviewWithin the VPOLL component we have the alternatives to vote on. In +many respects these are standard components. For our +simple use case they are all VEVENT components. In addition to the +usual properties some extra properties are used for a +VPOLL. +
POLL-ITEM-ID
+This provides a unique reference to the sub-component +within the VPOLL. It's value SHOULD be a small integer. +
+
VPOLL responsesUpon 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 and components: +
DTSTAMP
+The usual property. +
SEQUENCE
+The usual property. See below for SEQUENCE +behavior. +
UID
+Same as the request. +
ORGANIZER
+Same as the request. +
SUMMARY
+Same as the request. +
PARTICIPANT
+One only with a CALENDAR-ADDRESS identifying the voter replying. +
VOTE
+One per item being voted on. +
POLL-ITEM-ID
+One inside each VOTE component to identify the choice. +
RESPONSE
+One inside each VOTE component to specify the vote. +
+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. +
NOTE
+This is poll-mode specific behavior? +
+EXAMPLEREPLY VPOLL from Cyrus:
+
VPOLL updatesWhen 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 one or more PARTICIPANT components each populated with zero or more VOTE components. +EXAMPLE
+
VPOLL CompletionAfter 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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +"SUBMITTED". +EXAMPLEVPOLL confirmation:
+
Other ResponsesA voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care. +An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices. +This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.
+
+
+ iCalendar Extensions +
Updated Participant Type ValueParticipant type property values are defined in section 11.2.1. of +. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes. +
Format Definition
+This property parameter is redefined by the following notation: +
+
+ +
Description
+The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL. +
+
Updated Relation Type ValueRelationship parameter type values are defined in section 3.2.15. of +. 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. +
Format Definition
+This property parameter is redefined by the following notation: +
+
+ +
Description
+This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component. +
+
Updated Status ValueStatus property values are defined in section 3.8.1.11. of . +This specification updates that type to define valid VPOLL status +values. +
Format Definition
+This property parameter is redefined by the following notation: +
+
+ +
Description
+These values allow clients and servers to handle the +choosing and submission of winning choices. +
+ +
+
+
New Property Parameters
Required
Parameter name
+REQUIRED +
Purpose
+To specify whether the associated property is required in +the current context. +
Format Definition
+This parameter is defined by the following notation: +
+
+ +
Description
+This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies. +
+
Stay-Informed
Parameter name
+STAY-INFORMED +
Purpose
+To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed. +
Format Definition
+This parameter is defined by the following notation: +
+
+ +
Description
+This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant. +
+
New Properties
Accept-Response
Property name
+ACCEPT-RESPONSE +
Purpose
+This property is used in VPOLL to indicate the types of +component that may be supplied in a response. +
Property Parameters
+Non-standard or iana parameters can be +specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives. +If this property is not present voters are only allowed to respond +to the choices in the request. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-Completion
Property name
+POLL-COMPLETION +
Purpose
+This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s). +
Description
When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action. +Server initiated submission requires that the submitted choice +MUST be a valid calendaring component. +POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.
Format Definition
+This property is defined by the following notation: +
+
+ +
Example
+The following is an example of this property: +
+
+
+
Poll-Item-Id
Property name
+POLL-ITEM-ID +
Purpose
+This property is used in VPOLL child components as an +identifier. +
Value type
+INTEGER +
Property Parameters
+Non-standard parameters can be specified on +this property. +
Conformance
+This property MUST be specified in a VOTE component and +in VPOLL choice items. +
Description
+In a METHOD:REQUEST each choice 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. +POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-Mode
Property name
+POLL-MODE +
Purpose
+This property is used in VPOLL to indicate what voting mode +is to be applied. +
Property Parameters
+Non-standard or iana parameters can be +specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component or +its sub-components. +
Description
+The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID. +Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-properties
Property name
+POLL-PROPERTIES +
Purpose
+This property is used in VPOLL to define which icalendar +properties are being voted on. +
Property Parameters
+Non-standard or iana parameters can be +specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-Winner
Property name
+POLL-WINNER +
Purpose
+This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won. +
Value type
+INTEGER +
Property Parameters
+Non-standard parameters can be specified on +this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Reply-URL
Property name
+REPLY-URL +
Purpose
+This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service. +
Property Parameters
+Non-standard, required or iana parameters can +be specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Response
Property name
+RESPONSE +
Purpose
+To specify a response vote. +
Value type
+INTEGER +
Format Definition
+This property is defined by the following notation: +
+
+ +
Description
+This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention: +
    +
  • +0 - 39 A "NO vote" +
  • +
  • +40 - 79 A "MAYBE" vote +
  • +
  • +80 - 89 A "YES - but not preferred vote" +
  • +
  • +90-100 A "YES" vote. +Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe). +
  • +
+
+
New Components
VPOLL Component
Component name
+VPOLL +
Purpose
+This component provides a mechanism by which voters can +vote on provided choices. +
Format Definition
+This property is defined by the following notation: +
+
+ +
Description
This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting - both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components. +If specified, the "DTSTART" property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created. +If "DTSTART" is present "DURATION" MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration. +"DTEND" MAY be specified with or without "DTSTART" and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property. +If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.
+
VOTE Component
Component name
+VOTE +
Purpose
+This component provides a mechanism by which voters can +vote on provided choices. +
Conformance
+This component may be specified zero or more times in a PARTICIPANT component which identifies the voter. +
Format Definition
+This property is defined by the following notation: +
+
+ +
Description
This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.The required and optional properties and their meanings will depend +upon the POLL-MODE in effect. +For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice. +If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER - such as the respondees +availability.
+
+
+ Poll Modes + The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property. + New poll modes can be registered by including a completed POLL-MODE +Registration Template (see ) in a published RFC. +
POLL-MODE:BASICBASIC 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. +
Property restrictionsThis poll mode has the following property requirements: +
POLL-ITEM-ID
+Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll. +
POLL-WINNER
+On confirmation of the poll this property MUST be +present and identifies the winning component. +
+
Outcome reportingTo confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED. +When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.
+
+
+ iTIP Extensions + This specification introduces a number of extensions to . +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. +
MethodsThere are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined. +
MethodDescription
+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 PARTICIPANTS. +
+The following table shows the above methods broken down by who can +send them with VPOLL components. +
OriginatorMethods
+Organizer + +CANCEL, PUBLISH, REQUEST, POLLSTATUS +
+Voter + +REPLY, REFRESH, REQUEST (only when delegating) +
+
Interoperability ModelsMost of the standard iTip specification applies with respect to +organizer and voters. +
Delegation + +TBD +
+
Acting on Behalf of Other Calendar Users + +TBD +
+
Component Revisions + +
    +
  • +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 +
  • +
+
+
Message Sequencing + +TBD +
+
Application Protocol Elements
Methods for VPOLL Calendar ComponentsThis 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 ValueDescription
+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. +
MethodDescription
+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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach. +
+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 PARTICIPANT. +
+
Method: PUBLISHThe "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. +
Note
+Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification. +
+This method type is an iCalendar object that conforms to the +following property constraints: +Constraints for a METHOD:PUBLISH of a VPOLL
Component/PropertyPresenceComment
+METHOD + +1 + +MUST equal PUBLISH. +
+VPOLL + +1+ +
+DTSTAMP + +1 +
+DTSTART + +0 or 1 + +If present defines the start of the poll. Otherwise the poll starts when it is created and distributed. +
+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+ +
+PARTICIPANT + +0+ + +Only PARTICIPANT components with PARTICIPANT-TYPE not equal to "VOTER" - that is, no voters +
+REQUEST-STATUS + +0 +
+VALARM + +0+ +
+VEVENT + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VFREEBUSY + +0 +
+VJOURNAL + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VTODO + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VTIMEZONE + +0+ + +MUST be present if any date/time refers to a timezone. +
+IANA-COMPONENT + +0+ +
+X-COMPONENT + +0+ +
+
Method: REQUESTThe "REQUEST" method in a "VPOLL" component provides the following +scheduling functions: +
    +
  • +Invite "Voters" to respond to the poll. +
  • +
  • +Change the items being voted upon. +
  • +
  • +Complete or confirm the poll. +
  • +
  • +Response to a "REFRESH" request. +
  • +
  • +Update the details of an existing vpoll. +
  • +
  • +Update the status of "Voters". +
  • +
  • +Forward a "VPOLL" to another uninvited CU. +
  • +
  • +For an existing "VPOLL" calendar component, delegate the role of +"Voter" to another CU. +
  • +
  • +For an existing "VPOLL" calendar component, change the role of +"Organizer" to another CU. +
  • +
+The "Organizer" originates the "REQUEST". The recipients of the +"REQUEST" method are the CUs voting in the poll, the "Voters". +"Voters" use the "REPLY" method to convey votes to 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/PropertyPresenceComment
+METHOD + +1 + +MUST be REQUEST. +
+VPOLL + +1 +
+PARTICIPANT + +1+ + +Identified as voters with the PARTICIPANT-TYPE=VOTER +
+DTSTAMP + +1 +
+DTSTART + +0 or 1 + +If present defines the start of the poll. Otherwise the poll starts when it is created and distributed. +
+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. +
+VFREEBUSY + +0 +
+VJOURNAL + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VTODO + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+
Rescheduling a poll + +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. +
+
Updating or Reconfirmation of a PollThe "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 a "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.
+
Confirmation of a 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. +
+
Closing a Poll + +The "REQUEST" method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED. +
+
Delegating a Poll to Another CUSome 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".
+
Changing 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". +
+
Sending on Behalf of the 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". +
+
Forwarding to an Uninvited CUA "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 a "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.
+
Updating Voter Status + +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 "RSVP=TRUE" property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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". +
+
Method: REPLYThe "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" "CALENDAR-ADDRESS" +property. The "Delegate" SHOULD include the calendar address of the +"Delegator" on the "DELEGATED-FROM" property parameter of the +"Delegate's" "CALENDAR-ADDRESS" 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". +A "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. (But see comments on VFREEBUSY and VAVAILABILITY) +This method type is an iCalendar object that conforms to the +following property constraints: +Constraints for a METHOD:REPLY of a VPOLL
Component/PropertyPresenceComment
+METHOD + +1 + +MUST be REPLY. +
+VPOLL + +1+ + +All components MUST have the same +
+UID. +
+PARTICIPANT + +1 + +Identifies 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 or 1 + +A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy. +
+VAVAILABILITY + +0 + +A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available. +
+VJOURNAL + +0 +
+VTODO + +0 +
+
Method: CANCELThe "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 . +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/PropertyPresenceComment
+METHOD + +1 + +MUST be CANCEL. +
+VPOLL + +1+ + +All must have the same UID. +
+PARTICIPANT + +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 +
+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 +
+
Method: REFRESHThe "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/PropertyPresenceComment
+METHOD + +1 + +MUST be REFRESH. +
+VPOLL + +1 +
+PARTICIPANT + +1 + +MUST identify the requester as a voter. +
+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 +
+
Method: POLLSTATUSThe "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. All "Voters" MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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/PropertyPresenceComment
+METHOD + +1 + +MUST equal POLLSTATUS. +
+VPOLL + +1+ +
+PARTICIPANT + +1+ + +The voters containing their current vote +
+COMPLETED + +0 or 1 + +Only present for a completed poll +
+DTSTAMP + +1 +
+DTSTART + +0 or 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 +
+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 SHOULD NOT be present. +
+VFREEBUSY + +0 +
+VJOURNAL + +0 + +All candidate components SHOULD NOT be present. +
+VTODO + +0 + +All candidate components SHOULD NOT be present. +
+VTIMEZONE + +0+ + +MUST be present if any date/time refers to a timezone. +
+IANA-COMPONENT + +0+ +
+X-COMPONENT + +0+ +
+
+
+ CalDAV Extensions + This specification extends in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports. + Additionally, it extends as it a VPOLL component is a +schedulable entity. +
Calendar Collection PropertiesThis section defines new CalDAV properties for calendar collections. +
CALDAV:supported-vpoll-component-sets
Name
+supported-vpoll-component-sets +
Namespace
+urn:ietf:params:xml:ns:caldav +
Purpose
+Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.It also specifies the combination of allowed component types. +Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.
Definition
+
+ +]]>
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +]]>
+
+
CALDAV:vpoll-max-items
Name
+vpoll-max-items +
Namespace
+urn:ietf:params:xml:ns:caldav +
Purpose
+Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
+The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component. +
Definition
+
+PCDATA value: a numeric value (integer greater than zero)]]>
+ +
25]]>
+
+
CALDAV:vpoll-max-active
Name
+vpoll-max-active +
Namespace
+urn:ietf:params:xml:ns:caldav +
Purpose
+Provides a numeric value indicating the maximum number of +active vpolls at any one time. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
+The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs. +
Definition
+
+PCDATA value: a numeric value (integer greater than zero)]]>
+ +
25]]>
+
+
CALDAV:vpoll-max-voters
Name
+ +vpoll-max-voters + +
Namespace
+ +urn:ietf:params:xml:ns:caldav + +
Purpose
+Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
+The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component. +
Definition
+
+PCDATA value: a numeric value (integer greater than zero)]]>
+ +
25]]>
+
+
CalDAV:even-more-properties + +
+
Extensions to CalDAV schedulingThis specification extends . +Each section of Appendix A "Scheduling Privileges Summary" is +extended to include VPOLL. +Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.
+
Additional Preconditions for PUT, COPY, and MOVEThis 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: +
(CALDAV:supported-vpoll-component-sets)
+The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection; +
(CALDAV:vpoll-max-items)
+The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value +on the calendar collection where the resource will be stored; +
(CALDAV:vpoll-max-active)
+The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value + on the calendar collection where the resource will +be stored; +
(CALDAV:vpoll-max-voters)
+The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value on the +calendar collection where the resource will be stored; +
+
CalDAV:calendar-query ReportThis 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. +
Example: Partial Retrieval of VPOLLIn 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. +
> Request << + +REPORT /cyrus/work/ HTTP/1.1 +Host: cal.example.com +Depth: 1 +Content-Type: application/xml; charset="utf-8" +Content-Length: xxxx + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>> 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 + + + + + http://cal.example.com/cyrus/work/poll2.ics + + + "fffff-abcd2" + BEGIN:VCALENDAR +VERSION:2.0 +BEGIN:VPOLL +DTSTART;TZID=US/Eastern:20121202T120000 +DURATION:PT4D +SUMMARY:Poll #2 +UID:00959BC664CA650E933C892C@example.com +END:VPOLL +END:VCALENDAR + + + HTTP/1.1 200 OK + + + + http://cal.example.com/cyrus/work/poll3.ics + + + "fffff-abcd3" + 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 + + + HTTP/1.1 200 OK + + +]]>
+
+
CalDAV time ranges"CALDAV:time-range XML Element" in describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends to +describe the meaning of time ranges for VPOLL +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. +
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 | ++---+---+---+---+---+-----------------------------------------------+]]>
+
+
+
+ Security Considerations + Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See for a +discussion of the security considerations relating to URIs. +
+
+ IANA Considerations +
Parameter RegistrationsThis document defines the following new iCalendar property parameters +to be added to the registry defined in : +
Property ParameterStatusReference
+REQUIRED + +Current + + + + +
+STAY-INFORMED + +Current + + + + +
+
Property RegistrationsThis document defines the following new iCalendar properties to be +added to the registry defined in : +
PropertyStatusReference
+ACCEPT-RESPONSE + +Current + + + + +
+POLL-ITEM-ID + +Current + + + + +
+POLL-MODE + +Current + + + + +
+POLL-PROPERTIES + +Current + + + + +
+POLL-WINNER + +Current + + + + +
+RESPONSE + +Current + + + + +
+
POLL-MODE Registration TemplateA poll mode is defined by completing the following template. +
Poll mode name
+The name of the poll mode. +
Purpose
+The purpose of the poll mode. Give a short but clear +description. +
Reference
+A reference to the RFC in which the poll mode is defined +
+
POLL-MODE RegistrationsThis document defines the following registered poll modes. +
Poll mode namePurposeReference
+BASIC + +To provide simple voting for a single outcome from a number of candidates. + +Current +
+
+
+ + + Normative references + + + HTTP Extensions for Distributed Authoring — WEBDAV + + + + + + + + This document specifies a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, namespace manipulation, and resource locking (collision avoidance). [STANDARDS-TRACK] + + + + + IETF RFC 2518 + + + + + + Uniform Resource Identifier (URI): Generic Syntax + + + + + + A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK] + + + + + IETF RFC 3986 + + + + + + Calendaring Extensions to WebDAV (CalDAV) + + + + + + This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing calendaring and scheduling information based on the iCalendar format. This document defines the "calendar-access" feature of CalDAV. [STANDARDS-TRACK] + + + + + IETF RFC 4791 + + + + + + Internet Calendaring and Scheduling Core Object Specification (iCalendar) + + + + This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK] + + + + + IETF RFC 5545 + + + + + + iCalendar Transport-Independent Interoperability Protocol (iTIP) + + + + This document specifies a protocol that uses the iCalendar object specification to provide scheduling interoperability between different calendaring systems. This is done without reference to a specific transport protocol so as to allow multiple methods of communication between systems. Subsequent documents will define profiles of this protocol that use specific, interoperable methods of communication between systems.The iCalendar Transport-Independent Interoperability Protocol (iTIP) complements the iCalendar object specification by adding semantics for group scheduling methods commonly available in current calendaring systems. These scheduling methods permit two or more calendaring systems to perform transactions such as publishing, scheduling, rescheduling, responding to scheduling requests, negotiating changes, or canceling. [STANDARDS-TRACK] + + + + + IETF RFC 5546 + + + + + + iCalendar Message-Based Interoperability Protocol (iMIP) + + + + This document, "iCalendar Message-Based Interoperability Protocol (iMIP)", specifies a binding from the iCalendar Transport-independent Interoperability Protocol (iTIP) to Internet email-based transports. Calendaring entries defined by the iCalendar Object Model (iCalendar) are wrapped using constructs from RFC 5322 and MIME (RFC 2045, RFC 2046, RFC 2047, and RFC 2049), and then transported over SMTP. [STANDARDS-TRACK] + + + + + IETF RFC 6047 + + + + + + Scheduling Extensions to CalDAV + + + + + This document defines extensions to the Calendaring Extensions to WebDAV (CalDAV) "calendar-access" feature to specify a standard way of performing scheduling operations with iCalendar-based calendar components. This document defines the "calendar-auto-schedule" feature of CalDAV. [STANDARDS-TRACK] + + + + + IETF RFC 6638 + + + + + + Event Publishing Extensions to iCalendar + + + + This specification updates RFC5545 by introducing a number of new iCalendar properties and components which are of particular use for event publishers and in social networking. This specification also defines a new STRUCTURED-DATA property for iCalendar RFC5545 to allow for data that is directly pertinent to an event or task to be included with the calendar data. + + + + + + IETF I-D.ietf-calext-eventpub-extensions + + + + + Bibliography + +
+ Open issues + public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property + Notifications: Need to do a section on what Notifications to + support. + A. VPOLL is about to end and you haven't voted on it yet. + Instead reuse VALARMS to notify the user? + Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No - voter + has indicated now unable to attend - want to revote + Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status + ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration + Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event. + Need to write down what isn't valid in a VPOLL + a. Can't change POLL-MODE + Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc + ? - some iTip notes On confirm - send itip if appropriate (PUBLISH) + - all non-participating - shared - feeds + Organizer can specify where result is? + Confirm can specify that itip is sent - ITIP / NONE - parameter ? + on POLL-WINNER + Need to add example of freebusy in response +
+ +
+
+
+ Change log +
+
Calext V01: 2019-10-17 MD
+
+Replace VVOTER and VOTER with PARTICIPANT. +
+
Calext V00: 2019-05-17 MD
+
+First calext version. Moved source to metanorma. No changes to specification. +
+
V03: 2014-10-28 MD
+
+
    +
  • +Add VVOTER and VOTE components. +
  • +
  • +Add RESPONSE property. +
  • +
  • +Remove RESPONSE parameter from VOTER. +
  • +
+
+
V03: 2014-05-12 MD
+
+
    +
  • +Add reply-url property and required parameter. +
  • +
  • +Fix ACCEPT-RESPONSE definition. +
  • +
+
+
V02: 2014-05-12 MD
+
+
    +
  • +Typos fixed, clarifications made. +
  • +
  • +Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT +
  • +
  • +Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values. +
  • +
  • +iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent +
  • +
  • +iTip: fix broken table cells +
  • +
  • +Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table +
  • +
  • +Added Caldav scheduling section +
  • +
+
+
V01: 2013-08-07 MD
+
+
    +
  • +Removed method CONFIRM +
  • +
  • +Removed pollitemid from VPOLL abnf. Added text for pollwinner +
  • +
  • +Added POLL-WINNER and verbiage +
  • +
  • +Added STATUS values +
  • +
  • +Added RELTYPE=POLL +
  • +
  • +Added supported-vpoll-component-sets +
  • +
  • +Added CalDAV related parameters to VOTER +
  • +
  • +Removed bad CalDAV query example. State that queries cannot +target the sub-components. +
  • +
+
+
Initial version: 2012-11-02 MD
+
+
+
+
+
diff --git a/documents/draft-ietf-calext-vpoll.rxl b/documents/draft-ietf-calext-vpoll.rxl new file mode 100644 index 0000000..a9b7b65 --- /dev/null +++ b/documents/draft-ietf-calext-vpoll.rxl @@ -0,0 +1,73 @@ + +VPOLL: Consensus Scheduling Component for iCalendar +VPOLL +www.linkedin.com/in/eryork +draft-ietf-calext-vpoll-00 +draft-ietf-calext-vpoll-00 + + + + +Eric York + +eric.york@gmail.com + + + + + + +Cyrus Daboo + +cyrus@daboo.name + + + + + + +Michael Douglass + +mikeadouglass@gmail.com + + + + + +Internet Engineering Task Force +IETF + + + +2019-11-05 + +en + + +standard + + +2020 + + +Internet Engineering Task Force +IETF + + + + +IETF + + +standard + + +internet-draft +Internet +trust200902 +true + +yes + + + \ No newline at end of file diff --git a/documents/draft-ietf-calext-vpoll.txt b/documents/draft-ietf-calext-vpoll.txt new file mode 100644 index 0000000..19f2ede --- /dev/null +++ b/documents/draft-ietf-calext-vpoll.txt @@ -0,0 +1,3472 @@ + + + + +Network Working Group E. York +Internet-Draft +Intended status: Standards Track C. Daboo +Expires: 31 January 2021 + M. Douglass + 30 July 2020 + + + VPOLL: Consensus Scheduling Component for iCalendar + draft-ietf-calext-vpoll-00 + +Abstract + + This specification introduces a new iCalendar component which allows + for consensus scheduling, that is, voting on a number of alternative + meeting or task alternatives. + +Status of This Memo + + 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 https://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 31 January 2021. + +Copyright Notice + + Copyright (c) 2020 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 (https://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. + + + + +York, et al. Expires 31 January 2021 [Page 1] + +Internet-Draft VPOLL July 2020 + + +Table of Contents + + 1. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 3 + 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 + 3. Terms and definitions . . . . . . . . . . . . . . . . . . . . 4 + 3.1. consensus scheduling . . . . . . . . . . . . . . . . . . 4 + 3.2. active Vpoll . . . . . . . . . . . . . . . . . . . . . . 4 + 3.3. voter . . . . . . . . . . . . . . . . . . . . . . . . . . 4 + 4. Simple Consensus Scheduling . . . . . . . . . . . . . . . . . 5 + 4.1. The VPOLL Component: An Overview . . . . . . . . . . . . 5 + 4.2. The VPOLL Alternative Choices: An Overview . . . . . . . 7 + 4.3. VPOLL responses . . . . . . . . . . . . . . . . . . . . . 8 + 4.4. VPOLL updates . . . . . . . . . . . . . . . . . . . . . . 9 + 4.5. VPOLL Completion . . . . . . . . . . . . . . . . . . . . 11 + 4.6. Other Responses . . . . . . . . . . . . . . . . . . . . . 12 + 5. iCalendar Extensions . . . . . . . . . . . . . . . . . . . . 12 + 5.1. Updated Participant Type Value . . . . . . . . . . . . . 12 + 5.2. Updated Relation Type Value . . . . . . . . . . . . . . . 12 + 5.3. Updated Status Value . . . . . . . . . . . . . . . . . . 13 + 5.4. New Property Parameters . . . . . . . . . . . . . . . . . 13 + 5.4.1. Required . . . . . . . . . . . . . . . . . . . . . . 13 + 5.4.2. Stay-Informed . . . . . . . . . . . . . . . . . . . . 14 + 5.5. New Properties . . . . . . . . . . . . . . . . . . . . . 14 + 5.5.1. Accept-Response . . . . . . . . . . . . . . . . . . . 14 + 5.5.2. Poll-Completion . . . . . . . . . . . . . . . . . . . 15 + 5.5.3. Poll-Item-Id . . . . . . . . . . . . . . . . . . . . 16 + 5.5.4. Poll-Mode . . . . . . . . . . . . . . . . . . . . . . 17 + 5.5.5. Poll-properties . . . . . . . . . . . . . . . . . . . 17 + 5.5.6. Poll-Winner . . . . . . . . . . . . . . . . . . . . . 18 + 5.5.7. Reply-URL . . . . . . . . . . . . . . . . . . . . . . 19 + 5.5.8. Response . . . . . . . . . . . . . . . . . . . . . . 19 + 5.6. New Components . . . . . . . . . . . . . . . . . . . . . 20 + 5.6.1. VPOLL Component . . . . . . . . . . . . . . . . . . . 20 + 5.6.2. VOTE Component . . . . . . . . . . . . . . . . . . . 22 + 6. Poll Modes . . . . . . . . . . . . . . . . . . . . . . . . . 23 + 6.1. POLL-MODE:BASIC . . . . . . . . . . . . . . . . . . . . . 24 + 6.1.1. Property restrictions . . . . . . . . . . . . . . . . 24 + 6.1.2. Outcome reporting . . . . . . . . . . . . . . . . . . 24 + 7. iTIP Extensions . . . . . . . . . . . . . . . . . . . . . . . 24 + 7.1. Methods . . . . . . . . . . . . . . . . . . . . . . . . . 24 + 7.2. Interoperability Models . . . . . . . . . . . . . . . . . 26 + 7.2.1. Delegation . . . . . . . . . . . . . . . . . . . . . 26 + 7.2.2. Acting on Behalf of Other Calendar Users . . . . . . 26 + 7.2.3. Component Revisions . . . . . . . . . . . . . . . . . 26 + 7.2.4. Message Sequencing . . . . . . . . . . . . . . . . . 26 + 7.3. Application Protocol Elements . . . . . . . . . . . . . . 26 + 7.3.1. Methods for VPOLL Calendar Components . . . . . . . . 26 + 7.3.2. Method: PUBLISH . . . . . . . . . . . . . . . . . . . 28 + + + +York, et al. Expires 31 January 2021 [Page 2] + +Internet-Draft VPOLL July 2020 + + + 7.3.3. Method: REQUEST . . . . . . . . . . . . . . . . . . . 31 + 7.3.4. Method: REPLY . . . . . . . . . . . . . . . . . . . . 37 + 7.3.5. Method: CANCEL . . . . . . . . . . . . . . . . . . . 40 + 7.3.6. Method: REFRESH . . . . . . . . . . . . . . . . . . . 43 + 7.3.7. Method: POLLSTATUS . . . . . . . . . . . . . . . . . 45 + 8. CalDAV Extensions . . . . . . . . . . . . . . . . . . . . . . 47 + 8.1. Calendar Collection Properties . . . . . . . . . . . . . 47 + 8.1.1. CALDAV:supported-vpoll-component-sets . . . . . . . . 47 + 8.1.2. CALDAV:vpoll-max-items . . . . . . . . . . . . . . . 49 + 8.1.3. CALDAV:vpoll-max-active . . . . . . . . . . . . . . . 50 + 8.1.4. CALDAV:vpoll-max-voters . . . . . . . . . . . . . . . 51 + 8.1.5. CalDAV:even-more-properties . . . . . . . . . . . . . 51 + 8.1.6. Extensions to CalDAV scheduling . . . . . . . . . . . 51 + 8.2. Additional Preconditions for PUT, COPY, and MOVE . . . . 52 + 8.3. CalDAV:calendar-query Report . . . . . . . . . . . . . . 52 + 8.3.1. Example: Partial Retrieval of VPOLL . . . . . . . . . 53 + 8.4. CalDAV time ranges . . . . . . . . . . . . . . . . . . . 55 + 9. Security Considerations . . . . . . . . . . . . . . . . . . . 56 + 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 56 + 10.1. Parameter Registrations . . . . . . . . . . . . . . . . 57 + 10.2. Property Registrations . . . . . . . . . . . . . . . . . 57 + 10.3. POLL-MODE Registration Template . . . . . . . . . . . . 57 + 10.4. POLL-MODE Registrations . . . . . . . . . . . . . . . . 58 + 11. Normative references . . . . . . . . . . . . . . . . . . . . 58 + 12. Bibliography . . . . . . . . . . . . . . . . . . . . . . . . 59 + Appendix A. Open issues . . . . . . . . . . . . . . . . . . . . 59 + Appendix B. Change log . . . . . . . . . . . . . . . . . . . . . 60 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 61 + +1. Acknowledgements + + The authors would like to thank the members of the Calendaring and + Scheduling Consortium (CalConnect) for contributing their ideas and + support. + +2. Introduction + + The currently existing approach to agreeing on meeting times using + iTip [RFC5546] and/or iMip [RFC6047] has 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. + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 3] + +Internet-Draft VPOLL July 2020 + + + 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. + +3. Terms and definitions + + For the purposes of this document, the following terms and + definitions apply. + +3.1. consensus scheduling + + The process whereby users come to some agreement on meeting or task + alternatives and then book that meeting or task. + +3.2. active Vpoll + + A VPoll may have a DTSTART, DTEND and DURATION which may define the + start and end of the active voting period + +3.3. voter + + A participant who votes on the alternatives. A voter need not be an + attendee of any of the alternatives presented. + + + +York, et al. Expires 31 January 2021 [Page 4] + +Internet-Draft VPOLL July 2020 + + +4. Simple Consensus Scheduling + + 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. This document will + show how a VPOLL object is used to inform voters of the state of a + simple vote on some alternatives. + +4.1. The VPOLL Component: An Overview + + The VPOLL component acts as a wrapper for a number of alternatives to + be voted on, together with some properties and a new component used + to maintain the state of the voting. For our simple example the + following VPOLL properties and sub-components are either required or + appropriate: + + DTSTAMP The usual [RFC5545] property. + + SEQUENCE The usual [RFC5545] property. See below for SEQUENCE + behavior. + + UID The usual [RFC5545] property. + + ORGANIZER The usual [RFC5545] property. In general this need not be + an organizer of any of the alternatives. In this simple outline + we assume it is the same. + + SUMMARY The usual [RFC5545] property. This optional but recommended + property provides the a short title to the poll. + + DESCRIPTION The usual [RFC5545] property. This optional property + provides more details. + + DTEND The usual [RFC5545] property. This optional property provides + a poll closing time and date after which the VPOLL is no longer + active. + + POLL-MODE A new property which defines how the votes are used to + obtain a result. For our use case it will take the value "BASIC" + meaning one event will be chosen from the alternatives. + + + + +York, et al. Expires 31 January 2021 [Page 5] + +Internet-Draft VPOLL July 2020 + + + POLL-COMPLETION A new property which defines who (server or client) + chooses and/or submits the winning choice. In our example the + value is "SERVER-SUBMIT" which means the client chooses the winner + but the server will submit the winning choice. + + POLL-PROPERTIES A new property which defines which icalendar + properties are being voted on. For our use case it will take the + value "DTSTART, LOCATION" meaning only those properties are + significant for voting. Other properties in the events may differ + but are not considered significant for the voting process. + + PARTICIPANT There is one of these components for each voter with the + PARTICIPANT-TYPE set to "VOTER". The CALENDAR-ADDRESS property + identifies the voter and this component will contain one VOTE + component for each item being voted on. + + VOTE A new component. There is one of these for each voter and + choice. It usually contains at least a POLL-ITEM-ID property to + identify the choice and a RESPONSE property to provide a vote. + For more complex poll modes it may contain other information such + as cost or estimated duration. + + VEVENT In our simple use case there will be multiple VEVENT sub- + components defining the alternatives. Each will have a different + date and or time for the meeting. + + EXAMPLE + + VPOLL with 3 voters and 3 alternative meetings: + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 6] + +Internet-Draft VPOLL July 2020 + + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD:REQUEST + BEGIN:VPOLL + POLL-MODE:BASIC + POLL-COMPLETION:SERVER-SUBMIT + POLL-PROPERTIES:DTSTART,LOCATION + ORGANIZER:mailto:mike@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T000000Z + SUMMARY:What to do this week + DTEND:20120101T000000Z + BEGIN: PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:cyrus@example.com + END PARTICIPANT + BEGIN: PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:eric@example.com + END PARTICIPANT + BEGIN: PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:mike@example.com + END PARTICIPANT + 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 + + Figure 1 + + 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. + +4.2. The VPOLL Alternative Choices: An Overview + + 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. + + + +York, et al. Expires 31 January 2021 [Page 7] + +Internet-Draft VPOLL July 2020 + + + POLL-ITEM-ID This provides a unique reference to the sub-component + within the VPOLL. It's value SHOULD be a small integer. + +4.3. VPOLL responses + + 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 and components: + + DTSTAMP The usual [RFC5545] property. + + SEQUENCE The usual [RFC5545] property. See below for SEQUENCE + behavior. + + UID Same as the request. + + ORGANIZER Same as the request. + + SUMMARY Same as the request. + + PARTICIPANT One only with a CALENDAR-ADDRESS identifying the voter + replying. + + VOTE One per item being voted on. + + POLL-ITEM-ID One inside each VOTE component to identify the choice. + + RESPONSE One inside each VOTE component to specify the vote. + + 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. + + NOTE This is poll-mode specific behavior? + + EXAMPLE + + REPLY VPOLL from Cyrus: + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 8] + +Internet-Draft VPOLL July 2020 + + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD: REPLY + BEGIN:VPOLL + ORGANIZER:mailto:mike@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T010000Z + SUMMARY:What to do this week + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:cyrus@example.com + BEGIN:VOTE + POLL-ITEM-ID:1 + RESPONSE:50 + COMMENT:Work on iTIP + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:2 + RESPONSE:100 + COMMENT:Work on WebDAV + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:3 + RESPONSE:0 + END:VOTE + END:PARTICIPANT + END:VPOLL + END:VCALENDAR + + Figure 2 + +4.4. VPOLL updates + + 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 one or more PARTICIPANT components each populated with + zero or more VOTE components. + + EXAMPLE + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 9] + +Internet-Draft VPOLL July 2020 + + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD: POLLSTATUS + BEGIN:VPOLL + ORGANIZER:mailto:mike@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T020000Z + SEQUENCE:0 + SUMMARY:What to do this week + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:cyrus@example.com + BEGIN: VOTE + POLL-ITEM-ID:1 + RESPONSE:50 + COMMENT:Work on iTIP + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:2 + RESPONSE:100 + COMMENT:Work on WebDAV + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:3 + RESPONSE:0 + END:VOTE + END:PARTICIPANT + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:eric@example.com + BEGIN:VOTE + POLL-ITEM-ID:1 + RESPONSE:100 + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:2 + RESPONSE:100 + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:3 + RESPONSE:0 + END:VOTE + END:PARTICIPANT + END:VPOLL + END:VCALENDAR + + Figure 3 + + + +York, et al. Expires 31 January 2021 [Page 10] + +Internet-Draft VPOLL July 2020 + + +4.5. VPOLL Completion + + 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. As the POLL- + COMPLETION property is set to SERVER-SUBMIT the server will submit + the winning choice and when it has done so set the STATUS to + "SUBMITTED". + + EXAMPLE + + VPOLL confirmation: + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD: REQUEST + BEGIN:VPOLL + ORGANIZER:mailto:douglm@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T030000Z + COMPLETED:20120101T030000Z + POLL-COMPLETION:SERVER-SUBMIT + 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 + + Figure 4 + + + + + + +York, et al. Expires 31 January 2021 [Page 11] + +Internet-Draft VPOLL July 2020 + + +4.6. Other Responses + + A voter being asked to choose between a number of ORGANIZER supplied + alternatives may find none of them acceptable or may simply not care. + + An alternative response, which may be disallowed by the ORGANIZER, is + to send back the respondees availability or freebusy or even one or + more new, alternative choices. + + This is accomplished by responding with a VOTE component which has no + POLL-ITEM-ID property. In this case it MUST contain some alternative + information. What form this takes depends on the poll mode in + effect. + +5. iCalendar Extensions + +5.1. Updated Participant Type Value + + Participant type property values are defined in section 11.2.1. of + [I-D.ietf-calext-eventpub-extensions]. This specification updates + that type to include the new participant type VOTER to provide + information about the voter and to contain their votes. + + Format Definition This property parameter is redefined by the + following notation: + + partvalue /= "VOTER" + + Figure 5 + + Description The new property value indicates that the associated + PARTICIPANT component identifies a voter in a VPOLL. + +5.2. Updated Relation Type Value + + 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. + + Format Definition This property parameter is redefined by the + following notation: + + reltypeparam /= "RELTYPE" "=" "POLL" + ; Property value is a VPOLL uid + + Figure 6 + + + + +York, et al. Expires 31 January 2021 [Page 12] + +Internet-Draft VPOLL July 2020 + + + Description This parameter can be specified on a property that + references another related calendar component. The new parameter + value indicates that the associated property references a VPOLL + component which contains the current component. + +5.3. Updated Status Value + + Status property values are defined in section 3.8.1.11. of [RFC5545]. + This specification updates that type to define valid VPOLL status + values. + + Format Definition 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 + / "SUBMITTED" ; The winning item has been + ; submitted + / "CANCELLED" + + Figure 7 + + Description These values allow clients and servers to handle the + choosing and submission of winning choices. + + If the client is choosing and the server submitting then the + client should set the POLL-WINNER property, set the status to + CONFIRMED and save the poll. When the server submits the winning + choice it will set the status to SUBMITTED. + + Figure 8 + +5.4. New Property Parameters + +5.4.1. Required + + Parameter name REQUIRED + + Purpose To specify whether the associated property is required in + the current context. + + Format Definition This parameter is defined by the following + notation: + + + +York, et al. Expires 31 January 2021 [Page 13] + +Internet-Draft VPOLL July 2020 + + + requirededparam = "REQUIRED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + + Figure 9 + + Description This parameter MAY be specified on REPLY-URL and, if the + value is TRUE, indicates the organizer requires all replies to be + made via the specified service rather than iTip replies. + +5.4.2. Stay-Informed + + Parameter name STAY-INFORMED + + Purpose To specify the voter also wants to be added as an ATTENDEE + when the poll is confirmed. + + Format Definition This parameter is defined by the following + notation: + + stayinformedparam = "STAY-INFORMED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + + Figure 10 + + Description This parameter MAY be specified on the CALENDAR-ADDRESS + property in the PARTICIPANT component and, if the value is TRUE, + indicates the voter wishes to be added to the final choice as a + non participant. + +5.5. New Properties + +5.5.1. Accept-Response + + Property name ACCEPT-RESPONSE + + Purpose This property is used in VPOLL to indicate the types of + component that may be supplied in a response. + + Property Parameters Non-standard or iana parameters can be specified + on this property. + + Conformance This property MAY be specified in a VPOLL component. + + Description When used in a VPOLL this property indicates what + allowable component types may be returned in a reply. Typically + this would allow a voter to respond with their freebusy or + availability rather than choosing one of the presented + alternatives. + + + +York, et al. Expires 31 January 2021 [Page 14] + +Internet-Draft VPOLL July 2020 + + + If this property is not present voters are only allowed to respond + to the choices in the request. + + Format Definition This property is defined by the following + notation: + + acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":" + iana-token ("," iana-token) CRLF + + acceptresponseparams = *(";" other-param) + + Figure 11 + +5.5.2. Poll-Completion + + Property name POLL-COMPLETION + + Purpose This property is used in VPOLL to indicate whether the + client or server is responsible for choosing and/or submitting the + winner(s). + + Description When a VPOLL is stored on a server which is capable of + handling choosing and submission of winning choices a value of + SERVER indicates that the server should close the poll, choose the + winner and submit whenever it is appropriate to do so. + + For example, in BASIC poll-mode, reaching the DTEND of the poll + could trigger this server side action. + + Server initiated submission requires that the submitted choice + MUST be a valid calendaring component. + + POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- + winner, set the status to CONFIRMED and then store the poll on the + server. The server will then submit the winning choice and set + the status to SUBMITTED. + + Format Definition This property is defined by the following + notation: + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 15] + +Internet-Draft VPOLL July 2020 + + + poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF + + pcparam = *(";" other-param) + + pcvalue = "SERVER" ; The server is responsible for both choosing and + ; submitting the winner(s) + / "SERVER-SUBMIT" ; The server is responsible for + ; submitting the winner(s). The client chooses. + / "SERVER-CHOICE" ; The server is responsible for + ; choosing the winner(s). The client will submit. + / "CLIENT" ; The client is responsible for both choosing and + ; submitting the winner(s) + / iana-token + / x-name + ;Default is CLIENT + + Figure 12 + + Example The following is an example of this property: + + POLL-COMPLETION: SERVER-SUBMIT + + Figure 13 + +5.5.3. Poll-Item-Id + + Property name POLL-ITEM-ID + + Purpose This property is used in VPOLL child components as an + identifier. + + Value type INTEGER + + Property Parameters Non-standard parameters can be specified on this + property. + + Conformance This property MUST be specified in a VOTE component and + in VPOLL choice items. + + Description In a METHOD:REQUEST each choice 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. + + POLL-ITEM-ID SHOULD be a unique small integer for each component + or set of components. If it remains the same between REQUESTs + then the previous response for that component MAY be re-used. To + force a re-vote on a component due to a significant change, the + POLL-ITEM-ID MUST change. + + + +York, et al. Expires 31 January 2021 [Page 16] + +Internet-Draft VPOLL July 2020 + + + Format Definition This property is defined by the following + notation: + + pollitemid = "POLL-ITEM-ID" pollitemdparams ":" + integer CRLF + + pollitemidparams = *( + (";" other-param) + ) + + Figure 14 + +5.5.4. Poll-Mode + + Property name POLL-MODE + + Purpose This property is used in VPOLL to indicate what voting mode + is to be applied. + + Property Parameters Non-standard or iana parameters can be specified + on this property. + + Conformance This property MAY be specified in a VPOLL component or + its sub-components. + + Description The poll mode defines how the votes are applied to + obtain a result. BASIC mode, the default, means that the voters + are selecting one component (or group of components) with a given + POLL=ITEM-ID. + + Other polling modes may be defined in updates to this + specification. These may allow for such modes as ranking or task + assignment. + + Format Definition This property is defined by the following + notation: + + pollmode = "POLL-MODE" pollmodeparams ":" + ("BASIC" / iana-token / other-token) CRLF + + pollmodeparams = *(";" other-param) + + Figure 15 + +5.5.5. Poll-properties + + Property name POLL-PROPERTIES + + + + +York, et al. Expires 31 January 2021 [Page 17] + +Internet-Draft VPOLL July 2020 + + + Purpose This property is used in VPOLL to define which icalendar + properties are being voted on. + + Property Parameters Non-standard or iana parameters can be specified + on this property. + + Conformance This property MAY be specified in a VPOLL component. + + Description This property defines which icalendar properties are + significant in the voting process. It may not be clear to voters + which properties are varying in a significant manner. Clients may + use this property to highlight those listed properties. + + Format Definition This property is defined by the following + notation: + + pollproperties = "POLL-PROPERTIES" pollpropparams ":" + text *("," text) CRLF + + pollpropparams = *(";" other-param) + + Figure 16 + +5.5.6. Poll-Winner + + Property name POLL-WINNER + + Purpose This property is used in a basic mode VPOLL to indicate + which of the VPOLL sub-components won. + + Value type INTEGER + + Property Parameters Non-standard parameters can be specified on this + property. + + Conformance This property MAY be specified in a VPOLL component. + + Description For poll confirmation each child component MUST have a + POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD + have a POLL-WINNER property which MUST correspond to one of the + POLL-ITEM-ID properties and indicates which sub-component was the + winner. + + Format Definition This property is defined by the following + notation: + + + + + + +York, et al. Expires 31 January 2021 [Page 18] + +Internet-Draft VPOLL July 2020 + + + pollwinner = "POLL-WINNER" pollwinnerparams ":" + integer CRLF + + pollwinnerparams = *(";" other-param) + + ; Used with a STATUS:CONFIRMED VPOLL to indicate which + ; components have been confirmed + + Figure 17 + +5.5.7. Reply-URL + + Property name REPLY-URL + + Purpose This property may be used in scheduling messages to indicate + additional reply methods, for example a web-service. + + Property Parameters Non-standard, required or iana parameters can be + specified on this property. + + Conformance This property MAY be specified in a VPOLL component. + + Description When used in a scheduling message this property + indicates additional or required services that can be used to + reply. Typically this would be a web service of some form. + + Format Definition This property is defined by the following + notation: + + reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF + + reply-urlparams = *( + (";" requiredparam) / + (";" other-param) + ) + + Figure 18 + +5.5.8. Response + + Property name RESPONSE + + Purpose To specify a response vote. + + Value type INTEGER + + Format Definition This property is defined by the following + notation: + + + +York, et al. Expires 31 January 2021 [Page 19] + +Internet-Draft VPOLL July 2020 + + + response = "RESPONSE" response-params ":" integer CRLF + ; integer value 0..100 + + responseparams = *(";" other-param) + + Figure 19 + + Description This parameter can be specified on the POLL-ITEM-ID + property to provide the value of the voters response. This + parameter allows for fine grained responses which are appropriate + to some applications. For the case of individuals voting for a + choice of events, client applications SHOULD conform to the + following convention: + + * 0 - 39 A "NO vote" + + * 40 - 79 A "MAYBE" vote + + * 80 - 89 A "YES - but not preferred vote" + + * 90-100 A "YES" vote. + + Clients MUST preserve the response value when there is no + change from the user even if they have a UI with fixed states + (e.g. yes/no/maybe). + +5.6. New Components + +5.6.1. VPOLL Component + + Component name VPOLL + + Purpose This component provides a mechanism by which voters can vote + on provided choices. + + Format Definition This property is defined by the following + notation: + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 20] + +Internet-Draft VPOLL July 2020 + + + pollc = "BEGIN" ":" "VPOLL" CRLF + pollprop + *participantc *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 / 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 / + ; + ) + + Figure 20 + + Description This component provides a mechanism by which voters can + + + +York, et al. Expires 31 January 2021 [Page 21] + +Internet-Draft VPOLL July 2020 + + + vote on provided choices. The outcome depends upon the POLL-MODE + in effect. + + The PARTICIPANT components in VPOLL requests provide information + on each recipient who will be voting - both their identity through + the CALENDAR-ADDRESS property and their votes through the VOTE + components. + + If specified, the "DTSTART" property defines the start or opening + of the poll active period. If absent the poll is presumed to have + started when created. + + If "DTSTART" is present "DURATION" MAY be specified and indicates + the duration, and hence the ending, of the poll. The value of the + property MUST be a positive duration. + + "DTEND" MAY be specified with or without "DTSTART" and indicates + the ending of the poll. If DTEND is specified it MUST be later + than the DTSTART or CREATED property. + + If one or more VALARM components are included in the VPOLL they + are not components to be voted on and MUST NOT contain a POLL- + ITEM-ID property. VALARM sub-components may be used to provide + warnings to the user when polls are due to start or end. + +5.6.2. VOTE Component + + Component name VOTE + + Purpose This component provides a mechanism by which voters can vote + on provided choices. + + Conformance This component may be specified zero or more times in a + PARTICIPANT component which identifies the voter. + + Format Definition This property is defined by the following + notation: + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 22] + +Internet-Draft VPOLL July 2020 + + + votec = "BEGIN" ":" "VOTE" CRLF + voteprop + *eventc *todoc *journalc *freebusyc + *availabilityc *alarmc *iana-comp *x-comp + "END" ":" "VOTE" CRLF + + voteprop = *( + ; + ; The following are REQUIRED, + ; but MUST NOT occur more than once. + ; + pollitemid / response / + ; + ; The following are OPTIONAL, + ; and MAY occur more than once. + ; + comment / x-prop / iana-prop + ; + ) + + Figure 21 + + Description This component appears inside the PARTICIPANT component + with a PARTICIPANT-TYPE of VOTER to identify the voter. This + component contains that participants responses. + + The required and optional properties and their meanings will + depend upon the POLL-MODE in effect. + + For any POLL-MODE, POLL-ITEM-ID is used to associate the + information to a choice supplied by the organizer. This means + that each VOTE component only provides information about that + choice. + + If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- + ID may be provided in a REPLY to indicate a possible new choice or + to provide information to the ORGANIZER - such as the respondees + availability. + +6. Poll Modes + + The VPOLL component is intended to allow for various forms of + polling. The particular form in efffect is indicated by the POLL- + MODE property. + + New poll modes can be registered by including a completed POLL-MODE + Registration Template (see Section 10.3) in a published RFC. + + + + +York, et al. Expires 31 January 2021 [Page 23] + +Internet-Draft VPOLL July 2020 + + +6.1. POLL-MODE:BASIC + + 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. + +6.1.1. Property restrictions + + This poll mode has the following property requirements: + + POLL-ITEM-ID Each contained sub-component that is being voted upon + MUST contain a POLL-ITEM_ID property which is unique within the + context of the POLL. The value MUST NOT be reused when events are + removed and/or added to the poll. + + POLL-WINNER On confirmation of the poll this property MUST be + present and identifies the winning component. + +6.1.2. Outcome reporting + + To confirm the winner the POLL-WINNER property MUST be present and + the STATUS MUST be set to CONFIRMED. + + When the winning VEVENT or VTODO is not a scheduled entity, that is, + it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER + property and a list of non-participating ATTENDEEs. This allows the + winning entity to be distributed to the participants through iTip or + some other protocol. + +7. iTIP Extensions + + 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. + +7.1. Methods + + There are some extensions to the behavior of iTip methods for a VPOLL + object and two new methods are defined. + + + + + + + + +York, et al. Expires 31 January 2021 [Page 24] + +Internet-Draft VPOLL July 2020 + + + +----------------+------------------------------------------------+ + | 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 | + | | PARTICIPANTS. | + +----------------+------------------------------------------------+ + + Table 1 + + The following table shows the above methods broken down by who can + send them with VPOLL components. + + + + + + + + +York, et al. Expires 31 January 2021 [Page 25] + +Internet-Draft VPOLL July 2020 + + + +------------+------------------------------------------------+ + | Originator | Methods | + +============+================================================+ + | Organizer | CANCEL, PUBLISH, REQUEST, POLLSTATUS | + +------------+------------------------------------------------+ + | Voter | REPLY, REFRESH, REQUEST (only when delegating) | + +------------+------------------------------------------------+ + + Table 2 + +7.2. Interoperability Models + + Most of the standard iTip specification applies with respect to + organizer and voters. + +7.2.1. Delegation + + TBD + +7.2.2. Acting on Behalf of Other Calendar Users + + TBD + +7.2.3. Component Revisions + + * 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 + +7.2.4. Message Sequencing + + TBD + +7.3. Application Protocol Elements + +7.3.1. Methods for VPOLL Calendar Components + + 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. + + + +York, et al. Expires 31 January 2021 [Page 26] + +Internet-Draft VPOLL July 2020 + + + 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. | + +----------------+-------------------------------------------------+ + + Table 3 + + The following summarizes the methods that are defined for the "VPOLL" + calendar component. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 27] + +Internet-Draft VPOLL July 2020 + + + +------------+------------------------------------------------------+ + | 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. REQUEST SHOULD NOT be | + | | used just to set the status of the poll - | + | | POLLSTATUS provides a more compact approach. | + +------------+------------------------------------------------------+ + | 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 | + | | PARTICIPANT. | + +------------+------------------------------------------------------+ + + Table 4 + +7.3.2. Method: PUBLISH + + 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. + + Note Not clear how useful this is but needs some work on + transmitting the current vote without any voter identification. + + + +York, et al. Expires 31 January 2021 [Page 28] + +Internet-Draft VPOLL July 2020 + + + This method type is an iCalendar object that conforms to the + following property constraints: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST equal PUBLISH. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1+ | | + +-----------------+----------+-------------------------------------+ + | DTSTAMP | 1 | | + +-----------------+----------+-------------------------------------+ + | DTSTART | 0 or 1 | If present defines the start of the | + | | | poll. Otherwise the poll starts | + | | | when it is created and distributed. | + +-----------------+----------+-------------------------------------+ + | 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 | + + + +York, et al. Expires 31 January 2021 [Page 29] + +Internet-Draft VPOLL July 2020 + + + | | | 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+ | | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 0+ | Only PARTICIPANT components with | + | | | PARTICIPANT-TYPE not equal to | + | | | "VOTER" - that is, no voters | + +-----------------+----------+-------------------------------------+ + | REQUEST-STATUS | 0 | | + +-----------------+----------+-------------------------------------+ + | VALARM | 0+ | | + +-----------------+----------+-------------------------------------+ + | VEVENT | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VTODO | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + + + +York, et al. Expires 31 January 2021 [Page 30] + +Internet-Draft VPOLL July 2020 + + + | | | component. | + +-----------------+----------+-------------------------------------+ + | VTIMEZONE | 0+ | MUST be present if any date/time | + | | | refers to a timezone. | + +-----------------+----------+-------------------------------------+ + | IANA-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + | X-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + + Table 5: Constraints for a METHOD:PUBLISH of a VPOLL + +7.3.3. Method: REQUEST + + The "REQUEST" method in a "VPOLL" component provides the following + scheduling functions: + + * Invite "Voters" to respond to the poll. + + * Change the items being voted upon. + + * Complete or confirm the poll. + + * Response to a "REFRESH" request. + + * Update the details of an existing vpoll. + + * Update the status of "Voters". + + * Forward a "VPOLL" to another uninvited CU. + + * For an existing "VPOLL" calendar component, delegate the role of + "Voter" to another CU. + + * For an existing "VPOLL" calendar component, change the role of + "Organizer" to another CU. + + The "Organizer" originates the "REQUEST". The recipients of the + "REQUEST" method are the CUs voting in the poll, the "Voters". + "Voters" use the "REPLY" method to convey votes to 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. + + + +York, et al. Expires 31 January 2021 [Page 31] + +Internet-Draft VPOLL July 2020 + + + 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: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST be REQUEST. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1 | | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 1+ | Identified as voters with the | + | | | PARTICIPANT-TYPE=VOTER | + +-----------------+----------+-------------------------------------+ + | DTSTAMP | 1 | | + +-----------------+----------+-------------------------------------+ + | DTSTART | 0 or 1 | If present defines the start of the | + | | | poll. Otherwise the poll starts | + | | | when it is created and distributed. | + +-----------------+----------+-------------------------------------+ + | 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. | + + + +York, et al. Expires 31 January 2021 [Page 32] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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 | + + + +York, et al. Expires 31 January 2021 [Page 33] + +Internet-Draft VPOLL July 2020 + + + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VTODO | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + + Table 6: Constraints for a METHOD:REQUEST of a VPOLL + +7.3.3.1. Rescheduling a poll + + 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. + +7.3.3.2. Updating or Reconfirmation of a 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 a "Voter" to the "Organizer" of a poll. + + + + + + +York, et al. Expires 31 January 2021 [Page 34] + +Internet-Draft VPOLL July 2020 + + + 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. + +7.3.3.3. Confirmation of a 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. + +7.3.3.4. Closing a Poll + + The "REQUEST" method may be used to close a poll, that is indicate + voting is completed. The STATUS MUST be set to COMPLETED. + +7.3.3.5. Delegating a Poll to Another CU + + 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. + + + + + + + +York, et al. Expires 31 January 2021 [Page 35] + +Internet-Draft VPOLL July 2020 + + + 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". + +7.3.3.6. Changing 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". + +7.3.3.7. Sending on Behalf of the 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". + +7.3.3.8. Forwarding to an Uninvited CU + + 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 a "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. + + + + + + +York, et al. Expires 31 January 2021 [Page 36] + +Internet-Draft VPOLL July 2020 + + + 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. + +7.3.3.9. Updating Voter Status + + 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 "RSVP=TRUE" property parameter on the + PARTICIPANT CALENDAR-ADDRESS. 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". + +7.3.4. Method: REPLY + + 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" "CALENDAR- + ADDRESS" property. The "Delegate" SHOULD include the calendar + address of the "Delegator" on the "DELEGATED-FROM" property parameter + of the "Delegate's" "CALENDAR-ADDRESS" 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". + + + + + + + +York, et al. Expires 31 January 2021 [Page 37] + +Internet-Draft VPOLL July 2020 + + + A "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. (But see comments on VFREEBUSY and VAVAILABILITY) + + This method type is an iCalendar object that conforms to the + following property constraints: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST be REPLY. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1+ | All components MUST have the same | + +-----------------+----------+-------------------------------------+ + | | | UID. | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 1 | Identifies 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 | | + + + +York, et al. Expires 31 January 2021 [Page 38] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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+ | | + + + +York, et al. Expires 31 January 2021 [Page 39] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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 or 1 | A voter may respond with a | + | | | VFREEBUSY component indicating that | + | | | the ORGANIZER may select some other | + | | | time which is not marked as busy. | + +-----------------+----------+-------------------------------------+ + | VAVAILABILITY | 0 | A voter may respond with a | + | | | VAVAILABILITY component indicating | + | | | that the ORGANIZER may select some | + | | | other time which is shown as | + | | | available. | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0 | | + +-----------------+----------+-------------------------------------+ + | VTODO | 0 | | + +-----------------+----------+-------------------------------------+ + + Table 7: Constraints for a METHOD:REPLY of a VPOLL + +7.3.5. Method: CANCEL + + 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 7.2.3. + + Once a CANCEL message has been sent to all voters no further voting + may take place. The poll is considered closed. + + + +York, et al. Expires 31 January 2021 [Page 40] + +Internet-Draft VPOLL July 2020 + + + This method type is an iCalendar object that conforms to the + following property constraints: + + +-----------------+----------+----------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+==================================+ + | METHOD | 1 | MUST be CANCEL. | + +-----------------+----------+----------------------------------+ + | VPOLL | 1+ | All must have the same UID. | + +-----------------+----------+----------------------------------+ + | PARTICIPANT | 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 | | + +-----------------+----------+----------------------------------+ + | 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 | | + +-----------------+----------+----------------------------------+ + + + +York, et al. Expires 31 January 2021 [Page 41] + +Internet-Draft VPOLL July 2020 + + + | 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 | | + + + +York, et al. Expires 31 January 2021 [Page 42] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+----------------------------------+ + | VJOURNAL | 0 | | + +-----------------+----------+----------------------------------+ + | VEVENT | 0 | | + +-----------------+----------+----------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+----------------------------------+ + + Table 8: Constraints for a METHOD:CANCEL of a VPOLL + +7.3.6. Method: REFRESH + + 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: + + +--------------------+----------+----------------------------+ + | Component/Property | Presence | Comment | + +====================+==========+============================+ + | METHOD | 1 | MUST be REFRESH. | + +--------------------+----------+----------------------------+ + | VPOLL | 1 | | + +--------------------+----------+----------------------------+ + | PARTICIPANT | 1 | MUST identify the | + | | | requester as a voter. | + +--------------------+----------+----------------------------+ + | 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 | | + +--------------------+----------+----------------------------+ + + + +York, et al. Expires 31 January 2021 [Page 43] + +Internet-Draft VPOLL July 2020 + + + | 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 | | + +--------------------+----------+----------------------------+ + + + +York, et al. Expires 31 January 2021 [Page 44] + +Internet-Draft VPOLL July 2020 + + + | VTIMEZONE | 0+ | | + +--------------------+----------+----------------------------+ + | IANA-COMPONENT | 0+ | | + +--------------------+----------+----------------------------+ + | X-COMPONENT | 0+ | | + +--------------------+----------+----------------------------+ + | VTODO | 0 | | + +--------------------+----------+----------------------------+ + | VJOURNAL | 0 | | + +--------------------+----------+----------------------------+ + | VEVENT | 0 | | + +--------------------+----------+----------------------------+ + | VFREEBUSY | 0 | | + +--------------------+----------+----------------------------+ + + Table 9: Constraints for a METHOD:REFRESH of a VPOLL + +7.3.7. Method: POLLSTATUS + + 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. All "Voters" MUST be present. The selected component(s) + according to the poll mode SHOULD NOT 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: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST equal POLLSTATUS. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1+ | | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 1+ | The voters containing their current | + | | | vote | + +-----------------+----------+-------------------------------------+ + | COMPLETED | 0 or 1 | Only present for a completed poll | + +-----------------+----------+-------------------------------------+ + | DTSTAMP | 1 | | + +-----------------+----------+-------------------------------------+ + | DTSTART | 0 or 1 | | + +-----------------+----------+-------------------------------------+ + | ORGANIZER | 1 | | + + + +York, et al. Expires 31 January 2021 [Page 45] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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 | | + +-----------------+----------+-------------------------------------+ + | 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 | | + + + +York, et al. Expires 31 January 2021 [Page 46] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | IANA-PROPERTY | 0+ | | + +-----------------+----------+-------------------------------------+ + | X-PROPERTY | 0+ | | + +-----------------+----------+-------------------------------------+ + | REQUEST-STATUS | 0 | | + +-----------------+----------+-------------------------------------+ + | VALARM | 0+ | | + +-----------------+----------+-------------------------------------+ + | VEVENT | 0 | All candidate components SHOULD NOT | + | | | be present. | + +-----------------+----------+-------------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0 | All candidate components SHOULD NOT | + | | | be present. | + +-----------------+----------+-------------------------------------+ + | VTODO | 0 | All candidate components SHOULD NOT | + | | | be present. | + +-----------------+----------+-------------------------------------+ + | VTIMEZONE | 0+ | MUST be present if any date/time | + | | | refers to a timezone. | + +-----------------+----------+-------------------------------------+ + | IANA-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + | X-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + + Table 10: Constraints for a METHOD:POLLSTATUS of a VPOLL + +8. CalDAV Extensions + + 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. + + Additionally, it extends [RFC6638] as it a VPOLL component is a + schedulable entity. + +8.1. Calendar Collection Properties + + This section defines new CalDAV properties for calendar collections. + +8.1.1. CALDAV:supported-vpoll-component-sets + + Name supported-vpoll-component-sets + + Namespace urn:ietf:params:xml:ns:caldav + + + +York, et al. Expires 31 January 2021 [Page 47] + +Internet-Draft VPOLL July 2020 + + + Purpose Specifies the calendar component types (e.g., VEVENT, VTODO, + etc.) and combination of types that may be included in a VPOLL + component. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND DAV:allprop request (as defined in [RFC2518]). + + Description The CALDAV:supported-vpoll-component-sets property is + used to specify restrictions on the calendar component types that + VPOLL components may contain in a calendar collection. + + It also specifies the combination of allowed component types. + + Any attempt by the client to store VPOLL components with component + types or combinations of types not listed in this property, if it + exists, MUST result in an error, with the "CALDAV:supported-vpoll- + component-sets" precondition Section 8.2 being violated. Since + this property is protected, it cannot be changed by clients using + a PROPPATCH request. However, clients can initialize the value of + this property when creating a new calendar collection with + MKCALENDAR. In the absence of this property, the server MUST + accept all component types, and the client can assume that all + component types are accepted. + + Definition + + + + + + Figure 22 + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 48] + +Internet-Draft VPOLL July 2020 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Figure 23 + +8.1.2. CALDAV:vpoll-max-items + + Name vpoll-max-items + + Namespace urn:ietf:params:xml:ns:caldav + + Purpose Provides a numeric value indicating the maximum number of + items that may be contained in any instance of a VPOLL calendar + object resource stored in the calendar collection. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND DAV:allprop request (as defined in [RFC2518]). + + Description The CALDAV:vpoll-max-items is used to specify a numeric + value that indicates the maximum number of iCalendar components in + any one instance of a VPOLL calendar object resource stored in a + calendar collection. Any attempt to store a calendar object + resource with more components per instance than this value MUST + + + +York, et al. Expires 31 January 2021 [Page 49] + +Internet-Draft VPOLL July 2020 + + + result in an error, with the CALDAV: vpoll-max-items precondition + Section 8.2 being violated. In the absence of this property, the + client can assume that the server can handle any number of items + in a VPOLL calendar component. + + Definition + + + PCDATA value: a numeric value (integer greater than zero) + + Figure 24 + + 25 + + Figure 25 + +8.1.3. CALDAV:vpoll-max-active + + Name vpoll-max-active + + Namespace urn:ietf:params:xml:ns:caldav + + Purpose Provides a numeric value indicating the maximum number of + active vpolls at any one time. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND DAV:allprop request (as defined in [RFC2518]). + + Description The CALDAV:vpoll-max-active is used to specify a numeric + value that indicates the maximum number of active VPOLLs at any + one time. Any attempt to store a new active VPOLL calendar object + resource which results in exceeding this limit MUST result in an + error, with the "CALDAV:vpoll-max-active" precondition Section 8.2 + being violated. In the absence of this property, the client can + assume that the server can handle any number of active VPOLLs. + + Definition + + + PCDATA value: a numeric value (integer greater than zero) + + Figure 26 + + 25 + + + + +York, et al. Expires 31 January 2021 [Page 50] + +Internet-Draft VPOLL July 2020 + + + Figure 27 + +8.1.4. CALDAV:vpoll-max-voters + + Name "vpoll-max-voters" + + Namespace "urn:ietf:params:xml:ns:caldav" + + Purpose Provides a numeric value indicating the maximum number of + voters for any instance of a VPOLL calendar object resource stored + in the calendar collection. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND "DAV:allprop" request (as defined in [RFC2518]). + + Description The "CALDAV:vpoll-max-voters" is used to specify a + numeric value that indicates the maximum number of voters for any + one instance of a VPOLL calendar object resource stored in a + calendar collection. Any attempt to store a calendar object + resource with more voters per instance than this value MUST result + in an error, with the CALDAV: "vpoll-max-voters" precondition + Section 8.2 being violated. In the absence of this property, the + client can assume that the server can handle any number of voters + in a VPOLL calendar component. + + Definition + + + PCDATA value: a numeric value (integer greater than zero) + + Figure 28 + + 25 + + Figure 29 + +8.1.5. CalDAV:even-more-properties + +8.1.6. Extensions to CalDAV scheduling + + This specification extends [RFC6638]. + + Each section of Appendix A "Scheduling Privileges Summary" is + extended to include VPOLL. + + + + + +York, et al. Expires 31 January 2021 [Page 51] + +Internet-Draft VPOLL July 2020 + + + Any reference to the ATTENDEE property should be read to include the + CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. + That is, for scheduling purposes the CALENDAR-ADDRESS property is + handled in exactly the same manner as the ATTENDEE property. + +8.2. Additional Preconditions for PUT, COPY, and MOVE + + 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: + + (CALDAV:supported-vpoll-component-sets) The VPOLL resource submitted + in the PUT request, or targeted by a COPY or MOVE request, MUST + contain a type or combination of calendar component that is + supported in the targeted calendar collection; + + (CALDAV:vpoll-max-items) The VPOLL resource submitted in the PUT + request, or targeted by a COPY or MOVE request, MUST have a number + of sub-components (excluding VTIMEZONE) less than or equal to the + value of the "CALDAV:vpoll-max-items" property value Section 8.1.2 + on the calendar collection where the resource will be stored; + + (CALDAV:vpoll-max-active) The PUT request, or COPY or MOVE request, + MUST not result in the number of active VPOLLs being greater than + the value of the "CALDAV:vpoll-max-active" property value + Section 8.1.3 on the calendar collection where the resource will + be stored; + + (CALDAV:vpoll-max-voters) The VPOLL resource submitted in the PUT + request, or targeted by a COPY or MOVE request, MUST have a number + of voters represented by PARTICIPANT components less than or equal + to the value of the "CALDAV:vpoll-max-voters" property value + Section 8.1.4 on the calendar collection where the resource will + be stored; + +8.3. CalDAV:calendar-query Report + + 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. + + + + +York, et al. Expires 31 January 2021 [Page 52] + +Internet-Draft VPOLL July 2020 + + +8.3.1. Example: Partial Retrieval of VPOLL + + 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. + + >> Request << + + REPORT /cyrus/work/ HTTP/1.1 + Host: cal.example.com + Depth: 1 + Content-Type: application/xml; charset="utf-8" + Content-Length: xxxx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 53] + +Internet-Draft VPOLL July 2020 + + + >> 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 + + + + + http://cal.example.com/cyrus/work/poll2.ics + + + "fffff-abcd2" + BEGIN:VCALENDAR + VERSION:2.0 + BEGIN:VPOLL + DTSTART;TZID=US/Eastern:20121202T120000 + DURATION:PT4D + SUMMARY:Poll #2 + UID:00959BC664CA650E933C892C@example.com + END:VPOLL + END:VCALENDAR + + + HTTP/1.1 200 OK + + + + http://cal.example.com/cyrus/work/poll3.ics + + + "fffff-abcd3" + 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 + + + HTTP/1.1 200 OK + + + +York, et al. Expires 31 January 2021 [Page 54] + +Internet-Draft VPOLL July 2020 + + + + + + + Figure 30 + +8.4. CalDAV time ranges + + "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 + + 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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 55] + +Internet-Draft VPOLL July 2020 + + + +-------------------------------------------------------------------+ + | 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 | + +---+---+---+---+---+-----------------------------------------------+ + + Figure 31 + +9. Security Considerations + + 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. + +10. IANA Considerations + + + + + + +York, et al. Expires 31 January 2021 [Page 56] + +Internet-Draft VPOLL July 2020 + + +10.1. Parameter Registrations + + This document defines the following new iCalendar property parameters + to be added to the registry defined in [RFC5545]: + + +--------------------+---------+---------------+ + | Property Parameter | Status | Reference | + +====================+=========+===============+ + | REQUIRED | Current | Section 5.4.1 | + +--------------------+---------+---------------+ + | STAY-INFORMED | Current | Section 5.4.2 | + +--------------------+---------+---------------+ + + Table 11 + +10.2. Property Registrations + + This document defines the following new iCalendar properties to be + added to the registry defined in [RFC5545]: + + +-----------------+---------+---------------+ + | Property | Status | Reference | + +=================+=========+===============+ + | ACCEPT-RESPONSE | Current | Section 5.5.7 | + +-----------------+---------+---------------+ + | POLL-ITEM-ID | Current | Section 5.5.3 | + +-----------------+---------+---------------+ + | POLL-MODE | Current | Section 5.5.4 | + +-----------------+---------+---------------+ + | POLL-PROPERTIES | Current | Section 5.5.5 | + +-----------------+---------+---------------+ + | POLL-WINNER | Current | Section 5.5.6 | + +-----------------+---------+---------------+ + | RESPONSE | Current | Section 5.5.8 | + +-----------------+---------+---------------+ + + Table 12 + +10.3. POLL-MODE Registration Template + + A poll mode is defined by completing the following template. + + Poll mode name The name of the poll mode. + + Purpose The purpose of the poll mode. Give a short but clear + description. + + Reference A reference to the RFC in which the poll mode is defined + + + +York, et al. Expires 31 January 2021 [Page 57] + +Internet-Draft VPOLL July 2020 + + +10.4. POLL-MODE Registrations + + This document defines the following registered poll modes. + + +-----------+---------------------------------------+-----------+ + | Poll mode | Purpose | Reference | + | name | | | + +===========+=======================================+===========+ + | BASIC | To provide simple voting for a single | Current | + | | outcome from a number of candidates. | | + +-----------+---------------------------------------+-----------+ + + Table 13 + +11. Normative references + + [RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. + Jensen, "HTTP Extensions for Distributed Authoring - + WEBDAV", IETF RFC 2518, IETF RFC 2518, + DOI 10.17487/RFC2518, February 1999, + . + + [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform + Resource Identifier (URI): Generic Syntax", IETF RFC 3986, + IETF RFC 3986, DOI 10.17487/RFC3986, January 2005, + . + + [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault, + "Calendaring Extensions to WebDAV (CalDAV)", IETF RFC + 4791, IETF RFC 4791, DOI 10.17487/RFC4791, March 2007, + . + + [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and + Scheduling Core Object Specification (iCalendar)", IETF + RFC 5545, IETF RFC 5545, DOI 10.17487/RFC5545, September + 2009, . + + [RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent + Interoperability Protocol (iTIP)", IETF RFC 5546, IETF RFC + 5546, DOI 10.17487/RFC5546, December 2009, + . + + [RFC6047] Melnikov, A., Ed., "iCalendar Message-Based + Interoperability Protocol (iMIP)", IETF RFC 6047, IETF RFC + 6047, DOI 10.17487/RFC6047, December 2010, + . + + + + + +York, et al. Expires 31 January 2021 [Page 58] + +Internet-Draft VPOLL July 2020 + + + [RFC6638] Daboo, C. and B. Desruisseaux, "Scheduling Extensions to + CalDAV", IETF RFC 6638, IETF RFC 6638, + DOI 10.17487/RFC6638, June 2012, + . + + [I-D.ietf-calext-eventpub-extensions] + Douglass, M., "Event Publishing Extensions to iCalendar", + IETF I-D.ietf-calext-eventpub-extensions, IETF I-D.ietf- + calext-eventpub-extensions, October 2019. + +12. Bibliography + +Appendix A. Open issues + + public-comment: Not documented and was a parameter on something. + Really sounds like a PARTICIPANT or VOTE property + + Notifications: Need to do a section on what Notifications to support. + A. VPOLL is about to end and you haven't voted on it yet. Instead + reuse VALARMS to notify the user? + + Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any events + booked as a result of confirmation. MUST winning event be cancelled + for POLL-MODE basic? No - voter has indicated now unable to attend - + want to revote + + Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. Requires + retention of VPOLL retention period Removed status + + ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create a + poll with a set of events where I am just the attendee of the events. + Are there any other restrictions for components in a VPOLL? Add to + security consideration + + Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event. + + Need to write down what isn't valid in a VPOLL a. Can't change POLL- + MODE + + Guide for ATTENDEE roles chair, NON-PARTICIPANT etc + + + +York, et al. Expires 31 January 2021 [Page 59] + +Internet-Draft VPOLL July 2020 + + + ? - some iTip notes On confirm - send itip if appropriate (PUBLISH) - + all non-participating - shared - feeds Organizer can specify where + result is? Confirm can specify that itip is sent - ITIP / NONE - + parameter ? on POLL-WINNER + + Need to add example of freebusy in response + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest + METHOD: REPLY + BEGIN:VPOLL + ORGANIZER:mailto:douglm@mysite.edu + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:eric@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T010000Z + SEQUENCE:0 + SUMMARY:What to do this week + BEGIN:VFREEBUSY + ....... + END:VFREEBUSY + END:PARTICIPANT + END:VPOLL + END:VCALENDAR + + Figure 32 + +Appendix B. Change log + + Calext V01: 2019-10-17 MD Replace VVOTER and VOTER with PARTICIPANT. + + Calext V00: 2019-05-17 MD First calext version. Moved source to + metanorma. No changes to specification. + + V03: 2014-10-28 MD * Add VVOTER and VOTE components. + + * Add RESPONSE property. + + * Remove RESPONSE parameter from VOTER. + + V03: 2014-05-12 MD * Add reply-url property and required parameter. + + * Fix ACCEPT-RESPONSE definition. + + V02: 2014-05-12 MD * Typos fixed, clarifications made. + + + + +York, et al. Expires 31 January 2021 [Page 60] + +Internet-Draft VPOLL July 2020 + + + * Removed spurious COMMENT param. Switched some + to PUBLIC-COMMENT + + * Changed STAY-INFORMED to remove boolean value + type and state explicit TRUE/FALSE values. + + * iTip: Allow VPOLL DTSTART to be optional and + allow VAVAILABILITY as subcomponent + + * iTip: fix broken table cells + + * Add POLL-PROPERTIES, POLL-WINNER to 5545 + extensions table + + * Added Caldav scheduling section + + V01: 2013-08-07 MD * Removed method CONFIRM + + * Removed pollitemid from VPOLL abnf. Added + text for pollwinner + + * Added POLL-WINNER and verbiage + + * Added STATUS values + + * Added RELTYPE=POLL + + * Added supported-vpoll-component-sets + + * Added CalDAV related parameters to VOTER + + * Removed bad CalDAV query example. State that + queries cannot target the sub-components. + + Initial version: 2012-11-02 MD + +Authors' Addresses + + Eric York + + Email: eric.york@gmail.com + + + Cyrus Daboo + + Email: cyrus@daboo.name + + + + + +York, et al. Expires 31 January 2021 [Page 61] + +Internet-Draft VPOLL July 2020 + + + Michael Douglass + + Email: mikeadouglass@gmail.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 62] diff --git a/documents/draft-ietf-calext-vpoll.xml b/documents/draft-ietf-calext-vpoll.xml new file mode 100644 index 0000000..19237c9 --- /dev/null +++ b/documents/draft-ietf-calext-vpoll.xml @@ -0,0 +1,4859 @@ + + + +VPOLL: Consensus Scheduling Component for iCalendar +VPOLL +www.linkedin.com/in/eryork +draft-ietf-calext-vpoll-00 +draft-ietf-calext-vpoll-00 + + + + +Eric York + +eric.york@gmail.com + + + + + + +Cyrus Daboo + +cyrus@daboo.name + + + + + + +Michael Douglass + +mikeadouglass@gmail.com + + + + + +Internet Engineering Task Force +IETF + + + +2019-11-05 + +en + + +standard + + +2020 + + +Internet Engineering Task Force +IETF + + + + +IETF + + +standard + + +internet-draft +Internet +trust200902 +true + +yes + + + + +Foreword +

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+
+Acknowledgements +

The authors would like to thank the members of the Calendaring and Scheduling Consortium (CalConnect) for contributing their ideas and support.

+
+Introduction

The currently existing approach to agreeing on meeting times using +iTip and/or iMip has 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.

+Terms and definitions

For the purposes of this document, + the following terms and definitions apply.

+ + + +consensus scheduling +

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+
+ +active Vpoll +

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+
+ +voter +

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+Simple Consensus Scheduling

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+The VPOLL Component: An Overview

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+
+
DTSTAMP
+
+

The usual property.

+
+
SEQUENCE
+
+

The usual property. See below for SEQUENCE +behavior.

+
+
UID
+
+

The usual property.

+
+
ORGANIZER
+
+

The usual property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+
+
SUMMARY
+
+

The usual property. This optional but +recommended property provides the a short title to the poll.

+
+
DESCRIPTION
+
+

The usual property. This optional property +provides more details.

+
+
DTEND
+
+

The usual property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+
+
POLL-MODE
+
+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value "BASIC" +meaning one event will be chosen from the alternatives.

+
+
POLL-COMPLETION
+
+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is "SERVER-SUBMIT" which means the client chooses the winner +but the server will submit the winning choice.

+
+
POLL-PROPERTIES
+
+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value "DTSTART, LOCATION" meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+
+
PARTICIPANT
+
+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to "VOTER". The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+
+
VOTE
+
+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+
+
VEVENT
+
+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+
+

VPOLL with 3 voters and 3 alternative meetings:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD:REQUEST +BEGIN:VPOLL +POLL-MODE:BASIC +POLL-COMPLETION:SERVER-SUBMIT +POLL-PROPERTIES:DTSTART,LOCATION +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T000000Z +SUMMARY:What to do this week +DTEND:20120101T000000Z +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +END PARTICIPANT +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +END PARTICIPANT +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:mike@example.com +END PARTICIPANT +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 +
+

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.

+The VPOLL Alternative Choices: An Overview

Within the VPOLL component we have the alternatives to vote on. In +many respects these are standard components. For our +simple use case they are all VEVENT components. In addition to the +usual properties some extra properties are used for a +VPOLL.

+
+
POLL-ITEM-ID
+
+

This provides a unique reference to the sub-component +within the VPOLL. It's value SHOULD be a small integer.

+
+
+VPOLL responses

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 and components:

+
+
DTSTAMP
+
+

The usual property.

+
+
SEQUENCE
+
+

The usual property. See below for SEQUENCE +behavior.

+
+
UID
+
+

Same as the request.

+
+
ORGANIZER
+
+

Same as the request.

+
+
SUMMARY
+
+

Same as the request.

+
+
PARTICIPANT
+
+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+
+
VOTE
+
+

One per item being voted on.

+
+
POLL-ITEM-ID
+
+

One inside each VOTE component to identify the choice.

+
+
RESPONSE
+
+

One inside each VOTE component to specify the vote.

+
+
+

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.

+
+
NOTE
+
+

This is poll-mode specific behavior?

+
+
+

REPLY VPOLL from Cyrus:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SUMMARY:What to do this week +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+VPOLL updates

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: POLLSTATUS +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T020000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +BEGIN: VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+VPOLL Completion

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +"SUBMITTED".

+

VPOLL confirmation:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REQUEST +BEGIN:VPOLL +ORGANIZER:mailto:douglm@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T030000Z +COMPLETED:20120101T030000Z +POLL-COMPLETION:SERVER-SUBMIT +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 +
+Other Responses

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+iCalendar ExtensionsUpdated Participant Type Value

Participant type property values are defined in section 11.2.1. of +. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+partvalue /= "VOTER" + +
+
Description
+
+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+
+Updated Relation Type Value

Relationship parameter type values are defined in section 3.2.15. of +. 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.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+reltypeparam /= "RELTYPE" "=" "POLL" +; Property value is a VPOLL uid + +
+
Description
+
+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+
+Updated Status Value

Status property values are defined in section 3.8.1.11. of . +This specification updates that type to define valid VPOLL status +values.

+
+
Format Definition
+
+

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 + / "SUBMITTED" ; The winning item has been + ; submitted + / "CANCELLED" + +
+
Description
+
+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+
+
+
+New Property ParametersRequired
+
Parameter name
+
+

REQUIRED

+
+
Purpose
+
+

To specify whether the associated property is required in +the current context.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+requirededparam = "REQUIRED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + +
+
Description
+
+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+
+Stay-Informed
+
Parameter name
+
+

STAY-INFORMED

+
+
Purpose
+
+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+stayinformedparam = "STAY-INFORMED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + +
+
Description
+
+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+
+New PropertiesAccept-Response
+
Property name
+
+

ACCEPT-RESPONSE

+
+
Purpose
+
+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+

If this property is not present voters are only allowed to respond +to the choices in the request.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":" + iana-token ("," iana-token) CRLF + +acceptresponseparams = *(";" other-param) +
+Poll-Completion
+
Property name
+
+

POLL-COMPLETION

+
+
Purpose
+
+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+
+
Description
+

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

+
Format Definition
+
+

This property is defined by the following notation:

+
+
+poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF + +pcparam = *(";" other-param) + +pcvalue = "SERVER" ; The server is responsible for both choosing and + ; submitting the winner(s) + / "SERVER-SUBMIT" ; The server is responsible for + ; submitting the winner(s). The client chooses. + / "SERVER-CHOICE" ; The server is responsible for + ; choosing the winner(s). The client will submit. + / "CLIENT" ; The client is responsible for both choosing and + ; submitting the winner(s) + / iana-token + / x-name + ;Default is CLIENT + +
+
Example
+
+

The following is an example of this property:

+
+
+POLL-COMPLETION: SERVER-SUBMIT +
+Poll-Item-Id
+
Property name
+
+

POLL-ITEM-ID

+
+
Purpose
+
+

This property is used in VPOLL child components as an +identifier.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+
+
Description
+
+

In a METHOD:REQUEST each choice 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.

+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollitemid = "POLL-ITEM-ID" pollitemdparams ":" + integer CRLF + +pollitemidparams = *( + (";" other-param) + ) +
+Poll-Mode
+
Property name
+
+

POLL-MODE

+
+
Purpose
+
+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component or +its sub-components.

+
+
Description
+
+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollmode = "POLL-MODE" pollmodeparams ":" + ("BASIC" / iana-token / other-token) CRLF + +pollmodeparams = *(";" other-param) +
+Poll-properties
+
Property name
+
+

POLL-PROPERTIES

+
+
Purpose
+
+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollproperties = "POLL-PROPERTIES" pollpropparams ":" + text *("," text) CRLF + +pollpropparams = *(";" other-param) +
+Poll-Winner
+
Property name
+
+

POLL-WINNER

+
+
Purpose
+
+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+
+
Format Definition
+
+

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 +
+Reply-URL
+
Property name
+
+

REPLY-URL

+
+
Purpose
+
+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+
+
Property Parameters
+
+

Non-standard, required or iana parameters can +be specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF + +reply-urlparams = *( + (";" requiredparam) / + (";" other-param) + ) +
+Response
+
Property name
+
+

RESPONSE

+
+
Purpose
+
+

To specify a response vote.

+
+
Value type
+
+

INTEGER

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+response = "RESPONSE" response-params ":" integer CRLF + ; integer value 0..100 + +responseparams = *(";" other-param) + +
+
Description
+
+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
    +
  • +

    0 - 39 A "NO vote"

    +
  • +
  • +

    40 - 79 A "MAYBE" vote

    +
  • +
  • +

    80 - 89 A "YES - but not preferred vote"

    +
  • +
  • +

    90-100 A "YES" vote.

    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
  • +
+
+
+New ComponentsVPOLL Component
+
Component name
+
+

VPOLL

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollc = "BEGIN" ":" "VPOLL" CRLF + pollprop + *participantc *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 / 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 / + ; + ) + +
+
Description
+

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting - both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+

If specified, the "DTSTART" property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+

If "DTSTART" is present "DURATION" MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+

"DTEND" MAY be specified with or without "DTSTART" and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+
+VOTE Component
+
Component name
+
+

VOTE

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Conformance
+
+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+votec = "BEGIN" ":" "VOTE" CRLF + voteprop + *eventc *todoc *journalc *freebusyc + *availabilityc *alarmc *iana-comp *x-comp + "END" ":" "VOTE" CRLF + +voteprop = *( + ; + ; The following are REQUIRED, + ; but MUST NOT occur more than once. + ; + pollitemid / response / + ; + ; The following are OPTIONAL, + ; and MAY occur more than once. + ; + comment / x-prop / iana-prop + ; + ) + +
+
Description
+

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER - such as the respondees +availability.

+
+Poll Modes

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see ) in a published RFC.

+POLL-MODE:BASIC

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.

+Property restrictions

This poll mode has the following property requirements:

+
+
POLL-ITEM-ID
+
+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+
+
POLL-WINNER
+
+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+
+Outcome reporting

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+iTIP Extensions

This specification introduces a number of extensions to . +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.

+Methods

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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 PARTICIPANTS.

+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+ + + + + + + + + + + + + + + + + +
OriginatorMethods
+

Organizer

+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+

Voter

+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+Interoperability Models

Most of the standard iTip specification applies with respect to +organizer and voters.

+ +Delegation +

TBD

+
+ +Acting on Behalf of Other Calendar Users +

TBD

+
+ +Component Revisions +
    +
  • +

    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

    +
  • +
+
+ +Message Sequencing +

TBD

+
+Application Protocol ElementsMethods for VPOLL Calendar Components

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 ValueDescription
+

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.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+

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 PARTICIPANT.

+
+Method: PUBLISH

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.

+
+
Note
+
+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+ +Constraints for a METHOD:PUBLISH of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal PUBLISH.

+
+

VPOLL

+
+

1+

+
+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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+

+
+
+

PARTICIPANT

+
+

0+

+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to "VOTER" - that is, no voters

+
+

REQUEST-STATUS

+
+

0

+
+
+

VALARM

+
+

0+

+
+
+

VEVENT

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+
+

X-COMPONENT

+
+

0+

+
+
+Method: REQUEST

The "REQUEST" method in a "VPOLL" component provides the following +scheduling functions:

+
    +
  • +

    Invite "Voters" to respond to the poll.

    +
  • +
  • +

    Change the items being voted upon.

    +
  • +
  • +

    Complete or confirm the poll.

    +
  • +
  • +

    Response to a "REFRESH" request.

    +
  • +
  • +

    Update the details of an existing vpoll.

    +
  • +
  • +

    Update the status of "Voters".

    +
  • +
  • +

    Forward a "VPOLL" to another uninvited CU.

    +
  • +
  • +

    For an existing "VPOLL" calendar component, delegate the role of +"Voter" to another CU.

    +
  • +
  • +

    For an existing "VPOLL" calendar component, change the role of +"Organizer" to another CU.

    +
  • +
+

The "Organizer" originates the "REQUEST". The recipients of the +"REQUEST" method are the CUs voting in the poll, the "Voters". +"Voters" use the "REPLY" method to convey votes to 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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REQUEST.

+
+

VPOLL

+
+

1

+
+
+

PARTICIPANT

+
+

1+

+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+ +Rescheduling a poll +

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.

+
+Updating or Reconfirmation of a 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 a "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.

+ +Confirmation of a 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.

+
+ +Closing a Poll +

The "REQUEST" method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+Delegating a Poll to Another CU

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".

+ +Changing 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".

+
+ +Sending on Behalf of the 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".

+
+Forwarding to an Uninvited CU

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 a "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.

+ +Updating Voter Status +

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 "RSVP=TRUE" property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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".

+
+Method: REPLY

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" "CALENDAR-ADDRESS" +property. The "Delegate" SHOULD include the calendar address of the +"Delegator" on the "DELEGATED-FROM" property parameter of the +"Delegate's" "CALENDAR-ADDRESS" 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".

+

A "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. (But see comments on VFREEBUSY and VAVAILABILITY)

+

This method type is an iCalendar object that conforms to the +following property constraints:

+ +Constraints for a METHOD:REPLY of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REPLY.

+
+

VPOLL

+
+

1+

+
+

All components MUST have the same

+
+ + +

UID.

+
+

PARTICIPANT

+
+

1

+
+

Identifies 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 or 1

+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+

VAVAILABILITY

+
+

0

+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+

VJOURNAL

+
+

0

+
+
+

VTODO

+
+

0

+
+
+Method: CANCEL

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 .

+

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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be CANCEL.

+
+

VPOLL

+
+

1+

+
+

All must have the same UID.

+
+

PARTICIPANT

+
+

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

+
+
+

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

+
+
+Method: REFRESH

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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REFRESH.

+
+

VPOLL

+
+

1

+
+
+

PARTICIPANT

+
+

1

+
+

MUST identify the requester as a voter.

+
+

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

+
+
+Method: POLLSTATUS

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. All "Voters" MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal POLLSTATUS.

+
+

VPOLL

+
+

1+

+
+
+

PARTICIPANT

+
+

1+

+
+

The voters containing their current vote

+
+

COMPLETED

+
+

0 or 1

+
+

Only present for a completed poll

+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 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

+
+
+

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 SHOULD NOT be present.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTODO

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+
+

X-COMPONENT

+
+

0+

+
+
+CalDAV Extensions

This specification extends in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports.

+

Additionally, it extends as it a VPOLL component is a +schedulable entity.

+Calendar Collection Properties

This section defines new CalDAV properties for calendar collections.

+CALDAV:supported-vpoll-component-sets
+
Name
+
+

supported-vpoll-component-sets

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

It also specifies the combination of allowed component types.

+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-items
+
Name
+
+

vpoll-max-items

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+
+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-active
+
Name
+
+

vpoll-max-active

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+
+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-voters
+
Name
+
+

+vpoll-max-voters +

+
+
Namespace
+
+

+urn:ietf:params:xml:ns:caldav +

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+
+
Definition
+
+
+<!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> +
+ +CalDAV:even-more-properties + +Extensions to CalDAV scheduling

This specification extends .

+

Each section of Appendix A "Scheduling Privileges Summary" is +extended to include VPOLL.

+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+Additional Preconditions for PUT, COPY, and MOVE

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:

+
+
(CALDAV:supported-vpoll-component-sets)
+
+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+
+
(CALDAV:vpoll-max-items)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value +on the calendar collection where the resource will be stored;

+
+
(CALDAV:vpoll-max-active)
+
+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value + on the calendar collection where the resource will +be stored;

+
+
(CALDAV:vpoll-max-voters)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value on the +calendar collection where the resource will be stored;

+
+
+CalDAV:calendar-query Report

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.

+Example: Partial Retrieval of VPOLL

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.

+>> 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:VPOLL +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> +
+CalDAV time ranges

"CALDAV:time-range XML Element" in 9.9 describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends to +describe the meaning of time ranges for VPOLL

+

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.

++-------------------------------------------------------------------+ +| 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 | ++---+---+---+---+---+-----------------------------------------------+ +
+ +Security Considerations +

Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See for a +discussion of the security considerations relating to URIs.

+
+IANA ConsiderationsParameter Registrations

This document defines the following new iCalendar property parameters +to be added to the registry defined in 8.2.4:

+ + + + + + + + + + + + + + + + + + + + +
Property ParameterStatusReference
+

REQUIRED

+
+

Current

+
+

+ +

+
+

STAY-INFORMED

+
+

Current

+
+

+ +

+
+Property Registrations

This document defines the following new iCalendar properties to be +added to the registry defined in 8.2.3:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyStatusReference
+

ACCEPT-RESPONSE

+
+

Current

+
+

+ +

+
+

POLL-ITEM-ID

+
+

Current

+
+

+ +

+
+

POLL-MODE

+
+

Current

+
+

+ +

+
+

POLL-PROPERTIES

+
+

Current

+
+

+ +

+
+

POLL-WINNER

+
+

Current

+
+

+ +

+
+

RESPONSE

+
+

Current

+
+

+ +

+
+POLL-MODE Registration Template

A poll mode is defined by completing the following template.

+
+
Poll mode name
+
+

The name of the poll mode.

+
+
Purpose
+
+

The purpose of the poll mode. Give a short but clear +description.

+
+
Reference
+
+

A reference to the RFC in which the poll mode is defined

+
+
+POLL-MODE Registrations

This document defines the following registered poll modes.

+ + + + + + + + + + + + + + + +
Poll mode namePurposeReference
+

BASIC

+
+

To provide simple voting for a single outcome from a number of candidates.

+
+

Current

+
+ + + + +
Open issues

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+

Notifications: Need to do a section on what Notifications to + support.
+ A. VPOLL is about to end and you haven't voted on it yet. + Instead reuse VALARMS to notify the user?

+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No - voter + has indicated now unable to attend - want to revote

+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+

Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event.

+

Need to write down what isn't valid in a VPOLL
+ a. Can't change POLL-MODE

+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+

? - some iTip notes On confirm - send itip if appropriate (PUBLISH) + - all non-participating - shared - feeds + Organizer can specify where result is? + Confirm can specify that itip is sent - ITIP / NONE - parameter ? + on POLL-WINNER

+

Need to add example of freebusy in response

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:douglm@mysite.edu +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:VFREEBUSY +....... +END:VFREEBUSY +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+Change log +
+
Calext V01: 2019-10-17 MD
+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+
Calext V00: 2019-05-17 MD
+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+
V03: 2014-10-28 MD
+
+
    +
  • +

    Add VVOTER and VOTE components.

    +
  • +
  • +

    Add RESPONSE property.

    +
  • +
  • +

    Remove RESPONSE parameter from VOTER.

    +
  • +
+
+
V03: 2014-05-12 MD
+
+
    +
  • +

    Add reply-url property and required parameter.

    +
  • +
  • +

    Fix ACCEPT-RESPONSE definition.

    +
  • +
+
+
V02: 2014-05-12 MD
+
+
    +
  • +

    Typos fixed, clarifications made.

    +
  • +
  • +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
  • +
  • +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
  • +
  • +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
  • +
  • +

    iTip: fix broken table cells

    +
  • +
  • +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
  • +
  • +

    Added Caldav scheduling section

    +
  • +
+
+
V01: 2013-08-07 MD
+
+
    +
  • +

    Removed method CONFIRM

    +
  • +
  • +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
  • +
  • +

    Added POLL-WINNER and verbiage

    +
  • +
  • +

    Added STATUS values

    +
  • +
  • +

    Added RELTYPE=POLL

    +
  • +
  • +

    Added supported-vpoll-component-sets

    +
  • +
  • +

    Added CalDAV related parameters to VOTER

    +
  • +
  • +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
  • +
+
+
Initial version: 2012-11-02 MD
+
+
+
Normative references 2020-07-16 HTTP Extensions for Distributed Authoring — WEBDAV https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2518.xml https://www.rfc-editor.org/info/rfc2518 RFC 2518 RFC2518 10.17487/RFC2518 1999-02 Y. Goland Internet Engineering Task Force IETF E. Whitehead Internet Engineering Task Force IETF A. Faizi Internet Engineering Task Force IETF S. Carter Internet Engineering Task Force IETF D. Jensen Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document specifies a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, namespace manipulation, and resource locking (collision avoidance). [STANDARDS-TRACK] RFC 2518 Fremont, CA 2020-07-16 Uniform Resource Identifier (URI): Generic Syntax https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml https://www.rfc-editor.org/info/rfc3986 RFC 3986 RFC3986 10.17487/RFC3986 2005-01 T. Berners-Lee Internet Engineering Task Force IETF R. Fielding Internet Engineering Task Force IETF L. Masinter Internet Engineering Task Force IETF Internet Engineering Task Force IETF en A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK] STD 66 RFC 3986 Fremont, CA 2020-07-16 Calendaring Extensions to WebDAV (CalDAV) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4791.xml https://www.rfc-editor.org/info/rfc4791 RFC 4791 RFC4791 10.17487/RFC4791 2007-03 C. Daboo Internet Engineering Task Force IETF B. Desruisseaux Internet Engineering Task Force IETF L. Dusseault Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing calendaring and scheduling information based on the iCalendar format. This document defines the "calendar-access" feature of CalDAV. [STANDARDS-TRACK] RFC 4791 Fremont, CA 2020-07-16 Internet Calendaring and Scheduling Core Object Specification (iCalendar) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5545.xml https://www.rfc-editor.org/info/rfc5545 RFC 5545 RFC5545 10.17487/RFC5545 2009-09 B. Desruisseaux Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK] RFC 5545 Fremont, CA 2020-07-16 iCalendar Transport-Independent Interoperability Protocol (iTIP) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5546.xml https://www.rfc-editor.org/info/rfc5546 RFC 5546 RFC5546 10.17487/RFC5546 2009-12 C. Daboo Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document specifies a protocol that uses the iCalendar object specification to provide scheduling interoperability between different calendaring systems. This is done without reference to a specific transport protocol so as to allow multiple methods of communication between systems. Subsequent documents will define profiles of this protocol that use specific, interoperable methods of communication between systems.The iCalendar Transport-Independent Interoperability Protocol (iTIP) complements the iCalendar object specification by adding semantics for group scheduling methods commonly available in current calendaring systems. These scheduling methods permit two or more calendaring systems to perform transactions such as publishing, scheduling, rescheduling, responding to scheduling requests, negotiating changes, or canceling. [STANDARDS-TRACK] RFC 5546 Fremont, CA 2020-07-16 iCalendar Message-Based Interoperability Protocol (iMIP) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6047.xml https://www.rfc-editor.org/info/rfc6047 RFC 6047 RFC6047 10.17487/RFC6047 2010-12 A. Melnikov Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document, "iCalendar Message-Based Interoperability Protocol (iMIP)", specifies a binding from the iCalendar Transport-independent Interoperability Protocol (iTIP) to Internet email-based transports. Calendaring entries defined by the iCalendar Object Model (iCalendar) are wrapped using constructs from RFC 5322 and MIME (RFC 2045, RFC 2046, RFC 2047, and RFC 2049), and then transported over SMTP. [STANDARDS-TRACK] RFC 6047 Fremont, CA 2020-07-16 Scheduling Extensions to CalDAV https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6638.xml https://www.rfc-editor.org/info/rfc6638 RFC 6638 RFC6638 10.17487/RFC6638 2012-06 C. Daboo Internet Engineering Task Force IETF B. Desruisseaux Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines extensions to the Calendaring Extensions to WebDAV (CalDAV) "calendar-access" feature to specify a standard way of performing scheduling operations with iCalendar-based calendar components. This document defines the "calendar-auto-schedule" feature of CalDAV. [STANDARDS-TRACK] RFC 6638 Fremont, CA 2020-07-30 Event Publishing Extensions to iCalendar https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-calext-eventpub-extensions.xml http://www.ietf.org/internet-drafts/draft-ietf-calext-eventpub-extensions-15.txt http://www.ietf.org/internet-drafts/draft-ietf-calext-eventpub-extensions-15.pdf I-D.ietf-calext-eventpub-extensions I-D.ietf-calext-eventpub-extensions draft-ietf-calext-eventpub-extensions-15 2019-10 Michael Douglass Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This specification updates RFC5545 by introducing a number of new iCalendar properties and components which are of particular use for event publishers and in social networking. This specification also defines a new STRUCTURED-DATA property for iCalendar RFC5545 to allow for data that is directly pertinent to an event or task to be included with the calendar data. Internet-Draft draft-ietf-calext-eventpub-extensions-15 Fremont, CA +Bibliography + +
diff --git a/documents/draft-york-vpoll.html b/documents/draft-york-vpoll.html new file mode 100644 index 0000000..b0fb05b --- /dev/null +++ b/documents/draft-york-vpoll.html @@ -0,0 +1,9150 @@ + + + + + + +VPOLL: Consensus Scheduling Component for iCalendar + + + + + + + + + + + + + + + + + + + + + + + + +
Internet-DraftVPOLLJuly 2020
York, et al.Expires 31 January 2021[Page]
+
+
+
+
Workgroup:
+
Network Working Group
+
Internet-Draft:
+
draft-york-vpoll-05
+
:
+
+
Published:
+
+ +
+
Intended Status:
+
Standards Track
+
Expires:
+
+
Authors:
+
+
+
E. York
+
+
+
C. Daboo
+
+
+
M. Douglass
+
+
+
+
+

VPOLL: Consensus Scheduling Component for iCalendar

+
+
+

Abstract

+
+

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+
+
+
+
+
+

+Status of This Memo +

+

+ 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 https://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 31 January 2021.

+
+
+ +
+
+

+Table of Contents +

+ +
+
+
+
+

+1. Acknowledgements +

+
+

The authors would like to thank the members of the Calendaring and Scheduling Consortium (CalConnect) for contributing their ideas and support.

+
+
+
+
+
+

+2. Introduction +

+
+

The currently existing approach to agreeing on meeting times using +iTip [RFC5546] and/or iMip [RFC6047] has 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.

+
+
+
+
+
+

+3. Terms and definitions +

+
+

For the purposes of this document, + the following terms and definitions apply.

+
+
+
+

+3.1. consensus scheduling +

+
+

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+
+
+
+
+
+

+3.2. active Vpoll +

+
+

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+
+
+
+
+
+

+3.3. voter +

+
+

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+
+
+
+
+
+
+

+4. Simple Consensus Scheduling +

+
+

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+
+
+
+

+4.1. The VPOLL Component: An Overview +

+
+

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+
+
+
+
DTSTAMP
+
+
+

The usual [RFC5545] property.

+
+
+
+
SEQUENCE
+
+
+

The usual [RFC5545] property. See below for SEQUENCE +behavior.

+
+
+
+
UID
+
+
+

The usual [RFC5545] property.

+
+
+
+
ORGANIZER
+
+
+

The usual [RFC5545] property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+
+
+
+
SUMMARY
+
+
+

The usual [RFC5545] property. This optional but +recommended property provides the a short title to the poll.

+
+
+
+
DESCRIPTION
+
+
+

The usual [RFC5545] property. This optional property +provides more details.

+
+
+
+
DTEND
+
+
+

The usual [RFC5545] property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+
+
+
+
POLL-MODE
+
+
+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value "BASIC" +meaning one event will be chosen from the alternatives.

+
+
+
+
POLL-COMPLETION
+
+
+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is "SERVER-SUBMIT" which means the client chooses the winner +but the server will submit the winning choice.

+
+
+
+
POLL-PROPERTIES
+
+
+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value "DTSTART, LOCATION" meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+
+
+
+
PARTICIPANT
+
+
+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to "VOTER". The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+
+
+
+
VOTE
+
+
+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+
+
+
+
VEVENT
+
+
+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+
+
+
+
+
+

EXAMPLE

+
+
+

VPOLL with 3 voters and 3 alternative meetings:

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD:REQUEST
+BEGIN:VPOLL
+POLL-MODE:BASIC
+POLL-COMPLETION:SERVER-SUBMIT
+POLL-PROPERTIES:DTSTART,LOCATION
+ORGANIZER:mailto:mike@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T000000Z
+SUMMARY:What to do this week
+DTEND:20120101T000000Z
+BEGIN: PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:cyrus@example.com
+END PARTICIPANT
+BEGIN: PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:eric@example.com
+END PARTICIPANT
+BEGIN: PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:mike@example.com
+END PARTICIPANT
+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
+
+
Figure 1
+
+
+

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.

+
+
+
+
+
+

+4.2. The VPOLL Alternative Choices: An Overview +

+
+

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.

+
+
+
+
POLL-ITEM-ID
+
+
+

This provides a unique reference to the sub-component +within the VPOLL. It's value SHOULD be a small integer.

+
+
+
+
+
+
+
+
+
+

+4.3. VPOLL responses +

+
+

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 and components:

+
+
+
+
DTSTAMP
+
+
+

The usual [RFC5545] property.

+
+
+
+
SEQUENCE
+
+
+

The usual [RFC5545] property. See below for SEQUENCE +behavior.

+
+
+
+
UID
+
+
+

Same as the request.

+
+
+
+
ORGANIZER
+
+
+

Same as the request.

+
+
+
+
SUMMARY
+
+
+

Same as the request.

+
+
+
+
PARTICIPANT
+
+
+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+
+
+
+
VOTE
+
+
+

One per item being voted on.

+
+
+
+
POLL-ITEM-ID
+
+
+

One inside each VOTE component to identify the choice.

+
+
+
+
RESPONSE
+
+
+

One inside each VOTE component to specify the vote.

+
+
+
+
+
+
+

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.

+
+
+
+
NOTE
+
+
+

This is poll-mode specific behavior?

+
+
+
+
+
+
+

EXAMPLE

+
+
+

REPLY VPOLL from Cyrus:

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD: REPLY
+BEGIN:VPOLL
+ORGANIZER:mailto:mike@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T010000Z
+SUMMARY:What to do this week
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:cyrus@example.com
+BEGIN:VOTE
+POLL-ITEM-ID:1
+RESPONSE:50
+COMMENT:Work on iTIP
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:2
+RESPONSE:100
+COMMENT:Work on WebDAV
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:3
+RESPONSE:0
+END:VOTE
+END:PARTICIPANT
+END:VPOLL
+END:VCALENDAR
+
+
Figure 2
+
+
+
+
+
+

+4.4. VPOLL updates +

+
+

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+
+
+

EXAMPLE

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD: POLLSTATUS
+BEGIN:VPOLL
+ORGANIZER:mailto:mike@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T020000Z
+SEQUENCE:0
+SUMMARY:What to do this week
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:cyrus@example.com
+BEGIN: VOTE
+POLL-ITEM-ID:1
+RESPONSE:50
+COMMENT:Work on iTIP
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:2
+RESPONSE:100
+COMMENT:Work on WebDAV
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:3
+RESPONSE:0
+END:VOTE
+END:PARTICIPANT
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:eric@example.com
+BEGIN:VOTE
+POLL-ITEM-ID:1
+RESPONSE:100
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:2
+RESPONSE:100
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:3
+RESPONSE:0
+END:VOTE
+END:PARTICIPANT
+END:VPOLL
+END:VCALENDAR
+
+
Figure 3
+
+
+
+
+
+

+4.5. VPOLL Completion +

+
+

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +"SUBMITTED".

+
+
+

EXAMPLE

+
+
+

VPOLL confirmation:

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD: REQUEST
+BEGIN:VPOLL
+ORGANIZER:mailto:douglm@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T030000Z
+COMPLETED:20120101T030000Z
+POLL-COMPLETION:SERVER-SUBMIT
+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
+
+
Figure 4
+
+
+
+
+
+

+4.6. Other Responses +

+
+

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+
+
+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+
+
+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+
+
+
+
+
+
+
+

+5. iCalendar Extensions +

+
+
+

+5.1. Updated Participant Type Value +

+
+

Participant type property values are defined in section 11.2.1. of +[I-D.ietf-calext-eventpub-extensions]. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+
+
+
+
Format Definition
+
+
+

This property parameter is redefined by the following notation:

+
+
+
+
+
+
+
+
+
partvalue       /= "VOTER"
+
+
Figure 5
+
+
+
+
Description
+
+
+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+
+
+
+
+
+
+
+
+

+5.2. Updated Relation Type Value +

+
+

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.

+
+
+
+
Format Definition
+
+
+

This property parameter is redefined by the following notation:

+
+
+
+
+
+
+
+
+
reltypeparam       /= "RELTYPE" "=" "POLL"
+; Property value is a VPOLL uid
+
+
Figure 6
+
+
+
+
Description
+
+
+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+
+
+
+
+
+
+
+
+

+5.3. Updated Status Value +

+
+

Status property values are defined in section 3.8.1.11. of [RFC5545]. +This specification updates that type to define valid VPOLL status +values.

+
+
+
+
Format Definition
+
+
+

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
+          / "SUBMITTED"  ; The winning item has been
+                         ; submitted
+          / "CANCELLED"
+
+
Figure 7
+
+
+
+
Description
+
+
+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
+
+
+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+
+
+
Figure 8
+
+
+
+
+
+
+
+
+
+

+5.4. New Property Parameters +

+
+
+

+5.4.1. Required +

+
+
+
Parameter name
+
+
+

REQUIRED

+
+
+
+
Purpose
+
+
+

To specify whether the associated property is required in +the current context.

+
+
+
+
Format Definition
+
+
+

This parameter is defined by the following notation:

+
+
+
+
+
+
+
+
+
requirededparam = "REQUIRED"  "=" ("TRUE" / "FALSE")
+  ; Default is FALSE
+
+
Figure 9
+
+
+
+
Description
+
+
+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+
+
+
+
+
+
+
+
+

+5.4.2. Stay-Informed +

+
+
+
Parameter name
+
+
+

STAY-INFORMED

+
+
+
+
Purpose
+
+
+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+
+
+
+
Format Definition
+
+
+

This parameter is defined by the following notation:

+
+
+
+
+
+
+
+
+
stayinformedparam = "STAY-INFORMED"  "=" ("TRUE" / "FALSE")
+                  ; Default is FALSE
+
+
Figure 10
+
+
+
+
Description
+
+
+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+
+
+
+
+
+
+
+
+
+
+

+5.5. New Properties +

+
+
+

+5.5.1. Accept-Response +

+
+
+
Property name
+
+
+

ACCEPT-RESPONSE

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+
+
+
+
Property Parameters
+
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+
+
+

If this property is not present voters are only allowed to respond +to the choices in the request.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":"
+                    iana-token ("," iana-token) CRLF
+
+acceptresponseparams = *(";" other-param)
+
+
Figure 11
+
+
+
+
+
+

+5.5.2. Poll-Completion +

+
+
+
Property name
+
+
+

POLL-COMPLETION

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+
+
+
+
Description
+
+
+

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

+
+
+

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+
+
+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+
+
+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF
+
+pcparam = *(";" other-param)
+
+pcvalue = "SERVER"  ; The server is responsible for both choosing and
+                   ; submitting the winner(s)
+        / "SERVER-SUBMIT" ; The server is responsible for
+                   ; submitting the winner(s). The client chooses.
+        / "SERVER-CHOICE"  ; The server is responsible for
+                   ; choosing the winner(s). The client will submit.
+        / "CLIENT" ; The client is responsible for both choosing and
+                   ; submitting the winner(s)
+        / iana-token
+        / x-name
+        ;Default is CLIENT
+
+
Figure 12
+
+
+
+
Example
+
+
+

The following is an example of this property:

+
+
+
+
+
+
+
+
+
POLL-COMPLETION: SERVER-SUBMIT
+
+
Figure 13
+
+
+
+
+
+

+5.5.3. Poll-Item-Id +

+
+
+
Property name
+
+
+

POLL-ITEM-ID

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL child components as an +identifier.

+
+
+
+
Value type
+
+
+

INTEGER

+
+
+
+
Property Parameters
+
+
+

Non-standard parameters can be specified on +this property.

+
+
+
+
Conformance
+
+
+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+
+
+
+
Description
+
+
+

In a METHOD:REQUEST each choice 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.

+
+
+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollitemid = "POLL-ITEM-ID" pollitemdparams ":"
+                  integer CRLF
+
+pollitemidparams = *(
+                   (";" other-param)
+            )
+
+
Figure 14
+
+
+
+
+
+

+5.5.4. Poll-Mode +

+
+
+
Property name
+
+
+

POLL-MODE

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+
+
+
+
Property Parameters
+
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component or +its sub-components.

+
+
+
+
Description
+
+
+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+
+
+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollmode = "POLL-MODE" pollmodeparams ":"
+             ("BASIC" / iana-token / other-token) CRLF
+
+pollmodeparams = *(";" other-param)
+
+
Figure 15
+
+
+
+
+
+

+5.5.5. Poll-properties +

+
+
+
Property name
+
+
+

POLL-PROPERTIES

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+
+
+
+
Property Parameters
+
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollproperties = "POLL-PROPERTIES" pollpropparams ":"
+             text *("," text) CRLF
+
+pollpropparams = *(";" other-param)
+
+
Figure 16
+
+
+
+
+
+

+5.5.6. Poll-Winner +

+
+
+
Property name
+
+
+

POLL-WINNER

+
+
+
+
Purpose
+
+
+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+
+
+
+
Value type
+
+
+

INTEGER

+
+
+
+
Property Parameters
+
+
+

Non-standard parameters can be specified on +this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+
+
+
+
Format Definition
+
+
+

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
+
+
Figure 17
+
+
+
+
+
+

+5.5.7. Reply-URL +

+
+
+
Property name
+
+
+

REPLY-URL

+
+
+
+
Purpose
+
+
+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+
+
+
+
Property Parameters
+
+
+

Non-standard, required or iana parameters can +be specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF
+
+reply-urlparams = *(
+                  (";" requiredparam) /
+                  (";" other-param)
+                  )
+
+
Figure 18
+
+
+
+
+
+

+5.5.8. Response +

+
+
+
Property name
+
+
+

RESPONSE

+
+
+
+
Purpose
+
+
+

To specify a response vote.

+
+
+
+
Value type
+
+
+

INTEGER

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
response = "RESPONSE" response-params ":" integer CRLF
+                 ; integer value 0..100
+
+responseparams = *(";" other-param)
+
+
Figure 19
+
+
+
+
Description
+
+
+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
+
    +
  • +
    +

    0 - 39 A "NO vote"

    +
    +
  • +
  • +
    +

    40 - 79 A "MAYBE" vote

    +
    +
  • +
  • +
    +

    80 - 89 A "YES - but not preferred vote"

    +
    +
  • +
  • +
    +

    90-100 A "YES" vote.

    +
    +
    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
    +
  • +
+
+
+
+
+
+
+
+
+
+
+

+5.6. New Components +

+
+
+

+5.6.1. VPOLL Component +

+
+
+
Component name
+
+
+

VPOLL

+
+
+
+
Purpose
+
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollc    = "BEGIN" ":" "VPOLL" CRLF
+            pollprop
+            *participantc *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 / 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 /
+          ;
+          )
+
+
Figure 20
+
+
+
+
Description
+
+
+

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

+
+
+

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting - both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+
+
+

If specified, the "DTSTART" property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+
+
+

If "DTSTART" is present "DURATION" MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+
+
+

"DTEND" MAY be specified with or without "DTSTART" and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+
+
+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+
+
+
+
+
+
+
+
+
+

+5.6.2. VOTE Component +

+
+
+
Component name
+
+
+

VOTE

+
+
+
+
Purpose
+
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
+
+
Conformance
+
+
+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
votec     = "BEGIN" ":" "VOTE" CRLF
+            voteprop
+            *eventc *todoc *journalc *freebusyc
+            *availabilityc *alarmc *iana-comp *x-comp
+            "END" ":" "VOTE" CRLF
+
+voteprop = *(
+           ;
+           ; The following are REQUIRED,
+           ; but MUST NOT occur more than once.
+           ;
+           pollitemid / response /
+           ;
+           ; The following are OPTIONAL,
+           ; and MAY occur more than once.
+           ;
+           comment / x-prop / iana-prop
+           ;
+           )
+
+
Figure 21
+
+
+
+
Description
+
+
+

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

+
+
+

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+
+
+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+
+
+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER - such as the respondees +availability.

+
+
+
+
+
+
+
+
+
+
+
+
+
+

+6. Poll Modes +

+
+

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+
+
+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see Section 10.3) in a published RFC.

+
+
+
+

+6.1. POLL-MODE:BASIC +

+
+

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.

+
+
+
+

+6.1.1. Property restrictions +

+
+

This poll mode has the following property requirements:

+
+
+
+
POLL-ITEM-ID
+
+
+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+
+
+
+
POLL-WINNER
+
+
+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+
+
+
+
+
+
+
+
+

+6.1.2. Outcome reporting +

+
+

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+
+
+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+
+
+
+
+
+
+
+
+
+

+7. iTIP Extensions +

+
+

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.

+
+
+
+

+7.1. Methods +

+
+

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1
MethodDescription
+
+

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 PARTICIPANTS.

+
+
+
+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+
+
+ + + + + + + + + + + + + + + + + + +
Table 2
OriginatorMethods
+
+

Organizer

+
+
+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+
+
+

Voter

+
+
+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+
+
+
+
+
+
+

+7.2. Interoperability Models +

+
+

Most of the standard iTip specification applies with respect to +organizer and voters.

+
+
+
+

+7.2.1. Delegation +

+
+

TBD

+
+
+
+ +
+
+

+7.2.3. Component Revisions +

+
    +
  • +
    +

    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

    +
    +
  • +
+
+
+
+
+

+7.2.4. Message Sequencing +

+
+

TBD

+
+
+
+
+
+
+
+

+7.3. Application Protocol Elements +

+
+
+

+7.3.1. Methods for VPOLL Calendar Components +

+
+

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.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3
Presence ValueDescription
+
+

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.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4
MethodDescription
+
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+
+
+

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 PARTICIPANT.

+
+
+
+
+
+
+
+

+7.3.2. Method: PUBLISH +

+
+

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.

+
+
+
+
Note
+
+
+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+
+
+
+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 5: +Constraints for a METHOD:PUBLISH of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST equal PUBLISH.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

DTSTAMP

+
+
+
+

1

+
+
+
+

DTSTART

+
+
+
+

0 or 1

+
+
+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+
+
+

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+

+
+
+
+

PARTICIPANT

+
+
+
+

0+

+
+
+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to "VOTER" - that is, no voters

+
+
+
+

REQUEST-STATUS

+
+
+
+

0

+
+
+
+

VALARM

+
+
+
+

0+

+
+
+
+

VEVENT

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VFREEBUSY

+
+
+
+

0

+
+
+
+

VJOURNAL

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VTODO

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VTIMEZONE

+
+
+
+

0+

+
+
+
+

MUST be present if any date/time refers to a timezone.

+
+
+
+

IANA-COMPONENT

+
+
+
+

0+

+
+
+
+

X-COMPONENT

+
+
+
+

0+

+
+
+
+
+
+
+
+

+7.3.3. Method: REQUEST +

+
+

The "REQUEST" method in a "VPOLL" component provides the following +scheduling functions:

+
+
    +
  • +
    +

    Invite "Voters" to respond to the poll.

    +
    +
  • +
  • +
    +

    Change the items being voted upon.

    +
    +
  • +
  • +
    +

    Complete or confirm the poll.

    +
    +
  • +
  • +
    +

    Response to a "REFRESH" request.

    +
    +
  • +
  • +
    +

    Update the details of an existing vpoll.

    +
    +
  • +
  • +
    +

    Update the status of "Voters".

    +
    +
  • +
  • +
    +

    Forward a "VPOLL" to another uninvited CU.

    +
    +
  • +
  • +
    +

    For an existing "VPOLL" calendar component, delegate the role of +"Voter" to another CU.

    +
    +
  • +
  • +
    +

    For an existing "VPOLL" calendar component, change the role of +"Organizer" to another CU.

    +
    +
  • +
+
+

The "Organizer" originates the "REQUEST". The recipients of the +"REQUEST" method are the CUs voting in the poll, the "Voters". +"Voters" use the "REPLY" method to convey votes to 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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 6: +Constraints for a METHOD:REQUEST of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be REQUEST.

+
+
+
+

VPOLL

+
+
+
+

1

+
+
+
+

PARTICIPANT

+
+
+
+

1+

+
+
+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+
+
+

DTSTAMP

+
+
+
+

1

+
+
+
+

DTSTART

+
+
+
+

0 or 1

+
+
+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+
+
+

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.

+
+
+
+

VFREEBUSY

+
+
+
+

0

+
+
+
+

VJOURNAL

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VTODO

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+
+
+
+7.3.3.1. Rescheduling a poll +
+
+

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.

+
+
+
+
+
+
+7.3.3.2. Updating or Reconfirmation of a 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 a "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.

+
+
+
+
+
+
+7.3.3.3. Confirmation of a 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.

+
+
+
+
+
+
+7.3.3.4. Closing a Poll +
+
+

The "REQUEST" method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+
+
+
+
+
+7.3.3.5. Delegating a Poll to Another CU +
+
+

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".

+
+
+
+
+
+
+7.3.3.6. Changing 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".

+
+
+
+
+
+
+7.3.3.7. Sending on Behalf of the 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".

+
+
+
+
+
+
+7.3.3.8. Forwarding to an Uninvited CU +
+
+

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 a "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.

+
+
+
+
+
+
+7.3.3.9. Updating Voter Status +
+
+

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 "RSVP=TRUE" property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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".

+
+
+
+
+
+
+
+

+7.3.4. Method: REPLY +

+
+

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" "CALENDAR-ADDRESS" +property. The "Delegate" SHOULD include the calendar address of the +"Delegator" on the "DELEGATED-FROM" property parameter of the +"Delegate's" "CALENDAR-ADDRESS" 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".

+
+
+

A "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. (But see comments on VFREEBUSY and VAVAILABILITY)

+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 7: +Constraints for a METHOD:REPLY of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be REPLY.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

All components MUST have the same

+
+
+
+

UID.

+
+
+
+

PARTICIPANT

+
+
+
+

1

+
+
+
+

Identifies 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 or 1

+
+
+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+
+
+

VAVAILABILITY

+
+
+
+

0

+
+
+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+
+
+

VJOURNAL

+
+
+
+

0

+
+
+
+

VTODO

+
+
+
+

0

+
+
+
+
+
+
+
+

+7.3.5. Method: CANCEL +

+
+

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 7.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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 8: +Constraints for a METHOD:CANCEL of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be CANCEL.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

All must have the same UID.

+
+
+
+

PARTICIPANT

+
+
+
+

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

+
+
+
+

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

+
+
+
+
+
+
+
+

+7.3.6. Method: REFRESH +

+
+

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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 9: +Constraints for a METHOD:REFRESH of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be REFRESH.

+
+
+
+

VPOLL

+
+
+
+

1

+
+
+
+

PARTICIPANT

+
+
+
+

1

+
+
+
+

MUST identify the requester as a voter.

+
+
+
+

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

+
+
+
+
+
+
+
+

+7.3.7. Method: POLLSTATUS +

+
+

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. All "Voters" MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 10: +Constraints for a METHOD:POLLSTATUS of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST equal POLLSTATUS.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

PARTICIPANT

+
+
+
+

1+

+
+
+
+

The voters containing their current vote

+
+
+
+

COMPLETED

+
+
+
+

0 or 1

+
+
+
+

Only present for a completed poll

+
+
+
+

DTSTAMP

+
+
+
+

1

+
+
+
+

DTSTART

+
+
+
+

0 or 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

+
+
+
+

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 SHOULD NOT be present.

+
+
+
+

VFREEBUSY

+
+
+
+

0

+
+
+
+

VJOURNAL

+
+
+
+

0

+
+
+
+

All candidate components SHOULD NOT be present.

+
+
+
+

VTODO

+
+
+
+

0

+
+
+
+

All candidate components SHOULD NOT be present.

+
+
+
+

VTIMEZONE

+
+
+
+

0+

+
+
+
+

MUST be present if any date/time refers to a timezone.

+
+
+
+

IANA-COMPONENT

+
+
+
+

0+

+
+
+
+

X-COMPONENT

+
+
+
+

0+

+
+
+
+
+
+
+
+
+
+
+
+

+8. CalDAV Extensions +

+
+

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.

+
+
+

Additionally, it extends [RFC6638] as it a VPOLL component is a +schedulable entity.

+
+
+
+

+8.1. Calendar Collection Properties +

+
+

This section defines new CalDAV properties for calendar collections.

+
+
+
+

+8.1.1. CALDAV:supported-vpoll-component-sets +

+
+
+
Name
+
+
+

supported-vpoll-component-sets

+
+
+
+
Namespace
+
+
+

urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

+
+
+

It also specifies the combination of allowed component types.

+
+
+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition Section 8.2 being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
<!ELEMENT supported-vpoll-component-sets
+     (supported-vpoll-component-set*) >
+
+<!ELEMENT supported-vpoll-component-set (comp+)>
+
+
Figure 22
+
+
+
+
+
<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>
+
+
Figure 23
+
+
+
+
+
+

+8.1.2. CALDAV:vpoll-max-items +

+
+
+
Name
+
+
+

vpoll-max-items

+
+
+
+
Namespace
+
+
+

urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition +Section 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
<!ELEMENT vpoll-max-items (#PCDATA)>
+PCDATA value: a numeric value (integer greater than zero)
+
+
Figure 24
+
+
+
+
+
<C:vpoll-max-items xmlns:C="urn:ietf:params:xml:ns:caldav"
+>25</C:vpoll-max-items>
+
+
Figure 25
+
+
+
+
+
+

+8.1.3. CALDAV:vpoll-max-active +

+
+
+
Name
+
+
+

vpoll-max-active

+
+
+
+
Namespace
+
+
+

urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition +Section 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
<!ELEMENT vpoll-max-active (#PCDATA)>
+PCDATA value: a numeric value (integer greater than zero)
+
+
Figure 26
+
+
+
+
+
<C:vpoll-max-active xmlns:C="urn:ietf:params:xml:ns:caldav"
+>25</C:vpoll-max-active>
+
+
Figure 27
+
+
+
+
+
+

+8.1.4. CALDAV:vpoll-max-voters +

+
+
+
Name
+
+
+

+vpoll-max-voters

+
+
+
+
Namespace
+
+
+

+urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition Section 8.2 +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
<!ELEMENT vpoll-max-voters (#PCDATA)>
+PCDATA value: a numeric value (integer greater than zero)
+
+
Figure 28
+
+
+
+
+
<C:vpoll-max-voters xmlns:C="urn:ietf:params:xml:ns:caldav"
+>25</C:vpoll-max-voters>
+
+
Figure 29
+
+
+
+ +
+
+

+8.1.6. Extensions to CalDAV scheduling +

+
+

This specification extends [RFC6638].

+
+
+

Each section of Appendix A "Scheduling Privileges Summary" is +extended to include VPOLL.

+
+
+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+
+
+
+
+
+
+
+

+8.2. Additional Preconditions for PUT, COPY, and MOVE +

+
+

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:

+
+
+
+
(CALDAV:supported-vpoll-component-sets)
+
+
+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+
+
+
+
(CALDAV:vpoll-max-items)
+
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value Section 8.1.2 +on the calendar collection where the resource will be stored;

+
+
+
+
(CALDAV:vpoll-max-active)
+
+
+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value +Section 8.1.3 on the calendar collection where the resource will +be stored;

+
+
+
+
(CALDAV:vpoll-max-voters)
+
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value Section 8.1.4 on the +calendar collection where the resource will be stored;

+
+
+
+
+
+
+
+
+
+

+8.3. CalDAV:calendar-query Report +

+
+

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.

+
+
+
+

+8.3.1. Example: Partial Retrieval of VPOLL +

+
+

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.

+
+
+
+
+
>> 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:VPOLL
+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>
+
+
Figure 30
+
+
+
+
+
+
+
+

+8.4. CalDAV time ranges +

+
+

"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

+
+
+

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.

+
+
+
+
+
+-------------------------------------------------------------------+
+| 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                                          |
++---+---+---+---+---+-----------------------------------------------+
+
+
Figure 31
+
+
+
+
+
+
+
+

+9. Security Considerations +

+
+

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.

+
+
+
+
+
+

+10. IANA Considerations +

+
+
+

+10.1. Parameter Registrations +

+
+

This document defines the following new iCalendar property parameters +to be added to the registry defined in [RFC5545]:

+
+
+ + + + + + + + + + + + + + + + + + + + + +
Table 11
Property ParameterStatusReference
+
+

REQUIRED

+
+
+
+

Current

+
+
+ +
+
+

STAY-INFORMED

+
+
+
+

Current

+
+
+ +
+
+
+
+
+
+

+10.2. Property Registrations +

+
+

This document defines the following new iCalendar properties to be +added to the registry defined in [RFC5545]:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 12
PropertyStatusReference
+
+

ACCEPT-RESPONSE

+
+
+
+

Current

+
+
+ +
+
+

POLL-ITEM-ID

+
+
+
+

Current

+
+
+ +
+
+

POLL-MODE

+
+
+
+

Current

+
+
+ +
+
+

POLL-PROPERTIES

+
+
+
+

Current

+
+
+ +
+
+

POLL-WINNER

+
+
+
+

Current

+
+
+ +
+
+

RESPONSE

+
+
+
+

Current

+
+
+ +
+
+
+
+
+
+

+10.3. POLL-MODE Registration Template +

+
+

A poll mode is defined by completing the following template.

+
+
+
+
Poll mode name
+
+
+

The name of the poll mode.

+
+
+
+
Purpose
+
+
+

The purpose of the poll mode. Give a short but clear +description.

+
+
+
+
Reference
+
+
+

A reference to the RFC in which the poll mode is defined

+
+
+
+
+
+
+
+
+
+

+10.4. POLL-MODE Registrations +

+
+

This document defines the following registered poll modes.

+
+
+ + + + + + + + + + + + + + + + +
Table 13
Poll mode namePurposeReference
+
+

BASIC

+
+
+
+

To provide simple voting for a single outcome from a number of candidates.

+
+
+
+

Current

+
+
+
+
+
+
+
+
+
+

+11. Normative references +

+
+
[RFC2518]
+
+Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. Jensen, "HTTP Extensions for Distributed Authoring - WEBDAV", IETF RFC 2518, IETF RFC 2518, DOI 10.17487/RFC2518, , <https://www.rfc-editor.org/info/rfc2518>.
+
+
[RFC3986]
+
+Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", IETF RFC 3986, IETF RFC 3986, DOI 10.17487/RFC3986, , <https://www.rfc-editor.org/info/rfc3986>.
+
+
[RFC4791]
+
+Daboo, C., Desruisseaux, B., and L. Dusseault, "Calendaring Extensions to WebDAV (CalDAV)", IETF RFC 4791, IETF RFC 4791, DOI 10.17487/RFC4791, , <https://www.rfc-editor.org/info/rfc4791>.
+
+
[RFC5545]
+
+Desruisseaux, B., Ed., "Internet Calendaring and Scheduling Core Object Specification (iCalendar)", IETF RFC 5545, IETF RFC 5545, DOI 10.17487/RFC5545, , <https://www.rfc-editor.org/info/rfc5545>.
+
+
[RFC5546]
+
+Daboo, C., Ed., "iCalendar Transport-Independent Interoperability Protocol (iTIP)", IETF RFC 5546, IETF RFC 5546, DOI 10.17487/RFC5546, , <https://www.rfc-editor.org/info/rfc5546>.
+
+
[RFC6047]
+
+Melnikov, A., Ed., "iCalendar Message-Based Interoperability Protocol (iMIP)", IETF RFC 6047, IETF RFC 6047, DOI 10.17487/RFC6047, , <https://www.rfc-editor.org/info/rfc6047>.
+
+
[RFC6638]
+
+Daboo, C. and B. Desruisseaux, "Scheduling Extensions to CalDAV", IETF RFC 6638, IETF RFC 6638, DOI 10.17487/RFC6638, , <https://www.rfc-editor.org/info/rfc6638>.
+
+
[I-D.ietf-calext-eventpub-extensions]
+
+Douglass, M., "Event Publishing Extensions to iCalendar", IETF I-D.ietf-calext-eventpub-extensions, IETF I-D.ietf-calext-eventpub-extensions, .
+
+
+
+
+
+
+

+12. Bibliography +

+
+
+
+
+

+Appendix A. Open issues +

+
+

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+
+
+

Notifications: Need to do a section on what Notifications to + support. + A. VPOLL is about to end and you haven't voted on it yet. + Instead reuse VALARMS to notify the user?

+
+
+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No - voter + has indicated now unable to attend - want to revote

+
+
+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+
+
+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+
+
+

Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event.

+
+
+

Need to write down what isn't valid in a VPOLL + a. Can't change POLL-MODE

+
+
+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+
+
+

? - some iTip notes On confirm - send itip if appropriate (PUBLISH) + - all non-participating - shared - feeds + Organizer can specify where result is? + Confirm can specify that itip is sent - ITIP / NONE - parameter ? + on POLL-WINNER

+
+
+

Need to add example of freebusy in response

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest
+METHOD: REPLY
+BEGIN:VPOLL
+ORGANIZER:mailto:douglm@mysite.edu
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:eric@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T010000Z
+SEQUENCE:0
+SUMMARY:What to do this week
+BEGIN:VFREEBUSY
+.......
+END:VFREEBUSY
+END:PARTICIPANT
+END:VPOLL
+END:VCALENDAR
+
+
Figure 32
+
+
+
+
+
+

+Appendix B. Change log +

+
+
+
Calext V01: 2019-10-17 MD
+
+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+
+
+
Calext V00: 2019-05-17 MD
+
+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+
+
+
V03: 2014-10-28 MD
+
+
    +
  • +
    +

    Add VVOTER and VOTE components.

    +
    +
  • +
  • +
    +

    Add RESPONSE property.

    +
    +
  • +
  • +
    +

    Remove RESPONSE parameter from VOTER.

    +
    +
  • +
+
+
+
V03: 2014-05-12 MD
+
+
    +
  • +
    +

    Add reply-url property and required parameter.

    +
    +
  • +
  • +
    +

    Fix ACCEPT-RESPONSE definition.

    +
    +
  • +
+
+
+
V02: 2014-05-12 MD
+
+
    +
  • +
    +

    Typos fixed, clarifications made.

    +
    +
  • +
  • +
    +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
    +
  • +
  • +
    +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
    +
  • +
  • +
    +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
    +
  • +
  • +
    +

    iTip: fix broken table cells

    +
    +
  • +
  • +
    +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
    +
  • +
  • +
    +

    Added Caldav scheduling section

    +
    +
  • +
+
+
+
V01: 2013-08-07 MD
+
+
    +
  • +
    +

    Removed method CONFIRM

    +
    +
  • +
  • +
    +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
    +
  • +
  • +
    +

    Added POLL-WINNER and verbiage

    +
    +
  • +
  • +
    +

    Added STATUS values

    +
    +
  • +
  • +
    +

    Added RELTYPE=POLL

    +
    +
  • +
  • +
    +

    Added supported-vpoll-component-sets

    +
    +
  • +
  • +
    +

    Added CalDAV related parameters to VOTER

    +
    +
  • +
  • +
    +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
    +
  • +
+
+
+
Initial version: 2012-11-02 MD
+
+
+
+
+
+
+
+
+

+Authors' Addresses +

+
+
Eric York
+ +
+
+
Cyrus Daboo
+ +
+
+
Michael Douglass
+ +
+
+
+ + + diff --git a/documents/draft-york-vpoll.rfc.xml b/documents/draft-york-vpoll.rfc.xml new file mode 100644 index 0000000..059498e --- /dev/null +++ b/documents/draft-york-vpoll.rfc.xml @@ -0,0 +1,3140 @@ + + + + + + + + + + VPOLL: Consensus Scheduling Component for iCalendar + + + +
+ + eyork@apple.com + +
+
+ +
+ + cyrus@daboo.name + +
+
+ +
+ + mikeadouglass@gmail.com + +
+
+ Internet + + +This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives. + +
+ +
+ Acknowledgements + The authors would like to thank the members of the Calendaring and Scheduling Consortium (CalConnect) for contributing their ideas and support. +
+
+ Introduction + The currently existing approach to agreeing on meeting times using +iTip and/or iMip has 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. +
+
+ Terms and definitions + For the purposes of this document, + the following terms and definitions apply. +
+consensus scheduling +The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task. +
+
+active Vpoll +A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period +
+
+voter +A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented. +
+
+
+ Simple Consensus Scheduling + 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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives. +
The VPOLL Component: An OverviewThe VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate: +
DTSTAMP
+The usual property. +
SEQUENCE
+The usual property. See below for SEQUENCE +behavior. +
UID
+The usual property. +
ORGANIZER
+The usual property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same. +
SUMMARY
+The usual property. This optional but +recommended property provides the a short title to the poll. +
DESCRIPTION
+The usual property. This optional property +provides more details. +
DTEND
+The usual property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active. +
POLL-MODE
+A new property which defines how the votes are used to +obtain a result. For our use case it will take the value "BASIC" +meaning one event will be chosen from the alternatives. +
POLL-COMPLETION
+A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is "SERVER-SUBMIT" which means the client chooses the winner +but the server will submit the winning choice. +
POLL-PROPERTIES
+A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value "DTSTART, LOCATION" meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process. +
PARTICIPANT
+There is one of these components for each voter with +the PARTICIPANT-TYPE set to "VOTER". The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on. +
VOTE
+A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration. +
VEVENT
+In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting. +
+EXAMPLEVPOLL 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.
+
The VPOLL Alternative Choices: An OverviewWithin the VPOLL component we have the alternatives to vote on. In +many respects these are standard components. For our +simple use case they are all VEVENT components. In addition to the +usual properties some extra properties are used for a +VPOLL. +
POLL-ITEM-ID
+This provides a unique reference to the sub-component +within the VPOLL. It's value SHOULD be a small integer. +
+
VPOLL responsesUpon 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 and components: +
DTSTAMP
+The usual property. +
SEQUENCE
+The usual property. See below for SEQUENCE +behavior. +
UID
+Same as the request. +
ORGANIZER
+Same as the request. +
SUMMARY
+Same as the request. +
PARTICIPANT
+One only with a CALENDAR-ADDRESS identifying the voter replying. +
VOTE
+One per item being voted on. +
POLL-ITEM-ID
+One inside each VOTE component to identify the choice. +
RESPONSE
+One inside each VOTE component to specify the vote. +
+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. +
NOTE
+This is poll-mode specific behavior? +
+EXAMPLEREPLY VPOLL from Cyrus:
+
VPOLL updatesWhen 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 one or more PARTICIPANT components each populated with zero or more VOTE components. +EXAMPLE
+
VPOLL CompletionAfter 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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +"SUBMITTED". +EXAMPLEVPOLL confirmation:
+
Other ResponsesA voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care. +An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices. +This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.
+
+
+ iCalendar Extensions +
Updated Participant Type ValueParticipant type property values are defined in section 11.2.1. of +. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes. +
Format Definition
+This property parameter is redefined by the following notation: +
+
+ +
Description
+The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL. +
+
Updated Relation Type ValueRelationship parameter type values are defined in section 3.2.15. of +. 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. +
Format Definition
+This property parameter is redefined by the following notation: +
+
+ +
Description
+This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component. +
+
Updated Status ValueStatus property values are defined in section 3.8.1.11. of . +This specification updates that type to define valid VPOLL status +values. +
Format Definition
+This property parameter is redefined by the following notation: +
+
+ +
Description
+These values allow clients and servers to handle the +choosing and submission of winning choices. +
+ +
+
+
New Property Parameters
Required
Parameter name
+REQUIRED +
Purpose
+To specify whether the associated property is required in +the current context. +
Format Definition
+This parameter is defined by the following notation: +
+
+ +
Description
+This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies. +
+
Stay-Informed
Parameter name
+STAY-INFORMED +
Purpose
+To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed. +
Format Definition
+This parameter is defined by the following notation: +
+
+ +
Description
+This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant. +
+
New Properties
Accept-Response
Property name
+ACCEPT-RESPONSE +
Purpose
+This property is used in VPOLL to indicate the types of +component that may be supplied in a response. +
Property Parameters
+Non-standard or iana parameters can be +specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives. +If this property is not present voters are only allowed to respond +to the choices in the request. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-Completion
Property name
+POLL-COMPLETION +
Purpose
+This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s). +
Description
When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action. +Server initiated submission requires that the submitted choice +MUST be a valid calendaring component. +POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.
Format Definition
+This property is defined by the following notation: +
+
+ +
Example
+The following is an example of this property: +
+
+
+
Poll-Item-Id
Property name
+POLL-ITEM-ID +
Purpose
+This property is used in VPOLL child components as an +identifier. +
Value type
+INTEGER +
Property Parameters
+Non-standard parameters can be specified on +this property. +
Conformance
+This property MUST be specified in a VOTE component and +in VPOLL choice items. +
Description
+In a METHOD:REQUEST each choice 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. +POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-Mode
Property name
+POLL-MODE +
Purpose
+This property is used in VPOLL to indicate what voting mode +is to be applied. +
Property Parameters
+Non-standard or iana parameters can be +specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component or +its sub-components. +
Description
+The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID. +Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-properties
Property name
+POLL-PROPERTIES +
Purpose
+This property is used in VPOLL to define which icalendar +properties are being voted on. +
Property Parameters
+Non-standard or iana parameters can be +specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-Winner
Property name
+POLL-WINNER +
Purpose
+This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won. +
Value type
+INTEGER +
Property Parameters
+Non-standard parameters can be specified on +this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Reply-URL
Property name
+REPLY-URL +
Purpose
+This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service. +
Property Parameters
+Non-standard, required or iana parameters can +be specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Response
Property name
+RESPONSE +
Purpose
+To specify a response vote. +
Value type
+INTEGER +
Format Definition
+This property is defined by the following notation: +
+
+ +
Description
+This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention: +
    +
  • +0 - 39 A "NO vote" +
  • +
  • +40 - 79 A "MAYBE" vote +
  • +
  • +80 - 89 A "YES - but not preferred vote" +
  • +
  • +90-100 A "YES" vote. +Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe). +
  • +
+
+
New Components
VPOLL Component
Component name
+VPOLL +
Purpose
+This component provides a mechanism by which voters can +vote on provided choices. +
Format Definition
+This property is defined by the following notation: +
+
+ +
Description
This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting - both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components. +If specified, the "DTSTART" property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created. +If "DTSTART" is present "DURATION" MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration. +"DTEND" MAY be specified with or without "DTSTART" and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property. +If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.
+
VOTE Component
Component name
+VOTE +
Purpose
+This component provides a mechanism by which voters can +vote on provided choices. +
Conformance
+This component may be specified zero or more times in a PARTICIPANT component which identifies the voter. +
Format Definition
+This property is defined by the following notation: +
+
+ +
Description
This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.The required and optional properties and their meanings will depend +upon the POLL-MODE in effect. +For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice. +If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER - such as the respondees +availability.
+
+
+ Poll Modes + The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property. + New poll modes can be registered by including a completed POLL-MODE +Registration Template (see ) in a published RFC. +
POLL-MODE:BASICBASIC 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. +
Property restrictionsThis poll mode has the following property requirements: +
POLL-ITEM-ID
+Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll. +
POLL-WINNER
+On confirmation of the poll this property MUST be +present and identifies the winning component. +
+
Outcome reportingTo confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED. +When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.
+
+
+ iTIP Extensions + This specification introduces a number of extensions to . +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. +
MethodsThere are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined. +
MethodDescription
+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 PARTICIPANTS. +
+The following table shows the above methods broken down by who can +send them with VPOLL components. +
OriginatorMethods
+Organizer + +CANCEL, PUBLISH, REQUEST, POLLSTATUS +
+Voter + +REPLY, REFRESH, REQUEST (only when delegating) +
+
Interoperability ModelsMost of the standard iTip specification applies with respect to +organizer and voters. +
Delegation + +TBD +
+
Acting on Behalf of Other Calendar Users + +TBD +
+
Component Revisions + +
    +
  • +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 +
  • +
+
+
Message Sequencing + +TBD +
+
Application Protocol Elements
Methods for VPOLL Calendar ComponentsThis 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 ValueDescription
+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. +
MethodDescription
+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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach. +
+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 PARTICIPANT. +
+
Method: PUBLISHThe "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. +
Note
+Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification. +
+This method type is an iCalendar object that conforms to the +following property constraints: +Constraints for a METHOD:PUBLISH of a VPOLL
Component/PropertyPresenceComment
+METHOD + +1 + +MUST equal PUBLISH. +
+VPOLL + +1+ +
+DTSTAMP + +1 +
+DTSTART + +0 or 1 + +If present defines the start of the poll. Otherwise the poll starts when it is created and distributed. +
+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+ +
+PARTICIPANT + +0+ + +Only PARTICIPANT components with PARTICIPANT-TYPE not equal to "VOTER" - that is, no voters +
+REQUEST-STATUS + +0 +
+VALARM + +0+ +
+VEVENT + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VFREEBUSY + +0 +
+VJOURNAL + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VTODO + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VTIMEZONE + +0+ + +MUST be present if any date/time refers to a timezone. +
+IANA-COMPONENT + +0+ +
+X-COMPONENT + +0+ +
+
Method: REQUESTThe "REQUEST" method in a "VPOLL" component provides the following +scheduling functions: +
    +
  • +Invite "Voters" to respond to the poll. +
  • +
  • +Change the items being voted upon. +
  • +
  • +Complete or confirm the poll. +
  • +
  • +Response to a "REFRESH" request. +
  • +
  • +Update the details of an existing vpoll. +
  • +
  • +Update the status of "Voters". +
  • +
  • +Forward a "VPOLL" to another uninvited CU. +
  • +
  • +For an existing "VPOLL" calendar component, delegate the role of +"Voter" to another CU. +
  • +
  • +For an existing "VPOLL" calendar component, change the role of +"Organizer" to another CU. +
  • +
+The "Organizer" originates the "REQUEST". The recipients of the +"REQUEST" method are the CUs voting in the poll, the "Voters". +"Voters" use the "REPLY" method to convey votes to 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/PropertyPresenceComment
+METHOD + +1 + +MUST be REQUEST. +
+VPOLL + +1 +
+PARTICIPANT + +1+ + +Identified as voters with the PARTICIPANT-TYPE=VOTER +
+DTSTAMP + +1 +
+DTSTART + +0 or 1 + +If present defines the start of the poll. Otherwise the poll starts when it is created and distributed. +
+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. +
+VFREEBUSY + +0 +
+VJOURNAL + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VTODO + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+
Rescheduling a poll + +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. +
+
Updating or Reconfirmation of a PollThe "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 a "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.
+
Confirmation of a 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. +
+
Closing a Poll + +The "REQUEST" method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED. +
+
Delegating a Poll to Another CUSome 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".
+
Changing 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". +
+
Sending on Behalf of the 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". +
+
Forwarding to an Uninvited CUA "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 a "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.
+
Updating Voter Status + +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 "RSVP=TRUE" property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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". +
+
Method: REPLYThe "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" "CALENDAR-ADDRESS" +property. The "Delegate" SHOULD include the calendar address of the +"Delegator" on the "DELEGATED-FROM" property parameter of the +"Delegate's" "CALENDAR-ADDRESS" 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". +A "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. (But see comments on VFREEBUSY and VAVAILABILITY) +This method type is an iCalendar object that conforms to the +following property constraints: +Constraints for a METHOD:REPLY of a VPOLL
Component/PropertyPresenceComment
+METHOD + +1 + +MUST be REPLY. +
+VPOLL + +1+ + +All components MUST have the same +
+UID. +
+PARTICIPANT + +1 + +Identifies 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 or 1 + +A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy. +
+VAVAILABILITY + +0 + +A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available. +
+VJOURNAL + +0 +
+VTODO + +0 +
+
Method: CANCELThe "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 . +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/PropertyPresenceComment
+METHOD + +1 + +MUST be CANCEL. +
+VPOLL + +1+ + +All must have the same UID. +
+PARTICIPANT + +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 +
+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 +
+
Method: REFRESHThe "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/PropertyPresenceComment
+METHOD + +1 + +MUST be REFRESH. +
+VPOLL + +1 +
+PARTICIPANT + +1 + +MUST identify the requester as a voter. +
+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 +
+
Method: POLLSTATUSThe "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. All "Voters" MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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/PropertyPresenceComment
+METHOD + +1 + +MUST equal POLLSTATUS. +
+VPOLL + +1+ +
+PARTICIPANT + +1+ + +The voters containing their current vote +
+COMPLETED + +0 or 1 + +Only present for a completed poll +
+DTSTAMP + +1 +
+DTSTART + +0 or 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 +
+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 SHOULD NOT be present. +
+VFREEBUSY + +0 +
+VJOURNAL + +0 + +All candidate components SHOULD NOT be present. +
+VTODO + +0 + +All candidate components SHOULD NOT be present. +
+VTIMEZONE + +0+ + +MUST be present if any date/time refers to a timezone. +
+IANA-COMPONENT + +0+ +
+X-COMPONENT + +0+ +
+
+
+ CalDAV Extensions + This specification extends in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports. + Additionally, it extends as it a VPOLL component is a +schedulable entity. +
Calendar Collection PropertiesThis section defines new CalDAV properties for calendar collections. +
CALDAV:supported-vpoll-component-sets
Name
+supported-vpoll-component-sets +
Namespace
+urn:ietf:params:xml:ns:caldav +
Purpose
+Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.It also specifies the combination of allowed component types. +Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.
Definition
+
+ +]]>
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +]]>
+
+
CALDAV:vpoll-max-items
Name
+vpoll-max-items +
Namespace
+urn:ietf:params:xml:ns:caldav +
Purpose
+Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
+The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component. +
Definition
+
+PCDATA value: a numeric value (integer greater than zero)]]>
+ +
25]]>
+
+
CALDAV:vpoll-max-active
Name
+vpoll-max-active +
Namespace
+urn:ietf:params:xml:ns:caldav +
Purpose
+Provides a numeric value indicating the maximum number of +active vpolls at any one time. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
+The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs. +
Definition
+
+PCDATA value: a numeric value (integer greater than zero)]]>
+ +
25]]>
+
+
CALDAV:vpoll-max-voters
Name
+ +vpoll-max-voters + +
Namespace
+ +urn:ietf:params:xml:ns:caldav + +
Purpose
+Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
+The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component. +
Definition
+
+PCDATA value: a numeric value (integer greater than zero)]]>
+ +
25]]>
+
+
CalDAV:even-more-properties + +
+
Extensions to CalDAV schedulingThis specification extends . +Each section of Appendix A "Scheduling Privileges Summary" is +extended to include VPOLL. +Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.
+
Additional Preconditions for PUT, COPY, and MOVEThis 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: +
(CALDAV:supported-vpoll-component-sets)
+The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection; +
(CALDAV:vpoll-max-items)
+The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value +on the calendar collection where the resource will be stored; +
(CALDAV:vpoll-max-active)
+The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value + on the calendar collection where the resource will +be stored; +
(CALDAV:vpoll-max-voters)
+The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value on the +calendar collection where the resource will be stored; +
+
CalDAV:calendar-query ReportThis 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. +
Example: Partial Retrieval of VPOLLIn 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. +
> Request << + +REPORT /cyrus/work/ HTTP/1.1 +Host: cal.example.com +Depth: 1 +Content-Type: application/xml; charset="utf-8" +Content-Length: xxxx + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>> 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 + + + + + http://cal.example.com/cyrus/work/poll2.ics + + + "fffff-abcd2" + BEGIN:VCALENDAR +VERSION:2.0 +BEGIN:VPOLL +DTSTART;TZID=US/Eastern:20121202T120000 +DURATION:PT4D +SUMMARY:Poll #2 +UID:00959BC664CA650E933C892C@example.com +END:VPOLL +END:VCALENDAR + + + HTTP/1.1 200 OK + + + + http://cal.example.com/cyrus/work/poll3.ics + + + "fffff-abcd3" + 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 + + + HTTP/1.1 200 OK + + +]]>
+
+
CalDAV time ranges"CALDAV:time-range XML Element" in describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends to +describe the meaning of time ranges for VPOLL +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. +
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 | ++---+---+---+---+---+-----------------------------------------------+]]>
+
+
+
+ Security Considerations + Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See for a +discussion of the security considerations relating to URIs. +
+
+ IANA Considerations +
Parameter RegistrationsThis document defines the following new iCalendar property parameters +to be added to the registry defined in : +
Property ParameterStatusReference
+REQUIRED + +Current + + + + +
+STAY-INFORMED + +Current + + + + +
+
Property RegistrationsThis document defines the following new iCalendar properties to be +added to the registry defined in : +
PropertyStatusReference
+ACCEPT-RESPONSE + +Current + + + + +
+POLL-ITEM-ID + +Current + + + + +
+POLL-MODE + +Current + + + + +
+POLL-PROPERTIES + +Current + + + + +
+POLL-WINNER + +Current + + + + +
+RESPONSE + +Current + + + + +
+
POLL-MODE Registration TemplateA poll mode is defined by completing the following template. +
Poll mode name
+The name of the poll mode. +
Purpose
+The purpose of the poll mode. Give a short but clear +description. +
Reference
+A reference to the RFC in which the poll mode is defined +
+
POLL-MODE RegistrationsThis document defines the following registered poll modes. +
Poll mode namePurposeReference
+BASIC + +To provide simple voting for a single outcome from a number of candidates. + +Current +
+
+
+ + + Normative references + + + HTTP Extensions for Distributed Authoring — WEBDAV + + + + + + + + This document specifies a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, namespace manipulation, and resource locking (collision avoidance). [STANDARDS-TRACK] + + + + + IETF RFC 2518 + + + + + + Uniform Resource Identifier (URI): Generic Syntax + + + + + + A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK] + + + + + IETF RFC 3986 + + + + + + Calendaring Extensions to WebDAV (CalDAV) + + + + + + This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing calendaring and scheduling information based on the iCalendar format. This document defines the "calendar-access" feature of CalDAV. [STANDARDS-TRACK] + + + + + IETF RFC 4791 + + + + + + Internet Calendaring and Scheduling Core Object Specification (iCalendar) + + + + This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK] + + + + + IETF RFC 5545 + + + + + + iCalendar Transport-Independent Interoperability Protocol (iTIP) + + + + This document specifies a protocol that uses the iCalendar object specification to provide scheduling interoperability between different calendaring systems. This is done without reference to a specific transport protocol so as to allow multiple methods of communication between systems. Subsequent documents will define profiles of this protocol that use specific, interoperable methods of communication between systems.The iCalendar Transport-Independent Interoperability Protocol (iTIP) complements the iCalendar object specification by adding semantics for group scheduling methods commonly available in current calendaring systems. These scheduling methods permit two or more calendaring systems to perform transactions such as publishing, scheduling, rescheduling, responding to scheduling requests, negotiating changes, or canceling. [STANDARDS-TRACK] + + + + + IETF RFC 5546 + + + + + + iCalendar Message-Based Interoperability Protocol (iMIP) + + + + This document, "iCalendar Message-Based Interoperability Protocol (iMIP)", specifies a binding from the iCalendar Transport-independent Interoperability Protocol (iTIP) to Internet email-based transports. Calendaring entries defined by the iCalendar Object Model (iCalendar) are wrapped using constructs from RFC 5322 and MIME (RFC 2045, RFC 2046, RFC 2047, and RFC 2049), and then transported over SMTP. [STANDARDS-TRACK] + + + + + IETF RFC 6047 + + + + + + Scheduling Extensions to CalDAV + + + + + This document defines extensions to the Calendaring Extensions to WebDAV (CalDAV) "calendar-access" feature to specify a standard way of performing scheduling operations with iCalendar-based calendar components. This document defines the "calendar-auto-schedule" feature of CalDAV. [STANDARDS-TRACK] + + + + + IETF RFC 6638 + + + + + + Event Publishing Extensions to iCalendar + + + + This specification updates RFC5545 by introducing a number of new iCalendar properties and components which are of particular use for event publishers and in social networking. This specification also defines a new STRUCTURED-DATA property for iCalendar RFC5545 to allow for data that is directly pertinent to an event or task to be included with the calendar data. + + + + + + IETF I-D.ietf-calext-eventpub-extensions + + + + + Bibliography + +
+ Open issues + public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property + Notifications: Need to do a section on what Notifications to + support. + A. VPOLL is about to end and you haven't voted on it yet. + Instead reuse VALARMS to notify the user? + Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No - voter + has indicated now unable to attend - want to revote + Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status + ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration + Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event. + Need to write down what isn't valid in a VPOLL + a. Can't change POLL-MODE + Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc + ? - some iTip notes On confirm - send itip if appropriate (PUBLISH) + - all non-participating - shared - feeds + Organizer can specify where result is? + Confirm can specify that itip is sent - ITIP / NONE - parameter ? + on POLL-WINNER + Need to add example of freebusy in response +
+ +
+
+
+ Change log +
+
Calext V01: 2019-10-17 MD
+
+Replace VVOTER and VOTER with PARTICIPANT. +
+
Calext V00: 2019-05-17 MD
+
+First calext version. Moved source to metanorma. No changes to specification. +
+
V03: 2014-10-28 MD
+
+
    +
  • +Add VVOTER and VOTE components. +
  • +
  • +Add RESPONSE property. +
  • +
  • +Remove RESPONSE parameter from VOTER. +
  • +
+
+
V03: 2014-05-12 MD
+
+
    +
  • +Add reply-url property and required parameter. +
  • +
  • +Fix ACCEPT-RESPONSE definition. +
  • +
+
+
V02: 2014-05-12 MD
+
+
    +
  • +Typos fixed, clarifications made. +
  • +
  • +Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT +
  • +
  • +Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values. +
  • +
  • +iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent +
  • +
  • +iTip: fix broken table cells +
  • +
  • +Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table +
  • +
  • +Added Caldav scheduling section +
  • +
+
+
V01: 2013-08-07 MD
+
+
    +
  • +Removed method CONFIRM +
  • +
  • +Removed pollitemid from VPOLL abnf. Added text for pollwinner +
  • +
  • +Added POLL-WINNER and verbiage +
  • +
  • +Added STATUS values +
  • +
  • +Added RELTYPE=POLL +
  • +
  • +Added supported-vpoll-component-sets +
  • +
  • +Added CalDAV related parameters to VOTER +
  • +
  • +Removed bad CalDAV query example. State that queries cannot +target the sub-components. +
  • +
+
+
Initial version: 2012-11-02 MD
+
+
+
+
+
diff --git a/documents/draft-york-vpoll.rxl b/documents/draft-york-vpoll.rxl new file mode 100644 index 0000000..5db2c9a --- /dev/null +++ b/documents/draft-york-vpoll.rxl @@ -0,0 +1,73 @@ + +VPOLL: Consensus Scheduling Component for iCalendar +VPOLL +https://www.apple.com +draft-york-vpoll-05 +draft-york-vpoll-05 + + + + +Eric York + +eyork@apple.com + + + + + + +Cyrus Daboo + +cyrus@daboo.name + + + + + + +Michael Douglass + +mikeadouglass@gmail.com + + + + + +Internet Engineering Task Force +IETF + + + +2019-05-15 + +en + + +standard + + +2020 + + +Internet Engineering Task Force +IETF + + + + +IETF + + +standard + + +internet-draft +Internet +trust200902 +true + +yes + + + \ No newline at end of file diff --git a/documents/draft-york-vpoll.txt b/documents/draft-york-vpoll.txt new file mode 100644 index 0000000..3339cc0 --- /dev/null +++ b/documents/draft-york-vpoll.txt @@ -0,0 +1,3472 @@ + + + + +Network Working Group E. York +Internet-Draft +Intended status: Standards Track C. Daboo +Expires: 31 January 2021 + M. Douglass + 30 July 2020 + + + VPOLL: Consensus Scheduling Component for iCalendar + draft-york-vpoll-05 + +Abstract + + This specification introduces a new iCalendar component which allows + for consensus scheduling, that is, voting on a number of alternative + meeting or task alternatives. + +Status of This Memo + + 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 https://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 31 January 2021. + +Copyright Notice + + Copyright (c) 2020 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 (https://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. + + + + +York, et al. Expires 31 January 2021 [Page 1] + +Internet-Draft VPOLL July 2020 + + +Table of Contents + + 1. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 3 + 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 + 3. Terms and definitions . . . . . . . . . . . . . . . . . . . . 4 + 3.1. consensus scheduling . . . . . . . . . . . . . . . . . . 4 + 3.2. active Vpoll . . . . . . . . . . . . . . . . . . . . . . 4 + 3.3. voter . . . . . . . . . . . . . . . . . . . . . . . . . . 4 + 4. Simple Consensus Scheduling . . . . . . . . . . . . . . . . . 5 + 4.1. The VPOLL Component: An Overview . . . . . . . . . . . . 5 + 4.2. The VPOLL Alternative Choices: An Overview . . . . . . . 7 + 4.3. VPOLL responses . . . . . . . . . . . . . . . . . . . . . 8 + 4.4. VPOLL updates . . . . . . . . . . . . . . . . . . . . . . 9 + 4.5. VPOLL Completion . . . . . . . . . . . . . . . . . . . . 11 + 4.6. Other Responses . . . . . . . . . . . . . . . . . . . . . 12 + 5. iCalendar Extensions . . . . . . . . . . . . . . . . . . . . 12 + 5.1. Updated Participant Type Value . . . . . . . . . . . . . 12 + 5.2. Updated Relation Type Value . . . . . . . . . . . . . . . 12 + 5.3. Updated Status Value . . . . . . . . . . . . . . . . . . 13 + 5.4. New Property Parameters . . . . . . . . . . . . . . . . . 13 + 5.4.1. Required . . . . . . . . . . . . . . . . . . . . . . 13 + 5.4.2. Stay-Informed . . . . . . . . . . . . . . . . . . . . 14 + 5.5. New Properties . . . . . . . . . . . . . . . . . . . . . 14 + 5.5.1. Accept-Response . . . . . . . . . . . . . . . . . . . 14 + 5.5.2. Poll-Completion . . . . . . . . . . . . . . . . . . . 15 + 5.5.3. Poll-Item-Id . . . . . . . . . . . . . . . . . . . . 16 + 5.5.4. Poll-Mode . . . . . . . . . . . . . . . . . . . . . . 17 + 5.5.5. Poll-properties . . . . . . . . . . . . . . . . . . . 17 + 5.5.6. Poll-Winner . . . . . . . . . . . . . . . . . . . . . 18 + 5.5.7. Reply-URL . . . . . . . . . . . . . . . . . . . . . . 19 + 5.5.8. Response . . . . . . . . . . . . . . . . . . . . . . 19 + 5.6. New Components . . . . . . . . . . . . . . . . . . . . . 20 + 5.6.1. VPOLL Component . . . . . . . . . . . . . . . . . . . 20 + 5.6.2. VOTE Component . . . . . . . . . . . . . . . . . . . 22 + 6. Poll Modes . . . . . . . . . . . . . . . . . . . . . . . . . 23 + 6.1. POLL-MODE:BASIC . . . . . . . . . . . . . . . . . . . . . 24 + 6.1.1. Property restrictions . . . . . . . . . . . . . . . . 24 + 6.1.2. Outcome reporting . . . . . . . . . . . . . . . . . . 24 + 7. iTIP Extensions . . . . . . . . . . . . . . . . . . . . . . . 24 + 7.1. Methods . . . . . . . . . . . . . . . . . . . . . . . . . 24 + 7.2. Interoperability Models . . . . . . . . . . . . . . . . . 26 + 7.2.1. Delegation . . . . . . . . . . . . . . . . . . . . . 26 + 7.2.2. Acting on Behalf of Other Calendar Users . . . . . . 26 + 7.2.3. Component Revisions . . . . . . . . . . . . . . . . . 26 + 7.2.4. Message Sequencing . . . . . . . . . . . . . . . . . 26 + 7.3. Application Protocol Elements . . . . . . . . . . . . . . 26 + 7.3.1. Methods for VPOLL Calendar Components . . . . . . . . 26 + 7.3.2. Method: PUBLISH . . . . . . . . . . . . . . . . . . . 28 + + + +York, et al. Expires 31 January 2021 [Page 2] + +Internet-Draft VPOLL July 2020 + + + 7.3.3. Method: REQUEST . . . . . . . . . . . . . . . . . . . 31 + 7.3.4. Method: REPLY . . . . . . . . . . . . . . . . . . . . 37 + 7.3.5. Method: CANCEL . . . . . . . . . . . . . . . . . . . 40 + 7.3.6. Method: REFRESH . . . . . . . . . . . . . . . . . . . 43 + 7.3.7. Method: POLLSTATUS . . . . . . . . . . . . . . . . . 45 + 8. CalDAV Extensions . . . . . . . . . . . . . . . . . . . . . . 47 + 8.1. Calendar Collection Properties . . . . . . . . . . . . . 47 + 8.1.1. CALDAV:supported-vpoll-component-sets . . . . . . . . 47 + 8.1.2. CALDAV:vpoll-max-items . . . . . . . . . . . . . . . 49 + 8.1.3. CALDAV:vpoll-max-active . . . . . . . . . . . . . . . 50 + 8.1.4. CALDAV:vpoll-max-voters . . . . . . . . . . . . . . . 51 + 8.1.5. CalDAV:even-more-properties . . . . . . . . . . . . . 51 + 8.1.6. Extensions to CalDAV scheduling . . . . . . . . . . . 51 + 8.2. Additional Preconditions for PUT, COPY, and MOVE . . . . 52 + 8.3. CalDAV:calendar-query Report . . . . . . . . . . . . . . 52 + 8.3.1. Example: Partial Retrieval of VPOLL . . . . . . . . . 53 + 8.4. CalDAV time ranges . . . . . . . . . . . . . . . . . . . 55 + 9. Security Considerations . . . . . . . . . . . . . . . . . . . 56 + 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 56 + 10.1. Parameter Registrations . . . . . . . . . . . . . . . . 57 + 10.2. Property Registrations . . . . . . . . . . . . . . . . . 57 + 10.3. POLL-MODE Registration Template . . . . . . . . . . . . 57 + 10.4. POLL-MODE Registrations . . . . . . . . . . . . . . . . 58 + 11. Normative references . . . . . . . . . . . . . . . . . . . . 58 + 12. Bibliography . . . . . . . . . . . . . . . . . . . . . . . . 59 + Appendix A. Open issues . . . . . . . . . . . . . . . . . . . . 59 + Appendix B. Change log . . . . . . . . . . . . . . . . . . . . . 60 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 61 + +1. Acknowledgements + + The authors would like to thank the members of the Calendaring and + Scheduling Consortium (CalConnect) for contributing their ideas and + support. + +2. Introduction + + The currently existing approach to agreeing on meeting times using + iTip [RFC5546] and/or iMip [RFC6047] has 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. + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 3] + +Internet-Draft VPOLL July 2020 + + + 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. + +3. Terms and definitions + + For the purposes of this document, the following terms and + definitions apply. + +3.1. consensus scheduling + + The process whereby users come to some agreement on meeting or task + alternatives and then book that meeting or task. + +3.2. active Vpoll + + A VPoll may have a DTSTART, DTEND and DURATION which may define the + start and end of the active voting period + +3.3. voter + + A participant who votes on the alternatives. A voter need not be an + attendee of any of the alternatives presented. + + + +York, et al. Expires 31 January 2021 [Page 4] + +Internet-Draft VPOLL July 2020 + + +4. Simple Consensus Scheduling + + 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. This document will + show how a VPOLL object is used to inform voters of the state of a + simple vote on some alternatives. + +4.1. The VPOLL Component: An Overview + + The VPOLL component acts as a wrapper for a number of alternatives to + be voted on, together with some properties and a new component used + to maintain the state of the voting. For our simple example the + following VPOLL properties and sub-components are either required or + appropriate: + + DTSTAMP The usual [RFC5545] property. + + SEQUENCE The usual [RFC5545] property. See below for SEQUENCE + behavior. + + UID The usual [RFC5545] property. + + ORGANIZER The usual [RFC5545] property. In general this need not be + an organizer of any of the alternatives. In this simple outline + we assume it is the same. + + SUMMARY The usual [RFC5545] property. This optional but recommended + property provides the a short title to the poll. + + DESCRIPTION The usual [RFC5545] property. This optional property + provides more details. + + DTEND The usual [RFC5545] property. This optional property provides + a poll closing time and date after which the VPOLL is no longer + active. + + POLL-MODE A new property which defines how the votes are used to + obtain a result. For our use case it will take the value "BASIC" + meaning one event will be chosen from the alternatives. + + + + +York, et al. Expires 31 January 2021 [Page 5] + +Internet-Draft VPOLL July 2020 + + + POLL-COMPLETION A new property which defines who (server or client) + chooses and/or submits the winning choice. In our example the + value is "SERVER-SUBMIT" which means the client chooses the winner + but the server will submit the winning choice. + + POLL-PROPERTIES A new property which defines which icalendar + properties are being voted on. For our use case it will take the + value "DTSTART, LOCATION" meaning only those properties are + significant for voting. Other properties in the events may differ + but are not considered significant for the voting process. + + PARTICIPANT There is one of these components for each voter with the + PARTICIPANT-TYPE set to "VOTER". The CALENDAR-ADDRESS property + identifies the voter and this component will contain one VOTE + component for each item being voted on. + + VOTE A new component. There is one of these for each voter and + choice. It usually contains at least a POLL-ITEM-ID property to + identify the choice and a RESPONSE property to provide a vote. + For more complex poll modes it may contain other information such + as cost or estimated duration. + + VEVENT In our simple use case there will be multiple VEVENT sub- + components defining the alternatives. Each will have a different + date and or time for the meeting. + + EXAMPLE + + VPOLL with 3 voters and 3 alternative meetings: + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 6] + +Internet-Draft VPOLL July 2020 + + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD:REQUEST + BEGIN:VPOLL + POLL-MODE:BASIC + POLL-COMPLETION:SERVER-SUBMIT + POLL-PROPERTIES:DTSTART,LOCATION + ORGANIZER:mailto:mike@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T000000Z + SUMMARY:What to do this week + DTEND:20120101T000000Z + BEGIN: PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:cyrus@example.com + END PARTICIPANT + BEGIN: PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:eric@example.com + END PARTICIPANT + BEGIN: PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:mike@example.com + END PARTICIPANT + 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 + + Figure 1 + + 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. + +4.2. The VPOLL Alternative Choices: An Overview + + 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. + + + +York, et al. Expires 31 January 2021 [Page 7] + +Internet-Draft VPOLL July 2020 + + + POLL-ITEM-ID This provides a unique reference to the sub-component + within the VPOLL. It's value SHOULD be a small integer. + +4.3. VPOLL responses + + 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 and components: + + DTSTAMP The usual [RFC5545] property. + + SEQUENCE The usual [RFC5545] property. See below for SEQUENCE + behavior. + + UID Same as the request. + + ORGANIZER Same as the request. + + SUMMARY Same as the request. + + PARTICIPANT One only with a CALENDAR-ADDRESS identifying the voter + replying. + + VOTE One per item being voted on. + + POLL-ITEM-ID One inside each VOTE component to identify the choice. + + RESPONSE One inside each VOTE component to specify the vote. + + 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. + + NOTE This is poll-mode specific behavior? + + EXAMPLE + + REPLY VPOLL from Cyrus: + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 8] + +Internet-Draft VPOLL July 2020 + + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD: REPLY + BEGIN:VPOLL + ORGANIZER:mailto:mike@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T010000Z + SUMMARY:What to do this week + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:cyrus@example.com + BEGIN:VOTE + POLL-ITEM-ID:1 + RESPONSE:50 + COMMENT:Work on iTIP + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:2 + RESPONSE:100 + COMMENT:Work on WebDAV + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:3 + RESPONSE:0 + END:VOTE + END:PARTICIPANT + END:VPOLL + END:VCALENDAR + + Figure 2 + +4.4. VPOLL updates + + 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 one or more PARTICIPANT components each populated with + zero or more VOTE components. + + EXAMPLE + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 9] + +Internet-Draft VPOLL July 2020 + + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD: POLLSTATUS + BEGIN:VPOLL + ORGANIZER:mailto:mike@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T020000Z + SEQUENCE:0 + SUMMARY:What to do this week + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:cyrus@example.com + BEGIN: VOTE + POLL-ITEM-ID:1 + RESPONSE:50 + COMMENT:Work on iTIP + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:2 + RESPONSE:100 + COMMENT:Work on WebDAV + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:3 + RESPONSE:0 + END:VOTE + END:PARTICIPANT + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:eric@example.com + BEGIN:VOTE + POLL-ITEM-ID:1 + RESPONSE:100 + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:2 + RESPONSE:100 + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:3 + RESPONSE:0 + END:VOTE + END:PARTICIPANT + END:VPOLL + END:VCALENDAR + + Figure 3 + + + +York, et al. Expires 31 January 2021 [Page 10] + +Internet-Draft VPOLL July 2020 + + +4.5. VPOLL Completion + + 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. As the POLL- + COMPLETION property is set to SERVER-SUBMIT the server will submit + the winning choice and when it has done so set the STATUS to + "SUBMITTED". + + EXAMPLE + + VPOLL confirmation: + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD: REQUEST + BEGIN:VPOLL + ORGANIZER:mailto:douglm@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T030000Z + COMPLETED:20120101T030000Z + POLL-COMPLETION:SERVER-SUBMIT + 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 + + Figure 4 + + + + + + +York, et al. Expires 31 January 2021 [Page 11] + +Internet-Draft VPOLL July 2020 + + +4.6. Other Responses + + A voter being asked to choose between a number of ORGANIZER supplied + alternatives may find none of them acceptable or may simply not care. + + An alternative response, which may be disallowed by the ORGANIZER, is + to send back the respondees availability or freebusy or even one or + more new, alternative choices. + + This is accomplished by responding with a VOTE component which has no + POLL-ITEM-ID property. In this case it MUST contain some alternative + information. What form this takes depends on the poll mode in + effect. + +5. iCalendar Extensions + +5.1. Updated Participant Type Value + + Participant type property values are defined in section 11.2.1. of + [I-D.ietf-calext-eventpub-extensions]. This specification updates + that type to include the new participant type VOTER to provide + information about the voter and to contain their votes. + + Format Definition This property parameter is redefined by the + following notation: + + partvalue /= "VOTER" + + Figure 5 + + Description The new property value indicates that the associated + PARTICIPANT component identifies a voter in a VPOLL. + +5.2. Updated Relation Type Value + + 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. + + Format Definition This property parameter is redefined by the + following notation: + + reltypeparam /= "RELTYPE" "=" "POLL" + ; Property value is a VPOLL uid + + Figure 6 + + + + +York, et al. Expires 31 January 2021 [Page 12] + +Internet-Draft VPOLL July 2020 + + + Description This parameter can be specified on a property that + references another related calendar component. The new parameter + value indicates that the associated property references a VPOLL + component which contains the current component. + +5.3. Updated Status Value + + Status property values are defined in section 3.8.1.11. of [RFC5545]. + This specification updates that type to define valid VPOLL status + values. + + Format Definition 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 + / "SUBMITTED" ; The winning item has been + ; submitted + / "CANCELLED" + + Figure 7 + + Description These values allow clients and servers to handle the + choosing and submission of winning choices. + + If the client is choosing and the server submitting then the + client should set the POLL-WINNER property, set the status to + CONFIRMED and save the poll. When the server submits the winning + choice it will set the status to SUBMITTED. + + Figure 8 + +5.4. New Property Parameters + +5.4.1. Required + + Parameter name REQUIRED + + Purpose To specify whether the associated property is required in + the current context. + + Format Definition This parameter is defined by the following + notation: + + + +York, et al. Expires 31 January 2021 [Page 13] + +Internet-Draft VPOLL July 2020 + + + requirededparam = "REQUIRED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + + Figure 9 + + Description This parameter MAY be specified on REPLY-URL and, if the + value is TRUE, indicates the organizer requires all replies to be + made via the specified service rather than iTip replies. + +5.4.2. Stay-Informed + + Parameter name STAY-INFORMED + + Purpose To specify the voter also wants to be added as an ATTENDEE + when the poll is confirmed. + + Format Definition This parameter is defined by the following + notation: + + stayinformedparam = "STAY-INFORMED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + + Figure 10 + + Description This parameter MAY be specified on the CALENDAR-ADDRESS + property in the PARTICIPANT component and, if the value is TRUE, + indicates the voter wishes to be added to the final choice as a + non participant. + +5.5. New Properties + +5.5.1. Accept-Response + + Property name ACCEPT-RESPONSE + + Purpose This property is used in VPOLL to indicate the types of + component that may be supplied in a response. + + Property Parameters Non-standard or iana parameters can be specified + on this property. + + Conformance This property MAY be specified in a VPOLL component. + + Description When used in a VPOLL this property indicates what + allowable component types may be returned in a reply. Typically + this would allow a voter to respond with their freebusy or + availability rather than choosing one of the presented + alternatives. + + + +York, et al. Expires 31 January 2021 [Page 14] + +Internet-Draft VPOLL July 2020 + + + If this property is not present voters are only allowed to respond + to the choices in the request. + + Format Definition This property is defined by the following + notation: + + acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":" + iana-token ("," iana-token) CRLF + + acceptresponseparams = *(";" other-param) + + Figure 11 + +5.5.2. Poll-Completion + + Property name POLL-COMPLETION + + Purpose This property is used in VPOLL to indicate whether the + client or server is responsible for choosing and/or submitting the + winner(s). + + Description When a VPOLL is stored on a server which is capable of + handling choosing and submission of winning choices a value of + SERVER indicates that the server should close the poll, choose the + winner and submit whenever it is appropriate to do so. + + For example, in BASIC poll-mode, reaching the DTEND of the poll + could trigger this server side action. + + Server initiated submission requires that the submitted choice + MUST be a valid calendaring component. + + POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- + winner, set the status to CONFIRMED and then store the poll on the + server. The server will then submit the winning choice and set + the status to SUBMITTED. + + Format Definition This property is defined by the following + notation: + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 15] + +Internet-Draft VPOLL July 2020 + + + poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF + + pcparam = *(";" other-param) + + pcvalue = "SERVER" ; The server is responsible for both choosing and + ; submitting the winner(s) + / "SERVER-SUBMIT" ; The server is responsible for + ; submitting the winner(s). The client chooses. + / "SERVER-CHOICE" ; The server is responsible for + ; choosing the winner(s). The client will submit. + / "CLIENT" ; The client is responsible for both choosing and + ; submitting the winner(s) + / iana-token + / x-name + ;Default is CLIENT + + Figure 12 + + Example The following is an example of this property: + + POLL-COMPLETION: SERVER-SUBMIT + + Figure 13 + +5.5.3. Poll-Item-Id + + Property name POLL-ITEM-ID + + Purpose This property is used in VPOLL child components as an + identifier. + + Value type INTEGER + + Property Parameters Non-standard parameters can be specified on this + property. + + Conformance This property MUST be specified in a VOTE component and + in VPOLL choice items. + + Description In a METHOD:REQUEST each choice 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. + + POLL-ITEM-ID SHOULD be a unique small integer for each component + or set of components. If it remains the same between REQUESTs + then the previous response for that component MAY be re-used. To + force a re-vote on a component due to a significant change, the + POLL-ITEM-ID MUST change. + + + +York, et al. Expires 31 January 2021 [Page 16] + +Internet-Draft VPOLL July 2020 + + + Format Definition This property is defined by the following + notation: + + pollitemid = "POLL-ITEM-ID" pollitemdparams ":" + integer CRLF + + pollitemidparams = *( + (";" other-param) + ) + + Figure 14 + +5.5.4. Poll-Mode + + Property name POLL-MODE + + Purpose This property is used in VPOLL to indicate what voting mode + is to be applied. + + Property Parameters Non-standard or iana parameters can be specified + on this property. + + Conformance This property MAY be specified in a VPOLL component or + its sub-components. + + Description The poll mode defines how the votes are applied to + obtain a result. BASIC mode, the default, means that the voters + are selecting one component (or group of components) with a given + POLL=ITEM-ID. + + Other polling modes may be defined in updates to this + specification. These may allow for such modes as ranking or task + assignment. + + Format Definition This property is defined by the following + notation: + + pollmode = "POLL-MODE" pollmodeparams ":" + ("BASIC" / iana-token / other-token) CRLF + + pollmodeparams = *(";" other-param) + + Figure 15 + +5.5.5. Poll-properties + + Property name POLL-PROPERTIES + + + + +York, et al. Expires 31 January 2021 [Page 17] + +Internet-Draft VPOLL July 2020 + + + Purpose This property is used in VPOLL to define which icalendar + properties are being voted on. + + Property Parameters Non-standard or iana parameters can be specified + on this property. + + Conformance This property MAY be specified in a VPOLL component. + + Description This property defines which icalendar properties are + significant in the voting process. It may not be clear to voters + which properties are varying in a significant manner. Clients may + use this property to highlight those listed properties. + + Format Definition This property is defined by the following + notation: + + pollproperties = "POLL-PROPERTIES" pollpropparams ":" + text *("," text) CRLF + + pollpropparams = *(";" other-param) + + Figure 16 + +5.5.6. Poll-Winner + + Property name POLL-WINNER + + Purpose This property is used in a basic mode VPOLL to indicate + which of the VPOLL sub-components won. + + Value type INTEGER + + Property Parameters Non-standard parameters can be specified on this + property. + + Conformance This property MAY be specified in a VPOLL component. + + Description For poll confirmation each child component MUST have a + POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD + have a POLL-WINNER property which MUST correspond to one of the + POLL-ITEM-ID properties and indicates which sub-component was the + winner. + + Format Definition This property is defined by the following + notation: + + + + + + +York, et al. Expires 31 January 2021 [Page 18] + +Internet-Draft VPOLL July 2020 + + + pollwinner = "POLL-WINNER" pollwinnerparams ":" + integer CRLF + + pollwinnerparams = *(";" other-param) + + ; Used with a STATUS:CONFIRMED VPOLL to indicate which + ; components have been confirmed + + Figure 17 + +5.5.7. Reply-URL + + Property name REPLY-URL + + Purpose This property may be used in scheduling messages to indicate + additional reply methods, for example a web-service. + + Property Parameters Non-standard, required or iana parameters can be + specified on this property. + + Conformance This property MAY be specified in a VPOLL component. + + Description When used in a scheduling message this property + indicates additional or required services that can be used to + reply. Typically this would be a web service of some form. + + Format Definition This property is defined by the following + notation: + + reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF + + reply-urlparams = *( + (";" requiredparam) / + (";" other-param) + ) + + Figure 18 + +5.5.8. Response + + Property name RESPONSE + + Purpose To specify a response vote. + + Value type INTEGER + + Format Definition This property is defined by the following + notation: + + + +York, et al. Expires 31 January 2021 [Page 19] + +Internet-Draft VPOLL July 2020 + + + response = "RESPONSE" response-params ":" integer CRLF + ; integer value 0..100 + + responseparams = *(";" other-param) + + Figure 19 + + Description This parameter can be specified on the POLL-ITEM-ID + property to provide the value of the voters response. This + parameter allows for fine grained responses which are appropriate + to some applications. For the case of individuals voting for a + choice of events, client applications SHOULD conform to the + following convention: + + * 0 - 39 A "NO vote" + + * 40 - 79 A "MAYBE" vote + + * 80 - 89 A "YES - but not preferred vote" + + * 90-100 A "YES" vote. + + Clients MUST preserve the response value when there is no + change from the user even if they have a UI with fixed states + (e.g. yes/no/maybe). + +5.6. New Components + +5.6.1. VPOLL Component + + Component name VPOLL + + Purpose This component provides a mechanism by which voters can vote + on provided choices. + + Format Definition This property is defined by the following + notation: + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 20] + +Internet-Draft VPOLL July 2020 + + + pollc = "BEGIN" ":" "VPOLL" CRLF + pollprop + *participantc *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 / 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 / + ; + ) + + Figure 20 + + Description This component provides a mechanism by which voters can + + + +York, et al. Expires 31 January 2021 [Page 21] + +Internet-Draft VPOLL July 2020 + + + vote on provided choices. The outcome depends upon the POLL-MODE + in effect. + + The PARTICIPANT components in VPOLL requests provide information + on each recipient who will be voting - both their identity through + the CALENDAR-ADDRESS property and their votes through the VOTE + components. + + If specified, the "DTSTART" property defines the start or opening + of the poll active period. If absent the poll is presumed to have + started when created. + + If "DTSTART" is present "DURATION" MAY be specified and indicates + the duration, and hence the ending, of the poll. The value of the + property MUST be a positive duration. + + "DTEND" MAY be specified with or without "DTSTART" and indicates + the ending of the poll. If DTEND is specified it MUST be later + than the DTSTART or CREATED property. + + If one or more VALARM components are included in the VPOLL they + are not components to be voted on and MUST NOT contain a POLL- + ITEM-ID property. VALARM sub-components may be used to provide + warnings to the user when polls are due to start or end. + +5.6.2. VOTE Component + + Component name VOTE + + Purpose This component provides a mechanism by which voters can vote + on provided choices. + + Conformance This component may be specified zero or more times in a + PARTICIPANT component which identifies the voter. + + Format Definition This property is defined by the following + notation: + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 22] + +Internet-Draft VPOLL July 2020 + + + votec = "BEGIN" ":" "VOTE" CRLF + voteprop + *eventc *todoc *journalc *freebusyc + *availabilityc *alarmc *iana-comp *x-comp + "END" ":" "VOTE" CRLF + + voteprop = *( + ; + ; The following are REQUIRED, + ; but MUST NOT occur more than once. + ; + pollitemid / response / + ; + ; The following are OPTIONAL, + ; and MAY occur more than once. + ; + comment / x-prop / iana-prop + ; + ) + + Figure 21 + + Description This component appears inside the PARTICIPANT component + with a PARTICIPANT-TYPE of VOTER to identify the voter. This + component contains that participants responses. + + The required and optional properties and their meanings will + depend upon the POLL-MODE in effect. + + For any POLL-MODE, POLL-ITEM-ID is used to associate the + information to a choice supplied by the organizer. This means + that each VOTE component only provides information about that + choice. + + If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- + ID may be provided in a REPLY to indicate a possible new choice or + to provide information to the ORGANIZER - such as the respondees + availability. + +6. Poll Modes + + The VPOLL component is intended to allow for various forms of + polling. The particular form in efffect is indicated by the POLL- + MODE property. + + New poll modes can be registered by including a completed POLL-MODE + Registration Template (see Section 10.3) in a published RFC. + + + + +York, et al. Expires 31 January 2021 [Page 23] + +Internet-Draft VPOLL July 2020 + + +6.1. POLL-MODE:BASIC + + 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. + +6.1.1. Property restrictions + + This poll mode has the following property requirements: + + POLL-ITEM-ID Each contained sub-component that is being voted upon + MUST contain a POLL-ITEM_ID property which is unique within the + context of the POLL. The value MUST NOT be reused when events are + removed and/or added to the poll. + + POLL-WINNER On confirmation of the poll this property MUST be + present and identifies the winning component. + +6.1.2. Outcome reporting + + To confirm the winner the POLL-WINNER property MUST be present and + the STATUS MUST be set to CONFIRMED. + + When the winning VEVENT or VTODO is not a scheduled entity, that is, + it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER + property and a list of non-participating ATTENDEEs. This allows the + winning entity to be distributed to the participants through iTip or + some other protocol. + +7. iTIP Extensions + + 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. + +7.1. Methods + + There are some extensions to the behavior of iTip methods for a VPOLL + object and two new methods are defined. + + + + + + + + +York, et al. Expires 31 January 2021 [Page 24] + +Internet-Draft VPOLL July 2020 + + + +----------------+------------------------------------------------+ + | 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 | + | | PARTICIPANTS. | + +----------------+------------------------------------------------+ + + Table 1 + + The following table shows the above methods broken down by who can + send them with VPOLL components. + + + + + + + + +York, et al. Expires 31 January 2021 [Page 25] + +Internet-Draft VPOLL July 2020 + + + +------------+------------------------------------------------+ + | Originator | Methods | + +============+================================================+ + | Organizer | CANCEL, PUBLISH, REQUEST, POLLSTATUS | + +------------+------------------------------------------------+ + | Voter | REPLY, REFRESH, REQUEST (only when delegating) | + +------------+------------------------------------------------+ + + Table 2 + +7.2. Interoperability Models + + Most of the standard iTip specification applies with respect to + organizer and voters. + +7.2.1. Delegation + + TBD + +7.2.2. Acting on Behalf of Other Calendar Users + + TBD + +7.2.3. Component Revisions + + * 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 + +7.2.4. Message Sequencing + + TBD + +7.3. Application Protocol Elements + +7.3.1. Methods for VPOLL Calendar Components + + 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. + + + +York, et al. Expires 31 January 2021 [Page 26] + +Internet-Draft VPOLL July 2020 + + + 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. | + +----------------+-------------------------------------------------+ + + Table 3 + + The following summarizes the methods that are defined for the "VPOLL" + calendar component. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 27] + +Internet-Draft VPOLL July 2020 + + + +------------+------------------------------------------------------+ + | 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. REQUEST SHOULD NOT be | + | | used just to set the status of the poll - | + | | POLLSTATUS provides a more compact approach. | + +------------+------------------------------------------------------+ + | 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 | + | | PARTICIPANT. | + +------------+------------------------------------------------------+ + + Table 4 + +7.3.2. Method: PUBLISH + + 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. + + Note Not clear how useful this is but needs some work on + transmitting the current vote without any voter identification. + + + +York, et al. Expires 31 January 2021 [Page 28] + +Internet-Draft VPOLL July 2020 + + + This method type is an iCalendar object that conforms to the + following property constraints: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST equal PUBLISH. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1+ | | + +-----------------+----------+-------------------------------------+ + | DTSTAMP | 1 | | + +-----------------+----------+-------------------------------------+ + | DTSTART | 0 or 1 | If present defines the start of the | + | | | poll. Otherwise the poll starts | + | | | when it is created and distributed. | + +-----------------+----------+-------------------------------------+ + | 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 | + + + +York, et al. Expires 31 January 2021 [Page 29] + +Internet-Draft VPOLL July 2020 + + + | | | 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+ | | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 0+ | Only PARTICIPANT components with | + | | | PARTICIPANT-TYPE not equal to | + | | | "VOTER" - that is, no voters | + +-----------------+----------+-------------------------------------+ + | REQUEST-STATUS | 0 | | + +-----------------+----------+-------------------------------------+ + | VALARM | 0+ | | + +-----------------+----------+-------------------------------------+ + | VEVENT | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VTODO | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + + + +York, et al. Expires 31 January 2021 [Page 30] + +Internet-Draft VPOLL July 2020 + + + | | | component. | + +-----------------+----------+-------------------------------------+ + | VTIMEZONE | 0+ | MUST be present if any date/time | + | | | refers to a timezone. | + +-----------------+----------+-------------------------------------+ + | IANA-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + | X-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + + Table 5: Constraints for a METHOD:PUBLISH of a VPOLL + +7.3.3. Method: REQUEST + + The "REQUEST" method in a "VPOLL" component provides the following + scheduling functions: + + * Invite "Voters" to respond to the poll. + + * Change the items being voted upon. + + * Complete or confirm the poll. + + * Response to a "REFRESH" request. + + * Update the details of an existing vpoll. + + * Update the status of "Voters". + + * Forward a "VPOLL" to another uninvited CU. + + * For an existing "VPOLL" calendar component, delegate the role of + "Voter" to another CU. + + * For an existing "VPOLL" calendar component, change the role of + "Organizer" to another CU. + + The "Organizer" originates the "REQUEST". The recipients of the + "REQUEST" method are the CUs voting in the poll, the "Voters". + "Voters" use the "REPLY" method to convey votes to 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. + + + +York, et al. Expires 31 January 2021 [Page 31] + +Internet-Draft VPOLL July 2020 + + + 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: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST be REQUEST. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1 | | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 1+ | Identified as voters with the | + | | | PARTICIPANT-TYPE=VOTER | + +-----------------+----------+-------------------------------------+ + | DTSTAMP | 1 | | + +-----------------+----------+-------------------------------------+ + | DTSTART | 0 or 1 | If present defines the start of the | + | | | poll. Otherwise the poll starts | + | | | when it is created and distributed. | + +-----------------+----------+-------------------------------------+ + | 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. | + + + +York, et al. Expires 31 January 2021 [Page 32] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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 | + + + +York, et al. Expires 31 January 2021 [Page 33] + +Internet-Draft VPOLL July 2020 + + + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VTODO | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + + Table 6: Constraints for a METHOD:REQUEST of a VPOLL + +7.3.3.1. Rescheduling a poll + + 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. + +7.3.3.2. Updating or Reconfirmation of a 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 a "Voter" to the "Organizer" of a poll. + + + + + + +York, et al. Expires 31 January 2021 [Page 34] + +Internet-Draft VPOLL July 2020 + + + 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. + +7.3.3.3. Confirmation of a 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. + +7.3.3.4. Closing a Poll + + The "REQUEST" method may be used to close a poll, that is indicate + voting is completed. The STATUS MUST be set to COMPLETED. + +7.3.3.5. Delegating a Poll to Another CU + + 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. + + + + + + + +York, et al. Expires 31 January 2021 [Page 35] + +Internet-Draft VPOLL July 2020 + + + 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". + +7.3.3.6. Changing 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". + +7.3.3.7. Sending on Behalf of the 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". + +7.3.3.8. Forwarding to an Uninvited CU + + 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 a "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. + + + + + + +York, et al. Expires 31 January 2021 [Page 36] + +Internet-Draft VPOLL July 2020 + + + 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. + +7.3.3.9. Updating Voter Status + + 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 "RSVP=TRUE" property parameter on the + PARTICIPANT CALENDAR-ADDRESS. 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". + +7.3.4. Method: REPLY + + 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" "CALENDAR- + ADDRESS" property. The "Delegate" SHOULD include the calendar + address of the "Delegator" on the "DELEGATED-FROM" property parameter + of the "Delegate's" "CALENDAR-ADDRESS" 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". + + + + + + + +York, et al. Expires 31 January 2021 [Page 37] + +Internet-Draft VPOLL July 2020 + + + A "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. (But see comments on VFREEBUSY and VAVAILABILITY) + + This method type is an iCalendar object that conforms to the + following property constraints: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST be REPLY. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1+ | All components MUST have the same | + +-----------------+----------+-------------------------------------+ + | | | UID. | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 1 | Identifies 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 | | + + + +York, et al. Expires 31 January 2021 [Page 38] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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+ | | + + + +York, et al. Expires 31 January 2021 [Page 39] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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 or 1 | A voter may respond with a | + | | | VFREEBUSY component indicating that | + | | | the ORGANIZER may select some other | + | | | time which is not marked as busy. | + +-----------------+----------+-------------------------------------+ + | VAVAILABILITY | 0 | A voter may respond with a | + | | | VAVAILABILITY component indicating | + | | | that the ORGANIZER may select some | + | | | other time which is shown as | + | | | available. | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0 | | + +-----------------+----------+-------------------------------------+ + | VTODO | 0 | | + +-----------------+----------+-------------------------------------+ + + Table 7: Constraints for a METHOD:REPLY of a VPOLL + +7.3.5. Method: CANCEL + + 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 7.2.3. + + Once a CANCEL message has been sent to all voters no further voting + may take place. The poll is considered closed. + + + +York, et al. Expires 31 January 2021 [Page 40] + +Internet-Draft VPOLL July 2020 + + + This method type is an iCalendar object that conforms to the + following property constraints: + + +-----------------+----------+----------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+==================================+ + | METHOD | 1 | MUST be CANCEL. | + +-----------------+----------+----------------------------------+ + | VPOLL | 1+ | All must have the same UID. | + +-----------------+----------+----------------------------------+ + | PARTICIPANT | 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 | | + +-----------------+----------+----------------------------------+ + | 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 | | + +-----------------+----------+----------------------------------+ + + + +York, et al. Expires 31 January 2021 [Page 41] + +Internet-Draft VPOLL July 2020 + + + | 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 | | + + + +York, et al. Expires 31 January 2021 [Page 42] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+----------------------------------+ + | VJOURNAL | 0 | | + +-----------------+----------+----------------------------------+ + | VEVENT | 0 | | + +-----------------+----------+----------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+----------------------------------+ + + Table 8: Constraints for a METHOD:CANCEL of a VPOLL + +7.3.6. Method: REFRESH + + 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: + + +--------------------+----------+----------------------------+ + | Component/Property | Presence | Comment | + +====================+==========+============================+ + | METHOD | 1 | MUST be REFRESH. | + +--------------------+----------+----------------------------+ + | VPOLL | 1 | | + +--------------------+----------+----------------------------+ + | PARTICIPANT | 1 | MUST identify the | + | | | requester as a voter. | + +--------------------+----------+----------------------------+ + | 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 | | + +--------------------+----------+----------------------------+ + + + +York, et al. Expires 31 January 2021 [Page 43] + +Internet-Draft VPOLL July 2020 + + + | 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 | | + +--------------------+----------+----------------------------+ + + + +York, et al. Expires 31 January 2021 [Page 44] + +Internet-Draft VPOLL July 2020 + + + | VTIMEZONE | 0+ | | + +--------------------+----------+----------------------------+ + | IANA-COMPONENT | 0+ | | + +--------------------+----------+----------------------------+ + | X-COMPONENT | 0+ | | + +--------------------+----------+----------------------------+ + | VTODO | 0 | | + +--------------------+----------+----------------------------+ + | VJOURNAL | 0 | | + +--------------------+----------+----------------------------+ + | VEVENT | 0 | | + +--------------------+----------+----------------------------+ + | VFREEBUSY | 0 | | + +--------------------+----------+----------------------------+ + + Table 9: Constraints for a METHOD:REFRESH of a VPOLL + +7.3.7. Method: POLLSTATUS + + 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. All "Voters" MUST be present. The selected component(s) + according to the poll mode SHOULD NOT 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: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST equal POLLSTATUS. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1+ | | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 1+ | The voters containing their current | + | | | vote | + +-----------------+----------+-------------------------------------+ + | COMPLETED | 0 or 1 | Only present for a completed poll | + +-----------------+----------+-------------------------------------+ + | DTSTAMP | 1 | | + +-----------------+----------+-------------------------------------+ + | DTSTART | 0 or 1 | | + +-----------------+----------+-------------------------------------+ + | ORGANIZER | 1 | | + + + +York, et al. Expires 31 January 2021 [Page 45] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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 | | + +-----------------+----------+-------------------------------------+ + | 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 | | + + + +York, et al. Expires 31 January 2021 [Page 46] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | IANA-PROPERTY | 0+ | | + +-----------------+----------+-------------------------------------+ + | X-PROPERTY | 0+ | | + +-----------------+----------+-------------------------------------+ + | REQUEST-STATUS | 0 | | + +-----------------+----------+-------------------------------------+ + | VALARM | 0+ | | + +-----------------+----------+-------------------------------------+ + | VEVENT | 0 | All candidate components SHOULD NOT | + | | | be present. | + +-----------------+----------+-------------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0 | All candidate components SHOULD NOT | + | | | be present. | + +-----------------+----------+-------------------------------------+ + | VTODO | 0 | All candidate components SHOULD NOT | + | | | be present. | + +-----------------+----------+-------------------------------------+ + | VTIMEZONE | 0+ | MUST be present if any date/time | + | | | refers to a timezone. | + +-----------------+----------+-------------------------------------+ + | IANA-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + | X-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + + Table 10: Constraints for a METHOD:POLLSTATUS of a VPOLL + +8. CalDAV Extensions + + 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. + + Additionally, it extends [RFC6638] as it a VPOLL component is a + schedulable entity. + +8.1. Calendar Collection Properties + + This section defines new CalDAV properties for calendar collections. + +8.1.1. CALDAV:supported-vpoll-component-sets + + Name supported-vpoll-component-sets + + Namespace urn:ietf:params:xml:ns:caldav + + + +York, et al. Expires 31 January 2021 [Page 47] + +Internet-Draft VPOLL July 2020 + + + Purpose Specifies the calendar component types (e.g., VEVENT, VTODO, + etc.) and combination of types that may be included in a VPOLL + component. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND DAV:allprop request (as defined in [RFC2518]). + + Description The CALDAV:supported-vpoll-component-sets property is + used to specify restrictions on the calendar component types that + VPOLL components may contain in a calendar collection. + + It also specifies the combination of allowed component types. + + Any attempt by the client to store VPOLL components with component + types or combinations of types not listed in this property, if it + exists, MUST result in an error, with the "CALDAV:supported-vpoll- + component-sets" precondition Section 8.2 being violated. Since + this property is protected, it cannot be changed by clients using + a PROPPATCH request. However, clients can initialize the value of + this property when creating a new calendar collection with + MKCALENDAR. In the absence of this property, the server MUST + accept all component types, and the client can assume that all + component types are accepted. + + Definition + + + + + + Figure 22 + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 48] + +Internet-Draft VPOLL July 2020 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Figure 23 + +8.1.2. CALDAV:vpoll-max-items + + Name vpoll-max-items + + Namespace urn:ietf:params:xml:ns:caldav + + Purpose Provides a numeric value indicating the maximum number of + items that may be contained in any instance of a VPOLL calendar + object resource stored in the calendar collection. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND DAV:allprop request (as defined in [RFC2518]). + + Description The CALDAV:vpoll-max-items is used to specify a numeric + value that indicates the maximum number of iCalendar components in + any one instance of a VPOLL calendar object resource stored in a + calendar collection. Any attempt to store a calendar object + resource with more components per instance than this value MUST + + + +York, et al. Expires 31 January 2021 [Page 49] + +Internet-Draft VPOLL July 2020 + + + result in an error, with the CALDAV: vpoll-max-items precondition + Section 8.2 being violated. In the absence of this property, the + client can assume that the server can handle any number of items + in a VPOLL calendar component. + + Definition + + + PCDATA value: a numeric value (integer greater than zero) + + Figure 24 + + 25 + + Figure 25 + +8.1.3. CALDAV:vpoll-max-active + + Name vpoll-max-active + + Namespace urn:ietf:params:xml:ns:caldav + + Purpose Provides a numeric value indicating the maximum number of + active vpolls at any one time. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND DAV:allprop request (as defined in [RFC2518]). + + Description The CALDAV:vpoll-max-active is used to specify a numeric + value that indicates the maximum number of active VPOLLs at any + one time. Any attempt to store a new active VPOLL calendar object + resource which results in exceeding this limit MUST result in an + error, with the "CALDAV:vpoll-max-active" precondition Section 8.2 + being violated. In the absence of this property, the client can + assume that the server can handle any number of active VPOLLs. + + Definition + + + PCDATA value: a numeric value (integer greater than zero) + + Figure 26 + + 25 + + + + +York, et al. Expires 31 January 2021 [Page 50] + +Internet-Draft VPOLL July 2020 + + + Figure 27 + +8.1.4. CALDAV:vpoll-max-voters + + Name "vpoll-max-voters" + + Namespace "urn:ietf:params:xml:ns:caldav" + + Purpose Provides a numeric value indicating the maximum number of + voters for any instance of a VPOLL calendar object resource stored + in the calendar collection. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND "DAV:allprop" request (as defined in [RFC2518]). + + Description The "CALDAV:vpoll-max-voters" is used to specify a + numeric value that indicates the maximum number of voters for any + one instance of a VPOLL calendar object resource stored in a + calendar collection. Any attempt to store a calendar object + resource with more voters per instance than this value MUST result + in an error, with the CALDAV: "vpoll-max-voters" precondition + Section 8.2 being violated. In the absence of this property, the + client can assume that the server can handle any number of voters + in a VPOLL calendar component. + + Definition + + + PCDATA value: a numeric value (integer greater than zero) + + Figure 28 + + 25 + + Figure 29 + +8.1.5. CalDAV:even-more-properties + +8.1.6. Extensions to CalDAV scheduling + + This specification extends [RFC6638]. + + Each section of Appendix A "Scheduling Privileges Summary" is + extended to include VPOLL. + + + + + +York, et al. Expires 31 January 2021 [Page 51] + +Internet-Draft VPOLL July 2020 + + + Any reference to the ATTENDEE property should be read to include the + CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. + That is, for scheduling purposes the CALENDAR-ADDRESS property is + handled in exactly the same manner as the ATTENDEE property. + +8.2. Additional Preconditions for PUT, COPY, and MOVE + + 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: + + (CALDAV:supported-vpoll-component-sets) The VPOLL resource submitted + in the PUT request, or targeted by a COPY or MOVE request, MUST + contain a type or combination of calendar component that is + supported in the targeted calendar collection; + + (CALDAV:vpoll-max-items) The VPOLL resource submitted in the PUT + request, or targeted by a COPY or MOVE request, MUST have a number + of sub-components (excluding VTIMEZONE) less than or equal to the + value of the "CALDAV:vpoll-max-items" property value Section 8.1.2 + on the calendar collection where the resource will be stored; + + (CALDAV:vpoll-max-active) The PUT request, or COPY or MOVE request, + MUST not result in the number of active VPOLLs being greater than + the value of the "CALDAV:vpoll-max-active" property value + Section 8.1.3 on the calendar collection where the resource will + be stored; + + (CALDAV:vpoll-max-voters) The VPOLL resource submitted in the PUT + request, or targeted by a COPY or MOVE request, MUST have a number + of voters represented by PARTICIPANT components less than or equal + to the value of the "CALDAV:vpoll-max-voters" property value + Section 8.1.4 on the calendar collection where the resource will + be stored; + +8.3. CalDAV:calendar-query Report + + 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. + + + + +York, et al. Expires 31 January 2021 [Page 52] + +Internet-Draft VPOLL July 2020 + + +8.3.1. Example: Partial Retrieval of VPOLL + + 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. + + >> Request << + + REPORT /cyrus/work/ HTTP/1.1 + Host: cal.example.com + Depth: 1 + Content-Type: application/xml; charset="utf-8" + Content-Length: xxxx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 53] + +Internet-Draft VPOLL July 2020 + + + >> 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 + + + + + http://cal.example.com/cyrus/work/poll2.ics + + + "fffff-abcd2" + BEGIN:VCALENDAR + VERSION:2.0 + BEGIN:VPOLL + DTSTART;TZID=US/Eastern:20121202T120000 + DURATION:PT4D + SUMMARY:Poll #2 + UID:00959BC664CA650E933C892C@example.com + END:VPOLL + END:VCALENDAR + + + HTTP/1.1 200 OK + + + + http://cal.example.com/cyrus/work/poll3.ics + + + "fffff-abcd3" + 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 + + + HTTP/1.1 200 OK + + + +York, et al. Expires 31 January 2021 [Page 54] + +Internet-Draft VPOLL July 2020 + + + + + + + Figure 30 + +8.4. CalDAV time ranges + + "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 + + 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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 55] + +Internet-Draft VPOLL July 2020 + + + +-------------------------------------------------------------------+ + | 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 | + +---+---+---+---+---+-----------------------------------------------+ + + Figure 31 + +9. Security Considerations + + 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. + +10. IANA Considerations + + + + + + +York, et al. Expires 31 January 2021 [Page 56] + +Internet-Draft VPOLL July 2020 + + +10.1. Parameter Registrations + + This document defines the following new iCalendar property parameters + to be added to the registry defined in [RFC5545]: + + +--------------------+---------+---------------+ + | Property Parameter | Status | Reference | + +====================+=========+===============+ + | REQUIRED | Current | Section 5.4.1 | + +--------------------+---------+---------------+ + | STAY-INFORMED | Current | Section 5.4.2 | + +--------------------+---------+---------------+ + + Table 11 + +10.2. Property Registrations + + This document defines the following new iCalendar properties to be + added to the registry defined in [RFC5545]: + + +-----------------+---------+---------------+ + | Property | Status | Reference | + +=================+=========+===============+ + | ACCEPT-RESPONSE | Current | Section 5.5.7 | + +-----------------+---------+---------------+ + | POLL-ITEM-ID | Current | Section 5.5.3 | + +-----------------+---------+---------------+ + | POLL-MODE | Current | Section 5.5.4 | + +-----------------+---------+---------------+ + | POLL-PROPERTIES | Current | Section 5.5.5 | + +-----------------+---------+---------------+ + | POLL-WINNER | Current | Section 5.5.6 | + +-----------------+---------+---------------+ + | RESPONSE | Current | Section 5.5.8 | + +-----------------+---------+---------------+ + + Table 12 + +10.3. POLL-MODE Registration Template + + A poll mode is defined by completing the following template. + + Poll mode name The name of the poll mode. + + Purpose The purpose of the poll mode. Give a short but clear + description. + + Reference A reference to the RFC in which the poll mode is defined + + + +York, et al. Expires 31 January 2021 [Page 57] + +Internet-Draft VPOLL July 2020 + + +10.4. POLL-MODE Registrations + + This document defines the following registered poll modes. + + +-----------+---------------------------------------+-----------+ + | Poll mode | Purpose | Reference | + | name | | | + +===========+=======================================+===========+ + | BASIC | To provide simple voting for a single | Current | + | | outcome from a number of candidates. | | + +-----------+---------------------------------------+-----------+ + + Table 13 + +11. Normative references + + [RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. + Jensen, "HTTP Extensions for Distributed Authoring - + WEBDAV", IETF RFC 2518, IETF RFC 2518, + DOI 10.17487/RFC2518, February 1999, + . + + [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform + Resource Identifier (URI): Generic Syntax", IETF RFC 3986, + IETF RFC 3986, DOI 10.17487/RFC3986, January 2005, + . + + [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault, + "Calendaring Extensions to WebDAV (CalDAV)", IETF RFC + 4791, IETF RFC 4791, DOI 10.17487/RFC4791, March 2007, + . + + [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and + Scheduling Core Object Specification (iCalendar)", IETF + RFC 5545, IETF RFC 5545, DOI 10.17487/RFC5545, September + 2009, . + + [RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent + Interoperability Protocol (iTIP)", IETF RFC 5546, IETF RFC + 5546, DOI 10.17487/RFC5546, December 2009, + . + + [RFC6047] Melnikov, A., Ed., "iCalendar Message-Based + Interoperability Protocol (iMIP)", IETF RFC 6047, IETF RFC + 6047, DOI 10.17487/RFC6047, December 2010, + . + + + + + +York, et al. Expires 31 January 2021 [Page 58] + +Internet-Draft VPOLL July 2020 + + + [RFC6638] Daboo, C. and B. Desruisseaux, "Scheduling Extensions to + CalDAV", IETF RFC 6638, IETF RFC 6638, + DOI 10.17487/RFC6638, June 2012, + . + + [I-D.ietf-calext-eventpub-extensions] + Douglass, M., "Event Publishing Extensions to iCalendar", + IETF I-D.ietf-calext-eventpub-extensions, IETF I-D.ietf- + calext-eventpub-extensions, October 2019. + +12. Bibliography + +Appendix A. Open issues + + public-comment: Not documented and was a parameter on something. + Really sounds like a PARTICIPANT or VOTE property + + Notifications: Need to do a section on what Notifications to support. + A. VPOLL is about to end and you haven't voted on it yet. Instead + reuse VALARMS to notify the user? + + Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any events + booked as a result of confirmation. MUST winning event be cancelled + for POLL-MODE basic? No - voter has indicated now unable to attend - + want to revote + + Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. Requires + retention of VPOLL retention period Removed status + + ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create a + poll with a set of events where I am just the attendee of the events. + Are there any other restrictions for components in a VPOLL? Add to + security consideration + + Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event. + + Need to write down what isn't valid in a VPOLL a. Can't change POLL- + MODE + + Guide for ATTENDEE roles chair, NON-PARTICIPANT etc + + + +York, et al. Expires 31 January 2021 [Page 59] + +Internet-Draft VPOLL July 2020 + + + ? - some iTip notes On confirm - send itip if appropriate (PUBLISH) - + all non-participating - shared - feeds Organizer can specify where + result is? Confirm can specify that itip is sent - ITIP / NONE - + parameter ? on POLL-WINNER + + Need to add example of freebusy in response + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest + METHOD: REPLY + BEGIN:VPOLL + ORGANIZER:mailto:douglm@mysite.edu + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:eric@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T010000Z + SEQUENCE:0 + SUMMARY:What to do this week + BEGIN:VFREEBUSY + ....... + END:VFREEBUSY + END:PARTICIPANT + END:VPOLL + END:VCALENDAR + + Figure 32 + +Appendix B. Change log + + Calext V01: 2019-10-17 MD Replace VVOTER and VOTER with PARTICIPANT. + + Calext V00: 2019-05-17 MD First calext version. Moved source to + metanorma. No changes to specification. + + V03: 2014-10-28 MD * Add VVOTER and VOTE components. + + * Add RESPONSE property. + + * Remove RESPONSE parameter from VOTER. + + V03: 2014-05-12 MD * Add reply-url property and required parameter. + + * Fix ACCEPT-RESPONSE definition. + + V02: 2014-05-12 MD * Typos fixed, clarifications made. + + + + +York, et al. Expires 31 January 2021 [Page 60] + +Internet-Draft VPOLL July 2020 + + + * Removed spurious COMMENT param. Switched some + to PUBLIC-COMMENT + + * Changed STAY-INFORMED to remove boolean value + type and state explicit TRUE/FALSE values. + + * iTip: Allow VPOLL DTSTART to be optional and + allow VAVAILABILITY as subcomponent + + * iTip: fix broken table cells + + * Add POLL-PROPERTIES, POLL-WINNER to 5545 + extensions table + + * Added Caldav scheduling section + + V01: 2013-08-07 MD * Removed method CONFIRM + + * Removed pollitemid from VPOLL abnf. Added + text for pollwinner + + * Added POLL-WINNER and verbiage + + * Added STATUS values + + * Added RELTYPE=POLL + + * Added supported-vpoll-component-sets + + * Added CalDAV related parameters to VOTER + + * Removed bad CalDAV query example. State that + queries cannot target the sub-components. + + Initial version: 2012-11-02 MD + +Authors' Addresses + + Eric York + + Email: eyork@apple.com + + + Cyrus Daboo + + Email: cyrus@daboo.name + + + + + +York, et al. Expires 31 January 2021 [Page 61] + +Internet-Draft VPOLL July 2020 + + + Michael Douglass + + Email: mikeadouglass@gmail.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 31 January 2021 [Page 62] diff --git a/documents/draft-york-vpoll.xml b/documents/draft-york-vpoll.xml new file mode 100644 index 0000000..300a709 --- /dev/null +++ b/documents/draft-york-vpoll.xml @@ -0,0 +1,4859 @@ + + + +VPOLL: Consensus Scheduling Component for iCalendar +VPOLL +https://www.apple.com +draft-york-vpoll-05 +draft-york-vpoll-05 + + + + +Eric York + +eyork@apple.com + + + + + + +Cyrus Daboo + +cyrus@daboo.name + + + + + + +Michael Douglass + +mikeadouglass@gmail.com + + + + + +Internet Engineering Task Force +IETF + + + +2019-05-15 + +en + + +standard + + +2020 + + +Internet Engineering Task Force +IETF + + + + +IETF + + +standard + + +internet-draft +Internet +trust200902 +true + +yes + + + + +Foreword +

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+
+Acknowledgements +

The authors would like to thank the members of the Calendaring and Scheduling Consortium (CalConnect) for contributing their ideas and support.

+
+Introduction

The currently existing approach to agreeing on meeting times using +iTip and/or iMip has 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.

+Terms and definitions

For the purposes of this document, + the following terms and definitions apply.

+ + + +consensus scheduling +

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+
+ +active Vpoll +

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+
+ +voter +

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+Simple Consensus Scheduling

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+The VPOLL Component: An Overview

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+
+
DTSTAMP
+
+

The usual property.

+
+
SEQUENCE
+
+

The usual property. See below for SEQUENCE +behavior.

+
+
UID
+
+

The usual property.

+
+
ORGANIZER
+
+

The usual property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+
+
SUMMARY
+
+

The usual property. This optional but +recommended property provides the a short title to the poll.

+
+
DESCRIPTION
+
+

The usual property. This optional property +provides more details.

+
+
DTEND
+
+

The usual property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+
+
POLL-MODE
+
+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value "BASIC" +meaning one event will be chosen from the alternatives.

+
+
POLL-COMPLETION
+
+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is "SERVER-SUBMIT" which means the client chooses the winner +but the server will submit the winning choice.

+
+
POLL-PROPERTIES
+
+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value "DTSTART, LOCATION" meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+
+
PARTICIPANT
+
+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to "VOTER". The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+
+
VOTE
+
+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+
+
VEVENT
+
+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+
+

VPOLL with 3 voters and 3 alternative meetings:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD:REQUEST +BEGIN:VPOLL +POLL-MODE:BASIC +POLL-COMPLETION:SERVER-SUBMIT +POLL-PROPERTIES:DTSTART,LOCATION +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T000000Z +SUMMARY:What to do this week +DTEND:20120101T000000Z +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +END PARTICIPANT +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +END PARTICIPANT +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:mike@example.com +END PARTICIPANT +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 +
+

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.

+The VPOLL Alternative Choices: An Overview

Within the VPOLL component we have the alternatives to vote on. In +many respects these are standard components. For our +simple use case they are all VEVENT components. In addition to the +usual properties some extra properties are used for a +VPOLL.

+
+
POLL-ITEM-ID
+
+

This provides a unique reference to the sub-component +within the VPOLL. It's value SHOULD be a small integer.

+
+
+VPOLL responses

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 and components:

+
+
DTSTAMP
+
+

The usual property.

+
+
SEQUENCE
+
+

The usual property. See below for SEQUENCE +behavior.

+
+
UID
+
+

Same as the request.

+
+
ORGANIZER
+
+

Same as the request.

+
+
SUMMARY
+
+

Same as the request.

+
+
PARTICIPANT
+
+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+
+
VOTE
+
+

One per item being voted on.

+
+
POLL-ITEM-ID
+
+

One inside each VOTE component to identify the choice.

+
+
RESPONSE
+
+

One inside each VOTE component to specify the vote.

+
+
+

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.

+
+
NOTE
+
+

This is poll-mode specific behavior?

+
+
+

REPLY VPOLL from Cyrus:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SUMMARY:What to do this week +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+VPOLL updates

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: POLLSTATUS +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T020000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +BEGIN: VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+VPOLL Completion

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +"SUBMITTED".

+

VPOLL confirmation:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REQUEST +BEGIN:VPOLL +ORGANIZER:mailto:douglm@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T030000Z +COMPLETED:20120101T030000Z +POLL-COMPLETION:SERVER-SUBMIT +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 +
+Other Responses

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+iCalendar ExtensionsUpdated Participant Type Value

Participant type property values are defined in section 11.2.1. of +. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+partvalue /= "VOTER" + +
+
Description
+
+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+
+Updated Relation Type Value

Relationship parameter type values are defined in section 3.2.15. of +. 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.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+reltypeparam /= "RELTYPE" "=" "POLL" +; Property value is a VPOLL uid + +
+
Description
+
+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+
+Updated Status Value

Status property values are defined in section 3.8.1.11. of . +This specification updates that type to define valid VPOLL status +values.

+
+
Format Definition
+
+

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 + / "SUBMITTED" ; The winning item has been + ; submitted + / "CANCELLED" + +
+
Description
+
+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+
+
+
+New Property ParametersRequired
+
Parameter name
+
+

REQUIRED

+
+
Purpose
+
+

To specify whether the associated property is required in +the current context.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+requirededparam = "REQUIRED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + +
+
Description
+
+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+
+Stay-Informed
+
Parameter name
+
+

STAY-INFORMED

+
+
Purpose
+
+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+stayinformedparam = "STAY-INFORMED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + +
+
Description
+
+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+
+New PropertiesAccept-Response
+
Property name
+
+

ACCEPT-RESPONSE

+
+
Purpose
+
+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+

If this property is not present voters are only allowed to respond +to the choices in the request.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":" + iana-token ("," iana-token) CRLF + +acceptresponseparams = *(";" other-param) +
+Poll-Completion
+
Property name
+
+

POLL-COMPLETION

+
+
Purpose
+
+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+
+
Description
+

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

+
Format Definition
+
+

This property is defined by the following notation:

+
+
+poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF + +pcparam = *(";" other-param) + +pcvalue = "SERVER" ; The server is responsible for both choosing and + ; submitting the winner(s) + / "SERVER-SUBMIT" ; The server is responsible for + ; submitting the winner(s). The client chooses. + / "SERVER-CHOICE" ; The server is responsible for + ; choosing the winner(s). The client will submit. + / "CLIENT" ; The client is responsible for both choosing and + ; submitting the winner(s) + / iana-token + / x-name + ;Default is CLIENT + +
+
Example
+
+

The following is an example of this property:

+
+
+POLL-COMPLETION: SERVER-SUBMIT +
+Poll-Item-Id
+
Property name
+
+

POLL-ITEM-ID

+
+
Purpose
+
+

This property is used in VPOLL child components as an +identifier.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+
+
Description
+
+

In a METHOD:REQUEST each choice 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.

+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollitemid = "POLL-ITEM-ID" pollitemdparams ":" + integer CRLF + +pollitemidparams = *( + (";" other-param) + ) +
+Poll-Mode
+
Property name
+
+

POLL-MODE

+
+
Purpose
+
+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component or +its sub-components.

+
+
Description
+
+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollmode = "POLL-MODE" pollmodeparams ":" + ("BASIC" / iana-token / other-token) CRLF + +pollmodeparams = *(";" other-param) +
+Poll-properties
+
Property name
+
+

POLL-PROPERTIES

+
+
Purpose
+
+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollproperties = "POLL-PROPERTIES" pollpropparams ":" + text *("," text) CRLF + +pollpropparams = *(";" other-param) +
+Poll-Winner
+
Property name
+
+

POLL-WINNER

+
+
Purpose
+
+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+
+
Format Definition
+
+

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 +
+Reply-URL
+
Property name
+
+

REPLY-URL

+
+
Purpose
+
+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+
+
Property Parameters
+
+

Non-standard, required or iana parameters can +be specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF + +reply-urlparams = *( + (";" requiredparam) / + (";" other-param) + ) +
+Response
+
Property name
+
+

RESPONSE

+
+
Purpose
+
+

To specify a response vote.

+
+
Value type
+
+

INTEGER

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+response = "RESPONSE" response-params ":" integer CRLF + ; integer value 0..100 + +responseparams = *(";" other-param) + +
+
Description
+
+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
    +
  • +

    0 - 39 A "NO vote"

    +
  • +
  • +

    40 - 79 A "MAYBE" vote

    +
  • +
  • +

    80 - 89 A "YES - but not preferred vote"

    +
  • +
  • +

    90-100 A "YES" vote.

    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
  • +
+
+
+New ComponentsVPOLL Component
+
Component name
+
+

VPOLL

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollc = "BEGIN" ":" "VPOLL" CRLF + pollprop + *participantc *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 / 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 / + ; + ) + +
+
Description
+

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting - both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+

If specified, the "DTSTART" property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+

If "DTSTART" is present "DURATION" MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+

"DTEND" MAY be specified with or without "DTSTART" and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+
+VOTE Component
+
Component name
+
+

VOTE

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Conformance
+
+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+votec = "BEGIN" ":" "VOTE" CRLF + voteprop + *eventc *todoc *journalc *freebusyc + *availabilityc *alarmc *iana-comp *x-comp + "END" ":" "VOTE" CRLF + +voteprop = *( + ; + ; The following are REQUIRED, + ; but MUST NOT occur more than once. + ; + pollitemid / response / + ; + ; The following are OPTIONAL, + ; and MAY occur more than once. + ; + comment / x-prop / iana-prop + ; + ) + +
+
Description
+

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER - such as the respondees +availability.

+
+Poll Modes

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see ) in a published RFC.

+POLL-MODE:BASIC

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.

+Property restrictions

This poll mode has the following property requirements:

+
+
POLL-ITEM-ID
+
+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+
+
POLL-WINNER
+
+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+
+Outcome reporting

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+iTIP Extensions

This specification introduces a number of extensions to . +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.

+Methods

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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 PARTICIPANTS.

+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+ + + + + + + + + + + + + + + + + +
OriginatorMethods
+

Organizer

+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+

Voter

+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+Interoperability Models

Most of the standard iTip specification applies with respect to +organizer and voters.

+ +Delegation +

TBD

+
+ +Acting on Behalf of Other Calendar Users +

TBD

+
+ +Component Revisions +
    +
  • +

    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

    +
  • +
+
+ +Message Sequencing +

TBD

+
+Application Protocol ElementsMethods for VPOLL Calendar Components

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 ValueDescription
+

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.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+

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 PARTICIPANT.

+
+Method: PUBLISH

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.

+
+
Note
+
+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+ +Constraints for a METHOD:PUBLISH of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal PUBLISH.

+
+

VPOLL

+
+

1+

+
+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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+

+
+
+

PARTICIPANT

+
+

0+

+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to "VOTER" - that is, no voters

+
+

REQUEST-STATUS

+
+

0

+
+
+

VALARM

+
+

0+

+
+
+

VEVENT

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+
+

X-COMPONENT

+
+

0+

+
+
+Method: REQUEST

The "REQUEST" method in a "VPOLL" component provides the following +scheduling functions:

+
    +
  • +

    Invite "Voters" to respond to the poll.

    +
  • +
  • +

    Change the items being voted upon.

    +
  • +
  • +

    Complete or confirm the poll.

    +
  • +
  • +

    Response to a "REFRESH" request.

    +
  • +
  • +

    Update the details of an existing vpoll.

    +
  • +
  • +

    Update the status of "Voters".

    +
  • +
  • +

    Forward a "VPOLL" to another uninvited CU.

    +
  • +
  • +

    For an existing "VPOLL" calendar component, delegate the role of +"Voter" to another CU.

    +
  • +
  • +

    For an existing "VPOLL" calendar component, change the role of +"Organizer" to another CU.

    +
  • +
+

The "Organizer" originates the "REQUEST". The recipients of the +"REQUEST" method are the CUs voting in the poll, the "Voters". +"Voters" use the "REPLY" method to convey votes to 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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REQUEST.

+
+

VPOLL

+
+

1

+
+
+

PARTICIPANT

+
+

1+

+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+ +Rescheduling a poll +

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.

+
+Updating or Reconfirmation of a 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 a "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.

+ +Confirmation of a 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.

+
+ +Closing a Poll +

The "REQUEST" method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+Delegating a Poll to Another CU

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".

+ +Changing 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".

+
+ +Sending on Behalf of the 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".

+
+Forwarding to an Uninvited CU

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 a "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.

+ +Updating Voter Status +

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 "RSVP=TRUE" property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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".

+
+Method: REPLY

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" "CALENDAR-ADDRESS" +property. The "Delegate" SHOULD include the calendar address of the +"Delegator" on the "DELEGATED-FROM" property parameter of the +"Delegate's" "CALENDAR-ADDRESS" 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".

+

A "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. (But see comments on VFREEBUSY and VAVAILABILITY)

+

This method type is an iCalendar object that conforms to the +following property constraints:

+ +Constraints for a METHOD:REPLY of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REPLY.

+
+

VPOLL

+
+

1+

+
+

All components MUST have the same

+
+ + +

UID.

+
+

PARTICIPANT

+
+

1

+
+

Identifies 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 or 1

+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+

VAVAILABILITY

+
+

0

+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+

VJOURNAL

+
+

0

+
+
+

VTODO

+
+

0

+
+
+Method: CANCEL

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 .

+

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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be CANCEL.

+
+

VPOLL

+
+

1+

+
+

All must have the same UID.

+
+

PARTICIPANT

+
+

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

+
+
+

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

+
+
+Method: REFRESH

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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REFRESH.

+
+

VPOLL

+
+

1

+
+
+

PARTICIPANT

+
+

1

+
+

MUST identify the requester as a voter.

+
+

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

+
+
+Method: POLLSTATUS

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. All "Voters" MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal POLLSTATUS.

+
+

VPOLL

+
+

1+

+
+
+

PARTICIPANT

+
+

1+

+
+

The voters containing their current vote

+
+

COMPLETED

+
+

0 or 1

+
+

Only present for a completed poll

+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 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

+
+
+

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 SHOULD NOT be present.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTODO

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+
+

X-COMPONENT

+
+

0+

+
+
+CalDAV Extensions

This specification extends in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports.

+

Additionally, it extends as it a VPOLL component is a +schedulable entity.

+Calendar Collection Properties

This section defines new CalDAV properties for calendar collections.

+CALDAV:supported-vpoll-component-sets
+
Name
+
+

supported-vpoll-component-sets

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

It also specifies the combination of allowed component types.

+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-items
+
Name
+
+

vpoll-max-items

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+
+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-active
+
Name
+
+

vpoll-max-active

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+
+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-voters
+
Name
+
+

+vpoll-max-voters +

+
+
Namespace
+
+

+urn:ietf:params:xml:ns:caldav +

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+
+
Definition
+
+
+<!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> +
+ +CalDAV:even-more-properties + +Extensions to CalDAV scheduling

This specification extends .

+

Each section of Appendix A "Scheduling Privileges Summary" is +extended to include VPOLL.

+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+Additional Preconditions for PUT, COPY, and MOVE

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:

+
+
(CALDAV:supported-vpoll-component-sets)
+
+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+
+
(CALDAV:vpoll-max-items)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value +on the calendar collection where the resource will be stored;

+
+
(CALDAV:vpoll-max-active)
+
+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value + on the calendar collection where the resource will +be stored;

+
+
(CALDAV:vpoll-max-voters)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value on the +calendar collection where the resource will be stored;

+
+
+CalDAV:calendar-query Report

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.

+Example: Partial Retrieval of VPOLL

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.

+>> 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:VPOLL +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> +
+CalDAV time ranges

"CALDAV:time-range XML Element" in 9.9 describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends to +describe the meaning of time ranges for VPOLL

+

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.

++-------------------------------------------------------------------+ +| 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 | ++---+---+---+---+---+-----------------------------------------------+ +
+ +Security Considerations +

Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See for a +discussion of the security considerations relating to URIs.

+
+IANA ConsiderationsParameter Registrations

This document defines the following new iCalendar property parameters +to be added to the registry defined in 8.2.4:

+ + + + + + + + + + + + + + + + + + + + +
Property ParameterStatusReference
+

REQUIRED

+
+

Current

+
+

+ +

+
+

STAY-INFORMED

+
+

Current

+
+

+ +

+
+Property Registrations

This document defines the following new iCalendar properties to be +added to the registry defined in 8.2.3:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyStatusReference
+

ACCEPT-RESPONSE

+
+

Current

+
+

+ +

+
+

POLL-ITEM-ID

+
+

Current

+
+

+ +

+
+

POLL-MODE

+
+

Current

+
+

+ +

+
+

POLL-PROPERTIES

+
+

Current

+
+

+ +

+
+

POLL-WINNER

+
+

Current

+
+

+ +

+
+

RESPONSE

+
+

Current

+
+

+ +

+
+POLL-MODE Registration Template

A poll mode is defined by completing the following template.

+
+
Poll mode name
+
+

The name of the poll mode.

+
+
Purpose
+
+

The purpose of the poll mode. Give a short but clear +description.

+
+
Reference
+
+

A reference to the RFC in which the poll mode is defined

+
+
+POLL-MODE Registrations

This document defines the following registered poll modes.

+ + + + + + + + + + + + + + + +
Poll mode namePurposeReference
+

BASIC

+
+

To provide simple voting for a single outcome from a number of candidates.

+
+

Current

+
+ + + + +
Open issues

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+

Notifications: Need to do a section on what Notifications to + support.
+ A. VPOLL is about to end and you haven't voted on it yet. + Instead reuse VALARMS to notify the user?

+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No - voter + has indicated now unable to attend - want to revote

+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+

Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event.

+

Need to write down what isn't valid in a VPOLL
+ a. Can't change POLL-MODE

+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+

? - some iTip notes On confirm - send itip if appropriate (PUBLISH) + - all non-participating - shared - feeds + Organizer can specify where result is? + Confirm can specify that itip is sent - ITIP / NONE - parameter ? + on POLL-WINNER

+

Need to add example of freebusy in response

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:douglm@mysite.edu +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:VFREEBUSY +....... +END:VFREEBUSY +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+Change log +
+
Calext V01: 2019-10-17 MD
+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+
Calext V00: 2019-05-17 MD
+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+
V03: 2014-10-28 MD
+
+
    +
  • +

    Add VVOTER and VOTE components.

    +
  • +
  • +

    Add RESPONSE property.

    +
  • +
  • +

    Remove RESPONSE parameter from VOTER.

    +
  • +
+
+
V03: 2014-05-12 MD
+
+
    +
  • +

    Add reply-url property and required parameter.

    +
  • +
  • +

    Fix ACCEPT-RESPONSE definition.

    +
  • +
+
+
V02: 2014-05-12 MD
+
+
    +
  • +

    Typos fixed, clarifications made.

    +
  • +
  • +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
  • +
  • +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
  • +
  • +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
  • +
  • +

    iTip: fix broken table cells

    +
  • +
  • +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
  • +
  • +

    Added Caldav scheduling section

    +
  • +
+
+
V01: 2013-08-07 MD
+
+
    +
  • +

    Removed method CONFIRM

    +
  • +
  • +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
  • +
  • +

    Added POLL-WINNER and verbiage

    +
  • +
  • +

    Added STATUS values

    +
  • +
  • +

    Added RELTYPE=POLL

    +
  • +
  • +

    Added supported-vpoll-component-sets

    +
  • +
  • +

    Added CalDAV related parameters to VOTER

    +
  • +
  • +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
  • +
+
+
Initial version: 2012-11-02 MD
+
+
+
Normative references 2020-07-16 HTTP Extensions for Distributed Authoring — WEBDAV https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2518.xml https://www.rfc-editor.org/info/rfc2518 RFC 2518 RFC2518 10.17487/RFC2518 1999-02 Y. Goland Internet Engineering Task Force IETF E. Whitehead Internet Engineering Task Force IETF A. Faizi Internet Engineering Task Force IETF S. Carter Internet Engineering Task Force IETF D. Jensen Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document specifies a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, namespace manipulation, and resource locking (collision avoidance). [STANDARDS-TRACK] RFC 2518 Fremont, CA 2020-07-16 Uniform Resource Identifier (URI): Generic Syntax https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml https://www.rfc-editor.org/info/rfc3986 RFC 3986 RFC3986 10.17487/RFC3986 2005-01 T. Berners-Lee Internet Engineering Task Force IETF R. Fielding Internet Engineering Task Force IETF L. Masinter Internet Engineering Task Force IETF Internet Engineering Task Force IETF en A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK] STD 66 RFC 3986 Fremont, CA 2020-07-16 Calendaring Extensions to WebDAV (CalDAV) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4791.xml https://www.rfc-editor.org/info/rfc4791 RFC 4791 RFC4791 10.17487/RFC4791 2007-03 C. Daboo Internet Engineering Task Force IETF B. Desruisseaux Internet Engineering Task Force IETF L. Dusseault Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing calendaring and scheduling information based on the iCalendar format. This document defines the "calendar-access" feature of CalDAV. [STANDARDS-TRACK] RFC 4791 Fremont, CA 2020-07-16 Internet Calendaring and Scheduling Core Object Specification (iCalendar) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5545.xml https://www.rfc-editor.org/info/rfc5545 RFC 5545 RFC5545 10.17487/RFC5545 2009-09 B. Desruisseaux Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK] RFC 5545 Fremont, CA 2020-07-16 iCalendar Transport-Independent Interoperability Protocol (iTIP) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5546.xml https://www.rfc-editor.org/info/rfc5546 RFC 5546 RFC5546 10.17487/RFC5546 2009-12 C. Daboo Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document specifies a protocol that uses the iCalendar object specification to provide scheduling interoperability between different calendaring systems. This is done without reference to a specific transport protocol so as to allow multiple methods of communication between systems. Subsequent documents will define profiles of this protocol that use specific, interoperable methods of communication between systems.The iCalendar Transport-Independent Interoperability Protocol (iTIP) complements the iCalendar object specification by adding semantics for group scheduling methods commonly available in current calendaring systems. These scheduling methods permit two or more calendaring systems to perform transactions such as publishing, scheduling, rescheduling, responding to scheduling requests, negotiating changes, or canceling. [STANDARDS-TRACK] RFC 5546 Fremont, CA 2020-07-16 iCalendar Message-Based Interoperability Protocol (iMIP) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6047.xml https://www.rfc-editor.org/info/rfc6047 RFC 6047 RFC6047 10.17487/RFC6047 2010-12 A. Melnikov Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document, "iCalendar Message-Based Interoperability Protocol (iMIP)", specifies a binding from the iCalendar Transport-independent Interoperability Protocol (iTIP) to Internet email-based transports. Calendaring entries defined by the iCalendar Object Model (iCalendar) are wrapped using constructs from RFC 5322 and MIME (RFC 2045, RFC 2046, RFC 2047, and RFC 2049), and then transported over SMTP. [STANDARDS-TRACK] RFC 6047 Fremont, CA 2020-07-16 Scheduling Extensions to CalDAV https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6638.xml https://www.rfc-editor.org/info/rfc6638 RFC 6638 RFC6638 10.17487/RFC6638 2012-06 C. Daboo Internet Engineering Task Force IETF B. Desruisseaux Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines extensions to the Calendaring Extensions to WebDAV (CalDAV) "calendar-access" feature to specify a standard way of performing scheduling operations with iCalendar-based calendar components. This document defines the "calendar-auto-schedule" feature of CalDAV. [STANDARDS-TRACK] RFC 6638 Fremont, CA 2020-07-30 Event Publishing Extensions to iCalendar https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-calext-eventpub-extensions.xml http://www.ietf.org/internet-drafts/draft-ietf-calext-eventpub-extensions-15.txt http://www.ietf.org/internet-drafts/draft-ietf-calext-eventpub-extensions-15.pdf I-D.ietf-calext-eventpub-extensions I-D.ietf-calext-eventpub-extensions draft-ietf-calext-eventpub-extensions-15 2019-10 Michael Douglass Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This specification updates RFC5545 by introducing a number of new iCalendar properties and components which are of particular use for event publishers and in social networking. This specification also defines a new STRUCTURED-DATA property for iCalendar RFC5545 to allow for data that is directly pertinent to an event or task to be included with the calendar data. Internet-Draft draft-ietf-calext-eventpub-extensions-15 Fremont, CA +Bibliography + +
diff --git a/documents/metadata.min.js b/documents/metadata.min.js new file mode 100644 index 0000000..e07b59f --- /dev/null +++ b/documents/metadata.min.js @@ -0,0 +1 @@ +async function addMetadata(){try{const e=document.styleSheets[0].cssRules;for(let t=0;t=0?document.URL.replace(/html$/,"json"):document.URL+".json";const o=await fetch(t);a=await o.json()}}if(!a)return;e.style.display="block";const s="",d="https://datatracker.ietf.org/doc",n="https://datatracker.ietf.org/ipr/search",c="https://www.rfc-editor.org/info",l=a.doc_id.toLowerCase(),i=a.doc_id.slice(0,3).toLowerCase(),f=a.doc_id.slice(3).replace(/^0+/,""),u={status:"Status",obsoletes:"Obsoletes",obsoleted_by:"Obsoleted By",updates:"Updates",updated_by:"Updated By",see_also:"See Also",errata_url:"Errata"};let h="
";["status","obsoletes","obsoleted_by","updates","updated_by","see_also","errata_url"].forEach(e=>{if("status"==e){a[e]=a[e].toLowerCase();var t=a[e].split(" "),o=t.length,w="",p=1;for(let e=0;e"+a[e][t].slice(3)+", ":m+""+a[e][t].slice(3)+"",b++);a[e]=m}else if("see_also"==e){var y,L="",C=1;y=a[e].length;for(let t=0;t"+_+" "+v+", ":L+""+v+", ":"RFC"!=_?L+""+_+" "+v+"":L+""+v+"",C++}a[e]=L}else if("errata_url"==e){var R="";R=a[e]?R+"Errata exist | Datatracker| IPR | Info page":"Datatracker | IPR | Info page",a[e]=R}""!=a[e]?"Errata"==u[e]?h+=`
More info:
${a[e]}
`:h+=`
${u[e]}:
${a[e]}
`:"Errata"==u[e]&&(h+=`
More info:
${a[e]}
`)}),h+="
",e.innerHTML=h}catch(e){console.log(e)}else console.log("Could not locate metadata
element");function r(e){return e.charAt(0).toUpperCase()+e.slice(1)}}window.removeEventListener("load",addMetadata),window.addEventListener("load",addMetadata); \ No newline at end of file diff --git a/metanorma.release.yml b/metanorma.release.yml new file mode 100644 index 0000000..8148f4d --- /dev/null +++ b/metanorma.release.yml @@ -0,0 +1,4 @@ +documents: + - source: sources/cc-51006.adoc + - source: sources/draft-ietf-calext-vpoll.adoc + - source: sources/draft-york-vpoll.adoc diff --git a/sources/cc-51006.html b/sources/cc-51006.html new file mode 100644 index 0000000..a51bc8b --- /dev/null +++ b/sources/cc-51006.html @@ -0,0 +1,3560 @@ + + + + Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component + + + + + + + + + + + + + + + + +
+

Committee Draft

+
+ +
+

CalConnect Standard

+
+ +
+ +
+ + +
+
+ +
+
+ CC/CD 51006:2018 + +
+ +
+ Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component + +
+
+ + + +
+ TC FREEBUSY +
+ + + + + +
+ +
+ + + Eric YorkAuthor + + Cyrus DabooAuthor + + Michael DouglassAuthor + +
+ +
+ + +
+
+ +
+
+ CalConnect Standard +
+ +
+ Committee Draft +
+ + +
+
+

Warning for Drafts

+ +

This document is not a CalConnect Standard. It is distributed for review and + comment, and is subject to change without notice and may not be referred to as + a Standard. Recipients of this draft are invited to submit, with their + comments, notification of any relevant patent rights of which they are aware + and to provide supporting documentation. +

+
+
+
+ + + + +
+
+
+
+ +

 

+
+
+ +
+
+
+ + + + + + + + + +
+
+
+

Foreword

+

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+

The Calendaring and Scheduling Consortium (“CalConnect”) is a global +non-profit organization with the aim to facilitate interoperability of +collaborative technologies and tools through open standards.

+

CalConnect works closely with international and regional partners, +of which the full list is available on our website +(https://www.calconnect.org/about/liaisons-and-relationships).

+

The procedures used to develop this document and those intended for its +further maintenance are described in the CalConnect Directives.

+

In particular the different approval criteria needed for the different +types of CalConnect documents should be noted. This document was drafted in +accordance with the editorial rules of the CalConnect Directives.

+

Attention is drawn to the possibility that some of the elements of this +document may be the subject of patent rights. CalConnect shall not be +held responsible for identifying any or all such patent rights. Details +of any patent rights identified during the development of the document +will be provided in the Introduction.

+

Any trade name used in this document is information given for the +convenience of users and does not constitute an endorsement.

+

This document was prepared by Technical Committee +FREEBUSY.

+
+
+
+

Introduction

+

The currently existing approach to agreeing on meeting times using +iTip RFC 5546 and/or iMip RFC 6047 has 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.

+
+

Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component

+
+

1.  Scope

+

This document provides a mechanism in iCalendar for consensus scheduling.

+
+

2.  Normative references

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

IETF RFC 2518, HTTP Extensions for Distributed Authoring — WEBDAV

IETF RFC 3986, Uniform Resource Identifier (URI): Generic Syntax

IETF RFC 4791, Calendaring Extensions to WebDAV (CalDAV)

IETF RFC 5545, Internet Calendaring and Scheduling Core Object Specification (iCalendar)

IETF RFC 5546, iCalendar Transport-Independent Interoperability Protocol (iTIP)

IETF RFC 6047, iCalendar Message-Based Interoperability Protocol (iMIP)

IETF RFC 6638, Scheduling Extensions to CalDAV

IETF IETF I-D.draft-ietf-calext-eventpub-extensions, AUTOFILL

+

3.  Terms and definitions

For the purposes of this document, + the following terms and definitions apply.

3.1. 

consensus scheduling

+ +

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+

3.2. 

active Vpoll

+ +

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+

3.3. 

voter

+ +

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+
+

4.  Simple Consensus Scheduling

+

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+

4.1.  The VPOLL Component: An Overview

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+

DTSTAMP

+

The usual RFC 5545 property.

+

SEQUENCE

+

The usual RFC 5545 property. See below for SEQUENCE +behavior.

+

UID

+

The usual RFC 5545 property.

+

ORGANIZER

+

The usual RFC 5545 property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+

SUMMARY

+

The usual RFC 5545 property. This optional but +recommended property provides the a short title to the poll.

+

DESCRIPTION

+

The usual RFC 5545 property. This optional property +provides more details.

+

DTEND

+

The usual RFC 5545 property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+

POLL-MODE

+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value “BASIC” +meaning one event will be chosen from the alternatives.

+

POLL-COMPLETION

+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is “SERVER-SUBMIT” which means the client chooses the winner +but the server will submit the winning choice.

+

POLL-PROPERTIES

+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value “DTSTART, LOCATION” meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+

PARTICIPANT

+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to “VOTER”. The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+

VOTE

+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+

VEVENT

+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+

EXAMPLE

VPOLL with 3 voters and 3 alternative meetings:

+
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD:REQUEST
BEGIN:VPOLL
POLL-MODE:BASIC
POLL-COMPLETION:SERVER-SUBMIT
POLL-PROPERTIES:DTSTART,LOCATION
ORGANIZER:mailto:mike@example.com
UID:sched01-1234567890
DTSTAMP:20120101T000000Z
SUMMARY:What to do this week
DTEND:20120101T000000Z
BEGIN: PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:cyrus@example.com
END PARTICIPANT
BEGIN: PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:eric@example.com
END PARTICIPANT
BEGIN: PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:mike@example.com
END PARTICIPANT
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
+
+

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.

+

4.2.  The VPOLL Alternative Choices: An Overview

Within the VPOLL component we have the alternatives to vote on. In +many respects these are standard RFC 5545 components. For our +simple use case they are all VEVENT components. In addition to the +usual RFC 5545 properties some extra properties are used for a +VPOLL.

+

POLL-ITEM-ID

+

This provides a unique reference to the sub-component +within the VPOLL. It’s value SHOULD be a small integer.

+
+

4.3.  VPOLL responses

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 and components:

+

DTSTAMP

+

The usual RFC 5545 property.

+

SEQUENCE

+

The usual RFC 5545 property. See below for SEQUENCE +behavior.

+

UID

+

Same as the request.

+

ORGANIZER

+

Same as the request.

+

SUMMARY

+

Same as the request.

+

PARTICIPANT

+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+

VOTE

+

One per item being voted on.

+

POLL-ITEM-ID

+

One inside each VOTE component to identify the choice.

+

RESPONSE

+

One inside each VOTE component to specify the vote.

+
+

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.

+

NOTE

+

This is poll-mode specific behavior?

+
+

EXAMPLE

REPLY VPOLL from Cyrus:

+
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD: REPLY
BEGIN:VPOLL
ORGANIZER:mailto:mike@example.com
UID:sched01-1234567890
DTSTAMP:20120101T010000Z
SUMMARY:What to do this week
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:cyrus@example.com
BEGIN:VOTE
POLL-ITEM-ID:1
RESPONSE:50
COMMENT:Work on iTIP
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:2
RESPONSE:100
COMMENT:Work on WebDAV
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:3
RESPONSE:0
END:VOTE
END:PARTICIPANT
END:VPOLL
END:VCALENDAR
+
+

4.4.  VPOLL updates

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+

EXAMPLE

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD: POLLSTATUS
BEGIN:VPOLL
ORGANIZER:mailto:mike@example.com
UID:sched01-1234567890
DTSTAMP:20120101T020000Z
SEQUENCE:0
SUMMARY:What to do this week
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:cyrus@example.com
BEGIN: VOTE
POLL-ITEM-ID:1
RESPONSE:50
COMMENT:Work on iTIP
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:2
RESPONSE:100
COMMENT:Work on WebDAV
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:3
RESPONSE:0
END:VOTE
END:PARTICIPANT
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:eric@example.com
BEGIN:VOTE
POLL-ITEM-ID:1
RESPONSE:100
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:2
RESPONSE:100
END:VOTE
BEGIN:VOTE
POLL-ITEM-ID:3
RESPONSE:0
END:VOTE
END:PARTICIPANT
END:VPOLL
END:VCALENDAR
+
+

4.5.  VPOLL Completion

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +“SUBMITTED”.

+

EXAMPLE

VPOLL confirmation:

+
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example//Example
METHOD: REQUEST
BEGIN:VPOLL
ORGANIZER:mailto:douglm@example.com
UID:sched01-1234567890
DTSTAMP:20120101T030000Z
COMPLETED:20120101T030000Z
POLL-COMPLETION:SERVER-SUBMIT
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
+
+

4.6.  Other Responses

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+
+
+

5.  iCalendar Extensions

+

5.1.  Updated Participant Type Value

Participant type property values are defined in section 11.2.1. of +IETF I-D.draft-ietf-calext-eventpub-extensions. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+

Format Definition

+

This property parameter is redefined by the following notation:

+
+
partvalue       /= "VOTER"

Figure 1

+ +

Description

+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+

5.2.  Updated Relation Type Value

Relationship parameter type values are defined in section 3.2.15. of +RFC 5545. 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.

+

Format Definition

+

This property parameter is redefined by the following notation:

+
+
reltypeparam       /= "RELTYPE" "=" "POLL"
; Property value is a VPOLL uid

Figure 2

+ +

Description

+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+

5.3.  Updated Status Value

Status property values are defined in section 3.8.1.11. of RFC 5545. +This specification updates that type to define valid VPOLL status +values.

+

Format Definition

+

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
          / "SUBMITTED"  ; The winning item has been
                         ; submitted
          / "CANCELLED"

Figure 3

+ +

Description

+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+

Figure 4

+
+

5.4.  New Property Parameters

5.4.1.  Required

Parameter name

+

REQUIRED

+

Purpose

+

To specify whether the associated property is required in +the current context.

+

Format Definition

+

This parameter is defined by the following notation:

+
+
requirededparam = "REQUIRED"  "=" ("TRUE" / "FALSE")
  ; Default is FALSE

Figure 5

+ +

Description

+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+

5.4.2.  Stay-Informed

Parameter name

+

STAY-INFORMED

+

Purpose

+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+

Format Definition

+

This parameter is defined by the following notation:

+
+
stayinformedparam = "STAY-INFORMED"  "=" ("TRUE" / "FALSE")
                  ; Default is FALSE

Figure 6

+ +

Description

+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+

5.5.  New Properties

5.5.1.  Accept-Response

Property name

+

ACCEPT-RESPONSE

+

Purpose

+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+

Property Parameters

+

Non-standard or iana parameters can be +specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+

If this property is not present voters are only allowed to respond +to the choices in the request.

+

Format Definition

+

This property is defined by the following notation:

+
+
acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":"
                    iana-token ("," iana-token) CRLF

acceptresponseparams = *(";" other-param)

Figure 7

+
+

5.5.2.  Poll-Completion

Property name

+

POLL-COMPLETION

+

Purpose

+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+

Description

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

Format Definition

+

This property is defined by the following notation:

+
+
poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF

pcparam = *(";" other-param)

pcvalue = "SERVER"  ; The server is responsible for both choosing and
                   ; submitting the winner(s)
        / "SERVER-SUBMIT" ; The server is responsible for
                   ; submitting the winner(s). The client chooses.
        / "SERVER-CHOICE"  ; The server is responsible for
                   ; choosing the winner(s). The client will submit.
        / "CLIENT" ; The client is responsible for both choosing and
                   ; submitting the winner(s)
        / iana-token
        / x-name
        ;Default is CLIENT

Figure 8

+ +

Example

+

The following is an example of this property:

+
+
POLL-COMPLETION: SERVER-SUBMIT

Figure 9

+
+

5.5.3.  Poll-Item-Id

Property name

+

POLL-ITEM-ID

+

Purpose

+

This property is used in VPOLL child components as an +identifier.

+

Value type

+

INTEGER

+

Property Parameters

+

Non-standard parameters can be specified on +this property.

+

Conformance

+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+

Description

+

In a METHOD:REQUEST each choice 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.

+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+

Format Definition

+

This property is defined by the following notation:

+
+
pollitemid = "POLL-ITEM-ID" pollitemdparams ":"
                  integer CRLF

pollitemidparams = *(
                   (";" other-param)
            )

Figure 10

+
+

5.5.4.  Poll-Mode

Property name

+

POLL-MODE

+

Purpose

+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+

Property Parameters

+

Non-standard or iana parameters can be +specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component or +its sub-components.

+

Description

+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+

Format Definition

+

This property is defined by the following notation:

+
+
pollmode = "POLL-MODE" pollmodeparams ":"
             ("BASIC" / iana-token / other-token) CRLF

pollmodeparams = *(";" other-param)

Figure 11

+
+

5.5.5.  Poll-properties

Property name

+

POLL-PROPERTIES

+

Purpose

+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+

Property Parameters

+

Non-standard or iana parameters can be +specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+

Format Definition

+

This property is defined by the following notation:

+
+
pollproperties = "POLL-PROPERTIES" pollpropparams ":"
             text *("," text) CRLF

pollpropparams = *(";" other-param)

Figure 12

+
+

5.5.6.  Poll-Winner

Property name

+

POLL-WINNER

+

Purpose

+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+

Value type

+

INTEGER

+

Property Parameters

+

Non-standard parameters can be specified on +this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+

Format Definition

+

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

Figure 13

+
+

5.5.7.  Reply-URL

Property name

+

REPLY-URL

+

Purpose

+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+

Property Parameters

+

Non-standard, required or iana parameters can +be specified on this property.

+

Conformance

+

This property MAY be specified in a VPOLL component.

+

Description

+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+

Format Definition

+

This property is defined by the following notation:

+
+
reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF

reply-urlparams = *(
                  (";" requiredparam) /
                  (";" other-param)
                  )

Figure 14

+
+

5.5.8.  Response

Property name

+

RESPONSE

+

Purpose

+

To specify a response vote.

+

Value type

+

INTEGER

+

Format Definition

+

This property is defined by the following notation:

+
+
response = "RESPONSE" response-params ":" integer CRLF
                 ; integer value 0..100

responseparams = *(";" other-param)

Figure 15

+ +

Description

+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
    +
  • +

    0 — 39 A “NO vote”

    +
  • +
  • +

    40 — 79 A “MAYBE” vote

    +
  • +
  • +

    80 — 89 A “YES — but not preferred vote”

    +
  • +
  • +

    90-100 A “YES” vote.

    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
  • +
+
+

5.6.  New Components

5.6.1.  VPOLL Component

Component name

+

VPOLL

+

Purpose

+

This component provides a mechanism by which voters can +vote on provided choices.

+

Format Definition

+

This property is defined by the following notation:

+
+
pollc    = "BEGIN" ":" "VPOLL" CRLF
            pollprop
            *participantc *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 / 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 /
          ;
          )

Figure 16

+ +

Description

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting — both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+

If specified, the “DTSTART” property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+

If “DTSTART” is present “DURATION” MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+

“DTEND” MAY be specified with or without “DTSTART” and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+

5.6.2.  VOTE Component

Component name

+

VOTE

+

Purpose

+

This component provides a mechanism by which voters can +vote on provided choices.

+

Conformance

+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+

Format Definition

+

This property is defined by the following notation:

+
+
votec     = "BEGIN" ":" "VOTE" CRLF
            voteprop
            *eventc *todoc *journalc *freebusyc
            *availabilityc *alarmc *iana-comp *x-comp
            "END" ":" "VOTE" CRLF

voteprop = *(
           ;
           ; The following are REQUIRED,
           ; but MUST NOT occur more than once.
           ;
           pollitemid / response /
           ;
           ; The following are OPTIONAL,
           ; and MAY occur more than once.
           ;
           comment / x-prop / iana-prop
           ;
           )

Figure 17

+ +

Description

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER — such as the respondees +availability.

+
+
+

6.  Poll Modes

+

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see Clause 10.3) in a published RFC.

+

6.1.  POLL-MODE:BASIC

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.

+

6.1.1.  Property restrictions

This poll mode has the following property requirements:

+

POLL-ITEM-ID

+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+

POLL-WINNER

+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+

6.1.2.  Outcome reporting

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+
+
+

7.  iTIP Extensions

+

This specification introduces a number of extensions to RFC 5546. +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.

+

7.1.  Methods

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+

Table 1

MethodDescription
+

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 PARTICIPANTS.

+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+

Table 2

OriginatorMethods
+

Organizer

+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+

Voter

+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+

7.2.  Interoperability Models

Most of the standard iTip specification applies with respect to +organizer and voters.

+

7.2.1.  Delegation

+ +

TBD

+
+

7.2.2.  Acting on Behalf of Other Calendar Users

+ +

TBD

+
+

7.2.3.  Component Revisions

+ +
    +
  • +

    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

    +
  • +
+
+

7.2.4.  Message Sequencing

+ +

TBD

+
+

7.3.  Application Protocol Elements

7.3.1.  Methods for VPOLL Calendar Components

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.

+

Table 3

Presence ValueDescription
+

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.

+

Table 4

MethodDescription
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+

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 PARTICIPANT.

+
+

7.3.2.  Method: PUBLISH

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.

+

Note

+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+

Table 5 — Constraints for a METHOD:PUBLISH of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal PUBLISH.

+
+

VPOLL

+
+

1+

+
+

DTSTAMP

+
+

1

+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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+

+
+

PARTICIPANT

+
+

0+

+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to “VOTER” — that is, no voters

+
+

REQUEST-STATUS

+
+

0

+
+

VALARM

+
+

0+

+
+

VEVENT

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VFREEBUSY

+
+

0

+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+

X-COMPONENT

+
+

0+

+
+

7.3.3.  Method: REQUEST

The “REQUEST” method in a “VPOLL” component provides the following +scheduling functions:

+
    +
  • +

    Invite “Voters” to respond to the poll.

    +
  • +
  • +

    Change the items being voted upon.

    +
  • +
  • +

    Complete or confirm the poll.

    +
  • +
  • +

    Response to a “REFRESH” request.

    +
  • +
  • +

    Update the details of an existing vpoll.

    +
  • +
  • +

    Update the status of “Voters”.

    +
  • +
  • +

    Forward a “VPOLL” to another uninvited CU.

    +
  • +
  • +

    For an existing “VPOLL” calendar component, delegate the role of +“Voter” to another CU.

    +
  • +
  • +

    For an existing “VPOLL” calendar component, change the role of +“Organizer” to another CU.

    +
  • +
+

The “Organizer” originates the “REQUEST”. The recipients of the +“REQUEST” method are the CUs voting in the poll, the “Voters”. +“Voters” use the “REPLY” method to convey votes to 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:

+

Table 6 — Constraints for a METHOD:REQUEST of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REQUEST.

+
+

VPOLL

+
+

1

+
+

PARTICIPANT

+
+

1+

+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+

DTSTAMP

+
+

1

+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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.

+
+

VFREEBUSY

+
+

0

+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

7.3.3.1.  Rescheduling a poll

+ +

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.

+
+

7.3.3.2.  Updating or Reconfirmation of a 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 a “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.

+

7.3.3.3.  Confirmation of a 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.

+
+

7.3.3.4.  Closing a Poll

+ +

The “REQUEST” method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+

7.3.3.5.  Delegating a Poll to Another CU

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”.

+

7.3.3.6.  Changing 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”.

+
+

7.3.3.7.  Sending on Behalf of the 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”.

+
+

7.3.3.8.  Forwarding to an Uninvited CU

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 a “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.

+

7.3.3.9.  Updating Voter Status

+ +

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 “RSVP=TRUE” property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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”.

+
+

7.3.4.  Method: REPLY

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” “CALENDAR-ADDRESS” +property. The “Delegate” SHOULD include the calendar address of the +“Delegator” on the “DELEGATED-FROM” property parameter of the +“Delegate’s” “CALENDAR-ADDRESS” 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”.

+

A “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. (But see comments on VFREEBUSY and VAVAILABILITY)

+

This method type is an iCalendar object that conforms to the +following property constraints:

+

Table 7 — Constraints for a METHOD:REPLY of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REPLY.

+
+

VPOLL

+
+

1+

+
+

All components MUST have the same

+
+

UID.

+
+

PARTICIPANT

+
+

1

+
+

Identifies 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 or 1

+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+

VAVAILABILITY

+
+

0

+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+

VJOURNAL

+
+

0

+
+

VTODO

+
+

0

+
+

7.3.5.  Method: CANCEL

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 Clause 7.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:

+

Table 8 — Constraints for a METHOD:CANCEL of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be CANCEL.

+
+

VPOLL

+
+

1+

+
+

All must have the same UID.

+
+

PARTICIPANT

+
+

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

+
+

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

+
+

7.3.6.  Method: REFRESH

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:

+

Table 9 — Constraints for a METHOD:REFRESH of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REFRESH.

+
+

VPOLL

+
+

1

+
+

PARTICIPANT

+
+

1

+
+

MUST identify the requester as a voter.

+
+

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

+
+

7.3.7.  Method: POLLSTATUS

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. All “Voters” MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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:

+

Table 10 — Constraints for a METHOD:POLLSTATUS of a VPOLL

Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal POLLSTATUS.

+
+

VPOLL

+
+

1+

+
+

PARTICIPANT

+
+

1+

+
+

The voters containing their current vote

+
+

COMPLETED

+
+

0 or 1

+
+

Only present for a completed poll

+
+

DTSTAMP

+
+

1

+
+

DTSTART

+
+

0 or 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

+
+

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 SHOULD NOT be present.

+
+

VFREEBUSY

+
+

0

+
+

VJOURNAL

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTODO

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+

X-COMPONENT

+
+

0+

+
+
+
+

8.  CalDAV Extensions

+

This specification extends RFC 4791 in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports.

+

Additionally, it extends RFC 6638 as it a VPOLL component is a +schedulable entity.

+

8.1.  Calendar Collection Properties

This section defines new CalDAV properties for calendar collections.

+

8.1.1.  CALDAV:supported-vpoll-component-sets

Name

+

supported-vpoll-component-sets

+

Namespace

+

urn:ietf:params:xml:ns:caldav

+

Purpose

+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

It also specifies the combination of allowed component types.

+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition Clause 8.2 being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

Definition

+
<!ELEMENT supported-vpoll-component-sets
     (supported-vpoll-component-set*) >

<!ELEMENT supported-vpoll-component-set (comp+)>

Figure 18

+ +
<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>

Figure 19

+
+

8.1.2.  CALDAV:vpoll-max-items

Name

+

vpoll-max-items

+

Namespace

+

urn:ietf:params:xml:ns:caldav

+

Purpose

+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition +Clause 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+

Definition

+
<!ELEMENT vpoll-max-items (#PCDATA)>
PCDATA value: a numeric value (integer greater than zero)

Figure 20

+ +
<C:vpoll-max-items xmlns:C="urn:ietf:params:xml:ns:caldav"
>25</C:vpoll-max-items>

Figure 21

+
+

8.1.3.  CALDAV:vpoll-max-active

Name

+

vpoll-max-active

+

Namespace

+

urn:ietf:params:xml:ns:caldav

+

Purpose

+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition +Clause 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+

Definition

+
<!ELEMENT vpoll-max-active (#PCDATA)>
PCDATA value: a numeric value (integer greater than zero)

Figure 22

+ +
<C:vpoll-max-active xmlns:C="urn:ietf:params:xml:ns:caldav"
>25</C:vpoll-max-active>

Figure 23

+
+

8.1.4.  CALDAV:vpoll-max-voters

Name

+

+vpoll-max-voters +

+

Namespace

+

+urn:ietf:params:xml:ns:caldav +

+

Purpose

+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+

Conformance

+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +RFC 2518, Section 12.14.1).

+

Description

+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition Clause 8.2 +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+

Definition

+
<!ELEMENT vpoll-max-voters (#PCDATA)>
PCDATA value: a numeric value (integer greater than zero)

Figure 24

+ +
<C:vpoll-max-voters xmlns:C="urn:ietf:params:xml:ns:caldav"
>25</C:vpoll-max-voters>

Figure 25

+
+

8.1.5.  CalDAV:even-more-properties

+ +
+

8.1.6.  Extensions to CalDAV scheduling

This specification extends RFC 6638.

+

Each section of Appendix A “Scheduling Privileges Summary” is +extended to include VPOLL.

+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+

8.2.  Additional Preconditions for PUT, COPY, and MOVE

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:

+

(CALDAV:supported-vpoll-component-sets)

+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+

(CALDAV:vpoll-max-items)

+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value Clause 8.1.2 +on the calendar collection where the resource will be stored;

+

(CALDAV:vpoll-max-active)

+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value +Clause 8.1.3 on the calendar collection where the resource will +be stored;

+

(CALDAV:vpoll-max-voters)

+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value Clause 8.1.4 on the +calendar collection where the resource will be stored;

+
+

8.3.  CalDAV:calendar-query Report

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.

+

8.3.1.  Example: Partial Retrieval of VPOLL

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.

+
>> 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:VPOLL
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>

Figure 26

+
+

8.4.  CalDAV time ranges

“CALDAV:time-range XML Element” in RFC 4791, Section 9.9 describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends RFC 4791 to +describe the meaning of time ranges for VPOLL

+

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.

+
+-------------------------------------------------------------------+
| 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                                          |
+---+---+---+---+---+-----------------------------------------------+

Figure 27

+
+
+
+

9.  Security Considerations

+

Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See RFC 3986 for a +discussion of the security considerations relating to URIs.

+
+
+

10.  IANA Considerations

+

10.1.  Parameter Registrations

This document defines the following new iCalendar property parameters +to be added to the registry defined in RFC 5545, Section 8.2.4:

+

Table 11

Property ParameterStatusReference
+

REQUIRED

+
+

Current

+
+

+Clause 5.4.1 +

+
+

STAY-INFORMED

+
+

Current

+
+

+Clause 5.4.2 +

+
+

10.2.  Property Registrations

This document defines the following new iCalendar properties to be +added to the registry defined in RFC 5545, Section 8.2.3:

+

Table 12

PropertyStatusReference
+

ACCEPT-RESPONSE

+
+

Current

+
+

+Clause 5.5.7 +

+
+

POLL-ITEM-ID

+
+

Current

+
+

+Clause 5.5.3 +

+
+

POLL-MODE

+
+

Current

+
+

+Clause 5.5.4 +

+
+

POLL-PROPERTIES

+
+

Current

+
+

+Clause 5.5.5 +

+
+

POLL-WINNER

+
+

Current

+
+

+Clause 5.5.6 +

+
+

RESPONSE

+
+

Current

+
+

+Clause 5.5.8 +

+
+

10.3.  POLL-MODE Registration Template

A poll mode is defined by completing the following template.

+

Poll mode name

+

The name of the poll mode.

+

Purpose

+

The purpose of the poll mode. Give a short but clear +description.

+

Reference

+

A reference to the RFC in which the poll mode is defined

+
+

10.4.  POLL-MODE Registrations

This document defines the following registered poll modes.

+

Table 13

Poll mode namePurposeReference
+

BASIC

+
+

To provide simple voting for a single outcome from a number of candidates.

+
+

Current

+
+
+
+
+

Appendix A
(informative)
Open issues

+

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+

Notifications: Need to do a section on what Notifications to + support.
+ A. VPOLL is about to end and you haven’t voted on it yet. + Instead reuse VALARMS to notify the user?

+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No — voter + has indicated now unable to attend — want to revote

+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user’s isn’t the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can’t create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+

Update to existing event after poll confirm When voting on existing + event — winning properties ONLY are merged in to the real event.

+

Need to write down what isn’t valid in a VPOLL
+ a. Can’t change POLL-MODE

+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+

? — some iTip notes On confirm — send itip if appropriate (PUBLISH) +  — all non-participating — shared — feeds + Organizer can specify where result is? + Confirm can specify that itip is sent — ITIP / NONE — parameter ? + on POLL-WINNER

+

Need to add example of freebusy in response

+
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest
METHOD: REPLY
BEGIN:VPOLL
ORGANIZER:mailto:douglm@mysite.edu
BEGIN:PARTICIPANT
PARTICIPANT-TYPE: VOTER
CALENDAR-ADDRESS:mailto:eric@example.com
UID:sched01-1234567890
DTSTAMP:20120101T010000Z
SEQUENCE:0
SUMMARY:What to do this week
BEGIN:VFREEBUSY
.......
END:VFREEBUSY
END:PARTICIPANT
END:VPOLL
END:VCALENDAR
+

Figure A.1

+
+
+
+

Appendix B
(informative)
Change log

+
+
+

Calext V01: 2019-10-17 MD

+
+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+
+

Calext V00: 2019-05-17 MD

+
+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+
+

V03: 2014-10-28 MD

+
+
+
    +
  • +

    Add VVOTER and VOTE components.

    +
  • +
  • +

    Add RESPONSE property.

    +
  • +
  • +

    Remove RESPONSE parameter from VOTER.

    +
  • +
+
+
+

V03: 2014-05-12 MD

+
+
+
    +
  • +

    Add reply-url property and required parameter.

    +
  • +
  • +

    Fix ACCEPT-RESPONSE definition.

    +
  • +
+
+
+

V02: 2014-05-12 MD

+
+
+
    +
  • +

    Typos fixed, clarifications made.

    +
  • +
  • +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
  • +
  • +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
  • +
  • +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
  • +
  • +

    iTip: fix broken table cells

    +
  • +
  • +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
  • +
  • +

    Added Caldav scheduling section

    +
  • +
+
+
+

V01: 2013-08-07 MD

+
+
+
    +
  • +

    Removed method CONFIRM

    +
  • +
  • +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
  • +
  • +

    Added POLL-WINNER and verbiage

    +
  • +
  • +

    Added STATUS values

    +
  • +
  • +

    Added RELTYPE=POLL

    +
  • +
  • +

    Added supported-vpoll-component-sets

    +
  • +
  • +

    Added CalDAV related parameters to VOTER

    +
  • +
  • +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
  • +
+
+
+

Initial version: 2012-11-02 MD

+
+
+
+
+
+

Bibliography

+ +
+
+ + + + + + + + + + + + + diff --git a/sources/cc-51006.pdf b/sources/cc-51006.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5dbe849544b60739a5b2c8870f3fdebed18ba3f1 GIT binary patch literal 858194 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

V#G?FkQphFf7k# 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 z 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�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

D}<+1XSDlax(-;W-%5sOxK(eMh6XmGiq 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

wvt^O&C7ECNLg7{U9TrW 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 + + +Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component +CC/CD 51006:2018 +51006 + +2018-11-19 + + + + +CalConnect + + + + + + +Eric York + + + + + + + +Cyrus Daboo + + + + + + + +Michael Douglass + + + + + + +CalConnect + + +1 + +2018-11-19 + +en + + +committee-draft + + +2018 + + +CalConnect + + + + +standard + +FREEBUSY + + + + + + +

© 2018 The Calendaring and Scheduling Consortium, Inc.

+ + + + + + + Warning for Drafts +

This document is not a CalConnect Standard. It is distributed for review and + comment, and is subject to change without notice and may not be referred to as + a Standard. Recipients of this draft are invited to submit, with their + comments, notification of any relevant patent rights of which they are aware + and to provide supporting documentation. +

+
+
+ + + + +

All rights reserved. Unless otherwise specified, no part of this + publication may be reproduced or utilized otherwise in any form or by any + means, electronic or mechanical, including photocopying, or posting on the + internet or an intranet, without prior written permission. Permission can + be requested from the address below.

+
+
+ + + +

The Calendaring and Scheduling Consortium, Inc.

+

4390 Chaffin Lane
+ McKinleyville
+ California 95519
+ United States of America
+
+ copyright@calconnect.org
+ www.calconnect.org +

+
+
+ + +Abstract

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+

The Calendaring and Scheduling Consortium (“CalConnect”) is a global +non-profit organization with the aim to facilitate interoperability of +collaborative technologies and tools through open standards.

+

CalConnect works closely with international and regional partners, +of which the full list is available on our website +().

+

The procedures used to develop this document and those intended for its +further maintenance are described in the CalConnect Directives.

+

In particular the different approval criteria needed for the different +types of CalConnect documents should be noted. This document was drafted in +accordance with the editorial rules of the CalConnect Directives.

+

Attention is drawn to the possibility that some of the elements of this +document may be the subject of patent rights. CalConnect shall not be +held responsible for identifying any or all such patent rights. Details +of any patent rights identified during the development of the document +will be provided in the Introduction.

+

Any trade name used in this document is information given for the +convenience of users and does not constitute an endorsement.

+

This document was prepared by Technical Committee +FREEBUSY.

Introduction

The currently existing approach to agreeing on meeting times using +iTip and/or iMip has 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.

+ + +Scope +

This document provides a mechanism in iCalendar for consensus scheduling.

+
+ +Terms and definitions

For the purposes of this document, + the following terms and definitions apply.

+ + + +consensus scheduling +

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+
+ +active Vpoll +

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+
+ +voter +

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+Simple Consensus Scheduling

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+The VPOLL Component: An Overview

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+
+
DTSTAMP
+
+

The usual property.

+
+
SEQUENCE
+
+

The usual property. See below for SEQUENCE +behavior.

+
+
UID
+
+

The usual property.

+
+
ORGANIZER
+
+

The usual property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+
+
SUMMARY
+
+

The usual property. This optional but +recommended property provides the a short title to the poll.

+
+
DESCRIPTION
+
+

The usual property. This optional property +provides more details.

+
+
DTEND
+
+

The usual property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+
+
POLL-MODE
+
+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value “BASIC” +meaning one event will be chosen from the alternatives.

+
+
POLL-COMPLETION
+
+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is “SERVER-SUBMIT” which means the client chooses the winner +but the server will submit the winning choice.

+
+
POLL-PROPERTIES
+
+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value “DTSTART, LOCATION” meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+
+
PARTICIPANT
+
+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to “VOTER”. The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+
+
VOTE
+
+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+
+
VEVENT
+
+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+
+

VPOLL with 3 voters and 3 alternative meetings:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD:REQUEST +BEGIN:VPOLL +POLL-MODE:BASIC +POLL-COMPLETION:SERVER-SUBMIT +POLL-PROPERTIES:DTSTART,LOCATION +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T000000Z +SUMMARY:What to do this week +DTEND:20120101T000000Z +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +END PARTICIPANT +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +END PARTICIPANT +BEGIN: PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:mike@example.com +END PARTICIPANT +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 +
+

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.

+The VPOLL Alternative Choices: An Overview

Within the VPOLL component we have the alternatives to vote on. In +many respects these are standard components. For our +simple use case they are all VEVENT components. In addition to the +usual properties some extra properties are used for a +VPOLL.

+
+
POLL-ITEM-ID
+
+

This provides a unique reference to the sub-component +within the VPOLL. It’s value SHOULD be a small integer.

+
+
+VPOLL responses

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 and components:

+
+
DTSTAMP
+
+

The usual property.

+
+
SEQUENCE
+
+

The usual property. See below for SEQUENCE +behavior.

+
+
UID
+
+

Same as the request.

+
+
ORGANIZER
+
+

Same as the request.

+
+
SUMMARY
+
+

Same as the request.

+
+
PARTICIPANT
+
+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+
+
VOTE
+
+

One per item being voted on.

+
+
POLL-ITEM-ID
+
+

One inside each VOTE component to identify the choice.

+
+
RESPONSE
+
+

One inside each VOTE component to specify the vote.

+
+
+

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.

+
+
NOTE
+
+

This is poll-mode specific behavior?

+
+
+

REPLY VPOLL from Cyrus:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SUMMARY:What to do this week +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+VPOLL updates

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: POLLSTATUS +BEGIN:VPOLL +ORGANIZER:mailto:mike@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T020000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:cyrus@example.com +BEGIN: VOTE +POLL-ITEM-ID:1 +RESPONSE:50 +COMMENT:Work on iTIP +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +COMMENT:Work on WebDAV +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +BEGIN:VOTE +POLL-ITEM-ID:1 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:2 +RESPONSE:100 +END:VOTE +BEGIN:VOTE +POLL-ITEM-ID:3 +RESPONSE:0 +END:VOTE +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+VPOLL Completion

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +“SUBMITTED”.

+

VPOLL confirmation:

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//Example//Example +METHOD: REQUEST +BEGIN:VPOLL +ORGANIZER:mailto:douglm@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T030000Z +COMPLETED:20120101T030000Z +POLL-COMPLETION:SERVER-SUBMIT +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 +
+Other Responses

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+iCalendar ExtensionsUpdated Participant Type Value

Participant type property values are defined in section 11.2.1. of +. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+partvalue /= "VOTER" + +
+
Description
+
+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+
+Updated Relation Type Value

Relationship parameter type values are defined in section 3.2.15. of +. 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.

+
+
Format Definition
+
+

This property parameter is redefined by the following notation:

+
+
+reltypeparam /= "RELTYPE" "=" "POLL" +; Property value is a VPOLL uid + +
+
Description
+
+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+
+Updated Status Value

Status property values are defined in section 3.8.1.11. of . +This specification updates that type to define valid VPOLL status +values.

+
+
Format Definition
+
+

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 + / "SUBMITTED" ; The winning item has been + ; submitted + / "CANCELLED" + +
+
Description
+
+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+
+
+
+New Property ParametersRequired
+
Parameter name
+
+

REQUIRED

+
+
Purpose
+
+

To specify whether the associated property is required in +the current context.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+requirededparam = "REQUIRED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + +
+
Description
+
+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+
+Stay-Informed
+
Parameter name
+
+

STAY-INFORMED

+
+
Purpose
+
+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+
+
Format Definition
+
+

This parameter is defined by the following notation:

+
+
+stayinformedparam = "STAY-INFORMED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + +
+
Description
+
+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+
+New PropertiesAccept-Response
+
Property name
+
+

ACCEPT-RESPONSE

+
+
Purpose
+
+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+

If this property is not present voters are only allowed to respond +to the choices in the request.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":" + iana-token ("," iana-token) CRLF + +acceptresponseparams = *(";" other-param) +
+Poll-Completion
+
Property name
+
+

POLL-COMPLETION

+
+
Purpose
+
+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+
+
Description
+

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

+
Format Definition
+
+

This property is defined by the following notation:

+
+
+poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF + +pcparam = *(";" other-param) + +pcvalue = "SERVER" ; The server is responsible for both choosing and + ; submitting the winner(s) + / "SERVER-SUBMIT" ; The server is responsible for + ; submitting the winner(s). The client chooses. + / "SERVER-CHOICE" ; The server is responsible for + ; choosing the winner(s). The client will submit. + / "CLIENT" ; The client is responsible for both choosing and + ; submitting the winner(s) + / iana-token + / x-name + ;Default is CLIENT + +
+
Example
+
+

The following is an example of this property:

+
+
+POLL-COMPLETION: SERVER-SUBMIT +
+Poll-Item-Id
+
Property name
+
+

POLL-ITEM-ID

+
+
Purpose
+
+

This property is used in VPOLL child components as an +identifier.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+
+
Description
+
+

In a METHOD:REQUEST each choice 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.

+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollitemid = "POLL-ITEM-ID" pollitemdparams ":" + integer CRLF + +pollitemidparams = *( + (";" other-param) + ) +
+Poll-Mode
+
Property name
+
+

POLL-MODE

+
+
Purpose
+
+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component or +its sub-components.

+
+
Description
+
+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollmode = "POLL-MODE" pollmodeparams ":" + ("BASIC" / iana-token / other-token) CRLF + +pollmodeparams = *(";" other-param) +
+Poll-properties
+
Property name
+
+

POLL-PROPERTIES

+
+
Purpose
+
+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+
+
Property Parameters
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollproperties = "POLL-PROPERTIES" pollpropparams ":" + text *("," text) CRLF + +pollpropparams = *(";" other-param) +
+Poll-Winner
+
Property name
+
+

POLL-WINNER

+
+
Purpose
+
+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+
+
Value type
+
+

INTEGER

+
+
Property Parameters
+
+

Non-standard parameters can be specified on +this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+
+
Format Definition
+
+

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 +
+Reply-URL
+
Property name
+
+

REPLY-URL

+
+
Purpose
+
+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+
+
Property Parameters
+
+

Non-standard, required or iana parameters can +be specified on this property.

+
+
Conformance
+
+

This property MAY be specified in a VPOLL component.

+
+
Description
+
+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF + +reply-urlparams = *( + (";" requiredparam) / + (";" other-param) + ) +
+Response
+
Property name
+
+

RESPONSE

+
+
Purpose
+
+

To specify a response vote.

+
+
Value type
+
+

INTEGER

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+response = "RESPONSE" response-params ":" integer CRLF + ; integer value 0..100 + +responseparams = *(";" other-param) + +
+
Description
+
+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
    +
  • +

    0 — 39 A “NO vote”

    +
  • +
  • +

    40 — 79 A “MAYBE” vote

    +
  • +
  • +

    80 — 89 A “YES — but not preferred vote”

    +
  • +
  • +

    90-100 A “YES” vote.

    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
  • +
+
+
+New ComponentsVPOLL Component
+
Component name
+
+

VPOLL

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+pollc = "BEGIN" ":" "VPOLL" CRLF + pollprop + *participantc *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 / 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 / + ; + ) + +
+
Description
+

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting — both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+

If specified, the “DTSTART” property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+

If “DTSTART” is present “DURATION” MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+

“DTEND” MAY be specified with or without “DTSTART” and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+
+VOTE Component
+
Component name
+
+

VOTE

+
+
Purpose
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
Conformance
+
+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+
+
Format Definition
+
+

This property is defined by the following notation:

+
+
+votec = "BEGIN" ":" "VOTE" CRLF + voteprop + *eventc *todoc *journalc *freebusyc + *availabilityc *alarmc *iana-comp *x-comp + "END" ":" "VOTE" CRLF + +voteprop = *( + ; + ; The following are REQUIRED, + ; but MUST NOT occur more than once. + ; + pollitemid / response / + ; + ; The following are OPTIONAL, + ; and MAY occur more than once. + ; + comment / x-prop / iana-prop + ; + ) + +
+
Description
+

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER — such as the respondees +availability.

+
+Poll Modes

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see ) in a published RFC.

+POLL-MODE:BASIC

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.

+Property restrictions

This poll mode has the following property requirements:

+
+
POLL-ITEM-ID
+
+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+
+
POLL-WINNER
+
+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+
+Outcome reporting

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+iTIP Extensions

This specification introduces a number of extensions to . +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.

+Methods

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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 PARTICIPANTS.

+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+ + + + + + + + + + + + + + + + + +
OriginatorMethods
+

Organizer

+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+

Voter

+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+Interoperability Models

Most of the standard iTip specification applies with respect to +organizer and voters.

+ +Delegation +

TBD

+
+ +Acting on Behalf of Other Calendar Users +

TBD

+
+ +Component Revisions +
    +
  • +

    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

    +
  • +
+
+ +Message Sequencing +

TBD

+
+Application Protocol ElementsMethods for VPOLL Calendar Components

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 ValueDescription
+

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.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+

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 PARTICIPANT.

+
+Method: PUBLISH

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.

+
+
Note
+
+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+ +Constraints for a METHOD:PUBLISH of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal PUBLISH.

+
+

VPOLL

+
+

1+

+
+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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+

+
+
+

PARTICIPANT

+
+

0+

+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to “VOTER” — that is, no voters

+
+

REQUEST-STATUS

+
+

0

+
+
+

VALARM

+
+

0+

+
+
+

VEVENT

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+
+

X-COMPONENT

+
+

0+

+
+
+Method: REQUEST

The “REQUEST” method in a “VPOLL” component provides the following +scheduling functions:

+
    +
  • +

    Invite “Voters” to respond to the poll.

    +
  • +
  • +

    Change the items being voted upon.

    +
  • +
  • +

    Complete or confirm the poll.

    +
  • +
  • +

    Response to a “REFRESH” request.

    +
  • +
  • +

    Update the details of an existing vpoll.

    +
  • +
  • +

    Update the status of “Voters”.

    +
  • +
  • +

    Forward a “VPOLL” to another uninvited CU.

    +
  • +
  • +

    For an existing “VPOLL” calendar component, delegate the role of +“Voter” to another CU.

    +
  • +
  • +

    For an existing “VPOLL” calendar component, change the role of +“Organizer” to another CU.

    +
  • +
+

The “Organizer” originates the “REQUEST”. The recipients of the +“REQUEST” method are the CUs voting in the poll, the “Voters”. +“Voters” use the “REPLY” method to convey votes to 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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REQUEST.

+
+

VPOLL

+
+

1

+
+
+

PARTICIPANT

+
+

1+

+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 1

+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+

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.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+

VTODO

+
+

0+

+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+ +Rescheduling a poll +

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.

+
+Updating or Reconfirmation of a 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 a “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.

+ +Confirmation of a 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.

+
+ +Closing a Poll +

The “REQUEST” method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+Delegating a Poll to Another CU

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”.

+ +Changing 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”.

+
+ +Sending on Behalf of the 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”.

+
+Forwarding to an Uninvited CU

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 a “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.

+ +Updating Voter Status +

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 “RSVP=TRUE” property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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”.

+
+Method: REPLY

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” “CALENDAR-ADDRESS” +property. The “Delegate” SHOULD include the calendar address of the +“Delegator” on the “DELEGATED-FROM” property parameter of the +“Delegate’s” “CALENDAR-ADDRESS” 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”.

+

A “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. (But see comments on VFREEBUSY and VAVAILABILITY)

+

This method type is an iCalendar object that conforms to the +following property constraints:

+ +Constraints for a METHOD:REPLY of a VPOLL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REPLY.

+
+

VPOLL

+
+

1+

+
+

All components MUST have the same

+
+ + +

UID.

+
+

PARTICIPANT

+
+

1

+
+

Identifies 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 or 1

+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+

VAVAILABILITY

+
+

0

+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+

VJOURNAL

+
+

0

+
+
+

VTODO

+
+

0

+
+
+Method: CANCEL

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 .

+

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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be CANCEL.

+
+

VPOLL

+
+

1+

+
+

All must have the same UID.

+
+

PARTICIPANT

+
+

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

+
+
+

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

+
+
+Method: REFRESH

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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST be REFRESH.

+
+

VPOLL

+
+

1

+
+
+

PARTICIPANT

+
+

1

+
+

MUST identify the requester as a voter.

+
+

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

+
+
+Method: POLLSTATUS

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. All “Voters” MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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/PropertyPresenceComment
+

METHOD

+
+

1

+
+

MUST equal POLLSTATUS.

+
+

VPOLL

+
+

1+

+
+
+

PARTICIPANT

+
+

1+

+
+

The voters containing their current vote

+
+

COMPLETED

+
+

0 or 1

+
+

Only present for a completed poll

+
+

DTSTAMP

+
+

1

+
+
+

DTSTART

+
+

0 or 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

+
+
+

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 SHOULD NOT be present.

+
+

VFREEBUSY

+
+

0

+
+
+

VJOURNAL

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTODO

+
+

0

+
+

All candidate components SHOULD NOT be present.

+
+

VTIMEZONE

+
+

0+

+
+

MUST be present if any date/time refers to a timezone.

+
+

IANA-COMPONENT

+
+

0+

+
+
+

X-COMPONENT

+
+

0+

+
+
+CalDAV Extensions

This specification extends in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports.

+

Additionally, it extends as it a VPOLL component is a +schedulable entity.

+Calendar Collection Properties

This section defines new CalDAV properties for calendar collections.

+CALDAV:supported-vpoll-component-sets
+
Name
+
+

supported-vpoll-component-sets

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

It also specifies the combination of allowed component types.

+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-items
+
Name
+
+

vpoll-max-items

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+
+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-active
+
Name
+
+

vpoll-max-active

+
+
Namespace
+
+

urn:ietf:params:xml:ns:caldav

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+
+
Definition
+
+
+<!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> +
+CALDAV:vpoll-max-voters
+
Name
+
+

+vpoll-max-voters +

+
+
Namespace
+
+

+urn:ietf:params:xml:ns:caldav +

+
+
Purpose
+
+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+
+
Conformance
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +12.14.1).

+
+
Description
+
+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+
+
Definition
+
+
+<!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> +
+ +CalDAV:even-more-properties + +Extensions to CalDAV scheduling

This specification extends .

+

Each section of Appendix A “Scheduling Privileges Summary” is +extended to include VPOLL.

+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+Additional Preconditions for PUT, COPY, and MOVE

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:

+
+
(CALDAV:supported-vpoll-component-sets)
+
+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+
+
(CALDAV:vpoll-max-items)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value +on the calendar collection where the resource will be stored;

+
+
(CALDAV:vpoll-max-active)
+
+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value + on the calendar collection where the resource will +be stored;

+
+
(CALDAV:vpoll-max-voters)
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value on the +calendar collection where the resource will be stored;

+
+
+CalDAV:calendar-query Report

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.

+Example: Partial Retrieval of VPOLL

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.

+>> 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:VPOLL +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> +
+CalDAV time ranges

“CALDAV:time-range XML Element” in 9.9 describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends to +describe the meaning of time ranges for VPOLL

+

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.

++-------------------------------------------------------------------+ +| 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 | ++---+---+---+---+---+-----------------------------------------------+ +
+ +Security Considerations +

Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See for a +discussion of the security considerations relating to URIs.

+
+IANA ConsiderationsParameter Registrations

This document defines the following new iCalendar property parameters +to be added to the registry defined in 8.2.4:

+ + + + + + + + + + + + + + + + + + + + +
Property ParameterStatusReference
+

REQUIRED

+
+

Current

+
+

+ +

+
+

STAY-INFORMED

+
+

Current

+
+

+ +

+
+Property Registrations

This document defines the following new iCalendar properties to be +added to the registry defined in 8.2.3:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyStatusReference
+

ACCEPT-RESPONSE

+
+

Current

+
+

+ +

+
+

POLL-ITEM-ID

+
+

Current

+
+

+ +

+
+

POLL-MODE

+
+

Current

+
+

+ +

+
+

POLL-PROPERTIES

+
+

Current

+
+

+ +

+
+

POLL-WINNER

+
+

Current

+
+

+ +

+
+

RESPONSE

+
+

Current

+
+

+ +

+
+POLL-MODE Registration Template

A poll mode is defined by completing the following template.

+
+
Poll mode name
+
+

The name of the poll mode.

+
+
Purpose
+
+

The purpose of the poll mode. Give a short but clear +description.

+
+
Reference
+
+

A reference to the RFC in which the poll mode is defined

+
+
+POLL-MODE Registrations

This document defines the following registered poll modes.

+ + + + + + + + + + + + + + + +
Poll mode namePurposeReference
+

BASIC

+
+

To provide simple voting for a single outcome from a number of candidates.

+
+

Current

+
+ + +
Open issues

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+

Notifications: Need to do a section on what Notifications to + support.
+ A. VPOLL is about to end and you haven’t voted on it yet. + Instead reuse VALARMS to notify the user?

+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No — voter + has indicated now unable to attend — want to revote

+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user’s isn’t the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can’t create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+

Update to existing event after poll confirm When voting on existing + event — winning properties ONLY are merged in to the real event.

+

Need to write down what isn’t valid in a VPOLL
+ a. Can’t change POLL-MODE

+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+

? — some iTip notes On confirm — send itip if appropriate (PUBLISH) +  — all non-participating — shared — feeds + Organizer can specify where result is? + Confirm can specify that itip is sent — ITIP / NONE — parameter ? + on POLL-WINNER

+

Need to add example of freebusy in response

+BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest +METHOD: REPLY +BEGIN:VPOLL +ORGANIZER:mailto:douglm@mysite.edu +BEGIN:PARTICIPANT +PARTICIPANT-TYPE: VOTER +CALENDAR-ADDRESS:mailto:eric@example.com +UID:sched01-1234567890 +DTSTAMP:20120101T010000Z +SEQUENCE:0 +SUMMARY:What to do this week +BEGIN:VFREEBUSY +....... +END:VFREEBUSY +END:PARTICIPANT +END:VPOLL +END:VCALENDAR +
+Change log +
+
Calext V01: 2019-10-17 MD
+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+
Calext V00: 2019-05-17 MD
+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+
V03: 2014-10-28 MD
+
+
    +
  • +

    Add VVOTER and VOTE components.

    +
  • +
  • +

    Add RESPONSE property.

    +
  • +
  • +

    Remove RESPONSE parameter from VOTER.

    +
  • +
+
+
V03: 2014-05-12 MD
+
+
    +
  • +

    Add reply-url property and required parameter.

    +
  • +
  • +

    Fix ACCEPT-RESPONSE definition.

    +
  • +
+
+
V02: 2014-05-12 MD
+
+
    +
  • +

    Typos fixed, clarifications made.

    +
  • +
  • +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
  • +
  • +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
  • +
  • +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
  • +
  • +

    iTip: fix broken table cells

    +
  • +
  • +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
  • +
  • +

    Added Caldav scheduling section

    +
  • +
+
+
V01: 2013-08-07 MD
+
+
    +
  • +

    Removed method CONFIRM

    +
  • +
  • +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
  • +
  • +

    Added POLL-WINNER and verbiage

    +
  • +
  • +

    Added STATUS values

    +
  • +
  • +

    Added RELTYPE=POLL

    +
  • +
  • +

    Added supported-vpoll-component-sets

    +
  • +
  • +

    Added CalDAV related parameters to VOTER

    +
  • +
  • +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
  • +
+
+
Initial version: 2012-11-02 MD
+
+
+
Normative References

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

2020-07-16 HTTP Extensions for Distributed Authoring — WEBDAV https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2518.xml https://www.rfc-editor.org/info/rfc2518 RFC 2518 RFC2518 10.17487/RFC2518 1999-02 Y. Goland Internet Engineering Task Force IETF E. Whitehead Internet Engineering Task Force IETF A. Faizi Internet Engineering Task Force IETF S. Carter Internet Engineering Task Force IETF D. Jensen Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document specifies a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, namespace manipulation, and resource locking (collision avoidance). [STANDARDS-TRACK] RFC 2518 Fremont, CA 2020-07-16 Uniform Resource Identifier (URI): Generic Syntax https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml https://www.rfc-editor.org/info/rfc3986 RFC 3986 RFC3986 10.17487/RFC3986 2005-01 T. Berners-Lee Internet Engineering Task Force IETF R. Fielding Internet Engineering Task Force IETF L. Masinter Internet Engineering Task Force IETF Internet Engineering Task Force IETF en A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK] STD 66 RFC 3986 Fremont, CA 2020-07-16 Calendaring Extensions to WebDAV (CalDAV) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4791.xml https://www.rfc-editor.org/info/rfc4791 RFC 4791 RFC4791 10.17487/RFC4791 2007-03 C. Daboo Internet Engineering Task Force IETF B. Desruisseaux Internet Engineering Task Force IETF L. Dusseault Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing calendaring and scheduling information based on the iCalendar format. This document defines the “calendar-access” feature of CalDAV. [STANDARDS-TRACK] RFC 4791 Fremont, CA 2020-07-16 Internet Calendaring and Scheduling Core Object Specification (iCalendar) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5545.xml https://www.rfc-editor.org/info/rfc5545 RFC 5545 RFC5545 10.17487/RFC5545 2009-09 B. Desruisseaux Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK] RFC 5545 Fremont, CA 2020-07-16 iCalendar Transport-Independent Interoperability Protocol (iTIP) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5546.xml https://www.rfc-editor.org/info/rfc5546 RFC 5546 RFC5546 10.17487/RFC5546 2009-12 C. Daboo Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document specifies a protocol that uses the iCalendar object specification to provide scheduling interoperability between different calendaring systems. This is done without reference to a specific transport protocol so as to allow multiple methods of communication between systems. Subsequent documents will define profiles of this protocol that use specific, interoperable methods of communication between systems.The iCalendar Transport-Independent Interoperability Protocol (iTIP) complements the iCalendar object specification by adding semantics for group scheduling methods commonly available in current calendaring systems. These scheduling methods permit two or more calendaring systems to perform transactions such as publishing, scheduling, rescheduling, responding to scheduling requests, negotiating changes, or canceling. [STANDARDS-TRACK] RFC 5546 Fremont, CA 2020-07-16 iCalendar Message-Based Interoperability Protocol (iMIP) https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6047.xml https://www.rfc-editor.org/info/rfc6047 RFC 6047 RFC6047 10.17487/RFC6047 2010-12 A. Melnikov Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document, “iCalendar Message-Based Interoperability Protocol (iMIP)”, specifies a binding from the iCalendar Transport-independent Interoperability Protocol (iTIP) to Internet email-based transports. Calendaring entries defined by the iCalendar Object Model (iCalendar) are wrapped using constructs from RFC 5322 and MIME (RFC 2045, RFC 2046, RFC 2047, and RFC 2049), and then transported over SMTP. [STANDARDS-TRACK] RFC 6047 Fremont, CA 2020-07-16 Scheduling Extensions to CalDAV https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6638.xml https://www.rfc-editor.org/info/rfc6638 RFC 6638 RFC6638 10.17487/RFC6638 2012-06 C. Daboo Internet Engineering Task Force IETF B. Desruisseaux Internet Engineering Task Force IETF Internet Engineering Task Force IETF en This document defines extensions to the Calendaring Extensions to WebDAV (CalDAV) “calendar-access” feature to specify a standard way of performing scheduling operations with iCalendar-based calendar components. This document defines the “calendar-auto-schedule” feature of CalDAV. [STANDARDS-TRACK] RFC 6638 Fremont, CAAUTOFILLIETF I-D.draft-ietf-calext-eventpub-extensions
+Bibliography +
+ diff --git a/sources/cc-51006.rxl b/sources/cc-51006.rxl new file mode 100644 index 0000000..5bc1c99 --- /dev/null +++ b/sources/cc-51006.rxl @@ -0,0 +1,67 @@ + +Calendaring and scheduling — Consensus scheduling — iCalendar VPOLL component +CC/CD 51006:2018 +51006 + +2018-11-19 + + + + +CalConnect + + + + + + +Eric York + + + + + + + +Cyrus Daboo + + + + + + + +Michael Douglass + + + + + + +CalConnect + + +1 + +2018-11-19 + +en + + +committee-draft + + +2018 + + +CalConnect + + + + +standard + +FREEBUSY + + + \ No newline at end of file diff --git a/sources/draft-ietf-calext-vpoll.html b/sources/draft-ietf-calext-vpoll.html new file mode 100644 index 0000000..59e849f --- /dev/null +++ b/sources/draft-ietf-calext-vpoll.html @@ -0,0 +1,9150 @@ + + + + + + +VPOLL: Consensus Scheduling Component for iCalendar + + + + + + + + + + + + + + + + + + + + + + + + +
Internet-DraftVPOLLJuly 2020
York, et al.Expires 17 January 2021[Page]
+
+
+
+
Workgroup:
+
Network Working Group
+
Internet-Draft:
+
draft-ietf-calext-vpoll-00
+
:
+
+
Published:
+
+ +
+
Intended Status:
+
Standards Track
+
Expires:
+
+
Authors:
+
+
+
E. York
+
+
+
C. Daboo
+
+
+
M. Douglass
+
+
+
+
+

VPOLL: Consensus Scheduling Component for iCalendar

+
+
+

Abstract

+
+

This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives.

+
+
+
+
+
+

+Status of This Memo +

+

+ 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 https://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 17 January 2021.

+
+
+ +
+
+

+Table of Contents +

+ +
+
+
+
+

+1. Acknowledgements +

+
+

The authors would like to thank the members of the Calendaring and Scheduling Consortium (CalConnect) for contributing their ideas and support.

+
+
+
+
+
+

+2. Introduction +

+
+

The currently existing approach to agreeing on meeting times using +iTip [RFC5546] and/or iMip [RFC6047] has 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.

+
+
+
+
+
+

+3. Terms and definitions +

+
+

For the purposes of this document, + the following terms and definitions apply.

+
+
+
+

+3.1. consensus scheduling +

+
+

The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task.

+
+
+
+
+
+

+3.2. active Vpoll +

+
+

A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period

+
+
+
+
+
+

+3.3. voter +

+
+

A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented.

+
+
+
+
+
+
+
+

+4. Simple Consensus Scheduling +

+
+

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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives.

+
+
+
+

+4.1. The VPOLL Component: An Overview +

+
+

The VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate:

+
+
+
+
DTSTAMP
+
+
+

The usual [RFC5545] property.

+
+
+
+
SEQUENCE
+
+
+

The usual [RFC5545] property. See below for SEQUENCE +behavior.

+
+
+
+
UID
+
+
+

The usual [RFC5545] property.

+
+
+
+
ORGANIZER
+
+
+

The usual [RFC5545] property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same.

+
+
+
+
SUMMARY
+
+
+

The usual [RFC5545] property. This optional but +recommended property provides the a short title to the poll.

+
+
+
+
DESCRIPTION
+
+
+

The usual [RFC5545] property. This optional property +provides more details.

+
+
+
+
DTEND
+
+
+

The usual [RFC5545] property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active.

+
+
+
+
POLL-MODE
+
+
+

A new property which defines how the votes are used to +obtain a result. For our use case it will take the value "BASIC" +meaning one event will be chosen from the alternatives.

+
+
+
+
POLL-COMPLETION
+
+
+

A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is "SERVER-SUBMIT" which means the client chooses the winner +but the server will submit the winning choice.

+
+
+
+
POLL-PROPERTIES
+
+
+

A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value "DTSTART, LOCATION" meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process.

+
+
+
+
PARTICIPANT
+
+
+

There is one of these components for each voter with +the PARTICIPANT-TYPE set to "VOTER". The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on.

+
+
+
+
VOTE
+
+
+

A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration.

+
+
+
+
VEVENT
+
+
+

In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting.

+
+
+
+
+
+
+

EXAMPLE

+
+
+

VPOLL with 3 voters and 3 alternative meetings:

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD:REQUEST
+BEGIN:VPOLL
+POLL-MODE:BASIC
+POLL-COMPLETION:SERVER-SUBMIT
+POLL-PROPERTIES:DTSTART,LOCATION
+ORGANIZER:mailto:mike@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T000000Z
+SUMMARY:What to do this week
+DTEND:20120101T000000Z
+BEGIN: PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:cyrus@example.com
+END PARTICIPANT
+BEGIN: PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:eric@example.com
+END PARTICIPANT
+BEGIN: PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:mike@example.com
+END PARTICIPANT
+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
+
+
Figure 1
+
+
+

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.

+
+
+
+
+
+

+4.2. The VPOLL Alternative Choices: An Overview +

+
+

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.

+
+
+
+
POLL-ITEM-ID
+
+
+

This provides a unique reference to the sub-component +within the VPOLL. It's value SHOULD be a small integer.

+
+
+
+
+
+
+
+
+
+

+4.3. VPOLL responses +

+
+

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 and components:

+
+
+
+
DTSTAMP
+
+
+

The usual [RFC5545] property.

+
+
+
+
SEQUENCE
+
+
+

The usual [RFC5545] property. See below for SEQUENCE +behavior.

+
+
+
+
UID
+
+
+

Same as the request.

+
+
+
+
ORGANIZER
+
+
+

Same as the request.

+
+
+
+
SUMMARY
+
+
+

Same as the request.

+
+
+
+
PARTICIPANT
+
+
+

One only with a CALENDAR-ADDRESS identifying the voter replying.

+
+
+
+
VOTE
+
+
+

One per item being voted on.

+
+
+
+
POLL-ITEM-ID
+
+
+

One inside each VOTE component to identify the choice.

+
+
+
+
RESPONSE
+
+
+

One inside each VOTE component to specify the vote.

+
+
+
+
+
+
+

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.

+
+
+
+
NOTE
+
+
+

This is poll-mode specific behavior?

+
+
+
+
+
+
+

EXAMPLE

+
+
+

REPLY VPOLL from Cyrus:

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD: REPLY
+BEGIN:VPOLL
+ORGANIZER:mailto:mike@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T010000Z
+SUMMARY:What to do this week
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:cyrus@example.com
+BEGIN:VOTE
+POLL-ITEM-ID:1
+RESPONSE:50
+COMMENT:Work on iTIP
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:2
+RESPONSE:100
+COMMENT:Work on WebDAV
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:3
+RESPONSE:0
+END:VOTE
+END:PARTICIPANT
+END:VPOLL
+END:VCALENDAR
+
+
Figure 2
+
+
+
+
+
+

+4.4. VPOLL updates +

+
+

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 one or more PARTICIPANT components each populated with zero or more VOTE components.

+
+
+

EXAMPLE

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD: POLLSTATUS
+BEGIN:VPOLL
+ORGANIZER:mailto:mike@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T020000Z
+SEQUENCE:0
+SUMMARY:What to do this week
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:cyrus@example.com
+BEGIN: VOTE
+POLL-ITEM-ID:1
+RESPONSE:50
+COMMENT:Work on iTIP
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:2
+RESPONSE:100
+COMMENT:Work on WebDAV
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:3
+RESPONSE:0
+END:VOTE
+END:PARTICIPANT
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:eric@example.com
+BEGIN:VOTE
+POLL-ITEM-ID:1
+RESPONSE:100
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:2
+RESPONSE:100
+END:VOTE
+BEGIN:VOTE
+POLL-ITEM-ID:3
+RESPONSE:0
+END:VOTE
+END:PARTICIPANT
+END:VPOLL
+END:VCALENDAR
+
+
Figure 3
+
+
+
+
+
+

+4.5. VPOLL Completion +

+
+

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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +"SUBMITTED".

+
+
+

EXAMPLE

+
+
+

VPOLL confirmation:

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Example//Example
+METHOD: REQUEST
+BEGIN:VPOLL
+ORGANIZER:mailto:douglm@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T030000Z
+COMPLETED:20120101T030000Z
+POLL-COMPLETION:SERVER-SUBMIT
+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
+
+
Figure 4
+
+
+
+
+
+

+4.6. Other Responses +

+
+

A voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care.

+
+
+

An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices.

+
+
+

This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.

+
+
+
+
+
+
+
+

+5. iCalendar Extensions +

+
+
+

+5.1. Updated Participant Type Value +

+
+

Participant type property values are defined in section 11.2.1. of +[I-D.draft-ietf-calext-eventpub-extensions]. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes.

+
+
+
+
Format Definition
+
+
+

This property parameter is redefined by the following notation:

+
+
+
+
+
+
+
+
+
partvalue       /= "VOTER"
+
+
Figure 5
+
+
+
+
Description
+
+
+

The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL.

+
+
+
+
+
+
+
+
+
+

+5.2. Updated Relation Type Value +

+
+

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.

+
+
+
+
Format Definition
+
+
+

This property parameter is redefined by the following notation:

+
+
+
+
+
+
+
+
+
reltypeparam       /= "RELTYPE" "=" "POLL"
+; Property value is a VPOLL uid
+
+
Figure 6
+
+
+
+
Description
+
+
+

This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component.

+
+
+
+
+
+
+
+
+
+

+5.3. Updated Status Value +

+
+

Status property values are defined in section 3.8.1.11. of [RFC5545]. +This specification updates that type to define valid VPOLL status +values.

+
+
+
+
Format Definition
+
+
+

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
+          / "SUBMITTED"  ; The winning item has been
+                         ; submitted
+          / "CANCELLED"
+
+
Figure 7
+
+
+
+
Description
+
+
+

These values allow clients and servers to handle the +choosing and submission of winning choices.

+
+
+
+
+
+
If the client is choosing and the server submitting then the
+client should set the POLL-WINNER property, set the status to
+CONFIRMED and save the poll.  When the server submits the winning
+choice it will set the status to SUBMITTED.
+
+
+
Figure 8
+
+
+
+
+
+
+
+
+
+

+5.4. New Property Parameters +

+
+
+

+5.4.1. Required +

+
+
+
Parameter name
+
+
+

REQUIRED

+
+
+
+
Purpose
+
+
+

To specify whether the associated property is required in +the current context.

+
+
+
+
Format Definition
+
+
+

This parameter is defined by the following notation:

+
+
+
+
+
+
+
+
+
requirededparam = "REQUIRED"  "=" ("TRUE" / "FALSE")
+  ; Default is FALSE
+
+
Figure 9
+
+
+
+
Description
+
+
+

This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies.

+
+
+
+
+
+
+
+
+
+

+5.4.2. Stay-Informed +

+
+
+
Parameter name
+
+
+

STAY-INFORMED

+
+
+
+
Purpose
+
+
+

To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed.

+
+
+
+
Format Definition
+
+
+

This parameter is defined by the following notation:

+
+
+
+
+
+
+
+
+
stayinformedparam = "STAY-INFORMED"  "=" ("TRUE" / "FALSE")
+                  ; Default is FALSE
+
+
Figure 10
+
+
+
+
Description
+
+
+

This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant.

+
+
+
+
+
+
+
+
+
+
+
+

+5.5. New Properties +

+
+
+

+5.5.1. Accept-Response +

+
+
+
Property name
+
+
+

ACCEPT-RESPONSE

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to indicate the types of +component that may be supplied in a response.

+
+
+
+
Property Parameters
+
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives.

+
+
+

If this property is not present voters are only allowed to respond +to the choices in the request.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":"
+                    iana-token ("," iana-token) CRLF
+
+acceptresponseparams = *(";" other-param)
+
+
Figure 11
+
+
+
+
+
+

+5.5.2. Poll-Completion +

+
+
+
Property name
+
+
+

POLL-COMPLETION

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s).

+
+
+
+
Description
+
+
+

When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.

+
+
+

For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action.

+
+
+

Server initiated submission requires that the submitted choice +MUST be a valid calendaring component.

+
+
+

POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF
+
+pcparam = *(";" other-param)
+
+pcvalue = "SERVER"  ; The server is responsible for both choosing and
+                   ; submitting the winner(s)
+        / "SERVER-SUBMIT" ; The server is responsible for
+                   ; submitting the winner(s). The client chooses.
+        / "SERVER-CHOICE"  ; The server is responsible for
+                   ; choosing the winner(s). The client will submit.
+        / "CLIENT" ; The client is responsible for both choosing and
+                   ; submitting the winner(s)
+        / iana-token
+        / x-name
+        ;Default is CLIENT
+
+
Figure 12
+
+
+
+
Example
+
+
+

The following is an example of this property:

+
+
+
+
+
+
+
+
+
POLL-COMPLETION: SERVER-SUBMIT
+
+
Figure 13
+
+
+
+
+
+

+5.5.3. Poll-Item-Id +

+
+
+
Property name
+
+
+

POLL-ITEM-ID

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL child components as an +identifier.

+
+
+
+
Value type
+
+
+

INTEGER

+
+
+
+
Property Parameters
+
+
+

Non-standard parameters can be specified on +this property.

+
+
+
+
Conformance
+
+
+

This property MUST be specified in a VOTE component and +in VPOLL choice items.

+
+
+
+
Description
+
+
+

In a METHOD:REQUEST each choice 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.

+
+
+

POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollitemid = "POLL-ITEM-ID" pollitemdparams ":"
+                  integer CRLF
+
+pollitemidparams = *(
+                   (";" other-param)
+            )
+
+
Figure 14
+
+
+
+
+
+

+5.5.4. Poll-Mode +

+
+
+
Property name
+
+
+

POLL-MODE

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to indicate what voting mode +is to be applied.

+
+
+
+
Property Parameters
+
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component or +its sub-components.

+
+
+
+
Description
+
+
+

The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID.

+
+
+

Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollmode = "POLL-MODE" pollmodeparams ":"
+             ("BASIC" / iana-token / other-token) CRLF
+
+pollmodeparams = *(";" other-param)
+
+
Figure 15
+
+
+
+
+
+

+5.5.5. Poll-properties +

+
+
+
Property name
+
+
+

POLL-PROPERTIES

+
+
+
+
Purpose
+
+
+

This property is used in VPOLL to define which icalendar +properties are being voted on.

+
+
+
+
Property Parameters
+
+
+

Non-standard or iana parameters can be +specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollproperties = "POLL-PROPERTIES" pollpropparams ":"
+             text *("," text) CRLF
+
+pollpropparams = *(";" other-param)
+
+
Figure 16
+
+
+
+
+
+

+5.5.6. Poll-Winner +

+
+
+
Property name
+
+
+

POLL-WINNER

+
+
+
+
Purpose
+
+
+

This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won.

+
+
+
+
Value type
+
+
+

INTEGER

+
+
+
+
Property Parameters
+
+
+

Non-standard parameters can be specified on +this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner.

+
+
+
+
Format Definition
+
+
+

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
+
+
Figure 17
+
+
+
+
+
+

+5.5.7. Reply-URL +

+
+
+
Property name
+
+
+

REPLY-URL

+
+
+
+
Purpose
+
+
+

This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service.

+
+
+
+
Property Parameters
+
+
+

Non-standard, required or iana parameters can +be specified on this property.

+
+
+
+
Conformance
+
+
+

This property MAY be specified in a VPOLL component.

+
+
+
+
Description
+
+
+

When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF
+
+reply-urlparams = *(
+                  (";" requiredparam) /
+                  (";" other-param)
+                  )
+
+
Figure 18
+
+
+
+
+
+

+5.5.8. Response +

+
+
+
Property name
+
+
+

RESPONSE

+
+
+
+
Purpose
+
+
+

To specify a response vote.

+
+
+
+
Value type
+
+
+

INTEGER

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
response = "RESPONSE" response-params ":" integer CRLF
+                 ; integer value 0..100
+
+responseparams = *(";" other-param)
+
+
Figure 19
+
+
+
+
Description
+
+
+

This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention:

+
+
    +
  • +
    +

    0 - 39 A "NO vote"

    +
    +
  • +
  • +
    +

    40 - 79 A "MAYBE" vote

    +
    +
  • +
  • +
    +

    80 - 89 A "YES - but not preferred vote"

    +
    +
  • +
  • +
    +

    90-100 A "YES" vote.

    +
    +
    +

    Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe).

    +
    +
  • +
+
+
+
+
+
+
+
+
+
+
+

+5.6. New Components +

+
+
+

+5.6.1. VPOLL Component +

+
+
+
Component name
+
+
+

VPOLL

+
+
+
+
Purpose
+
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
pollc    = "BEGIN" ":" "VPOLL" CRLF
+            pollprop
+            *participantc *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 / 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 /
+          ;
+          )
+
+
Figure 20
+
+
+
+
Description
+
+
+

This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.

+
+
+

The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting - both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components.

+
+
+

If specified, the "DTSTART" property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created.

+
+
+

If "DTSTART" is present "DURATION" MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration.

+
+
+

"DTEND" MAY be specified with or without "DTSTART" and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property.

+
+
+

If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.

+
+
+
+
+
+
+
+
+
+

+5.6.2. VOTE Component +

+
+
+
Component name
+
+
+

VOTE

+
+
+
+
Purpose
+
+
+

This component provides a mechanism by which voters can +vote on provided choices.

+
+
+
+
Conformance
+
+
+

This component may be specified zero or more times in a PARTICIPANT component which identifies the voter.

+
+
+
+
Format Definition
+
+
+

This property is defined by the following notation:

+
+
+
+
+
+
+
+
+
votec     = "BEGIN" ":" "VOTE" CRLF
+            voteprop
+            *eventc *todoc *journalc *freebusyc
+            *availabilityc *alarmc *iana-comp *x-comp
+            "END" ":" "VOTE" CRLF
+
+voteprop = *(
+           ;
+           ; The following are REQUIRED,
+           ; but MUST NOT occur more than once.
+           ;
+           pollitemid / response /
+           ;
+           ; The following are OPTIONAL,
+           ; and MAY occur more than once.
+           ;
+           comment / x-prop / iana-prop
+           ;
+           )
+
+
Figure 21
+
+
+
+
Description
+
+
+

This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.

+
+
+

The required and optional properties and their meanings will depend +upon the POLL-MODE in effect.

+
+
+

For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice.

+
+
+

If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER - such as the respondees +availability.

+
+
+
+
+
+
+
+
+
+
+
+
+
+

+6. Poll Modes +

+
+

The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property.

+
+
+

New poll modes can be registered by including a completed POLL-MODE +Registration Template (see Section 10.3) in a published RFC.

+
+
+
+

+6.1. POLL-MODE:BASIC +

+
+

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.

+
+
+
+

+6.1.1. Property restrictions +

+
+

This poll mode has the following property requirements:

+
+
+
+
POLL-ITEM-ID
+
+
+

Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll.

+
+
+
+
POLL-WINNER
+
+
+

On confirmation of the poll this property MUST be +present and identifies the winning component.

+
+
+
+
+
+
+
+
+
+

+6.1.2. Outcome reporting +

+
+

To confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED.

+
+
+

When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.

+
+
+
+
+
+
+
+
+
+

+7. iTIP Extensions +

+
+

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.

+
+
+
+

+7.1. Methods +

+
+

There are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1
MethodDescription
+
+

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 PARTICIPANTS.

+
+
+
+
+

The following table shows the above methods broken down by who can +send them with VPOLL components.

+
+
+ + + + + + + + + + + + + + + + + + +
Table 2
OriginatorMethods
+
+

Organizer

+
+
+
+

CANCEL, PUBLISH, REQUEST, POLLSTATUS

+
+
+
+

Voter

+
+
+
+

REPLY, REFRESH, REQUEST (only when delegating)

+
+
+
+
+
+
+
+

+7.2. Interoperability Models +

+
+

Most of the standard iTip specification applies with respect to +organizer and voters.

+
+
+
+

+7.2.1. Delegation +

+
+

TBD

+
+
+
+ +
+
+

+7.2.3. Component Revisions +

+
    +
  • +
    +

    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

    +
    +
  • +
+
+
+
+
+

+7.2.4. Message Sequencing +

+
+

TBD

+
+
+
+
+
+
+
+

+7.3. Application Protocol Elements +

+
+
+

+7.3.1. Methods for VPOLL Calendar Components +

+
+

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.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3
Presence ValueDescription
+
+

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.

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4
MethodDescription
+
+

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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach.

+
+
+
+

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 PARTICIPANT.

+
+
+
+
+
+
+
+

+7.3.2. Method: PUBLISH +

+
+

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.

+
+
+
+
Note
+
+
+

Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification.

+
+
+
+
+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 5: +Constraints for a METHOD:PUBLISH of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST equal PUBLISH.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

DTSTAMP

+
+
+
+

1

+
+
+
+

DTSTART

+
+
+
+

0 or 1

+
+
+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+
+
+

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+

+
+
+
+

PARTICIPANT

+
+
+
+

0+

+
+
+
+

Only PARTICIPANT components with PARTICIPANT-TYPE not equal to "VOTER" - that is, no voters

+
+
+
+

REQUEST-STATUS

+
+
+
+

0

+
+
+
+

VALARM

+
+
+
+

0+

+
+
+
+

VEVENT

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VFREEBUSY

+
+
+
+

0

+
+
+
+

VJOURNAL

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VTODO

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VTIMEZONE

+
+
+
+

0+

+
+
+
+

MUST be present if any date/time refers to a timezone.

+
+
+
+

IANA-COMPONENT

+
+
+
+

0+

+
+
+
+

X-COMPONENT

+
+
+
+

0+

+
+
+
+
+
+
+
+

+7.3.3. Method: REQUEST +

+
+

The "REQUEST" method in a "VPOLL" component provides the following +scheduling functions:

+
+
    +
  • +
    +

    Invite "Voters" to respond to the poll.

    +
    +
  • +
  • +
    +

    Change the items being voted upon.

    +
    +
  • +
  • +
    +

    Complete or confirm the poll.

    +
    +
  • +
  • +
    +

    Response to a "REFRESH" request.

    +
    +
  • +
  • +
    +

    Update the details of an existing vpoll.

    +
    +
  • +
  • +
    +

    Update the status of "Voters".

    +
    +
  • +
  • +
    +

    Forward a "VPOLL" to another uninvited CU.

    +
    +
  • +
  • +
    +

    For an existing "VPOLL" calendar component, delegate the role of +"Voter" to another CU.

    +
    +
  • +
  • +
    +

    For an existing "VPOLL" calendar component, change the role of +"Organizer" to another CU.

    +
    +
  • +
+
+

The "Organizer" originates the "REQUEST". The recipients of the +"REQUEST" method are the CUs voting in the poll, the "Voters". +"Voters" use the "REPLY" method to convey votes to 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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 6: +Constraints for a METHOD:REQUEST of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be REQUEST.

+
+
+
+

VPOLL

+
+
+
+

1

+
+
+
+

PARTICIPANT

+
+
+
+

1+

+
+
+
+

Identified as voters with the PARTICIPANT-TYPE=VOTER

+
+
+
+

DTSTAMP

+
+
+
+

1

+
+
+
+

DTSTART

+
+
+
+

0 or 1

+
+
+
+

If present defines the start of the poll. Otherwise the poll starts when it is created and distributed.

+
+
+
+

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.

+
+
+
+

VFREEBUSY

+
+
+
+

0

+
+
+
+

VJOURNAL

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+

VTODO

+
+
+
+

0+

+
+
+
+

Depending upon the poll mode in effect there MAY be candidate components included in the poll component.

+
+
+
+
+
+
+7.3.3.1. Rescheduling a poll +
+
+

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.

+
+
+
+
+
+
+7.3.3.2. Updating or Reconfirmation of a 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 a "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.

+
+
+
+
+
+
+7.3.3.3. Confirmation of a 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.

+
+
+
+
+
+
+7.3.3.4. Closing a Poll +
+
+

The "REQUEST" method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED.

+
+
+
+
+
+
+7.3.3.5. Delegating a Poll to Another CU +
+
+

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".

+
+
+
+
+
+
+7.3.3.6. Changing 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".

+
+
+
+
+
+
+7.3.3.7. Sending on Behalf of the 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".

+
+
+
+
+
+
+7.3.3.8. Forwarding to an Uninvited CU +
+
+

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 a "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.

+
+
+
+
+
+
+7.3.3.9. Updating Voter Status +
+
+

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 "RSVP=TRUE" property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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".

+
+
+
+
+
+
+
+

+7.3.4. Method: REPLY +

+
+

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" "CALENDAR-ADDRESS" +property. The "Delegate" SHOULD include the calendar address of the +"Delegator" on the "DELEGATED-FROM" property parameter of the +"Delegate's" "CALENDAR-ADDRESS" 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".

+
+
+

A "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. (But see comments on VFREEBUSY and VAVAILABILITY)

+
+
+

This method type is an iCalendar object that conforms to the +following property constraints:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 7: +Constraints for a METHOD:REPLY of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be REPLY.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

All components MUST have the same

+
+
+
+

UID.

+
+
+
+

PARTICIPANT

+
+
+
+

1

+
+
+
+

Identifies 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 or 1

+
+
+
+

A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy.

+
+
+
+

VAVAILABILITY

+
+
+
+

0

+
+
+
+

A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available.

+
+
+
+

VJOURNAL

+
+
+
+

0

+
+
+
+

VTODO

+
+
+
+

0

+
+
+
+
+
+
+
+

+7.3.5. Method: CANCEL +

+
+

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 7.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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 8: +Constraints for a METHOD:CANCEL of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be CANCEL.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

All must have the same UID.

+
+
+
+

PARTICIPANT

+
+
+
+

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

+
+
+
+

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

+
+
+
+
+
+
+
+

+7.3.6. Method: REFRESH +

+
+

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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 9: +Constraints for a METHOD:REFRESH of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST be REFRESH.

+
+
+
+

VPOLL

+
+
+
+

1

+
+
+
+

PARTICIPANT

+
+
+
+

1

+
+
+
+

MUST identify the requester as a voter.

+
+
+
+

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

+
+
+
+
+
+
+
+

+7.3.7. Method: POLLSTATUS +

+
+

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. All "Voters" MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Table 10: +Constraints for a METHOD:POLLSTATUS of a VPOLL +
Component/PropertyPresenceComment
+
+

METHOD

+
+
+
+

1

+
+
+
+

MUST equal POLLSTATUS.

+
+
+
+

VPOLL

+
+
+
+

1+

+
+
+
+

PARTICIPANT

+
+
+
+

1+

+
+
+
+

The voters containing their current vote

+
+
+
+

COMPLETED

+
+
+
+

0 or 1

+
+
+
+

Only present for a completed poll

+
+
+
+

DTSTAMP

+
+
+
+

1

+
+
+
+

DTSTART

+
+
+
+

0 or 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

+
+
+
+

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 SHOULD NOT be present.

+
+
+
+

VFREEBUSY

+
+
+
+

0

+
+
+
+

VJOURNAL

+
+
+
+

0

+
+
+
+

All candidate components SHOULD NOT be present.

+
+
+
+

VTODO

+
+
+
+

0

+
+
+
+

All candidate components SHOULD NOT be present.

+
+
+
+

VTIMEZONE

+
+
+
+

0+

+
+
+
+

MUST be present if any date/time refers to a timezone.

+
+
+
+

IANA-COMPONENT

+
+
+
+

0+

+
+
+
+

X-COMPONENT

+
+
+
+

0+

+
+
+
+
+
+
+
+
+
+
+
+

+8. CalDAV Extensions +

+
+

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.

+
+
+

Additionally, it extends [RFC6638] as it a VPOLL component is a +schedulable entity.

+
+
+
+

+8.1. Calendar Collection Properties +

+
+

This section defines new CalDAV properties for calendar collections.

+
+
+
+

+8.1.1. CALDAV:supported-vpoll-component-sets +

+
+
+
Name
+
+
+

supported-vpoll-component-sets

+
+
+
+
Namespace
+
+
+

urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.

+
+
+

It also specifies the combination of allowed component types.

+
+
+

Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition Section 8.2 being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
&lt;!ELEMENT supported-vpoll-component-sets
+     (supported-vpoll-component-set*) &gt;
+
+&lt;!ELEMENT supported-vpoll-component-set (comp+)&gt;
+
+
Figure 22
+
+
+
+
+
&lt;C:supported-vpoll-component-sets
+     xmlns:C="urn:ietf:params:xml:ns:caldav"&gt;
+
+  &lt;!-- VPOLLs with VEVENT, VFREEBUSY or VTODO --&gt;
+  &lt;C:supported-vpoll-component-set&gt;
+    &lt;C:comp name="VEVENT" /&gt;
+    &lt;C:comp name="VFREEBUSY" /&gt;
+    &lt;C:comp name="VTODO" /&gt;
+  &lt;/C:supported-vpoll-component-set&gt;
+
+  &lt;!-- VPOLLs with just VEVENT or VFREEBUSY --&gt;
+  &lt;C:supported-vpoll-component-set&gt;
+    &lt;C:comp name="VEVENT" /&gt;
+    &lt;C:comp name="VFREEBUSY" /&gt;
+  &lt;/C:supported-vpoll-component-set&gt;
+
+  &lt;!-- VPOLLs with just VEVENT --&gt;
+  &lt;C:supported-vpoll-component-set&gt;
+    &lt;C:comp name="VEVENT" /&gt;
+  &lt;/C:supported-vpoll-component-set&gt;
+
+  &lt;!-- VPOLLs with just VTODO --&gt;
+  &lt;C:supported-vpoll-component-set&gt;
+    &lt;C:comp name="VTODO" /&gt;
+  &lt;/C:supported-vpoll-component-set&gt;
+&lt;/C:supported-vpoll-component-sets&gt;
+
+
Figure 23
+
+
+
+
+
+

+8.1.2. CALDAV:vpoll-max-items +

+
+
+
Name
+
+
+

vpoll-max-items

+
+
+
+
Namespace
+
+
+

urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition +Section 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
&lt;!ELEMENT vpoll-max-items (#PCDATA)&gt;
+PCDATA value: a numeric value (integer greater than zero)
+
+
Figure 24
+
+
+
+
+
&lt;C:vpoll-max-items xmlns:C="urn:ietf:params:xml:ns:caldav"
+&gt;25&lt;/C:vpoll-max-items&gt;
+
+
Figure 25
+
+
+
+
+
+

+8.1.3. CALDAV:vpoll-max-active +

+
+
+
Name
+
+
+

vpoll-max-active

+
+
+
+
Namespace
+
+
+

urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Provides a numeric value indicating the maximum number of +active vpolls at any one time.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition +Section 8.2 being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
&lt;!ELEMENT vpoll-max-active (#PCDATA)&gt;
+PCDATA value: a numeric value (integer greater than zero)
+
+
Figure 26
+
+
+
+
+
&lt;C:vpoll-max-active xmlns:C="urn:ietf:params:xml:ns:caldav"
+&gt;25&lt;/C:vpoll-max-active&gt;
+
+
Figure 27
+
+
+
+
+
+

+8.1.4. CALDAV:vpoll-max-voters +

+
+
+
Name
+
+
+

+vpoll-max-voters

+
+
+
+
Namespace
+
+
+

+urn:ietf:params:xml:ns:caldav

+
+
+
+
Purpose
+
+
+

Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection.

+
+
+
+
Conformance
+
+
+

This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +[RFC2518]).

+
+
+
+
Description
+
+
+

The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition Section 8.2 +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component.

+
+
+
+
Definition
+
+
+
+
+
+
+
+
&lt;!ELEMENT vpoll-max-voters (#PCDATA)&gt;
+PCDATA value: a numeric value (integer greater than zero)
+
+
Figure 28
+
+
+
+
+
&lt;C:vpoll-max-voters xmlns:C="urn:ietf:params:xml:ns:caldav"
+&gt;25&lt;/C:vpoll-max-voters&gt;
+
+
Figure 29
+
+
+
+ +
+
+

+8.1.6. Extensions to CalDAV scheduling +

+
+

This specification extends [RFC6638].

+
+
+

Each section of Appendix A "Scheduling Privileges Summary" is +extended to include VPOLL.

+
+
+

Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.

+
+
+
+
+
+
+
+

+8.2. Additional Preconditions for PUT, COPY, and MOVE +

+
+

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:

+
+
+
+
(CALDAV:supported-vpoll-component-sets)
+
+
+

The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection;

+
+
+
+
(CALDAV:vpoll-max-items)
+
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value Section 8.1.2 +on the calendar collection where the resource will be stored;

+
+
+
+
(CALDAV:vpoll-max-active)
+
+
+

The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value +Section 8.1.3 on the calendar collection where the resource will +be stored;

+
+
+
+
(CALDAV:vpoll-max-voters)
+
+
+

The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value Section 8.1.4 on the +calendar collection where the resource will be stored;

+
+
+
+
+
+
+
+
+
+

+8.3. CalDAV:calendar-query Report +

+
+

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.

+
+
+
+

+8.3.1. Example: Partial Retrieval of VPOLL +

+
+

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.

+
+
+
+
+
&gt;&gt; Request &lt;&lt;
+
+REPORT /cyrus/work/ HTTP/1.1
+Host: cal.example.com
+Depth: 1
+Content-Type: application/xml; charset="utf-8"
+Content-Length: xxxx
+
+&lt;?xml version="1.0" encoding="utf-8" ?&gt;
+&lt;C:calendar-query xmlns:D="DAV:"
+              xmlns:C="urn:ietf:params:xml:ns:caldav"&gt;
+  &lt;D:prop&gt;
+    &lt;D:getetag/&gt;
+    &lt;C:calendar-data&gt;
+      &lt;C:comp name="VCALENDAR"&gt;
+        &lt;C:prop name="VERSION"/&gt;
+        &lt;C:comp name="VPOLL"&gt;
+          &lt;C:prop name="SUMMARY"/&gt;
+          &lt;C:prop name="UID"/&gt;
+          &lt;C:prop name="DTSTART"/&gt;
+          &lt;C:prop name="DTEND"/&gt;
+          &lt;C:prop name="DURATION"/&gt;
+        &lt;/C:comp&gt;
+
+      &lt;/C:comp&gt;
+    &lt;/C:calendar-data&gt;
+  &lt;/D:prop&gt;
+  &lt;C:filter&gt;
+    &lt;C:comp-filter name="VCALENDAR"&gt;
+      &lt;C:comp-filter name="VPOLL"&gt;
+        &lt;C:time-range start="20121204T000000Z"
+                      end="20121205T000000Z"/&gt;
+      &lt;/C:comp-filter&gt;
+    &lt;/C:comp-filter&gt;
+  &lt;/C:filter&gt;
+&lt;/C:calendar-query&gt;
+
+&gt;&gt; Response &lt;&lt;
+
+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
+
+&lt;?xml version="1.0" encoding="utf-8" ?&gt;
+&lt;D:multistatus xmlns:D="DAV:"
+           xmlns:C="urn:ietf:params:xml:ns:caldav"&gt;
+  &lt;D:response&gt;
+    &lt;D:href&gt;http://cal.example.com/cyrus/work/poll2.ics&lt;/D:href&gt;
+    &lt;D:propstat&gt;
+      &lt;D:prop&gt;
+        &lt;D:getetag&gt;"fffff-abcd2"&lt;/D:getetag&gt;
+        &lt;C:calendar-data&gt;BEGIN:VCALENDAR
+VERSION:2.0
+BEGIN:VPOLL
+DTSTART;TZID=US/Eastern:20121202T120000
+DURATION:PT4D
+SUMMARY:Poll #2
+UID:00959BC664CA650E933C892C@example.com
+END:VPOLL
+END:VCALENDAR
+&lt;/C:calendar-data&gt;
+      &lt;/D:prop&gt;
+      &lt;D:status&gt;HTTP/1.1 200 OK&lt;/D:status&gt;
+    &lt;/D:propstat&gt;
+  &lt;/D:response&gt;
+  &lt;D:response&gt;
+    &lt;D:href&gt;http://cal.example.com/cyrus/work/poll3.ics&lt;/D:href&gt;
+    &lt;D:propstat&gt;
+      &lt;D:prop&gt;
+        &lt;D:getetag&gt;"fffff-abcd3"&lt;/D:getetag&gt;
+        &lt;C:calendar-data&gt;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
+&lt;/C:calendar-data&gt;
+      &lt;/D:prop&gt;
+      &lt;D:status&gt;HTTP/1.1 200 OK&lt;/D:status&gt;
+    &lt;/D:propstat&gt;
+  &lt;/D:response&gt;
+&lt;/D:multistatus&gt;
+
+
Figure 30
+
+
+
+
+
+
+
+

+8.4. CalDAV time ranges +

+
+

"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

+
+
+

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.

+
+
+
+
+
+-------------------------------------------------------------------+
+| 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  &lt;= DTSTART+DURATION)  AND             |
+|   |   |   |   |   | ((end   &gt;  DTSTART)  OR                       |
+|   |   |   |   |   |  (end   &gt;= DTSTART+DURATION))                 |
++---+---+---+---+---+-----------------------------------------------+
+| Y | N | Y | * | * | ((start &lt;  DTEND)    OR  (start &lt;= DTSTART))  |
+|   |   |   |   |   | AND                                           |
+|   |   |   |   |   | ((end   &gt;  DTSTART)  OR  (end   &gt;= DTEND))    |
++---+---+---+---+---+-----------------------------------------------+
+| Y | N | N | * | * | (start  &lt;= DTSTART)  AND (end &gt;  DTSTART)     |
++---+---+---+---+---+-----------------------------------------------+
+| N | N | Y | * | * | (start  &lt;  DTEND)    AND (end &gt;= DTEND)       |
++---+---+---+---+---+-----------------------------------------------+
+| N | N | N | Y | Y | ((start &lt;= CREATED)  OR  (start &lt;= COMPLETED))|
+|   |   |   |   |   | AND                                           |
+|   |   |   |   |   | ((end   &gt;= CREATED)  OR  (end   &gt;= COMPLETED))|
++---+---+---+---+---+-----------------------------------------------+
+| N | N | N | Y | N | (start  &lt;= COMPLETED) AND (end  &gt;= COMPLETED) |
++---+---+---+---+---+-----------------------------------------------+
+| N | N | N | N | Y | (end    &gt;  CREATED)                           |
++---+---+---+---+---+-----------------------------------------------+
+| N | N | N | N | N | TRUE                                          |
++---+---+---+---+---+-----------------------------------------------+
+
+
Figure 31
+
+
+
+
+
+
+
+

+9. Security Considerations +

+
+

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.

+
+
+
+
+
+

+10. IANA Considerations +

+
+
+

+10.1. Parameter Registrations +

+
+

This document defines the following new iCalendar property parameters +to be added to the registry defined in [RFC5545]:

+
+
+ + + + + + + + + + + + + + + + + + + + + +
Table 11
Property ParameterStatusReference
+
+

REQUIRED

+
+
+
+

Current

+
+
+ +
+
+

STAY-INFORMED

+
+
+
+

Current

+
+
+ +
+
+
+
+
+
+

+10.2. Property Registrations +

+
+

This document defines the following new iCalendar properties to be +added to the registry defined in [RFC5545]:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 12
PropertyStatusReference
+
+

ACCEPT-RESPONSE

+
+
+
+

Current

+
+
+ +
+
+

POLL-ITEM-ID

+
+
+
+

Current

+
+
+ +
+
+

POLL-MODE

+
+
+
+

Current

+
+
+ +
+
+

POLL-PROPERTIES

+
+
+
+

Current

+
+
+ +
+
+

POLL-WINNER

+
+
+
+

Current

+
+
+ +
+
+

RESPONSE

+
+
+
+

Current

+
+
+ +
+
+
+
+
+
+

+10.3. POLL-MODE Registration Template +

+
+

A poll mode is defined by completing the following template.

+
+
+
+
Poll mode name
+
+
+

The name of the poll mode.

+
+
+
+
Purpose
+
+
+

The purpose of the poll mode. Give a short but clear +description.

+
+
+
+
Reference
+
+
+

A reference to the RFC in which the poll mode is defined

+
+
+
+
+
+
+
+
+
+

+10.4. POLL-MODE Registrations +

+
+

This document defines the following registered poll modes.

+
+
+ + + + + + + + + + + + + + + + +
Table 13
Poll mode namePurposeReference
+
+

BASIC

+
+
+
+

To provide simple voting for a single outcome from a number of candidates.

+
+
+
+

Current

+
+
+
+
+
+
+
+
+
+

+11. Normative References +

+
+
[RFC2518]
+
+Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. Jensen, "HTTP Extensions for Distributed Authoring - WEBDAV", IETF RFC 2518, IETF RFC 2518, DOI 10.17487/RFC2518, , <https://www.rfc-editor.org/info/rfc2518>.
+
+
[RFC3986]
+
+Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", IETF RFC 3986, IETF RFC 3986, DOI 10.17487/RFC3986, , <https://www.rfc-editor.org/info/rfc3986>.
+
+
[RFC4791]
+
+Daboo, C., Desruisseaux, B., and L. Dusseault, "Calendaring Extensions to WebDAV (CalDAV)", IETF RFC 4791, IETF RFC 4791, DOI 10.17487/RFC4791, , <https://www.rfc-editor.org/info/rfc4791>.
+
+
[RFC5545]
+
+Desruisseaux, B., Ed., "Internet Calendaring and Scheduling Core Object Specification (iCalendar)", IETF RFC 5545, IETF RFC 5545, DOI 10.17487/RFC5545, , <https://www.rfc-editor.org/info/rfc5545>.
+
+
[RFC5546]
+
+Daboo, C., Ed., "iCalendar Transport-Independent Interoperability Protocol (iTIP)", IETF RFC 5546, IETF RFC 5546, DOI 10.17487/RFC5546, , <https://www.rfc-editor.org/info/rfc5546>.
+
+
[RFC6047]
+
+Melnikov, A., Ed., "iCalendar Message-Based Interoperability Protocol (iMIP)", IETF RFC 6047, IETF RFC 6047, DOI 10.17487/RFC6047, , <https://www.rfc-editor.org/info/rfc6047>.
+
+
[RFC6638]
+
+Daboo, C. and B. Desruisseaux, "Scheduling Extensions to CalDAV", IETF RFC 6638, IETF RFC 6638, DOI 10.17487/RFC6638, , <https://www.rfc-editor.org/info/rfc6638>.
+
+
[I-D.draft-ietf-calext-eventpub-extensions]
+
+"AUTOFILL", IETF IETF I-D.draft-ietf-calext-eventpub-extensions, IETF IETF I-D.draft-ietf-calext-eventpub-extensions.
+
+
+
+
+
+
+

+12. Bibliography +

+
+
+
+
+

+Appendix A. Open issues +

+
+

public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property

+
+
+

Notifications: Need to do a section on what Notifications to + support. + A. VPOLL is about to end and you haven't voted on it yet. + Instead reuse VALARMS to notify the user?

+
+
+

Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No - voter + has indicated now unable to attend - want to revote

+
+
+

Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status

+
+
+

ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration

+
+
+

Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event.

+
+
+

Need to write down what isn't valid in a VPOLL + a. Can't change POLL-MODE

+
+
+

Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc

+
+
+

? - some iTip notes On confirm - send itip if appropriate (PUBLISH) + - all non-participating - shared - feeds + Organizer can specify where result is? + Confirm can specify that itip is sent - ITIP / NONE - parameter ? + on POLL-WINNER

+
+
+

Need to add example of freebusy in response

+
+
+
+
+
BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest
+METHOD: REPLY
+BEGIN:VPOLL
+ORGANIZER:mailto:douglm@mysite.edu
+BEGIN:PARTICIPANT
+PARTICIPANT-TYPE: VOTER
+CALENDAR-ADDRESS:mailto:eric@example.com
+UID:sched01-1234567890
+DTSTAMP:20120101T010000Z
+SEQUENCE:0
+SUMMARY:What to do this week
+BEGIN:VFREEBUSY
+.......
+END:VFREEBUSY
+END:PARTICIPANT
+END:VPOLL
+END:VCALENDAR
+
+
Figure 32
+
+
+
+
+
+

+Appendix B. Change log +

+
+
+
Calext V01: 2019-10-17 MD
+
+
+

Replace VVOTER and VOTER with PARTICIPANT.

+
+
+
+
Calext V00: 2019-05-17 MD
+
+
+

First calext version. Moved source to metanorma. No changes to specification.

+
+
+
+
V03: 2014-10-28 MD
+
+
    +
  • +
    +

    Add VVOTER and VOTE components.

    +
    +
  • +
  • +
    +

    Add RESPONSE property.

    +
    +
  • +
  • +
    +

    Remove RESPONSE parameter from VOTER.

    +
    +
  • +
+
+
+
V03: 2014-05-12 MD
+
+
    +
  • +
    +

    Add reply-url property and required parameter.

    +
    +
  • +
  • +
    +

    Fix ACCEPT-RESPONSE definition.

    +
    +
  • +
+
+
+
V02: 2014-05-12 MD
+
+
    +
  • +
    +

    Typos fixed, clarifications made.

    +
    +
  • +
  • +
    +

    Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT

    +
    +
  • +
  • +
    +

    Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values.

    +
    +
  • +
  • +
    +

    iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent

    +
    +
  • +
  • +
    +

    iTip: fix broken table cells

    +
    +
  • +
  • +
    +

    Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table

    +
    +
  • +
  • +
    +

    Added Caldav scheduling section

    +
    +
  • +
+
+
+
V01: 2013-08-07 MD
+
+
    +
  • +
    +

    Removed method CONFIRM

    +
    +
  • +
  • +
    +

    Removed pollitemid from VPOLL abnf. Added text for pollwinner

    +
    +
  • +
  • +
    +

    Added POLL-WINNER and verbiage

    +
    +
  • +
  • +
    +

    Added STATUS values

    +
    +
  • +
  • +
    +

    Added RELTYPE=POLL

    +
    +
  • +
  • +
    +

    Added supported-vpoll-component-sets

    +
    +
  • +
  • +
    +

    Added CalDAV related parameters to VOTER

    +
    +
  • +
  • +
    +

    Removed bad CalDAV query example. State that queries cannot +target the sub-components.

    +
    +
  • +
+
+
+
Initial version: 2012-11-02 MD
+
+
+
+
+
+
+
+
+

+Authors' Addresses +

+
+
Eric York
+ +
+
+
Cyrus Daboo
+ +
+
+
Michael Douglass
+ +
+
+
+ + + diff --git a/sources/draft-ietf-calext-vpoll.rfc.xml b/sources/draft-ietf-calext-vpoll.rfc.xml new file mode 100644 index 0000000..806dcd4 --- /dev/null +++ b/sources/draft-ietf-calext-vpoll.rfc.xml @@ -0,0 +1,3134 @@ + + + + + + + + + + VPOLL: Consensus Scheduling Component for iCalendar + + + +
+ + eric.york@gmail.com + +
+
+ +
+ + cyrus@daboo.name + +
+
+ +
+ + mikeadouglass@gmail.com + +
+
+ Internet + + +This specification introduces a new iCalendar component which allows +for consensus scheduling, that is, voting on a number of alternative +meeting or task alternatives. + +
+ +
+ Acknowledgements + The authors would like to thank the members of the Calendaring and Scheduling Consortium (CalConnect) for contributing their ideas and support. +
+
+ Introduction + The currently existing approach to agreeing on meeting times using +iTip and/or iMip has 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. +
+
+ Terms and definitions + For the purposes of this document, + the following terms and definitions apply. +
+consensus scheduling +The process whereby users come to some agreement on meeting +or task alternatives and then book that meeting or task. +
+
+active Vpoll +A VPoll may have a DTSTART, DTEND and DURATION which +may define the start and end of the active voting period +
+
+voter +A participant who votes on the alternatives. A voter need not be an attendee of any of the alternatives presented. +
+
+
+ Simple Consensus Scheduling + 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. This document will +show how a VPOLL object is used to inform voters of the state of a +simple vote on some alternatives. +
The VPOLL Component: An OverviewThe VPOLL component acts as a wrapper for a number of alternatives to +be voted on, together with some properties and a new component used +to maintain the state of the voting. For our simple example the +following VPOLL properties and sub-components are either required or +appropriate: +
DTSTAMP
+The usual property. +
SEQUENCE
+The usual property. See below for SEQUENCE +behavior. +
UID
+The usual property. +
ORGANIZER
+The usual property. In general this need not +be an organizer of any of the alternatives. In this simple +outline we assume it is the same. +
SUMMARY
+The usual property. This optional but +recommended property provides the a short title to the poll. +
DESCRIPTION
+The usual property. This optional property +provides more details. +
DTEND
+The usual property. This optional property +provides a poll closing time and date after which the VPOLL is no +longer active. +
POLL-MODE
+A new property which defines how the votes are used to +obtain a result. For our use case it will take the value "BASIC" +meaning one event will be chosen from the alternatives. +
POLL-COMPLETION
+A new property which defines who (server or client) +chooses and/or submits the winning choice. In our example the +value is "SERVER-SUBMIT" which means the client chooses the winner +but the server will submit the winning choice. +
POLL-PROPERTIES
+A new property which defines which icalendar +properties are being voted on. For our use case it will take the +value "DTSTART, LOCATION" meaning only those properties are +significant for voting. Other properties in the events may differ +but are not considered significant for the voting process. +
PARTICIPANT
+There is one of these components for each voter with +the PARTICIPANT-TYPE set to "VOTER". The +CALENDAR-ADDRESS property identifies the voter and this component +will contain one VOTE component for each item being voted on. +
VOTE
+A new component. There is one of these for each voter and +choice. It usually contains at least a POLL-ITEM-ID property to +identify the choice and a RESPONSE property to provide a vote. +For more complex poll modes it may contain other information such +as cost or estimated duration. +
VEVENT
+In our simple use case there will be multiple VEVENT sub- +components defining the alternatives. Each will have a different +date and or time for the meeting. +
+EXAMPLEVPOLL 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.
+
The VPOLL Alternative Choices: An OverviewWithin the VPOLL component we have the alternatives to vote on. In +many respects these are standard components. For our +simple use case they are all VEVENT components. In addition to the +usual properties some extra properties are used for a +VPOLL. +
POLL-ITEM-ID
+This provides a unique reference to the sub-component +within the VPOLL. It's value SHOULD be a small integer. +
+
VPOLL responsesUpon 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 and components: +
DTSTAMP
+The usual property. +
SEQUENCE
+The usual property. See below for SEQUENCE +behavior. +
UID
+Same as the request. +
ORGANIZER
+Same as the request. +
SUMMARY
+Same as the request. +
PARTICIPANT
+One only with a CALENDAR-ADDRESS identifying the voter replying. +
VOTE
+One per item being voted on. +
POLL-ITEM-ID
+One inside each VOTE component to identify the choice. +
RESPONSE
+One inside each VOTE component to specify the vote. +
+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. +
NOTE
+This is poll-mode specific behavior? +
+EXAMPLEREPLY VPOLL from Cyrus:
+
VPOLL updatesWhen 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 one or more PARTICIPANT components each populated with zero or more VOTE components. +EXAMPLE
+
VPOLL CompletionAfter 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. As the POLL- +COMPLETION property is set to SERVER-SUBMIT the server will submit +the winning choice and when it has done so set the STATUS to +"SUBMITTED". +EXAMPLEVPOLL confirmation:
+
Other ResponsesA voter being asked to choose between a number of ORGANIZER supplied +alternatives may find none of them acceptable or may simply not care. +An alternative response, which may be disallowed by the ORGANIZER, is +to send back the respondees availability or freebusy or even one or +more new, alternative choices. +This is accomplished by responding with a VOTE component which has no +POLL-ITEM-ID property. In this case it MUST contain some alternative +information. What form this takes depends on the poll mode in +effect.
+
+
+ iCalendar Extensions +
Updated Participant Type ValueParticipant type property values are defined in section 11.2.1. of +. This specification updates that type to include the new +participant type VOTER to provide information about the voter and to contain their votes. +
Format Definition
+This property parameter is redefined by the following notation: +
+
+ +
Description
+The new property value indicates that the associated PARTICIPANT component identifies a voter in a VPOLL. +
+
Updated Relation Type ValueRelationship parameter type values are defined in section 3.2.15. of +. 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. +
Format Definition
+This property parameter is redefined by the following notation: +
+
+ +
Description
+This parameter can be specified on a property that +references another related calendar component. The new parameter +value indicates that the associated property references a VPOLL +component which contains the current component. +
+
Updated Status ValueStatus property values are defined in section 3.8.1.11. of . +This specification updates that type to define valid VPOLL status +values. +
Format Definition
+This property parameter is redefined by the following notation: +
+
+ +
Description
+These values allow clients and servers to handle the +choosing and submission of winning choices. +
+ +
+
+
New Property Parameters
Required
Parameter name
+REQUIRED +
Purpose
+To specify whether the associated property is required in +the current context. +
Format Definition
+This parameter is defined by the following notation: +
+
+ +
Description
+This parameter MAY be specified on REPLY-URL and, if +the value is TRUE, indicates the organizer requires all replies to +be made via the specified service rather than iTip replies. +
+
Stay-Informed
Parameter name
+STAY-INFORMED +
Purpose
+To specify the voter also wants to be added as an ATTENDEE +when the poll is confirmed. +
Format Definition
+This parameter is defined by the following notation: +
+
+ +
Description
+This parameter MAY be specified on the CALENDAR-ADDRESS +property in the PARTICIPANT component and, if the +value is TRUE, indicates the voter wishes to be added to the final +choice as a non participant. +
+
New Properties
Accept-Response
Property name
+ACCEPT-RESPONSE +
Purpose
+This property is used in VPOLL to indicate the types of +component that may be supplied in a response. +
Property Parameters
+Non-standard or iana parameters can be +specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+When used in a VPOLL this property indicates what +allowable component types may be returned in a reply. Typically +this would allow a voter to respond with their freebusy or +availability rather than choosing one of the presented +alternatives. +If this property is not present voters are only allowed to respond +to the choices in the request. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-Completion
Property name
+POLL-COMPLETION +
Purpose
+This property is used in VPOLL to indicate whether the +client or server is responsible for choosing and/or submitting the +winner(s). +
Description
When a VPOLL is stored on a server which is capable of +handling choosing and submission of winning choices a value of +SERVER indicates that the server should close the poll, choose the +winner and submit whenever it is appropriate to do so.For example, in BASIC poll-mode, reaching the DTEND of the poll +could trigger this server side action. +Server initiated submission requires that the submitted choice +MUST be a valid calendaring component. +POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- +winner, set the status to CONFIRMED and then store the poll on the +server. The server will then submit the winning choice and set +the status to SUBMITTED.
Format Definition
+This property is defined by the following notation: +
+
+ +
Example
+The following is an example of this property: +
+
+
+
Poll-Item-Id
Property name
+POLL-ITEM-ID +
Purpose
+This property is used in VPOLL child components as an +identifier. +
Value type
+INTEGER +
Property Parameters
+Non-standard parameters can be specified on +this property. +
Conformance
+This property MUST be specified in a VOTE component and +in VPOLL choice items. +
Description
+In a METHOD:REQUEST each choice 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. +POLL-ITEM-ID SHOULD be a unique small integer for each component +or set of components. If it remains the same between REQUESTs +then the previous response for that component MAY be re-used. To +force a re-vote on a component due to a significant change, the +POLL-ITEM-ID MUST change. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-Mode
Property name
+POLL-MODE +
Purpose
+This property is used in VPOLL to indicate what voting mode +is to be applied. +
Property Parameters
+Non-standard or iana parameters can be +specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component or +its sub-components. +
Description
+The poll mode defines how the votes are applied to +obtain a result. BASIC mode, the default, means that the voters +are selecting one component (or group of components) with a given +POLL=ITEM-ID. +Other polling modes may be defined in updates to this +specification. These may allow for such modes as ranking or task +assignment. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-properties
Property name
+POLL-PROPERTIES +
Purpose
+This property is used in VPOLL to define which icalendar +properties are being voted on. +
Property Parameters
+Non-standard or iana parameters can be +specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+This property defines which icalendar properties are +significant in the voting process. It may not be clear to voters +which properties are varying in a significant manner. Clients may +use this property to highlight those listed properties. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Poll-Winner
Property name
+POLL-WINNER +
Purpose
+This property is used in a basic mode VPOLL to indicate +which of the VPOLL sub-components won. +
Value type
+INTEGER +
Property Parameters
+Non-standard parameters can be specified on +this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+For poll confirmation each child component MUST have a +POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD +have a POLL-WINNER property which MUST correspond to one of the +POLL-ITEM-ID properties and indicates which sub-component was the +winner. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Reply-URL
Property name
+REPLY-URL +
Purpose
+This property may be used in scheduling messages to +indicate additional reply methods, for example a web-service. +
Property Parameters
+Non-standard, required or iana parameters can +be specified on this property. +
Conformance
+This property MAY be specified in a VPOLL component. +
Description
+When used in a scheduling message this property +indicates additional or required services that can be used to +reply. Typically this would be a web service of some form. +
Format Definition
+This property is defined by the following notation: +
+
+
+
Response
Property name
+RESPONSE +
Purpose
+To specify a response vote. +
Value type
+INTEGER +
Format Definition
+This property is defined by the following notation: +
+
+ +
Description
+This parameter can be specified on the POLL-ITEM-ID +property to provide the value of the voters response. This +parameter allows for fine grained responses which are appropriate +to some applications. For the case of individuals voting for a +choice of events, client applications SHOULD conform to the +following convention: +
    +
  • +0 - 39 A "NO vote" +
  • +
  • +40 - 79 A "MAYBE" vote +
  • +
  • +80 - 89 A "YES - but not preferred vote" +
  • +
  • +90-100 A "YES" vote. +Clients MUST preserve the response value when there is no change +from the user even if they have a UI with fixed states (e.g. +yes/no/maybe). +
  • +
+
+
New Components
VPOLL Component
Component name
+VPOLL +
Purpose
+This component provides a mechanism by which voters can +vote on provided choices. +
Format Definition
+This property is defined by the following notation: +
+
+ +
Description
This component provides a mechanism by which voters can +vote on provided choices. The outcome depends upon the POLL-MODE +in effect.The PARTICIPANT components in VPOLL requests provide information on +each recipient who will be voting - both their identity through +the CALENDAR-ADDRESS property and their votes through the VOTE components. +If specified, the "DTSTART" property defines the start or opening +of the poll active period. If absent the poll is presumed to have +started when created. +If "DTSTART" is present "DURATION" MAY be specified and indicates +the duration, and hence the ending, of the poll. The value of the +property MUST be a positive duration. +"DTEND" MAY be specified with or without "DTSTART" and indicates +the ending of the poll. If DTEND is specified it MUST be later +than the DTSTART or CREATED property. +If one or more VALARM components are included in the VPOLL they +are not components to be voted on and MUST NOT contain a POLL- +ITEM-ID property. VALARM sub-components may be used to provide +warnings to the user when polls are due to start or end.
+
VOTE Component
Component name
+VOTE +
Purpose
+This component provides a mechanism by which voters can +vote on provided choices. +
Conformance
+This component may be specified zero or more times in a PARTICIPANT component which identifies the voter. +
Format Definition
+This property is defined by the following notation: +
+
+ +
Description
This component appears inside the PARTICIPANT component +with a PARTICIPANT-TYPE of VOTER to identify the voter. This component +contains that participants responses.The required and optional properties and their meanings will depend +upon the POLL-MODE in effect. +For any POLL-MODE, POLL-ITEM-ID is used to associate the +information to a choice supplied by the organizer. This means that each VOTE component only provides information about that choice. +If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- +ID may be provided in a REPLY to indicate a possible new choice or +to provide information to the ORGANIZER - such as the respondees +availability.
+
+
+ Poll Modes + The VPOLL component is intended to allow for various forms of +polling. The particular form in efffect is indicated by the POLL- +MODE property. + New poll modes can be registered by including a completed POLL-MODE +Registration Template (see ) in a published RFC. +
POLL-MODE:BASICBASIC 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. +
Property restrictionsThis poll mode has the following property requirements: +
POLL-ITEM-ID
+Each contained sub-component that is being voted upon +MUST contain a POLL-ITEM_ID property which is unique within the +context of the POLL. The value MUST NOT be reused when events are +removed and/or added to the poll. +
POLL-WINNER
+On confirmation of the poll this property MUST be +present and identifies the winning component. +
+
Outcome reportingTo confirm the winner the POLL-WINNER property MUST be present and +the STATUS MUST be set to CONFIRMED. +When the winning VEVENT or VTODO is not a scheduled entity, that is, +it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER +property and a list of non-participating ATTENDEEs. This allows the +winning entity to be distributed to the participants through iTip or +some other protocol.
+
+
+ iTIP Extensions + This specification introduces a number of extensions to . +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. +
MethodsThere are some extensions to the behavior of iTip methods for a VPOLL +object and two new methods are defined. +
MethodDescription
+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 PARTICIPANTS. +
+The following table shows the above methods broken down by who can +send them with VPOLL components. +
OriginatorMethods
+Organizer + +CANCEL, PUBLISH, REQUEST, POLLSTATUS +
+Voter + +REPLY, REFRESH, REQUEST (only when delegating) +
+
Interoperability ModelsMost of the standard iTip specification applies with respect to +organizer and voters. +
Delegation + +TBD +
+
Acting on Behalf of Other Calendar Users + +TBD +
+
Component Revisions + +
    +
  • +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 +
  • +
+
+
Message Sequencing + +TBD +
+
Application Protocol Elements
Methods for VPOLL Calendar ComponentsThis 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 ValueDescription
+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. +
MethodDescription
+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. REQUEST SHOULD NOT +be used just to set the status of the poll - +POLLSTATUS provides a more compact approach. +
+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 PARTICIPANT. +
+
Method: PUBLISHThe "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. +
Note
+Not clear how useful this is but needs some work on transmitting the +current vote without any voter identification. +
+This method type is an iCalendar object that conforms to the +following property constraints: +Constraints for a METHOD:PUBLISH of a VPOLL
Component/PropertyPresenceComment
+METHOD + +1 + +MUST equal PUBLISH. +
+VPOLL + +1+ +
+DTSTAMP + +1 +
+DTSTART + +0 or 1 + +If present defines the start of the poll. Otherwise the poll starts when it is created and distributed. +
+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+ +
+PARTICIPANT + +0+ + +Only PARTICIPANT components with PARTICIPANT-TYPE not equal to "VOTER" - that is, no voters +
+REQUEST-STATUS + +0 +
+VALARM + +0+ +
+VEVENT + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VFREEBUSY + +0 +
+VJOURNAL + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VTODO + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VTIMEZONE + +0+ + +MUST be present if any date/time refers to a timezone. +
+IANA-COMPONENT + +0+ +
+X-COMPONENT + +0+ +
+
Method: REQUESTThe "REQUEST" method in a "VPOLL" component provides the following +scheduling functions: +
    +
  • +Invite "Voters" to respond to the poll. +
  • +
  • +Change the items being voted upon. +
  • +
  • +Complete or confirm the poll. +
  • +
  • +Response to a "REFRESH" request. +
  • +
  • +Update the details of an existing vpoll. +
  • +
  • +Update the status of "Voters". +
  • +
  • +Forward a "VPOLL" to another uninvited CU. +
  • +
  • +For an existing "VPOLL" calendar component, delegate the role of +"Voter" to another CU. +
  • +
  • +For an existing "VPOLL" calendar component, change the role of +"Organizer" to another CU. +
  • +
+The "Organizer" originates the "REQUEST". The recipients of the +"REQUEST" method are the CUs voting in the poll, the "Voters". +"Voters" use the "REPLY" method to convey votes to 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/PropertyPresenceComment
+METHOD + +1 + +MUST be REQUEST. +
+VPOLL + +1 +
+PARTICIPANT + +1+ + +Identified as voters with the PARTICIPANT-TYPE=VOTER +
+DTSTAMP + +1 +
+DTSTART + +0 or 1 + +If present defines the start of the poll. Otherwise the poll starts when it is created and distributed. +
+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. +
+VFREEBUSY + +0 +
+VJOURNAL + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+VTODO + +0+ + +Depending upon the poll mode in effect there MAY be candidate components included in the poll component. +
+
Rescheduling a poll + +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. +
+
Updating or Reconfirmation of a PollThe "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 a "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.
+
Confirmation of a 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. +
+
Closing a Poll + +The "REQUEST" method may be used to close a poll, that is indicate +voting is completed. The STATUS MUST be set to COMPLETED. +
+
Delegating a Poll to Another CUSome 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".
+
Changing 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". +
+
Sending on Behalf of the 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". +
+
Forwarding to an Uninvited CUA "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 a "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.
+
Updating Voter Status + +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 "RSVP=TRUE" property parameter on the PARTICIPANT CALENDAR-ADDRESS. 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". +
+
Method: REPLYThe "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" "CALENDAR-ADDRESS" +property. The "Delegate" SHOULD include the calendar address of the +"Delegator" on the "DELEGATED-FROM" property parameter of the +"Delegate's" "CALENDAR-ADDRESS" 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". +A "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. (But see comments on VFREEBUSY and VAVAILABILITY) +This method type is an iCalendar object that conforms to the +following property constraints: +Constraints for a METHOD:REPLY of a VPOLL
Component/PropertyPresenceComment
+METHOD + +1 + +MUST be REPLY. +
+VPOLL + +1+ + +All components MUST have the same +
+UID. +
+PARTICIPANT + +1 + +Identifies 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 or 1 + +A voter may respond with a VFREEBUSY component indicating that the ORGANIZER may select some other time which is not marked as busy. +
+VAVAILABILITY + +0 + +A voter may respond with a VAVAILABILITY component indicating that the ORGANIZER may select some other time which is shown as available. +
+VJOURNAL + +0 +
+VTODO + +0 +
+
Method: CANCELThe "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 . +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/PropertyPresenceComment
+METHOD + +1 + +MUST be CANCEL. +
+VPOLL + +1+ + +All must have the same UID. +
+PARTICIPANT + +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 +
+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 +
+
Method: REFRESHThe "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/PropertyPresenceComment
+METHOD + +1 + +MUST be REFRESH. +
+VPOLL + +1 +
+PARTICIPANT + +1 + +MUST identify the requester as a voter. +
+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 +
+
Method: POLLSTATUSThe "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. All "Voters" MUST be present. The selected component(s) +according to the poll mode SHOULD NOT 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/PropertyPresenceComment
+METHOD + +1 + +MUST equal POLLSTATUS. +
+VPOLL + +1+ +
+PARTICIPANT + +1+ + +The voters containing their current vote +
+COMPLETED + +0 or 1 + +Only present for a completed poll +
+DTSTAMP + +1 +
+DTSTART + +0 or 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 +
+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 SHOULD NOT be present. +
+VFREEBUSY + +0 +
+VJOURNAL + +0 + +All candidate components SHOULD NOT be present. +
+VTODO + +0 + +All candidate components SHOULD NOT be present. +
+VTIMEZONE + +0+ + +MUST be present if any date/time refers to a timezone. +
+IANA-COMPONENT + +0+ +
+X-COMPONENT + +0+ +
+
+
+ CalDAV Extensions + This specification extends in that it defines a new +component and new iCalendar properties to be supported and requires +extra definitions related to time-ranges and reports. + Additionally, it extends as it a VPOLL component is a +schedulable entity. +
Calendar Collection PropertiesThis section defines new CalDAV properties for calendar collections. +
CALDAV:supported-vpoll-component-sets
Name
+supported-vpoll-component-sets +
Namespace
+urn:ietf:params:xml:ns:caldav +
Purpose
+Specifies the calendar component types (e.g., VEVENT, +VTODO, etc.) and combination of types that may be included in a +VPOLL component. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
The CALDAV:supported-vpoll-component-sets property is +used to specify restrictions on the calendar component types that +VPOLL components may contain in a calendar collection.It also specifies the combination of allowed component types. +Any attempt by the client to store VPOLL components with component +types or combinations of types not listed in this property, if it +exists, MUST result in an error, with the CALDAV:supported-vpoll-component-sets +precondition being violated. Since +this property is protected, it cannot be changed by clients using +a PROPPATCH request. However, clients can initialize the value of +this property when creating a new calendar collection with +MKCALENDAR. In the absence of this property, the server MUST +accept all component types, and the client can assume that all +component types are accepted.
Definition
+
+ +
+
+
CALDAV:vpoll-max-items
Name
+vpoll-max-items +
Namespace
+urn:ietf:params:xml:ns:caldav +
Purpose
+Provides a numeric value indicating the maximum number of +items that may be contained in any instance of a VPOLL calendar +object resource stored in the calendar collection. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
+The CALDAV:vpoll-max-items is used to specify a numeric +value that indicates the maximum number of iCalendar components in +any one instance of a VPOLL calendar object resource stored in a +calendar collection. Any attempt to store a calendar object +resource with more components per instance than this value MUST +result in an error, with the CALDAV: vpoll-max-items precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of items +in a VPOLL calendar component. +
Definition
+
+ +
+
+
CALDAV:vpoll-max-active
Name
+vpoll-max-active +
Namespace
+urn:ietf:params:xml:ns:caldav +
Purpose
+Provides a numeric value indicating the maximum number of +active vpolls at any one time. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
+The CALDAV:vpoll-max-active is used to specify a +numeric value that indicates the maximum number of active VPOLLs +at any one time. Any attempt to store a new active VPOLL calendar +object resource which results in exceeding this limit MUST result +in an error, with the CALDAV:vpoll-max-active precondition + being violated. In the absence of this property, the +client can assume that the server can handle any number of active +VPOLLs. +
Definition
+
+ +
+
+
CALDAV:vpoll-max-voters
Name
+ +vpoll-max-voters + +
Namespace
+ +urn:ietf:params:xml:ns:caldav + +
Purpose
+Provides a numeric value indicating the maximum number of +voters for any instance of a VPOLL calendar object resource stored +in the calendar collection. +
Conformance
+This property MAY be defined on any calendar +collection. If defined, it MUST be protected and SHOULD NOT be +returned by a PROPFIND DAV:allprop request (as defined in +). +
Description
+The CALDAV:vpoll-max-voters is used to specify a +numeric value that indicates the maximum number of voters for any one instance of a VPOLL calendar object +resource stored in a calendar collection. Any attempt to store a +calendar object resource with more voters per instance +than this value MUST result in an error, with the CALDAV: +vpoll-max-voters precondition +being violated. In the absence of this property, the client can +assume that the server can handle any number of voters in a VPOLL +calendar component. +
Definition
+
+ +
+
+
CalDAV:even-more-properties + +
+
Extensions to CalDAV schedulingThis specification extends . +Each section of Appendix A "Scheduling Privileges Summary" is +extended to include VPOLL. +Any reference to the ATTENDEE property should be read to include the +CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. +That is, for scheduling purposes the CALENDAR-ADDRESS property +is handled in exactly the same manner as the ATTENDEE property.
+
Additional Preconditions for PUT, COPY, and MOVEThis 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: +
(CALDAV:supported-vpoll-component-sets)
+The VPOLL resource +submitted in the PUT request, or targeted by a COPY or MOVE +request, MUST contain a type or combination of calendar component +that is supported in the targeted calendar collection; +
(CALDAV:vpoll-max-items)
+The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of sub-components (excluding VTIMEZONE) less than or equal to the +value of the CALDAV:vpoll-max-items property value +on the calendar collection where the resource will be stored; +
(CALDAV:vpoll-max-active)
+The PUT request, or COPY or MOVE request, +MUST not result in the number of active VPOLLs being greater than +the value of the CALDAV:vpoll-max-active property value + on the calendar collection where the resource will +be stored; +
(CALDAV:vpoll-max-voters)
+The VPOLL resource submitted in the PUT +request, or targeted by a COPY or MOVE request, MUST have a number +of voters represented by PARTICIPANT components less than or equal to the value of the +CALDAV:vpoll-max-voters property value on the +calendar collection where the resource will be stored; +
+
CalDAV:calendar-query ReportThis 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. +
Example: Partial Retrieval of VPOLLIn 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. +
+
+
CalDAV time ranges"CALDAV:time-range XML Element" in describes +how to specify time ranges to limit the set of calendar components +returned by the server. This specification extends to +describe the meaning of time ranges for VPOLL +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. +
+
+
+
+ Security Considerations + Applications using these property need to be aware of the risks +entailed in using the URIs provided as values. See for a +discussion of the security considerations relating to URIs. +
+
+ IANA Considerations +
Parameter RegistrationsThis document defines the following new iCalendar property parameters +to be added to the registry defined in : +
Property ParameterStatusReference
+REQUIRED + +Current + + + + +
+STAY-INFORMED + +Current + + + + +
+
Property RegistrationsThis document defines the following new iCalendar properties to be +added to the registry defined in : +
PropertyStatusReference
+ACCEPT-RESPONSE + +Current + + + + +
+POLL-ITEM-ID + +Current + + + + +
+POLL-MODE + +Current + + + + +
+POLL-PROPERTIES + +Current + + + + +
+POLL-WINNER + +Current + + + + +
+RESPONSE + +Current + + + + +
+
POLL-MODE Registration TemplateA poll mode is defined by completing the following template. +
Poll mode name
+The name of the poll mode. +
Purpose
+The purpose of the poll mode. Give a short but clear +description. +
Reference
+A reference to the RFC in which the poll mode is defined +
+
POLL-MODE RegistrationsThis document defines the following registered poll modes. +
Poll mode namePurposeReference
+BASIC + +To provide simple voting for a single outcome from a number of candidates. + +Current +
+
+
+ + + Normative References + + + HTTP Extensions for Distributed Authoring — WEBDAV + + + + + + + + This document specifies a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, namespace manipulation, and resource locking (collision avoidance). [STANDARDS-TRACK] + + + + + IETF RFC 2518 + + + + + + Uniform Resource Identifier (URI): Generic Syntax + + + + + + A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK] + + + + + IETF RFC 3986 + + + + + + Calendaring Extensions to WebDAV (CalDAV) + + + + + + This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing calendaring and scheduling information based on the iCalendar format. This document defines the "calendar-access" feature of CalDAV. [STANDARDS-TRACK] + + + + + IETF RFC 4791 + + + + + + Internet Calendaring and Scheduling Core Object Specification (iCalendar) + + + + This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK] + + + + + IETF RFC 5545 + + + + + + iCalendar Transport-Independent Interoperability Protocol (iTIP) + + + + This document specifies a protocol that uses the iCalendar object specification to provide scheduling interoperability between different calendaring systems. This is done without reference to a specific transport protocol so as to allow multiple methods of communication between systems. Subsequent documents will define profiles of this protocol that use specific, interoperable methods of communication between systems.The iCalendar Transport-Independent Interoperability Protocol (iTIP) complements the iCalendar object specification by adding semantics for group scheduling methods commonly available in current calendaring systems. These scheduling methods permit two or more calendaring systems to perform transactions such as publishing, scheduling, rescheduling, responding to scheduling requests, negotiating changes, or canceling. [STANDARDS-TRACK] + + + + + IETF RFC 5546 + + + + + + iCalendar Message-Based Interoperability Protocol (iMIP) + + + + This document, "iCalendar Message-Based Interoperability Protocol (iMIP)", specifies a binding from the iCalendar Transport-independent Interoperability Protocol (iTIP) to Internet email-based transports. Calendaring entries defined by the iCalendar Object Model (iCalendar) are wrapped using constructs from RFC 5322 and MIME (RFC 2045, RFC 2046, RFC 2047, and RFC 2049), and then transported over SMTP. [STANDARDS-TRACK] + + + + + IETF RFC 6047 + + + + + + Scheduling Extensions to CalDAV + + + + + This document defines extensions to the Calendaring Extensions to WebDAV (CalDAV) "calendar-access" feature to specify a standard way of performing scheduling operations with iCalendar-based calendar components. This document defines the "calendar-auto-schedule" feature of CalDAV. [STANDARDS-TRACK] + + + + + IETF RFC 6638 + + + + + + + AUTOFILL + + + IETF IETF I-D.draft-ietf-calext-eventpub-extensions + + + + + Bibliography + +
+ Open issues + public-comment: Not documented and was a parameter on something. +Really sounds like a PARTICIPANT or VOTE property + Notifications: Need to do a section on what Notifications to + support. + A. VPOLL is about to end and you haven't voted on it yet. + Instead reuse VALARMS to notify the user? + Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. + Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any + events booked as a result of confirmation. + MUST winning event be cancelled for POLL-MODE basic? No - voter + has indicated now unable to attend - want to revote + Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. + Requires retention of VPOLL + retention period + Removed status + ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create + a poll with a set of events where I am just the attendee of the + events. Are there any other restrictions for components in a + VPOLL? + Add to security consideration + Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event. + Need to write down what isn't valid in a VPOLL + a. Can't change POLL-MODE + Guide for ATTENDEE roles + chair, NON-PARTICIPANT etc + ? - some iTip notes On confirm - send itip if appropriate (PUBLISH) + - all non-participating - shared - feeds + Organizer can specify where result is? + Confirm can specify that itip is sent - ITIP / NONE - parameter ? + on POLL-WINNER + Need to add example of freebusy in response +
+ +
+
+
+ Change log +
+
Calext V01: 2019-10-17 MD
+
+Replace VVOTER and VOTER with PARTICIPANT. +
+
Calext V00: 2019-05-17 MD
+
+First calext version. Moved source to metanorma. No changes to specification. +
+
V03: 2014-10-28 MD
+
+
    +
  • +Add VVOTER and VOTE components. +
  • +
  • +Add RESPONSE property. +
  • +
  • +Remove RESPONSE parameter from VOTER. +
  • +
+
+
V03: 2014-05-12 MD
+
+
    +
  • +Add reply-url property and required parameter. +
  • +
  • +Fix ACCEPT-RESPONSE definition. +
  • +
+
+
V02: 2014-05-12 MD
+
+
    +
  • +Typos fixed, clarifications made. +
  • +
  • +Removed spurious COMMENT param. Switched some to PUBLIC-COMMENT +
  • +
  • +Changed STAY-INFORMED to remove boolean value type and state +explicit TRUE/FALSE values. +
  • +
  • +iTip: Allow VPOLL DTSTART to be optional and allow VAVAILABILITY +as subcomponent +
  • +
  • +iTip: fix broken table cells +
  • +
  • +Add POLL-PROPERTIES, POLL-WINNER to 5545 extensions table +
  • +
  • +Added Caldav scheduling section +
  • +
+
+
V01: 2013-08-07 MD
+
+
    +
  • +Removed method CONFIRM +
  • +
  • +Removed pollitemid from VPOLL abnf. Added text for pollwinner +
  • +
  • +Added POLL-WINNER and verbiage +
  • +
  • +Added STATUS values +
  • +
  • +Added RELTYPE=POLL +
  • +
  • +Added supported-vpoll-component-sets +
  • +
  • +Added CalDAV related parameters to VOTER +
  • +
  • +Removed bad CalDAV query example. State that queries cannot +target the sub-components. +
  • +
+
+
Initial version: 2012-11-02 MD
+
+
+
+
+
diff --git a/sources/draft-ietf-calext-vpoll.txt b/sources/draft-ietf-calext-vpoll.txt new file mode 100644 index 0000000..d15a930 --- /dev/null +++ b/sources/draft-ietf-calext-vpoll.txt @@ -0,0 +1,3472 @@ + + + + +Network Working Group E. York +Internet-Draft +Intended status: Standards Track C. Daboo +Expires: 17 January 2021 + M. Douglass + 16 July 2020 + + + VPOLL: Consensus Scheduling Component for iCalendar + draft-ietf-calext-vpoll-00 + +Abstract + + This specification introduces a new iCalendar component which allows + for consensus scheduling, that is, voting on a number of alternative + meeting or task alternatives. + +Status of This Memo + + 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 https://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 17 January 2021. + +Copyright Notice + + Copyright (c) 2020 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 (https://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. + + + + +York, et al. Expires 17 January 2021 [Page 1] + +Internet-Draft VPOLL July 2020 + + +Table of Contents + + 1. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 3 + 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 + 3. Terms and definitions . . . . . . . . . . . . . . . . . . . . 4 + 3.1. consensus scheduling . . . . . . . . . . . . . . . . . . 4 + 3.2. active Vpoll . . . . . . . . . . . . . . . . . . . . . . 4 + 3.3. voter . . . . . . . . . . . . . . . . . . . . . . . . . . 4 + 4. Simple Consensus Scheduling . . . . . . . . . . . . . . . . . 5 + 4.1. The VPOLL Component: An Overview . . . . . . . . . . . . 5 + 4.2. The VPOLL Alternative Choices: An Overview . . . . . . . 7 + 4.3. VPOLL responses . . . . . . . . . . . . . . . . . . . . . 8 + 4.4. VPOLL updates . . . . . . . . . . . . . . . . . . . . . . 9 + 4.5. VPOLL Completion . . . . . . . . . . . . . . . . . . . . 11 + 4.6. Other Responses . . . . . . . . . . . . . . . . . . . . . 12 + 5. iCalendar Extensions . . . . . . . . . . . . . . . . . . . . 12 + 5.1. Updated Participant Type Value . . . . . . . . . . . . . 12 + 5.2. Updated Relation Type Value . . . . . . . . . . . . . . . 12 + 5.3. Updated Status Value . . . . . . . . . . . . . . . . . . 13 + 5.4. New Property Parameters . . . . . . . . . . . . . . . . . 13 + 5.4.1. Required . . . . . . . . . . . . . . . . . . . . . . 13 + 5.4.2. Stay-Informed . . . . . . . . . . . . . . . . . . . . 14 + 5.5. New Properties . . . . . . . . . . . . . . . . . . . . . 14 + 5.5.1. Accept-Response . . . . . . . . . . . . . . . . . . . 14 + 5.5.2. Poll-Completion . . . . . . . . . . . . . . . . . . . 15 + 5.5.3. Poll-Item-Id . . . . . . . . . . . . . . . . . . . . 16 + 5.5.4. Poll-Mode . . . . . . . . . . . . . . . . . . . . . . 17 + 5.5.5. Poll-properties . . . . . . . . . . . . . . . . . . . 17 + 5.5.6. Poll-Winner . . . . . . . . . . . . . . . . . . . . . 18 + 5.5.7. Reply-URL . . . . . . . . . . . . . . . . . . . . . . 19 + 5.5.8. Response . . . . . . . . . . . . . . . . . . . . . . 19 + 5.6. New Components . . . . . . . . . . . . . . . . . . . . . 20 + 5.6.1. VPOLL Component . . . . . . . . . . . . . . . . . . . 20 + 5.6.2. VOTE Component . . . . . . . . . . . . . . . . . . . 22 + 6. Poll Modes . . . . . . . . . . . . . . . . . . . . . . . . . 23 + 6.1. POLL-MODE:BASIC . . . . . . . . . . . . . . . . . . . . . 24 + 6.1.1. Property restrictions . . . . . . . . . . . . . . . . 24 + 6.1.2. Outcome reporting . . . . . . . . . . . . . . . . . . 24 + 7. iTIP Extensions . . . . . . . . . . . . . . . . . . . . . . . 24 + 7.1. Methods . . . . . . . . . . . . . . . . . . . . . . . . . 24 + 7.2. Interoperability Models . . . . . . . . . . . . . . . . . 26 + 7.2.1. Delegation . . . . . . . . . . . . . . . . . . . . . 26 + 7.2.2. Acting on Behalf of Other Calendar Users . . . . . . 26 + 7.2.3. Component Revisions . . . . . . . . . . . . . . . . . 26 + 7.2.4. Message Sequencing . . . . . . . . . . . . . . . . . 26 + 7.3. Application Protocol Elements . . . . . . . . . . . . . . 26 + 7.3.1. Methods for VPOLL Calendar Components . . . . . . . . 26 + 7.3.2. Method: PUBLISH . . . . . . . . . . . . . . . . . . . 28 + + + +York, et al. Expires 17 January 2021 [Page 2] + +Internet-Draft VPOLL July 2020 + + + 7.3.3. Method: REQUEST . . . . . . . . . . . . . . . . . . . 31 + 7.3.4. Method: REPLY . . . . . . . . . . . . . . . . . . . . 37 + 7.3.5. Method: CANCEL . . . . . . . . . . . . . . . . . . . 40 + 7.3.6. Method: REFRESH . . . . . . . . . . . . . . . . . . . 43 + 7.3.7. Method: POLLSTATUS . . . . . . . . . . . . . . . . . 45 + 8. CalDAV Extensions . . . . . . . . . . . . . . . . . . . . . . 47 + 8.1. Calendar Collection Properties . . . . . . . . . . . . . 47 + 8.1.1. CALDAV:supported-vpoll-component-sets . . . . . . . . 47 + 8.1.2. CALDAV:vpoll-max-items . . . . . . . . . . . . . . . 49 + 8.1.3. CALDAV:vpoll-max-active . . . . . . . . . . . . . . . 50 + 8.1.4. CALDAV:vpoll-max-voters . . . . . . . . . . . . . . . 51 + 8.1.5. CalDAV:even-more-properties . . . . . . . . . . . . . 51 + 8.1.6. Extensions to CalDAV scheduling . . . . . . . . . . . 51 + 8.2. Additional Preconditions for PUT, COPY, and MOVE . . . . 52 + 8.3. CalDAV:calendar-query Report . . . . . . . . . . . . . . 52 + 8.3.1. Example: Partial Retrieval of VPOLL . . . . . . . . . 53 + 8.4. CalDAV time ranges . . . . . . . . . . . . . . . . . . . 55 + 9. Security Considerations . . . . . . . . . . . . . . . . . . . 56 + 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 56 + 10.1. Parameter Registrations . . . . . . . . . . . . . . . . 57 + 10.2. Property Registrations . . . . . . . . . . . . . . . . . 57 + 10.3. POLL-MODE Registration Template . . . . . . . . . . . . 57 + 10.4. POLL-MODE Registrations . . . . . . . . . . . . . . . . 58 + 11. Normative References . . . . . . . . . . . . . . . . . . . . 58 + 12. Bibliography . . . . . . . . . . . . . . . . . . . . . . . . 59 + Appendix A. Open issues . . . . . . . . . . . . . . . . . . . . 59 + Appendix B. Change log . . . . . . . . . . . . . . . . . . . . . 60 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 61 + +1. Acknowledgements + + The authors would like to thank the members of the Calendaring and + Scheduling Consortium (CalConnect) for contributing their ideas and + support. + +2. Introduction + + The currently existing approach to agreeing on meeting times using + iTip [RFC5546] and/or iMip [RFC6047] has 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. + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 3] + +Internet-Draft VPOLL July 2020 + + + 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. + +3. Terms and definitions + + For the purposes of this document, the following terms and + definitions apply. + +3.1. consensus scheduling + + The process whereby users come to some agreement on meeting or task + alternatives and then book that meeting or task. + +3.2. active Vpoll + + A VPoll may have a DTSTART, DTEND and DURATION which may define the + start and end of the active voting period + +3.3. voter + + A participant who votes on the alternatives. A voter need not be an + attendee of any of the alternatives presented. + + + +York, et al. Expires 17 January 2021 [Page 4] + +Internet-Draft VPOLL July 2020 + + +4. Simple Consensus Scheduling + + 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. This document will + show how a VPOLL object is used to inform voters of the state of a + simple vote on some alternatives. + +4.1. The VPOLL Component: An Overview + + The VPOLL component acts as a wrapper for a number of alternatives to + be voted on, together with some properties and a new component used + to maintain the state of the voting. For our simple example the + following VPOLL properties and sub-components are either required or + appropriate: + + DTSTAMP The usual [RFC5545] property. + + SEQUENCE The usual [RFC5545] property. See below for SEQUENCE + behavior. + + UID The usual [RFC5545] property. + + ORGANIZER The usual [RFC5545] property. In general this need not be + an organizer of any of the alternatives. In this simple outline + we assume it is the same. + + SUMMARY The usual [RFC5545] property. This optional but recommended + property provides the a short title to the poll. + + DESCRIPTION The usual [RFC5545] property. This optional property + provides more details. + + DTEND The usual [RFC5545] property. This optional property provides + a poll closing time and date after which the VPOLL is no longer + active. + + POLL-MODE A new property which defines how the votes are used to + obtain a result. For our use case it will take the value "BASIC" + meaning one event will be chosen from the alternatives. + + + + +York, et al. Expires 17 January 2021 [Page 5] + +Internet-Draft VPOLL July 2020 + + + POLL-COMPLETION A new property which defines who (server or client) + chooses and/or submits the winning choice. In our example the + value is "SERVER-SUBMIT" which means the client chooses the winner + but the server will submit the winning choice. + + POLL-PROPERTIES A new property which defines which icalendar + properties are being voted on. For our use case it will take the + value "DTSTART, LOCATION" meaning only those properties are + significant for voting. Other properties in the events may differ + but are not considered significant for the voting process. + + PARTICIPANT There is one of these components for each voter with the + PARTICIPANT-TYPE set to "VOTER". The CALENDAR-ADDRESS property + identifies the voter and this component will contain one VOTE + component for each item being voted on. + + VOTE A new component. There is one of these for each voter and + choice. It usually contains at least a POLL-ITEM-ID property to + identify the choice and a RESPONSE property to provide a vote. + For more complex poll modes it may contain other information such + as cost or estimated duration. + + VEVENT In our simple use case there will be multiple VEVENT sub- + components defining the alternatives. Each will have a different + date and or time for the meeting. + + EXAMPLE + + VPOLL with 3 voters and 3 alternative meetings: + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 6] + +Internet-Draft VPOLL July 2020 + + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD:REQUEST + BEGIN:VPOLL + POLL-MODE:BASIC + POLL-COMPLETION:SERVER-SUBMIT + POLL-PROPERTIES:DTSTART,LOCATION + ORGANIZER:mailto:mike@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T000000Z + SUMMARY:What to do this week + DTEND:20120101T000000Z + BEGIN: PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:cyrus@example.com + END PARTICIPANT + BEGIN: PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:eric@example.com + END PARTICIPANT + BEGIN: PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:mike@example.com + END PARTICIPANT + 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 + + Figure 1 + + 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. + +4.2. The VPOLL Alternative Choices: An Overview + + 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. + + + +York, et al. Expires 17 January 2021 [Page 7] + +Internet-Draft VPOLL July 2020 + + + POLL-ITEM-ID This provides a unique reference to the sub-component + within the VPOLL. It's value SHOULD be a small integer. + +4.3. VPOLL responses + + 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 and components: + + DTSTAMP The usual [RFC5545] property. + + SEQUENCE The usual [RFC5545] property. See below for SEQUENCE + behavior. + + UID Same as the request. + + ORGANIZER Same as the request. + + SUMMARY Same as the request. + + PARTICIPANT One only with a CALENDAR-ADDRESS identifying the voter + replying. + + VOTE One per item being voted on. + + POLL-ITEM-ID One inside each VOTE component to identify the choice. + + RESPONSE One inside each VOTE component to specify the vote. + + 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. + + NOTE This is poll-mode specific behavior? + + EXAMPLE + + REPLY VPOLL from Cyrus: + + + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 8] + +Internet-Draft VPOLL July 2020 + + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD: REPLY + BEGIN:VPOLL + ORGANIZER:mailto:mike@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T010000Z + SUMMARY:What to do this week + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:cyrus@example.com + BEGIN:VOTE + POLL-ITEM-ID:1 + RESPONSE:50 + COMMENT:Work on iTIP + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:2 + RESPONSE:100 + COMMENT:Work on WebDAV + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:3 + RESPONSE:0 + END:VOTE + END:PARTICIPANT + END:VPOLL + END:VCALENDAR + + Figure 2 + +4.4. VPOLL updates + + 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 one or more PARTICIPANT components each populated with + zero or more VOTE components. + + EXAMPLE + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 9] + +Internet-Draft VPOLL July 2020 + + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD: POLLSTATUS + BEGIN:VPOLL + ORGANIZER:mailto:mike@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T020000Z + SEQUENCE:0 + SUMMARY:What to do this week + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:cyrus@example.com + BEGIN: VOTE + POLL-ITEM-ID:1 + RESPONSE:50 + COMMENT:Work on iTIP + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:2 + RESPONSE:100 + COMMENT:Work on WebDAV + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:3 + RESPONSE:0 + END:VOTE + END:PARTICIPANT + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:eric@example.com + BEGIN:VOTE + POLL-ITEM-ID:1 + RESPONSE:100 + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:2 + RESPONSE:100 + END:VOTE + BEGIN:VOTE + POLL-ITEM-ID:3 + RESPONSE:0 + END:VOTE + END:PARTICIPANT + END:VPOLL + END:VCALENDAR + + Figure 3 + + + +York, et al. Expires 17 January 2021 [Page 10] + +Internet-Draft VPOLL July 2020 + + +4.5. VPOLL Completion + + 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. As the POLL- + COMPLETION property is set to SERVER-SUBMIT the server will submit + the winning choice and when it has done so set the STATUS to + "SUBMITTED". + + EXAMPLE + + VPOLL confirmation: + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//Example//Example + METHOD: REQUEST + BEGIN:VPOLL + ORGANIZER:mailto:douglm@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T030000Z + COMPLETED:20120101T030000Z + POLL-COMPLETION:SERVER-SUBMIT + 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 + + Figure 4 + + + + + + +York, et al. Expires 17 January 2021 [Page 11] + +Internet-Draft VPOLL July 2020 + + +4.6. Other Responses + + A voter being asked to choose between a number of ORGANIZER supplied + alternatives may find none of them acceptable or may simply not care. + + An alternative response, which may be disallowed by the ORGANIZER, is + to send back the respondees availability or freebusy or even one or + more new, alternative choices. + + This is accomplished by responding with a VOTE component which has no + POLL-ITEM-ID property. In this case it MUST contain some alternative + information. What form this takes depends on the poll mode in + effect. + +5. iCalendar Extensions + +5.1. Updated Participant Type Value + + Participant type property values are defined in section 11.2.1. of + [I-D.draft-ietf-calext-eventpub-extensions]. This specification + updates that type to include the new participant type VOTER to + provide information about the voter and to contain their votes. + + Format Definition This property parameter is redefined by the + following notation: + + partvalue /= "VOTER" + + Figure 5 + + Description The new property value indicates that the associated + PARTICIPANT component identifies a voter in a VPOLL. + +5.2. Updated Relation Type Value + + 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. + + Format Definition This property parameter is redefined by the + following notation: + + reltypeparam /= "RELTYPE" "=" "POLL" + ; Property value is a VPOLL uid + + Figure 6 + + + + +York, et al. Expires 17 January 2021 [Page 12] + +Internet-Draft VPOLL July 2020 + + + Description This parameter can be specified on a property that + references another related calendar component. The new parameter + value indicates that the associated property references a VPOLL + component which contains the current component. + +5.3. Updated Status Value + + Status property values are defined in section 3.8.1.11. of [RFC5545]. + This specification updates that type to define valid VPOLL status + values. + + Format Definition 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 + / "SUBMITTED" ; The winning item has been + ; submitted + / "CANCELLED" + + Figure 7 + + Description These values allow clients and servers to handle the + choosing and submission of winning choices. + + If the client is choosing and the server submitting then the + client should set the POLL-WINNER property, set the status to + CONFIRMED and save the poll. When the server submits the winning + choice it will set the status to SUBMITTED. + + Figure 8 + +5.4. New Property Parameters + +5.4.1. Required + + Parameter name REQUIRED + + Purpose To specify whether the associated property is required in + the current context. + + Format Definition This parameter is defined by the following + notation: + + + +York, et al. Expires 17 January 2021 [Page 13] + +Internet-Draft VPOLL July 2020 + + + requirededparam = "REQUIRED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + + Figure 9 + + Description This parameter MAY be specified on REPLY-URL and, if the + value is TRUE, indicates the organizer requires all replies to be + made via the specified service rather than iTip replies. + +5.4.2. Stay-Informed + + Parameter name STAY-INFORMED + + Purpose To specify the voter also wants to be added as an ATTENDEE + when the poll is confirmed. + + Format Definition This parameter is defined by the following + notation: + + stayinformedparam = "STAY-INFORMED" "=" ("TRUE" / "FALSE") + ; Default is FALSE + + Figure 10 + + Description This parameter MAY be specified on the CALENDAR-ADDRESS + property in the PARTICIPANT component and, if the value is TRUE, + indicates the voter wishes to be added to the final choice as a + non participant. + +5.5. New Properties + +5.5.1. Accept-Response + + Property name ACCEPT-RESPONSE + + Purpose This property is used in VPOLL to indicate the types of + component that may be supplied in a response. + + Property Parameters Non-standard or iana parameters can be specified + on this property. + + Conformance This property MAY be specified in a VPOLL component. + + Description When used in a VPOLL this property indicates what + allowable component types may be returned in a reply. Typically + this would allow a voter to respond with their freebusy or + availability rather than choosing one of the presented + alternatives. + + + +York, et al. Expires 17 January 2021 [Page 14] + +Internet-Draft VPOLL July 2020 + + + If this property is not present voters are only allowed to respond + to the choices in the request. + + Format Definition This property is defined by the following + notation: + + acceptresponse = "ACCEPT-RESPONSE" acceptresponseparams ":" + iana-token ("," iana-token) CRLF + + acceptresponseparams = *(";" other-param) + + Figure 11 + +5.5.2. Poll-Completion + + Property name POLL-COMPLETION + + Purpose This property is used in VPOLL to indicate whether the + client or server is responsible for choosing and/or submitting the + winner(s). + + Description When a VPOLL is stored on a server which is capable of + handling choosing and submission of winning choices a value of + SERVER indicates that the server should close the poll, choose the + winner and submit whenever it is appropriate to do so. + + For example, in BASIC poll-mode, reaching the DTEND of the poll + could trigger this server side action. + + Server initiated submission requires that the submitted choice + MUST be a valid calendaring component. + + POLL-COMPLETION=SERVER-SUBMIT allows the client to set the poll- + winner, set the status to CONFIRMED and then store the poll on the + server. The server will then submit the winning choice and set + the status to SUBMITTED. + + Format Definition This property is defined by the following + notation: + + + + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 15] + +Internet-Draft VPOLL July 2020 + + + poll-completion = "POLL-COMPLETION" pcparam ":" pcvalue CRLF + + pcparam = *(";" other-param) + + pcvalue = "SERVER" ; The server is responsible for both choosing and + ; submitting the winner(s) + / "SERVER-SUBMIT" ; The server is responsible for + ; submitting the winner(s). The client chooses. + / "SERVER-CHOICE" ; The server is responsible for + ; choosing the winner(s). The client will submit. + / "CLIENT" ; The client is responsible for both choosing and + ; submitting the winner(s) + / iana-token + / x-name + ;Default is CLIENT + + Figure 12 + + Example The following is an example of this property: + + POLL-COMPLETION: SERVER-SUBMIT + + Figure 13 + +5.5.3. Poll-Item-Id + + Property name POLL-ITEM-ID + + Purpose This property is used in VPOLL child components as an + identifier. + + Value type INTEGER + + Property Parameters Non-standard parameters can be specified on this + property. + + Conformance This property MUST be specified in a VOTE component and + in VPOLL choice items. + + Description In a METHOD:REQUEST each choice 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. + + POLL-ITEM-ID SHOULD be a unique small integer for each component + or set of components. If it remains the same between REQUESTs + then the previous response for that component MAY be re-used. To + force a re-vote on a component due to a significant change, the + POLL-ITEM-ID MUST change. + + + +York, et al. Expires 17 January 2021 [Page 16] + +Internet-Draft VPOLL July 2020 + + + Format Definition This property is defined by the following + notation: + + pollitemid = "POLL-ITEM-ID" pollitemdparams ":" + integer CRLF + + pollitemidparams = *( + (";" other-param) + ) + + Figure 14 + +5.5.4. Poll-Mode + + Property name POLL-MODE + + Purpose This property is used in VPOLL to indicate what voting mode + is to be applied. + + Property Parameters Non-standard or iana parameters can be specified + on this property. + + Conformance This property MAY be specified in a VPOLL component or + its sub-components. + + Description The poll mode defines how the votes are applied to + obtain a result. BASIC mode, the default, means that the voters + are selecting one component (or group of components) with a given + POLL=ITEM-ID. + + Other polling modes may be defined in updates to this + specification. These may allow for such modes as ranking or task + assignment. + + Format Definition This property is defined by the following + notation: + + pollmode = "POLL-MODE" pollmodeparams ":" + ("BASIC" / iana-token / other-token) CRLF + + pollmodeparams = *(";" other-param) + + Figure 15 + +5.5.5. Poll-properties + + Property name POLL-PROPERTIES + + + + +York, et al. Expires 17 January 2021 [Page 17] + +Internet-Draft VPOLL July 2020 + + + Purpose This property is used in VPOLL to define which icalendar + properties are being voted on. + + Property Parameters Non-standard or iana parameters can be specified + on this property. + + Conformance This property MAY be specified in a VPOLL component. + + Description This property defines which icalendar properties are + significant in the voting process. It may not be clear to voters + which properties are varying in a significant manner. Clients may + use this property to highlight those listed properties. + + Format Definition This property is defined by the following + notation: + + pollproperties = "POLL-PROPERTIES" pollpropparams ":" + text *("," text) CRLF + + pollpropparams = *(";" other-param) + + Figure 16 + +5.5.6. Poll-Winner + + Property name POLL-WINNER + + Purpose This property is used in a basic mode VPOLL to indicate + which of the VPOLL sub-components won. + + Value type INTEGER + + Property Parameters Non-standard parameters can be specified on this + property. + + Conformance This property MAY be specified in a VPOLL component. + + Description For poll confirmation each child component MUST have a + POLL-ITEM-ID property. For basic mode the VPOLL component SHOULD + have a POLL-WINNER property which MUST correspond to one of the + POLL-ITEM-ID properties and indicates which sub-component was the + winner. + + Format Definition This property is defined by the following + notation: + + + + + + +York, et al. Expires 17 January 2021 [Page 18] + +Internet-Draft VPOLL July 2020 + + + pollwinner = "POLL-WINNER" pollwinnerparams ":" + integer CRLF + + pollwinnerparams = *(";" other-param) + + ; Used with a STATUS:CONFIRMED VPOLL to indicate which + ; components have been confirmed + + Figure 17 + +5.5.7. Reply-URL + + Property name REPLY-URL + + Purpose This property may be used in scheduling messages to indicate + additional reply methods, for example a web-service. + + Property Parameters Non-standard, required or iana parameters can be + specified on this property. + + Conformance This property MAY be specified in a VPOLL component. + + Description When used in a scheduling message this property + indicates additional or required services that can be used to + reply. Typically this would be a web service of some form. + + Format Definition This property is defined by the following + notation: + + reply-url = "REPLY-URL" reply-urlparams ":" uri CRLF + + reply-urlparams = *( + (";" requiredparam) / + (";" other-param) + ) + + Figure 18 + +5.5.8. Response + + Property name RESPONSE + + Purpose To specify a response vote. + + Value type INTEGER + + Format Definition This property is defined by the following + notation: + + + +York, et al. Expires 17 January 2021 [Page 19] + +Internet-Draft VPOLL July 2020 + + + response = "RESPONSE" response-params ":" integer CRLF + ; integer value 0..100 + + responseparams = *(";" other-param) + + Figure 19 + + Description This parameter can be specified on the POLL-ITEM-ID + property to provide the value of the voters response. This + parameter allows for fine grained responses which are appropriate + to some applications. For the case of individuals voting for a + choice of events, client applications SHOULD conform to the + following convention: + + * 0 - 39 A "NO vote" + + * 40 - 79 A "MAYBE" vote + + * 80 - 89 A "YES - but not preferred vote" + + * 90-100 A "YES" vote. + + Clients MUST preserve the response value when there is no + change from the user even if they have a UI with fixed states + (e.g. yes/no/maybe). + +5.6. New Components + +5.6.1. VPOLL Component + + Component name VPOLL + + Purpose This component provides a mechanism by which voters can vote + on provided choices. + + Format Definition This property is defined by the following + notation: + + + + + + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 20] + +Internet-Draft VPOLL July 2020 + + + pollc = "BEGIN" ":" "VPOLL" CRLF + pollprop + *participantc *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 / 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 / + ; + ) + + Figure 20 + + Description This component provides a mechanism by which voters can + + + +York, et al. Expires 17 January 2021 [Page 21] + +Internet-Draft VPOLL July 2020 + + + vote on provided choices. The outcome depends upon the POLL-MODE + in effect. + + The PARTICIPANT components in VPOLL requests provide information + on each recipient who will be voting - both their identity through + the CALENDAR-ADDRESS property and their votes through the VOTE + components. + + If specified, the "DTSTART" property defines the start or opening + of the poll active period. If absent the poll is presumed to have + started when created. + + If "DTSTART" is present "DURATION" MAY be specified and indicates + the duration, and hence the ending, of the poll. The value of the + property MUST be a positive duration. + + "DTEND" MAY be specified with or without "DTSTART" and indicates + the ending of the poll. If DTEND is specified it MUST be later + than the DTSTART or CREATED property. + + If one or more VALARM components are included in the VPOLL they + are not components to be voted on and MUST NOT contain a POLL- + ITEM-ID property. VALARM sub-components may be used to provide + warnings to the user when polls are due to start or end. + +5.6.2. VOTE Component + + Component name VOTE + + Purpose This component provides a mechanism by which voters can vote + on provided choices. + + Conformance This component may be specified zero or more times in a + PARTICIPANT component which identifies the voter. + + Format Definition This property is defined by the following + notation: + + + + + + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 22] + +Internet-Draft VPOLL July 2020 + + + votec = "BEGIN" ":" "VOTE" CRLF + voteprop + *eventc *todoc *journalc *freebusyc + *availabilityc *alarmc *iana-comp *x-comp + "END" ":" "VOTE" CRLF + + voteprop = *( + ; + ; The following are REQUIRED, + ; but MUST NOT occur more than once. + ; + pollitemid / response / + ; + ; The following are OPTIONAL, + ; and MAY occur more than once. + ; + comment / x-prop / iana-prop + ; + ) + + Figure 21 + + Description This component appears inside the PARTICIPANT component + with a PARTICIPANT-TYPE of VOTER to identify the voter. This + component contains that participants responses. + + The required and optional properties and their meanings will + depend upon the POLL-MODE in effect. + + For any POLL-MODE, POLL-ITEM-ID is used to associate the + information to a choice supplied by the organizer. This means + that each VOTE component only provides information about that + choice. + + If allowed by the POLL-MODE a VOTE component without a POLL-ITEM- + ID may be provided in a REPLY to indicate a possible new choice or + to provide information to the ORGANIZER - such as the respondees + availability. + +6. Poll Modes + + The VPOLL component is intended to allow for various forms of + polling. The particular form in efffect is indicated by the POLL- + MODE property. + + New poll modes can be registered by including a completed POLL-MODE + Registration Template (see Section 10.3) in a published RFC. + + + + +York, et al. Expires 17 January 2021 [Page 23] + +Internet-Draft VPOLL July 2020 + + +6.1. POLL-MODE:BASIC + + 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. + +6.1.1. Property restrictions + + This poll mode has the following property requirements: + + POLL-ITEM-ID Each contained sub-component that is being voted upon + MUST contain a POLL-ITEM_ID property which is unique within the + context of the POLL. The value MUST NOT be reused when events are + removed and/or added to the poll. + + POLL-WINNER On confirmation of the poll this property MUST be + present and identifies the winning component. + +6.1.2. Outcome reporting + + To confirm the winner the POLL-WINNER property MUST be present and + the STATUS MUST be set to CONFIRMED. + + When the winning VEVENT or VTODO is not a scheduled entity, that is, + it has no ORGANIZER or ATTENDEES it MUST be assigned an ORGANIZER + property and a list of non-participating ATTENDEEs. This allows the + winning entity to be distributed to the participants through iTip or + some other protocol. + +7. iTIP Extensions + + 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. + +7.1. Methods + + There are some extensions to the behavior of iTip methods for a VPOLL + object and two new methods are defined. + + + + + + + + +York, et al. Expires 17 January 2021 [Page 24] + +Internet-Draft VPOLL July 2020 + + + +----------------+------------------------------------------------+ + | 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 | + | | PARTICIPANTS. | + +----------------+------------------------------------------------+ + + Table 1 + + The following table shows the above methods broken down by who can + send them with VPOLL components. + + + + + + + + +York, et al. Expires 17 January 2021 [Page 25] + +Internet-Draft VPOLL July 2020 + + + +------------+------------------------------------------------+ + | Originator | Methods | + +============+================================================+ + | Organizer | CANCEL, PUBLISH, REQUEST, POLLSTATUS | + +------------+------------------------------------------------+ + | Voter | REPLY, REFRESH, REQUEST (only when delegating) | + +------------+------------------------------------------------+ + + Table 2 + +7.2. Interoperability Models + + Most of the standard iTip specification applies with respect to + organizer and voters. + +7.2.1. Delegation + + TBD + +7.2.2. Acting on Behalf of Other Calendar Users + + TBD + +7.2.3. Component Revisions + + * 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 + +7.2.4. Message Sequencing + + TBD + +7.3. Application Protocol Elements + +7.3.1. Methods for VPOLL Calendar Components + + 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. + + + +York, et al. Expires 17 January 2021 [Page 26] + +Internet-Draft VPOLL July 2020 + + + 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. | + +----------------+-------------------------------------------------+ + + Table 3 + + The following summarizes the methods that are defined for the "VPOLL" + calendar component. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 27] + +Internet-Draft VPOLL July 2020 + + + +------------+------------------------------------------------------+ + | 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. REQUEST SHOULD NOT be | + | | used just to set the status of the poll - | + | | POLLSTATUS provides a more compact approach. | + +------------+------------------------------------------------------+ + | 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 | + | | PARTICIPANT. | + +------------+------------------------------------------------------+ + + Table 4 + +7.3.2. Method: PUBLISH + + 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. + + Note Not clear how useful this is but needs some work on + transmitting the current vote without any voter identification. + + + +York, et al. Expires 17 January 2021 [Page 28] + +Internet-Draft VPOLL July 2020 + + + This method type is an iCalendar object that conforms to the + following property constraints: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST equal PUBLISH. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1+ | | + +-----------------+----------+-------------------------------------+ + | DTSTAMP | 1 | | + +-----------------+----------+-------------------------------------+ + | DTSTART | 0 or 1 | If present defines the start of the | + | | | poll. Otherwise the poll starts | + | | | when it is created and distributed. | + +-----------------+----------+-------------------------------------+ + | 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 | + + + +York, et al. Expires 17 January 2021 [Page 29] + +Internet-Draft VPOLL July 2020 + + + | | | 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+ | | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 0+ | Only PARTICIPANT components with | + | | | PARTICIPANT-TYPE not equal to | + | | | "VOTER" - that is, no voters | + +-----------------+----------+-------------------------------------+ + | REQUEST-STATUS | 0 | | + +-----------------+----------+-------------------------------------+ + | VALARM | 0+ | | + +-----------------+----------+-------------------------------------+ + | VEVENT | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VTODO | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + + + +York, et al. Expires 17 January 2021 [Page 30] + +Internet-Draft VPOLL July 2020 + + + | | | component. | + +-----------------+----------+-------------------------------------+ + | VTIMEZONE | 0+ | MUST be present if any date/time | + | | | refers to a timezone. | + +-----------------+----------+-------------------------------------+ + | IANA-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + | X-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + + Table 5: Constraints for a METHOD:PUBLISH of a VPOLL + +7.3.3. Method: REQUEST + + The "REQUEST" method in a "VPOLL" component provides the following + scheduling functions: + + * Invite "Voters" to respond to the poll. + + * Change the items being voted upon. + + * Complete or confirm the poll. + + * Response to a "REFRESH" request. + + * Update the details of an existing vpoll. + + * Update the status of "Voters". + + * Forward a "VPOLL" to another uninvited CU. + + * For an existing "VPOLL" calendar component, delegate the role of + "Voter" to another CU. + + * For an existing "VPOLL" calendar component, change the role of + "Organizer" to another CU. + + The "Organizer" originates the "REQUEST". The recipients of the + "REQUEST" method are the CUs voting in the poll, the "Voters". + "Voters" use the "REPLY" method to convey votes to 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. + + + +York, et al. Expires 17 January 2021 [Page 31] + +Internet-Draft VPOLL July 2020 + + + 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: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST be REQUEST. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1 | | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 1+ | Identified as voters with the | + | | | PARTICIPANT-TYPE=VOTER | + +-----------------+----------+-------------------------------------+ + | DTSTAMP | 1 | | + +-----------------+----------+-------------------------------------+ + | DTSTART | 0 or 1 | If present defines the start of the | + | | | poll. Otherwise the poll starts | + | | | when it is created and distributed. | + +-----------------+----------+-------------------------------------+ + | 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. | + + + +York, et al. Expires 17 January 2021 [Page 32] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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 | + + + +York, et al. Expires 17 January 2021 [Page 33] + +Internet-Draft VPOLL July 2020 + + + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + | VTODO | 0+ | Depending upon the poll mode in | + | | | effect there MAY be candidate | + | | | components included in the poll | + | | | component. | + +-----------------+----------+-------------------------------------+ + + Table 6: Constraints for a METHOD:REQUEST of a VPOLL + +7.3.3.1. Rescheduling a poll + + 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. + +7.3.3.2. Updating or Reconfirmation of a 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 a "Voter" to the "Organizer" of a poll. + + + + + + +York, et al. Expires 17 January 2021 [Page 34] + +Internet-Draft VPOLL July 2020 + + + 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. + +7.3.3.3. Confirmation of a 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. + +7.3.3.4. Closing a Poll + + The "REQUEST" method may be used to close a poll, that is indicate + voting is completed. The STATUS MUST be set to COMPLETED. + +7.3.3.5. Delegating a Poll to Another CU + + 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. + + + + + + + +York, et al. Expires 17 January 2021 [Page 35] + +Internet-Draft VPOLL July 2020 + + + 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". + +7.3.3.6. Changing 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". + +7.3.3.7. Sending on Behalf of the 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". + +7.3.3.8. Forwarding to an Uninvited CU + + 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 a "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. + + + + + + +York, et al. Expires 17 January 2021 [Page 36] + +Internet-Draft VPOLL July 2020 + + + 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. + +7.3.3.9. Updating Voter Status + + 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 "RSVP=TRUE" property parameter on the + PARTICIPANT CALENDAR-ADDRESS. 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". + +7.3.4. Method: REPLY + + 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" "CALENDAR- + ADDRESS" property. The "Delegate" SHOULD include the calendar + address of the "Delegator" on the "DELEGATED-FROM" property parameter + of the "Delegate's" "CALENDAR-ADDRESS" 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". + + + + + + + +York, et al. Expires 17 January 2021 [Page 37] + +Internet-Draft VPOLL July 2020 + + + A "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. (But see comments on VFREEBUSY and VAVAILABILITY) + + This method type is an iCalendar object that conforms to the + following property constraints: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST be REPLY. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1+ | All components MUST have the same | + +-----------------+----------+-------------------------------------+ + | | | UID. | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 1 | Identifies 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 | | + + + +York, et al. Expires 17 January 2021 [Page 38] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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+ | | + + + +York, et al. Expires 17 January 2021 [Page 39] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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 or 1 | A voter may respond with a | + | | | VFREEBUSY component indicating that | + | | | the ORGANIZER may select some other | + | | | time which is not marked as busy. | + +-----------------+----------+-------------------------------------+ + | VAVAILABILITY | 0 | A voter may respond with a | + | | | VAVAILABILITY component indicating | + | | | that the ORGANIZER may select some | + | | | other time which is shown as | + | | | available. | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0 | | + +-----------------+----------+-------------------------------------+ + | VTODO | 0 | | + +-----------------+----------+-------------------------------------+ + + Table 7: Constraints for a METHOD:REPLY of a VPOLL + +7.3.5. Method: CANCEL + + 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 7.2.3. + + Once a CANCEL message has been sent to all voters no further voting + may take place. The poll is considered closed. + + + +York, et al. Expires 17 January 2021 [Page 40] + +Internet-Draft VPOLL July 2020 + + + This method type is an iCalendar object that conforms to the + following property constraints: + + +-----------------+----------+----------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+==================================+ + | METHOD | 1 | MUST be CANCEL. | + +-----------------+----------+----------------------------------+ + | VPOLL | 1+ | All must have the same UID. | + +-----------------+----------+----------------------------------+ + | PARTICIPANT | 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 | | + +-----------------+----------+----------------------------------+ + | 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 | | + +-----------------+----------+----------------------------------+ + + + +York, et al. Expires 17 January 2021 [Page 41] + +Internet-Draft VPOLL July 2020 + + + | 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 | | + + + +York, et al. Expires 17 January 2021 [Page 42] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+----------------------------------+ + | VJOURNAL | 0 | | + +-----------------+----------+----------------------------------+ + | VEVENT | 0 | | + +-----------------+----------+----------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+----------------------------------+ + + Table 8: Constraints for a METHOD:CANCEL of a VPOLL + +7.3.6. Method: REFRESH + + 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: + + +--------------------+----------+----------------------------+ + | Component/Property | Presence | Comment | + +====================+==========+============================+ + | METHOD | 1 | MUST be REFRESH. | + +--------------------+----------+----------------------------+ + | VPOLL | 1 | | + +--------------------+----------+----------------------------+ + | PARTICIPANT | 1 | MUST identify the | + | | | requester as a voter. | + +--------------------+----------+----------------------------+ + | 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 | | + +--------------------+----------+----------------------------+ + + + +York, et al. Expires 17 January 2021 [Page 43] + +Internet-Draft VPOLL July 2020 + + + | 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 | | + +--------------------+----------+----------------------------+ + + + +York, et al. Expires 17 January 2021 [Page 44] + +Internet-Draft VPOLL July 2020 + + + | VTIMEZONE | 0+ | | + +--------------------+----------+----------------------------+ + | IANA-COMPONENT | 0+ | | + +--------------------+----------+----------------------------+ + | X-COMPONENT | 0+ | | + +--------------------+----------+----------------------------+ + | VTODO | 0 | | + +--------------------+----------+----------------------------+ + | VJOURNAL | 0 | | + +--------------------+----------+----------------------------+ + | VEVENT | 0 | | + +--------------------+----------+----------------------------+ + | VFREEBUSY | 0 | | + +--------------------+----------+----------------------------+ + + Table 9: Constraints for a METHOD:REFRESH of a VPOLL + +7.3.7. Method: POLLSTATUS + + 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. All "Voters" MUST be present. The selected component(s) + according to the poll mode SHOULD NOT 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: + + +-----------------+----------+-------------------------------------+ + | Component/ | Presence | Comment | + | Property | | | + +=================+==========+=====================================+ + | METHOD | 1 | MUST equal POLLSTATUS. | + +-----------------+----------+-------------------------------------+ + | VPOLL | 1+ | | + +-----------------+----------+-------------------------------------+ + | PARTICIPANT | 1+ | The voters containing their current | + | | | vote | + +-----------------+----------+-------------------------------------+ + | COMPLETED | 0 or 1 | Only present for a completed poll | + +-----------------+----------+-------------------------------------+ + | DTSTAMP | 1 | | + +-----------------+----------+-------------------------------------+ + | DTSTART | 0 or 1 | | + +-----------------+----------+-------------------------------------+ + | ORGANIZER | 1 | | + + + +York, et al. Expires 17 January 2021 [Page 45] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | 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 | | + +-----------------+----------+-------------------------------------+ + | 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 | | + + + +York, et al. Expires 17 January 2021 [Page 46] + +Internet-Draft VPOLL July 2020 + + + +-----------------+----------+-------------------------------------+ + | IANA-PROPERTY | 0+ | | + +-----------------+----------+-------------------------------------+ + | X-PROPERTY | 0+ | | + +-----------------+----------+-------------------------------------+ + | REQUEST-STATUS | 0 | | + +-----------------+----------+-------------------------------------+ + | VALARM | 0+ | | + +-----------------+----------+-------------------------------------+ + | VEVENT | 0 | All candidate components SHOULD NOT | + | | | be present. | + +-----------------+----------+-------------------------------------+ + | VFREEBUSY | 0 | | + +-----------------+----------+-------------------------------------+ + | VJOURNAL | 0 | All candidate components SHOULD NOT | + | | | be present. | + +-----------------+----------+-------------------------------------+ + | VTODO | 0 | All candidate components SHOULD NOT | + | | | be present. | + +-----------------+----------+-------------------------------------+ + | VTIMEZONE | 0+ | MUST be present if any date/time | + | | | refers to a timezone. | + +-----------------+----------+-------------------------------------+ + | IANA-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + | X-COMPONENT | 0+ | | + +-----------------+----------+-------------------------------------+ + + Table 10: Constraints for a METHOD:POLLSTATUS of a VPOLL + +8. CalDAV Extensions + + 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. + + Additionally, it extends [RFC6638] as it a VPOLL component is a + schedulable entity. + +8.1. Calendar Collection Properties + + This section defines new CalDAV properties for calendar collections. + +8.1.1. CALDAV:supported-vpoll-component-sets + + Name supported-vpoll-component-sets + + Namespace urn:ietf:params:xml:ns:caldav + + + +York, et al. Expires 17 January 2021 [Page 47] + +Internet-Draft VPOLL July 2020 + + + Purpose Specifies the calendar component types (e.g., VEVENT, VTODO, + etc.) and combination of types that may be included in a VPOLL + component. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND DAV:allprop request (as defined in [RFC2518]). + + Description The CALDAV:supported-vpoll-component-sets property is + used to specify restrictions on the calendar component types that + VPOLL components may contain in a calendar collection. + + It also specifies the combination of allowed component types. + + Any attempt by the client to store VPOLL components with component + types or combinations of types not listed in this property, if it + exists, MUST result in an error, with the "CALDAV:supported-vpoll- + component-sets" precondition Section 8.2 being violated. Since + this property is protected, it cannot be changed by clients using + a PROPPATCH request. However, clients can initialize the value of + this property when creating a new calendar collection with + MKCALENDAR. In the absence of this property, the server MUST + accept all component types, and the client can assume that all + component types are accepted. + + Definition + + <!ELEMENT supported-vpoll-component-sets + (supported-vpoll-component-set*) > + + <!ELEMENT supported-vpoll-component-set (comp+)> + + Figure 22 + + + + + + + + + + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 48] + +Internet-Draft VPOLL July 2020 + + + <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> + + Figure 23 + +8.1.2. CALDAV:vpoll-max-items + + Name vpoll-max-items + + Namespace urn:ietf:params:xml:ns:caldav + + Purpose Provides a numeric value indicating the maximum number of + items that may be contained in any instance of a VPOLL calendar + object resource stored in the calendar collection. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND DAV:allprop request (as defined in [RFC2518]). + + Description The CALDAV:vpoll-max-items is used to specify a numeric + value that indicates the maximum number of iCalendar components in + any one instance of a VPOLL calendar object resource stored in a + calendar collection. Any attempt to store a calendar object + resource with more components per instance than this value MUST + + + +York, et al. Expires 17 January 2021 [Page 49] + +Internet-Draft VPOLL July 2020 + + + result in an error, with the CALDAV: vpoll-max-items precondition + Section 8.2 being violated. In the absence of this property, the + client can assume that the server can handle any number of items + in a VPOLL calendar component. + + Definition + + <!ELEMENT vpoll-max-items (#PCDATA)> + PCDATA value: a numeric value (integer greater than zero) + + Figure 24 + + <C:vpoll-max-items xmlns:C="urn:ietf:params:xml:ns:caldav" + >25</C:vpoll-max-items> + + Figure 25 + +8.1.3. CALDAV:vpoll-max-active + + Name vpoll-max-active + + Namespace urn:ietf:params:xml:ns:caldav + + Purpose Provides a numeric value indicating the maximum number of + active vpolls at any one time. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND DAV:allprop request (as defined in [RFC2518]). + + Description The CALDAV:vpoll-max-active is used to specify a numeric + value that indicates the maximum number of active VPOLLs at any + one time. Any attempt to store a new active VPOLL calendar object + resource which results in exceeding this limit MUST result in an + error, with the "CALDAV:vpoll-max-active" precondition Section 8.2 + being violated. In the absence of this property, the client can + assume that the server can handle any number of active VPOLLs. + + Definition + + <!ELEMENT vpoll-max-active (#PCDATA)> + PCDATA value: a numeric value (integer greater than zero) + + Figure 26 + + <C:vpoll-max-active xmlns:C="urn:ietf:params:xml:ns:caldav" + >25</C:vpoll-max-active> + + + + +York, et al. Expires 17 January 2021 [Page 50] + +Internet-Draft VPOLL July 2020 + + + Figure 27 + +8.1.4. CALDAV:vpoll-max-voters + + Name "vpoll-max-voters" + + Namespace "urn:ietf:params:xml:ns:caldav" + + Purpose Provides a numeric value indicating the maximum number of + voters for any instance of a VPOLL calendar object resource stored + in the calendar collection. + + Conformance This property MAY be defined on any calendar collection. + If defined, it MUST be protected and SHOULD NOT be returned by a + PROPFIND "DAV:allprop" request (as defined in [RFC2518]). + + Description The "CALDAV:vpoll-max-voters" is used to specify a + numeric value that indicates the maximum number of voters for any + one instance of a VPOLL calendar object resource stored in a + calendar collection. Any attempt to store a calendar object + resource with more voters per instance than this value MUST result + in an error, with the CALDAV: "vpoll-max-voters" precondition + Section 8.2 being violated. In the absence of this property, the + client can assume that the server can handle any number of voters + in a VPOLL calendar component. + + Definition + + <!ELEMENT vpoll-max-voters (#PCDATA)> + PCDATA value: a numeric value (integer greater than zero) + + Figure 28 + + <C:vpoll-max-voters xmlns:C="urn:ietf:params:xml:ns:caldav" + >25</C:vpoll-max-voters> + + Figure 29 + +8.1.5. CalDAV:even-more-properties + +8.1.6. Extensions to CalDAV scheduling + + This specification extends [RFC6638]. + + Each section of Appendix A "Scheduling Privileges Summary" is + extended to include VPOLL. + + + + + +York, et al. Expires 17 January 2021 [Page 51] + +Internet-Draft VPOLL July 2020 + + + Any reference to the ATTENDEE property should be read to include the + CALENDAR-ADDRESS property contained in the PARTICIPANT compoents. + That is, for scheduling purposes the CALENDAR-ADDRESS property is + handled in exactly the same manner as the ATTENDEE property. + +8.2. Additional Preconditions for PUT, COPY, and MOVE + + 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: + + (CALDAV:supported-vpoll-component-sets) The VPOLL resource submitted + in the PUT request, or targeted by a COPY or MOVE request, MUST + contain a type or combination of calendar component that is + supported in the targeted calendar collection; + + (CALDAV:vpoll-max-items) The VPOLL resource submitted in the PUT + request, or targeted by a COPY or MOVE request, MUST have a number + of sub-components (excluding VTIMEZONE) less than or equal to the + value of the "CALDAV:vpoll-max-items" property value Section 8.1.2 + on the calendar collection where the resource will be stored; + + (CALDAV:vpoll-max-active) The PUT request, or COPY or MOVE request, + MUST not result in the number of active VPOLLs being greater than + the value of the "CALDAV:vpoll-max-active" property value + Section 8.1.3 on the calendar collection where the resource will + be stored; + + (CALDAV:vpoll-max-voters) The VPOLL resource submitted in the PUT + request, or targeted by a COPY or MOVE request, MUST have a number + of voters represented by PARTICIPANT components less than or equal + to the value of the "CALDAV:vpoll-max-voters" property value + Section 8.1.4 on the calendar collection where the resource will + be stored; + +8.3. CalDAV:calendar-query Report + + 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. + + + + +York, et al. Expires 17 January 2021 [Page 52] + +Internet-Draft VPOLL July 2020 + + +8.3.1. Example: Partial Retrieval of VPOLL + + 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. + + >> 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> + + + + +York, et al. Expires 17 January 2021 [Page 53] + +Internet-Draft VPOLL July 2020 + + + >> 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:VPOLL + 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> + + + +York, et al. Expires 17 January 2021 [Page 54] + +Internet-Draft VPOLL July 2020 + + + </D:propstat> + </D:response> + </D:multistatus> + + Figure 30 + +8.4. CalDAV time ranges + + "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 + + 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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 55] + +Internet-Draft VPOLL July 2020 + + + +-------------------------------------------------------------------+ + | 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 | + +---+---+---+---+---+-----------------------------------------------+ + + Figure 31 + +9. Security Considerations + + 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. + +10. IANA Considerations + + + + + + +York, et al. Expires 17 January 2021 [Page 56] + +Internet-Draft VPOLL July 2020 + + +10.1. Parameter Registrations + + This document defines the following new iCalendar property parameters + to be added to the registry defined in [RFC5545]: + + +--------------------+---------+---------------+ + | Property Parameter | Status | Reference | + +====================+=========+===============+ + | REQUIRED | Current | Section 5.4.1 | + +--------------------+---------+---------------+ + | STAY-INFORMED | Current | Section 5.4.2 | + +--------------------+---------+---------------+ + + Table 11 + +10.2. Property Registrations + + This document defines the following new iCalendar properties to be + added to the registry defined in [RFC5545]: + + +-----------------+---------+---------------+ + | Property | Status | Reference | + +=================+=========+===============+ + | ACCEPT-RESPONSE | Current | Section 5.5.7 | + +-----------------+---------+---------------+ + | POLL-ITEM-ID | Current | Section 5.5.3 | + +-----------------+---------+---------------+ + | POLL-MODE | Current | Section 5.5.4 | + +-----------------+---------+---------------+ + | POLL-PROPERTIES | Current | Section 5.5.5 | + +-----------------+---------+---------------+ + | POLL-WINNER | Current | Section 5.5.6 | + +-----------------+---------+---------------+ + | RESPONSE | Current | Section 5.5.8 | + +-----------------+---------+---------------+ + + Table 12 + +10.3. POLL-MODE Registration Template + + A poll mode is defined by completing the following template. + + Poll mode name The name of the poll mode. + + Purpose The purpose of the poll mode. Give a short but clear + description. + + Reference A reference to the RFC in which the poll mode is defined + + + +York, et al. Expires 17 January 2021 [Page 57] + +Internet-Draft VPOLL July 2020 + + +10.4. POLL-MODE Registrations + + This document defines the following registered poll modes. + + +-----------+---------------------------------------+-----------+ + | Poll mode | Purpose | Reference | + | name | | | + +===========+=======================================+===========+ + | BASIC | To provide simple voting for a single | Current | + | | outcome from a number of candidates. | | + +-----------+---------------------------------------+-----------+ + + Table 13 + +11. Normative References + + [RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. + Jensen, "HTTP Extensions for Distributed Authoring - + WEBDAV", IETF RFC 2518, IETF RFC 2518, + DOI 10.17487/RFC2518, February 1999, + . + + [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform + Resource Identifier (URI): Generic Syntax", IETF RFC 3986, + IETF RFC 3986, DOI 10.17487/RFC3986, January 2005, + . + + [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault, + "Calendaring Extensions to WebDAV (CalDAV)", IETF RFC + 4791, IETF RFC 4791, DOI 10.17487/RFC4791, March 2007, + . + + [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and + Scheduling Core Object Specification (iCalendar)", IETF + RFC 5545, IETF RFC 5545, DOI 10.17487/RFC5545, September + 2009, . + + [RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent + Interoperability Protocol (iTIP)", IETF RFC 5546, IETF RFC + 5546, DOI 10.17487/RFC5546, December 2009, + . + + [RFC6047] Melnikov, A., Ed., "iCalendar Message-Based + Interoperability Protocol (iMIP)", IETF RFC 6047, IETF RFC + 6047, DOI 10.17487/RFC6047, December 2010, + . + + + + + +York, et al. Expires 17 January 2021 [Page 58] + +Internet-Draft VPOLL July 2020 + + + [RFC6638] Daboo, C. and B. Desruisseaux, "Scheduling Extensions to + CalDAV", IETF RFC 6638, IETF RFC 6638, + DOI 10.17487/RFC6638, June 2012, + . + + [I-D.draft-ietf-calext-eventpub-extensions] + "AUTOFILL", IETF IETF I-D.draft-ietf-calext-eventpub- + extensions, IETF IETF I-D.draft-ietf-calext-eventpub- + extensions. + +12. Bibliography + +Appendix A. Open issues + + public-comment: Not documented and was a parameter on something. + Really sounds like a PARTICIPANT or VOTE property + + Notifications: Need to do a section on what Notifications to support. + A. VPOLL is about to end and you haven't voted on it yet. Instead + reuse VALARMS to notify the user? + + Future: Restarting a confirmed/completed VPOLL What to do with + changes to STATUS:CONFIRMED? Allow them or not? What do to that + poll had a winning event or todo. Stress VPOLL UID MUST be unique + Changing status back from CONFIRMED MUST adjust status of any events + booked as a result of confirmation. MUST winning event be cancelled + for POLL-MODE basic? No - voter has indicated now unable to attend - + want to revote + + Future: Voting on a confirmed/completed VPOLL Can a voter vote after + completion? May be unable to attend and wants to indicate. Requires + retention of VPOLL retention period Removed status + + ORGANIZER/ATTENDEE validity Can a user create a poll with scheduled + events where that user's isn't the organizer of the poll? So is + there a requirement that the account that poll is on is able to + create each one of the resources in the poll? i.e. I can't create a + poll with a set of events where I am just the attendee of the events. + Are there any other restrictions for components in a VPOLL? Add to + security consideration + + Update to existing event after poll confirm When voting on existing + event - winning properties ONLY are merged in to the real event. + + Need to write down what isn't valid in a VPOLL a. Can't change POLL- + MODE + + Guide for ATTENDEE roles chair, NON-PARTICIPANT etc + + + +York, et al. Expires 17 January 2021 [Page 59] + +Internet-Draft VPOLL July 2020 + + + ? - some iTip notes On confirm - send itip if appropriate (PUBLISH) - + all non-participating - shared - feeds Organizer can specify where + result is? Confirm can specify that itip is sent - ITIP / NONE - + parameter ? on POLL-WINNER + + Need to add example of freebusy in response + + BEGIN:VCALENDAR + VERSION:2.0 + PRODID:-//BedeworkCaldavTest//BedeworkCaldavTest + METHOD: REPLY + BEGIN:VPOLL + ORGANIZER:mailto:douglm@mysite.edu + BEGIN:PARTICIPANT + PARTICIPANT-TYPE: VOTER + CALENDAR-ADDRESS:mailto:eric@example.com + UID:sched01-1234567890 + DTSTAMP:20120101T010000Z + SEQUENCE:0 + SUMMARY:What to do this week + BEGIN:VFREEBUSY + ....... + END:VFREEBUSY + END:PARTICIPANT + END:VPOLL + END:VCALENDAR + + Figure 32 + +Appendix B. Change log + + Calext V01: 2019-10-17 MD Replace VVOTER and VOTER with PARTICIPANT. + + Calext V00: 2019-05-17 MD First calext version. Moved source to + metanorma. No changes to specification. + + V03: 2014-10-28 MD * Add VVOTER and VOTE components. + + * Add RESPONSE property. + + * Remove RESPONSE parameter from VOTER. + + V03: 2014-05-12 MD * Add reply-url property and required parameter. + + * Fix ACCEPT-RESPONSE definition. + + V02: 2014-05-12 MD * Typos fixed, clarifications made. + + + + +York, et al. Expires 17 January 2021 [Page 60] + +Internet-Draft VPOLL July 2020 + + + * Removed spurious COMMENT param. Switched some + to PUBLIC-COMMENT + + * Changed STAY-INFORMED to remove boolean value + type and state explicit TRUE/FALSE values. + + * iTip: Allow VPOLL DTSTART to be optional and + allow VAVAILABILITY as subcomponent + + * iTip: fix broken table cells + + * Add POLL-PROPERTIES, POLL-WINNER to 5545 + extensions table + + * Added Caldav scheduling section + + V01: 2013-08-07 MD * Removed method CONFIRM + + * Removed pollitemid from VPOLL abnf. Added + text for pollwinner + + * Added POLL-WINNER and verbiage + + * Added STATUS values + + * Added RELTYPE=POLL + + * Added supported-vpoll-component-sets + + * Added CalDAV related parameters to VOTER + + * Removed bad CalDAV query example. State that + queries cannot target the sub-components. + + Initial version: 2012-11-02 MD + +Authors' Addresses + + Eric York + + Email: eric.york@gmail.com + + + Cyrus Daboo + + Email: cyrus@daboo.name + + + + + +York, et al. Expires 17 January 2021 [Page 61] + +Internet-Draft VPOLL July 2020 + + + Michael Douglass + + Email: mikeadouglass@gmail.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +York, et al. Expires 17 January 2021 [Page 62] diff --git a/sources/metadata.min.js b/sources/metadata.min.js new file mode 100644 index 0000000..e07b59f --- /dev/null +++ b/sources/metadata.min.js @@ -0,0 +1 @@ +async function addMetadata(){try{const e=document.styleSheets[0].cssRules;for(let t=0;t=0?document.URL.replace(/html$/,"json"):document.URL+".json";const o=await fetch(t);a=await o.json()}}if(!a)return;e.style.display="block";const s="",d="https://datatracker.ietf.org/doc",n="https://datatracker.ietf.org/ipr/search",c="https://www.rfc-editor.org/info",l=a.doc_id.toLowerCase(),i=a.doc_id.slice(0,3).toLowerCase(),f=a.doc_id.slice(3).replace(/^0+/,""),u={status:"Status",obsoletes:"Obsoletes",obsoleted_by:"Obsoleted By",updates:"Updates",updated_by:"Updated By",see_also:"See Also",errata_url:"Errata"};let h="
";["status","obsoletes","obsoleted_by","updates","updated_by","see_also","errata_url"].forEach(e=>{if("status"==e){a[e]=a[e].toLowerCase();var t=a[e].split(" "),o=t.length,w="",p=1;for(let e=0;e"+a[e][t].slice(3)+", ":m+""+a[e][t].slice(3)+"",b++);a[e]=m}else if("see_also"==e){var y,L="",C=1;y=a[e].length;for(let t=0;t"+_+" "+v+", ":L+""+v+", ":"RFC"!=_?L+""+_+" "+v+"":L+""+v+"",C++}a[e]=L}else if("errata_url"==e){var R="";R=a[e]?R+"Errata exist | Datatracker| IPR | Info page":"Datatracker | IPR | Info page",a[e]=R}""!=a[e]?"Errata"==u[e]?h+=`
More info:
${a[e]}
`:h+=`
${u[e]}:
${a[e]}
`:"Errata"==u[e]&&(h+=`
More info:
${a[e]}
`)}),h+="
",e.innerHTML=h}catch(e){console.log(e)}else console.log("Could not locate metadata
element");function r(e){return e.charAt(0).toUpperCase()+e.slice(1)}}window.removeEventListener("load",addMetadata),window.addEventListener("load",addMetadata); \ No newline at end of file From aec3d8e4e3d7f5a52777914a647272eb3d50f38d Mon Sep 17 00:00:00 2001 From: Ronald Tse Date: Tue, 12 May 2026 06:53:23 +0800 Subject: [PATCH 2/2] ci: retrigger CI with fixed shared workflow