draft-ietf-calsch-cap-10.txt   draft-ietf-calsch-cap-11.txt 
Network Working Group D. Royer Calendaring and Scheduling D. Royer
Internet-Draft INET-Consulting Internet-Draft INET-Consulting
Expires: August 28, 2003 G. Babics Expires: January 25, 2004 G. Babics
Oracle Oracle
P. Hill P. Hill
Massachusetts Institute of Massachusetts Institute of
Technology Technology
S. Mansour S. Mansour
AOL/Netscape AOL/Netscape
February 27, 2003 July 27, 2003
Calendar Access Protocol (CAP) Calendar Access Protocol (CAP)
draft-ietf-calsch-cap-10 draft-ietf-calsch-cap-11.txt
Status of this Memo Status of this Memo
This document is an Internet-Draft and is in full conformance with This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026. all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that other
other groups may also distribute working documents as Internet- groups may also distribute working documents as Internet-Drafts.
Drafts.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at http:// The list of current Internet-Drafts can be accessed at http://
www.ietf.org/ietf/1id-abstracts.txt. www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on August 28, 2003. This Internet-Draft will expire on January 25, 2004.
Copyright Notice Copyright Notice
Copyright (C) The Internet Society (2003). All Rights Reserved. Copyright (C) The Internet Society (2003). All Rights Reserved.
Abstract Abstract
The Calendar Access Protocol (CAP) is an Internet protocol described The Calendar Access Protocol (CAP) is an Internet protocol described
in this memo that permits a Calendar User (CU) to utilize a Calendar in this memo that permits a Calendar User (CU) to utilize a Calendar
User Agent (CUA) to access an [iCAL] based Calendar Store (CS). User Agent (CUA) to access an [iCAL] based Calendar Store (CS).
skipping to change at page 2, line 14 skipping to change at page 2, line 13
Internet Engineering Task Force (IETF) Calendaring and Scheduling Internet Engineering Task Force (IETF) Calendaring and Scheduling
(CALSCH) Working Group. More information about the IETF CALSCH (CALSCH) Working Group. More information about the IETF CALSCH
Working Group activities can be found on the IMC web site at http:// Working Group activities can be found on the IMC web site at http://
www.imc.org/ietf-calendar and at the IETF web site at http:// www.imc.org/ietf-calendar and at the IETF web site at http://
www.ietf.org/html.charters/calsch-charter.html [1]. Refer to the www.ietf.org/html.charters/calsch-charter.html [1]. Refer to the
references within this memo for further information on how to access references within this memo for further information on how to access
these various documents. these various documents.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . 6 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 5
1.1 Formatting Conventions . . . . . . . . . . . . . . . . . 6 1.1 Formatting Conventions . . . . . . . . . . . . . . . . . . 5
1.2 Related Documents . . . . . . . . . . . . . . . . . . . 7 1.2 Related Documents . . . . . . . . . . . . . . . . . . . . 6
1.3 Definitions . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Definitions . . . . . . . . . . . . . . . . . . . . . . . 7
2. Additions to iCalendar . . . . . . . . . . . . . . . . . 13 2. Additions to iCalendar . . . . . . . . . . . . . . . . . . 12
2.1 New Value Types (summary) . . . . . . . . . . . . . . . 15 2.1 New Value Types (summary) . . . . . . . . . . . . . . . . 14
2.1.1 New Parameters (summary) . . . . . . . . . . . . . . . . 15 2.1.1 New Parameters (summary) . . . . . . . . . . . . . . . . . 14
2.1.2 New Properties (summary) . . . . . . . . . . . . . . . . 16 2.1.2 New Properties (summary) . . . . . . . . . . . . . . . . . 15
2.1.3 New Components (summary) . . . . . . . . . . . . . . . . 18 2.1.3 New Components (summary) . . . . . . . . . . . . . . . . . 17
2.2 Relationship of RFC-2446 (ITIP) and CAP . . . . . . . . 19 2.2 Relationship of RFC-2446 (ITIP) and CAP . . . . . . . . . 18
3. CAP Design . . . . . . . . . . . . . . . . . . . . . . . 22 3. CAP Design . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1 System Model . . . . . . . . . . . . . . . . . . . . . . 22 3.1 System Model . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Calendar Store Object Model . . . . . . . . . . . . . . 22 3.2 Calendar Store Object Model . . . . . . . . . . . . . . . 21
3.3 Protocol Model . . . . . . . . . . . . . . . . . . . . . 23 3.3 Protocol Model . . . . . . . . . . . . . . . . . . . . . . 22
3.3.1 Use of BEEP, MIME and iCalendar . . . . . . . . . . . . 24 3.3.1 Use of BEEP, MIME and iCalendar . . . . . . . . . . . . . 23
4. Security Model . . . . . . . . . . . . . . . . . . . . . 26 4. Security Model . . . . . . . . . . . . . . . . . . . . . . 25
4.1 Calendar User and UPNs . . . . . . . . . . . . . . . . . 26 4.1 Calendar User and UPNs . . . . . . . . . . . . . . . . . . 25
4.1.1 UPNs and Certificates . . . . . . . . . . . . . . . . . 26 4.1.1 UPNs and Certificates . . . . . . . . . . . . . . . . . . 25
4.1.2 Anonymous Users and Authentication . . . . . . . . . . . 27 4.1.2 Anonymous Users and Authentication . . . . . . . . . . . . 26
4.1.3 User Groups . . . . . . . . . . . . . . . . . . . . . . 27 4.1.3 User Groups . . . . . . . . . . . . . . . . . . . . . . . 26
4.2 Access Rights . . . . . . . . . . . . . . . . . . . . . 28 4.2 Access Rights . . . . . . . . . . . . . . . . . . . . . . 27
4.2.1 Access Control and NOCONFLICT . . . . . . . . . . . . . 28 4.2.1 Access Control and NOCONFLICT . . . . . . . . . . . . . . 27
4.2.2 Predefined VCARs . . . . . . . . . . . . . . . . . . . . 28 4.2.2 Predefined VCARs . . . . . . . . . . . . . . . . . . . . . 27
4.2.3 Decreed VCARs . . . . . . . . . . . . . . . . . . . . . 30 4.2.3 Decreed VCARs . . . . . . . . . . . . . . . . . . . . . . 29
4.3 CAP Session Identity . . . . . . . . . . . . . . . . . . 31 4.3 CAP Session Identity . . . . . . . . . . . . . . . . . . . 30
5. CAP URL and Calendar Address . . . . . . . . . . . . . . 32 5. CAP URL and Calendar Address . . . . . . . . . . . . . . . 32
6. New Value Types . . . . . . . . . . . . . . . . . . . . 34 6. New Value Types . . . . . . . . . . . . . . . . . . . . . 34
6.1 Property Value Data Types . . . . . . . . . . . . . . . 34 6.1 Property Value Data Types . . . . . . . . . . . . . . . . 34
6.1.1 CAL-QUERY Value Type . . . . . . . . . . . . . . . . . . 34 6.1.1 CAL-QUERY Value Type . . . . . . . . . . . . . . . . . . . 34
6.1.1.1 [NOT] CAL-OWNERS() . . . . . . . . . . . . . . . . . . . 39 6.1.2 UPN Value Type . . . . . . . . . . . . . . . . . . . . . . 49
6.1.1.2 CURRENT-TARGET() . . . . . . . . . . . . . . . . . . . . 40 6.1.3 UPN-FILTER Value . . . . . . . . . . . . . . . . . . . . . 50
6.1.1.3 PARAM() . . . . . . . . . . . . . . . . . . . . . . . . 40 7. New Parameters . . . . . . . . . . . . . . . . . . . . . . 53
6.1.1.4 SELF() . . . . . . . . . . . . . . . . . . . . . . . . . 40 7.1 ACTION Parameter . . . . . . . . . . . . . . . . . . . . . 53
6.1.1.5 STATE() . . . . . . . . . . . . . . . . . . . . . . . . 41 7.2 ENABLE Parameter . . . . . . . . . . . . . . . . . . . . . 53
6.1.1.6 Ordering of Results . . . . . . . . . . . . . . . . . . 41 7.3 ID Parameter . . . . . . . . . . . . . . . . . . . . . . . 54
6.1.1.7 Date sorting order . . . . . . . . . . . . . . . . . . . 42 7.4 LATENCY Parameter . . . . . . . . . . . . . . . . . . . . 55
6.1.1.8 Use of single quote . . . . . . . . . . . . . . . . . . 42 7.5 LOCAL Parameter . . . . . . . . . . . . . . . . . . . . . 56
6.1.1.9 Comparing DATE and DATE-TIME values . . . . . . . . . . 42 7.6 LOCALIZE Parameter . . . . . . . . . . . . . . . . . . . . 56
6.1.1.10 DTEND and DURATION . . . . . . . . . . . . . . . . . . . 43 7.7 OPTIONS Parameter . . . . . . . . . . . . . . . . . . . . 57
6.1.1.11 [NOT] LIKE . . . . . . . . . . . . . . . . . . . . . . . 45 8. New Properties . . . . . . . . . . . . . . . . . . . . . . 59
6.1.1.12 Empty vs. NULL . . . . . . . . . . . . . . . . . . . . . 46 8.1 ALLOW-CONFLICT Property . . . . . . . . . . . . . . . . . 59
6.1.1.13 [NOT] IN . . . . . . . . . . . . . . . . . . . . . . . . 46 8.2 ATT-COUNTER Property . . . . . . . . . . . . . . . . . . . 59
6.1.1.14 DATE-TIME and TIME values in a WHEN clause . . . . . . . 47 8.3 CALID Property . . . . . . . . . . . . . . . . . . . . . . 60
6.1.1.15 Multiple contained components . . . . . . . . . . . . . 48 8.4 CALMASTER Property . . . . . . . . . . . . . . . . . . . . 61
6.1.1.16 Example, Query by UID . . . . . . . . . . . . . . . . . 48 8.5 CAP-VERSION Property . . . . . . . . . . . . . . . . . . . 61
6.1.1.17 Query by Date-Time range . . . . . . . . . . . . . . . . 49 8.6 CARID Property . . . . . . . . . . . . . . . . . . . . . . 62
6.1.1.18 Query for all Unprocessed Entries . . . . . . . . . . . 49 8.7 CAR-LEVEL Property . . . . . . . . . . . . . . . . . . . . 62
6.1.1.19 Query with Subset of Properties by Date/Time . . . . . . 50 8.8 COMPONENTS Property . . . . . . . . . . . . . . . . . . . 63
6.1.1.20 Query with Components and Alarms In A Range . . . . . . 50 8.9 CSID Property . . . . . . . . . . . . . . . . . . . . . . 65
6.1.2 UPN Value Type . . . . . . . . . . . . . . . . . . . . . 51 8.10 DECREED Property . . . . . . . . . . . . . . . . . . . . . 65
6.1.3 UPN-FILTER Value . . . . . . . . . . . . . . . . . . . . 52 8.11 DEFAULT-CHARSET Property . . . . . . . . . . . . . . . . . 66
7. New Parameters . . . . . . . . . . . . . . . . . . . . . 55 8.12 DEFAULT-LOCALE Property . . . . . . . . . . . . . . . . . 67
7.1 ACTION Parameter . . . . . . . . . . . . . . . . . . . . 55 8.13 DEFAULT-TZID Property . . . . . . . . . . . . . . . . . . 68
7.2 ENABLE Parameter . . . . . . . . . . . . . . . . . . . . 55 8.14 DEFAULT-VCARS Property . . . . . . . . . . . . . . . . . . 69
7.3 ID Parameter . . . . . . . . . . . . . . . . . . . . . . 56 8.15 DENY Property . . . . . . . . . . . . . . . . . . . . . . 70
7.4 LATENCY Parameter . . . . . . . . . . . . . . . . . . . 57 8.16 EXPAND property . . . . . . . . . . . . . . . . . . . . . 70
7.5 LOCAL Parameter . . . . . . . . . . . . . . . . . . . . 58 8.17 GRANT Property . . . . . . . . . . . . . . . . . . . . . . 71
7.6 LOCALIZE Parameter . . . . . . . . . . . . . . . . . . . 58 8.18 ITIP-VERSION Property . . . . . . . . . . . . . . . . . . 72
7.7 OPTIONS Parameter . . . . . . . . . . . . . . . . . . . 59 8.19 MAX-COMP-SIZE Property . . . . . . . . . . . . . . . . . . 72
8. New Properties . . . . . . . . . . . . . . . . . . . . . 61 8.20 MAXDATE Property . . . . . . . . . . . . . . . . . . . . . 73
8.1 ALLOW-CONFLICT Property . . . . . . . . . . . . . . . . 61 8.21 MINDATE Property . . . . . . . . . . . . . . . . . . . . . 74
8.2 ATT-COUNTER Property . . . . . . . . . . . . . . . . . . 61 8.22 MULTIPART Property . . . . . . . . . . . . . . . . . . . . 74
8.3 CALID Property . . . . . . . . . . . . . . . . . . . . . 62 8.23 NAME Property . . . . . . . . . . . . . . . . . . . . . . 75
8.4 CALMASTER Property . . . . . . . . . . . . . . . . . . . 63 8.24 OWNER Property . . . . . . . . . . . . . . . . . . . . . . 76
8.5 CAP-VERSION Property . . . . . . . . . . . . . . . . . . 63 8.25 PERMISSION Property . . . . . . . . . . . . . . . . . . . 76
8.6 CARID Property . . . . . . . . . . . . . . . . . . . . . 64 8.26 QUERY property . . . . . . . . . . . . . . . . . . . . . . 77
8.7 CAR-LEVEL Property . . . . . . . . . . . . . . . . . . . 65 8.27 QUERYID property . . . . . . . . . . . . . . . . . . . . . 78
8.8 COMPONENTS Property . . . . . . . . . . . . . . . . . . 65 8.28 REQUEST-STATUS property . . . . . . . . . . . . . . . . . 78
8.9 CSID Property . . . . . . . . . . . . . . . . . . . . . 67 8.29 QUERY-LEVEL Property . . . . . . . . . . . . . . . . . . . 79
8.10 DECREED Property . . . . . . . . . . . . . . . . . . . . 68 8.30 RECUR-ACCEPTED Property . . . . . . . . . . . . . . . . . 80
8.11 DEFAULT-CHARSET Property . . . . . . . . . . . . . . . . 68 8.31 RECUR-LIMIT Property . . . . . . . . . . . . . . . . . . . 81
8.12 DEFAULT-LOCALE Property . . . . . . . . . . . . . . . . 69 8.32 RECUR-EXPAND Property . . . . . . . . . . . . . . . . . . 82
8.13 DEFAULT-TZID Property . . . . . . . . . . . . . . . . . 70 8.33 RESTRICTION Property . . . . . . . . . . . . . . . . . . . 82
8.14 DEFAULT-VCARS Property . . . . . . . . . . . . . . . . . 71 8.34 SCOPE Property . . . . . . . . . . . . . . . . . . . . . . 83
8.15 DENY Property . . . . . . . . . . . . . . . . . . . . . 72 8.35 STORES-EXPANDED Property . . . . . . . . . . . . . . . . . 84
8.16 EXPAND property . . . . . . . . . . . . . . . . . . . . 72 8.36 TARGET Property . . . . . . . . . . . . . . . . . . . . . 85
8.17 GRANT Property . . . . . . . . . . . . . . . . . . . . . 73 8.37 TRANSP Property . . . . . . . . . . . . . . . . . . . . . 85
8.18 ITIP-VERSION Property . . . . . . . . . . . . . . . . . 74 9. New Components . . . . . . . . . . . . . . . . . . . . . . 87
8.19 MAX-COMP-SIZE Property . . . . . . . . . . . . . . . . . 75 9.1 VAGENDA Component . . . . . . . . . . . . . . . . . . . . 87
8.20 MAXDATE Property . . . . . . . . . . . . . . . . . . . . 75 9.2 VCALSTORE Component . . . . . . . . . . . . . . . . . . . 89
8.21 MINDATE Property . . . . . . . . . . . . . . . . . . . . 76 9.3 VCAR Component . . . . . . . . . . . . . . . . . . . . . . 90
8.22 MULTIPART Property . . . . . . . . . . . . . . . . . . . 77 9.4 VRIGHT Component . . . . . . . . . . . . . . . . . . . . . 93
8.23 NAME Property . . . . . . . . . . . . . . . . . . . . . 77 9.5 VREPLY Component . . . . . . . . . . . . . . . . . . . . . 94
8.24 OWNER Property . . . . . . . . . . . . . . . . . . . . . 78 9.6 VQUERY Component . . . . . . . . . . . . . . . . . . . . . 94
8.25 PERMISSION Property . . . . . . . . . . . . . . . . . . 79 10. Commands and Responses . . . . . . . . . . . . . . . . . . 96
8.26 QUERY property . . . . . . . . . . . . . . . . . . . . . 79 10.1 CAP Commands (CMD) . . . . . . . . . . . . . . . . . . . . 96
8.27 QUERYID property . . . . . . . . . . . . . . . . . . . . 80 10.1.1 Bounded Latency . . . . . . . . . . . . . . . . . . . . . 97
8.28 REQUEST-STATUS property . . . . . . . . . . . . . . . . 81 10.1.2 ABORT Command . . . . . . . . . . . . . . . . . . . . . . 99
8.29 QUERY-LEVEL Property . . . . . . . . . . . . . . . . . . 82 10.1.3 CONTINUE Command . . . . . . . . . . . . . . . . . . . . . 100
8.30 RECUR-ACCEPTED Property . . . . . . . . . . . . . . . . 83 10.1.4 CREATE Command . . . . . . . . . . . . . . . . . . . . . . 101
8.31 RECUR-LIMIT Property . . . . . . . . . . . . . . . . . . 83 10.1.5 DELETE Command . . . . . . . . . . . . . . . . . . . . . . 106
8.32 RECUR-EXPAND Property . . . . . . . . . . . . . . . . . 84 10.2 GENERATE-UID Command . . . . . . . . . . . . . . . . . . . 109
8.33 RESTRICTION Property . . . . . . . . . . . . . . . . . . 85 10.3 GET-CAPABILITY Command . . . . . . . . . . . . . . . . . . 111
8.34 SCOPE Property . . . . . . . . . . . . . . . . . . . . . 86 10.4 IDENTIFY Command . . . . . . . . . . . . . . . . . . . . . 113
8.35 STORES-EXPANDED Property . . . . . . . . . . . . . . . . 86 10.5 MODIFY Command . . . . . . . . . . . . . . . . . . . . . . 116
8.36 TARGET Property . . . . . . . . . . . . . . . . . . . . 87 10.6 MOVE Command . . . . . . . . . . . . . . . . . . . . . . . 120
8.37 TRANSP Property . . . . . . . . . . . . . . . . . . . . 88 10.7 REPLY Response to a Command . . . . . . . . . . . . . . . 122
9. New Components . . . . . . . . . . . . . . . . . . . . . 90 10.8 SEARCH Command . . . . . . . . . . . . . . . . . . . . . . 123
9.1 VAGENDA Component . . . . . . . . . . . . . . . . . . . 90 10.8.1 Searching for VFREEBUSY . . . . . . . . . . . . . . . . . 126
9.2 VCALSTORE Component . . . . . . . . . . . . . . . . . . 92 10.9 SET-LOCALE Command . . . . . . . . . . . . . . . . . . . . 127
9.3 VCAR Component . . . . . . . . . . . . . . . . . . . . . 94 10.10 TIMEOUT Command . . . . . . . . . . . . . . . . . . . . . 128
9.4 VRIGHT Component . . . . . . . . . . . . . . . . . . . . 97 10.11 Response Codes . . . . . . . . . . . . . . . . . . . . . . 129
9.5 VREPLY Component . . . . . . . . . . . . . . . . . . . . 98 11. Object Registration . . . . . . . . . . . . . . . . . . . 131
9.6 VQUERY Component . . . . . . . . . . . . . . . . . . . . 98 11.1 Registration of New and Modified Entities . . . . . . . . 131
10. Commands and Responses . . . . . . . . . . . . . . . . . 101 11.2 Post the item definition . . . . . . . . . . . . . . . . . 131
10.1 CAP Commands (CMD) . . . . . . . . . . . . . . . . . . . 101 11.3 Allow a comment period . . . . . . . . . . . . . . . . . . 131
10.1.1 Bounded Latency . . . . . . . . . . . . . . . . . . . . 102 11.4 Release a new RFC . . . . . . . . . . . . . . . . . . . . 131
10.1.2 ABORT Command . . . . . . . . . . . . . . . . . . . . . 105 12. BEEP and CAP . . . . . . . . . . . . . . . . . . . . . . . 132
10.1.3 CONTINUE Command . . . . . . . . . . . . . . . . . . . . 105 12.1 BEEP Profile Registration . . . . . . . . . . . . . . . . 132
10.1.4 CREATE Command . . . . . . . . . . . . . . . . . . . . . 107 12.2 BEEP Exchange Styles . . . . . . . . . . . . . . . . . . . 132
10.1.5 DELETE Command . . . . . . . . . . . . . . . . . . . . . 112 13. IANA Considerations . . . . . . . . . . . . . . . . . . . 133
10.2 GENERATE-UID Command . . . . . . . . . . . . . . . . . . 115 14. Security Considerations . . . . . . . . . . . . . . . . . 134
10.3 GET-CAPABILITY Command . . . . . . . . . . . . . . . . . 117 Authors' Addresses . . . . . . . . . . . . . . . . . . . . 135
10.4 IDENTIFY Command . . . . . . . . . . . . . . . . . . . . 120 A. Acknowledgments . . . . . . . . . . . . . . . . . . . . . 137
10.5 MODIFY Command . . . . . . . . . . . . . . . . . . . . . 122 B. Bibliography . . . . . . . . . . . . . . . . . . . . . . . 138
10.6 MOVE Command . . . . . . . . . . . . . . . . . . . . . . 127 Intellectual Property and Copyright Statements . . . . . . 140
10.7 REPLY Response to a Command . . . . . . . . . . . . . . 130
10.8 SEARCH Command . . . . . . . . . . . . . . . . . . . . . 131
10.9 SET-LOCALE Command . . . . . . . . . . . . . . . . . . . 134
10.10 TIMEOUT Command . . . . . . . . . . . . . . . . . . . . 136
10.11 Response Codes . . . . . . . . . . . . . . . . . . . . . 136
11. Object Registration . . . . . . . . . . . . . . . . . . 139
11.1 Registration of New and Modified Entities . . . . . . . 139
11.2 Post the item definition . . . . . . . . . . . . . . . . 139
11.3 Allow a comment period . . . . . . . . . . . . . . . . . 139
11.4 Release a new RFC . . . . . . . . . . . . . . . . . . . 139
12. BEEP and CAP . . . . . . . . . . . . . . . . . . . . . . 140
12.1 BEEP Profile Registration . . . . . . . . . . . . . . . 140
12.2 BEEP Exchange Styles . . . . . . . . . . . . . . . . . . 140
13. IANA Considerations . . . . . . . . . . . . . . . . . . 141
14. Security Considerations . . . . . . . . . . . . . . . . 142
Authors' Addresses . . . . . . . . . . . . . . . . . . . 143
A. Acknowledgments . . . . . . . . . . . . . . . . . . . . 145
B. Bibliography . . . . . . . . . . . . . . . . . . . . . . 146
Full Copyright Statement . . . . . . . . . . . . . . . . 148
1. Introduction 1. Introduction
This document specifies how a Calendar CUA interacts with a CS to This document specifies how a Calendar CUA interacts with a CS to
manage calendar information. In particular, it specifies how to manage calendar information. In particular, it specifies how to
query, create, modify, and delete iCalendar components (e.g., events, query, create, modify, and delete iCalendar components (e.g., events,
to-dos, or daily journal entries). It further specifies how to to-dos, or daily journal entries). It further specifies how to search
search for available busy time information. Synchronization with for available busy time information. Synchronization with CUAs is not
CUAs is not covered. covered and believed to be possible using CAP.
CAP is specified as a [BEEP] "profile". As such, many aspects of the CAP is specified as a [BEEP] "profile". As such, many aspects of the
protocol (e.g., authentication and privacy) are provided within protocol (e.g., authentication and privacy) are provided within
[BEEP]. The protocol data units leverage the standard iCalendar [BEEP]. The protocol data units leverage the standard iCalendar
format [iCAL] to convey calendar related information. format [iCAL] to convey calendar related information.
CAP can also be used to store and fetch [iTIP] objects and when those CAP can also be used to store and fetch [iTIP] objects and when those
objects are used in this memo, they mean exactly the same as defined objects are used in this memo, they mean exactly the same as defined
in [iTIP]. When iCalendar objects are transferred between the CUA in [iTIP]. When iCalendar objects are transferred between the CUA and
and a CS, some additional properties and parameters may be added and a CS, some additional properties and parameters may be added and the
the CUA is responsible for correctly generating iCalendar objects to CUA is responsible for correctly generating iCalendar objects to non
non CAP processes. CAP processes.
The definition of new components, properties, parameter's, and value The definition of new components, properties, parameter's, and value
types are broken into two parts. The first part summarizes and types are broken into two parts. The first part summarizes and
defined the new objects. The second part provides the detail and any defined the new objects. The second part provides the detail and any
ABNF for those objects. ABNF for those objects. The ABNF in CAP as in other iCalendar
specifications is order independent. That is properties in a
component may occur in any order and parameters in any property may
occur in any order.
1.1 Formatting Conventions 1.1 Formatting Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" and "OPTIONAL" in this
document are to be interpreted as described in [RFCWORDS]. document are to be interpreted as described in [RFCWORDS].
Calendaring and scheduling roles are referred to in quoted-strings of Calendaring and scheduling roles are referred to in quoted-strings of
text with the first character of each word in upper case. For text with the first character of each word in upper case. For
example, "Organizer" refers to a role of a "Calendar User" (CU) example, "Organizer" refers to a role of a "Calendar User" (CU)
within the protocol defined by [iTIP]. Calendar components defined within the protocol defined by [iTIP]. Calendar components defined by
by [iCAL] are referred to with capitalized, quoted-strings of text. [iCAL] are referred to with capitalized, quoted-strings of text. All
All iCalendar components should start with the letter "V". For iCalendar components should start with the letter "V". For example,
example, "VEVENT" refers to the event calendar component, "VTODO" "VEVENT" refers to the event calendar component, "VTODO" refers to
refers to the to-do component and "VJOURNAL" refers to the daily the to-do component and "VJOURNAL" refers to the daily journal
journal component. component.
Scheduling methods defined by [iTIP], are referred to with Scheduling methods defined by [iTIP], are referred to with
capitalized, quoted-strings of text. For example, "REPLY" refers to capitalized, quoted-strings of text. For example, "REPLY" refers to
the method for replying to a "REQUEST". the method for replying to a "REQUEST".
CAP commands are referred to by upper-case, quoted-strings of text, CAP commands are referred to by upper-case, quoted-strings of text,
followed by the word "command". For example, "CREATE" command refers followed by the word "command". For example, "CREATE" command refers
to the command for creating a calendar entry, "SEARCH" command refers to the command for creating a calendar entry, "SEARCH" command refers
to the command for reading calendar components. CAP Commands are to the command for reading calendar components. CAP Commands are
named using the "CMD" property. named using the "CMD" property.
Properties defined by this memo are referred to with capitalized, Properties defined by this memo are referred to with capitalized,
quoted-strings of text, followed by the word "property". For quoted-strings of text, followed by the word "property". For example,
example, "ATTENDEE" property refers to the iCalendar property used to "ATTENDEE" property refers to the iCalendar property used to convey
convey the calendar address that has been invited to a "VEVENT" or the calendar address that has been invited to a "VEVENT" or "VTODO"
"VTODO" component. component.
Property parameters defined by this memo are referred to with Property parameters defined by this memo are referred to with
capitalized, quoted-strings of text, followed by the word capitalized, quoted-strings of text, followed by the word
"parameter". For example, "PARTSTAT" parameter refers to the "parameter". For example, "PARTSTAT" parameter refers to the
iCalendar property parameter used to specify the participation status iCalendar property parameter used to specify the participation status
of an attendee. Enumerated values defined by this memo are referred of an attendee. Enumerated values defined by this memo are referred
to with capitalized text, either alone or followed by the word to with capitalized text, either alone or followed by the word
"value". "value".
Object states defined by this memo are referred to with capitalized, Object states defined by this memo are referred to with capitalized,
skipping to change at page 8, line 26 skipping to change at page 7, line 29
marked for deletion which is the "DELETED" state. How the marked for deletion which is the "DELETED" state. How the
implementation stores the state of any object is not a protocol implementation stores the state of any object is not a protocol
issues and is not discussed. An object can be said to be booked, issues and is not discussed. An object can be said to be booked,
unprocessed, or marked for delete. unprocessed, or marked for delete.
1. An "UNPROCESSED" state scheduling object has been stored in 1. An "UNPROCESSED" state scheduling object has been stored in
the calendar store but has not been acted on by a CU or CUA. the calendar store but has not been acted on by a CU or CUA.
All scheduled entries are [iTIP] objects. All [iTIP] objects All scheduled entries are [iTIP] objects. All [iTIP] objects
in the store are not in the "BOOKED" state. To retrieve any in the store are not in the "BOOKED" state. To retrieve any
[iTIP] object, simply do a query asking for any objects that [iTIP] object, simply do a query asking for any objects that
were stored in the "UNPROCESSED" state. are stored in the "UNPROCESSED" state.
2. A "BOOKED" state entry is stored with the "CREATE" command. 2. A "BOOKED" state entry is stored with the "CREATE" command. It
It is an object that has been acted on by a CU or CUA and is an object that has been acted on by a CU or CUA and there
there has been a decision to store an object. To retrieve any has been a decision to store an object. To retrieve any booked
booked object, simply do a query asking for any objects that object, simply do a query asking for any objects that were
were stored in the "BOOKED" state. stored in the "BOOKED" state.
3. A "DELETED" state entry is created by sending a "DELETE" 3. A "DELETED" state entry is created by sending a "DELETE"
command with the "OPTION" parameter value set to "MARK". To command with the "OPTION" parameter value set to "MARK". To
retrieve any deleted object, simply do a query asking for any retrieve any deleted object, simply do a query asking for any
objects that were stored in the "DELETED" state. By default objects that were stored in the "DELETED" state. By default
objects marked for delete are not returned. The CUA must objects marked for delete are not returned. The CUA must
specifically ask for marked for delete objects. You can not specifically ask for marked for delete objects. You can not
ask for components in the "DELETED" state and in other states ask for components in the "DELETED" state and in other states
in the same "VQUERY" component, as there would be no way to in the same "VQUERY" component, as there would be no way to
distinguish between them in the reply. distinguish between them in the reply.
Calendar - A collection of logically related objects or entities Calendar - A collection of logically related objects or entities
each of which may be associated with a calendar date and possibly each of which may be associated with a calendar date and possibly
time of day. These entities can include calendar properties or time of day. These entities can include calendar properties or
components. In addition, a calendar might be related to other components. In addition, a calendar might be related to other
calendars with the "RELATED-TO" property. A calendar is calendars with the "RELATED-TO" property. A calendar is identified
identified by its unique calendar identifier. The [iCAL] defines by its unique calendar identifier. The [iCAL] defines the initial
the initial calendar properties, calendar components and calendar properties, calendar components and properties that make
properties that make up the contents of a calendar. up the contents of a calendar.
Calendar Access Protocol (CAP) - The standard Internet protocol that Calendar Access Protocol (CAP) - The standard Internet protocol that
permits a CUA to access and manipulate calendars residing on a permits a CUA to access and manipulate calendars residing on a
Calendar Store. (this memo) Calendar Store. (this memo)
Calendar Access Rights (VCAR) - The mechanism for specifying the CAP Calendar Access Rights (VCAR) - The mechanism for specifying the CAP
operations ("PERMISSION") that a particular calendar user ("UPN") operations ("PERMISSION") that a particular calendar user ("UPN")
is granted or denied permission to perform on a given calendar is granted or denied permission to perform on a given calendar
object ("SCOPE"). The calendar access rights are specified with a object ("SCOPE"). The calendar access rights are specified with a
"VCAR" component. (Section 9.3. "VCAR" component. (Section 9.3.
skipping to change at page 9, line 34 skipping to change at page 8, line 36
Component- Any object that conforms to the iCalendar object format Component- Any object that conforms to the iCalendar object format
and that is either defined in an internet draft, registered with and that is either defined in an internet draft, registered with
IANA, or is an experimental object that is prefixed with "x-". IANA, or is an experimental object that is prefixed with "x-".
Some types of components include calendars, events, to-dos, Some types of components include calendars, events, to-dos,
journals, alarms, and time zones. A component consists of journals, alarms, and time zones. A component consists of
properties and possibly other contained components. For example, properties and possibly other contained components. For example,
an event may contain an alarm component. an event may contain an alarm component.
Container - This is a generic name for VCALSTORE or VAGENDA. Container - This is a generic name for VCALSTORE or VAGENDA.
Properties - An attribute of a particular component. Some Properties - An attribute of a particular component. Some properties
properties are applicable to different types of components. For are applicable to different types of components. For example, the
example, the "DTSTART" property is applicable to the "VEVENT", "DTSTART" property is applicable to the "VEVENT", "VTODO", and
"VTODO", and "VJOURNAL" components. Other components are "VJOURNAL" components. Other components are applicable only to an
applicable only to an individual type of calendar component. For individual type of calendar component. For example, the "TZURL"
example, the "TZURL" property may only be applicable to the property may only be applicable to the "VTIMEZONE" components.
"VTIMEZONE" components.
Calendar Identifier (CalID) - A globally unique identifier Calendar Identifier (CALID) - A globally unique identifier
associated with a calendar. Calendars reside within a CS. See associated with a calendar. Calendars reside within a CS. See
Qualified Calendar Identifier and Relative Calendar Identifier. Qualified Calendar Identifier and Relative Calendar Identifier.
All CalIDs start with "cap:". All CALIDs start with "cap:".
Calendar Policy - A CAP operational restriction on the access or Calendar Policy - A CAP operational restriction on the access or
manipulation of a calendar. These may be outside of the scope of manipulation of a calendar. These may be outside of the scope of
the CAP protocol. An example of an implementation or site policy the CAP protocol. An example of an implementation or site policy
is, "events MUST BE scheduled in unit intervals of one hour". is, "events MUST BE scheduled in unit intervals of one hour".
Calendar Property - An attribute of a calendar ("VAGENDA"). The Calendar Property - An attribute of a calendar ("VAGENDA"). The
attribute applies to the calendar, as a whole. For example, the attribute applies to the calendar, as a whole. For example, the
"CALSCALE" property specifies the calendar scale (e.g., the "CALSCALE" property specifies the calendar scale (e.g., the
"GREGORIAN" value) for the all entries within the calendar. "GREGORIAN" value) for the all entries within the calendar.
Calendar Store (CS) - The data and service model definition for a Calendar Store (CS) - The data and service model definition for a
Calendar Store as defined in this memo. This memo does not Calendar Store as defined in this memo. This memo does not specify
specify how the CS is implemented. how the CS is implemented.
Calendar Server - An implementation of a Calendar Store (CS) that Calendar Server - An implementation of a Calendar Store (CS) that
manages one or more calendars. manages one or more calendars.
Calendar Store Identifier (CSID) - The globally unique identifier Calendar Store Identifier (CSID) - The globally unique identifier
for an individual CS. A CSID consists of the host and port for an individual CS. A CSID consists of the host and port
portions of a "Common Internet Scheme Syntax" part of a URL, as portions of a "Common Internet Scheme Syntax" part of a URL, as
defined by [URL]. The CSID excludes any reference to a specific defined by [URL]. The CSID excludes any reference to a specific
calendar. (Section 8.9) calendar. (Section 8.9)
skipping to change at page 11, line 4 skipping to change at page 10, line 6
of a "VALARM" component. of a "VALARM" component.
Delegate - A CU (sometimes called the delegatee) who has been Delegate - A CU (sometimes called the delegatee) who has been
assigned participation in a scheduled component (e.g., VEVENT) by assigned participation in a scheduled component (e.g., VEVENT) by
one of the attendees in the scheduled component (sometimes called one of the attendees in the scheduled component (sometimes called
the delegator). An example of a delegate is a team member told to the delegator). An example of a delegate is a team member told to
go to a particular meeting in place of another Attendee who is go to a particular meeting in place of another Attendee who is
unable to attend. unable to attend.
Designate - A CU who is authorized to act on behalf of another CU. Designate - A CU who is authorized to act on behalf of another CU.
An example of a designate is an assistant. An example of a designate is an assistant.
Experimental - The CUA and CS may implement experimental extensions Experimental - The CUA and CS may implement experimental extensions
to the protocol. They also might have experimental components, to the protocol. They also might have experimental components,
properties, and parameters. These extensions MUST start with "x-" properties, and parameters. These extensions MUST start with "x-"
(or "X-") and should include a vendor prefix (such as "x-myvendor- (or "X-") and should include a vendor prefix (such as
"). There is no guarantee that these experimental extensions will "x-myvendor-"). There is no guarantee that these experimental
interoperate with other implementations. There is no guarantee extensions will interoperate with other implementations. There is
that they will not interact in unpredictable ways with other no guarantee that they will not interact in unpredictable ways
vendor experimental extensions. There is no guarantee that the with other vendor experimental extensions. There is no guarantee
same specific experimental extension is not used my multiple that the same specific experimental extension is not used my
vendors in incompatible ways. Implementations should limit multiple vendors in incompatible ways. Implementations should
sending those extensions to other implementations. limit sending those extensions to other implementations.
Object - A generic name for any component, property, parameter, or Object - A generic name for any component, property, parameter, or
value type to be used in iCalendar. value type to be used in iCalendar.
Overlapped Booking - A policy which indicates whether or not Overlapped Booking - A policy which indicates whether or not
components with a "TRANSP" property not set to "TRANSPARENT- components with a "TRANSP" property not set to
NOCONFLICT" or "OPAQUE-NOCONFLICT" value can overlap one another. "TRANSPARENT-NOCONFLICT" or "OPAQUE-NOCONFLICT" value can overlap
When the policy is applied to a calendar it indicates whether or one another. When the policy is applied to a calendar it indicates
not the time span of any component (VEVENT, VTODO, ...) in the whether or not the time span of any component (VEVENT, VTODO, ...)
calendar can overlap the time span of any other component in the in the calendar can overlap the time span of any other component
same calendar. When applied to an individual object, it indicates in the same calendar. When applied to an individual object, it
whether or not any other component's time span can overlap that indicates whether or not any other component's time span can
individual component. If the CS does not allow overlapped overlap that individual component. If the CS does not allow
booking, then the CS is unwilling to allow any overlapped bookings overlapped booking, then the CS is unwilling to allow any
within any calendar in the CS. overlapped bookings within any calendar or entry in the CS.
Owner - One or more CUs or UGs that are listed in the "OWNER" Owner - One or more CUs or UGs that are listed in the "OWNER"
property in a calendar. There can be more than one owner. The " property in a calendar. There can be more than one owner. The "
Qualified Calendar Identifier (Qualified CalID) - A CalID in which Qualified Calendar Identifier (Qualified CALID) - A CALID in which
both the scheme and csid of the CAP URI are present. both the scheme and CSID of the CAP URI are present.
Realm - A collection of calendar user accounts, identified by a Realm - A collection of calendar user accounts, identified by a
string. The name of the Realm is only used in UPNs. In order to string. The name of the Realm is only used in UPNs. In order to
avoid namespace conflict, the Realm SHOULD be postfixed with an avoid namespace conflict, the Realm SHOULD be postfixed with an
appropriate DNS domain name. (e.g., the foobar Realm could be appropriate DNS domain name. (e.g., the foobar Realm could be
called foobar.example.com). called foobar.example.com).
Relative Calendar Identifier (Relative CalID) - An identifier for an Relative Calendar Identifier (Relative CALID) - An identifier for an
individual calendar in a calendar store. It MUST BE unique within individual calendar in a calendar store. It MUST BE unique within
a calendar store. A Relative CalID consists of the "URL path" of a calendar store. A Relative CALID consists of the "URL path" of
the "Common Internet Scheme Syntax" portion of a URL, as defined the "Common Internet Scheme Syntax" portion of a URL, as defined
by [URI] and [URLGUIDE]. by [URI] and [URLGUIDE].
Session Identity - A UPN associated with a CAP session. A session Session Identity - A UPN associated with a CAP session. A session
gains an identity after successful authentication. The identity gains an identity after successful authentication. The identity is
is used in combination with VCAR to determine access to data in used in combination with VCAR to determine access to data in the
the CS. CS.
User Group (UG) - A collection of Calendar Users and/or User Groups. User Group (UG) - A collection of Calendar Users and/or User Groups.
These groups are expanded by the CS and may reside either locally These groups are expanded by the CS and may reside either locally
or in an external database or directory. The group membership may or in an external database or directory. The group membership may
be fixed or dynamic over time. be fixed or dynamic over time.
Username - A name which denotes a Calendar User within a Realm. Username - A name which denotes a Calendar User within a Realm. This
This is part of a UPN. is part of a UPN.
User Principal Name (UPN) - A unique identifier that denotes a CU or User Principal Name (UPN) - A unique identifier that denotes a CU or
a group of CU. (Section 6.1.2) a group of CU. (Section 6.1.2)
2. Additions to iCalendar 2. Additions to iCalendar
Several new components, properties, parameters, and value types are Several new components, properties, parameters, and value types are
added in CAP. This section summarizes those new objects. added in CAP. This section summarizes those new objects.
This memo extends the properties that can go into 'calprops' as This memo extends the properties that can go into 'calprops' as
defined in [iCAL] section 4.6 page 51 to allow [iTIP] objects defined in [iCAL] section 4.6 page 51 to allow [iTIP] objects
transmitted between a CAP aware CUA and the CS to contain the transmitted between a CAP aware CUA and the CS to contain the
"TARGET" and "CMD" properties. This memo does not address how a CUA "TARGET" and "CMD" properties. This memo also adds to the [iCAL] ABNF
transmits [iTIP] or [iMIP] objects to non CAP programs. to allow IANA and experimental extensions. This memo does not address
how a CUA transmits [iTIP] or [iMIP] objects to non CAP programs.
calprops = 2*( calprops = 2*(
; 'prodid' and 'version' are both REQUIRED, ; 'prodid' and 'version' are both REQUIRED,
; but MUST NOT occur more than once. ; but MUST NOT occur more than once.
; ;
prodid /version / prodid /version /
; These are optional, but MUST NOT occur ; These are optional, but MUST NOT occur
; more than once. ; more than once.
; ;
calscale / calscale /
method / method /
cmd / cmd /
; These are optional, and may occur more ; Target is optional, and may occur more
; than once. ; than once.
; ;
target / other-props ) target / other-props )
other-props = *(x-prop) *(iana-prop) *(x-prop) other-props = *(x-prop) *(iana-prop) *(other-props)
iana-prop = ; Any property registered by IANA directly or iana-prop = ; Any property registered by IANA directly or
; included in an RFC that may be applied to ; included in an RFC that may be applied to
; the component and within the rules published. ; the component and within the rules published.
x-prop = ; As defined in [iCAL] x-prop = ; As defined in [iCAL]
Another change is that the 'component' part of the 'icalbody' ABNF as Another change is that the 'component' part of the 'icalbody' ABNF as
described in [iCAL] section 4.6 is optional when sending a command as described in [iCAL] section 4.6 is optional when sending a command as
shown in the following updated ABNF: shown in the following updated ABNF:
skipping to change at page 14, line 39 skipping to change at page 13, line 35
; Where DIGIT is defined in [iCAL] ; Where DIGIT is defined in [iCAL]
; ;
posint0 = 1*DIGIT posint0 = 1*DIGIT
posint1 = posintfirst 1*DIGIT posint1 = posintfirst 1*DIGIT
; A number starting with 1 through 9. ; A number starting with 1 through 9.
; ;
posintfirst = %x31-39 posintfirst = %x31-39
other-params = *(";" xparam) *(";" iana-params) *(";" xparam) other-params = *(";" xparam) *(";" iana-params) *(";" other-param)
iana-params = ; Any parameter registered by IANA directly or iana-params = ; Any parameter registered by IANA directly or
; included in an RFC that may be applied to ; included in an RFC that may be applied to
; the property and within the rules published. ; the property and within the rules published.
xparam ; As defined in [iCAL]
The CUA adds a "SEQUENCE" property to each "VALARM" component as it The CUA adds a "SEQUENCE" property to each "VALARM" component as it
books the component. This property along with the "LOCAL" and books the component. This property along with the "LOCAL" and
"ENABLE" parameters allow the CUA to uniquely identify any VALARM in "ENABLE" parameters allow the CUA to uniquely identify any VALARM in
any component. The CUA should remove those before forwarding to non any component. The CUA should remove those before forwarding to non
CAP aware CUAs (including [iMIP] CUAs). CAP aware CUAs.
In addition, if a CUA wished to ignore a "TRIGGER" property in a In addition, if a CUA wished to ignore a "TRIGGER" property in a
"VALARM" component that was supplied to it by the "Organizer", the "VALARM" component that was supplied to it by the "Organizer", the
CUA needs a common way to tag that trigger as disabled. So for the CUA needs a common way to tag that trigger as disabled. So the
protocol between a CUA and a CS, the following is a modification to following is a modification to [iCAL] section 4.8.6.3 page 127:
[iCAL] section 4.8.6.3 page 127:
trigger = "TRIGGER" 1*(";" enable-param) (trigrel / trigabs) trigger = "TRIGGER" 1*(";" enable-param) (trigrel / trigabs)
Section 7.2 and Section 7.5. Section 7.2 and Section 7.5.
These additions will be transmitted between a CS and a CAP aware CUA.
So the "VERSION" value will remain at "2.0" as no existing [iTIP] or
[iMIP] implementation will be effected.
2.1 New Value Types (summary) 2.1 New Value Types (summary)
UPN The UPN value type is text value type restricted to only UPN UPN The UPN value type is text value type restricted to only UPN
values. (Section 6.1.2) values. (Section 6.1.2)
UPN-FILTER Like the UPN value type, but also includes filter rules UPN-FILTER Like the UPN value type, but also includes filter rules
that allow wildcards. (Section 6.1.3) that allow wildcards. (Section 6.1.3)
CALQUERY The "CAL-QUERY" value type is a query syntax that is used by CALQUERY The "CAL-QUERY" value type is a query syntax that is used by
the CUA to specify the rules that apply to a CAP command. the CUA to specify the rules that apply to a CAP command. (Section
(Section 6.1.1) 6.1.1)
2.1.1 New Parameters (summary) 2.1.1 New Parameters (summary)
ACTION - The "ACTION" parameter informs the endpoint if it should ACTION - The "ACTION" parameter informs the endpoint if it should
abort or ask to continue on timeout. (Section 7.1). abort or ask to continue on timeout. (Section 7.1).
ENABLE - The "ENABLE" parameter in CAP is used to tag a "TRIGGER" ENABLE - The "ENABLE" parameter in CAP is used to tag a property in
property in a component as disabled or enabled. (Section 7.2). a component as disabled or enabled. (Section 7.2).
ID - The "ID" parameter specifies a unique identifier to be used for ID - The "ID" parameter specifies a unique identifier to be used for
any outstanding commands. any outstanding commands.
LATENCY - The "LATENCY" parameter supplies the timeout value for LATENCY - The "LATENCY" parameter supplies the timeout value for
command completion to the other endpoint. (Section 7.4). command completion to the other endpoint. (Section 7.4).
LOCAL - The "LOCAL" parameter in CAP is used to tag a "SEQUENCE" LOCAL - The "LOCAL" parameter in CAP is used to tag a property in a
property in a "VALARM" component to signify that a VALARM is local component to signify that the component is local or to be
or to be distributed. (Section 7.5). distributed. (Section 7.5).
LOCALIZE - The "LOCALIZE" parameter specifies the locale to be used LOCALIZE - The "LOCALIZE" parameter specifies the locale to be used
in error and warning messages. in error and warning messages.
OPTIONS - The "OPTIONS" parameter passes optional information for OPTIONS - The "OPTIONS" parameter passes optional information for
the command being sent. the command being sent.
SEQUENCE - When the "SEQUENCE" parameter is used in a "VALARM" SEQUENCE - When the "SEQUENCE" parameter is used in a "VALARM"
component it uniquely identifies the instances of the "VALARM" component it uniquely identifies the instances of the "VALARM"
within a component. within that component.
2.1.2 New Properties (summary) 2.1.2 New Properties (summary)
ALLOW-CONFLICT - Some entries in a calendar might not be valid if ALLOW-CONFLICT - Some entries in a calendar might not be valid if
other entries were allowed to overlap the same time span. other entries were allowed to overlap the same time span. (Section
(Section 8.1) 8.1)
ATT-COUNTER - When storing a "METHOD" property with the "COUNTER" ATT-COUNTER - When storing a "METHOD" property with the "COUNTER"
method, there needs to be a way to remember who sent the COUNTER. method, there needs to be a way to remember the "ATTENDEE" value
(Section 8.2) that sent the COUNTER. (Section 8.2)
CAP-VERSIN - The version of CAP the implementation supports. CAP-VERSION - The version of CAP the implementation supports.
(Section 8.5) (Section 8.5)
CAR-LEVEL - The level of calendar access level supported. (Section CAR-LEVEL - The level of calendar access level supported. (Section
8.7) 8.7)
COMPONENTS - The list of components supported. (Section 8.8) COMPONENTS - The list of components supported. (Section 8.8)
CSID - The Calendar Store IDentifier (CSID) uniquely identifies a CSID - The Calendar Store IDentifier (CSID) uniquely identifies a
CAP server. (Section 8.9) CAP server. (Section 8.9)
skipping to change at page 17, line 4 skipping to change at page 15, line 46
CARID - Access rights can be saved and fetched by unique ID - the CARID - Access rights can be saved and fetched by unique ID - the
"CARID" property. (Section 8.6) "CARID" property. (Section 8.6)
CMD - The CAP commands, as well as replies are transmitted using the CMD - The CAP commands, as well as replies are transmitted using the
"CMD" property. (Section 10.1) "CMD" property. (Section 10.1)
DECREED - Some access rights are not changeable by the CUA. When DECREED - Some access rights are not changeable by the CUA. When
that is the case, the "DECREED" property value in the "VCAR" that is the case, the "DECREED" property value in the "VCAR"
component will be TRUE. (Section 8.10) component will be TRUE. (Section 8.10)
DEFAULT-CHARSET - The list of charsets supported by the CS. The
first entry MUST BE the default for the CS. (Section 8.11)
DEFAULT-CHARSET - The list of charsets supported by the CS. The
first entry is the default for the CS. (Section 8.11)
DEFAULT-LOCALE - The list of locales supported by the CS. The first DEFAULT-LOCALE - The list of locales supported by the CS. The first
entry in the list is the default locale. (Section 8.12) entry in the list is the default locale. (Section 8.12)
DEFAULT-TZID - This is the list of known timezones supported. The DEFAULT-TZID - This is the list of known timezones supported. The
first entry is the default. (Section 8.13) first entry is the default. (Section 8.13)
DEFAULT-VCARS - A list of the "CARID" properties that will be used DEFAULT-VCARS - A list of the "CARID" properties that will be used
to create new calendars. (Section 8.14) to create new calendars. (Section 8.14)
DENY - The UPNs listed in the "DENY" property of a "VCAR" component DENY - The UPNs listed in the "DENY" property of a "VCAR" component
will denied access as described in the "VRIGHT" component. will denied access as described in the "VRIGHT" component.
(Section 8.15) (Section 8.15)
EXPAND - This property tells the CS if the query reply should expand EXPAND - This property tells the CS if the query reply should expand
components into multiple instances. The default is FALSE. components into multiple instances. The default is FALSE and is
(Section 8.16) ignored for CSs that can not expand recurrence rules. (Section
8.16)
GRANT - The UPNs listed in the "GRANT" property of a "VCAR" GRANT - The UPNs listed in the "GRANT" property of a "VCAR"
component will allowed access as described in the "VRIGHT" component will allowed access as described in the "VRIGHT"
component. (Section 8.17) component. (Section 8.17)
ITIP-VERSION - The version of [iTIP] supported. (Section 8.18) ITIP-VERSION - The version of [iTIP] supported. (Section 8.18)
MAXDATE - The maximum date supported by the CS. (Section 8.20) MAXDATE - The maximum date supported by the CS. (Section 8.20)
MAX-COMP-SIZE - The largest component size allowed in the MAX-COMP-SIZE - The largest component size allowed in the
implementation including attachments. (Section 8.19) implementation including attachments in octets. (Section 8.19)
MINDATE - The minimum date supported by the CS. (Section 8.21) MINDATE - The minimum date supported by the CS. (Section 8.21)
MULTIPART - Passed in the capability messages to indicate which MIME MULTIPART - Passed in the capability messages to indicate which MIME
multipart types the sender supports. (Section 8.22) multipart types the sender supports. (Section 8.22)
NAME - The "NAME" property is used to add locale specific NAME - The "NAME" property is used to add locale specific
descriptions into components. (Section 8.23) descriptions into components. (Section 8.23)
OWNER - Each calendar has at least one "OWNER" property. (xref OWNER - Each calendar has at least one "OWNER" property. (xref
skipping to change at page 19, line 15 skipping to change at page 18, line 17
properties that are unique to the store level. (Section 9.2) properties that are unique to the store level. (Section 9.2)
VCAR - Calendar Access Rights are specified and encapsulated in the VCAR - Calendar Access Rights are specified and encapsulated in the
new iCalendar "VCAR" component. The "VCAR" component holds some new iCalendar "VCAR" component. The "VCAR" component holds some
new properties and at least one "VRIGHT" component. (Section 9.3) new properties and at least one "VRIGHT" component. (Section 9.3)
VRIGHT - This component encapsulates a set of instructions to the CS VRIGHT - This component encapsulates a set of instructions to the CS
that define the rights or restrictions needed. (Section 9.4) that define the rights or restrictions needed. (Section 9.4)
VREPLY - This component encapsulates a set of data that can consist VREPLY - This component encapsulates a set of data that can consist
of an arbitrary amounts of properties and components. Its of an arbitrary amounts of properties and components. Its contents
contents is dependent on the command that was issued. (Section is dependent on the command that was issued. (Section 9.5)
9.5)
VQUERY - The search operation makes use of a new component, called VQUERY - The search operation makes use of a new component, called
"VQUERY" and a new value type "CAL-QUERY" (Section 6.1.1). The "VQUERY" and a new value type "CAL-QUERY" (Section 6.1.1). The
"VQUERY" component is used to fetch objects from the CS. (Section "VQUERY" component is used to fetch objects from the CS. (Section
9.6) 9.6)
2.2 Relationship of RFC-2446 (ITIP) and CAP 2.2 Relationship of RFC-2446 (ITIP) and CAP
[iTIP] describes scheduling methods which result in indirect [iTIP] describes scheduling methods which result in indirect
manipulation of components. In CAP, the "CREATE" command is used to manipulation of components. In CAP, the "CREATE" command is used to
deposit entities into the store. Other CAP commands such as deposit entities into the store. Other CAP commands such as "DELETE",
"DELETE", "MODIFY" and "MOVE" command values provide direct "MODIFY" and "MOVE" command values provide direct manipulation of
manipulation of components. In the CAP calendar store model, components. In the CAP calendar store model, scheduling messages are
scheduling messages are conceptually kept separate from other conceptually kept separate from other components by their state.
components by their state.
All scheduling operations and are as define in [iTIP]. This memo All scheduling operations and are as define in [iTIP]. This memo
makes no changes to any of the workflow described in [iTIP]. In this makes no changes to any of the methods or procedures described in
memo referring to the presence of the "METHOD" property in an object [iTIP]. In this memo referring to the presence of the "METHOD"
is the same as saying an [iTIP] object. property in an object is the same as saying an [iTIP] object.
A CUA may create a "BOOKED" state object by depositing an iCalendar A CUA may create a "BOOKED" state object by depositing an iCalendar
object into the store. This is done by depositing an object that object into the store. This is done by depositing an object that does
does not have a "METHOD" property. The CS then knows to set the not have a "METHOD" property. The CS then knows to set the state of
state of the object to the "BOOKED" state. If the object has a the object to the "BOOKED" state. If the object has a "METHOD"
"METHOD" property then the object is stored in the "UNPROCESSED" property then the object is stored in the "UNPROCESSED" state.
state.
If existing "UNPROCESSED" state objects exist in the CS for the same If existing "UNPROCESSED" state objects exist in the CS for the same
UID then a CUA may wish to consolidate the objects in to one "BOOKED" UID then a CUA may wish to consolidate the objects in to one "BOOKED"
state object. The CUA would fetch the "UNPROCESSED" state objects state object. The CUA would fetch the "UNPROCESSED" state objects for
for that UID and process them in the CUA as described in [iTIP]. that UID and process them in the CUA as described in [iTIP]. Then if
Then if the CUA wished to book the UID, the CUA would issue a the CUA wished to book the UID, the CUA would issue a "CREATE"
"CREATE" command to create the new "BOOKED" state object in the CS, command to create the new "BOOKED" state object in the CS, followed
followed by a "DELETE" command to remove any related old [iTIP] by a "DELETE" command to remove any related old [iTIP] objects from
objects from the CS. And it might also involve having the CUA send the CS. And it might also involve having the CUA send some [iMIP]
some [iMIP] objects or contacting other CS's and performing CAP objects or contacting other CSs and performing CAP operations on
operations on those CSs. those CSs.
The CUA could also decide not to book the object. In which case the The CUA could also decide not to book the object. In which case the
"UNPROCESSED" state objects could be removed from the CS or the CUA "UNPROCESSED" state objects could be removed from the CS or the CUA
could set those object to the marked for delete state. The CUA could could set those object to the marked for delete state. The CUA could
also ignore objects for later processing. also ignore objects for later processing.
The marked for delete state is used to keep the object around so that The marked for delete state is used to keep the object around so that
the CUA can process duplicate requests automatically. If a duplicate the CUA can process duplicate requests automatically. If a duplicate
[iTIP] object is deposited into the CS and there exists identical [iTIP] object is deposited into the CS and there exists identical
marked for delete objects, then a CUA acting on behalf of the "OWNER" marked for delete objects, then a CUA acting on behalf of the "OWNER"
skipping to change at page 20, line 36 skipping to change at page 19, line 35
mark that object as marked for delete. Their CUA might be mark that object as marked for delete. Their CUA might be
configurable to automatically drop any updates for that object configurable to automatically drop any updates for that object
knowing the CU has already declined. knowing the CU has already declined.
When synchronizing with multiple CUAs, the marked for delete state When synchronizing with multiple CUAs, the marked for delete state
could be used to inform the synchronization process that an object is could be used to inform the synchronization process that an object is
to be deleted. How synchronization is done is not specified in this to be deleted. How synchronization is done is not specified in this
memo. memo.
Several "UNPROCESSED" state entries can be in the CS for the same Several "UNPROCESSED" state entries can be in the CS for the same
UID. However once consolidated, then only one object exists in the UID. However once consolidated, then only one object exists in the CS
CS and that is the booked object. The others MUST BE removed, or and that is the booked object. The others MUST BE removed, or have
have their state changed to "DELETED". their state changed to "DELETED".
There MUST NOT BE more than one "BOOKED" state object in a calendar There MUST NOT BE more than one "BOOKED" state object in a calendar
for the same "UID". The "ADD" method value may create multiple for the same "UID". The "ADD" method value may create multiple
objects all in the "BOOKED" state for the same UID, however for the objects all in the "BOOKED" state for the same UID, however for the
purpose of this memo, they are the same object that simply have purpose of this memo, they are the same object that simply have
multiple "VCALENDAR" components. multiple "VCALENDAR" components.
For example, if you were on vacation, you could have receive a For example, if you were on vacation, you could have receive a
"REQUEST" method to attend a meeting and several updates to that "REQUEST" method to attend a meeting and several updates to that
meeting. Your CUA would have to issue "SEARCH" commands to find them meeting. Your CUA would have to issue "SEARCH" commands to find them
skipping to change at page 23, line 49 skipping to change at page 22, line 41
3.3 Protocol Model 3.3 Protocol Model
CAP uses beep as the transport and authentication protocol. CAP uses beep as the transport and authentication protocol.
The initial charset MUST BE UTF-8 for the session in an unknown The initial charset MUST BE UTF-8 for the session in an unknown
locale. If the CS supplied the [BEEP] 'localize' attribute in the locale. If the CS supplied the [BEEP] 'localize' attribute in the
[BEEP] 'greeting' then the CUA may tell the CS to switch locales for [BEEP] 'greeting' then the CUA may tell the CS to switch locales for
the session by issuing the "SET-LOCALE" CAP command and supplying one the session by issuing the "SET-LOCALE" CAP command and supplying one
of the locales supplied by the [BEEP] 'localize' attribute. If of the locales supplied by the [BEEP] 'localize' attribute. If
supplied the first locale supplied in the [BEEP] 'localize' attribute supplied the first locale supplied in the [BEEP] 'localize' attribute
MUST BE the default locale of the CS. The locale is switched only is the default locale of the CS. The locale is switched only after a
after a successful reply. successful reply.
The "DEFAULT-CHARSET" property of the CS contains the list of The "DEFAULT-CHARSET" property of the CS contains the list of
charsets supported by the CS with the first value being the default charsets supported by the CS with the first value being the default
for new calendars. If the CUA wishes to switch to one of those for new calendars. If the CUA wishes to switch to one of those
charsets for the session, the CUA issues the "SET-LOCALE" command. charsets for the session, the CUA issues the "SET-LOCALE" command.
The CUA would have to first perform a "GET-CAPABILITY" command on the The CUA would have to first perform a "GET-CAPABILITY" command on the
CS to get the list of charsets supported by the CS. The charset is CS to get the list of charsets supported by the CS. The charset is
switched only after a successful reply. switched only after a successful reply.
The CUA may switch locales and charsets as needed. There is no The CUA may switch locales and charsets as needed. There is no
skipping to change at page 25, line 4 skipping to change at page 23, line 42
NOTE: The following examples will not include the [BEEP] header and NOTE: The following examples will not include the [BEEP] header and
footer information. Only the iCalendar objects that are sent between footer information. Only the iCalendar objects that are sent between
the CUA and CS will be shown as the [BEEP] payload boundaries are the CUA and CS will be shown as the [BEEP] payload boundaries are
independent of CAP. independent of CAP.
The commands listed below are used to manipulate or access the data The commands listed below are used to manipulate or access the data
on the calendar store: on the calendar store:
ABORT - Sent to halt the processing of some of the commands. ABORT - Sent to halt the processing of some of the commands.
(Section 10.1.2) (Section 10.1.2)
CONTINUE - Sent to continue processing a command that has had its CONTINUE - Sent to continue processing a command that has had its
specified timeout time reached. (Section 10.1.3) specified timeout time reached. (Section 10.1.3)
CREATE - Create a new object on the CS. This can be implied for CREATE - Create a new object on the CS. This can be implied for
[iTIP] objects. Initiated by the CUA only. (Section 10.1.4) [iTIP] objects. Initiated by the CUA only. (Section 10.1.4)
SET-LOCALE - Tell the CS to use any named locale and charset SET-LOCALE - Tell the CS to use any named locale and charset
supplied. Initiated by the CUA only. (Section 10.9) supplied. Initiated by the CUA only. (Section 10.9)
DELETE - Delete objects from the CS. Initiated by the CUA only. DELETE - Delete objects from the CS. Initiated by the CUA only. Can
Can also be used to mark an object for deletion. (Section 10.1.5) also be used to mark an object for deletion. (Section 10.1.5)
GENERATE-UID - Generate one or more unique ids. Initiated by the GENERATE-UID - Generate one or more unique ids. Initiated by the CUA
CUA only. (Section 10.2) only. (Section 10.2)
GET-CAPABILITY - Query the capabilities the other end point of the GET-CAPABILITY - Query the capabilities the other end point of the
session. (Section 10.3) session. (Section 10.3)
IDENTIFY - Set a new identity for the session. Initiated by the CUA IDENTIFY - Set a new identity for the session. Initiated by the CUA
only. (Section 10.4) only. (Section 10.4)
MODIFY - Modify components. Initiated by the CUA only. (Section MODIFY - Modify components. Initiated by the CUA only. (Section
10.5) 10.5)
MOVE - Move components to another container. Initiated by the CUA MOVE - Move components to another container. Initiated by the CUA
only. (Section 10.6) only. (Section 10.6)
REPLY - When replying to a command, the "CMD" value will be set to REPLY - When replying to a command, the "CMD" value will be set to
"REPLY" so that it will not be confused with a new command. "REPLY" so that it will not be confused with a new command.
(Section 10.7) (Section 10.7)
SEARCH - Search for components. Initiated by the CUA only. SEARCH - Search for components. Initiated by the CUA only. (Section
(Section 10.8) 10.8)
TIMEOUT - Sent when a specified amount of time has lapsed and a TIMEOUT - Sent when a specified amount of time has lapsed and a
command has not finished. (Section 10.10) command has not finished. (Section 10.10)
4. Security Model 4. Security Model
The [BEEP] transport performs all session authentication. The [BEEP] transport performs all session authentication.
4.1 Calendar User and UPNs 4.1 Calendar User and UPNs
A CU is an entity that can be authenticated. It is represented in A CU is an entity that can be authenticated. It is represented in CAP
CAP as a UPN, which is a key part of access rights. The UPN as a UPN, which is a key part of access rights. The UPN
representation is independent of the authentication mechanism used representation is independent of the authentication mechanism used
during a particular CUA/CS interaction. This is because UPNs are during a particular CUA/CS interaction. This is because UPNs are used
used within VCARs. If the UPN were dependent on the authentication within VCARs. If the UPN were dependent on the authentication
mechanism, a VCAR could not be consistently evaluated. A CU may use mechanism, a VCAR could not be consistently evaluated. A CU may use
one mechanism while using one CUA but the same CU may use a different one mechanism while using one CUA but the same CU may use a different
authentication mechanism when using a different CUA, or while authentication mechanism when using a different CUA, or while
connecting from a different location. connecting from a different location.
The user may also have multiple UPNs for various purposes. The user may also have multiple UPNs for various purposes.
Note that the immutability of the user's UPN may be achieved by using Note that the immutability of the user's UPN may be achieved by using
SASL's authorization identity feature. (The transmitted SASL's authorization identity feature. (The transmitted authorization
authorization identity may be different than the identity in the identity may be different than the identity in the client's
client's authentication credentials.) [SASL, section 3]. This also authentication credentials.) [SASL, section 3]. This also permits a
permits a CU to authenticate using their own credentials, yet request CU to authenticate using their own credentials, yet request the
the access privileges of the identity for which they are proxying access privileges of the identity for which they are proxying SASL.
SASL. Also, the form of authentication identity supplied by a Also, the form of authentication identity supplied by a service like
service like TLS may not correspond to the UPNs used to express a TLS may not correspond to the UPNs used to express a server's access
server's access rights, requiring a server specific mapping to be rights, requiring a server specific mapping to be done. The method by
done. The method by which a server determines a UPN, based on the which a server determines a UPN, based on the authentication
authentication credentials supplied by a client, is implementation credentials supplied by a client, is implementation specific. See
specific. See [BEEP] for authentication details; [BEEP] relies on [BEEP] for authentication details; [BEEP] relies on SASL.
SASL.
4.1.1 UPNs and Certificates 4.1.1 UPNs and Certificates
When using X.509 certificates for purposes of CAP authentication, the When using X.509 certificates for purposes of CAP authentication, the
UPN should appear in the certificate. Unfortunately there is no UPN should appear in the certificate. Unfortunately there is no
single correct guideline for which field should contain the UPN. single correct guideline for which field should contain the UPN.
From RFC-2459, section 4.1.2.6 (Subject): From RFC-2459, section 4.1.2.6 (Subject):
If subject naming information is present only in the subjectAlt- If subject naming information is present only in the
Name extension (e.g., a key bound only to an email address or subjectAlt-Name extension (e.g., a key bound only to an email
URI), then the subject name MUST be an empty sequence and the address or URI), then the subject name MUST be an empty sequence
subjectAltName extension MUST BE critical. and the subjectAltName extension MUST BE critical.
Implementations of this specification MAY use these comparison Implementations of this specification MAY use these comparison
rules to process unfamiliar attribute types (i.e., for name rules to process unfamiliar attribute types (i.e., for name
chaining). This allows implementations to process certificates chaining). This allows implementations to process certificates
with unfamiliar attributes in the subject name. with unfamiliar attributes in the subject name.
In addition, legacy implementations exist where an RFC 822 name is In addition, legacy implementations exist where an RFC 2822 name
embedded in the subject distinguished name as an EmailAddress is embedded in the subject distinguished name as an EmailAddress
attribute. The attribute value for EmailAddress is of type attribute. The attribute value for EmailAddress is of type
IA5String to permit inclusion of the character '@', which is not IA5String to permit inclusion of the character '@', which is not
part of the PrintableString character set. EmailAddress attribute part of the PrintableString character set. EmailAddress attribute
values are not case sensitive (e.g., "fanfeedback@redsox.com" is values are not case sensitive (e.g., "fanfeedback@redsox.com" is
the same as "FANFEEDBACK@REDSOX.COM"). the same as "FANFEEDBACK@REDSOX.COM").
Conforming implementations generating new certificates with Conforming implementations generating new certificates with
electronic mail addresses MUST use the rfc822Name in the subject electronic mail addresses MUST use the rfc822Name in the subject
alternative name field (see sec. 4.2.1.7 of [X509CRL]) to alternative name field (see sec. 4.2.1.7 of [X509CRL]) to describe
describe such identities. Simultaneous inclusion of the such identities. Simultaneous inclusion of the EmailAddress
EmailAddress attribute in the subject distinguished name to attribute in the subject distinguished name to support legacy
support legacy implementations is deprecated but permitted. implementations is deprecated but permitted.
Since no single method of including the UPN in the certificate will Since no single method of including the UPN in the certificate will
work in all cases, CAP implementations MUST support the ability to work in all cases, CAP implementations MUST support the ability to
configure what the mapping will be by the CS administrator. configure what the mapping will be by the CS administrator.
Implementations MAY support multiple mapping definitions, for Implementations MAY support multiple mapping definitions, for
example, the UPN may be found in either the subject alternative name example, the UPN may be found in either the subject alternative name
field, or the UPN may be embedded in the subject distinguished name field, or the UPN may be embedded in the subject distinguished name
as an EmailAddress attribute. as an EmailAddress attribute.
Note: If a CS or CUA is validating data received via [iMIP], if the Note: If a CS or CUA is validating data received via [iMIP], if the
"ORGANIZER" or "ATTENDEE" properties said (e.g.) "ATTENDEE;CN=Joe "ORGANIZER" or "ATTENDEE" properties said (e.g.) "ATTENDEE;CN=Joe
Random User:MAILTO:juser@example.com" then the email address should Random User:MAILTO:juser@example.com" then the email address should
be checked against the UPN. This is so the "ATTENDEE" property be checked against the UPN. This is so the "ATTENDEE" property cannot
cannot be changed to something misleading like "ATTENDEE;CN=Joe be changed to something misleading like "ATTENDEE;CN=Joe Rictus
Rictus User:MAILTO:jrictus@example.com" and have it pass validation. User:MAILTO:jrictus@example.com" and have it pass validation. Note
Note that it is the email addresses that miscompare, the CN that it is the email addresses that miscompare, the CN miscompare is
miscompare is irrelevant. irrelevant.
4.1.2 Anonymous Users and Authentication 4.1.2 Anonymous Users and Authentication
Anonymous access is often desirable. For example an organization may Anonymous access is often desirable. For example an organization may
publish calendar information that does not require any access control publish calendar information that does not require any access control
for viewing or login. Conversely, a user may wish to view for viewing or login. Conversely, a user may wish to view
unrestricted calendar information without revealing their identity. unrestricted calendar information without revealing their identity.
4.1.3 User Groups 4.1.3 User Groups
A User Group is used to represent a collection of CUs or other UGs A User Group is used to represent a collection of CUs or other UGs
that can be referenced in VCARs. A UG is represented in CAP as a that can be referenced in VCARs. A UG is represented in CAP as a UPN.
UPN. The CUA cannot distinguish between a UPN that represents a CU The CUA cannot distinguish between a UPN that represents a CU or a
or a UG. UG.
UGs are expanded as necessary by the CS. The CS MAY expand a UG UGs are expanded as necessary by the CS. The CS MAY expand a UG
(including nested UGs) to obtain a list of unique CUs. Duplicate (including nested UGs) to obtain a list of unique CUs. Duplicate UPNs
UPNs are filtered during expansion. are filtered during expansion.
How the UG expansion is maintained across commands is implementation How the UG expansion is maintained across commands is implementation
specific. A UG may reference a static list of members, or it may specific. A UG may reference a static list of members, or it may
represent a dynamic list. Operations SHOULD recognize changes to UG represent a dynamic list. Operations SHOULD recognize changes to UG
membership. membership.
CAP does not define commands or methods for managing UGs. CAP does not define commands or methods for managing UGs.
4.2 Access Rights 4.2 Access Rights
Access rights are used to grant or deny access to calendars, Access rights are used to grant or deny access to calendars,
components, properties, and parameters in a CS to a CU. CAP defines components, properties, and parameters in a CS to a CU. CAP defines a
a new component type called a Calendar Access Right (VCAR). new component type called a Calendar Access Right (VCAR).
Specifically, a "VCAR" component grants, or denies, UPNs the right to Specifically, a "VCAR" component grants, or denies, UPNs the right to
search and write components, properties, and parameters on calendars search and write components, properties, and parameters on calendars
within a CS. within a CS.
The "VCAR" component model does not put any restriction on the The "VCAR" component model does not put any restriction on the
sequence in which the object and access rights are created. That is, sequence in which the object and access rights are created. That is,
an object associated with a particular "VCAR" component might be an object associated with a particular "VCAR" component might be
created before or after the actual "VCAR" component is defined. In created before or after the actual "VCAR" component is defined. In
addition, the "VCAR" and "VEVENT" components might be created in the addition, the "VCAR" and "VEVENT" components might be created in the
same iCalendar object and passed together in a single object. same iCalendar object and passed together in a single object.
All rights MUST BE denied unless specifically granted. All rights MUST BE denied unless specifically granted.
If two rights specified in "VCAR" components are in conflict, the If two rights specified in "VCAR" components are in conflict, the
right that denies access always takes precedence over the right that right that denies access always takes precedence over the right that
grants access. Any attempt to create a "VCAR" component that grants access. Any attempt to create a "VCAR" component that
conflicts with an immutable "VCAR" components must fail. conflicts with a "VCAR" components with a "DECREED" property set to
the "TRUE" value must fail.
4.2.1 Access Control and NOCONFLICT 4.2.1 Access Control and NOCONFLICT
The "TRANSP" property can take on values "TRANSPARENT-NOCONFLICT" and The "TRANSP" property can take on values "TRANSPARENT-NOCONFLICT" and
"OPAQUE-NOCONFLICT" that prohibit other components from overlapping "OPAQUE-NOCONFLICT" that prohibit other components from overlapping
it. This setting overrides access. The "ALLOW-CONFLICT" CS, it. This setting overrides access. The "ALLOW-CONFLICT" CS, Calendar
Calendar or component setting may also prevent overlap, returning an or component setting may also prevent overlap, returning an error
error code "6.3". code "6.3".
4.2.2 Predefined VCARs 4.2.2 Predefined VCARs
Predefined calendar access CARIDs that MUST BE implemented are: Predefined calendar access CARIDs that MUST BE implemented are:
CARID:READBUSYTIMEINFO - Specifies the "GRANT" and "DENY" rules that CARID:READBUSYTIMEINFO - Specifies the "GRANT" and "DENY" rules that
allow UPNs to search "VFREEBUSY" components. An example allow UPNs to search "VFREEBUSY" components. An example definition
definition for this VCAR is: for this VCAR is:
BEGIN:VCAR BEGIN:VCAR
CARID:READBUSYTIMEINFO CARID:READBUSYTIMEINFO
BEGIN:VRIGHT BEGIN:VRIGHT
GRANT:* GRANT:*
PERMISSION:SEARCH PERMISSION:SEARCH
SCOPE:SELECT * FROM VFREEBUSY SCOPE:SELECT * FROM VFREEBUSY WHERE STATE() = 'BOOKED'
END:VRIGHT END:VRIGHT
END:VCAR END:VCAR
CARID:REQUESTONLY - Specifies the "GRANT" and "DENY" rules to UPNs CARID:REQUESTONLY - Specifies the "GRANT" and "DENY" rules to UPNs
other than the owner of the calendar the ability to write new other than the owner of the calendar the ability to write new
objects with the property "METHOD" property set to the "REQUEST" objects with the property "METHOD" property set to the "REQUEST"
value. This CARID allows the owner to specify which UPNs are value. This CARID allows the owner to specify which UPNs are
allowed to make scheduling requests. An example definition for allowed to make scheduling requests. An example definition for
this VCAR is: this VCAR is:
skipping to change at page 30, line 44 skipping to change at page 30, line 4
that may be configured by the CS administrator. A reply from the CS that may be configured by the CS administrator. A reply from the CS
may dynamically create "VCAR" components that are decreed depending may dynamically create "VCAR" components that are decreed depending
on the implementation. To the CUA any "VCAR" component with the on the implementation. To the CUA any "VCAR" component with the
"DECREED" property set to "TRUE" can not be changed by the currently "DECREED" property set to "TRUE" can not be changed by the currently
authenticated UPN, and depending on the implementation and other authenticated UPN, and depending on the implementation and other
"VCAR" components; might not be able to be changed by any UPN using "VCAR" components; might not be able to be changed by any UPN using
CAP, and never when the CUA gets a "DECREED:TRUE" VCAR. CAP, and never when the CUA gets a "DECREED:TRUE" VCAR.
When a user attempts to modify or override a decreed "VCAR" component When a user attempts to modify or override a decreed "VCAR" component
rules an error will be returned indicating that the user has rules an error will be returned indicating that the user has
insufficient authorization to perform the operation. The reply to insufficient authorization to perform the operation. The reply to the
the CUA MUST BE the same as if a non-decreed VCAR caused the failure. CUA MUST BE the same as if a non-decreed VCAR caused the failure.
The CAP protocol does not define the semantics used to initially The CAP protocol does not define the semantics used to initially
create a decreed VCAR. This administrative task is outside the scope create a decreed VCAR. This administrative task is outside the scope
of the CAP protocol. of the CAP protocol.
For example; an implementation or a CS administrator may wish to For example; an implementation or a CS administrator may wish to
define a VCAR that will always allow the calendar owners to have full define a VCAR that will always allow the calendar owners to have full
access to their own calendars. access to their own calendars.
Decreed "VCAR" components MUST BE readable by the calendar owner in Decreed "VCAR" components MUST BE readable by the calendar owner in
skipping to change at page 31, line 32 skipping to change at page 30, line 34
The CUA may change the identity of a CAP session by calling the The CUA may change the identity of a CAP session by calling the
"IDENTIFY" command. The CS only permits the operation if the "IDENTIFY" command. The CS only permits the operation if the
session's authentication credentials are good for the requested session's authentication credentials are good for the requested
identity. The method of checking this permission is implementation identity. The method of checking this permission is implementation
dependent, but may be thought of as a mapping from authentication dependent, but may be thought of as a mapping from authentication
credentials to UPNs. The "IDENTIFY" command allows a single set of credentials to UPNs. The "IDENTIFY" command allows a single set of
authentication credentials to choose from multiple identities, and authentication credentials to choose from multiple identities, and
allows multiple sets of authentication credentials to assume the same allows multiple sets of authentication credentials to assume the same
identity. identity.
For anonymous access the identity of the session is "@". A UPN with For anonymous access the identity of the session is "@". A UPN with a
a null Username and null Realm is anonymous. A UPN with a null null Username and null Realm is anonymous. A UPN with a null
Username, but non-null Realm, such as "@foo.com" may be used to mean Username, but non-null Realm, such as "@foo.com" may be used to mean
any identity from that Realm, which is useful to grant access rights any identity from that Realm, which is useful to grant access rights
to all users in a given Realm. A UPN with a non-null Username and to all users in a given Realm. A UPN with a non-null Username and
null Realm, such as "bob@" could be a security risk and MUST NOT be null Realm, such as "bob@" could be a security risk and MUST NOT be
used. used.
Since the UPN includes Realm information it may be used to govern As the UPN includes Realm information it may be used to govern
calendar store access rights across Realms. However, governing calendar store access rights across Realms. However, governing access
access rights across Realms is only useful if login access is rights across Realms is only useful if login access is available.
available. This could be done through a trusted server relationship This could be done through a trusted server relationship or a
or a temporary account. Note that trusted server relationships are temporary account. Note that trusted server relationships are outside
outside the scope of [CAP]. the scope of [CAP].
The "IDENTIFY" command also provides for a weak group implementation. The "IDENTIFY" command also provides for a weak group implementation.
By allowing multiple sets of authentication credentials belonging to By allowing multiple sets of authentication credentials belonging to
different users to identify as the same UPN, that UPN essentially different users to identify as the same UPN, that UPN essentially
identifies a group of people, and may be used for group calendar identifies a group of people, and may be used for group calendar
ownership, or the granting of access rights to a group. ownership, or the granting of access rights to a group.
5. CAP URL and Calendar Address 5. CAP URL and Calendar Address
The CAP URL scheme is used to designate calendar stores and calendars The CAP URL scheme is used to designate calendar stores and calendars
skipping to change at page 34, line 31 skipping to change at page 34, line 31
Value Type Purpose: This value type is used to identify values and Value Type Purpose: This value type is used to identify values and
contains query statements targeted at locating those values. contains query statements targeted at locating those values.
This is based on [SQL92] and [SQLCOM]. This is based on [SQL92] and [SQLCOM].
1. For the purpose of a query, all components should be handled as 1. For the purpose of a query, all components should be handled as
tables, and the properties of those components, should be handled tables, and the properties of those components, should be handled
as columns. as columns.
2. All VAGENDAs and CS's look like tables for the purpose of a 2. All VAGENDAs and CSs look like tables for the purpose of a QUERY.
QUERY. And all of their properties look like columns in those And all of their properties look like columns in those tables.
tables.
3. You CAN NOT do any cross component-type joins. And that means 3. You CAN NOT do any cross component-type joins. And that means you
you can ONLY have one component, OR one "VAGENDA" component OR can ONLY have one component, OR one "VAGENDA" component OR one
one "VCALSTORE" component in the "FROM" clause. "VCALSTORE" component in the "FROM" clause.
4. Everything in the "SELECT" clause and "WHERE" clauses in MUST BE 4. Everything in the "SELECT" clause and "WHERE" clauses in MUST BE
from the same component type, or "VAGENDA" component OR from the same component type, or "VAGENDA" component OR
"VCALSTORE" component in the "FROM" clause. "VCALSTORE" component in the "FROM" clause.
5. When multiple "QUERY" properties are supplied in a single 5. When multiple "QUERY" properties are supplied in a single
"VQUERY" component, the results returned are the same as the "VQUERY" component, the results returned are the same as the
results returned for multiple "VQUERY" components having each a results returned for multiple "VQUERY" components having each a
single "QUERY" property. single "QUERY" property.
skipping to change at page 36, line 40 skipping to change at page 36, line 35
Note: Note:
(a) Selects all instances of <a-property-name> (a) Selects all instances of <a-property-name>
from all "VEVENT" components. from all "VEVENT" components.
(b) and (c) Select all "VALARM" components from all (b) and (c) Select all "VALARM" components from all
"VEVENT" components. (b) would return then in "VEVENT" components. (b) would return then in
BEGIN/END VALARM tags. (c) would return all BEGIN/END VALARM tags. (c) would return all
of the properties without BEGIN/END VALARM tags. of the properties without BEGIN/END VALARM tags.
(d) Selects every property and every component (d) Selects every property and every component
that is in any "VEVENT" component. that is in any "VEVENT" component. With each "VEVENT"
component wrapped in a BEGIN/END VALARM tags.
(e) Selects all properties and all contained (e) Selects all properties and all contained
components in all "VEVENT" components that have a "VALARM" components in all "VEVENT" components that have a "VALARM"
component with a "TRIGGER" property value between component with a "TRIGGER" property value between
the provided dates and times. the provided dates and times. With each "VEVENT"
component wrapped in a BEGIN/END VALARM tags.
NOT VALID: NOT VALID:
(f) SELECT VEVENT.VALARM.TRIGGER FROM VEVENT (f) SELECT VEVENT.VALARM.TRIGGER FROM VEVENT
(g) SELECT DTSTART,UID FROM VEVENT WHERE (g) SELECT DTSTART,UID FROM VEVENT WHERE
VTODO.SUMMERY = "Fix typo in CAP" VTODO.SUMMERY = "Fix typo in CAP"
Note: (f) Is NOT valid because it contains Note: (f) Is NOT valid because it contains
two '.' characters in the "SELECT" clause. two '.' characters in the "SELECT" clause.
(g) Is NOT valid because it mixes VEVENT (g) Is NOT valid because it mixes VEVENT
and VTODO properties in the same VQUERY. and VTODO properties in the same VQUERY.
Formal Definition: The value type is defined by the following Formal Definition: The value type is defined by the following
notation: notation:
cal-query = "SELECT" SP cap-val SP cal-query = "SELECT" SP cap-val SP
skipping to change at page 38, line 7 skipping to change at page 38, line 4
; clause. ; clause.
; ;
; SELECT VALARM FROM VEVENT ... ; SELECT VALARM FROM VEVENT ...
; ;
; OR ; OR
; ;
; A component name ('comp-name') of an existing ; A component name ('comp-name') of an existing
; component contained inside of the 'comp-name' used ; component contained inside of the 'comp-name' used
; in the "FROM" clause followed by a property ; in the "FROM" clause followed by a property
; name ('cap-prop') to be selected from that component. ; name ('cap-prop') to be selected from that component.
; (comp-name "." cap-prop) ; (comp-name "." cap-prop)
; ;
; SELECT VALARM.TRIGGER FROM VEVENT ... ; SELECT VALARM.TRIGGER FROM VEVENT ...
cap-col = comp-name cap-col = comp-name
/ comp-name "." cap-prop / comp-name "." cap-prop
/ cap-prop
comp-name = "VEVENT" / "VTODO" / "VJOURNAL" / "VFREEBUSY" comp-name = "VEVENT" / "VTODO" / "VJOURNAL" / "VFREEBUSY"
/ "VALARM" / "DAYLIGHT" / "STANDARD" / "VAGENDA" / "VALARM" / "DAYLIGHT" / "STANDARD" / "VAGENDA"
/ "VCAR" / "VCALSTORE" / "VQUERY" / "VTIMEZONE" / "VCAR" / "VCALSTORE" / "VQUERY" / "VTIMEZONE"
/ x-comp / iana-comp / "VRIGHT" / x-comp / iana-comp
cap-prop = ; A property that may be in the 'cap-comp' named cap-prop = ; A property that may be in the 'cap-comp' named
; in the "SELECT" clause. ; in the "SELECT" clause.
cap-expr = "(" cap-expr ")" cap-expr = "(" cap-expr ")"
/ cap-term / cap-term
cap-term = cap-expr SP cap-logical SP cap-expr cap-term = cap-expr SP cap-logical SP cap-expr
/ cap-factor / cap-factor
cap-logical= "AND" / "OR" cap-logical= "AND" / "OR"
cap-factor = cap-colval SP cap-oper SP col-value cap-factor = cap-colval SP cap-oper SP col-value
/ cap-colval SP "NOT LIKE" SP col-value
/ cap-colval SP "LIKE" SP col-value / cap-colval SP "LIKE" SP col-value
/ cap-colval SP "NOT LIKE" SP col-value
/ cap-colval SP "IS NULL" / cap-colval SP "IS NULL"
/ cap-colval SP "IS NOT NULL" / cap-colval SP "IS NOT NULL"
/ col-value SP "NOT IN" cap-colval"
/ col-value SP "IN" cap-colval" / col-value SP "IN" cap-colval"
/ col-value SP "NOT IN" cap-colval"
/ "STATE()" "=" ( "BOOKED" / "STATE()" "=" ( "BOOKED"
/ "UNPROCESSED" / "UNPROCESSED"
/ "DELETED" ) / "DELETED"
/ iana-state
/ x-state )
iana-state = ; Any state registered by IANA directly or
; included in an RFC that may be applied to
; the component and within the rules published.
x-state = ; Any experimental state that starts with
; "x-" or "X-".
cap-colval = cap-col / param cap-colval = cap-col / param
param = "PARAM(" cap-col "," cap-param ")" param = "PARAM(" cap-col "," cap-param ")"
cap-param = ; Any parameter that may be contained in the cap-col cap-param = ; Any parameter that may be contained in the cap-col
; in the supplied PARAM() function ; in the supplied PARAM() function
col-value = col-literal col-value = col-literal
/ "SELF()" / "SELF()"
/ "CAL-OWNERS()" / "CAL-OWNERS()"
/ "CAL-OWNERS(" cal-address ")" / "CAL-OWNERS(" cal-address ")"
/ "CURRENT-TARGET()" / "CURRENT-TARGET()"
cal-address = ; A CALID as define by CAP cal-address = ; A CALID as define by CAP
skipping to change at page 39, line 28 skipping to change at page 39, line 35
; ;
; OR ; OR
; ;
; If the literal-data is preceded by the LIKE ; If the literal-data is preceded by the LIKE
; element it may also contain the '%' and '_' ; element it may also contain the '%' and '_'
; wildcard characters. And if the literal data ; wildcard characters. And if the literal data
; that is comparing contains any '%' or '_' ; that is comparing contains any '%' or '_'
; characters, they MUST BE backslash escaped as ; characters, they MUST BE backslash escaped as
; described in the notes below in order for them not ; described in the notes below in order for them not
; to be treated as wildcard characters. ; to be treated as wildcard characters.
;
; And if the literal data contains any characters
; that would have to be backslash escaped if
; a property or parameter value then they must
; be backslash escaped in the literal-data.
; PLUS the quote character (') must be backslash
; escaped. Example:
;
; ... WHERE SUBJECT = 'It\'s time to ski'
;
cap-oper = "=" cap-oper = "="
/ "!=" / "!="
/ "<" / "<"
/ ">" / ">"
/ "<=" / "<="
/ ">=" / ">="
SP = ; A single white space ASCII character SP = ; A single white space ASCII character
; (value in HEX %x20). ; (value in HEX %x20).
x-comp = ; As defined in [iCAL] section 4.6 x-comp = ; As defined in [iCAL] section 4.6
iana-comp = ; As defined in [iCAL] section 4.6 iana-comp = ; As defined in [iCAL] section 4.6
6.1.1.1 [NOT] CAL-OWNERS() 6.1.1.1 [NOT] CAL-OWNERS()
This function returns the list of "OWNER" properties for the named This function returns the list of "OWNER" properties for the named
skipping to change at page 40, line 14 skipping to change at page 40, line 27
list of all of the owners of the calendar that match the provided list of all of the owners of the calendar that match the provided
"TARGET" property value. If the target is a "VCALSTORE", it returns "TARGET" property value. If the target is a "VCALSTORE", it returns
the "CALMASTER" property. the "CALMASTER" property.
If called as 'CAL-OWNERS(cal-address)', then it is the equivalent to If called as 'CAL-OWNERS(cal-address)', then it is the equivalent to
the comma separated list of owners for the named calendar id. If the comma separated list of owners for the named calendar id. If
'cal-address' is a CS, it returns the "CALMASTER" property. 'cal-address' is a CS, it returns the "CALMASTER" property.
If used in the in the "WHERE" clause it then returns true if the If used in the in the "WHERE" clause it then returns true if the
currently authenticated UPN is an owner of the currently selected currently authenticated UPN is an owner of the currently selected
object matched in the provided "TARGET" property. Used in a CAL- object matched in the provided "TARGET" property. Used in a CAL-QUERY
QUERY "WHERE" clause and in the UPN-FILTER. "WHERE" clause and in the UPN-FILTER.
6.1.1.2 CURRENT-TARGET() 6.1.1.2 CURRENT-TARGET()
Is equivalent to the value of the "TARGET" property in the current Is equivalent to the value of the "TARGET" property in the current
command. Used in a CAL-QUERY "WHERE" clause. command. Used in a CAL-QUERY "WHERE" clause.
6.1.1.3 PARAM() 6.1.1.3 PARAM()
Used in a CAL-QUERY. Returns the value of the named parameter from Used in a CAL-QUERY. Returns or tests for the value of the named
the named property. If there are multiple properties in the object, parameter from the named property.
then PARAM() returns a comma separated list of parameter values. If
needed each value can be quoted or contain backslash escaped 6.1.1.3.1 PARAM() in SELECT
contents.
When used in a "SELECT" clause, it returns the entire property and When used in a "SELECT" clause, it returns the entire property and
all of that properties parameters (the result is not limited to the all of that properties parameters (the result is not limited to the
supplied parameter). If the property does not contain the named supplied parameter). If the property does not contain the named
parameter, then the property is not returned (It could however be parameter, then the property is not returned (It could however be
returned as a result of another "SELECT" clause value.) If multiple returned as a result of another "SELECT" clause value.) If multiple
properties of the supplied name have the named parameter, all properties of the supplied name have the named parameter, all
properties with that named parameter are returned. properties with that named parameter are returned. If multiple
PARAM() clauses in a single "SELECT" CLAUSE match the same property,
When used in the "WHERE" clause, a match is true when the parameter then the single matching property is returned only once.
value is "IN" or "LIKE" compare clause according to the supplied
WHERE values. If multiple named properties contain the named
parameter, then each parameter value is compared to the condition and
if any match, then the results would be true for that condition the
same as if only one had existed.
6.1.1.4 SELF()
Used in a CAL-QUERY "WHERE" clause. Returns the UPN of the currently
authenticated UPN.
6.1.1.5 STATE()
Returns one of three values, "BOOKED", "UNPROCESSED", or "DELETED"
depending on the state of the object. Used in a CAL-QUERY "WHERE"
clause. Where "DELETED" is a component in the marked for delete
state. Components that have been removed from the store are never
returned.
6.1.1.6 Ordering of Results
Sorting will take place in the order the columns are supplied in the
QUERY command. The CS MUST sort at least the first column. The CS
MAY sort additional columns.
Float and integer values MUST BE sorted by their numeric value. This
means the result of a sort on an integer value type will be:
1, 2, 100, 1000
and not
1, 100, 1000, 2 Also note that many parameters have default values defined in [iCAL]
that must be treated as existing with their default value in the
properties as defined in [iCAL} even when not explicitly present. So
for example if a query were performed with PARAM(ATTENDEE,ROLE) then
ALL "ATTENDEE" properties would match because even when they do not
explicitly contain the "ROLE" parameter, it has a default value and
therefore must match.
This means the result of a sort on an float value type will be: So when PARAM() is used in a "SELECT" clause, then it is more
accurate to say that it means return the property if it contains the
named parameter explicitly in the property or simply because the
parameter has a default for that property.
1.1, 2.23, 100.332, 1000.12 6.1.1.3.2 PARAM() in WHERE
and not When used in the "WHERE" clause, a match is true when the parameter
value matches the compare clause according to the supplied WHERE
values. If multiple named properties contain the named parameter,
then each parameter value is compared in turn to the condition and if
any match, then the results would be true for that condition the same
as if only one had existed. Each matching properties or components
are returned only once.
1.1, 100.332, 1000.12, 2.23 As a parameter may be multivalued then the comparison might need to
be done with an "IN" or "NOT IN" comparator.
Date and date time values will be sorted by their equivalent value in Given the following query:
UTC. No matter what the returned time zone in the result set
returns. This is so that if multiple components are returned each in
a unique time zone, the results will be sorted in UTC. This does not
mean the values MUST BE converted to UTC in the data returned to the
CUA. It means the CS must do the sort in UTC.
All other values are sorted according to the locale sorting order as ATTENDEE;PARTSTAT=ACCEPTED:cap://host.com/joe
specified in the command. Or the calendar locale if known, or the CS
locale if the calendar does not have any locale set. And the locale
to use for the sort is determined in that order.
6.1.1.7 Date sorting order SELECT VEVENT FROM VAGENDA
WHERE PARAM(ATTENDEE,PARTSTAT) = 'ACCEPTED'
If the cap-cols is only "*" and nothing else and the result set has a Then all "VEVENT" components that contain one or more "ATTENDEE"
DTSTART, then: properties that have a "PARTSTAT" parameter with a "ACCEPTED" value
would be returned. And each uniquely matching VEVENT would only be
returned once no matter how many "ATTENDEE" properties had matching
roles in each unique "VEVENT" component.
If EXPAND=FALSE sorting will be by the "DTSTART" property value Also note that many parameters have default values defined in [iCAL].
ascending as if it were in UTC. So if the following query were performed on the "ATTENDEE" property
in the above example:
If EXPAND=TRUE sorting will be by the "RECURRENCE-ID" property value SELECT VEVENT FROM VAGENDA
ascending as if it were in UTC. WHERE PARAM(ATTENDEE,ROLE) = 'REQ-PARTICIPANT'
It would return the "ATTENDEE" property exampled above because the
default value for the "ROLE" parameter is "REQ-PARTICIPANT".
If one or more "DTSTART" or "RECURRENCE-ID" property values in 6.1.1.4 SELF()
multiple components have exactly the same value, the order for those
matching components is unspecified.
If the selected component(s) do not contain a "DTSTART" property or a Used in a CAL-QUERY "WHERE" clause. Returns the UPN of the currently
"RECURRENCE-ID" property, then the order is unspecified. authenticated UPN or their current UPN as a result of an IDENTIFY
command.
If an instance does not have a "RECURRENCE-ID" property and the query 6.1.1.5 STATE()
compares "RECURRENCE-ID" properties (comparing a RECURRENCE-ID to the
date or date/time of a single instance object), then the CS MUST
compare the "DTSTART" property value as if it were a "RECURRENCE-ID"
even for single instance objects that do not contain a "RECURRENCE-
ID" property.
A component with a DATE and no TIME value is returned before objects Returns one of three values, "BOOKED", "UNPROCESSED", or "DELETED"
with both a DATE and TIME value when the dates of those two (or more) depending on the state of the object. Where "DELETED" is a component
objects are the same, sorted by date. in the marked for delete state. Components that have been removed
from the store are never returned.
6.1.1.8 Use of single quote 6.1.1.6 Use of single quote
All literal values are surrounded by single quotes ('), not double All literal values are surrounded by single quotes ('), not double
quotes ("), and not without any quotes. If the value contains quotes quotes ("), and not without any quotes. If the value contains quotes
or any other ESCAPED-CHAR, they MUST BE backslash escaped as or any other ESCAPED-CHAR, they MUST BE backslash escaped as
described in section 4.3.11 "Text" of [iCAL]. Any "LIKE" clause described in section 4.3.11 "Text" of [iCAL]. Any "LIKE" clause
wildcard characters that are part of any literal data that is wildcard characters that are part of any literal data that is
preceded by a "LIKE" clause and is not intended to mean wildcard preceded by a "LIKE" clause or "NOT LIKE" clause and is not intended
search, MUST BE escaped as described in note (7) below. to mean wildcard search MUST BE escaped.
6.1.1.9 Comparing DATE and DATE-TIME values 6.1.1.7 Comparing DATE and DATE-TIME values
When comparing "DATE-TIME" values to "DATE" values and when comparing When comparing "DATE-TIME" values to "DATE" values and when comparing
"DATE" values to "DATE-TIME" values, the result will be true if the "DATE" values to "DATE-TIME" values, the result will be true if the
"DATE" value is on the same day as the "DATE-TIME" value. And they "DATE" value is on the same day as the "DATE-TIME" value. And they
are compared in UTC no matter what time zone the data may actual have are compared in UTC no matter what time zone the data may actual have
been stored in. been stored in.
Local time event as descibed in section 4.2.19 of [iCAL] must be
considered to be in the CUA default timezone that was supplied by the
CUA in the "CAPABILITY" exchange.
VALUE-1 VALUE-2 Compare Results VALUE-1 VALUE-2 Compare Results
20020304 20020304T123456 TRUE 20020304 20020304T123456 TRUE
(in UTC-3) (in UTC-3) (in UTC-3) (in UTC-3)
20020304 20020304T003456 FALSE 20020304 20020304T003456 FALSE
(in UTC) (in UTC-4) (in UTC) (in UTC-4)
20020304T003456Z 20020205T003456 FALSE 20020304T003456Z 20020205T003456 FALSE
(in UTC-0) (in UTC-7) (in UTC-0) (in UTC-7)
When the "DATE" value or "DATE-TIME" value is not associated with a
time zone, then the CS will compare the value assuming that the no
time zone values are in the calendars default time zone.
When comparing "DATE" values and "DATE-TIME" values with the "LIKE" When comparing "DATE" values and "DATE-TIME" values with the "LIKE"
clause the comparison will be done as if the value is a [iCAL] DATE clause the comparison will be done as if the value is a [iCAL] DATE
or DATE-TIME string value. or DATE-TIME string value.
LIKE '2002%' will match anything in the year 2002. LIKE '2002%' will match anything in the year 2002.
LIKE '200201%' will match anything in January 2002. LIKE '200201%' will match anything in January 2002.
LIKE '%T000000' will match anything at midnight. LIKE '%T000000' will match anything at midnight.
LIKE '____01__T%' will match anything for any year or LIKE '____01__T%' will match anything for any year or
time that is in January. time that is in January.
(Four '_', '01', two '_' 'T%'). (Four '_', '01', two '_' 'T%').
Using a "LIKE" clause value of "%00%, would return any value that Using a "LIKE" clause value of "%00%, would return any value that
contained two consecutive zeros. contained two consecutive zeros.
All comparisons will be done in UTC. All comparisons will be done in UTC.
6.1.1.10 DTEND and DURATION 6.1.1.8 DTEND and DURATION
The "DTEND" property value is not included in the time occupied by
the component. That is a "DTEND" property value of 20030614T12000
includes all of the time up to but not including noon on that day.
The "DURATION" property value end time is also not inclusive. So an
object with a "DTSTART" property value of 20030514T110000 and a
"DURATION" property value of "1H" does not include noon on that day.
When a "QUERY" property value contains a "DTEND" value, then the CS When a "QUERY" property value contains a "DTEND" value, then the CS
MUST also evaluate any existing "DURATION" property value and MUST also evaluate any existing "DURATION" property value and
determine if it has an effective end time that matches the "QUERY" determine if it has an effective end time that matches the "QUERY"
property supplied "DTEND" value or any range of values supplied by property supplied "DTEND" value or any range of values supplied by
the "QUERY" property. the "QUERY" property.
When a "QUERY" property contains a "DURATION" value, then the CS MUST When a "QUERY" property contains a "DURATION" value, then the CS MUST
also evaluate any existing "DTEND" property values and determine if also evaluate any existing "DTEND" property values and determine if
they have an effective duration that matches the "QUERY" property they have an effective duration that matches the "QUERY" property
value supplied "DURATION" value or any range of values supplied by value supplied "DURATION" value or any range of values supplied by
the "QUERY" property. the "QUERY" property.
As "DTEND" value is the first time that is excluded from a components 6.1.1.9 [NOT] LIKE
time range, any "DURATION" value supplied by the "QUERY" property
value that is exactly one second less than the "DTEND" property value
MUST match the QUERY. And if the "DURATION" property value ends
exactly at the computed DTEND it MUST NOT match.
Any "DTEND" value supplied by the "QUERY" property that is exactly
one second more than an end time computed from a DURATION MUST match
the QUERY. Any end time that is computed from a DURATION that
exactly matches the supplied DTEND MUST NOT match.
Given a meeting room reserved with a component that contains (date-
time-example-1):
DTSTART:20020127T000000Z
DTEND:20020127T010000Z
The reservation is really from:
January 27th, 2002 00:00:00
To:
January 27th, 2002,00:59:59
Given another meeting room reserved with a component that contains
(date-time-example-2):
DTSTART:20020127T000000Z
DURATION:P59M59S
The reservation is really from:
January 27th, 2002 00:00:00
To:
January 27th, 2002,00:59:59
A QUERY that contains:
... VEVENT.DTSTART = '20020127T00000Z'
AND VEVENT.DTEND = '20020127T010000Z'
MUST match both (date-time-example-1) and (date-time-example-2)
A QUERY that contains:
... VEVENT.DTSTART = '20020127T00000Z'
AND DURATION = 'P59M59S'
MUST match both (date-time-example-1) and (date-time-example-2)
6.1.1.11 [NOT] LIKE
The pattern matching characters are the '%' that matches zero or more The pattern matching characters are the '%' that matches zero or more
characters, and '_' that matches exactly one character (where characters, and '_' that matches exactly one character (where
character does not always mean octet). character does not always mean octet).
"LIKE" clause pattern matches always cover the entire string. To "LIKE" clause pattern matches always cover the entire string. To
match a pattern anywhere within a string, the pattern must start and match a pattern anywhere within a string, the pattern must start and
end with a percent sign. end with a percent sign.
To match a '%' or '_' in the data and not have it interpreted as a To match a '%' or '_' in the data and not have it interpreted as a
wildcard character, they MUST BE backslash escaped. That is to wildcard character, they MUST BE backslash escaped. That is to search
search for a '%' or '_' in the string: for a '%' or '_' in the string:
LIKE '%\%%' Matches any string with a '%' in it. LIKE '%\%%' Matches any string with a '%' in it.
LIKE '%\_%' Matches any string with a '_' in it. LIKE '%\_%' Matches any string with a '_' in it.
Strings compared using the "LIKE" clause MUST BE performed using case Strings compared using the "LIKE" clause MUST BE performed using case
in-sensitive comparisons when the locale allows. (Example: in US- in-sensitive comparisons when the locale allows. (Example: in
ASCII the compare assumes 'a' = 'A'). US-ASCII the compare assumes 'a' = 'A').
If the "LIKE" clause is preceded by 'NOT' then there is a match when If the "LIKE" clause is preceded by 'NOT' then there is a match when
the string compare fails. the string compare fails.
Some property values (such as the 'recur' value type), contain commas Some property values (such as the 'recur' value type), contain commas
and are not multi valued. The CS must understand the objects being and are not multi valued. The CS must understand the objects being
compared and understand how to determine how any multi valued or compared and understand how to determine how any multi valued or
multi instances properties or parameter values are separated, quoted, multi instances properties or parameter values are separated, quoted,
and backslash escaped and perform the comparisons as if each value and backslash escaped and perform the comparisons as if each value
existed by itself and not quoted or backslash escaped when comparing existed by itself and not quoted or backslash escaped when comparing
using the IN element. using the LIKE element.
See related examples in Section 6.1.1.13 See related examples in Section 6.1.1.11
6.1.1.12 Empty vs. NULL 6.1.1.10 Empty vs. NULL
When used in a CAL-QUERY value, "NULL" means that the property or When used in a CAL-QUERY value, "NULL" means that the property or
parameter is not present in the object. parameter is not present in the object. Paramaters that are not
provided and have a default value in the property are considered to
exist with their default value and will not be "NULL".
If the property (or parameter) exists, but has no value then "NULL" If the property exists but has no value then "NULL" MUST NOT match.
MUST NOT match. If the parameter exists but has no value then "NULL" MUST NOT match.
If the parameter not present and has a default value then "NULL" MUST
NOT match.
If the property (or parameter) exists, but has no value then it If the property (or parameter) exists, but has no value then it
matches the empty string '' (quote quote). matches the empty string '' (quote quote).
6.1.1.13 [NOT] IN 6.1.1.11 [NOT] IN
This is similar to the "LIKE" clause, except it does value matching This is similar to the "LIKE" clause, except it does value matching
and not string comparison matches. and not string comparison matches.
Some iCalendar objects can be multi instance and multi valued. The Some iCalendar objects can be multi instance and multi valued. The
"IN" clause will return a match if the literal value supplied as part "IN" clause will return a match if the literal value supplied as part
of the "IN" clause is contained in the value of any instance of the of the "IN" clause is contained in the value of any instance of the
named property or parameter, or is in any of the multiple values in named property or parameter, or is in any of the multiple values in
the named property or parameter. Unlike the "LIKE" clause, the '%' the named property or parameter. Unlike the "LIKE" clause, the '%'
and '_' matching characters are not used with the "IN" clause and and '_' matching characters are not used with the "IN" clause and
skipping to change at page 47, line 43 skipping to change at page 46, line 12
and are not multi valued. The CS must understand the objects being and are not multi valued. The CS must understand the objects being
compared and understand how to determine how any multi valued or compared and understand how to determine how any multi valued or
multi instances properties or parameter values are separated, quoted, multi instances properties or parameter values are separated, quoted,
and backslash escaped and perform the comparisons as if each value and backslash escaped and perform the comparisons as if each value
existed by itself and not quoted or backslash escaped when comparing existed by itself and not quoted or backslash escaped when comparing
using the IN element. using the IN element.
If the "IN" clause is preceded by 'NOT' then there is a match when If the "IN" clause is preceded by 'NOT' then there is a match when
the value does not exist in the property or parameter value. the value does not exist in the property or parameter value.
6.1.1.14 DATE-TIME and TIME values in a WHEN clause 6.1.1.12 DATE-TIME and TIME values in a WHEN clause
All "DATE-TIME" and "TIME" literal values supplied in a "WHEN" clause All "DATE-TIME" and "TIME" literal values supplied in a "WHEN" clause
MUST BE terminated with 'Z'. That means that the CUA MUST supply the MUST BE terminated with 'Z'. That means that the CUA MUST supply the
values in UTC. values in UTC.
Valid: Valid:
WHERE alarm.TRIGGER < '20020201T000000Z' WHERE alarm.TRIGGER < '20020201T000000Z'
AND alarm.TRIGGER > '20020101T000000Z' AND alarm.TRIGGER > '20020101T000000Z'
Not valid and it is a syntax error and the CS MUST reject the QUERY. Not valid and it is a syntax error and the CS MUST reject the QUERY.
WHERE alarm.TRIGGER < '20020201T000000' WHERE alarm.TRIGGER < '20020201T000000'
AND alarm.TRIGGER > '20020101T000000' AND alarm.TRIGGER > '20020101T000000'
6.1.1.15 Multiple contained components 6.1.1.13 Multiple contained components
All comparisons MUST BE done from the same instance of a contained All comparisons MUST BE done from the same instance of a contained
component or property and repeated for each instance. As in the component or property and repeated for each instance. As in the
following example that uses a "VALARM" component contained in a following example that uses a "VALARM" component contained in a
"VEVENT" component . If any instance of a "VALARM" component in any "VEVENT" component . If any instance of a "VALARM" component in any
"VEVENT" component matches the query and the rest of the query is "VEVENT" component matches the query and the rest of the query is
satisfied, then the "UID", "SUMMARY", and "DESCRIPTION" properties satisfied, then the "UID", "SUMMARY", and "DESCRIPTION" properties
from all "VEVENT" components will be returned. If there were two from all "VEVENT" components will be returned. If there were two
"VALARM" components in a "VEVENT" component, then both "VALARM" "VALARM" components in a "VEVENT" component, then both "VALARM"
components are tested and in this example only when the "VEVENT" components are tested and in this example only when the "VEVENT"
component state is booked: component state is booked:
BEGIN:VQUERY BEGIN:VQUERY
EXPAND:TRUE EXPAND:TRUE
QUERY:SELECT UID,SUMMARY,DESCRIPTION FROM VEVENT QUERY:SELECT UID,SUMMARY,DESCRIPTION FROM VEVENT
WHERE VALARM.TRIGGER >= '20000101T030405Z' WHERE VALARM.TRIGGER >= '20000101T030405Z'
AND VALARM.TRIGGER <= '20001231T235959Z' AND VALARM.TRIGGER <= '20001231T235959Z'
AND STATE() = 'BOOKED' AND STATE() = 'BOOKED'
END:VQUERY END:VQUERY
6.1.1.16 Example, Query by UID 6.1.1.14 Example, Query by UID
The following example would match the entire content of a "VEVENT" or The following example would match the entire content of a "VEVENT" or
"VTODO" component with the "UID" property equal to "uid123" and not "VTODO" component with the "UID" property equal to "uid123" and not
expand any multiple instances of the component. If the CUA does not expand any multiple instances of the component. If the CUA does not
know if "uid123" was a "VEVENT", "VTODO", "VJOURNAL", or any other know if "uid123" was a "VEVENT", "VTODO", "VJOURNAL", or any other
component, then all components that the CUA supports MUST BE supplied component, then all components that the CUA supports MUST BE supplied
in a QUERY property. This example assumes the CUA is only interested in a QUERY property. This example assumes the CUA is only interested
in "VTODO" and "VEVENT" components. in "VTODO" and "VEVENT" components.
If the results were empty it could also mean that "uid123" was a If the results were empty it could also mean that "uid123" was a
property in a component other than a VTODO or VEVENT. property in a component other than a VTODO or VEVENT.
BEGIN:VQUERY BEGIN:VQUERY
QUERY:SELECT * FROM VTODO WHERE UID = 'uid123' QUERY:SELECT * FROM VTODO WHERE UID = 'uid123'
QUERY:SELECT * FROM VEVENT WHERE UID = 'uid123' QUERY:SELECT * FROM VEVENT WHERE UID = 'uid123'
END:VQUERY END:VQUERY
6.1.1.17 Query by Date-Time range 6.1.1.15 Query by Date-Time range
This query selects the entire content of every booked "VEVENT" This query selects the entire content of every booked "VEVENT"
component that has an instance greater than or equal to July 1st, component that has an instance greater than or equal to July 1st,
2000 00:00:00 UTC and less than or equal to July 31st, 2000 23:59:59 2000 00:00:00 UTC and less than or equal to July 31st, 2000 23:59:59
UTC. This includes single instance "VEVENT" components that do no UTC. This includes single instance "VEVENT" components that do no
explicitly contain a "RECURRENCE-ID" property. explicitly contain any recurence properties or "RECURRENCE-ID"
properties. This works only for CSs that have the "RECUR-EXPAND"
property value set to "TRUE" in the "CAPABILITY" exchange.
BEGIN:VQUERY BEGIN:VQUERY
EXPAND:TRUE EXPAND:TRUE
QUERY:SELECT * FROM VEVENT QUERY:SELECT * FROM VEVENT
WHERE RECURRENCE-ID >= '20000801T000000Z' WHERE RECURRENCE-ID >= '20000801T000000Z'
AND RECURRENCE-ID <= '20000831T235959Z' AND RECURRENCE-ID <= '20000831T235959Z'
AND STATE() = 'BOOKED' AND STATE() = 'BOOKED'
END:VQUERY END:VQUERY
6.1.1.18 Query for all Unprocessed Entries 6.1.1.16 Query for all Unprocessed Entries
The following example selects the entire contents of all non-booked The following example selects the entire contents of all non-booked
"VTODO" and "VEVENT" components in the "UNPROCESSED" state. The "VTODO" and "VEVENT" components in the "UNPROCESSED" state. The
default for the "EXPAND" property is FALSE, so the recurrence rules default for the "EXPAND" property is FALSE, so the recurrence rules
will not be expanded. will not be expanded.
BEGIN:VQUERY BEGIN:VQUERY
QUERYID:Fetch VEVENT and VTODO iTIP components QUERYID:Fetch VEVENT and VTODO iTIP components
QUERY:SELECT * FROM VEVENT WHERE QUERY:SELECT * FROM VEVENT WHERE STATE() = 'UNPROCESSED'
STATE() = 'UNPROCESSED' QUERY:SELECT * FROM VTODO WHERE STATE() = 'UNPROCESSED'
QUERY:SELECT * FROM VTODO WHERE
STATE() = 'UNPROCESSED'
END:VQUERY END:VQUERY
The following example fetches all "VEVENT" and "VTODO" components in The following example fetches all "VEVENT" and "VTODO" components in
the "BOOKED" state. the "BOOKED" state.
BEGIN:VQUERY BEGIN:VQUERY
QUERYID:Fetch All Booked VEVENT and VTODO components QUERYID:Fetch All Booked VEVENT and VTODO components
QUERY:SELECT * FROM VEVENT WHERE STATE() = 'BOOKED' QUERY:SELECT * FROM VEVENT WHERE STATE() = 'BOOKED'
QUERY:SELECT * FROM VTODO WHERE STATE() = 'BOOKED' QUERY:SELECT * FROM VTODO WHERE STATE() = 'BOOKED'
END:VQUERY END:VQUERY
The following fetches the "UID" property for all "VEVENT" and "VTODO" The following fetches the "UID" property for all "VEVENT" and "VTODO"
components that have been marked for delete. components that have been marked for delete.
BEGIN:VQUERY BEGIN:VQUERY
QUERYID:Fetch UIDs of marked for delete VEVENTs and VTODOs QUERYID:Fetch UIDs of marked for delete VEVENTs and VTODOs
QUERY:SELECT UID FROM VEVENT WHERE STATE() = 'DELETE' QUERY:SELECT UID FROM VEVENT WHERE STATE() = 'DELETE'
QUERY:SELECT UID FROM VTODO WHERE STATE() = 'DELETE' QUERY:SELECT UID FROM VTODO WHERE STATE() = 'DELETE'
END:VQUERY END:VQUERY
In the examples above they were bunched into groups of similar 6.1.1.17 Query with Subset of Properties by Date/Time
queries. They could be performed all at once by having all of the
"QUERY" properties in one BEGIN/END "VQUERY" component.
6.1.1.19 Query with Subset of Properties by Date/Time
In this example only the named properties will be selected and all In this example only the named properties will be selected and all
booked and non-booked components will be selected that have a booked and non-booked components will be selected that have a
"DTSTART" value from February 1st to February 10th 2000 (in UTC). "DTSTART" value from February 1st to February 10th 2000 (in UTC).
BEGIN:VQUERY BEGIN:VQUERY
QUERY:SELECT UID,DTSTART,DESCRIPTION,SUMMARY FROM VEVENT QUERY:SELECT UID,DTSTART,DESCRIPTION,SUMMARY FROM VEVENT
WHERE DTSTART >= '20000201T000000Z' WHERE DTSTART >= '20000201T000000Z'
AND DTSTART <= '20000210T235959Z' AND DTSTART <= '20000210T235959Z'
END:VQUERY END:VQUERY
6.1.1.20 Query with Components and Alarms In A Range 6.1.1.18 Query with Components and Alarms In A Range
This example fetches all booked "VEVENT" components with an alarm This example fetches all booked "VEVENT" components with an alarm
that triggers within the specified time range. In this case only the that triggers within the specified time range. In this case only the
"UID", "SUMMARY", and "DESCRIPTION" properties will be selected for "UID", "SUMMARY", and "DESCRIPTION" properties will be selected for
all booked "VEVENTS" components that have an alarm between the two all booked "VEVENTS" components that have an alarm between the two
date-times supplied. date-times supplied.
BEGIN:VQUERY BEGIN:VQUERY
EXPAND:TRUE EXPAND:TRUE
QUERY:SELECT UID,SUMMARY,DESCRIPTION FROM VEVENT QUERY:SELECT UID,SUMMARY,DESCRIPTION FROM VEVENT
skipping to change at page 51, line 29 skipping to change at page 49, line 39
Formal Definition: The value type is defined by the following Formal Definition: The value type is defined by the following
notation: notation:
upn = "@" upn = "@"
/ [ dot-atom-text ] "@" dot-atom-text / [ dot-atom-text ] "@" dot-atom-text
; dot-atom-text is defined in RFC 2822 ; dot-atom-text is defined in RFC 2822
Description: This data type is an identifier that denotes a CU or a Description: This data type is an identifier that denotes a CU or a
group of CU. A UPN is a RFC 822 compliant email address, with group of CU. A UPN is a RFC 2822 compliant email address, with
exceptions listed below, and in most cases it is deliverable to the exceptions listed below, and in most cases it is deliverable to the
CU. In some cases it is identical to the CU's well known email CU. In some cases it is identical to the CU's well known email
address. A CU's UPN MUST never be an e-mail address that is address. A CU's UPN MUST never be an e-mail address that is
deliverable to a different person as there is no requirement that a deliverable to a different person as there is no requirement that a
person's UPN MUST BE their e-mail address. A UPN is formatted as a person's UPN MUST BE their e-mail address. A UPN is formatted as a
user name followed by "@" followed by a Realm in the form of a valid, user name followed by "@" followed by a Realm in the form of a valid,
and unique, DNS domain name. The user name MUST BE unique within the and unique, DNS domain name. The user name MUST BE unique within the
Realm. In it's simplest form it looks like "user@example.com". Realm. In it's simplest form it looks like "user@example.com".
In certain cases a UPN will not be RFC 822 compliant. When anonymous In certain cases a UPN will not be RFC 2822 compliant. When anonymous
authentication is used, or anonymous authorization is being defined, authentication is used, or anonymous authorization is being defined,
the special UPN "@" will be used. When authentication MUST BE used, the special UPN "@" will be used. When authentication MUST BE used,
but unique identity MUST BE obscured, a UPN of the form @DNS-domain- but unique identity MUST BE obscured, a UPN of the form
name may be used. For example, "@example.com". @DNS-domain-name may be used. For example, "@example.com".
Example: Example:
The following is a UPN for a CU: The following is a UPN for a CU:
jdoe@example.com jdoe@example.com
The following is a example of a UPN that could be for a group of CU: The following is a example of a UPN that could be for a group of CU:
staff@example.com staff@example.com
skipping to change at page 53, line 42 skipping to change at page 51, line 43
belonging to any non-null realm belonging to any non-null realm
*@realm Matches the UPN of non-anonymous CUs *@realm Matches the UPN of non-anonymous CUs
belonging to the specified realm belonging to the specified realm
user@realm Matches the UPN of the specified CU user@realm Matches the UPN of the specified CU
belonging to the specified realm belonging to the specified realm
user@* Not allowed. user@* Not allowed.
user@ Not allowed.
Example: The following are examples of this value type: Example: The following are examples of this value type:
DENY:NON CAL-OWNERS() DENY:NON CAL-OWNERS()
DENY:@hackers.example.com DENY:@hackers.example.com
DENY:*@hackers.example.com
GRANT:sam@example.com GRANT:sam@example.com
7. New Parameters 7. New Parameters
7.1 ACTION Parameter 7.1 ACTION Parameter
Parameter Name: ACTION Parameter Name: ACTION
Purpose: This parameter indicates the action to be taken when a Purpose: This parameter indicates the action to be taken when a
timeout occurs. timeout occurs.
skipping to change at page 55, line 36 skipping to change at page 53, line 36
; 'latency-param' MUST BE supplied. ; 'latency-param' MUST BE supplied.
Example: The following is an example of this parameter: Example: The following is an example of this parameter:
CMD;LATENCY=10;ACTION=ASK:CREATE CMD;LATENCY=10;ACTION=ASK:CREATE
7.2 ENABLE Parameter 7.2 ENABLE Parameter
Parameter Name: ENABLE Parameter Name: ENABLE
Purpose: This parameter indicates whether or not the "TRIGGER" Purpose: This parameter indicates whether or not the property should
property in a "VALARM" component should be ignored. be ignored. Example if a "TRIGGER" property in a "VALARM" component
should be ignored.
Value Type: BOOLEAN Value Type: BOOLEAN
Conformance: This property can be specified in the "TRIGGER" Conformance: This property can be specified in the "TRIGGER"
properties. properties.
Description: When a non owner sends an [iTIP] "REQUEST" to a calendar Description: When a non owner sends an [iTIP] "REQUEST" to a calendar
that object might contain a "VALARM" component. The owner may wish that object might contain a "VALARM" component. The owner may wish to
to have local control over their own CUA and when or how alarms are have local control over their own CUA and when or how alarms are
triggered. triggered.
A CUA may add the "ENABLE" parameter to any "TRIGGER" property before A CUA may add the "ENABLE" parameter to any "TRIGGER" property before
booking the component. If the "ENABLE" parameter is set to "FALSE", booking the component. If the "ENABLE" parameter is set to "FALSE",
then the alarm will be ignored by the CUA. If set to "TRUE", or if then the alarm will be ignored by the CUA. If set to "TRUE", or if
the "ENABLE" property is not in the "TRIGGER" property, the alarm is the "ENABLE" property is not in the "TRIGGER" property, the alarm is
enabled. The CUA should remove the "ENABLE" parameter before enabled. This parameter may not be known by pre-CAP implementations
forwarding the component to a non-CAP CUA. and should not be an issue as it conforms to an 'ianaparam' as
defined in [iCAL].
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
enable-param = "ENABLE" "=" boolean enable-param = "ENABLE" "=" boolean
Example: The following is an example of this property for a "VAGENDA" Example: The following is an example of this property for a "VAGENDA"
component: component:
TRIGGER;ENABLE=FALSE;RELATED=END:PT5M TRIGGER;ENABLE=FALSE;RELATED=END:PT5M
skipping to change at page 57, line 42 skipping to change at page 55, line 38
Formal Definition: The parameter is defined by the following Formal Definition: The parameter is defined by the following
notation: notation:
latency-param = ";" "LATENCY" "=" latency-sec latency-param = ";" "LATENCY" "=" latency-sec
; The value supplied in the time in seconds. ; The value supplied in the time in seconds.
; If 'latency-param' is supplied then ; If 'latency-param' is supplied then
; 'action-param' MUST BE supplied. ; 'action-param' MUST BE supplied.
latency-sec = posint1 latency-sec = posint1
; Default is zero (0) meaning no timeout.
Example: The following is an example of this parameter: Example: The following is an example of this parameter:
CMD;LATENCY=10;ACTION=ASK:CREATE CMD;LATENCY=10;ACTION=ASK:CREATE
7.5 LOCAL Parameter 7.5 LOCAL Parameter
Parameter Name: LOCAL Parameter Name: LOCAL
Purpose: Indicates if the "VALARM" component should be exported to Purpose: Indicates if the named component should be exported to any
any non-organizer calendar. non-organizer calendar.
Value Type: BOOLEAN Value Type: BOOLEAN
Conformance: This parameter can be specified in the "SEQUENCE" Conformance: This parameter can be specified in the "SEQUENCE"
properties in a "VALARM" component. properties in a "VALARM" component.
Description: When a non owner sends an [iTIP] "REQUEST" to a calendar Description: When a non owner sends an [iTIP] "REQUEST" to a calendar
that object might contain a "VALARM" component. The owner may wish that object might contain a "VALARM" component. The owner may wish to
to have local control over their own CUA and when or how alarms are have local control over their own CUA and when or how alarms are
triggered. triggered.
A CUA may add the "LOCAL" parameter to the "SEQUENCE" property before A CUA may add the "LOCAL" parameter to the "SEQUENCE" property before
booking the component. If the "LOCAL" parameter is set to "FALSE", booking the component. If the "LOCAL" parameter is set to "FALSE",
then the alarm MUST NOT be forwarded to any other calender. If set then the alarm MUST NOT be forwarded to any other calender. If set to
to "TRUE", or of the "LOCAL" property is not in the "SEQUENCE" "TRUE", or of the "LOCAL" property is not in the "SEQUENCE" property,
property, the alarm is global. The CUA should remove the "LOCAL" the alarm is global.
parameter before forwarding the component to a non-cap CUA other
calendars.
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
local-param = "LOCAL" "=" boolean local-param = "LOCAL" "=" boolean
Example: The following is an example of this parameter: Example: The following is an example of this parameter:
SEQUENCE;LOCAL=TRUE:4 SEQUENCE;LOCAL=TRUE:4
7.6 LOCALIZE Parameter 7.6 LOCALIZE Parameter
skipping to change at page 59, line 20 skipping to change at page 57, line 14
of the values listed in the initial [BEEP] greeting 'localize' of the values listed in the initial [BEEP] greeting 'localize'
attribute. attribute.
A CUA may add the "LOCAL" parameter to the "LOCALIZE" parameter to A CUA may add the "LOCAL" parameter to the "LOCALIZE" parameter to
the "CMD" property to specify the language of any error or warning the "CMD" property to specify the language of any error or warning
messages. messages.
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
localize-param = ";" "LOCALIZE" "=" beep-localize localize-param = ";" "LOCALIZE" "=" beep-localize
beep-localize = text ; As defined in [iCAL]
; The value supplied MUST BE one value from the initial ; The value supplied MUST BE one value from the initial
; [BEEP] greeting 'localize' attribute specifying ; [BEEP] greeting 'localize' attribute specifying
; the locale to use for error messages during ; the locale to use for error messages during
; this instance of the command sent. ; this instance of the command sent.
beep-localize = ; text
Example: The following is an example of this parameter: Example: The following is an example of this parameter:
CMD;LOCALIZE=fr_CA:CREATE CMD;LOCALIZE=fr_CA:CREATE
7.7 OPTIONS Parameter 7.7 OPTIONS Parameter
Parameter Name: OPTIONS Parameter Name: OPTIONS
Purpose: If provided the "OPTIONS" parameter specifies some "CMD" Purpose: If provided the "OPTIONS" parameter specifies some "CMD"
property specific options. property specific options.
skipping to change at page 62, line 35 skipping to change at page 60, line 35
Property Name: CALID Property Name: CALID
Property Parameters: Non-standard property parameters can be Property Parameters: Non-standard property parameters can be
specified on this property. specified on this property.
Conformance: This property can be specified in the "VAGENDA" Conformance: This property can be specified in the "VAGENDA"
component. component.
Description: This property is used to specify a fully qualified Description: This property is used to specify a fully qualified
calid. CALID.
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
CALID = "CALID" other-params ":" calid CRLF CALID = "CALID" other-params ":" calid CRLF
Example: Example:
CALID:cap://cal.example.com/sdfifgty4321 CALID:cap://cal.example.com/sdfifgty4321
8.4 CALMASTER Property 8.4 CALMASTER Property
skipping to change at page 65, line 21 skipping to change at page 63, line 16
Value Type: TEXT Value Type: TEXT
Property Parameters: Non-standard property parameters can be Property Parameters: Non-standard property parameters can be
specified on this property. specified on this property.
Conformance: The property can be specified in a "VREPLY" component Conformance: The property can be specified in a "VREPLY" component
that is sent in response to a "GET-CAPABILITY" command. that is sent in response to a "GET-CAPABILITY" command.
Description: The value is one from a list of "CAR-NONE", "CAR-MIN", Description: The value is one from a list of "CAR-NONE", "CAR-MIN",
or "CAR-FULL-1". If "CAR-FULL-1" is supplied then "CAR-MIN" is also or "CAR-FULL-1". If "CAR-FULL-1" is supplied then "CAR-MIN" is also
available. A "CAR-MIN" implementation only supported the "DEFAULT- available. A "CAR-MIN" implementation only supported the
VCARS" property values listed in the "VCALSTORE" component and a "DEFAULT-VCARS" property values listed in the "VCALSTORE" component
"CAR-MIN" implementation does not support the creation or and a "CAR-MIN" implementation does not support the creation or
modification of "VCAR" components from the CUA. modification of "VCAR" components from the CUA.
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
car-level = "CAR-LEVEL" ":" other-params : car-level-values car-level = "CAR-LEVEL" ":" other-params : car-level-values
car-level-values = ( "CAR-NONE" / "CAR-MIN" / "CAR-FULL-1" car-level-values = ( "CAR-NONE" / "CAR-MIN" / "CAR-FULL-1"
/ other-levels ) / other-levels )
other-levels = ; Any name published in an RFC for a "CAR-LEVEL" other-levels = ; Any name published in an RFC for a "CAR-LEVEL"
skipping to change at page 66, line 4 skipping to change at page 63, line 43
CAR-LEVEL:CAR-FULL-1 CAR-LEVEL:CAR-FULL-1
8.8 COMPONENTS Property 8.8 COMPONENTS Property
Property Name: COMPONENTS Property Name: COMPONENTS
Purpose: The property specifies a the list of components supported by Purpose: The property specifies a the list of components supported by
the endpoint. the endpoint.
Value Type: TEXT Value Type: TEXT
Property Parameters: Non-standard property parameters can be Property Parameters: Non-standard property parameters can be
specified on this property. specified on this property.
Conformance: The property can be specified in a "VREPLY" component in Conformance: The property can be specified in a "VREPLY" component in
response to a "GET-CAPABILITY" command. response to a "GET-CAPABILITY" command.
Description: A comma separated list of components supported by the Description: A comma separated list of components supported by the
endpoint. If not in the list sent from the endpoint then they are endpoint. If not in the list sent from the endpoint then they are not
not supported by that endpoint. Sending an unsupported component supported by that endpoint. Sending an unsupported component results
results in unpredictable results. This includes any components in unpredictable results. This includes any components inside of
inside of other components (VALARM for example). It MUST include at other components (VALARM for example). The recommended list is
least VCALSTORE, VCALENDAR, VTIMEZONE, STANDARD, DAYLIGHT, VREPLY, "VCALSTORE,VCALENDAR,VREPLY,VAGENDA,
and VAGENDA and at least one of VEVENT, VTODO, or VJOURNAL. The VEVENT,VALARM,VTIMEZONE,VJOURNAL,VTODO,VALARM
recommened list is "VCALSTORE,VCALENDAR,VREPLY,VAGENDA, DAYLIGHT,STANDARD,VCAR,VRIGHT,VQUERY"
VEVENT,VALARM,VTIMEZONE,VJOURNAL,VTODO, DAYLIGHT,STANDARD"
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
components = "COMPONENTS" other-params ":" comp-list CRLF components = "COMPONENTS" other-params ":" comp-list CRLF
; All of the following MUST BE supplied in any order. ; All of these MUST BE supplied only once.
; ;
comp-list-req = "VCALSTORE" "," "VCALENDAR" "," "VTIMEZONE" "," comp-list-req = "VCALSTORE" "," "VCALENDAR" "," "VTIMEZONE" ","
"VREPLY", "VAGENDA", "STANDARD", "DAYLIGHT" "VREPLY" "," "VAGENDA" "," "STANDARD" ","
"DAYLIGHT"
; At least one MUST BE supplied. The same value ; At least one MUST BE supplied. The same value
; MUST NOT occur more than once. ; MUST NOT occur more than once.
; ;
comp-list-min = ( "," "VEVENT") / ( "," "VTODO") / ( "," "VJOURNAL" ) comp-list-min = ( "," "VEVENT") / ( "," "VTODO") / ( "," "VJOURNAL" )
; The same value MUST NOT occur ; The same value MUST NOT occur
; more than once. ; more than once. If "VCAR" is supplied then
' "VRIGHT" must be supplied.
; ;
comp-list-opt = ( "," "VFREEBUSY" ) / ( "," "VALARM" ) comp-list-opt = ( "," "VFREEBUSY" ) / ( "," "VALARM" )
( "," "VCAR" ) / ( "," "VQUERY" ) / ( "," "VCAR" ) / ( "," "VRIGHT" )
( "," x-comp ) / ( "," iana-comp ) / ( "," "VQUERY") / ( "," x-comp )
/ ( "," iana-comp )
comp-list = comp-list-req 1*3comp-list-min *comp-list-opt
*("," comp-list-names) comp-name comp-list = comp-list-req 1*3comp-list-min *(comp-list-opt)
Example: The following is an example of this property: Example: The following is an example of this property:
COMPONENTS:VCALSTORE,VCALENDAR,VREPLY,VAGENDA, COMPONENTS:VCALSTORE,VCALENDAR,VREPLY,VAGENDA,
VEVENT,VALARM,VTIMEZONE,VJOURNAL,VTODO, VEVENT,VALARM,VTIMEZONE,VJOURNAL,VTODO,
DAYLIGHT,STANDARD" DAYLIGHT,STANDARD,VFREEBUSY,VCAR,VRIGHT,VQUERY
8.9 CSID Property 8.9 CSID Property
Property Name: CSID Property Name: CSID
Purpose: The property specifies a the globally unique identifier for Purpose: The property specifies a the globally unique identifier for
the calendar store. the calendar store.
Value Type: URI Value Type: URI
Property Parameters: Non-standard property parameters can be Property Parameters: Non-standard property parameters can be
specified on this property. specified on this property.
Conformance: The property can be specified in a "VCALSTORE" Conformance: The property can be specified in a "VCALSTORE"
component. component.
Description: The identifier MUST BE globally unique. Each CS needs Description: The identifier MUST BE globally unique. Each CS needs
its own unique identifier. The "CSID" property is the official its own unique identifier. The "CSID" property is the official unique
unique identifier for the CS. If the [BEEP] 'serverName' attribute identifier for the CS. If the [BEEP] 'serverName' attribute was
was supplied in the [BEEP] 'start' message, then the CSID will be supplied in the [BEEP] 'start' message, then the CSID will be mapped
mapped to the virtual host name supplied and the host name part of to the virtual host name supplied and the host name part of the CSID
the CSID MUST BE the same as the 'serverName' value. This allows one MUST BE the same as the 'serverName' value. This allows one CS
CS implementation to service multiple virtual hosts. CS's are not implementation to service multiple virtual hosts. CS's are not
required to support virtual hosting. If a CS does not support required to support virtual hosting. If a CS does not support virtual
virtual hosting then it must ignore the [BEEP] 'serverName' hosting then it must ignore the [BEEP] 'serverName' attribute.
attribute.
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
csid = "CSID" other-params ":" capurl CRLF csid = "CSID" other-params ":" capurl CRLF
Example: The following is an example of this property: Example: The following is an example of this property:
CSID:cap://calendar.example.com CSID:cap://calendar.example.com
8.10 DECREED Property 8.10 DECREED Property
skipping to change at page 69, line 13 skipping to change at page 66, line 46
Description: In a "VAGENDA" component this property is used to Description: In a "VAGENDA" component this property is used to
indicate the charset of calendar. If not specified, the default is indicate the charset of calendar. If not specified, the default is
the first value in the "VCALSTORE" components "DEFAULT-CHARSET" the first value in the "VCALSTORE" components "DEFAULT-CHARSET"
property value list. The value MUST BE an IANA registered character property value list. The value MUST BE an IANA registered character
set as defined in [CHARREG]. set as defined in [CHARREG].
In a "VCALSTORE" component it is a comma separated list of charsets In a "VCALSTORE" component it is a comma separated list of charsets
supported by the CS. The first entry is the default entry for all supported by the CS. The first entry is the default entry for all
newly created "VAGENDA" components. The "UTF-8" value MUST BE in the newly created "VAGENDA" components. The "UTF-8" value MUST BE in the
"VCALSTORE" component "DEFAULT-CHARSET" property list. All compliant "VCALSTORE" component "DEFAULT-CHARSET" property list. All compliant
CAP implementations (CS and CUA) MUST support the "UTF-8" charset. CAP implementations (CS and CUA) MUST support at least the "UTF-8"
charset.
If a charset name contains a comma (,), then that comma must be If a charset name contains a comma (,), then that comma must be
backslashed escaped in the value. backslashed escaped in the value.
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
default-charset = "DEFAULT-CHARSET" other-params ":" text default-charset = "DEFAULT-CHARSET" other-params ":" text
*( "," text) CRLF *( "," text) CRLF
Example: The following is an example of this property for a "VAGENDA" Example: The following is an example of this property for a "VAGENDA"
skipping to change at page 71, line 21 skipping to change at page 69, line 14
Formal Definition: This property is defined by the following Formal Definition: This property is defined by the following
notation: notation:
default-tzid = "DEFAULT-TZID" other-params default-tzid = "DEFAULT-TZID" other-params
":" [tzidprefix] text ":" [tzidprefix] text
*("," [tzidprefix] text) CRLF *("," [tzidprefix] text) CRLF
Example: The following is an example of this property: Example: The following is an example of this property:
DEFAULT-TZID:US/Eastern,UTC DEFAULT-TZID:US/Mountain,UTC
8.14 DEFAULT-VCARS Property 8.14 DEFAULT-VCARS Property
Property Name: DEFAULT-VCARS Property Name: DEFAULT-VCARS
Purpose: This property is used to specify the "CARID" property ids of Purpose: This property is used to specify the "CARID" property ids of
the default "VCAR" components for newly created "VAGENDA" components. the default "VCAR" components for newly created "VAGENDA" components.
Value Type: TEXT Value Type: TEXT
skipping to change at page 74, line 32 skipping to change at page 72, line 26
Value Type: TEXT Value Type: TEXT
Property Parameters: Non-standard property parameters can be Property Parameters: Non-standard property parameters can be
specified on this property. specified on this property.
Conformance: This property is specified in the "VREPLY" component Conformance: This property is specified in the "VREPLY" component
that is sent in response to a "GET-CAPABILITY" command. that is sent in response to a "GET-CAPABILITY" command.
Description: This specifies the version of ITIP that the endpoint Description: This specifies the version of ITIP that the endpoint
supports. The list is a comma separated list of RFC numbers supports. The list is a comma separated list of RFC numbers
supported. The list MUST contain at least 2446. supported. The list MUST contain at least 2446 to mean [iTIP]
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
itip-version = "ITIP-VERSION" other-params ":" text CRLF itip-version = "ITIP-VERSION" other-params ":" text CRLF
Example: The following are examples of this property: Example: The following are examples of this property:
ITIP-VERSION:2446 ITIP-VERSION:2446
8.19 MAX-COMP-SIZE Property 8.19 MAX-COMP-SIZE Property
skipping to change at page 75, line 13 skipping to change at page 73, line 4
ITIP-VERSION:2446 ITIP-VERSION:2446
8.19 MAX-COMP-SIZE Property 8.19 MAX-COMP-SIZE Property
Property Name: MAX-COMP-SIZE Property Name: MAX-COMP-SIZE
Purpose: This property specifies the largest size of any object Purpose: This property specifies the largest size of any object
accepted. accepted.
Value Type: TEXT Value Type: TEXT
Property Parameters: Non-standard property parameters can be Property Parameters: Non-standard property parameters can be
specified on this property. specified on this property.
Conformance: This property is specified in the "VREPLY" component Conformance: This property is specified in the "VREPLY" component
that is sent in response to a "GET-CAPABILITY" command. that is sent in response to a "GET-CAPABILITY" command.
Description: A positive integer value that specifies the size of the Description: A positive integer value that specifies the size of the
largest iCalendar object that can be accepted in octets. Objects largest iCalendar object that can be accepted in octets. Objects
larger than this will be rejected. A value of zero (0) means no larger than this will be rejected. A value of zero (0) means no
limit. This is also the maximum value of any [BEEP] payload that limit. This is also the maximum value of any [BEEP] payload that will
will be accepted or sent. be accepted or sent.
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
max-comp-size = "MAX-COMP-SIZE" other-params ":" posint0 CRLF max-comp-size = "MAX-COMP-SIZE" other-params ":" posint0 CRLF
Example: The following are examples of this property: Example: The following are examples of this property:
MAX-COMP-SIZE:1024 MAX-COMP-SIZE:1024
8.20 MAXDATE Property 8.20 MAXDATE Property
skipping to change at page 77, line 46 skipping to change at page 75, line 34
component. component.
Value Type: TEXT Value Type: TEXT
Property Parameters: Non-standard property parameters can be Property Parameters: Non-standard property parameters can be
specified on this property. specified on this property.
Conformance: This property can be specified in a component. Conformance: This property can be specified in a component.
Description: This property is used in the in component to specify a Description: This property is used in the in component to specify a
localizable display name. If more than one "NAME" properties are in localizable display name. If more than one "NAME" properties are in a
a component, then they MUST have unique "LANG" parameters. If the component, then they MUST have unique "LANG" parameters. If the
"LANG" parameter is not supplied, then it defaults to the "VAGENDA" "LANG" parameter is not supplied, then it defaults to the "VAGENDA"
default if the component is in a "VAGENDA", or the "VCALSTORE" default if the component is in a "VAGENDA", or the "VCALSTORE"
default if the component is stored at the "VCALSTORE" level. default if the component is stored at the "VCALSTORE" level.
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
name = "NAME" nameparam ":" text CRLF name = "NAME" nameparam ":" text CRLF
nameparam = other-params [ ";" languageparam ] other-params nameparam = other-params [ ";" languageparam ] other-params
skipping to change at page 79, line 29 skipping to change at page 77, line 15
Conformance: This property can be specified in "VRIGHT" components. Conformance: This property can be specified in "VRIGHT" components.
Description: This property is used in the "VRIGHT" component to Description: This property is used in the "VRIGHT" component to
define a permission that is granted or denied. define a permission that is granted or denied.
Formal Definition: The property is defined by the following notation: Formal Definition: The property is defined by the following notation:
perm = "PERMISSION" other-params ":" permvalue CRLF perm = "PERMISSION" other-params ":" permvalue CRLF
permvalue = ( "SEARCH" / "CREATE" / "DELETE" / "MODIFY" / all ) permvalue = ( "SEARCH" / "CREATE" / "DELETE"
/ "MODIFY" / "MOVE" / all
/ iana-cmd / x-cmd )
all = "*" all = "*"
iana-cmd = ; Any command registered by IANA directly or
; included in an RFC that may be applied as
; a command.
x-cmd = ; Any experimental command that starts with
; "x-" or "X-".
Example: The following is an example of this property: Example: The following is an example of this property:
PERMISSION:SEARCH PERMISSION:SEARCH
8.26 QUERY property 8.26 QUERY property
Property Name: QUERY Property Name: QUERY
Purpose: Specifies the query for the component. Purpose: Specifies the query for the component.
skipping to change at page 81, line 11 skipping to change at page 78, line 42
queryid = "QUERYID" other-params ":" text CRLF queryid = "QUERYID" other-params ":" text CRLF
Example: The following are examples of this property: Example: The following are examples of this property:
QUERYID:Any Text String QUERYID:Any Text String
QUERYID:fetchUnProcessed QUERYID:fetchUnProcessed
8.28 REQUEST-STATUS property 8.28 REQUEST-STATUS property
This description is a revision of the "REQUEST-STATUS" property for This description is a revision of the "REQUEST-STATUS" property for
VCALENDAR version 2.0. The 'statdesc' is optional and the 'extdata' [iCAL] objects with a "VCALENDAR" component "VERSION" property that
may be included when 'statdesc' is not provided. includes a value of "2.0" or newer. The 'statdesc' is optional and
the 'extdata' may be included when 'statdesc' is not provided.
rstatus = "REQUEST-STATUS" rstatparam ":" rstatus = "REQUEST-STATUS" rstatparam ":"
statcode ";" *(statdesc ) ";" *(extdata) statcode ";" *(statdesc ) ";" *(extdata)
rstatparam = other-params [";" languageparm] other-params rstatparam = other-params [";" languageparam] other-params
statcode = 1*DIGIT *("." 1*DIGIT) statcode = 1*DIGIT *("." 1*DIGIT)
;Hierarchical, numeric return status code ;Hierarchical, numeric return status code
statdesc = text statdesc = text
;An optional textual status description, content is ;An optional textual status description, content is
;decided by the implementer. May be empty. ;decided by the implementer. May be empty.
extdata = text extdata = text
; Textual exception data. For example, the offending ; Textual exception data. For example, the offending
skipping to change at page 87, line 4 skipping to change at page 84, line 29
Property Parameters: Non-standard property parameters can be Property Parameters: Non-standard property parameters can be
specified on this property. specified on this property.
Conformance: This property can be specified in a "VREPLY" component Conformance: This property can be specified in a "VREPLY" component
in response to a "GET-CAPABILITY" command. in response to a "GET-CAPABILITY" command.
Description: If the value is TRUE then the endpoint expands Description: If the value is TRUE then the endpoint expands
recurrence rules and then stores the results into the CS. If this is recurrence rules and then stores the results into the CS. If this is
TRUE then the "RECUR-LIMIT" property is significant because an TRUE then the "RECUR-LIMIT" property is significant because an
infinitely recurring appointment will be stored no more than "RECUR- infinitely recurring appointment will be stored no more than
LIMIT" property values into the CS and all other instances will be "RECUR-LIMIT" property values into the CS and all other instances
lost. will be lost.
Formal Definition: The property is specified by the following Formal Definition: The property is specified by the following
notation: notation:
stores-expanded = "STORES-EXPANDED" other-params ":" boolean CRLF stores-expanded = "STORES-EXPANDED" other-params ":" boolean CRLF
The following is an example of this property: The following is an example of this property:
STORES-EXPANDED:TRUE STORES-EXPANDED:TRUE
STORES-EXPANDED:FALSE STORES-EXPANDED:FALSE
skipping to change at page 93, line 23 skipping to change at page 89, line 30
All "VAGENDA" component calendar CALSCALE properties MUST BE from All "VAGENDA" component calendar CALSCALE properties MUST BE from
this list. This list MUST contain at least "GREGORIAN". The this list. This list MUST contain at least "GREGORIAN". The
default for newly created "VAGENDA" components is the first entry. default for newly created "VAGENDA" components is the first entry.
RELATED-TO - This is a multiple instance property. There must be a RELATED-TO - This is a multiple instance property. There must be a
"RELATED-TO" property MUST for each of the "VAGENDA" components "RELATED-TO" property MUST for each of the "VAGENDA" components
contained in the "VCALSTORE" component each with the "RELTYPE" contained in the "VCALSTORE" component each with the "RELTYPE"
parameter value set to "CHILD". Other "RELATED-TO" properties may parameter value set to "CHILD". Other "RELATED-TO" properties may
be included. be included.
CREATED - The timestamp of the CS creation time. This is a READ CREATED - The timestamp of the CS creation time. This is a READ ONLY
ONLY property. property.
CSID - The CSID of this calendar store. MUST NOT be empty. How CSID - The CSID of this calendar store. MUST NOT be empty. How this
this property is set in the VCALSTORE is an administrative or property is set in the VCALSTORE is an administrative or
implementation specific issue and is not covered in CAP. This is implementation specific issue and is not covered in CAP. This is a
a READ ONLY property. A suggested value is the fully qualified READ ONLY property. A suggested value is the fully qualified host
host name or a fully qualified virtual host name supported by the name or a fully qualified virtual host name supported by the
system. system.
LAST-MODIFIED - The timestamp when the Properties of the "VCALSTORE" LAST-MODIFIED - The timestamp when the Properties of the "VCALSTORE"
component were last updated or calendars were created or deleted. component were last updated or calendars were created or deleted.
This is a READ ONLY PROPERTY. This is a READ ONLY PROPERTY.
calstorec = "BEGIN" ":" "VCALSTORE" CRLF calstorec = "BEGIN" ":" "VCALSTORE" CRLF
calstoreprop calstoreprop
*(vagendac) *(vagendac)
"END" ":" "VCALSTORE" CRLF "END" ":" "VCALSTORE" CRLF
skipping to change at page 96, line 15 skipping to change at page 92, line 6
BEGIN:VCAR BEGIN:VCAR
CARID:ViewStartEnd2 CARID:ViewStartEnd2
NAME:View Start and End Times 2 NAME:View Start and End Times 2
BEGIN:VRIGHT BEGIN:VRIGHT
GRANT:* GRANT:*
PERMISSION:SEARCH PERMISSION:SEARCH
SCOPE:SELECT DTSTART,DTEND FROM VEVENT SCOPE:SELECT DTSTART,DTEND FROM VEVENT
END:VRIGHT END:VRIGHT
END:VCAR END:VCAR
In these examples, full calendar access rights are given to the CAL- In these examples, full calendar access rights are given to the
OWNERS(), and a hypothetical administrator is given access rights to CAL-OWNERS(), and a hypothetical administrator is given access rights
specify calendar access rights. If no other rights are specified, to specify calendar access rights. If no other rights are specified,
only these two UPNs can specify calendar access rights: only these two UPNs can specify calendar access rights:
BEGIN:VCAR BEGIN:VCAR
CARID:some-id-3 CARID:some-id-3
NAME:Only OWNER or ADMIN Settable VCARs NAME:Only OWNER or ADMIN Settable VCARs
BEGIN:VRIGHT BEGIN:VRIGHT
GRANT:CAL-OWNERS() GRANT:CAL-OWNERS()
PERMISSION:* PERMISSION:*
SCOPE:SELECT * FROM VAGENDA SCOPE:SELECT * FROM VAGENDA
END:VRIGHT END:VRIGHT
skipping to change at page 99, line 48 skipping to change at page 95, line 36
properties and components the CS is requested to return during a properties and components the CS is requested to return during a
SEARCH command. SEARCH command.
The "QUERYID" property specifies the local identifier for a stored The "QUERYID" property specifies the local identifier for a stored
"VQUERY" component. The "NAME" property specifies a localizable "VQUERY" component. The "NAME" property specifies a localizable
display name of a stored "VQUERY" component. Normally "NAME" and display name of a stored "VQUERY" component. Normally "NAME" and
"QUERYID" properties are used when looking for a correct stored "QUERYID" properties are used when looking for a correct stored
"VQUERY" component, or when storing a "VQUERY" component. "VQUERY" component, or when storing a "VQUERY" component.
For a search, if the "TARGET" property is supplied in a "VQUERY" For a search, if the "TARGET" property is supplied in a "VQUERY"
component, then the CS is to search for the query in the calid component, then the CS is to search for the query in the CALID
supplied by the "TARGET" property value. supplied by the "TARGET" property value.
For a create the "TARGET" property MUST NOT be supplied as the For a create the "TARGET" property MUST NOT be supplied as the
destination container is already supplied in the "TARGET" property of destination container is already supplied in the "TARGET" property of
the "VCALENDAR" component. the "VCALENDAR" component.
For examples, see Section 6.1.1. For examples, see Section 6.1.1.
10. Commands and Responses 10. Commands and Responses
skipping to change at page 102, line 18 skipping to change at page 96, line 44
/ create-cmd / create-cmd
/ delete-cmd / delete-cmd
/ generate-uid-cmd / generate-uid-cmd
/ get-capability-cmd / get-capability-cmd
/ identify-cmd / identify-cmd
/ modify-cmd / modify-cmd
/ move-cmd / move-cmd
/ reply-cmd / reply-cmd
/ search-cmd / search-cmd
/ set-locale-cmd / set-locale-cmd
/ other-cmd / iana-cmd
/ x-cmd
) CRLF ) CRLF
other-cmd ; Any command published as an RFC or any
; vendor specific "x-" command.
option-value = paramtext ; As defined in [iCAL] option-value = paramtext ; As defined in [iCAL]
Calendaring commands allow a CUA to directly manipulate a calendar. Calendaring commands allow a CUA to directly manipulate a calendar.
Calendar access rights can be granted or denied for any commands. Calendar access rights can be granted or denied for any commands.
10.1.1 Bounded Latency 10.1.1 Bounded Latency
A CAP command can have an associated maximum latency time by A CAP command can have an associated maximum latency time by
specifying the "LATENCY" parameter. If the command is unable to be specifying the "LATENCY" parameter. If the command is unable to be
completed in the specified amount of time (as specified by the completed in the specified amount of time (as specified by the
"LATENCY" parameter value), then a "TIMEOUT" command MUST BE sent on "LATENCY" parameter value), then a "TIMEOUT" command MUST BE sent on
the same channel to which there MUST BE a an "ABORT" or a "CONTINUE" the same channel to which there MUST BE a an "ABORT" or a "CONTINUE"
command reply. If the CUA initiated the original command, then the command reply. If the CUA initiated the original command, then the CS
CS would issue the "TIMEOUT" command and the CUA would then have to would issue the "TIMEOUT" command and the CUA would then have to
issue an "ABORT" or "CONTINUE" command. If the CS initiated the issue an "ABORT" or "CONTINUE" command. If the CS initiated the
original command then the CUA would have to issue the "TIMEOUT" and original command then the CUA would have to issue the "TIMEOUT" and
the CS would send the "ABORT" or "CONTINUE". the CS would send the "ABORT" or "CONTINUE".
Upon receiving an "ABORT" command, the command must then be Upon receiving an "ABORT" command, the command must then be
terminated. Only the "ABORT", "TIMEOUT", "REPLY, and "CONTINUE" terminated. Only the "ABORT", "TIMEOUT", "REPLY, and "CONTINUE"
commands can not be aborted. The "ABORT", "TIMEOUT", and "REPLY" commands can not be aborted. The "ABORT", "TIMEOUT", and "REPLY"
commands MUST NOT have latency set. commands MUST NOT have latency set.
Upon receiving a "CONTINUE" command the work continues as if it had Upon receiving a "CONTINUE" command the work continues as if it had
skipping to change at page 105, line 10 skipping to change at page 99, line 29
L: BEGIN:VREPLY L: BEGIN:VREPLY
L: REQUEST-STATUS:2.0.3;Aborted As Requested. L: REQUEST-STATUS:2.0.3;Aborted As Requested.
L: END:VREPLY L: END:VREPLY
L: END:VCALENDAR L: END:VCALENDAR
10.1.2 ABORT Command 10.1.2 ABORT Command
CMD: ABORT CMD: ABORT
Purpose: The "ABORT" command is sent to request that the named or Purpose: The "ABORT" command is sent to request that the named or
only in process command be aborted. Latency MUST not be supplied only in process command be aborted. Latency MUST not be supplied with
with the "ABORT" command. the "ABORT" command.
Formal Definition: An "ABORT" command is defined by the following Formal Definition: An "ABORT" command is defined by the following
notation: notation:
abort-cmd = abortparam ":" "ABORT" abort-cmd = abortparam ":" "ABORT"
abortparam = *( abortparam = *(
; the following are optional, ; the following are optional,
; but MUST NOT occur more than once ; but MUST NOT occur more than once
skipping to change at page 109, line 39 skipping to change at page 104, line 12
; NOTE: The 'VCALSTORE' component is not included in ; NOTE: The 'VCALSTORE' component is not included in
; 'create-comp' as it is out of scope for CAP to create ; 'create-comp' as it is out of scope for CAP to create
; a new CS. ; a new CS.
; ;
create-comp = agendac / carc / queryc create-comp = agendac / carc / queryc
/ timezonec / freebusyc / timezonec / freebusyc
/ eventc / todoc / journalc / eventc / todoc / journalc
/ iana-comp / x-component / iana-comp / x-component
In the following example two new top level "VAGENDA" components are In the following example two new top level "VAGENDA" components are
created. Note that the "CSID" value of the server is created. Note that the "CSID" value of the server is cal.example.com
cal.example.com which is where the new "VAGENDA" components are which is where the new "VAGENDA" components are going to be created.
going to be created.
C: Content-Type: text/calendar C: Content-Type: text/calendar
C: C:
C: BEGIN:VCALENDAR C: BEGIN:VCALENDAR
C: PRODID:-//someone's prodid C: PRODID:-//someone's prodid
C: VERSION:2.0 C: VERSION:2.0
C: CMD;ID=creation01:CREATE C: CMD;ID=creation01:CREATE
C: TARGET:cal.example.com C: TARGET:cal.example.com
C: BEGIN:VAGENDA <- data for 1st new calendar C: BEGIN:VAGENDA <- data for 1st new calendar
C: CALID:relcalz1 C: CALID:relcalz1
skipping to change at page 111, line 34 skipping to change at page 105, line 43
C: SUMMARY:Important Meeting C: SUMMARY:Important Meeting
C: END:VEVENT C: END:VEVENT
C: BEGIN:VEVENT C: BEGIN:VEVENT
C: DTSTART:20040307T180000Z C: DTSTART:20040307T180000Z
C: UID:SecondInThisExample-2 C: UID:SecondInThisExample-2
C: DTEND:20040307T190000Z C: DTEND:20040307T190000Z
C: SUMMARY:Important Meeting C: SUMMARY:Important Meeting
C: END:VEVENT C: END:VEVENT
C: END:VCALENDAR C: END:VCALENDAR
The CS could send the "VREPLY" commands in separate MIME objects, one The CS sends the "VREPLY" commands in separate MIME objects, one per
per supplied "TARGET" property value. supplied "TARGET" property value.
S: Content-Type: text/calendar S: Content-Type: text/calendar
S: S:
S: BEGIN:VCALENDAR S: BEGIN:VCALENDAR
S: VERSION:2.0 S: VERSION:2.0
S: PRODID:-//someone's prodid S: PRODID:-//someone's prodid
S: CMD;ID=creation02:REPLY S: CMD;ID=creation02:REPLY
S: TARGET:relcalz1 <- 1st TARGET listed. S: TARGET:relcalz1 <- 1st TARGET listed.
S: BEGIN:REPLY <- Reply for 1st VEVENT create in 1st TARGET. S: BEGIN:REPLY <- Reply for 1st VEVENT create in 1st TARGET.
S: UID:FirstInThisExample-1 S: UID:FirstInThisExample-1
S: REQUEST-STATUS:2.0 S: REQUEST-STATUS:2.0
S: END:VREPLY S: END:VREPLY
S: BEGIN:REPLY <- Reply for 2nd VEVENT crate in 1st TARGET. S: BEGIN:REPLY <- Reply for 2nd VEVENT crate in 1st TARGET.
skipping to change at page 113, line 43 skipping to change at page 107, line 42
/ other-params / other-params
) )
The "DELETE" command is used to delete calendars or components. The The "DELETE" command is used to delete calendars or components. The
included "VQUERY" component(s) specifies the container(s) to delete. included "VQUERY" component(s) specifies the container(s) to delete.
If a component is to be marked for delete and not physically removed, If a component is to be marked for delete and not physically removed,
then include the "OPTIONS" parameter with its value set to the "MARK" then include the "OPTIONS" parameter with its value set to the "MARK"
value in order to alter its state to "DELETED". value in order to alter its state to "DELETED".
When components are deleted, only the top most component "REQUEST- When components are deleted, only the top most component
STATUS" properties are returned. No "REQUEST-STATUS" properties are "REQUEST-STATUS" properties are returned. No "REQUEST-STATUS"
returned for components inside of the selected components. There properties are returned for components inside of the selected
MUST BE one "VREPLY" component returned for each object that is components. There MUST BE one "VREPLY" component returned for each
deleted or marked for delete. Note that if no "VREPLY" components object that is deleted or marked for delete. Note that if no "VREPLY"
are returned then nothing matched and nothing was deleted. components are returned then nothing matched and nothing was deleted.
Restriction Table for the "REPLY" command for any "DELETE" command. Restriction Table for the "REPLY" command for any "DELETE" command.
delete-reply = "BEGIN" ":" "VCALENDAR" CRLF delete-reply = "BEGIN" ":" "VCALENDAR" CRLF
calprops ; MUST include 'reply-cmd' calprops ; MUST include 'reply-cmd'
*(delete-vreply) *(delete-vreply)
"END" ":" "VCALENDAR" CRLF "END" ":" "VCALENDAR" CRLF
delete-vreply = "BEGIN" ":" "VREPLY" CRLF delete-vreply = "BEGIN" ":" "VREPLY" CRLF
deleted-id deleted-id
skipping to change at page 121, line 4 skipping to change at page 114, line 24
; when the latency-param has been supplied and ; when the latency-param has been supplied and
; MUST NOT be supplied if the latency-param is ; MUST NOT be supplied if the latency-param is
; not supplied. ; not supplied.
/ action-param / action-param
; the following is optional, ; the following is optional,
; and MAY occur more than once ; and MAY occur more than once
/ other-params / other-params
; The value is the UPN of the requested ; The value is the UPN of the requested
; identity. If not supplied it is a request ; identity. If option is not supplied it is
; to return to the original authenticated identity. ; a request to return to the original authenticated
; identity.
/ option-param upn / option-param upn
) )
Response: Response:
"REQUEST-STATUS" with only one of the following A "REQUEST-STATUS" property wrapped in a "VREPLY" component with only one of the following
request-status codes: request-status codes:
2.0 Successful. 2.0 Successful.
6.4 Identity not permitted. VCAR restriction. 6.4 Identity not permitted. VCAR restriction.
The CS determines through an internal mechanism if the credentials The CS determines through an internal mechanism if the credentials
supplied at authentication permit the operation as the selected supplied at authentication permit the operation as the selected
identity. If they do, the session assumes the new identity, identity. If they do, the session assumes the new identity, otherwise
otherwise a security error is returned. a security error is returned.
Example: Example:
C: Content-Type: text/calendar C: Content-Type: text/calendar
C: C:
C: BEGIN:VCALENDAR C: BEGIN:VCALENDAR
C: VERSION:2.0 C: VERSION:2.0
C: PRODID:-//someone's prodid C: PRODID:-//someone's prodid
C: CMD;ID=unique-per-cua-999;OPTIONS=newUserId:IDENTIFY C: CMD;ID=unique-per-cua-999;OPTIONS=newUserId:IDENTIFY
C: END:VCALENDAR C: END:VCALENDAR
skipping to change at page 124, line 16 skipping to change at page 117, line 30
Where "XXX" above is a named component type (VEVENT, VTODO, ...). Where "XXX" above is a named component type (VEVENT, VTODO, ...).
Both the old and new components MUST BE of the same type. Both the old and new components MUST BE of the same type.
The old-values is a component and the contents of that component are The old-values is a component and the contents of that component are
going to change and may contain information that helps uniquely going to change and may contain information that helps uniquely
identify the original component (SEQUENCE in the example below). If identify the original component (SEQUENCE in the example below). If
the CS can not find a component that matches the QUERY and does not the CS can not find a component that matches the QUERY and does not
have at least all of the OLD-VALUES, then a 6.1 error is returned. have at least all of the OLD-VALUES, then a 6.1 error is returned.
The new-values is a component of the same type as old-values and new- The new-values is a component of the same type as old-values and
values contains the new data for each selected component. Any data new-values contains the new data for each selected component. Any
that is in old-values and not in new-values is deleted from the data that is in old-values and not in new-values is deleted from the
selected component. Any values in new-values that was not in old- selected component. Any values in new-values that was not in
values is added to the component. old-values is added to the component.
In this example the "VEVENT" component with a "UID" property value of In this example the "VEVENT" component with a "UID" property value of
'unique-58' has; the "LOCATION" property and "LAST-MODIFIED" property 'unique-58' has; the "LOCATION" property and "LAST-MODIFIED" property
changed, the "VALARM" component with the "SEQUENCE" property with a changed, the "VALARM" component with the "SEQUENCE" property with a
value of "3" has its "TRIGGER" property disabled, the "X-LOCAL" value of "3" has its "TRIGGER" property disabled, the "X-LOCAL"
property is removed from the "VEVENT" component, and a "COMMENT" property is removed from the "VEVENT" component, and a "COMMENT"
property is added. property is added.
Because "SEQUENCE" property is used to locate the "VALARM" component Because "SEQUENCE" property is used to locate the "VALARM" component
in this example, both the old-values and the new-values contain the in this example, both the old-values and the new-values contain the
skipping to change at page 125, line 46 skipping to change at page 118, line 44
The "X-LOCAL" property was not supplied in the new-values, so it was The "X-LOCAL" property was not supplied in the new-values, so it was
deleted. The "LOCATION" property value was altered, as was the deleted. The "LOCATION" property value was altered, as was the
"LAST-MODIFIED" value. The "VALARM" component with a "SEQUENCE" "LAST-MODIFIED" value. The "VALARM" component with a "SEQUENCE"
property value of "3" had its "TRIGGER" property disabled, and the property value of "3" had its "TRIGGER" property disabled, and the
"SEQUENCE" property value did not change so it was not effected. The "SEQUENCE" property value did not change so it was not effected. The
"COMMENT" property was added. "COMMENT" property was added.
When it comes to inline ATTACHMENTs, the CUA only needs to uniquely When it comes to inline ATTACHMENTs, the CUA only needs to uniquely
identify the contents of the ATTACHMENT value in the old-values in identify the contents of the ATTACHMENT value in the old-values in
order to delete them. When the CS compares the attachment data it is order to delete them. When the CS compares the attachment data it is
compared in its binary form. The ATTACHMENT value supplied by the compared in its binary form. The ATTACHMENT value supplied by the CUA
CUA MUST BE valid encoded information. MUST BE valid encoded information.
For example, to delete the same huge inline attachment from every For example, to delete the same huge inline attachment from every
VEVENT in 'my-cal' that has an "ATTACH" property value with the old- VEVENT in 'my-cal' that has an "ATTACH" property value with the
values: old-values:
BEGIN:VCALENDAR BEGIN:VCALENDAR
VERSION:2.0 VERSION:2.0
PRODID:-//someone's prodid PRODID:-//someone's prodid
TARGET:my-cal TARGET:my-cal
CMD:MODIFY CMD:MODIFY
BEGIN:VQUERY BEGIN:VQUERY
QUERY:SELECT ATTACH FROM VEVENT QUERY:SELECT ATTACH FROM VEVENT
END:VQUERY END:VQUERY
BEGIN:VEVENT BEGIN:VEVENT
skipping to change at page 126, line 36 skipping to change at page 119, line 36
Furthermore, the following additional restrictions apply: Furthermore, the following additional restrictions apply:
1. One can not change the "UID" property of a component. 1. One can not change the "UID" property of a component.
2. If a contained component is changed inside of a selected 2. If a contained component is changed inside of a selected
component, and that contained component has multiple instances, component, and that contained component has multiple instances,
then old-values MUST contain information that uniquely identifies then old-values MUST contain information that uniquely identifies
the instance or instances that are changing. It is valid to the instance or instances that are changing. It is valid to
change more than one. As all contained components that match change more than one. As all contained components that match
old-values will be modified. In the first modify example above, old-values will be modified. In the first modify example above,
if "SEQUENCE" properties were to be deleted from both the old- if "SEQUENCE" properties were to be deleted from both the
values and new-values, then all "TRIGGER" properties that matched old-values and new-values, then all "TRIGGER" properties that
the old-values in all "VALARM" components in the selected matched the old-values in all "VALARM" components in the selected
"VEVENT" components would be disabled. "VEVENT" components would be disabled.
3. The result of the modify MUST BE a valid iCalendar object. 3. The result of the modify MUST BE a valid iCalendar object.
Response: Response:
A "VCALENDAR" component is returns with one ore more "REQUEST-STATUS" A "VCALENDAR" component is returns with one ore more "REQUEST-STATUS"
property values. property values.
If any error occurred: If any error occurred:
skipping to change at page 128, line 38 skipping to change at page 121, line 30
) )
Response: Response:
The REQUEST-STATUS in a VCALENDAR object. The REQUEST-STATUS in a VCALENDAR object.
The content of each "result" is subject to the result restriction The content of each "result" is subject to the result restriction
table defined below. table defined below.
The access control on the "VAGENDA" component after it has been moved The access control on the "VAGENDA" component after it has been moved
to its new location in the calstore MUST BE at least as secure as it to its new location in the calstore MUST BE at least as secure as it
was prior to the move. If the CS is not able to ensure the same was prior to the move. If the CS is not able to ensure the same level
level of security, a permission denied "REQUEST-STATUS" property of security, a permission denied "REQUEST-STATUS" property value MUST
value MUST BE returned and the "MOVE" command not performed. BE returned and the "MOVE" command not performed.
The "TARGET" property value specifies the new location, and the The "TARGET" property value specifies the new location, and the
"VQUERY" component specifies the old location. "VQUERY" component specifies the old location.
Restriction Table for the "REPLY" command of any "MOVE" command. Restriction Table for the "REPLY" command of any "MOVE" command.
move-reply = "BEGIN" ":" "VCALENDAR" CRLF move-reply = "BEGIN" ":" "VCALENDAR" CRLF
calprops calprops
1*(move-vreply) 1*(move-vreply)
"END" ":" "VCALENDAR" CRLF "END" ":" "VCALENDAR" CRLF
skipping to change at page 132, line 32 skipping to change at page 124, line 33
; the following is optional, ; the following is optional,
; and MAY occur more than once ; and MAY occur more than once
/ other-params / other-params
) )
Response: Response:
The data in each result contains an iCalendar object composed of all The data in each result set contains one or more iCalendar components
the selected components enclosed in a "VREPLY" component. Only composed of all the selected results enclosed in a single "VREPLY"
"REQUEST-STATUS" property and the properties mentioned in the component per "QUERY".
Only "REQUEST-STATUS" property and the properties mentioned in the
"SELECT" clause of the QUERY are included in the components. Each "SELECT" clause of the QUERY are included in the components. Each
iCalendar object is tagged with the "TARGET" property. "VCALENDAR" component is tagged with the "TARGET" property.
Searching for objects Searching for objects
In the example below objects on March 10,1999 between 080000Z and In the example below objects on March 10,1999 between 080000Z and
190000Z are read. In this case only 4 properties for each objects 190000Z are read. In this case only 4 properties for each objects are
are returned. Two calendars are specified. Only booked (vs returned. Two calendars are specified. Only booked (vs scheduled)
scheduled) entries are to be returned (this example only selected entries are to be returned (this example only selected VEVENT
VEVENT objects): objects):
C: Content-Type: text/calendar C: Content-Type: text/calendar
C: C:
C: BEGIN:VCALENDAR C: BEGIN:VCALENDAR
C: VERSION:2.0 C: VERSION:2.0
C: PRODID:-//someone's prodid C: PRODID:-//someone's prodid
C: CMD:SEARCH C: CMD:SEARCH
C: TARGET:relcal2 C: TARGET:relcal2
C: TARGET:relcal3 C: TARGET:relcal3
C: BEGIN:VQUERY C: BEGIN:VQUERY
C: QUERY:SELECT DTSTART,DTEND,SUMMARY,UID C: QUERY:SELECT DTSTART,DTEND,SUMMARY,UID
C: FROM VEVENT C: FROM VEVENT
C: WHERE DTEND >= '19990310T080000Z' C: WHERE DTEND >= '19990310T080000Z'
C: AND DTSTART <= '19990310T190000Z' C: AND DTSTART <= '19990310T190000Z'
C: AND STATE() = 'BOOKED' C: AND STATE() = 'BOOKED'
C: END:VQUERY C: END:VQUERY
C: END:VCALENDAR C: END:VCALENDAR
The return values are subject to VCAR filtering. That is, if the The return values are subject to VCAR filtering. That is, if the
request contains properties to which the UPN does not have access, request contains properties to which the UPN does not have access,
those properties will not appear in the return values. If the UPN those properties will not appear in the return values. If the UPN has
has access to at least one property of the component, but has been access to at least one property of the component, but has been denied
denied access to all properties called out in the request, the access to all properties called out in the request, the response will
response will contain a single "REQUEST-STATUS" property indicating contain a single "REQUEST-STATUS" property indicating the error.
the error.
Here the request was successful, but the "VEVENT" component contents Here the request was successful, however one of the "VEVENT"
were not accessible (4.1). components contents were not accessible (4.1).
S: Content-Type: text/calendar S: Content-Type: text/calendar
S: S:
S: BEGIN:VCALENDAR S: BEGIN:VCALENDAR
S: TARGET:relcalid S: TARGET:relcalid
S: CMD:REPLY S: CMD:REPLY
S: VERSION:2.0 S: VERSION:2.0
S: PRODID:-//someone's prodid S: PRODID:-//someone's prodid
S: BEGIN:VREPLY S: BEGIN:VREPLY
S: BEGIN:VEVENT S: BEGIN:VEVENT
S: REQUEST-STATUS:4.1 S: REQUEST-STATUS:4.1
S: END:VEVENT S: END:VEVENT
S: BEGIN:VEVENT
S: REQUEST-STATUS:2.0
S: UID:123
S: DTEND:19990310T080000Z
S: DSTART:19990310T190000Z
S: SUMMARY: Big meeting
S: END:VEVENT
S: END:VREPLY S: END:VREPLY
S: END:VCALENDAR S: END:VCALENDAR
If the UPN has no access to any components at all, the response will If the UPN has no access to any components at all, the response will
simply be an empty data set. The response looks the same if there simply be an empty data set. The response looks the same if there
the particular components did not exist. the particular components did not exist.
S: Content-Type: text/calendar S: Content-Type: text/calendar
S: S:
S: BEGIN:VCALENDAR S: BEGIN:VCALENDAR
skipping to change at page 134, line 23 skipping to change at page 126, line 28
S: REQUEST-STATUS:2.0 S: REQUEST-STATUS:2.0
S: END:VREPLY S: END:VREPLY
S: END:VCALENDAR S: END:VCALENDAR
If there are multiple targets, each iCalendar reply is contained If there are multiple targets, each iCalendar reply is contained
within its own iCalendar object. within its own iCalendar object.
Stored VQUERY can be used by specifying the property QUERYID instead Stored VQUERY can be used by specifying the property QUERYID instead
of QUERY. of QUERY.
10.8.1 Searching for VFREEBUSY
For CSs that set the "CAPABILITY" "RECUR-EXPAND" property to "TRUE"
and have the "VFREEBUSY" component in the "COMPONENTS" value in the
"CAPABILITY" reply, the CS MUST dynamically create the results of a
search for the "VFREEBUSY" component at search time when searching
for STATE() = 'BOOKED' items. If searching for STATE() =
'UNPROCESSED' items then the [iTIP] object are returned. For these
CSs it is the the CS is responsibility and not the CUAs
responsibility to provide the correct "VFREEBUSY" information for a
calendar. If a CUA performs a "CREATE" "VFREEBUSY" the CS MUST
return success and not store the "VFREEBUSY" component.
For CSs that set the "CAPABILITY" "RECUR-EXPAND" property to "FALSE"
and have the "VFREEBUSY" component in the "COMPONENTS" value in the
"CAPABILITY" reply, a CUA MAY store the "VFREEBUSY" information on
the CS. These CSs then MUST return a "VFREEBUSY" component calculated
from the stored components. If no "VFREEBUSY" information is
available for the "TARGET" calendar, then a "VFREEBUSY" with no
blocked out time will be returned with a success code. A CUA sets the
"VFREEBUSY" time on a those calendars by creating a "VFREEBUSY"
component without a "METHOD" creating a "BOOKED" entry.
If a CS does not set the "VFREEBUSY" value in the "COMPONENTS"
"CAPABILITY" value, the CS does not support the "VFREEBUSY" component
and all creation and searching for a "VFREEBUSY" component MUST fail.
Examples of calendars that may be in this category are public event
calendars that will never require scheduling with other UPNs.
10.9 SET-LOCALE Command 10.9 SET-LOCALE Command
CMD: SET-LOCALE CMD: SET-LOCALE
Purpose: The "SET-LOCALE" command is used to select the locale that Purpose: The "SET-LOCALE" command is used to select the locale that
will be used in error codes used in the "REQUEST-STATUS" property. will be used in error codes used in the "REQUEST-STATUS" property.
It also effect the locale sorting order for queries.
A CUA MAY send a "SET-LOCALE" command to a CS. The SET-LOCALE A CUA MAY send a "SET-LOCALE" command to a CS. The SET-LOCALE command
command MUST BE implemented by all CSs. MUST BE implemented by all CSs.
The CS MUST NOT send a "SET-LOCALE" command to any CUA. The CS MUST NOT send a "SET-LOCALE" command to any CUA.
Formal Definition: A "SET-LOCALE" command is defined by the following Formal Definition: A "SET-LOCALE" command is defined by the following
notation: notation:
setlocale-cmd = setlocaleparam ":" "SET-LOCALE" setlocale-cmd = setlocaleparam ":" "SET-LOCALE"
setlocaleparam = *( setlocaleparam = *(
skipping to change at page 139, line 14 skipping to change at page 131, line 14
11. Object Registration 11. Object Registration
This section provides the process for registration of new or modified This section provides the process for registration of new or modified
properties, parameters, commands, or other modifications, additions, properties, parameters, commands, or other modifications, additions,
or deletions to objects. or deletions to objects.
11.1 Registration of New and Modified Entities 11.1 Registration of New and Modified Entities
New objects are registered by the publication of an IETF Request for New objects are registered by the publication of an IETF Request for
Comment (RFC). Changes to a objects are registered by the Comment (RFC). Changes to a objects are registered by the publication
publication of a revision to the RFC in a new RFC. of a revision to the RFC in a new RFC.
11.2 Post the item definition 11.2 Post the item definition
The object description MUST BE posted to the new object discussion The object description MUST BE posted to the new object discussion
list: ietf-calendar@imc.org. list: ietf-calendar@imc.org.
11.3 Allow a comment period 11.3 Allow a comment period
Discussion on a new object MUST BE allowed to take place on the list Discussion on a new object MUST BE allowed to take place on the list
for a minimum of two weeks. Consensus MUST BE reached on the object for a minimum of two weeks. Consensus MUST BE reached on the object
skipping to change at page 141, line 11 skipping to change at page 133, line 11
exchange or a one-to-many exchange. "MSG/ERR" MAY only be used when exchange or a one-to-many exchange. "MSG/ERR" MAY only be used when
an error condition prevents the execution of the request on all the an error condition prevents the execution of the request on all the
targeted calendars. targeted calendars.
13. IANA Considerations 13. IANA Considerations
This memo defines IANA registered extensions to the attributes This memo defines IANA registered extensions to the attributes
defined by iCalendar, as defined in [iCAL], and [iTIP]. defined by iCalendar, as defined in [iCAL], and [iTIP].
IANA registration proposals for iCalendar and [iTIP] are to be mailed IANA registration proposals for iCalendar and [iTIP] are to be mailed
to the registration agent for the "text/calendar" [MIME] content- to the registration agent for the "text/calendar" [MIME]
type, <MAILTO: ietf-calendar@imc.org> using the format defined in content-type, <MAILTO: ietf-calendar@imc.org> using the format
section 7 of [iCAL]. defined in section 7 of [iCAL].
If the IESG approves this memo for publication, then the IANA If the IESG approves this memo for publication, then the IANA
registers the profile specified in Section 12.1, and selects an IANA- registers the profile specified in Section 12.1, and selects an
specific URI, e.g., http://iana.org/beep/cap/1.0. IANA-specific URI, e.g., http://iana.org/beep/cap/1.0.
14. Security Considerations 14. Security Considerations
Access rights should be granted cautiously, consult Section 2.4.2 for Access rights should be granted cautiously, consult Section 2.4.2 for
a discussion of the subject. Without careful planning it is possible a discussion of the subject. Without careful planning it is possible
to open up access to a greater degree than desired. to open up access to a greater degree than desired.
The "IDENTIFY" command should be carefully implemented as discussed The "IDENTIFY" command should be carefully implemented as discussed
in Section 6.1.3. in Section 6.1.3.
skipping to change at page 146, line 25 skipping to change at page 138, line 25
[CHARPOL] Alvestrand, H., "IETF Policy on Character Sets and Languages", [CHARPOL] Alvestrand, H., "IETF Policy on Character Sets and Languages",
RFC 2277, January 1998, RFC 2277, January 1998,
ftp://ftp.isi.edu/in-notes/rfc2277.txt ftp://ftp.isi.edu/in-notes/rfc2277.txt
[GUIDE] Mahoney, B., Babics, G., Taler, A. "Guide to Internet [GUIDE] Mahoney, B., Babics, G., Taler, A. "Guide to Internet
Calendaring", RFC 3283, June 2002, Calendaring", RFC 3283, June 2002,
ftp://ftp.isi.edu/in-notes/rfc3283.txt ftp://ftp.isi.edu/in-notes/rfc3283.txt
[iCAL] Dawson, F. and Stenerson, D., "Internet Calendaring and [iCAL] Dawson, F. and Stenerson, D., "Internet Calendaring and
Scheduling Core Object Specification (iCalendar)", RFC 2445, Scheduling Core Object Specification (iCalendar)", RFC 2445,
November 1998 ftp://ftp.isi.edu/in-notes/rfc2245.txt November 1998 ftp://ftp.isi.edu/in-notes/rfc2445.txt
[iTIP] Silverberg, S., Mansour, S., Dawson, F. and Hopson, R., [iTIP] Silverberg, S., Mansour, S., Dawson, F. and Hopson, R.,
"iCalendar Transport-Independent Interoperability Protocol "iCalendar Transport-Independent Interoperability Protocol
(iTIP) Events, BusyTime, To-dos and Journal Entries", (iTIP) Events, BusyTime, To-dos and Journal Entries",
RFC 2446, November 1998 ftp://ftp.isi.edu/in-notes/rfc2446.txt RFC 2446, November 1998 ftp://ftp.isi.edu/in-notes/rfc2446.txt
[iMIP] Dawson, F., Mansour, S. and Silverberg, "iCalendar [iMIP] Dawson, F., Mansour, S. and Silverberg, "iCalendar
Message-Based Interoperability Protocol (iMIP)", RFC 2447, Message-Based Interoperability Protocol (iMIP)", RFC 2447,
November 1998 ftp://ftp.isi.edu/in-notes/rfc2447.txt November 1998 ftp://ftp.isi.edu/in-notes/rfc2447.txt
skipping to change at page 148, line 5 skipping to change at page 140, line 5
[URL] Berners-Lee, T, Masinter, L. and McCahil, M., "Uniform [URL] Berners-Lee, T, Masinter, L. and McCahil, M., "Uniform
Resource Locators (URL)", RFC 1738, December 1994 Resource Locators (URL)", RFC 1738, December 1994
ftp://ftp.isi.edu/in-notes/rfc1738.txt ftp://ftp.isi.edu/in-notes/rfc1738.txt
[X509CRL] Housley, R., Ford, W., Polk, W., Solo, D. "Internet X.509 [X509CRL] Housley, R., Ford, W., Polk, W., Solo, D. "Internet X.509
Public Key Infrastructure, Certificate and CRL Profile", Public Key Infrastructure, Certificate and CRL Profile",
RFC 2459, January 1999, RFC 2459, January 1999,
ftp://ftp.isi.edu/in-notes/rfc2459.txt ftp://ftp.isi.edu/in-notes/rfc2459.txt
Intellectual Property Statement
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; neither does it represent that it
has made any effort to identify any such rights. Information on the
IETF's procedures with respect to rights in standards-track and
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances of
licenses to be made available, or the result of an attempt made to
obtain a general license or permission for the use of such
proprietary rights by implementors or users of this specification can
be obtained from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights which may cover technology that may be required to practice
this standard. Please address the information to the IETF Executive
Director.
Full Copyright Statement Full Copyright Statement
Copyright (C) The Internet Society (2003). All Rights Reserved. Copyright (C) The Internet Society (2003). All Rights Reserved.
This document and translations of it may be copied and furnished to This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than followed, or as required to translate it into languages other than
English. English.
The limited permissions granted above are perpetual and will not be The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns. revoked by the Internet Society or its successors or assignees.
This document and the information contained herein is provided on an This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgement Acknowledgment
Funding for the RFC Editor function is currently provided by the Funding for the RFC Editor function is currently provided by the
Internet Society. Internet Society.
 End of changes. 208 change blocks. 
658 lines changed or deleted 661 lines changed or added

This html diff was produced by rfcdiff 1.34. The latest version is available from http://tools.ietf.org/tools/rfcdiff/