Internet Draft CAP March 10, 2000 Network Working Group Steve Mansour/Netscape Internet Draft Frank Dawson/Lotus Doug Royer/Software.com Alexander Taler/CS&T Paul Hill/MIT Expires six months from: March 10, 2000 Calendar Access Protocol (CAP) Status of this Memo This memo is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet- Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt . The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. Distribution of this document is unlimited. Copyright Statement Copyright (C) The Internet Society 2000. All Rights Reserved. Abstract The Calendar Access Protocol (CAP) is an Internet protocol that permits a Calendar User (CU) to utilize a Calendar User Agent (CUA) to access an [RFC2445] based Calendar Store (CS). This memo defines the CAP specification. The CAP definition is based on requirements identified by the Internet Engineering Task Force (IETF) Calendaring and Scheduling (CALSCH) Working Group. More information about the IETF CALSCH 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 Mansour/Dawson/Royer/Taler/Hill 1 Expires September 2000 Internet Draft CAP March 10, 2000 http://www.ietf.org/html.charters/calsch-charter.html. Refer to the references within this memo for further information on how to access these various documents. Mansour/Dawson/Royer/Taler/Hill 2 Expires September 2000 Internet Draft CAP March 10, 2000 Table of Contents 1. Introduction ................................................... 3 1.1. Formatting Conventions ....................................... 3 1.2. Related Documents ............................................ 3 1.3. Definitions .................................................. 4 2. CAP Design ..................................................... 10 2.1. System Model ................................................. 10 2.2. Calendar Store Object Model .................................. 11 2.3. Protocol Model ............................................... 11 2.4. Security Model ............................................... 13 2.4.1. Authentication, Credentials, and Identity .................. 14 2.4.2. Calendar User and UPNs ..................................... 14 2.4.2.1. UPNs and Certificates .................................... 15 2.4.2.2. Anonymous Users and Authentication ....................... 16 2.4.2.3. Required Security Mechanisms ............................. 16 2.4.2.4. TLS Ciphersuites ......................................... 17 2.4.3. User Groups ................................................ 17 2.4.4. Access Rights .............................................. 18 2.4.4.1. VCalendar Access Right (VCAR) ........................... 18 2.4.4.2. Decreed VCARs ............................................ 19 2.4.4.3. Inheritance .............................................. 19 2.4.5. CAP session identity ....................................... 19 2.5. Roles ........................................................ 20 2.6. Calendar Addresses ........................................... 21 2.7. Extensions to iCalendar ...................................... 21 2.8. Relationship of RFC 2446 (ITIP) to CAP ....................... 22 2.9. VCalendar Access Rights (VCARs) .............................. 23 2.10. Query Schema ................................................ 23 3. State Diagram .................................................. 23 4. Protocol Framework ............................................. 25 4.1. CAP Application Layer ........................................ 25 4.2. CAP Transfer Protocol ........................................ 25 4.3. Response Format .............................................. 25 4.4. Auto-logout Timer ............................................ 26 4.5. Bounded Latency .............................................. 26 4.6. Data Elements ................................................ 27 5. Formal Command Syntax .......................................... 27 5.1. Searching and Filtering ...................................... 27 5.1.1. Grammar For Search Mechanism ............................... 27 6. Access Rights .................................................. 28 6.1. VCAR Inheritance ............................................. 28 6.2. Access Control and NOCONFLICT ................................ 28 7. Commands and Responses ......................................... 29 7.1. Transfer Protocol Commands ................................... 29 7.1.1. Initial Connection ......................................... 29 7.1.2. ABORT Command .............................................. 30 7.1.3. AUTHENTICATE Command ....................................... 30 7.1.3.1. AUTHENTICATE ANONYMOUS ................................... 33 7.1.4. CALIDEXPAND Command ........................................ 34 7.1.5. CAPABILITY Command ......................................... 35 7.1.6. CONTINUE Command ........................................... 36 7.1.7. DISCONNECT Command ......................................... 37 7.1.8. IDENTIFY Command ........................................... 38 Mansour/Dawson/Royer/Taler/Hill Expires September 2000 Internet Draft CAP March 10, 2000 7.1.9. SENDDATA Command ........................................... 38 7.1.10. STARTTLS Command .......................................... 38 7.1.10.1. UPNEXPAND Method ........................................ 39 7.2. Application Protocol Commands ................................ 40 7.2.1. Calendaring Commands ....................................... 40 7.2.1.1. CREATE Method ............................................ 40 7.2.1.1.1. Creating New Calendars ................................. 41 7.2.1.2. DELETE Method ............................................ 43 7.2.1.3. GENERATEUID Method ....................................... 44 7.2.1.4. MODIFY Method ............................................ 44 7.2.1.5. MOVE Method .............................................. 45 7.2.1.6. NOOP Method .............................................. 46 7.2.1.7. READ Method .............................................. 46 7.2.2. Scheduling Commands ........................................ 50 7.2.2.1. Reading out scheduling components ........................ 50 7.2.2.2. PUBLISH .................................................. 51 7.2.2.3. REQUEST .................................................. 52 7.2.2.4. REPLY .................................................... 52 7.2.2.5. ADD ...................................................... 52 7.2.2.6. CANCEL ................................................... 52 7.2.2.7. REFRESH .................................................. 52 7.2.2.8. COUNTER .................................................. 52 7.2.2.9. DECLINECOUNTER ........................................... 52 7.2.3. iTIP Examples .............................................. 52 7.2.3.1. Sending and Receiving an iTIP request .................... 52 7.2.3.2. Handling an iTIP refresh ................................. 55 7.2.3.3. Sending and accepting an iTIP counter .................... 56 7.2.3.4. Declining an iTIP counter ................................ 57 8. Response Codes ................................................. 58 8.1. Minimum CS query implementation .............................. 60 8.1.1. Query by UID ............................................... 60 8.1.2. Query by Date / Date-Time range ............................ 60 8.1.2.1. Date/Date-Time query with subset of properties ........... 60 8.1.3. ...................................................... 60 9. Detailed SQL Schema ............................................ 60 9.1. iCalendar Store Schema ....................................... 62 9.1.1. ACTION schema .............................................. 62 9.1.2. ATTACH schema .............................................. 63 9.1.3. ATTENDEE schema ............................................ 63 9.1.4. CALSTORE schema ............................................ 63 9.1.5. CHILDREN schema ............................................ 64 9.1.6. CLASS schema ............................................... 64 9.1.7. CN schema .................................................. 64 9.1.8. COMMENT schema ............................................. 64 9.1.9. CONTACT schema ............................................. 64 9.1.10. CREATED schema ............................................ 65 9.1.11. CUTYPE schema ............................................. 65 9.1.12. DAYLIGHT_STANDARD schema .................................. 65 9.1.13. DESCRIPTION schema ........................................ 65 9.1.14. DIR schema ................................................ 66 9.1.15. DTEND schema .............................................. 66 9.1.16. DTSTAMP schema ............................................ 66 9.1.17. DUE schema ................................................ 66 Mansour/Dawson/Royer/Taler/Hill Expires September 2000 Internet Draft CAP March 10, 2000 9.1.18. DURATION schema ........................................... 67 9.1.19. EXDATE schema ............................................. 67 9.1.20. EXRULE schema ............................................. 67 9.1.21. FBTYPE schema ............................................. 67 9.1.22. FMTTYPE schema ............................................ 67 9.1.23. FREEBUSY schema ........................................... 68 9.1.24. GEO schema ................................................ 68 9.1.25. LANGUAGE schema ........................................... 68 9.1.26. LAST_MODIFIED schema ...................................... 68 9.1.27. MEMBER schema ............................................. 68 9.1.28. METHOD schema ............................................. 69 9.1.29. ORGANIZER schema .......................................... 69 9.1.30. OWNERS schema ............................................. 69 9.1.31. PARTSTAT schema ........................................... 69 9.1.32. PERCENT_COMPLETE schema ................................... 70 9.1.33. PRIORITY schema ........................................... 70 9.1.34. RDATE schema .............................................. 70 9.1.35. RECUR schema .............................................. 70 9.1.36. RECURRENCE_ID schema ...................................... 71 9.1.37. RELATED_TO schema ......................................... 72 9.1.38. REPEAT schema ............................................. 72 9.1.39. RESOURCES schema .......................................... 72 9.1.40. ROLE schema ............................................... 72 9.1.41. RRULE schema .............................................. 73 9.1.42. SEQUENCE schema ........................................... 73 9.1.43. STATUS schema ............................................. 73 9.1.44. SUMMARY schema ............................................ 73 9.1.45. TRANSP schema ............................................. 73 9.1.46. TRIGGER schema ............................................ 74 9.1.47. TZID schema ............................................... 74 9.1.48. UID schema ................................................ 74 9.1.49. URL schema ................................................ 74 9.1.50. VALARM schema ............................................. 75 9.1.51. VCALENDAR schema .......................................... 75 9.1.52. VCAR schema ............................................... 75 9.1.53. VEVENT schema ............................................. 75 9.1.54. VFREEBUSY schema .......................................... 76 9.1.55. VJOURNAL schema ........................................... 77 9.1.56. VQUERY schema ............................................. 77 9.1.57. VTIMEZONE schema .......................................... 78 9.1.58. VTODO schema .............................................. 78 9.1.59. X_PROP schema ............................................. 79 9.1.60. XPARAM schema ............................................. 79 9.2. Query example ................................................ 79 10. Examples ...................................................... 79 10.1. Authentication Examples ..................................... 79 10.1.1. Login Using Kerberos V4 ................................... 79 10.1.2. Error Scenarios ........................................... 80 10.2. Read Examples ............................................... 81 10.2.1. Read From A Single Calendar ............................... 81 10.2.2. Read From Multiple Calendars .............................. 82 10.2.3. Timeouts .................................................. 83 10.2.4. Using the Calendar Parent, Children Properties ............ 84 Mansour/Dawson/Royer/Taler/Hill Expires September 2000 Internet Draft CAP March 10, 2000 10.2.5. An example that depends on VEVENT.DTSTART and VALARM.DT- START ........................................................ 84 11. Implementation Issues ......................................... 84 12. Properties .................................................... 84 12.1. Calendar Store Properties ................................... 84 12.2. Calendar Properties ......................................... 85 13. Security Considerations ....................................... 87 14. Changes to iCalendar .......................................... 87 14.1. Time Transparency ........................................... 88 14.2. RIGHTS Value Type ........................................... 89 14.3. VCAR Calendar Component ..................................... 92 14.4. GRANT Component Property .................................... 94 14.5. DENY Component Property ..................................... 94 14.6. VCAR Identifier Component Property .......................... 95 15. CAP Entities Registration ..................................... 96 15.1.1. Define the Entity ......................................... 97 15.1.2. Post the entity definition ................................ 98 15.1.3. Allow a comment period .................................... 98 15.1.4. Submit the entity for approval ............................ 98 15.2. Property Change Control ..................................... 98 16. IANA Considerations ........................................... 99 17. Acknowledgments ............................................... 99 18. Bibliography .................................................. 99 19. Author's Address .............................................. 100 20. Full Copyright Statement ...................................... 101 Mansour/Dawson/Royer/Taler/Hill Expires September 2000 Internet Draft CAP March 10, 2000 1. Introduction This document specifies how a Calendar User Agent (CUA) interacts with a Calendar Store (CS) to manage calendar information. In particular, it specifies how to query, create, modify, and delete iCalendar components (e.g., events, to-dos, or daily journal entries). It further specifies how to search for available busy time information. This protocol is based on request/response form of protocol data units, sent from a client CUA to a calendar server. The protocol data units leverage the standard iCalendar format [RFC2445] for conveying CS related information. 1.1. Formatting Conventions The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. Calendaring and scheduling roles are referred to in quoted-strings of text with the first character of each word in upper case. For example, "Organizer" refers to a role of a "Calendar User" (CU) within the protocol defined by this memo. Calendar components defined by [RFC2445] are referred to with capitalized, quoted-strings of text. All calendar components start with the letter "V". For example, "VEVENT" refers to the event calendar component, "VTODO" refers to the to-do calendar component and "VJOURNAL" refers to the daily journal calendar component. Calendar access methods defined by this memo, as well as scheduling methods defined by [RFC2446], are referred to with capitalized, quoted- strings of text. For example, "CREATE" refers to the method for creating a calendar component on a calendar, "READ" refers to the method for reading calendar components. Properties defined by this memo are referred to with capitalized, quoted-strings of text, followed by the word "property". For example, "ATTENDEE" property refers to the iCalendar property used to convey the calendar address of a "Calendar User". Property parameters defined by this memo are referred to with lower case, quoted-strings of text, followed by the word "parameter". For example, "value" parameter refers to the iCalendar property parameter used to override the default data type for a property value. Enumerated values defined by this memo are referred to with capitalized text, either alone or followed by the word "value". In tables, the quoted-string text is specified without quotes in order to minimize the table length. 1.2. Related Documents Implementers will need to be familiar with several other memos that, along with this one, describe the Internet calendaring and scheduling Mansour/Dawson/Royer/Taler/Hill 3 Expires September 2000 Internet Draft CAP March 10, 2000 standards. This document, [RFC2445] specifies the objects, data types, properties and property parameters used in the protocols, along with the methods for representing and encoding them; [RFC2446] specifies an interoperability protocol for scheduling between different implementations. The related documents are: [RFC2447] specifies an Internet email binding for [RFC2446]. [iRIP] specifies a real-time binding for [RFC2446]. This memo does not attempt to repeat the specification of concepts or definitions from these other memos. Where possible, references are made to the memo that provides for the specification of these concepts or definitions. 1.3. Definitions Authentication ID (AuthID) A tuple of username, realm, and authentication method, used by the Calendar Service internally to identify a successfully authenticated CAP session. Calendar A collection of logically related objects or entities each of which may be associated with a calendar date and possibly time of day. These entities can include other calendar properties or calendar components. In addition, a calendar might be hierarchically related to other sub- calendars. A calendar is identified by its unique calendar identifier. The [RFC2445] defines calendar properties, calendar components and component properties that make up the content of a calendar. Calendar Access Protocol (CAP) The standard Internet protocol that permits a Calendar User Agent to access and manipulate a calendar residing on a Calendar Store. Calendar Access Rights (CAR) The mechanism for specifying the CAP operations ("ACTIONS") that a particular calendar user ("UPN") are granted or denied permission to perform on a given calendar entity ("OBJECT"). The calendar access rights are specified with the "VCAR" calendar components within a CS and calendar. Mansour/Dawson/Royer/Taler/Hill 4 Expires September 2000 Internet Draft CAP March 10, 2000 Calendar Collection A collection of Calendars, Resource Calendars, and/or other Calendar Collections. These collections are expanded by the CS and may reside either locally or in an external database or directory. The calendars in the collection may be fixed or dynamic over time. Calendar Component An entity within a calendar. Some types of calendar components include events, to-dos, journals, alarms, time zones and freebusy data. A calendar component consists of component properties and possibly other sub-components. For example, an event may contain an alarm component. Calendar Component Properties An attribute of a particular calendar component. Some calendar component properties are applicable to different types of calendar components. For example, DTSTART is applicable to VEVENT, VTODO, VJOURNAL calendar components. Other calendar components are applicable only to an individual type of calendar component. For example, TZURL is only applicable to VTIMEZONE calendar components. Calendar Identifier (CalID) A globally unique identifier associated with a calendar. Calendars reside within a CS. See Qualified Calendar Identifier and Relative Calendar Identifier. Calendar Policy A CAP operational restriction on the access or manipulation of a calendar. For example, "events MUST be scheduled in unit intervals of one hour". Calendar Properties An attribute of a calendar. The attribute applies to the calendar, as a whole. For example, CALSCALE specifies the calendar scale (e.g., GREGORIAN) for the whole calendar. Calendar Service An implementation of a Calendar Store that manages one or more calendars. Mansour/Dawson/Royer/Taler/Hill 5 Expires September 2000 Internet Draft CAP March 10, 2000 Calendar Store (CS) The data and service model definition for a Calendar Service. Calendar Store Identifier (CSID) The globally unique identifier for an individual CS. A CSID consists of the host and port portions of a "Common Internet Scheme Syntax" part of a URL, as defined by [RFC2396]. Calendar Store Components Components maintained in a CS specify a grouping of calendar store- wide information. Calendar store components can be accessed using CAP. Calendar Store Properties Properties maintained in a Calendar Store calendar store-wide information. Calendar store properties can be accessed using CAP. Calendar User (CU) An entity (often biological) that uses a calendaring system. Calendar User Agent (CUA) The CUA is the client application that a CU or UG utilizes to access and manipulate a calendar. Calendaring and Scheduling System The computer sub-system that provides the services for accessing, manipulating calendars and scheduling calendar components. CAP Session An open communication channel between a CAP CUA and a CAP CS. Connected Mode A mobile computing mode where the CUA is directly connected to the CS. Delegate Mansour/Dawson/Royer/Taler/Hill 6 Expires September 2000 Internet Draft CAP March 10, 2000 Is a calendar user (sometimes called the delegatee) who has been assigned participation in a scheduled calendar component (e.g., VEVENT) by one of the attendees in the scheduled calendar component (sometimes called the delegator). An example of a delegate is a team member told to go to a particular meeting. Designate Is a calendar user who is authorized to act on behalf of another calendar user. An example of a designate is an assistant. Disconnected Mode A mobile computing mode where a CUA can be disconnected from a CS. When the CUA is disconnected, it is in the disconnected mode. Fan Out The calendaring and scheduling process by which a calendar operation on one calendar is also performed on every other calendar specified in the operation. This may include the calendar associated with TARGET calendar property. Hierarchical Calendars A CS feature where a calendar have a hierarchical relationship with another calendar in the CS. The top-most calendar in the hierarchical relationship has the CS as its parent. There may be multiple top-most calendars in a given CS. Within a given hierarchical relationship, all sub-calendars have a calendar with a "parent" topographical relationship. In addition, sub-calendars may have a relationship with another calendar that has a "child" topographical relationship. In addition, a calendar may have a relationship such that one or more calendars have a "sibling" topographical relationship with the calendar. The hierarchical calendar feature is not a storage relationship of the calendars within the CS. Instead it is a feature that relates access control rights to calendar content between different calendars in the CS. The hierarchical relationship of a calendar is specified in the "PARENT" and "CHILDREN" calendar properties. High Bandwidth Connection A communications connection supporting high transfer rates; transfer rates commonly found within a LAN. Mansour/Dawson/Royer/Taler/Hill 7 Expires September 2000 Internet Draft CAP March 10, 2000 Local Store A CS which is on the same platform as the CUA. Low Bandwidth Connection A communications connection supporting slow transfer rates; transfer rates commonly found in remote access technology. Overlapped Booking A policy which indicates whether or not OPAQUE events can overlap one another. When the policy is applied to a calendar it indicates whether or not any OPAQUE events in the calendar can overlap. When applied to an individual event, it indicates whether or not it can be overlapped by any other OPAQUE event. Owner One or more CUs or UGs that have "OWNER" calendar access rights for a calendar. The owner is specified in the "OWNER" calendar property. Qualified Calendar Identifier (Qualified CalID) A CalID where both the and are present. Realm A collection of calendar user accounts, identified by a string. The name of the realm is only used in UPNs. In order to avoid namespace conflict, the realm SHOULD be postfixed with an appropriate DNS domain name. (eg: the foobar realm could be called foobar.example.com). Relative Calendar Identifier (Relative CalID) An identifier for an individual calendar in a calendar store. It is unique within a calendar store. It is recommended to be globally unique. A Relative CalID consists of the portion of the "scheme part" of a Qualified CalID following the Calendar Store Identifier. This is the same as the "URL path" of the "Common Internet Scheme Syntax" portion of a URL, as defined by [RFC2396]. Remote Store A CS which is not on the same platform as the CUA. Mansour/Dawson/Royer/Taler/Hill 8 Expires September 2000 Internet Draft CAP March 10, 2000 Resource Calendar (RC) A non-human Calendar, associated with an organizational resource. There is no syntactic difference between an RC and a Calendar. Session Identity A UPN associated with a CAP session. A session gains an identity after successful authentication. The identity is used in combination with CAR to determine access to data in the CS. Sub-calendars Calendars that have a "child" hierarchical relationship with another calendar, its "parent". User Group (UG) A collection of Calendar Users and/or User Groups. These groups are expanded by the CS and may reside either locally or in an external database or directory. The group membership may be fixed or dynamic over time. User Name A name which denotes a Calendar User within a realm. This is part of a UPN. User Principal Name (UPN) An identifier that denotes a unique CU. A UPN is an RFC 822 compliant email address, with 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 address. A CU's UPN MUST never be deliverable to a different person. It consists of a realm in the form of a valid, and unique, DNS domain name and a unique username. In it's simplest form it looks like "user@example.com". In certain cases a UPN will not be RFC 822 compliant. When anonymous authentication is used, or anonymous authorization is being defined, the special UPN "@" will be used. When authentication must be used, but unique identity must be obscured, a UPN of the form @DNS-domain- name may be used. For example, "@example.com". Usage of these special cases is further discussed in the authentication and authorization sections of this document. Mansour/Dawson/Royer/Taler/Hill 9 Expires September 2000 Internet Draft CAP March 10, 2000 2. CAP Design 2.1. System Model The system model describes the high level components of a calendar system and how they interact with each other. CAP is used by a "Calendar User Agent" (CUA) to send commands to and receive responses from a "Calendar Service" (CS). The CUA prepares an MIME encapsulated iCalendar object containing a command, sends it to the CS, and receives an iCalendar object as a response. There are two distinct protocols in operation to accomplish this exchange. The Transfer Protocol is used to move iCalendar objects between a CUA and a CS. The Application Protocol defines the content and semantics of the iCalendar objects sent between the CUA and the CS. This document defines both the Transfer Protocol and the Application Protocol. In the diagram below, a user uses CUA1 to communicate with CS1 using CAP. The CUA must authenticate the Calendar User (CU) so that access to calendars on CS1 can be controlled. The CUA can then view, create, edit, and delete calendars, calendar properties, and calendar components subject to the access rights. CAP servers support fanout. Fanout allows a CUA to communicate with a single CS to perform scheduling operations with calendars on multiple CSs. That is, a Calendar User (CU) can book events on or read events from calendars on other calendar stores. To accomplish this, a CAP server has several options: CS1 MAY play the role of a CUA and use CAP to access CS2; CS1 MAY be able to play the role of a CUA and use [iRIP] to interoperate with the possible iRIP support in CS2; CS1 MUST be able play the role of a CUA and use [RFC2447] to interoperate with other CUAs. Storage Agent +-----+ +-----+ | | CAP | | CAP CUA1 ------| CS1 |-----------| CS2 |--------- CUA2 | | | | A | | | | | | | | | | +-----+ +-----+ | | IMIP | +---------------------------------+ Mansour/Dawson/Royer/Taler/Hill 10 Expires September 2000 Internet Draft CAP March 10, 2000 Note that the fanout feature in CAP is a convenience to the CUA. It is perfectly valid for the CUA to assume the responsibility for fanout if it wishes. That is, [RFC2447] messages could also be sent from CUA1 to CUA2. 2.2. Calendar Store Object Model The conceptual model for a calendar store is shown below. The calendar store contains calendars, VTIMEZONEs, VCARs, and calendar store properties. Calendars contain VEVENTs, VTODOs, VJOURNALs, VALARMs, VCARs, and calendar properties. Calendars may also contain other calendars. +---------Calendar Store-----------------------------+ | | | | | VCARs | | +--calendars-------------------------+ | | Properties | | | | | +--calendars--------+ VEVENTs | | | VTIMEZONEs | | | VTODOs | | | | | VEVENTs | VJOURNALs | | | | | VCARs | VALARMs | | | | | +---+ VTODOs | VCARs | | | | | | | VALARMs | Calendar | | | | | +---+ VJOURNALs | Properties | | | | | VTIMEZONEs | VTIMEZONEs | | | | | Calendar | VSCHEDULE | | | | | Properties | | | | | | VSCHEDULE | | | | | +-------------------+ | | | +------------------------------------+ | +----------------------------------------------------+ Calendars within a Calendar Store are identified by their Relative CALID. In this model, VSCHEDULE is a queue of scheduling messages that have not yet been applied to the calendar. Items in VSCHEDULE are discussed in more detail below. 2.3. Protocol Model A generic transfer-layer, Calendar Server Transfer Protocol (CSTP), is used to move data objects between a CUA and the CS. CSTP commands are listed below and their usage and semantics are defined in section 7 of this document. Mansour/Dawson/Royer/Taler/Hill 11 Expires September 2000 Internet Draft CAP March 10, 2000 CSTP Commands ------------------------------------------------------------------------- Command Description ------------------------------------------------------------------------- ABORT Stop a command whose latency time has been exceeded. AUTHENTICATE Authenticate a UPN. CONTINUE Continue the execution of a command whose latency time has been exceeded. IDENTIFY Set a new identity for calendar access. DISCONNECT Terminate a connection with the server. SENDDATA Send a data object MIME encapsulated iCalendar. STARTTLS Negotiate transport level security using [TLS] ------------------------------------------------------------------------- Application-level commands are used to manipulate data on the calendar store. They are listed below and discussed in detail in section 7. CAP Calendaring Commands ------------------------------------------------------------------------- Command Description ------------------------------------------------------------------------- CREATE Create a new calendar or component DELETE Delete a calendar or component GENERATEUID Generate one or more unique ids MODIFY Change a calendar or component MOVE Move a calendar READ Read a calendar properties or components ------------------------------------------------------------------------- CAP Scheduling Commands ------------------------------------------------------------------------- Command Description ------------------------------------------------------------------------- PUBLISH Publish a calendar entry to one or more calendars. Mansour/Dawson/Royer/Taler/Hill 12 Expires September 2000 Internet Draft CAP March 10, 2000 REQUEST Schedule a calendar entry with one or more calendars. REPLY Response to a scheduling request. ADD Add one or more instances to an existing calendar entry. CANCEL Cancel one or more instances to an existing calendar entry. REFRESH A request for the latest version of a calendar entry. COUNTER A request for a change (a counter-proposal) to a calendar entry. DECLINECOUNTER Decline a counter proposal. ------------------------------------------------------------------------- 2.4. Security Model Authentication to the CS will be performed using SASL [RFC2222]. As noted in the CAP system model section, a variety of connectivity scenarios are possible. This complicates the security model considerably, and a thorough familiarity with the concepts is required to ensure interoperability. Basic threats to a Calendaring and Scheduling System include: (1) Unauthorized access to data via data-fetching operations, (2) Unauthorized access to reusable client authentication information by monitoring others' access, (3) Unauthorized access to data by monitoring others' access, (4) Unauthorized modification of data, (5) Unauthorized or excessive use of resources (denial of service), and (6) Spoofing of CS: Tricking a client into believing that information came from the CS when in fact it did not, either by modifying data in transit or misdirecting the client's connection. Threats (1), (4), (5) and (6) are due to hostile clients. Threats (2), and (3) are due to hostile agents on the path between client and server, or posing as a server. CAP can be protected with the following security mechanisms: Mansour/Dawson/Royer/Taler/Hill 13 Expires September 2000 Internet Draft CAP March 10, 2000 (1) Client authentication by means of the SASL [RFC2222] mechanism set, possibly backed by the TLS credentials exchange mechanism, (2) Client authorization by means of access control based on the requestor's authenticated identity, (3) Data integrity protection by means of the TLS protocol or data-integrity SASL mechanisms, (4) Protection against snooping by means of the TLS protocol or data-encrypting SASL mechanisms, (5) Resource limitation by means of administrative limits on service controls, and (6) Server authentication by means of the TLS protocol or SASL mechanism. Imposition of access controls (authorizations) is done by means of VCARs, an overview is provided in section , and a detailed syntax is provided in section . Authentication is explained in detail in section . 2.4.1. Authentication, Credentials, and Identity Generically, authentication credentials are the evidence supplied by one party to another, asserting the identity of the supplying party (e.g. a user) who is attempting to establish an association with the other party (typically a server). Authentication is the process of generating, transmitting, and verifying these credentials and thus the identity they assert. An authentication identity is the name presented in a credential. There are many forms of authentication credentials. The form used depends upon the particular authentication mechanism negotiated by the parties. For example: X.509 certificates, Kerberos tickets, simple identity and password pairs. Note that an authentication mechanism may constrain the form of authentication identities used with it. SASL only provides a protocol to negotiate a mutually acceptable authentication mechanism. SASL itself does not constrain or dictate the form of the authentication identities used to perform the authentication. 2.4.2. Calendar User and UPNs A Calendar User(CU) is an entity that can be authenticated. It is represented in CAP as a UPN. A UPN is the owner of a calendar and the subject of access rights. The UPN representation is independent of the authentication mechanism used during a particular CUA/CS interaction. This is because UPNs are used within VCARs. If the UPN were dependant on the authentication 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 authentication mechanism when using a different Mansour/Dawson/Royer/Taler/Hill 14 Expires September 2000 Internet Draft CAP March 10, 2000 CUA, or while connecting from a different location. The user may also have multiple UPNs for various purposes. Note that the immutability of the user's UPN may be achieved by using SASL's authorization identity feature. (The transmitted authorization identity may be different than the identity in the client's authentication credentials.) [RFC2222, section 3] This also permits a CU to authenticate using their own credentials, yet request the access privileges of the identity for which they are proxying [RFC2222]. Also, the form of authentication identity supplied by a service like TLS may not correspond to the UPNs used to express a server's access control policy, requiring a server-specific mapping to be done. The method by which a server composes and validates an authorization identity from the authentication credentials supplied by a client is implementation- specific. For Calendaring and Scheduling Systems that are integrated with a directory system, the CS MUST support the ability to configure which schema attribute stores the UPN. The CS MAY allow one or more attributes to be searched for the UPN. 2.4.2.1. UPNs and Certificates When using X.509 certificates for purposes of CAP authentication, the UPN should appear in the certificate. Unfortunately there is no single correct guideline for which field should contain the UPN. From RFC-2459, section 4.1.2.6 (Subject): If subject naming information is present only in the subjectAltName extension (e.g., a key bound only to an email address or URI), then the subject name MUST be an empty sequence and the subjectAltName extension MUST be critical. Implementations of this specification MAY use these comparison rules to process unfamiliar attribute types (i.e., for name chaining). This allows implementations to process certificates with unfamiliar attributes in the subject name. In addition, legacy implementations exist where an RFC 822 name is embedded in the subject distinguished name as an EmailAddress attribute. The attribute value for EmailAddress is of type IA5String to permit inclusion of the character '@', which is not part of the PrintableString character set. EmailAddress attribute values are not case sensitive (e.g., "fanfeedback@redsox.com" is the same as "FANFEEDBACK@REDSOX.COM"). Conforming implementations generating new certificates with electronic mail addresses MUST use the rfc822Name in the subject alternative name field (see sec. 4.2.1.7 [of RFC 2459]) to describe Mansour/Dawson/Royer/Taler/Hill 15 Expires September 2000 Internet Draft CAP March 10, 2000 such identities. Simultaneous inclusion of the EmailAddress attribute in the subject distinguished name to support legacy implementations is deprecated but permitted. Since no single method of including the UPN in the certificate will work in all cases, CAP implementations MUST support the ability to configure what the mapping will be by the CS administrator. Implementations MAY support multiple mapping definitions, for example, the UPN may be found in either the subject alternative name field, or the UPN may be embedded in the subject distinguished name as an EmailAddress attribute. Note: If a CS or CUA is validating data received via iMIP, if the "ORGANIZER" or "ATTENDEE" property said (e.g.) "ATTENDEE;CN=Joe Random User:juser@example.com" then the email address should be checked against the UPN, and the CN should also be checked. This is so the "ATTENDEE" property couldn't be munged to something misleading like "ATTENDEE;CN=Joe Rictus User:juser@example.com" and have it pass validation. This validation will also defeat other attempts at confusion. 2.4.2.2. Anonymous Users and Authentication Anonymous access is often desirable. For example an organization may publish calendar information that does not require any access control for viewing or login. Conversely, a user may wish to view unrestricted calendar information without revealing their identity. CAP implementations MUST support anonymous authentication, as defined in section . CAP implementations MAY support anonymous authentication with TLS, as defined in section . 2.4.2.3. Required Security Mechanisms The following implementation conformance requirements are in place: (1) For a read-only, public CS, anonymous authentication, described in section , can be used. (2) Implementations providing password-based authenticated access MUST support authentication using Digest, as described in section . This provides client authentication with protection against passive eavesdropping attacks, but does not provide protection against active intermediary attacks. (3) For a CS needing session protection and authentication, the Start TLS extended operation, and either the simple authentication choice or the SASL EXTERNAL mechanism, are to be used together. Mansour/Dawson/Royer/Taler/Hill 16 Expires September 2000 Internet Draft CAP March 10, 2000 Implementations SHOULD support authentication with a password as described in section , and SHOULD support authentication with a certificate as described in section . Together, these can provide integrity and disclosure protection of transmitted data, and authentication of client and server, including protection against active intermediary attacks. 2.4.2.4. TLS Ciphersuites The following ciphersuites defined in [RFC 2246] MUST NOT be used for confidentiality protection of passwords or data: TLS_NULL_WITH_NULL_NULL TLS_RSA_WITH_NULL_MD5 TLS_RSA_WITH_NULL_SHA The following ciphersuites defined in [RFC 2246] can be cracked easily (less than a week of CPU time on a standard CPU in 1997). The client and server SHOULD carefully consider the value of the password or data being protected before using these ciphersuites: TLS_RSA_EXPORT_WITH_RC4_40_MD5 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 TLS_RSA_EXPORT_WITH_DES40_CBC_SHA TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA The following ciphersuites are vulnerable to man-in-the-middle attacks, and SHOULD NOT be used to protect passwords or sensitive data, unless the network configuration is such that the danger of a man-in-the-middle attack is tolerable: TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 TLS_DH_anon_WITH_RC4_128_MD5 TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA TLS_DH_anon_WITH_DES_CBC_SHA TLS_DH_anon_WITH_3DES_EDE_CBC_SHA A client or server that supports TLS MUST support at least TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA. 2.4.3. User Groups 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 UPN. The CUA cannot distinguish between a UPN that represents a CU or a UG. UGs are expanded as necessary by the CS. The CS MUST accept a CUA request for UG expansion, although the CS may be configured to restrict some responses. The CS MAY expand a UG (including nested UGs) to obtain a list of unique CUs. Duplicate UPNs are filtered during expansion. Mansour/Dawson/Royer/Taler/Hill 17 Expires September 2000 Internet Draft CAP March 10, 2000 Incomplete expansion should be treated as a failure. [ Editor's Note: We need to explore the issue and impact of directory permissions and precedence.] The CS SHOULD not preserve UG expansions across operations. A UG may reference a static list of members, or it may represent a dynamic list. Each operation SHOULD generate its own expansion in order to recognize changes to UG membership. However, during fan out to other CSs, the originating CS SHOULD expand all UGs so that the target CS receives only a list of unique CUs. This is to prevent confusion when two CSs do not share the same UG database or directory. [Editor's Note: Doug had an issue here relating to multiple CUs not having a common directory. We think the above text resolves this] CAP does not define commands or methods for managing UGs. Examples: Small UG - The Three Stooges. There is only and always three at any one time. Large UG - The MIT graduating class of 1999. This is a static list. Dynamic UG - The IETF membership, which is a large and changing list of members. Nested UG - The National Football League, made up of the AFC and NFC, which are made up of 3 divisions each... 2.4.4. Access Rights In simple terms, access rights are used to grant or deny access to a calendar for a CU. CAP defines a new component type called a VCalendar Access Right (VCAR). Specifically, a VCAR grants, or denies, UPNs the right to read and write components, properties, and parameters on calendars within a CS. The VCAR model does not put any restriction on the sequence in which the object and access rights are created. That is, an event associated with a particular VCAR might be created before or after the actual VCAR is defined. In addition, the VCAR and VEVENT definition might be created in the same iCalendar object and passed together in a single command. All rights MUST be denied unless specifically granted; individual VCARs MUST be specifically granted to an authenticated CU. 2.4.4.1. VCalendar Access Right (VCAR) Access rights within CAP are specified with the "VCAR" calendar component, "RIGHTS" value type and the "GRANT", "DENY" and "CARID" component properties. Mansour/Dawson/Royer/Taler/Hill 18 Expires September 2000 Internet Draft CAP March 10, 2000 Properties within an iCalendar object are unordered. This also is the case for the "GRANT", "DENY" and "CARID" properties. Likewise, there is no implied ordering required for components of a "RIGHTS" value type other than that specified by the ABNF. [ editor's note, this requires a lot of review. We think that this paragraph may be incorrect. ] For details on the VCAR syntax please see section 2.4.4.2. Decreed VCARs [editor's note: new concept. This will also require some syntax modification 14.4. This section is being actively discussed on the working group list, 2/3/2000.] A CS MAY choose to implement and allow persistent immutable VCARs, that are configured by the CS Administrator, which apply to all calendars on the server. When a user attempts to modify a decreed VCAR and error will be returned,indicating that the user has insufficient authorization to perform the operation. The CAP protocol does not define the semantics used to initially create a decreed VCAR. This administrative task is out side the scope of the CAP protocol. 2.4.4.3. Inheritance Calendars inherit VCARs from their parent. VCARs specified in a calendar or a sub-calendar override all inherited VCARs. 2.4.5. CAP session identity A CAP session has an associated set of authentication credentials, from which is derived a UPN. This UPN is the identity of the CAP session, and is used to determine access rights for the session. The CUA may change the identity of a CAP session by calling the "IDENTIFY" command. The Calendar Service only permits the operation if the session's authentication credentials are good for the requested identity. The method of checking this permission is implementation dependent, but may be thought of as a mapping from authentication credentials to UPNs. The "IDENTIFY" command allows a single set of authentication credentials to choose from multiple identities, and allows multiple sets of authentication credentials to assume the same identity. Mansour/Dawson/Royer/Taler/Hill 19 Expires September 2000 Internet Draft CAP March 10, 2000 For anonymous access the identity of the session is "@", a UPN with a null username and null realm. A UPN with a null 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 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 used. Since the UPN includes realm information it may be used to govern calendar store access rights across realms. However, governing access rights across realms is only useful if login access is available. This could be done through a trusted server relationship or a temporary account. The "IDENTIFY" command provides for a weak group implementation. By allowing multiple sets of authentication credentials belonging to different users to identify as the same UPN, that UPN essentially identifies a group of people, and may be used for group calendar ownership, or the granting of access rights to a group. Examples: Small UG - The Three Stooges. There will always be three, it will not change. Large UG - The MIT graduating class of 1999. This is a static list. Dynamic UG - The IETF membership, which is a large and changing list of members. Nested UG - The National Football League, made up of the AFC and NFC, which are made up of 3 divisions each... 2.5. Roles CAP defines methods for managing [RFC2445] objects on a Calendar Store and exchanging [RFC2445] objects for the purposes of group calendaring and scheduling between "Calendar Users" (CUs) or "User Groups" (UGs). There are two distinct roles taken on by CUs in CAP. The CU who creates an initial event or to-do and invites other CUs or UGs as attendees takes on the role of "Organizer". The CUs or UGs asked to participate in the group event or to-do take on the role of "Attendee". Note that "role" is also a descriptive parameter to the "ATTENDEE" property. Its use is to convey descriptive context to an "Attendee" such as "chair", "REQ-PARTICIPANT" or NON- PARTICIPANT" and has nothing to do with the scheduling workflow. Mansour/Dawson/Royer/Taler/Hill 20 Expires September 2000 Internet Draft CAP March 10, 2000 2.6. Calendar Addresses Calendar addresses are URIs that are modeled after [RFC2396]. CAP uses the following forms of URI. [[]://[:]/] where: is "cap" is the Calendar Store ID. It is the network address of the computer on which the CAP server is running. is optional. Its default value is 5229. The port must be present if the CAP server does not listen on the default port. is an identifier that uniquely identifies the calendar on a particular calendar store. There is no implied structure in a Relative CALID. It is an arbitrary string of 7 bit ASCII characters. It may refer to the calendar of a user or of a resource such as a conference room. It MUST be unique within the calendar store. It is recommended that the Relative CALID be globally unique. If the and are present the calendar address is said to be "qualified". Senders are required to supply the portion of the address. A qualified calendar address is required when the of the target calendar address differs from that of the CAP server receiving the command. Examples: cap://calendar.example.com/user1 ://calendar.example.com/user1 user1 cap://calendar.example.com/conferenceRoomA cap://calendar.example.com/89798-098-zytytasd For a user currently authenticated to a CAP server on calendar.example.com, the first three addresses refer to the same calendar. 2.7. Extensions to iCalendar In mapping the CAP command set, query feature, and access rights onto the iCalendar format, several extended iCalendar methods and components are defined by this memo. * The search function is specified with the new iCalendar QUERY method. The QUERY method makes use of a new component, called VQUERY, that contains the search filter. The component consists of Mansour/Dawson/Royer/Taler/Hill 21 Expires September 2000 Internet Draft CAP March 10, 2000 a set of new properties: SCOPE, MAXRESULTS, MAXRESULTSSIZE, QUERY and QUERYNAME, that define the search filter. * Access control is specified the the new iCalendar VCAR component. * The iCalendar METHOD property format has been updated with new values. * A new iCalendar component, VCOMMAND, has been added. VCOMMANDs are needed to fully specify CAP commands. * TARGET is a new property within the VCOMMAND component. It indicates the calendars to which the command applies 2.8. Relationship of RFC 2446 (ITIP) to CAP [RFC2446] describes scheduling methods which result in indirect manipulation of calendar components. CAP methods provide direct manipulation of calendar components. In the CAP calendar store model, scheduling messages are kept separate from other calendar components. This is modeled with the VSCHEDULE queue. Note that this is a conceptual model, the actual storage details are left to implementations. The model is shown pictorially as follows: +-----------------VCALENDAR-------------------+ | | | +-----------+ +-------VSCHEDULE---------+ | | | VEVENTs | | PUBLISH messages | | | | VTODOs | | REQUEST messages | | | | VJOURNALs | | REPLY messages | | | | | | ADD messages | | | | | | CANCEL messages | | | | | | REFRESH messages | | | | | | COUNTER messages | | | | | | DECLINECOUNTER messages | | | +-----------+ +-------------------------+ | +---------------------------------------------+ The METHOD is saved along with components. Scheduled components become booked components when the METHOD changes from an ITIP method to the CAP storage method. For example, a component whose METHOD is "REQUEST" is scheduled. The component becomes booked when the METHOD is changed to "CREATED". [ed note: need to clean up the terminology here. We havent discussed "booked"] Mansour/Dawson/Royer/Taler/Hill 22 Expires September 2000 Internet Draft CAP March 10, 2000 2.9. VCalendar Access Rights (VCARs) In simple terms, VCARs are used to grant or deny access to a calendar for a CU or UG. Specifically, they grant User Principal Names (UPNs) the rights to read and write components, properties, and parameters on calendars within a calendar store. The model does not put any restriction on the sequence in which the object and access rights are created. That is, an event associated with a particular VCAR might be created before or after the actual VCAR is defined. In addition, the VCAR and VEVENT definition might be created in the same iCalendar object and passed together in a single SENDDATA command. VCAR principals can be CU or UG UPNs. Whenever VCARs are evaluated, all referenced User Groups MUST be evaluated as an expanded list. UG expansion SHOULD NOT persist across operations. [Editor's Note: This is where we need to define precedence rules.] 2.10. Query Schema breif paragraph on summary of VQUERY. 3. State Diagram This section describes the states of the transport connection between a CUA and a CS. The state diagram is shown below. State names shown with first letter capitalized. The commands used to switch between states are shown next to an arrow connecting the states. The commands are listed in all capital letters. A condition that causes a state to change is shown in lower case letters. Mansour/Dawson/Royer/Taler/Hill 23 Expires September 2000 Internet Draft CAP March 10, 2000 STARTTLS / CAPABILITY +-------+ | | +---------------+ | +-----------+ AUTHENTICATE | | +-->| Connected |-------------->| Authenticated | +-----------+ | | | +---------------+ | | | | | | | | +-----+ STARTTLS / | V | | CAPABILITY / | +---------------+ | IDENTIFY | | |<-+ | | Identified |<----+ | +--------| | | | | +---------------+ | command | | | | completes V |DISCONNECT | | +--------------+ | |SENDDATA | | Disconnected |<--+ | | +--------------+ | | ABORT A | | | V | | DISCONNECT +---------------+ | +--------------------| Receive |--+ | |<--+ +---------------+ | | | CONTINUTE +----+ The connection begins the Connected state when a CUA connects to a CAP server. The capabilities of the CS are reported in the response from the CS. From this state, the CUA can issue the DISCONNECT command to terminate the connection, the CAPABILITY, STARTTLS, or AUTHENTICATE commands. One use of the CAPABILITY command at this stage is to determine the supported authentication mechanisms supported by the server. Once the STARTTLS command has been successfully executed from either the Connected or Authenticated state, it must not be executed again. If an AUTHENTICATE command is successful, the connection enters the Authenticated state and then immediately goes to the IDENTIFIED state. While in the Identified state, allow CALIDEXPAND and UPNEXPAND commands. From here the CUA can issue the CAPABILITY command. The capabilities the server offers in the Authenticated state may be different than those in the Connected state. The CUA can also use the IDENTIFY command to change the identity of the user subject to access control. The connection remains in the Authenticated state after the CAPABILITY command Mansour/Dawson/Royer/Taler/Hill 24 Expires September 2000 Internet Draft CAP March 10, 2000 completes. The CUA can issue the DISCONNECT command to terminate the connection. The SENDDATA command can be used to send a request to read, write, modify, or delete data on the server. After the SENDDATA command has been issued the connection enters the Receive state while the CUA awaits and reads a server reply. Normally, the server handles the command, sends a reply which is read by the CUA and the connection returns to the Authenticated state. The CUA may have issued the SENDATA command with a maximum latency time. This informs the server that the CUA expects a response within the maximum latency time, even if the command was not completed. When the server is unable to complete the command in the maximum latency time, it issues an appropriate reply code and waits for the CUA to tell it how to proceed. If the CUA issues a CONTINUE command the server continues processing the command and the connection remains in the Receive state. If the CUA issues the ABORT command the server need not process the command any further and the connection returns to the Authenticated state. The DISCONNECT command can also be issued from the Receive state. 4. Protocol Framework 4.1. CAP Application Layer The CAP application layer is used for the manipulation of the calendar store. Commands and responses are transmitted between the CUA and CS inside "VCALENDAR" component wrappers. Commands are specified as the value of a "METHOD" property, and responses are specified as the value of a "REQUEST-STATUS" property. 4.2. CAP Transfer Protocol The CAP transfer protocol defines the format of data transmitted between a CUA and the CS. CAP transfer protocol commands are transmitted using the underlying transport. The transport used is a TCP/IP socket connection between the CUA and the CS. The default port that the CS listens for connections on is port 5229. Messages sent between the CUA and CS are formatted as a command followed by any associated data: [] 4.3. Response Format Server responses consist of a response code and any parameters: [response args] [; debug text ; more Mansour/Dawson/Royer/Taler/Hill 25 Expires September 2000 Internet Draft CAP March 10, 2000 text] . [] . The response codes are defined in Section 8. The debug text is human- readable information for protocol debugging and is optional. The optional application-data begins on the next line. The response is terminated with the second "." sequence. Any "." sequences which appear in the transmitted data must be quoted by placing an additional "." between the and the ".". For example, the following sequences of characters in the application data: . ..2 ...3 are quoted as follows: .. ...2 ....3 No other tagged command sequence can be sent until the second special terminating character sequence . has been sent. 4.4. Auto-logout Timer If a server has an inactivity auto-logout timer, that timer MUST be of at least 15 minutes duration. The receipt of ANY command from the client during that interval MAY reset the auto-logout timer, subject to CS administrators policy. A CUA may be discouraged from attempts to do usless things only to keep the connection alive. When a timeout occurs, the server drops the connection to the CUA. 4.5. Bounded Latency [CAP] is designed so that the CUA can either obtain an immediate response from a request or discover within a specified amount of time that the request could not be completed in the requested amount of time. When the CUA initiates a command that the server cannot complete within the specified latency time, the server returns an appropriate response code. The CUA then issues either a CONTINUE or ABORT command. The ABORT command immediately terminates the command in progress and the connection returns to the Authenticated state. The CONTINUE command instructs the server to continue processing the command. Mansour/Dawson/Royer/Taler/Hill 26 Expires September 2000 Internet Draft CAP March 10, 2000 4.6. Data Elements The data elements for CAP are MIME encapsulated iCalendar objects. 5. Formal Command Syntax 5.1. Searching and Filtering This section describes CAPs searching and filtering entities within a remote store. It is based on the Standard Query Language (SQL) defined by [SQL]. The QUERY property value MUST be a valid QUERY value type. This new value type is defined to be a "name=value" value type grammar, similar in syntax to the format already in use for the iCalendar RECUR value type. Each "name" is the name of a valid SQL statement component (e.g., SELECT, WHERE, etc.). Each "value" is valid string associated with one of these SQL statement components. [Editor's note: We need to precisely define what part of SQL were using and why we chose what we did.] Examples needed: Grant someone access to June events Grant someone access to events during the month of June. (i.e., based on the current system date, if it's prior to June or after June you don't have access) Example for denying access to a specific property: DENY:UPN=FOO;ACTION=*;OBJECT=CLASS *scope vcar to a component *scope Grant, Deny of a VCAR 5.1.1. Grammar For Search Mechanism SEARCH = "BEGIN:VQUERY" CRLF [scope] [maxresults] [maxsize] querycomp "END:VQUERY" CRLF scope = "SCOPE:" comp-name ("," comp-name)* comp-name = "VEVENT" / "VTODO" / "VJOURNAL" / "VTIMEZONE" / "VALARM" / "VFREEBUSY" / "VCAR" / iana-name / x-name maxresults = integer maxsize = integer Mansour/Dawson/Royer/Taler/Hill 27 Expires September 2000 Internet Draft CAP March 10, 2000 querycomp = (query) / (queryname query) / queryname queryname = "QUERYNAME:" text query = "QUERY:" queryrule queryrule = capselect capwhere caporderby ... capselect = capwhere = caporderby = 6. Access Rights Access rights within CAP are specified with the "VCAR" calendar component, "RIGHTS" value type and the "GRANT", "DENY" and "CARID" component properties. Individual calendar access rights MUST be specifically granted to an authenticated calendar user (i.e., UPN); all rights are denied unless specifically granted. Properties within a VCAR must be evaluated in the order provided. 6.1. VCAR Inheritance Calendar access rights specified in a calendar store are inherited as default calendar access rights for any calendar in the parent calendar store. Likewise, any calendar access rights specified in a root calendar are inherited as default calendar access rights for any sub- calendar to the root calendar. By implication, calendar access rights specified in a sub-calendar are inherited as default calendar access rights for any calendars that are hierarchically below the sub- calendar. Calendar access rights specified in a calendar override any default calendar access rights. Calendar access rights specified within a sub- calendar override any default calendar access rights. 6.2. Access Control and NOCONFLICT The TRANSP property can take on values (TRANSPARENT-NOCONFLICT, OPAQUE- NOCONFLICT) that prohibit other events from overlapping it. This setting overrides access While access control may allow a UPN to store an event on a particular calendar. , the CONFLICTS Calendar or component setting may prevent it, returning an error code "6.3" Mansour/Dawson/Royer/Taler/Hill 28 Expires September 2000 Internet Draft CAP March 10, 2000 7. Commands and Responses CAP commands and responses are described in this section. Command arguments, identified by "Arguments:" in the command descriptions below, are described by function, not by syntax. The precise syntax of command arguments is described in the Formal Syntax section. Some commands cause specific server data to be returned; these are identified by "Data:" in the command descriptions below. See the response descriptions in the Responses section for information on these responses, and the Formal Syntax section for the precise syntax of these responses. The "Result:" in the command description refers to the possible status responses to a command, and any special interpretation of these status responses. Commands have the general form: [arguments...] where is a command listed in the table above. A command MAY have arguments. Arguments are defined in the detailed command definitions below. Responses to commands have the following general form: responseCode [sep transportDescr sep [applicationDescr]] CRLF "." CRLF In the examples below, lines preceded with "S:" refer to the sender and lines preceded with "R:" refer to the receiver. Lines in which the first non-whitespace character is a "#" are editorial comments and are not part of the protocol. 7.1. Transfer Protocol Commands 7.1.1. Initial Connection Arguments: none Data: none Result: 2.0 - success. 8.1 - server too busy Upon session startup, the server sends a response of 2.0 to indicate that it is ready to receive commands. A response of 8.1 indicates that the server is too busy to accept the connection. In addition, the Mansour/Dawson/Royer/Taler/Hill 29 Expires September 2000 Internet Draft CAP March 10, 2000 general capabilities of the CS are reported in the response from the CS. These capabilities may be different than those reported in the authenticated state. The supported authentication mechanisms. There may be 1 or more. CAPVERSION IRIPVERSION 7.1.2. ABORT Command Arguments: none Data: none Result: 2.0 - success 2.2 - no command is in progress The ABORT command is issued by the CUA to stop a command whose latency time has been exceeded. When the latency time is specified on the SENDATA command, the CS must issue a reply to the CUA within the specified time. It may be a reply code indicating that the CS has not yet processed the request. The CUA must then tell the server whether to continue or abort. The CUA can issue the ABORT command at any time after the SENDATA command has been completed but before receiving a reply. 7.1.3. AUTHENTICATE Command Arguments: [] Data: continuation data may be requested Result: 2.0 - Authenticate completed, now in authenticated state. 6.0 - Failed authentication. 6.1 - Authorization identity refused. 6.2 - Sender aborted authentication, authentication exchange cancelled. 6.3 - Unsupported Authentication Mechanism. 6.x - Temporary failure (back end authentication server down). 6.x - Authentication exchange cancelled. 6.x - Authentication mechanism too weak. Mansour/Dawson/Royer/Taler/Hill 30 Expires September 2000 Internet Draft CAP March 10, 2000 6.x - Encryption required. 6.x - Pass phrase expired. The pass phrase was correct but expired. The user will have to contact a pass phrase change server prior to authenticating. 6.x - The user is valid but the server does not have an entry in the authentication database for the requested mechanism (e.g., DIGEST- MD5). If the user successfully authenticates using a plain text password, then the back end back end entry will be updated. Note that if the client chooses to fall back to plain text password authentication it should enable an encryption layer or get user-con- firmation that a one-time transition is ac- ceptable. 6.x - User account disabled. The user will have to contact the system administrator to get the account re-enabled. 9.1 - Unexpected command. The capabilities of the CS in the authenticated state are reported in the response from the CS. These may be different than the capabilities in the Connected, but unauthenticated state. The AUTHENTICATE command is used by the CUA to identify the user to the CS. CAP supports a number of authentication methods, the [SASL] specification for authentication is the preferred method. If STARTTLS is negotiated prior to the AUTHENTICATE command, the client MUST discard all information about the CS capabilities fetched prior to the TLS negotiation. In particular, the value of supported SASL Mechanisms MAY be different after TLS has been negotiated. If a SASL security layer is negotiated, the client MUST discard all information about the CS capabilities fetched prior to SASL. In particular, if the client is configured to support multiple SASL mechanisms, it SHOULD fetch supported SASL Mechanisms both before and after the SASL security layer is negotiated and verify that the value has not changed after the SASL security layer was negotiated. This detects active attacks which remove supported SASL mechanisms from the supported SASL Mechanisms list. is an optional parameter which can be used for mechanisms which require an initial response from the CUA. The AUTHENTICATE command is followed by an authentication protocol exchange, in the form of a series of CS challenges and CUA responses, per the relevant RFC that describes the specific SASL mechanism being used. Mansour/Dawson/Royer/Taler/Hill 31 Expires September 2000 Internet Draft CAP March 10, 2000 Cancelling the authentication process during its negotiation is implementation specific and not within scope of the CAP specification. If a security layer was negotiated it comes into effect for the CS starting with the first octet transmitted after the CRLF which follows the 2.0 reply code, and for the CUA starting with the first octet after the CRLF of its last response in the authentication exchange. Encrypted data is transmitted as described in [SASL]. The service name specified by this protocol's profile of SASL is "cap". [Note: this must be registered with IANA, has anyone done this yet?] The result of the AUTHENTICATE command includes data indicating the identity which has been assigned to the session, derived from the supplied authentication credentials, and/or authorization identifier. A CAP session does not have an identity until the CUA has issued the "AUTHENTICATE" command. The CUA may not issue the "AUTHENTICATE" command multiple times, even if the first attempt was aborted. If a CUA attempts to do this the CS must terminate the session. Data returned in response to a successful login is: The following examples illustrate the various possibilities for an authentication protocol exchange. Here are examples of a successful authentication: C: AUTHENTICATE KERBEROS_V4 S: AmFYig== C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT S: or//EoAADZI= C: DiAF5A4gA+oOIALuBkAAmw== S: 2.0 S: . S: Content-Type:text/calendar; method=REQUEST; charset=US-ASCII S: Content-Transfer-Encoding: 7bit S: S: BEGIN:VCALENDAR S: PRODID:-//ACME/CAPserver//EN S: VERSION:2.1 S: IDENTITY=bill@example.com S: CAPVERSION=1.0 S: ITIPVERSION=1.0 S: AUTH=KERBEROS_V4 S: AUTH=DIGEST_MD5 S: CAR=CAR-FULL-1 S: MINDATE=19700101T000000Z S: MAXDATE=20370201T000000Z S: END:VCALENDAR S: . Mansour/Dawson/Royer/Taler/Hill 32 Expires September 2000 Internet Draft CAP March 10, 2000 This example shows a failed authentication: C: AUTHENTICATE KERBEROS_V4 S: AmFYig== C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT S: . S: 6.0 S: . S: . 7.1.3.1. AUTHENTICATE ANONYMOUS RFC-2245 defines the Anonymous SASL mechanism. This RFC states that "the mechanism consists of a single message from the client to the server. The client sends optional trace information in the form of a human readable string. The trace information should take one of three forms: an Internet email address, an opaque string which does not contain the '@' character and can be interpreted by the system administrator of the client's domain, or nothing. For privacy reasons, an Internet email address should only be used with permission from the user." RFC-2245 goes on to state, "A client which uses the user's correct email address as trace information without explicit permission may violate that user's privacy." Information about who accesses an anonymous CS on a sensitive subject (e.g., AA meeting times and locations) has strong privacy needs. "Clients should not send the email address without explicit permission of the user and should offer the option of supplying no trace token -- thus only exposing the source IP address and time." Example of CUA using the Capability command followed by an anonymous authentication: C: CAPABILITY S: 2.0 S:CAPVERSION=1.0 S:AUTH=KERBEROS_V4 S:AUTH=DIGEST_MD5 S:AUTH=ANONYMOUS S:. C:AUTHENTICATE ANONYMOUS S:+ C:c21yaGM= S:2.0 Subsequent to the initial Anonymous Authentication with a CS, a CUA will have to provide a UPN for some CAP operations. For anonymous access the UPN that MUST be used by the CUA is "@", a UPN with a null username and null realm. The user's normal UPN MUST not be used for the subsequent CAP operations. Mansour/Dawson/Royer/Taler/Hill 33 Expires September 2000 Internet Draft CAP March 10, 2000 Note that the CS implementation may have internal audit logs that use the user's asserted UPN as trace information. However, this UPN will not appear on the wire after the initial SASL anonymous authentication. Use of the "@" UPN and wild-carding of UPNs within VCARs are covered in Section . 7.1.4. CALIDEXPAND Command Arguments: CalID Data: no specific data for this command Result: 2.0 Successful, and requested data follows 2.1 Permission Denied 2.2 Requested CSID not found 2.3 Result exceeds MAXEXPANDLIST 2.4 Misc. EXPAND error Return the members of the argument CalID. Successful result yields one or more Calendars and/or Resource Calendars. More than one C or RC returned implies that the CalID was a CC. Example: Example #1: Request lookup of CSID which is a Calendar Collection C: CALIDEXPAND cap://cal.example.com/calid14 S: 2.0 cap://cal.example.com/calid14 S: cap://cal.example.com/calid2 S: cap://cal.example.com/calid5 S: cap://cal.example.com/calid66 S: . Example #2: Request lookup of a CSID which is a Resource Calendar C: CALIDEXPAND cap://cal.example.com/conf5 S: 2.0 cap://cal.example.com/conf5 S: cap://cal.example.com/conf5 S: . Example #3: Request CSID which exceeds MAXCALIDEXPANDLIST C: CALIDEXPAND cap://cal.example.com/calid76 S: 2.0 cap://cal.example.com/calid76 S: cap://cal.example.com/calid3 S: cap://cal.example.com/calid12 S: cap://cal.example.com/calid21 S: cap://cal.example.com/calid33 S: 2.3 Expansion resulted in too much data S: . Mansour/Dawson/Royer/Taler/Hill 34 Expires September 2000 Internet Draft CAP March 10, 2000 Example #4: CS loses contact with directory server during CALIDEXPAND C: CALIDEXPAND cap://cal.example.com/calid76 S: 2.0 cap://cal.example.com/calid76 S: cap://cal.example.com/calid3 S: cap://cal.example.com/calid5 S: 2.4 Lost contact with directory server S: . 7.1.5. CAPABILITY Command Arguments: none Data: none Result: capabilities as described below The CAPABILTY command returns information about the CAP server given the current state of the connection with the client. The values returned may differ depending on whether the connection is in the Connected or the Authenticated state. The return values may also be different for a secure versus a non-secure connection. Client implementations SHOULD NOT require any capability name beyond those defined in this specification, and MAY ignore any non-standard, experimental capability names. Non-standard capability names are prefixed with the text "X-". The prefix SHOULD also include a short character vendor identifier For example, "X-FOO-BARCAPABILITY", for the non-standard "BARCAPABILITY" capability of the implementor "FOO". This command may return different results in the Connected state versus the Authenticated state. It may also return different results depending on the UPN. Capability Occurs Description ----------------------------------------------------------------------- CAPrev1 1 Revision of CAP, must be "CAPrev1" IRIPrev1 0 or 1 Revision of IRIP, MAY be present. If present, it MUST be "IRIPrev1" CAR 0 or 1 Indicates level of CAR support CAR-MIN or CAR-FULL-1 Mansour/Dawson/Royer/Taler/Hill 35 Expires September 2000 Internet Draft CAP March 10, 2000 MAXICALOBJECTSIZE 0 or 1 An integer value that specifies The largest ICAL object the server will ac- cept in bytes. Objects larger than this will be rejected. A value of zero (0) indicates unlimited. MAXDATE 0 or 1 The datetime value beyond which the server cannot accept. MAXCALIDEXPANDLIST 0 or 1 An integer value that specifies the max- imum number of CalIDs that can be re- turned by the CALIDEXPAND Command. A value of zero (0) indicates unlimited. MAXUPNEXPANDLIST 0 or 1 An integer value that specifies the max- imum number of UPNs that can be returned by the UPNEXPAND Command. A value of zero (0) indicates unlimited. MINDATE 0 or 1 The datetime value prior to which the server cannot accept. Example: C: CAPABILTIY S: 2.0 S: . S: CAPVERSION=1.0 S: ITIPVERSION=1.0 S: AUTH=KERBEROS_V4 S: AUTH=DIGEST_MD5 S: . 7.1.6. CONTINUE Command Arguments: latency time in seconds (optional) Data: none Result: results from the command in progress 2.0.2 - reply pending. The CONTINUE command is issued by the client in response to a SENDATA timeout. When a timeout value is specified on the SENDDATA command, the server must issue a reply to the client within the specified time. If the latency time has elapsed prior to the server completing the command it returns a timeout response code. If the client wants the server to continue processing the command it responds with the CONTINUE command. If latencyTime is present, it must be a positive integer that specifies Mansour/Dawson/Royer/Taler/Hill 36 Expires September 2000 Internet Draft CAP March 10, 2000 the maximum number of seconds the client will wait for the next response. If it is omitted, the receiver waits an indefinite period of time for the response. In this example, the client requests a response from the server every 10 seconds. C: SENDDATA:10 C: Content-Type:text/calendar; method=READ; component=VEVENT C: C: BEGIN:VCALENDAR # etc C: END:VCALENDAR C: . # after 10 seconds... S: . S: 2.0.2 S: . S: . C: CONTINUE:10 S: 2.0 S: . S: Content-type:text/calendar; Method=RESPONSE;Component=VDATA; S: Optinfo=VERSION:2.1 S: S: BEGIN:VCALENDAR S: VERSION:2.1 S: CALID:cap://cal.example.com/relcal2 # etc. S: END:VCALENDAR S: . 7.1.7. DISCONNECT Command Arguments: none Data: Result: 2.0 The DISCONNECT command is used by a client to terminate a connection. It always succeeds. Example: C: DISCONNECT # [ed. Note: should the client now wait for a response from the server # before disconnecting? ] S: 2.0 S: . S: . Mansour/Dawson/Royer/Taler/Hill 37 Expires September 2000 Internet Draft CAP March 10, 2000 C: S: 7.1.8. IDENTIFY Command Arguments: Identity to assume Data: None Result: 2.0 6.4 Identity not permitted The "IDENTIFY" command allows the CUA to select a new identity to be used for calendar access. This command may only be called in the Identified State. The CS determines through an internal mechanism if the credentials supplied at authentication permit the assumption of the selected the identity. If they do the session assumes the new identity, otherwise a security error is returned. 7.1.9. SENDDATA Command Arguments: [latencyTime] Data: a MIME encapsulated iCalendar object Result: 2.0.1 - Server will now accept input until . is encountered. The SENDDATA command is used to send calendar requests and commands to the server. After a response code of 2.0.1 is issued the CUA sends a MIME encapsulated iCalendar object to the server. The end of this MIME data is signaled by the special sequence . . 7.1.10. STARTTLS Command Arguments: None Data: None Result: 2.0 6.5 TLS not supported The "STARTTLS" command is issued by the CUA to indicate to the CS that it wishes to negotiate transport level security using [TLS]. If the CS does not support TLS it returns status code 6.5. If the CS supports TLS it issues an initial response of 2.0.12 indicating that the CUA should Mansour/Dawson/Royer/Taler/Hill 38 Expires September 2000 Internet Draft CAP March 10, 2000 proceed with TLS negotiation. Once the TLS negotiation is complete the server returns the response code 2.0. After issuing the "STARTTLS" command the CUA issues the "AUTHENTICATE" command. The SASL external mechanism may be used if the CUA wishes to use the authentication id which was used in the TLS negotiation. The CUA MUST NOT issue a "STARTTLS" if it has already issued an "AUTHENTICATE" or "STARTTLS" command in this session. If a CUA does this the CS must terminate the session. The following examples illustrate the use of the "STARTTLS" command: Unsupported TLS: C: STARTTLS S: 6.5 Supported TLS: C: STARTTLS S: 2.0.12 S: 2.0 S: . S: . 7.1.10.1. UPNEXPAND Method Arguments: UPN Data: no specific data for this command Result: 2.0 - success 2.1 Permission Denied 2.2 Requested UPN not found 2.3 Result exceeds MAXUPNEXPANDLIST 2.4 Misc. UPNEXPAND error Return the members of the argument UPN. Successful result yields one or more CalIDs. More than one CalID returned implies that the UPN was a UG. Example #1: Request lookup of a UPN which is a CU C: UPNEXPAND upn@example.com S: 2.0 upn@example.com S: cap://cal.example.com/calid3 S: . Example #2: Request lookup of UPN which is a UG Mansour/Dawson/Royer/Taler/Hill 39 Expires September 2000 Internet Draft CAP March 10, 2000 C: UPNEXPAND group@example.com S: 2.0 group@example.com S: cap://cal.example.com/calid3 S: cap://cal.example.com/calid6 S: cap://cal.example.com/calid1342 S: . Example #3: Request lookup exceeds MAXUPNEXPANDLIST C: UPNEXPAND group@example.com S: 2.0 group@example.com S: cap://cal.example.com/calid3 S: cap://cal.example.com/calid12 S: cap://cal.example.com/calid21 S: cap://cal.example.com/calid33 S: 2.3 Lookup resulted in too much data S: . Example #4: CS loses contact with directory server during UPNEXPAND C: UPNEXPAND group@example.com S: 2.0 group@example.com S: cap://cal.example.com/calid3 S: cap://cal.example.com/calid5 S: 2.4 Lost contact with directory server S: . 7.2. Application Protocol Commands 7.2.1. Calendaring Commands The following methods provide a set of calendaring commands in CAP. Calendaring commands (or methods) allow a CU to directly manipulate a calendar. Calendar access rights can be granted for the more generalized access provided by the calendar commands. 7.2.1.1. CREATE Method Arguments: none Data: no specific data for this command Result: 2.0 - successfully created the component or calendar 6.0 - Permission denied 6.1 - Container(s) not found 6.2 - Calendar or component already exists 6.3 - Bad args Mansour/Dawson/Royer/Taler/Hill 40 Expires September 2000 Internet Draft CAP March 10, 2000 The CREATE method is used to create a new iCalendar object of type objtype. The property TARGET specifies the container(s) for the create. The type of object wrapped inside of the VCALENDAR/CREATE object is the object type(s) being created. When creating a new calendar at the top level, the CSID is specified. Otherwise the container will be a CalID. 7.2.1.1.1. Creating New Calendars Example to create a new calendar named "Bill's Soccer Team" in several different containers. In the following example, the client is in the Authenticated state with CS cal.example.com. C: SENDDATA C: CONTENT-TYPE: text/calendar;method=CREATE;component=VCOMMAND C: Content-Transfer-Encoding:7bit C: C: BEGIN:VCALENDAR C: VERSION:2.1 C: BEGIN:VCOMMAND C: METHOD:CREATE C: TARGET:cap://cal.example.com/ C: TARGET:relcal4 C: TARGET://bobo.ex.com/ C: TARGET:relcal5 C: TARGET:cap://cal.example.com/relcal8 C: TARGET:relcal9 C: BEGIN:VCALENDAR C: RELCALID:relcalz C: NAME:CHARSET=us-ascii;LANGUAGE=EN-us:Bill's Soccer Team C: OWNER:bill C: OWNER:mary C: CALMASTER:mailto:bill@example.com C: TZID:US_PST C: BEGIN:VCAR C: CARID:12345 C: GRANT:UPN=bill;ACTION=*;OBJECT=* C: GRANT:UPN=mary;ACTION=read;OBJECT=* C: END:VCAR C: END:VCALENDAR C: END:VCOMMAND C: END:VCALENDAR C: . S: 6.0 cap://cal.example.com/ S: 2.0 cap://cal.example.com/relcal4 cap://cal.example.com/relcalz S: 3.1.4 cap://bobo.ex.com/ S: 6.2 cap://cal.example.com/relcal5 S: 3.1.5 cap://cal.example.com/relcal8 S: 7.0 cap://cal.example.com/relcal9 If the example above, the Relative CALID is specified. The values for this property must be unique on a CS. That is the reason for the 3.1.5 error response. Mansour/Dawson/Royer/Taler/Hill 41 Expires September 2000 Internet Draft CAP March 10, 2000 In the example below, the Relative CalID is not specified. So, the CAP server will generate one for each calendar successfully created. The value of the Relative CalID appears as the second parameter on the response code. S: 6.0 cap://cal.example.com/ S: 2.0 cap://cal.example.com/relcal4 cap://cal.example.com/rand123 S: 3.1.4 cap://bobo.ex.com/ S: 6.2 cap://cal.example.com/relcal5 S: 3.1.4 cap://cal.example.com/relcal8 S: 2.0 cap://cal.example.com/relcal9 cap://cal.example.com/rand456 Example to create a new component. C: SENDDATA C: Content-Type:text/calendar; method=CREATE; charset=US-ASCII C: Content-Transfer-Encoding:7bit C: C: BEGIN:VCALENDAR C: VERSION:2.1 C: CMDID:abcde C: METHOD:CREATE C: TARGET:cap://cal.foo.com/relcal1 C: TARGET:relcal2 C: BEGIN:VEVENT C: DTSTART:19990307T180000Z C: UID:abcd12345 C: DTEND:19990307T190000Z C: SUMMARY:Important Meeting C: END:VEVENT C: END:VCALENDAR C: . S: 2.0 S: Content-Type:text/calendar; method=RESPONSE; OPTINFO="CMDID:abcde" S: S: BEGIN:VCALENDAR S: VERSION:2.1 S: CMDID:abcde S: METHOD:RESPONSE S: BEGIN:VEVENT S: REQUEST-STATUS:2.0;cap://cal.foo.com/relcal1 abcd12345 S: REQUEST-STATUS:2.0;cap://cal.foo.com/relcal2 abcd12345 S: END:VEVENT S: END:VCALENDAR The responce returns the calendar (CALID) and UID of the component so that the CUA can match up the REQUEST-STATUS from multiple objects created on multiple calendards (TARGETs). Mansour/Dawson/Royer/Taler/Hill 42 Expires September 2000 Internet Draft CAP March 10, 2000 7.2.1.2. DELETE Method Arguments: none Data: no specific data for this command Result: 2.0 - successfully deleted the component or calendar Permission Calendar or component not found Bad args Container(s) not found The DELETE method is used to delete a calendar or component. The TARGET properties specify the container(s) for the delete. When deleting a calendar at the top level, the CSID is specified. Otherwise the container will be a CalID. Example to delete a VEVENT with UID 'abcd12345': C: SENDDATA C: Content-Type:text/calendar; method=DELETE; component=VCOMMAND C: Content-Transfer-Encoding:7bit C: C: BEGIN:VCALENDAR C: BEGIN:VCOMMAND C: METHOD:DELETE C: TARGET:cap://cal.foo.com/bill C: BEGIN:VQUERY C: SCOPE:VEVENT C: QUERY SELECT="UID" C: WHERE (UID EQ abcd12345) C: END:VQUERY C: END:VCOMMAND C: END:VCALENDAR C: . S: 2.0 S: . And an example to delete the 'MrBill' calendar: C: SENDDATA C: Content-Type:text/calendar; method=DELETE; component=VCOMMAND C: Content-Transfer-Encoding:7bit C: C: BEGIN:VCALENDAR C: BEGIN:VCOMMAND C: METHOD:DELETE C: TARGET:cap://cal.foo.com/MrBill C: END:VCOMMAND C: END:VCALENDAR C: . S: 2.0 S: . Mansour/Dawson/Royer/Taler/Hill 43 Expires September 2000 Internet Draft CAP March 10, 2000 C: SENDDATA C: 7.2.1.3. GENERATEUID Method Arguments: Number of UIDs to generate. Data: new uids Result: 2.0 GENERATEUID returns one or more new unique identifier which MUST be unique on the server's calendar store. It is recommended that the return value be a globally unique id. Example: C: GENERATEUID 2 S: 2.0 abcde1234567-asdf-lkhh abcde1234567-asdf-3455 [Editors note: this example needs work. It's not packaged right] 7.2.1.4. MODIFY Method Arguments: none Data: no specific data for this command Result: 2.0 - successfully modified the component or calendar Permission Calendar or component not found Bad args Container(s) not found The MODIFY method is used to change an existing calendar or component. TARGET specify the container(s) of the modification. When modifying a calendar at the top level, the CSID is specified. Otherwise the container will be a CalID. The format of the request is two or three containers inside of a VCOMMAND container: BEGIN:VCOMMAND [VQUERY] OLD-VALUES NEW-VALUES END:VCOMMAND If a VQUERY is present, then only objects matching the query results are modified. In the example below, the start and end time of the event with UID abcd12345 is changed and the LOCATION property is removed. Mansour/Dawson/Royer/Taler/Hill 44 Expires September 2000 Internet Draft CAP March 10, 2000 C: SENDDATA C: Content-type:text/calendar; Method=MODIFY; Component=VCOMMAND C: C: BEGIN:VCALENDAR C: VERSION:2.1 C: METHOD:MODIFY C: TARGET:relcal2 C: BEGIN:VCOMMAND C: BEGIN:VQUERY C: SCOPE:VEVENT C: QUERY:SELECT UID WHERE (UID EQ abcd12345) C: END:VQUERY C: BEGIN:VEVENT C: DTSTART:19990421T160000Z C: DTEND:19990421T163000Z C: LOCATION:Joe's Diner C: END:VEVENT C: BEGIN:VEVENT C: DTSTART:19990421T160000Z C: DTEND:19990421T163000Z C: END:VEVENT C: END:VCOMMAND C: END:VCALENDAR C: . S: 2.0 cap://cal.example.com/relcal2 And in this example, all instances of "Building 6" are replaced by "New office lobby" in VEVENTs: C: SENDDATA C: Content-type:text/calendar; Method=MODIFY; Component=VCOMMAND C: C: BEGIN:VCALENDAR C: VERSION:2.1 C: METHOD:MODIFY C: TARGET:relcal2 C: BEGIN:VCOMMAND C: BEGIN:VEVENT C: LOCATION:Building 6 C: END:VEVENT C: BEGIN:VEVENT C: LOCATION:New office lobby C: END:VEVENT C: END:VCOMMAND C: END:VCALENDAR C: . S: 2.0 cap://cal.example.com/relcal2 7.2.1.5. MOVE Method Arguments: ContainerId Mansour/Dawson/Royer/Taler/Hill 45 Expires September 2000 Internet Draft CAP March 10, 2000 Data: data as described below Result: 2.0 - success 2.2 - will attempt operation on the remote cap server Permission Calendar already exists Bad args Parent Calendar(s) not found This method is used to move a calendar within the CS's hierarchy of calendars. [Editors Note: there could be VCAR issues with this... if a VCAR's scope of influence is limited to a calendar, we are probably OK. We should discuss this one] 7.2.1.6. NOOP Method Arguments: none Data: none Result: 2.0 - success This method does nothing. It can be sent to the server periodically to request that the CS not time out the session. 7.2.1.7. READ Method Arguments: ContainerId Data: data as described below Result: 2.0 - successful and the requested data follows 2.2 - will attempt read on the remote cap server Permission Bad args Read Events In the example below events on March 10,1999 between 080000Z and 190000Z are read. In this case only 4 properties for each event are returned. Two calendars are specified. Only booked (vs scheduled) entries are to be returned. C: SENDDATA C: Content-type:text/calendar; Method=READ; Component=VQUERY C: C: BEGIN:VCALENDAR C: VERSION:2.1 C: METHOD:READ Mansour/Dawson/Royer/Taler/Hill 46 Expires September 2000 Internet Draft CAP March 10, 2000 C: CMDID:xyz12345 C: TARGET:relcal2 C: TARGET:cap://bobo.ex.com/relcal3 C: BEGIN:VQUERY C: QUERY:SELECT (DTSTART,DTEND,SUMMARY,UID) C: FROM VEVENT C: WHERE (DTEND >= 19990310T080000Z AND C: DTSTART <= 19990310T190000Z AND METHOD EQ CREATE) C: ORDERBY (DTSTART ASC, DTEND, UID, SUMMARY) C: END:VQUERY C: END:VCALENDAR C: . S: 2.0 cap://cal.example.com/relcal2 S: Content-type:text/calendar; Method=RESPONSE; S: Optinfo=VERSION:2.1 S: Content-Transfer-Encoding: 7bit S: S: BEGIN:VCALENDAR S: VERSION:2.1 S: METHOD:RESPONSE S: BEGIN:VEVENT S: DTSTART:19990310T090000Z S: DTEND:19990310T100000Z S: UID:abcxyz12345 S: SUMMARY:Meet with Sir Elton S: END:VEVENT S: BEGIN:VEVENT S: DTSTART:19990310T130000Z S: DTEND:19990310T133000Z S: UID:abcxyz8999 S: SUMMARY:Meet with brave brave Sir Robin S: END:VEVENT S: END:VCALENDAR S: . S: 2.0 cap://bobo.ex.com/relcal3 S: Content-type:text/calendar; Method=RESPONSE;Component=VDATA; S: Optinfo=VERSION:2.1 S: Content-Transfer-Encoding: 7bit S: S: BEGIN:VCALENDAR S: VERSION:2.1 S: METHOD:RESPONSE S: BEGIN:VDATA S: BEGIN:VEVENT S: DTSTART:19990310T140000Z S: DTEND:19990310T150000Z S: UID:123456asdf S: SUMMARY:Summer Budget S: END:VEVENT S: END:VDATA S: END:VCALENDAR S: . Mansour/Dawson/Royer/Taler/Hill 47 Expires September 2000 Internet Draft CAP March 10, 2000 The return values are subject to VCAR filtering. That is, if the request contains properties to which the UPN does not have access, those properties will not appear in the return values. If the UPN has access to at least one property of events, but has been denied access to all properties called out in the request, the response will contain a single RESPONSE-CODE property indicating the error. That is, the VEVENT components will be the following: S: 2.0 cap://bobo.ex.com/sally S: Content-type:text/calendar; Method=RESPONSE;Component=VDATA; S: Optinfo=VERSION:2.1 S: Content-Transfer-Encoding: 7bit S: S: BEGIN:VCALENDAR S: VERSION:2.1 S: BEGIN:VDATA S: BEGIN:VEVENT S: RESPONSE-CODE:3.8 S: END:VEVENT S: END:VDATA S: END:VCALENDAR S: . If the UPN has no access to any events at all, the response will simply be an empty data set. The response looks the same if there are particular events to which the requester has been denied access. S: 2.0 cap://bobo.ex.com/sally S: Content-type:text/calendar; Method=RESPONSE;Component=VDATA; S: Optinfo=VERSION:2.1 S: Content-Transfer-Encoding: 7bit S: S: BEGIN:VCALENDAR S: VERSION:2.1 S: BEGIN:VDATA S: END:VDATA S: END:VCALENDAR S: . Find alarms within a range of time for booked (METHOD EQ CREATE) VEVENTs. C: SENDDATA C: Content-type:text/calendar; Method=READ; Component=VQUERY C: C: BEGIN:VCALENDAR C: VERSION:2.1 C: METHOD:READ C: CMDID:xyz12345 C: TARGET:relcal2 C: TARGET:cap://bobo.ex.com/relcal3 C: BEGIN:VQUERY C: QUERY:SELECT (VEVENT.DTSTART, Mansour/Dawson/Royer/Taler/Hill 48 Expires September 2000 Internet Draft CAP March 10, 2000 VEVENT.DTEND,VEVENT.SUMMARY, VEVENT.UID, VALARM.*) C: FROM VEVENT,VTODO C: WHERE (VALARM.TRIGGER >= 19990310T080000Z AND C: VALARM.TRIGGER <= 19990310T190000Z AND METHOD EQ CREATE) C: ORDERBY (VALARM.TRIGGER ASC) C: END:VQUERY C: END:VCALENDAR C: . S: 2.0 cap://bobo.ex.com/relcal3 S: Content-type:text/calendar; Method=RESPONSE; S: Optinfo=VERSION:2.1 S: Content-Transfer-Encoding: 7bit S: S: BEGIN:VCALENDAR S: VERSION:2.1 S: METHOD:RESPONSE S: CMDID:xyz12345 S: TARGET:cap://bobo.ex.com/relcal3 S: BEGIN:VEVENT S: DTSTART:19990310T130000Z S: DTEND:19990310T133000Z S: UID:abcxyz8999 S: SUMMARY:Meet with brave brave Sir Robin S: BEGIN:VALARM S: TRIGGER:19990310T132500Z S: SUMMARY:Almost time.. S: ACTION:DISPLAY S: END:VALARM S: END:VEVENT S: END:VCALENDAR S: . S: 2.0 cap://bobo.ex.com/relcal2 S: Content-type:text/calendar; Method=RESPONSE; S: Optinfo=VERSION:2.1 S: Content-Transfer-Encoding: 7bit S: S: BEGIN:VCALENDAR S: VERSION:2.1 S: METHOD:RESPONSE S: CMDID:xyz12345 S: TARGET:cap://bobo.ex.com/relcal2 S: BEGIN:VEVENT S: REQUEST-STATUS:2.0 S: END:VEVENT S: END:VCALENDAR S: . Mansour/Dawson/Royer/Taler/Hill 49 Expires September 2000 Internet Draft CAP March 10, 2000 7.2.2. Scheduling Commands The following provide a set of scheduling commands (or methods) in CAP. Scheduling commands allow a CU to indirectly manipulate a calendar by asking another CU to perform an operation on their calendar. For example, CU-A can request CU-B to add a meeting to their calendar; in effect inviting CU-B to the meeting. Calendar access rights can be granted for scheduling commands without granting rights for more generalized access with the calendar commands. [Editors Note: This section needs to be completed by adding the restriction tables for each of these iTIP methods. The basis for the text is to be taken from [RFC2446].] 7.2.2.1. Reading out scheduling components A CU might be invided to a meeting. If the CU had been invided by CAP, the entry in the CU calendar will be scheduled, but not booked. So a CUA will need to look for scheduled entries in the calendar and present them to the CU or automaticly decide if the invitation is to be acceped or processed. Example: The little league coach places the teams entire schedule into your calendar. Lets say that every game and practice is on a Firday night and your calendar now has this iTIP scheduling data: BEGIN:VCALENDAR VERSION:2.0 METHOD:PUBLISH BEGIN:VEVENT DTSTAMP;TZID=US/Pacific:20000229T180000 DTSTART;TZID=US/Pacific:20000303T180000 ORGANIZER:coach@little.league.com SUMMARY: Schedule of games and practice UID:1-coarch@little.league.com SEQUENCE:0 DESCRIPTION:Please have your child at the field and ready to play by 6pm. RRULE:FREQ=WEEKLY;COUNT=10 END:VEVENT END:VCALENDAR At this point the above VEVENT is not booked in your calendar, It is simpley scheduled. A CUA would fetch this and all other scheduled VEVENTs from your calendar with: C: SENDDATA C: Content-type:text/calendar; Method=READ; Component=VQUERY C: C: BEGIN:VCALENDAR C: VERSION:2.1 Mansour/Dawson/Royer/Taler/Hill 50 Expires September 2000 Internet Draft CAP March 10, 2000 C: METHOD:READ C: CMDID:xyz12345 C: TARGET:relcal2 C: BEGIN:VQUERY C: QUERY:SELECT (VEVENT.*) C: FROM VEVENT C: WHERE (METHOD != CREATE) C: END:VQUERY C: END:VCALENDAR C: . The the CUA and CU could determine which scheduling items were to remain on the calendar. Each scheduling component could be deleted or updated with METHOD:MODIFY to change the METHOD from PUBLISH, REQUEST, REPLY, ADD, CANCEL, REFRESH, COUNTER, or DECLINE-COUNTER to what the CU and CUA had decided. In some cases the CUA could automaticly do the work and inform the CU. An example of this is CANCEL. If configured to process METHOD:CANCEL it could METHOD:DELETE the component an inform the CU that the booked component had been canceled. The CUA MUST process the scheduled components in the order sent. Some optimization could be done by the CUA. One example is if a PUBLISH and later a CANCEL for the same component with the same SEQUENCE number were scheduled, but not booked. The CUA might never inform the CU and just treat it as if the PUBLISH had never been received by doing a METHOD:DELETE on both entries. It is important to note that scheduled components do not show up in busy time as BUSY. Only when they are booked does the TRANSP:OPAQUE property take effect. A CS implementation could mark the time as TENTATIVE. This is an implementation and administrative choice. 7.2.2.2. PUBLISH Arguments: Data: data as described below Result: 2.0 - success 2.2 - will attempt operation on the remote cap server Permission Calendar already exists Bad args Parent Calendar(s) not found This method is used to move a calendar within the CS's hierarchy of calendars. If the CU wishes to keep the published entry. A METHOD:MODIFY changing the entries METHOD from PUBLISH to CREATE would be done, booking the entry. Or METHOD:DELETE if the CU did not wish this scheduled item to exist in their calendar. Mansour/Dawson/Royer/Taler/Hill 51 Expires September 2000 Internet Draft CAP March 10, 2000 7.2.2.3. REQUEST 7.2.2.4. REPLY 7.2.2.5. ADD 7.2.2.6. CANCEL 7.2.2.7. REFRESH 7.2.2.8. COUNTER 7.2.2.9. DECLINECOUNTER 7.2.3. iTIP Examples The following examples describe scenarios for the handling of incoming iTIP data. An appropriate sort-order for the handling of incoming iTIP is by UID, Recurrence-id, sequence, dtstamp. This processing may be optimized, for instance, REFRESHs could be processed last. As an update to [RFC2446], data with the "COUNTER" method should be processed even if the Sequence number is stale. 7.2.3.1. Sending and Receiving an iTIP request In this example A invites B and C to a meeting, B accepts the meeting and C rejects it. The calendars for A, B and C are relcal1, relcal2 and relcal3 respectively, and are all on the same server, "cal.foo.com". A lot of these described actions are performed by the CUAs and not the users themselves, the CUAs are called A-c, B-c and C-c respectively. A wishes to create a meeting with B and C, so A-c uses CAP to send the following iTIP request to relcal2 and relcal3, while logged in to "cal.foo.com". BEGIN:VCALENDAR VERSION:2.1 CMDID:xhj-dd METHOD:REQUEST TARGET:cap://cal.foo.com/relcal2 TARGET:relcal3 BEGIN:VEVENT UID:abcd12345 DTSTART:19990307T180000Z Mansour/Dawson/Royer/Taler/Hill 52 Expires September 2000 Internet Draft CAP March 10, 2000 DTEND:19990307T190000Z ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:cap://cal.foo.com/relcal2 ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:cap://cal.foo.com/relcal3 SUMMARY:Important Meeting END:VEVENT END:VCALENDAR An incoming event (indicated by the value of the "METHOD" property) then appears in relcal2 and relcal3, with the following data: BEGIN:VEVENT METHOD:REQUEST UID:abcd12345 DTSTART:19990307T180000Z DTEND:19990307T190000Z ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:cap://cal.foo.com/relcal2 ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:cap://cal.foo.com/relcal3 SUMMARY:Important Meeting END:VEVENT B-c and C-c must search for such incoming events, they do so using the following CAP search: BEGIN:VCALENDAR VERSION:2.1 METHOD:READ CMDID:xhr-de TARGET:relcal2 # or TARGET:relcal3 BEGIN:VQUERY QUERY:SELECT (ALL); FROM VEVENT; WHERE (METHOD == REQUEST); END:VQUERY END:VCALENDAR In response to this search they get the above event. B-c and C-c must then crack open the VEVENT, find the UID and determine if there is already an event on their calendar with that UID. To do this they use the following search: BEGIN:VCALENDAR VERSION:2.1 METHOD:READ CMDID:xhr-df TARGET:relcal2 BEGIN:VQUERY QUERY:SELECT (*) FROM VEVENT WHERE (UID == abcd12345 AND METHOD == CREATE) END:VQUERY Mansour/Dawson/Royer/Taler/Hill 53 Expires September 2000 Internet Draft CAP March 10, 2000 END:VCALENDAR We assume that the event is not already in their relcal2 or relcal3. B-c prompts B who decides to accept the meeting request, and B-c creates a copy of the event in relcal2, with the "PARTSTAT" parameter set to ACCEPTED. B-c also sends this copy to the Organizer at relcal1 as an iTIP REPLY, preserving the CMDID: BEGIN:VCALENDAR VERSION:2.1 CMDID:xhj-dd METHOD:REPLY TARGET:cap://cal.foo.com/relcal1 BEGIN:VEVENT UID:abcd12345 DTSTART:19990307T180000Z DTEND:19990307T190000Z ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE;PARTSTAT=ACCEPTED:cap://cal.foo.com/relcal2 SUMMARY:Important Meeting END:VEVENT END:VCALENDAR C, on the other hand, decides to decline the meeting, and C-c sends a reply to the Organizer to that effect, as follows: BEGIN:VCALENDAR VERSION:2.1 CMDID:xhj-dd METHOD:REPLY TARGET:cap://cal.foo.com/relcal1 BEGIN:VEVENT UID:abcd12345 DTSTART:19990307T180000Z DTEND:19990307T190000Z ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE;PARTSTAT=DECLINED:cap://cal.foo.com/relcal3 SUMMARY:Important Meeting END:VEVENT END:VCALENDAR It is preferable that C-c store the event in relcal3 even though it has been declined. Storing the event in relcal3 allows subsequent iTIP messages to be interpreted correctly. The "PARTSTAT" parameter indicates that the event was refused. After receiving the replies from relcal2 and relcal3, A-c updates the version of the event in relcal1 to indicate the new participation statii: BEGIN:VEVENT METHOD:REQUEST Mansour/Dawson/Royer/Taler/Hill 54 Expires September 2000 Internet Draft CAP March 10, 2000 UID:abcd12345 DTSTART:19990307T180000Z DTEND:19990307T190000Z ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE;PARTSTAT=ACCEPTED:cap://cal.foo.com/relcal2 ATTENDEE;PARTSTAT=DECLINED:cap://cal.foo.com/relcal3 SUMMARY:Important Meeting END:VEVENT A-c then sends a new iTIP request to relcal2 only, indicating the updated information. 7.2.3.2. Handling an iTIP refresh A little bit later, C is thinking about accepting the event in the previous example, but first wants to check the current state of the event. To find the current state C-c uses the iTIP "REFRESH" method, sending the following to relcal1: BEGIN:VCALENDAR VERSION:2.1 CMDID:xud-pn METHOD:REFRESH TARGET:cap://cal.foo.com/relcal1 BEGIN:VEVENT UID:abcd12345 ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE:cap://cal.foo.com/relcal3 DTSTAMP:19990306T202333Z END:VEVENT END:VCALENDAR A-c finds the refresh as an incoming iTIP, and searches for the corresponding event. Having found the event (with no changes since the last example) A-c then verifies that relcal3 is in fact an Attendee of the event and is thus allowed to request a refresh. (In the case of a published event things are more complicated.) A-c packages the event up as an iTIP request and sends it to relcal3: BEGIN:VCALENDAR VERSION:2.1 CMDID: xud-pn METHOD:REQUEST TARGET:cap://cal.foo.com/relcal3 BEGIN:VEVENT UID:abcd12345 DTSTART:19990307T180000Z DTEND:19990307T190000Z ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE;PARTSTAT=ACCEPTED:cap://cal.foo.com/relcal2 ATTENDEE;PARTSTAT=DECLINED:cap://cal.foo.com/relcal3 SUMMARY:Important Meeting Mansour/Dawson/Royer/Taler/Hill 55 Expires September 2000 Internet Draft CAP March 10, 2000 SEQUENCE:0 DTSTAMP:19990306T204333Z END:VEVENT END:VCALENDAR [Ed. - should the CMDID match that of the REFRESH?] 7.2.3.3. Sending and accepting an iTIP counter Having received the latest copy of the event C wishes to propose a venue for the event, using an iTIP COUNTER. To do this C-c sends the following to relcal1: BEGIN:VCALENDAR VERSION:2.1 CMDID:zzykjjk METHOD:COUNTER TARGET:cap://cal.foo.com/relcal1 BEGIN:VEVENT UID:abcd12345 DTSTART:19990307T180000Z DTEND:19990307T190000Z ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE;PARTSTAT=DECLINED:cap://cal.foo.com/relcal3 SUMMARY:Important Meeting LOCATION:La Belle Province COMMENT:My favourite restaurant, I'll definitely go if it's there. END:VEVENT END:VCALENDAR Having sent the information to relcal1, C-c shouldn't store the new details in relcal3. If C-c updated the version in relcal3 and relcal1 did not reply to the counter, then relcal3 would have incorrect information. Instead C-c preserves the correct information and waits for a response from relcal1. A CUA implementation may wish to preserve this information itself, externally to the CS. In order to receive an iTIP counter A-c follows the same search as for other iTIP data, first find the incoming message, next find any matching events in the calendar store. Having found the matching event, A reviews the proposed changes and decides to accept the COUNTER. To do this, A-c modifies the version in relcal1 (bumping the sequence number) to: BEGIN:VEVENT METHOD:CREATE UID:abcd12345 DTSTART:19990307T180000Z DTEND:19990307T190000Z ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE;PARTSTAT=ACCEPTED:cap://cal.foo.com/relcal2 ATTENDEE;PARTSTAT=DECLINED:cap://cal.foo.com/relcal3 SUMMARY:Important Meeting LOCATION:La Belle Province SEQUENCE:1 END:VEVENT A-c then sends the updated version as a request to both relcal2 and Mansour/Dawson/Royer/Taler/Hill 56 Expires September 2000 Internet Draft CAP March 10, 2000 relcal3: BEGIN:VCALENDAR VERSION:2.1 CMDID:xup-po METHOD:REQUEST TARGET:cap://cal.foo.com/relcal2 TARGET:cap://cal.foo.com/relcal3 BEGIN:VEVENT UID:abcd12345 DTSTART:19990307T180000Z DTEND:19990307T190000Z ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:cap://cal.foo.com/relcal2 ATTENDEE;RSVP=TRUE;PARTSTAT=NEEDS-ACTION:cap://cal.foo.com/relcal3 SUMMARY:Important Meeting LOCATION:La Belle Province SEQUENCE:1 DTSTAMP:19990307T054339Z END:VEVENT END:VCALENDAR 7.2.3.4. Declining an iTIP counter B does not like the new location and also counters the event, B-c sends the following iTIP: BEGIN:VCALENDAR VERSION:2.1 CMDID:xim-ef METHOD:COUNTER TARGET:cap://cal.foo.com/relcal1 BEGIN:VEVENT UID:abcd12345 DTSTART:19990307T180000Z DTEND:19990307T190000Z ORGANIZER:cap://cal.foo.com/relcal1 ATTENDEE:cap://cal.foo.com/relcal2 SUMMARY:Important Meeting LOCATION:Au Coin Dor=E9 END:VEVENT END:VCALENDAR However, C does not accept the counter, and C-c replies with a decline counter: BEGIN:VCALENDAR VERSION:2.1 CMDID:xim-ef METHOD:DECLINE-COUNTER TARGET:cap://cal.foo.com/relcal2 BEGIN:VEVENT Mansour/Dawson/Royer/Taler/Hill 57 Expires September 2000 Internet Draft CAP March 10, 2000 DTSTAMP:19990307T093245Z UID:abcd12345 ORGANIZER:cap://cal.foo.com/relcal1 SEQUENCE:1 END:VEVENT END:VCALENDAR Fortunately B-c kept the original information when sending the counter, and there is no problem when no information is returned in the DECLINE- COUNTER. 8. Response Codes Numeric response codes are returned at both the transfer and application layer. The same set of codes is used in both cases. [Editors Note: Do we want to use the same set of codes?] The format of these codes is described in [RFC2445], and extend in [RFC2446] and [RFC2447]. The following describes new codes added to this set. At the application layer response codes are returned as the value of a "REQUEST-STATUS" property. The value type of this property is modified from that defined in [RFC2445], to make the accompanying text optional. Code Params Description ---------------------------------------------------------- 2.0 varies Success, The parameters vary with the operation and are specified. 2.0.1 none Success, send data, terminate with . 2.0.2 A reply is pending. It could not be com- pleted in the specified amount of time. The server awaits a CONTINUE or ABORT command. 2.0.3 In response to the client issuing an ABORT command, this reply code indicates that any command currently underway was successfully aborted. Mansour/Dawson/Royer/Taler/Hill 58 Expires September 2000 Internet Draft CAP March 10, 2000 2.0.6 An operation is being attempted on a re- mote server. This response indicates that the server has not yet been con- tacted but an attempt will be made to contact it after the command has been sent. 3.1.4 Capability not supported. 4.1 Calendar store access denied. 6.1 Authenticate failure: unsupported au- thentication mechanism, credentials re- jected. 6.2 Sender aborted authentication, authenti- cation exchange cancelled. 6.3 Attempt to create or modify an event such that it would overlap another event in either of the following two circum- stances: (a) One of the events has a TRANSP prop- erty set to OPAQUE-NOCONFLICT or TRANS- PARENT-NOCONFLICT. (b) The calendar's ALLOW-CONFLICT prop- erty is set to NO. 7.0 A timeout has occurred. The server was unable to complete the operation in the requested time. 8.0 A failure has occurred in the Receiver that prevents the operation from suc- ceeding. 8.1 Sent when a session cannot be estab- lished because the CAP Server is too busy. 8.2 Used to signal that an ICAL object has exceeded the server's size limit 8.3 A DATETIME value was too large to be represented on this Calendar. 8.4 A DATETIME value was too far in the past to be represented on this Calendar. Mansour/Dawson/Royer/Taler/Hill 59 Expires September 2000 Internet Draft CAP March 10, 2000 8.5 An attempt was made to create a new ob- ject but the unique id specified is al- ready in use. 8.6 ID clash 9.0 An unrecognized command was received. 10.1 Accompanied by an alternate address. The RECIPIENT specified should be contacted at the given alternate address. The re- ferral address MUST follow the reply code. 10.2 The server is shutting down. 10.4 The operation has not be performed be- cause it would cause the resources (mem- ory, disk,CPU, etc) to exceed the allo- cated quota. 10.5 The ITIP message has been queued too too long. Delivery has been aborted. ---------------------------------------------------------- 8.1. Minimum CS query implementation The following is a MUST for a CS implementation. 8.1.1. Query by UID 8.1.2. Query by Date / Date-Time range 8.1.2.1. Date/Date-Time query with subset of properties 8.1.3. 9. Detailed SQL Schema This section describes a conceptual schema for object model in CAP. It is used as the basis for querying data managed by the CS. This is only a conceptual schema. Implementations can use any schema they like so long as they are prepared to map CAP queries that are expressed in this conceptual schema. Implementations are not required to use SQL database technology. The protocol is designed such that a CUA does not need to Mansour/Dawson/Royer/Taler/Hill 60 Expires September 2000 Internet Draft CAP March 10, 2000 understand SQL. The CUA just sends strings that happen to be valid SQL queries. This schema is based on SQL-92 [SQL] along with the [SQLCOM] corrections. Properties than can occur multiple times are intended to be put in separate tables. For example BEGIN:VEVENT UID:1 DTSTART:19990326T201400Z ORGANIZER:mailto:sam@abc.COM SUMMARY:I have 2 attachments ATTACHMENT;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell.au ATTACHMENT;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell2.au END:VEVENT There are two ATTACHMENT properties each having a unique value. These are kept in separate tables. This is diagrammed below. The diagram is not a complete representation of the VEVENT table. It is an abbreviated table used to illustrate how properties that can occur multiple times are intended to be represented. +----------------------------------------------------------------------+ | ABBREVIATED VEVENT TABLE | +----+-----------------+---------------------+--------------+----------+ | | | | | | |UID |DTSTART |ORGANIZER |SUMMARY |ATTACH_KEY| +----+-----------------+---------------------+--------------+----------+ |1 |19990326T201400Z |mailto:sam@abc.com |I have 2 at- |123 | | | | |tachments | | +----+-----------------+---------------------+--------------+----------+ |999 |19700101T000000Z |mailto:user@host.com |I have no | | | | | |attachments | | +----+-----------------+---------------------+--------------+----------+ Mansour/Dawson/Royer/Taler/Hill 61 Expires September 2000 Internet Draft CAP March 10, 2000 +-----------------------------------------------------------------------+ | ABBREVIATED ATTACH_KEY TABLE | +------------+------------------------------------+---------------------+ | | | | |ATTACH_KEY |VALUE | INLINE_BLOB | +------------+------------------------------------+---------------------+ |123 |ftp://host.com/pub/sounds/bell.au | | +------------+------------------------------------+---------------------+ |123 |ftp://host.com/pub/sounds/bell2.au | | +------------+------------------------------------+---------------------+ |234 | | MIICajCCAdO-gAw- | | | | IBAgICBEU <...re- | | | | mainder of "BASE64" | | | | encoded binary da- | | | | ta...> | +------------+------------------------------------+---------------------+ 9.1. iCalendar Store Schema The following defines the schema for an iCalendar object and the components, properties, and parameters defined and used in [RFC2445], [RFC2446], [RFC2447], and [CAP]. NOTES: CURRENT_DATETIME would not be stored in the database. It is selectable and read only. When supporting virtual hosts, there could be more than one row in the CALSTORE table. And then the CSID MUST not be empty. TIMESTAMP(14) is the SQL value equivelant of DATE-TIME. FLOAT(7,3) is an SQL 3x3 floating number (xxx.yyy). 9.1.1. ACTION schema /* * If VALUE is NULL, then OTHER_VALUE contains non-rfc2445 value . */ CREATE TABLE ACTION ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE ENUM("AUDIO", "DISPLAY", "EMAIL", "PROCEDURE") NOT NULL, OTHER_VALU TEXT, XPARAM INTEGER /* VALUE_KEY */ ); Mansour/Dawson/Royer/Taler/Hill 62 Expires September 2000 Internet Draft CAP March 10, 2000 9.1.2. ATTACH schema /* * VALUE is a FILE uri. The data is decoded (per ENCODING) prior to being * stored into the file */ CREATE TABLE ATTACH ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE VARCHAR(255) NOT NULL, ISBINARY ENUM("T", "F") DEFAULT "F", FMTTYPE INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.3. ATTENDEE schema CREATE TABLE ATTENDEE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT, CUTYPE INTEGER, /* VALUE_KEY */ MEMBER INTEGER, /* VALUE_KEY */ ROLE INTEGER, /* VALUE_KEY */ PARTSTAT INTEGER, /* VALUE_KEY */ RSVP ENUM("T", "F") DEFAULT "F", DELEGATED_TO INTEGER, /* VALUE_KEY */ DELEGATED_FROM INTEGER, /* VALUE_KEY */ CN INTEGER, /* VALUE_KEY */ DIR INTEGER, /* VALUE_KEY */ LANGUAGE INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.4. CALSTORE schema CREATE TABLE CALSTORE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, CSID VARCHAR(255) NOT NULL, CALMASTER TINYTEXT NOT NULL, DEFAULT_VCAR INTEGER, /* VALUE_KEY */ MAXDATE TIMESTAMP(14) NOT NULL DEFAULT "99991231235959", MINDATE TIMESTAMP(14) NOT NULL DEFAULT "00000101000000", CURRENT_DATETIME TIMESTAMP(14) NOT NULL, RECUR_ACCEPTED ENUM("T", "F") NOT NULL DEFAULT "T", RECUR_EXPAND ENUM("T", "F") NOT NULL DEFAULT "T", RECUR_LIMIT INTEGER DEFAULT 0, VERSION VARCHAR(10) NOT NULL DEFAULT "2.0" ); Mansour/Dawson/Royer/Taler/Hill 63 Expires September 2000 Internet Draft CAP March 10, 2000 9.1.5. CHILDREN schema CREATE TABLE CHILDREN ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, /* KEY_VALUE */ CALID VARCHAR(255) ); 9.1.6. CLASS schema CREATE TABLE CLASS ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE ENUM("PUBLIC", "PRIVATE", "CONFIDENTIAL", "") NOT NULL, OTHER_VALUE TEXT, XPARAM INTEGER /* VALUE_KEY */ ); 9.1.7. CN schema CREATE TABLE CN ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE VARCHAR(255) NOT NULL ); 9.1.8. COMMENT schema CREATE TABLE COMMENT ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT NOT NULL, ALTREP INTEGER, /* VALUE_KEY */ LANGUAGE INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.9. CONTACT schema CREATE TABLE CONTACT ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TINYTEXT NOT NULL, ALTREP VARCHAR(255), LANGUAGE INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); Mansour/Dawson/Royer/Taler/Hill 64 Expires September 2000 Internet Draft CAP March 10, 2000 9.1.10. CREATED schema CREATE TABLE CREATED ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TIMESTAMP(14) NOT NULL, VALUETYPE INTEGER NOT NULL, /* VALUE_KEY */ TZID INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.11. CUTYPE schema CREATE TABLE CUTYPE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE ENUM("INDIVIDUAL", "GROUP", "RESOURCE", "ROOM", "UNKNOWN", "") NOT NULL, OTHER_VALUE TINYTEXT ); 9.1.12. DAYLIGHT_STANDARD schema CREATE TABLE DAYLIGHT_STANDARD ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, DTSTART INTEGER NOT NULL, /* VALUE_KEY */ TZOFFSETFROM INTEGER NOT NULL, /* SECONDS */ TZOFFSETTO INTEGER NOT NULL, /* SECONDS */ COMMENT INTEGER, /* VALUE_KEY */ RDATE INTEGER, /* VALUE_KEY */ RRULE INTEGER, /* VALUE_KEY */ TZNAME TINYTEXT, XPROP INTEGER /* VALUE_KEY */ ); 9.1.13. DESCRIPTION schema CREATE TABLE DESCRIPTION ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT, ALTREP INTEGER, /* VALUE_KEY */ Mansour/Dawson/Royer/Taler/Hill 65 Expires September 2000 Internet Draft CAP March 10, 2000 LANGUAGE INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.14. DIR schema CREATE TABLE DIR ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT ); 9.1.15. DTEND schema CREATE TABLE DTEND ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TIMESTAMP(14) NOT NULL, VALUETYPE INTEGER NOT NULL, /* VALUE_KEY */ TZID INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.16. DTSTAMP schema CREATE TABLE DTSTART ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TIMESTAMP(14) NOT NULL, VALUETYPE INTEGER NOT NULL, /* VALUE_KEY */ TZID INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.17. DUE schema CREATE TABLE DUE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TIMESTAMP(14) NOT NULL, VALUETYPE INTEGER NOT NULL, /* VALUE_KEY */ TZID INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); Mansour/Dawson/Royer/Taler/Hill 66 Expires September 2000 Internet Draft CAP March 10, 2000 9.1.18. DURATION schema CREATE TABLE DURATION ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE INTEGER, /* SECONDS */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.19. EXDATE schema CREATE TABLE EXDATE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TIMESTAMP(14) NOT NULL, VALUETYPE INTEGER NOT NULL, /* VALUE_KEY */ TZID INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.20. EXRULE schema CREATE TABLE EXRULE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE INTEGER NOT NULL, /* VALUE_KEY (RECUR) */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.21. FBTYPE schema CREATE TABLE FBTYPE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE ENUM("FREE", "BUSY", "BUSY-UNAVALIBLE", "BUSY-TENTATIVE", "") NOT NULL, OTHER_VALUE TINYTEXT ); 9.1.22. FMTTYPE schema CREATE TABLE FMTTYPE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TINYTEXT ); Mansour/Dawson/Royer/Taler/Hill 67 Expires September 2000 Internet Draft CAP March 10, 2000 9.1.23. FREEBUSY schema CREATE TABLE FREEBUSY ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE_FROM TIMESTAMP(14) NOT NULL, VALUE_TO TIMESTAMP(14), DURATION INTEGER, /* SECONDS */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.24. GEO schema CREATE TABLE GEO ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, LATITUDE FLOAT(7,3), LONGITUDE FLOAT(7,3), XPARAM INTEGER /* VALUE_KEY */ ); 9.1.25. LANGUAGE schema CREATE TABLE LANGUAGE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TINYTEXT ); 9.1.26. LAST_MODIFIED schema CREATE TABLE LAST_MODIFIED ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TIMESTAMP(14) NOT NULL, XPARAM INTEGER /* VALUE_KEY */ ); 9.1.27. MEMBER schema CREATE TABLE MEMBER ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT ); Mansour/Dawson/Royer/Taler/Hill 68 Expires September 2000 Internet Draft CAP March 10, 2000 9.1.28. METHOD schema CREATE TABLE METHOD ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE ENUM("PUBLISH", "REQUEST", "REFRESH", "CANCEL", "ADD", "REPLY", "COUNTER", "DECLINE-COUNTER", "CREATE", "DELETE", "MODIFY", "MOVE", "READ", "") NOT NULL, OTHER_VALUE TEXT ); 9.1.29. ORGANIZER schema CREATE TABLE ORGANIZER ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT NOT NULL, CN INTEGER, /* VALUE_KEY */ DIR INTEGER, /* VALUE_KEY */ SENT_BY INTEGER, /* VALUE_KEY */ LANGUAGE INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.30. OWNERS schema CREATE TABLE OWNERS ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TINYTEXT NOT NULL ); 9.1.31. PARTSTAT schema CREATE TABLE PARTSTAT ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE ENUM("NEEDS-ACTION", "ACCEPTED", "DECLINED", Mansour/Dawson/Royer/Taler/Hill 69 Expires September 2000 Internet Draft CAP March 10, 2000 "TENTATIVE", "DELEGATED", "COMPLETED", "IN-PROCESS", "") NOT NULL DEFAULT "NEEDS-ACTION", OTHER_VALUE TINYTEXT ); 9.1.32. PERCENT_COMPLETE schema CREATE TABLE PERCENT_COMPLETE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE INTEGER NOT NULL, XPARAM INTEGER /* VALUE_KEY */ ); 9.1.33. PRIORITY schema CREATE TABLE PRIORITY ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE INTEGER NOT NULL, XPARAM INTEGER /* VALUE_KEY */ ); 9.1.34. RDATE schema /* VALUETYPE (D) = DATE, (T) = DATE-TIME, (P) = PERIOD */ CREATE TABLE RDATE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TIMESTAMP(14) NOT NULL, VALUETYPE ENUM("D", "T", "P") NOT NULL DEFAULT "T", TZID INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.35. RECUR schema CREATE TABLE RECUR ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, FREQ ENUM("SECONDLY", "MINUTELY", "HOURLY", "DAILY", "WEEKLY", "MONTHLY", "YEARLY"), UNTIL TIMESTAMP(14), COUNT INTEGER, INTERVAL_VAL INTEGER, Mansour/Dawson/Royer/Taler/Hill 70 Expires September 2000 Internet Draft CAP March 10, 2000 BYSECOND SET("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59"), BYMINUTE SET("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59"), BYHOUR SET("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"), BYDAY TINYTEXT, BYMONTHDAY SET("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9", "-10", "-11", "-12", "-13", "-14", "-15", "-16", "-17", "-18", "-19", "-20", "-21", "-22", "-23", "-24", "-25", "-26", "-27", "-28", "-29", "-30", "-31"), BYYEARDAY TINYTEXT, BYWEEKNO TINYTEXT, BYMONTH SET("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"), BYSETPOS TINYTEXT, WKST SET("SU", "MO", "TU", "WE", "TH", "FR", "SA"), XPARAM INTEGER /* VALUE_KEY */ ); 9.1.36. RECURRENCE_ID schema CREATE TABLE RECURRENCE_ID ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TIMESTAMP(14) NOT NULL, VALUETYPE INTEGER NOT NULL, /* VALUE_KEY */ RANGE ENUM("THISANDPRIOR", "THISANDFUTURE"), TZID INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ Mansour/Dawson/Royer/Taler/Hill 71 Expires September 2000 Internet Draft CAP March 10, 2000 ); 9.1.37. RELATED_TO schema CREATE TABLE RELATED_TO ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT, RELTYPE ENUM("PARENT", "CHILD", "SIBLING", ""), OTHER_RELTYPE TINYTEXT, XPARAM INTEGER /* VALUE_KEY */ ); 9.1.38. REPEAT schema CREATE TABLE REPEAT ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE INTEGER NOT NULL DEFAULT 0, XPARAM INTEGER /* VALUE_KEY */ ); 9.1.39. RESOURCES schema CREATE TABLE RESOURCES ( VALUE_Y INTEGER NOT NULL PRIMARY KEY, VALUE TEXT NOT NULL, ALTREP INTEGER, /* VALUE_KEY */ LANGUAE INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.40. ROLE schema CREATE TABLE ROLE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE ENUM("CHAIR", "REQ-PARTICIPANT", "OPT-PARTICIPANT", "NON-PARTICIPANT", "") NOT NULL DEFAULT "REQ-PARTICIPANT", OTHER_VALUE TINYTEXT ); Mansour/Dawson/Royer/Taler/Hill 72 Expires September 2000 Internet Draft CAP March 10, 2000 9.1.41. RRULE schema CREATE TABLE RRULE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE INTEGER NOT NULL, /* VALUE_KEY (RECUR) */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.42. SEQUENCE schema CREATE TABLE SEQUENCE ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY DEFAULT 0, VALUE INTEGER NOT NULL, XPARAM INTEGER /* VALUE_KEY */ ); 9.1.43. STATUS schema CREATE TABLE STATUS ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE ENUM("TENTATIVE", "CONFIRMED", "CANCELLED", "NEEDS-ACTION", "COMPLETED", "IN-PROCESS", "DRAFT", "FINAL") NOT NULL, XPARAM INTEGER /* VALUE_KEY */ ); 9.1.44. SUMMARY schema CREATE TABLE SUMMARY ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TINYTEXT, ALTREP INTEGER, /* VALUE_KEY */ LANGUAGE INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.45. TRANSP schema CREATE TABLE TRANSP ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, Mansour/Dawson/Royer/Taler/Hill 73 Expires September 2000 Internet Draft CAP March 10, 2000 VALUE ENUM("OPQQUE", "TRANSPARENT", "OPAQUE-NOCONFLICTS", "TRANSPARENT-NOCONFLICTS") NOT NULL DEFAULT "TRANSPARENT", XPARAM INTEGER /* VALUE_KEY */ ); 9.1.46. TRIGGER schema CREATE TABLE TRIGGER ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUETYPE INTEGER NOT NULL, /* VALUE_KEY */ VALUE_DT TIMESTAMP(14), VALUE_P INTEGER, /* SECONDS */ RELATED INTEGER, /* VALUE_KEY */ XPARAM INTEGER /* VALUE_KEY */ ); 9.1.47. TZID schema CREATE TABLE TZID ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT ); 9.1.48. UID schema CREATE TABLE UID ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT, XPARAM INTEGER /* VALUE_KEY */ ); 9.1.49. URL schema CREATE TABLE URL ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT, XPARAM INTEGER /* VALUE_KEY */ ); Mansour/Dawson/Royer/Taler/Hill 74 Expires September 2000 Internet Draft CAP March 10, 2000 9.1.50. VALARM schema CREATE TABLE VALARM ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, ACTION INTEGER NOT NULL, /* VALUE_KEY */ ATTACH INTEGER, DESCRIPTION INTEGER, /* VALUE_KEY */ DURATION INTEGER, /* VALUE_KEY */ REPEAT INTEGER, /* VALUE_KEY */ SUMMARY INTEGER, /* VALUE_KEY */ TRIGGER INTEGER, /* VALUE_KEY */ X_PROP INTEGER /* VALUE_KEY */ ); 9.1.51. VCALENDAR schema CREATE TABLE VCALENDAR ( VALUE_KEY INTEGER NOT NULL, ALLOW_CONFLICTS ENUM("T", "F") DEFAULT "T", CALSCALE TINYTEXT NOT NULL, CHARSET TINYTEXT NOT NULL, CHILDREN INTEGER, /* VALUE_KEY */ CREATED INTEGER, /* VALUE_KEY */ DEFAULT_VCAR INTEGER NOT NULL, /* VALUE_KEY */ LANGUAGE INTEGER, /* VALUE_KEY */ LAST_MODIFIED INTEGER, /* VALUE_KEY */ NAME TINYTEXT, OWNERS INTEGER, /* VALUE_KEY */ PARENT INTEGER, /* VALUE_KEY */ RELCALID VARCHAR(255) NOT NULL PRIMARY KEY, TOMESTONE ENUM("T", "F") NOT NULL DEFAULT "T", TZID INTEGER NOT NULL /* VALUE_KEY */ ); 9.1.52. VCAR schema CREATE TABLE VCAR ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TINYTEXT /**/ ); 9.1.53. VEVENT schema The METHOD value will be CREATE for booked entries. Or it must be a valid scheduling METHOD such as PUBLISH, REQUEST, REPLY, ADD, CANCEL, REFRESH, COUNTER or DECLINE-COUNTER. Mansour/Dawson/Royer/Taler/Hill 75 Expires September 2000 Internet Draft CAP March 10, 2000 CREATE TABLE VEVENT ( ATTACH INTEGER, /* VALUE_KEY */ ATTENDEE INTEGER, /* VALUE_KEY */ CATEGORIES INTEGER, /* VALUE_KEY */ CLASS INTEGER, /* VALUE_KEY */ COMMENT INTEGER, /* VALUE_KEY */ CONTACT INTEGER, /* VALUE_KEY */ CREATED INTEGER, /* VALUE_KEY */ DESCRIPTION INTEGER, /* VALUE_KEY */ DTEND INTEGER, /* VALUE_KEY */ DTSTAMP INTEGER, /* VALUE_KEY */ DTSTART INTEGER, /* VALUE_KEY */ DURATION INTEGER, /* VALUE_KEY */ EXDATE INTEGER, /* VALUE_KEY */ EXRULE INTEGER, /* VALUE_KEY */ GEO INTEGER, /* VALUE_KEY */ LAST_MODIFIED INTEGER, /* VALUE_KEY */ LOCATION INTEGER, /* VALUE_KEY */ METHOD INTEGER, /* VALUE_KEY */ ORGANIZER INTEGER, /* VALUE_KEY */ PRIORITY INTEGER, /* VALUE_KEY */ RECURRENCE_ID INTEGER, /* VALUE_KEY */ RDATE_KEY INTEGER, /* VALUE_KEY */ RELATED_TO INTEGER, /* VALUE_KEY */ RESOURCES INTEGER, /* VALUE_KEY */ RRULE INTEGER, /* VALUE_KEY */ SUMMARY INTEGER, /* VALUE_KEY */ SEQUENCE INTEGER, /* VALUE_KEY */ STATUS INTEGER, /* VALUE_KEY */ TRANSP INTEGER, /* VALUE_KEY */ UID INTEGER, /* VALUE_KEY */ URL INTEGER, /* VALUE_KEY */ X_PROP_KEY INTEGER, /* VALUE_KEY */ VALARM_KEY INTEGER /* VALUE_KEY */ ); 9.1.54. VFREEBUSY schema An implementation may not actually have a VFREEBUSY table as the information may be produced dynamicly. However a CS MUST appear to provide this table as this may be how a CUA chooses to query for VFREEBUSY information while using [CAP]. Example, it probably would not make any sense for ATTENDEE to exist in this table, yet a CUA may wish to ask for the VFREEBUSY for an ATTENDEE. CREATE TABLE VFREEBUSY ( ATTENDEE INTEGER, /* VALUE_KEY */ COMMENT INTEGER, /* VALUE_KEY */ CONTACT INTEGER, /* VALUE_KEY */ DTEND INTEGER, /* VALUE_KEY */ Mansour/Dawson/Royer/Taler/Hill 76 Expires September 2000 Internet Draft CAP March 10, 2000 DTSTAMP INTEGER, /* VALUE_KEY */ DTSTART INTEGER, /* VALUE_KEY */ FREEBUSY INTEGER, /* VALUE_KEY */ METHOD INTEGER, /* VALUE_KEY */ ORGANIZER INTEGER, /* VALUE_KEY */ X_PROP_KEY INTEGER, /* VALUE_KEY */ URL INTEGER /* VALUE_KEY */ ); 9.1.55. VJOURNAL schema The METHOD value will be CREATE for booked entries. Or it must be a valid scheduling METHOD such as PUBLISH, REQUEST, REPLY, ADD, CANCEL, REFRESH, COUNTER or DECLINE-COUNTER. CREATE TABLE VJOURNAL ( ATTACH_KEY INTEGER, /* VALUE_KEY */ CATEGORIES INTEGER, /* VALUE_KEY */ CLASS INTEGER, /* VALUE_KEY */ COMMENT INTEGER, /* VALUE_KEY */ CONTACT INTEGER, /* VALUE_KEY */ CREATED INTEGER, /* VALUE_KEY */ DESCRIPTION INTEGER, /* VALUE_KEY */ DTSTAMP INTEGER, /* VALUE_KEY */ DTSTART INTEGER, /* VALUE_KEY */ EXDATE INTEGER, /* VALUE_KEY */ EXRULE INTEGER, /* VALUE_KEY */ LAST_MODIFIED INTEGER, /* VALUE_KEY */ METHOD INTEGER, /* VALUE_KEY */ ORGANIZER INTEGER, /* VALUE_KEY */ RDATE INTEGER, /* VALUE_KEY */ RECURRENCE_ID INTEGER, /* VALUE_KEY */ RELATED_TO INTEGER, /* VALUE_KEY */ RRULE INTEGER, /* VALUE_KEY */ SEQUENCE INTEGER, /* VALUE_KEY */ STATUS INTEGER, /* VALUE_KEY */ SUMMARY INTEGER, /* VALUE_KEY */ UID INTEGER, /* VALUE_KEY */ X_PROP INTEGER /* VALUE_KEY */ ); 9.1.56. VQUERY schema Stored VQUERYs will use the following schema. CREATE TABLE VQUERY ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TINYTEXT, /* QUERYNAME */ SCOPE TINYTEXT, MAXRESULTS INTEGER, Mansour/Dawson/Royer/Taler/Hill 77 Expires September 2000 Internet Draft CAP March 10, 2000 MAXSIZE INTEGER, CARSELECT TEXT, CARWHERE TEXT, CARORDERBY TEXT, X_PROP INTEGER /* VALUE_KEY */ ); 9.1.57. VTIMEZONE schema CREATE TABLE VTIMEZONE ( DAYLIGHT INTEGER NOT NULL, /* VALUE_KEY */ STANDARD INTEGER NOT NULL, /* VALUE_KEY */ TZID INTEGER NOT NULL, /* VALUE_KEY */ TZURL INTEGER, /* VALUE_KEY */ X_PROP_KEY INTEGER /* VALUE_KEY */ ); 9.1.58. VTODO schema The METHOD value will be CREATE for booked entries. Or it must be a valid scheduling METHOD such as PUBLISH, REQUEST, REPLY, ADD, CANCEL, REFRESH, COUNTER or DECLINE-COUNTER. CREATE TABLE VTODO ( ATTENDEE INTEGER, /* VALUE_KEY */ ATTACH INTEGER, /* VALUE_KEY */ CATEGORIES INTEGER, /* VALUE_KEY */ CLASS INTEGER, /* VALUE_KEY */ COMMENT INTEGER, /* VALUE_KEY */ CONTACT INTEGER, /* VALUE_KEY */ CREATED INTEGER NOT NULL, /* VALUE_KEY */ DESCRIPTION INTEGER, /* VALUE_KEY */ DTSTAMP INTEGER NOT NULL, /* VALUE_KEY */ DTSTART INTEGER NOT NULL, /* VALUE_KEY */ DUE INTEGER, /* VALUE_KEY */ DURATION INTEGER, /* VALUE_KEY */ EXDATE INTEGER, /* VALUE_KEY */ EXRULE INTEGER, /* VALUE_KEY */ GEO INTEGER, /* VALUE_KEY */ LAST_MODIFIED INTEGER NOT NULL, /* VALUE_KEY */ LOCATION INTEGER, /* VALUE_KEY */ METHOD INTEGER, /* VALUE_KEY */ ORGANIZER INTEGER, /* VALUE_KEY */ PERCENT_COMPLETE INTEGER, /* VALUE_KEY */ PRIORITY INTEGER, /* VALUE_KEY */ RDATE INTEGER, /* VALUE_KEY */ RECURRENCE_ID INTEGER, /* VALUE_KEY */ RESOURCES INTEGER, /* VALUE_KEY */ RRULE INTEGER, /* VALUE_KEY */ SEQUENCE INTEGER, /* VALUE_KEY */ Mansour/Dawson/Royer/Taler/Hill 78 Expires September 2000 Internet Draft CAP March 10, 2000 SUMMARY INTEGER NOT NULL, /* VALUE_KEY */ UID INTEGER NOT NULL PRIMARY KEY, /* VALUE_KEY */ URL INTEGER, /* VALUE_KEY */ X_PROP INTEGER, /* VALUE_KEY */ VALARM INTEGER /* VALUE_KEY */ ); 9.1.59. X_PROP schema CREATE TABLE X_PROP ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT NOT NULL, NAME TEXT NOT NULL, PARAMS INTEGER /* VALUE_KEY (XPARAM)*/ ); 9.1.60. XPARAM schema CREATE TABLE XPARAM ( VALUE_KEY INTEGER NOT NULL PRIMARY KEY, VALUE TEXT NOT NULL, NAME TEXT NOT NULL ); 9.2. Query example 10. Examples For all the examples in this section, the authenticated user is user@example.com. 10.1. Authentication Examples 10.1.1. Login Using Kerberos V4 Use Kerberos V4 to authenticate as bill@example.com to the CAP server on cal.example.com. C: S: 2.0 S: . C: CAPABILTY S: CAPVERSION=1.0 Mansour/Dawson/Royer/Taler/Hill 79 Expires September 2000 Internet Draft CAP March 10, 2000 S: ITIPVERSION=1.0 S: AUTH=KERBEROS_V4 S: AUTH=DIGEST_MD5 S: . C: AUTHENTICATE KERBEROS_V4 S: AmFYig== C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT S: or//EoAADZI= C: DiAF5A4gA+oOIALuBkAAmw== S: 2.0 S: IDENTITY=bill@example.com S: CAPVERSION=1.0 S: ITIPVERSION=1.0 S: AUTH=KERBEROS_V4 S: AUTH=DIGEST_MD5 S: CAR=CAR-FULL-1 S: MINDATE=19700101T000000Z # who knows this date (end of the 32 bit number)? S: MAXDATE=20370201T000000Z S: . 10.1.2. Error Scenarios Use of SASL Authorization Identity is not supported. Use the IDENTITY command instead. If you attempt to use the Authorization Identity, an error status will be returned. C: AUTHENTICATE KERBEROS_V4 S: AmFYig== C: BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4DT S: or//EoAADZI= C: DiAF5A4gA+oOIALuBkAAmw== S: 6.1 S: . Sender aborted authentication: C: AUTHENTICATE KERBEROS_V4 S: AmFYig== C: . S: 6.2 S: . Unsupported mechanism: C: AUTHENTICATE Experimental_Auth S: 6.3 S: . Mansour/Dawson/Royer/Taler/Hill 80 Expires September 2000 Internet Draft CAP March 10, 2000 10.2. Read Examples 10.2.1. Read From A Single Calendar In this example bill@example.com reads a day's worth of events from cap://cal.example.com/opaqueid99. C: SENDDATA C: Content-type:text/calendar; Method=READ; Component=VQUERY C: C: BEGIN:VCALENDAR C: VERSION:2.1 C: METHOD:READ C: CMDID:xyz12345 C: TARGET:cap://cal.example.com/opaqueid99 C: BEGIN:VQUERY C: QUERY:SELECT (VEVENT.DTSTART,VEVENT.DTEND,SUMMARY,UID); C: FROM VEVENTTABLE; C: WHERE (VEVENT.DTEND >= 19990714T080000Z AND C: VEVENT.DTSTART <= 19990715T080000Z); C: ORDERBY (VEVENT.DTSTART ASC, VEVENT.DTEND, UID, SUMMARY) C: END:VQUERY C: END:VCALENDAR C: . # this response code means that the transport successfully # delivered the data. S: 2.0 ; got the request OK ; really S: . S: Content-type:text/calendar; Method=RESPONSE; S: Optinfo=VERSION:2.1 S: Content-Transfer-Encoding: 7bit S: S: BEGIN:VCALENDAR S: VERSION:2.1 S: METHOD:RESPONSE S: TARGET:cap://cal.example.com/opaqueid99 S: CMDID:xyz12345 S: RESPONSE-STATUS:2.0 S: BEGIN:VEVENT S: DTSTART:19990714T200000Z S: DTEND:19990714T210000Z S: UID:000444888929922 S: SUMMARY:Blah bla S: END:VEVENT S: BEGIN:VEVENT S: UID:0034848098038888989443 S: SUMMARY:meeting S: DTEND:19990714T233000Z S: DTSTART:19990714T223000Z S: END:VEVENT S: END:VCALENDAR S: . Mansour/Dawson/Royer/Taler/Hill 81 Expires September 2000 Internet Draft CAP March 10, 2000 10.2.2. Read From Multiple Calendars In this example bill@example.com reads a day's worth of events from cap://cal.example.com/opaqueid101 and cap://cal.example.com/opaqueid103 C: SENDDATA C: Content-type:text/calendar; Method=READ; Component=VQUERY C: C: BEGIN:VCALENDAR C: VERSION:2.1 C: METHOD:READ C: CMDID:xyz12346 C: TARGET:cap://cal.example.com/opaqueid101 C: TARGET:opaqueid103 C: BEGIN:VQUERY C: QUERY:SELECT (DTSTART,DTEND,SUMMARY,UID); C: FROM VEVENT; C: WHERE (DTEND >= 19990714T080000Z AND C: DTSTART <= 19990715T080000Z); C: ORDERBY (DTSTART ASC, DTEND, UID, SUMMARY) C: END:VQUERY C: END:VCALENDAR C: . S: 2.0 S: . S: Content-Type:multipart/mixed;boundary="--FEE3790DC7E35189CA67" S: S: ----FEE3790DC7E35189CA67 S: Content-type:text/calendar; Method=RESPONSE; S: Optinfo=VERSION:2.1 S: Content-Transfer-Encoding: 7bit S: S: BEGIN:VCALENDAR S: VERSION:2.1 S: METHOD:RESPONSE S: TARGET:cap://cal.example.com/opaqueid103 S: CMDID:xyz12346 S: RESPONSE-CODE:2.0 S: BEGIN:VEVENT S: UID:0034848098038888989443 S: SUMMARY:meeting S: DTEND:19990714T233000Z S: DTSTART:19990714T223000Z S: END:VEVENT S: END:VCALENDAR S: S: ----FEE3790DC7E35189CA67CE2C S: Content-type:text/calendar; Method=RESPONSE; S: Optinfo=VERSION:2.1 S: Content-Transfer-Encoding: 7bit S: S: BEGIN:VCALENDAR S: VERSION:2.1 Mansour/Dawson/Royer/Taler/Hill 82 Expires September 2000 Internet Draft CAP March 10, 2000 S: METHOD:RESPONSE S: TARGET:cap://cal.example.com/opaqueid101 S: CMDID:xyz12346 S: RESPONSE-CODE:4.1 ; access denied S: END:VCALENDAR S: S: ----FEE3790DC7E35189CA67CE2C S: . 10.2.3. Timeouts In this example bill@example.com attempts to read a calendar but the latency time he supplies is not sufficient for the server to complete the command. C: SENDDATA 3 C: Content-type:text/calendar; Method=READ; Component=VQUERY C: C: BEGIN:VCALENDAR C: VERSION:2.1 C: METHOD:READ C: CMDID:xyz12346 C: TARGET:cap://cal.example.com/opaqueid101 C: TARGET:opaqueid103 C: BEGIN:VQUERY C: QUERY:SELECT (DTSTART,DTEND,SUMMARY,UID); C: FROM VEVENT; C: WHERE (DTEND >= 19990714T080000Z AND C: DTSTART <= 19990715T080000Z); C: ORDERBY (DTSTART ASC, DTEND, UID, SUMMARY) C: END:VQUERY C: END:VCALENDAR C: . S: 7.0 ; timeout S: . S: . If Bill wants to continue and give the server more time he would issue a CONTINUE command: C: CONTINUE 10 If Bill wants to abort the command and not wait any further he would issue an ABORT command: C: ABORT S: 2.0 S: . S: . Mansour/Dawson/Royer/Taler/Hill 83 Expires September 2000 Internet Draft CAP March 10, 2000 10.2.4. Using the Calendar Parent, Children Properties 10.2.5. An example that depends on VEVENT.DTSTART and VALARM.DTSTART 11. Implementation Issues 1. What are the minimum component properties set required to create a new VEVENT, VTODO and VJOURNAL?. PROPOSAL: DTSTART, SUMMARY and UID. 2. What is the state of all undefined properties? PROPOSAL: Not defined. So a query will not return them, if they are selected. 12. Properties [Editors Note: These extensions/changes to iCalendar need to be reformatted to conform to the IANA registration process defined in section 7 of [RFC2445].] 12.1. Calendar Store Properties The following are properties of the calendar store. Name Read Value Description Only Type -------------------------------------------------------------------------- CALMASTER N URI The email address for a responsable person. MUST be a mailto URL. CSID Y URI The CSID of this calendar store. If not specified, it is the same as the hostname or virtual host name. DEFAULT_VCARS N TEXT A multivalued property containing the default VCARs for newly created top level calendars. Each entry is a CARID It MUST include at a mini- mum READBUSYTIMEINFO, REQUESTONLY, UPDATEPARTSTATUS, and DEFAULTOWNER. MAXDATE Y DATE-TIME The date/time in the future beyond which the server cannot represent. If not specified, then 99991231T235959 will be assumed. Mansour/Dawson/Royer/Taler/Hill 84 Expires September 2000 Internet Draft CAP March 10, 2000 MINDATE Y DATE-TIME The date/time in the past prior to which the server cannot represent. If not specified, then 00000101T000000 will be assumed. CURRENT_DATETIME Y DATE-TIME Current server time. This is re- turned as a local time and TZID. RECUR_ACCEPTED Y BOOLEAN Boolean value will be set to TRUE if the server will accept recur- rence rules. It will be set to FALSE if the server will not accept recurrence rules. If not specified a CUA MUST assume TRUE. RECUR_EXPAND Y BOOLEAN If set to TRUE, the CS supports the expansion of recurrence rules. If set to FALSE, the CS is incapabale of expanding recurrence rules. If not specified a CUA MUST assume TRUE. RECUR_LIMIT Y INTEGER This numeric value describes how the server handles unbounded recur- rences. The value is only valid if RECURRENCE is TRUE. If the value is 0 it means that the server supports unbounded recurrence rules. If it is non-zero, it is a positive inte- ger indicating the number of in- stances that will be created when the server expands an unbounded re- currence rule when fetched from the CS. A CUA MUST query for date ranges when this value is zero. VERSION Y TEXT The version of the CS. The default and the only currently supported version is "2.0" to match the [RFC2445] VERSION. [Editors Note: Can/MUST the server unzip RRULES/EXRULES?] 12.2. Calendar Properties Mansour/Dawson/Royer/Taler/Hill 85 Expires September 2000 Internet Draft CAP March 10, 2000 Name Read Value Description Only Type ------------------------------------------------------------------------- ALLOW-CONFLICTS N BOOLEAN This boolean value indicates whether or not the calendar sup- ports event conflicts. That is, whether or not any of the events in the calendar can overlap. If not specified the default value is TRUE meaning that conflicts are allowed. CALSCALE N TEXT The CALSCALE for thie calendar. If not specified the default is GREGO- RIAN. CHARSET N TEXT The default charset for localized strings in this calendar. If not specified, the default is UTF-8. CHILDREN Y TEXT The list of sub-calendars belonging to this calendar. An empty list means no children. The results may be a comma seperated list of chil- dren. Each entry returned is a CALID. The default is an empty list. CREATED Y DATE-TIME The timestamp of the calendar's create date. DEFAULT_VCAR N TEXT The default VCARs for newly created top level calendars. This is a CARID. The defalut value is the value of DEFAULT_VCAR in the CAL- STORE table. T} LANGUAGE N TEXT The default language for localiz- able strings in this calendar. There is no default. LAST-MODIFIED N DATE-TIME The timestamp when the properties of the calendar were last updated. NAME N TEXT The display name for this calendar. It is a localizable string. If not provided, an empty value will be returned. Mansour/Dawson/Royer/Taler/Hill 86 Expires September 2000 Internet Draft CAP March 10, 2000 OWNERS N URI A multi instanced property indicat- ing the calendar owner. Each entry returned will be a UPN. There must be at least one owner. PARENT N URI The CALID of this calendars parent maintained by a CAP server. An empty value means the calendar is the top level parent. The default value is no parent. RELCALID N URI A unique name for the calendar. There is no default value and this value MUST NOT be empty. TOMBSTONE N BOOLEAN TRUE indicator that this calendar has been marked as deleted. The default value is FALSE. TZID N TEXT The id of the timezone associated with this calendar. See TZID in [RFC2445]. The default value is GMT. 13. Security Considerations For the mandatory SASL mechanism that CAP specifies, the mechanism support is: ? MUST authentication ? MUST authorization ? MAY impersonation The security issue: +---------+ +----------+ CUA1 ------ | CS1 |--------CAP----------| CS2 |-----CUA2 | calF | | calA | +---------+ +----------+ 14. Changes to iCalendar [Editors Note: These extensions/changes to iCalendar need to be reformatted to conform to the IANA registration process defined in section 7 of [RFC2445].] Mansour/Dawson/Royer/Taler/Hill 87 Expires September 2000 Internet Draft CAP March 10, 2000 14.1. Time Transparency Property Name: TRANSP Purpose: This property defines whether an event is transparent or not to busy time searches. Value Type: TEXT Property Parameters: Non-standard property parameters can be specified on this property. Conformance: This property can be specified once in a "VEVENT" calendar component. Description: Time Transparency is the characteristic of an event that determines whether it appears to consume time on a calendar. Events that consume actual time for the individual or resource associated with the calendar SHOULD be recorded as OPAQUE, allowing them to be detected by free-busy time searches. Other events, which do not take up the individual's (or resource's) time SHOULD be recorded as TRANSPARENT, making them invisible to free-busy time searches. Format Definition: The property is specified by the following notation: transp = "TRANSP" tranparam ":" transvalue CRLF tranparam = *(";" xparam) transvalue = "OPAQUE" ;Blocks or opaque on busy time searches. / "TRANSPARENT" ;Transparent on busy time searches. / "TRANSPARENT-NOCONFLICT" ; Transparent on busy time ; searches and no other OPAQUE ; or OPAQUE-NOCONFLICT event ; can overlap it. / "OPAQUE-NOCONFLICT" ; Opaque on busy time ; searches and no other OPAQUE ; or OPAQUE-NOCONFLICT event ; can overlap it. ; ;Default value is OPAQUE Example: The following is an example of this property for an event that is transparent or does not block on free/busy time searches: TRANSP:TRANSPARENT The following is an example of this property for an event that is opaque or blocks on free/busy time searches: Mansour/Dawson/Royer/Taler/Hill 88 Expires September 2000 Internet Draft CAP March 10, 2000 TRANSP:OPAQUE The following is an example of this property for an event that is opaque or blocks on free/busy time searches plus no other event can overlap it: TRANSP:OPAQUE-NOCONFLICT 14.2. RIGHTS Value Type Value Name: RIGHTS Purpose: This value type is used to identify properties whose value is a calendar access rights. Formal Definition: The value type is defined by the following notation: carrights = [princ] (carref / cardef) CRLF princ = "UPN" "=" (text / all / "OWNER" / "NONOWNER" / "ANONYMOUS") carref = ";" "CARREF" "=" text *("," text) cardef = action object *("," action object) action = ";" "ACTION" "=" act-type *("," act-type) act-type = ("CREATE" / "MODIFY" / "DELETE" / "READ" / all) object = ";" "OBJECT" "=" (csprop *("," csprop) [propvalue]) / (calprop *("," calprop) [propvalue]) / (component *("," component)) [compvalue] / (compprop *("," compprop) [propvalue]) / (compparam *("," compparam) [paramvalue]) csprop = csprop2 / all / iana-name csprop2 = propvalue = propvalue2 / all / self / iana-name propvalue2 = calprop = calprop2 / all / iana-name calprop2 = component = component2 / all / iana-name component2 = Mansour/Dawson/Royer/Taler/Hill 89 Expires September 2000 Internet Draft CAP March 10, 2000 compprop = compprop2 / all / iana-name compprop2 = compparam = compparm2 / all / iana-name compparm2 = compvalue = ";" "VALUE" "=" ((component2 *("," component2)) / all / iana-name) paramvalue = paramvalue2 / all / iana-name paramvalue2 = all = "*" self = "SELF" ; Only valid for ATTENDEE value. ; When OBJECT=ATTENDEE;VALUE=SELF. iana-name = Description: The value type is a structured value consisting of a list of one or more access control rights rule parts. Each rule part is defined by a "NAME=VALUE" pair. The rule parts are separated from each other by the SEMICOLON character (US-ASCII decimal 59). The rule parts are not ordered in any particular sequence, unless otherwise specified by the ABNF. Within one carrights all matches of multiple OBJECT and VALUE pairs must be true for the GRANT or DENY to apply. The UPN rule part specifies the CU or UG to which the VCARs applies. The value of this rule part is either a quoted text specifying a UPN or an unquoted text specifying a keyword enumerating a standard authenticated user type. If the value is the keyword is *, then the rule applies to all authenticated calendar users (i.e., all UPNs). If the value is the keyword OWNER, then the rule applies to any of the owners of the calendar store or calendar. If the value is the keyword NONOWNER, then the rule applies to a UPN that is not the owner of the calendar store or calendar. If this rule part is not specified in the value, then the calendar access rights do not apply to any UPN. In this case, the calendar access rights can be defined for reference by another instance of a calendar access rights. For example, a complex set of calendar access rights can be defined once and referenced many times in the rights specified for individual calendar users. The CARREF rule part specifies a reference to a particular "VCAR" calendar component. The text is matched to a CARID property value within a "VCAR" calendar component. This allows for a particular set of calendar access rights to be defined once and referenced multiple times. Mansour/Dawson/Royer/Taler/Hill 90 Expires September 2000 Internet Draft CAP March 10, 2000 The "VCAR" identifier specified by this rule part is unique to the calendar store. Predefined calendar access CARIDs that MUST be implememnetd (CAR-MIN) are: CARID:READBUSYTIMEINFO - Specifies rights for reading VFREEBUSY components by anonymous and known users. Suggested VCAR to allow all users to read VFREEBUSY components: BEGIN:VCAR CARID:READBUSYTIMEINFO GRANT:UPN=*;ACTION=READ;OBJECTS=VFREEBUSY;VALUE=* END:VCAR CARID:REQUESTONLY - Specifies rights for creating new event invitations, to-do assignments and journal entries by users other than the owner of the calendar. Suggested VCAR to allow access by nonowners to submit REQUESTs: BEGIN:VCAR CARID:REQUESTONLY GRANT:UPN=NONOWNER;ACTION=CREATE;OBJECT=* ;OBJECT=METHOD;VALUE=REQUEST END:VCAR CARID:UPDATEPARTSTATUS - Specifies rights for a user to modify their participation status in a calendar they do not own. Suggested VCAR to allow users to update their own participation status: BEGIN:VCAR CARID:UPDATEPARTSTATUS GRANT:UPN=*;ACTION=MODIFY ;OBECT=PARTSTAT:VALUE=* ;OBJECT=ATTENDEE;VALUE=SELF END:VCAR CARID:DEFAULTOWNER - Specifies the default access for any owner of a calendar. Suggested VCAR to all owners access to their own calendars: BEGIN:VCAR CARID:DEFAULTOWNER GRANT:UPN=OWNER;ACTION=*;OBJECT=*;VALUE=*; END:VCAR The ACTION rule part defines one or more CAP actions that are allowed for the UPN. The valid values are CREATE, COPY, DELETE, MODIFY, MOVE, READ, corresponding to the calendar commands; PUBLISH, REQUEST, REPLY, ADD, CANCEL, REFRESH, COUNTER, DECLINECOUNTER, corresponding to the scheduling commands; and ALL, meaning all of calendaring commands and scheduling commands. Multiple ACTION enumerations can be specified as a COMMA character (US-ASCII decimal 44) separated list of ACTION Mansour/Dawson/Royer/Taler/Hill 91 Expires September 2000 Internet Draft CAP March 10, 2000 enumerated values. The text ALL is the same as specifying the enumerated values "CREATE, MODIFY, DELETE, READ". The OBJECT rule part defines the calendar store property, calendar property, calendar component, component property, or parameter that the ACTION is restricted to. Multiple OBJECT enumerations can be specified as a COMMA character (US-ASCII decimal 44) separated list of OBJECT enumerated values. The value ALL specifies any and all valid objects. The VALUE rule part specifies the restricted values for the OBJECT rule part. Multiple VALUE strings can be specified as a COMMA character (US- ASCII decimal 44) separated list of VALUE strings. The text ALL specifies any and all valid values. If an OBJECT rule part is specified but no corresponding VALUE rule part is specified, then the rule applies to any and all valid values of the specified OBJECT(s). Example: The following is a rule which specifies access rights for "foo" calendar user to read busy time values: UPN="foo@host.com";ACTION=READ;OBJECT=DTSTART,DTEND 14.3. VCAR Calendar Component Component Name: "VCAR" Purpose: Provide a grouping of calendar access rights. Format Definition: A "VCAR" calendar component is defined by the following notation: aclc = "BEGIN" ":" "VCAR" CRLF carprop "END" ":" "VCAR" CRLF carprop = carid 1*(grant / deny) Description: A "VCAR" calendar component is a grouping of calendar access rights component properties. The "CARID" property specifies the local identifier for the "VCAR" calendar component. The "GRANT" property specifies calendar access rights granted to an UPN. The "DENY" property specifies calendar access rights denied from an UPN. Example: In the following example, the UPN "foo@host.com" has read access to the "DTSTART" and "DTEND" calendar properties. No other access is specified: BEGIN:VCAR CARID:"View Start and End Times" GRANT:UPN=foo@host.com;ACTION="READ";OBJECT=DTSTART,DTEND END:VEVENT Mansour/Dawson/Royer/Taler/Hill 92 Expires September 2000 Internet Draft CAP March 10, 2000 In this example, all UPNs are given read access to "DTSTART" and "DTEND". "All CUs and UGs" are specified by the UPN value "*". Note that this enumerated UPN value is not in quotes.: BEGIN:VCAR CARID:"View Start and End Times 2" GRANT:UPN=*;ACTION=READ;OBJECT=DTSTART,DTEND END:VCAR In this example, rights are specified for all UPNs to read components classified as PUBLIC: BEGIN:VCAR CARID:"View PUBLIC Start and End Times" GRANT:UPN=*;ACTION=READ;OBJECT=DTSTART;DTEND DENY:UPN=*;ACTION=READ;OBJECT=CLASS;VALUE=PUBLIC, CONFIDENTIAL END:VCAR In this example, rights are specified for all UPNs to read or modify existing components classified as PUBLIC: BEGIN:VCAR CARID:"Read and Modify PUBLIC Calendar Entries" GRANT:UPN=*;ACTION=READ,MODIFY;OBJECT=* DENY:UPN=*;ACTION=READ,MODIFY;OBJECT=CLASS;VALUE=PRIVATE, CONFIDENTIAL END:VCAR In this example, full calendar access rights are given to the OWNER and a hypothetical administrator is given access rights to specify calendar access rights. If no other rights are specified, only these two UPNs can specify calendar access rights: BEGIN:VCAR CARID:"Only OWNER or ADMIN Settable CARs" GRANT:UPN=OWNER;ACTION=*;OBJECT=* GRANT:UPN=cal-admin@host.com;ACTION=*; OBJECT=VCAR,CARID,GRANT,DENY END:VCAR In this example, rights to create, read, modify or delete calendar access rights are denied to all UPNs. This example would disable providing different access rights to the calendar store or calendar. This calendar access rights should not be specified, as they the ability to change calendar access; even for the owner or administrator: BEGIN:VCAR CARID:"No CAR At All" DENY:UPN=*;OBJECT=VCAR,CARID,GRANT,DENY ENG:VCAR Mansour/Dawson/Royer/Taler/Hill 93 Expires September 2000 Internet Draft CAP March 10, 2000 14.4. GRANT Component Property Property Name: GRANT Purpose: This property specifies those access rights granted to a UPN. Value Type: RIGHTS Property Parameters: Only non-standard property parameters can be specified on this property. Conformance: This property can only be specified in "VCAR" calendar component. Description: This property is used to grant calendar access rights to a UPN. Format Definition: The property is defined by the following notation: grant = "GRANT" rightsparam ":" carrights CRLF rightsparam = *(";" xparam) 14.5. DENY Component Property Property Name: DENY Purpose: This property specifies those access rights denied from a UPN. Value Type: RIGHTS Property Parameters: Only non-standard property parameters can be specified on this property. Conformance: This property can only be specified in "VCAR" calendar component. Description: This property is used to deny calendar access rights to a UPN. Format Definition: The property is defined by the following notation: DENY = "DENY" rightsparam ":" carrights CRLF rightsparam = *(";" xparam) Example: In the following example, any UPN who is not the owner is denied rights to create, modify or delete entries: DENY:UPN=NONOWNER;ACTION=CREATE,MODIFY,DELETE;OBJECT=* Mansour/Dawson/Royer/Taler/Hill 94 Expires September 2000 Internet Draft CAP March 10, 2000 14.6. VCAR Identifier Component Property Property Name: CARID Purpose: This property specifies the identifier for a "VCAR" calendar component. Value Type: TEXT Property Parameters: Non-standard property parameters can be specified on this property. Conformance: This property can be specified in "VCAR" calendar component. Description: This property permits previously defined sets of calendar access rights to be specified with a reference. This capability facilitates repetitively specifying calendar access rights. Format Definition: The property is defined by the following notation: CARID = "CARID" textparam ":" text CRLF Example: The following is an example of this property: CARID:"Restrict Guests From Creating ALARMs On Events" 14.8 REQUEST-STATUS property This description is a revision of the REQUEST-STATUS property for VCALENDAR version 2.1. rstatus = "REQUEST-STATUS" rstatparam ":" statcode [";" statdesc [";" extdata]] rstatparam = *( ; the following is optional, ; but MUST NOT occur more than once (";" languageparm) / ; the following is optional, ; and MAY occur more than once (";" xparam) ) statcode = 1*DIGIT *("." 1*DIGIT) ;Hierarchical, numeric return status code statdesc = text Mansour/Dawson/Royer/Taler/Hill 95 Expires September 2000 Internet Draft CAP March 10, 2000 ;An optional textual status description, content is ;decided by the implementor. May be empty. extdata = text ;Textual exception data. For example, the offending property ;name and value or complete property line. Example: The following are some possible examples of this property. The COMMA and SEMICOLON separator characters in the property value are BACKSLASH character escaped because they appear in a text value. REQUEST-STATUS:2.0;Success REQUEST-STATUS:2.0;Success despite braindead LDAP implementation REQUEST-STATUS:3.1;Invalid property value;DTSTART:96-Apr-01 REQUEST-STATUS:2.8; Success, repeating event ignored. Scheduled as a single event.;RRULE:FREQ=WEEKLY;INTERVAL=2 REQUEST-STATUS:4.1;Event conflict. Date/time is busy. REQUEST-STATUS:3.7;Invalid calendar user;ATTENDEE: MAILTO:jsmith@host.com REQUEST-STATUS:3.7;;ATTENDEE:MAILTO:jsmith@host.com REQUEST-STATUS:10.4;Help! That really shouldnt have happened. 15. CAP Entities Registration This section provides the process for registration of new or modified CAP entities. 15.1 Registration of New and Modified CAP Entities New CAP entities are registered by the publication of an IETF Request for Comment (RFC). Changes to a CAP entity are registered by the publication of a revision of the RFC defining the method. 15.2 Registration of New Entities This section defines procedures by which new entities (i.e., components, properties, parameters, enumerated values or restriction tables) for a CAP entity can be registered with the IANA. Non-standard, experimental entities can be used by bilateral agreement, provided the associated properties names follow the "X-" convention. Such non-standard entities are non-IANA entities and need not be registered using this process. The procedures defined here are designed to allow public comment and Mansour/Dawson/Royer/Taler/Hill 96 Expires September 2000 Internet Draft CAP March 10, 2000 review of new CAP entities, while posing only a small impediment to the definition of new properties. Registration of a new CAP entity is accomplished by the following steps. 15.1.1. Define the Entity A CAP entity is defined by completing the following template. To: ietf-calendar@imc.org Subject: Registration of CAP entity XXX Entity name: Entity purpose: Description: CAP terminology changes: CAP data model changes: CAP system model changes: Conformance considerations: Format definition: Examples: The meaning of each field in the template is as follows. Entity name: The name of the entity. Entity purpose: The purpose of the entity (e.g., Extends the CAP command set to poll for notifications, etc.). Give a short but clear description. Description: Any special notes about the entity, how it is to be used, etc. CAP terminology changes: Any change or additions to the existing CAP terminology needs to be specified. CAP data model changes: Any of the valid property parameters for the property needs to be specified. CAP system model changes: Conformance: A clear summary of how and where this CAP entity extension MUST, MAY, SHOULD or can be used. Any changes or impact to the existing conformance definition for CAP should be explained. The impact to implementations conforming to the existing CAP specification should be clearly described. Format definition: The ABNF for each element of the CAP entity needs to be specified. Examples: One or more examples of instances of the CAP entity and each of its usage scenarios needs to be specified. Mansour/Dawson/Royer/Taler/Hill 97 Expires September 2000 Internet Draft CAP March 10, 2000 15.1.2. Post the entity definition The entity description MUST be posted to the new entity discussion list, ietf-calendar@imc.org. 15.1.3. Allow a comment period Discussion on the new entity MUST be allowed to take place on the list for a minimum of two weeks. Consensus MUST be reached on the property before proceeding to the next step. 15.1.4. Submit the entity for approval Once the two-week comment period has elapsed, and the proposer is convinced consensus has been reached on the entity, the registration application should be submitted to the Method Reviewer for approval. The Method Reviewer is appointed by the Application Area Directors and can either accept or reject the entity registration. An accepted registration should be passed on by the Method Reviewer to the IANA for inclusion in the official IANA method registry. The registration can be rejected for any of the following reasons. 1) Insufficient comment period; 2) Consensus not reached; 3) Technical deficiencies raised on the list or elsewhere have not been addressed. The Method Reviewers decision to reject an entity can be appealed by the proposer to the IESG, or the objections raised can be addressed by the proposer and the entity resubmitted. [Ed note: John Stracke to review any updates] 15.2. Property Change Control Existing CAP entities can be changed using the same process by which they were registered. 1. Define the change 2. Post the change 3. Allow a comment period 4. Submit the entity for approval Note that the original author or any other interested party can propose a change to an existing CAP entity, but that such changes should only be proposed when there are serious omissions or errors in the published memo. The Method Reviewer can object to a change if it is not backward compatible, but is not required to do so. CAP entity definitions can never be deleted from the IANA registry, but entities which are no longer believed to be useful can be declared OBSOLETE by adding this text to their "Entity purpose" field. Mansour/Dawson/Royer/Taler/Hill 98 Expires September 2000 Internet Draft CAP March 10, 2000 16. IANA Considerations This memo defines IANA registered extensions to the attributes defined by iCalendar, as defined in [RFC2445], and iTIP, as defined in [RFC2426]. IANA registration proposals for iCalendar and iTIP are to be mailed to the registration agent for the "text/calendar" MIME content-type, using the format defined in section 7 of [RFC2445]. 17. Acknowledgments The following have individuals were major contributors in the drafting and discussion of this memo: Harald Alvestrand, Mario Bonin, Andre Courtemanche, Dave Crocker, Pat Egen, Gilles Fortin, Jeff Hodges, Alex Hoppman, Bruce Kahn, Lisa Lippert, David Madeo, Bob Mahoney, Bob Morgan, Pete O'Leary, Richard Shusterman, Tony Small, John Stracke, Mark Wahl. 18. Bibliography [RFC1521] N. Borenstein and N. Freed, "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Internet Draft UTF-825 July 1996 Specifying and Describing the Format of Internet Message Bodies", RFC 1521, Bellcore, Innosoft, September 1993. [TLS] Dierks, Allen, "The TLS Protocol", RFC 2246, January 1999 [RFC2608] Guttman, Perkins, Veizades, Day, "Service Location protocol, Version 2", RFC2608, June 1999. [RFC2609] Guttman, Perkins, Kempf, "Service Templates and Service: Schemes", RFC2609, June 1999. [RFC2396] Berners-Lee, Fielding, Masinter, "Uniform Resource Identifiers (URI): Generic Syntax", RFC 2396, August 1998. [RFC2445] Dawson, Stenerson, "Internet Calendaring and Scheduling Core Object Specification (iCalendar)", RFC 2445, November 1998 [RFC2446] Silverberg, Mansour, Dawson, Hopson, "iCalendar Transport- Independent Interoperability Protocol (iTIP)", RFC 2446, November 1998 [RFC2447] Dawson, Mansour, Silverberg, "iCalendar Message-Based Interoperability Protocol (iMIP)", RFC 2445, November 1998 [SQL] "Database Language SQL", ANSI/ISO/IEC 9075: 1992, aka ANSI X3.135-1992, aka FiPS PUB 127-2 Mansour/Dawson/Royer/Taler/Hill 99 Expires September 2000 Internet Draft CAP March 10, 2000 [SQLCOM] ANSI/ISO/IEC 9075:1992/TC-1-1995, Technical corrigendum 1 to ISO/IEC 9075: 1992, also adopted as Amendment 1 to ANSI X3.135.1992 [UNICODE] The Unicode Consortium, "The Unicode Standard --Worldwide Character Encoding -- Version 1.0", Addison-Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is described in Unicode Technical Report #4. [US-ASCII] Coded Character Set--7-bit American Standard Code for Information Interchange, ANSI X3.4-1986. 19. Author's Address The following address information is provided in a vCard v3.0, the RFC 2426 electronic business card format. BEGIN:VCARD VERSION:3.0 N:Dawson;Frank FN:Frank Dawson ORG:Lotus Development Corporation ADR;TYPE=WORK,POSTAL,PARCEL:;;6544 Battleford Drive;Raleigh;NC; 27613-3502;US TEL;TYPE=PREF,WORK,MSG:+1-617-693-8728 TEL;TYPE=WORK,MSG:+1-919-676-9515 TEL;TYPE=WORK,FAX:+1-919-676-9515 EMAIL;TYPE=INTERNET,PREF:Frank_Dawson@Lotus.com EMAIL;TYPE=INTERNET:fdawson@earthlink.net URL;TYPE=X-HOME:http://home.earthlink.net/~fdawson END:VCARD BEGIN:VCARD VERSION:3.0 N:Mansour;Steve FN:Steve Mansour ORG:Netscape ADR;TYPE=WORK,POSTAL,PARCEL:;;501 E Middlfield Road;Mountain View;CA;94043;US TEL;WORK;MSG:+1-650-937-2378 TEL;WORK;FAX:+1-650-937-2103 EMAIL;INTERNET:sman@netscape.com END:VCARD BEGIN:VCARD VERSION: 3.0 FN:Doug Royer N:Royer,Doug ORG:Software.com ADR;TYPE=WORK,POSTAL,PARCEL:Suite 106;;530 E. Montecito St; Santa Barbara;CA;93103;US TEL;TYPE=PREF,WORK,MSG:805-957-1790 x541 TEL;TYPE=WORK,MSG:650-364-6538 TEL;TYPE=WORK,FAX:805-957-1544 EMAIL;TYPE=INTERNET,PREF:Doug.Royer@Software.com Mansour/Dawson/Royer/Taler/Hill 100 Expires September 2000 Internet Draft CAP March 10, 2000 EMAIL;TYPE=INTERNET:Doug@Royer.com URL;TYPE=X-HOME:http://Royer.com/People/Doug END:VCARD BEGIN:VCARD VERSION:3.0 FN:Alexander Taler N:Taler;Alexander ORG:CS&T ADR;TYPE=WORK,POSTAL,PARCEL:;;3333 Graham Boulevard;Montreal;QC; H3R 3L5;Canada TEL;TYPE=WORK,VOICE:514-733-8500 TEL;TYPE=FAX:514-733-8878 EMAIL;TYPE=INTERNET:alext@cst.ca END:VCARD 20. Full Copyright Statement "Copyright (C) The Internet Society (2000). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process MUST be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Mansour/Dawson/Royer/Taler/Hill 101 Expires September 2000