home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / drafts / draft_n_r / draft-oleary-icap-02.txt < prev    next >
Text File  |  1997-07-31  |  105KB  |  3,154 lines

  1.  
  2. draft-oleary-icap-02.txt                                    INTERNET-DRAFT
  3.  
  4.  
  5. Internet Calendar Access Protocol (ICAP)
  6.  
  7. Status of this Memo
  8.  
  9. This document is an Internet-Draft. Internet-Drafts are working 
  10. documents of the Internet Engineering Task Force (IETF) , its areas, 
  11. and its working groups. Note that other groups may also distribute 
  12. working documents as Internet-Drafts.
  13.  
  14. Internet-Drafts are draft documents valid for a maximum of six months 
  15. and may be updated, replaced, or obsoleted by other documents at any 
  16. time. It is inappropriate to use Internet-Drafts as reference material or 
  17. to cite them other than as "work in progress."
  18.  
  19. To learn the current status of any Internet-Draft, please check the "lid-
  20. abstracts.txt" listing contained in the Internet-Drafts Shadow 
  21. Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe) , 
  22. munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or 
  23. ftp.isi.edu (US West Coast).
  24.  
  25. Abstract
  26.  
  27. This Internet Calendar Access Protocol  (ICAP) allows a client to 
  28. access, manipulate and store Calendar information on a server. ICAP 
  29. employs the iCalendar format [2] for interchange of calendaring 
  30. information.
  31.  
  32. ICAP includes operations for creating Calendar stores on a server, 
  33. opening them and retrieving information about them. When a Calendar 
  34. Store has been opened, it can be bounded by start and end times so that 
  35. the client can act on a smaller subset of Calendar information for more 
  36. efficient operation. ICAP allows users to store new Calendar Objects 
  37. into their own Calendar store and Calendar stores owned by other users 
  38. with a single operation.
  39.  
  40. ICAP supports searching iCalendar objects within a Calendar Store. 
  41. Searches can be based on any iCalendar property and filtered by 
  42. iCalendar Component type.
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62. Page   1                                                  Expires
  63. 01/29/98
  64.  
  65.  
  66. draft-oleary-icap-02.txt                                          07/29/97
  67.  
  68.  
  69.  
  70.  
  71. Table of Contents
  72.  
  73. STATUS OF THIS MEMO                                           1
  74. ABSTRACT                                                      1
  75. TABLE OF CONTENTS                                             2
  76. 1. PROTOCOL OVERVIEW                                          5
  77. 1.1. CONVENTIONS USED IN THIS DOCUMENT                        5
  78. 1.2. LINK LEVEL                                               5
  79. 1.3. COMMANDS AND RESPONSES                                   5
  80. 1.3.1.  Client Protocol Sender and Server Protocol Receiver   6
  81. 1.3.2.  Server Protocol Sender and Client Protocol Receiver   6
  82. 1.4. DATA FORMATS                                             7
  83. 1.4.1.  Atom                                                  7
  84. 1.4.2.  Number                                                7
  85. 1.4.3.  String                                                7
  86. 1.4.4. Parenthesized Lists                                    8
  87. 1.4.5. NIL                                                    8
  88. 1.4.6. Dates                                                  8
  89. 1.5.  RESPONSE WHEN NO COMMAND IN PROGRESS                    8
  90. 1.6.  AUTOLOGOUT TIMER                                        9
  91. 1.7.  MULTIPLE COMMANDS IN PROGRESS                           9
  92. 1.8. CALENDAR STORE                                           9
  93. 1.9. CALENDAR OBJECTS AND COMPONENTS                          9
  94. 1.10. UNIQUE IDENTIFIERS                                      10
  95. 1.11. CALENDAR STORE NAMING                                   10
  96. 1.12. DEFAULT CALENDAR                                        11
  97. 1.13. ACCESS CONTROL                                          11
  98. 1.14. SERVER STATES                                           12
  99. 1.13.1.  Non-Authenticated State                              12
  100. 1.13.2.  Authenticated State                                  12
  101. 1.13.3. Selected State                                        12
  102. 1.13.4.  Logout State                                         12
  103. 2. SCHEDULING OPERATIONS                                      12
  104. 2.1 OPERATIONS SUPPORTED BY ICAP                              13
  105. 2.1.1. Calendar Browsing                                      13
  106. 2.1.2. Freetime Search                                        13
  107. 2.1.3.  Creating, Deleting and Modifying Calendar Objects     13
  108. 2.1.4. Group Scheduling                                       13
  109. 2.2. OPERATIONS NOT SUPPORTED BY ICAP                         13
  110. 2.2.1. Meeting Invitations                                    14
  111. 2.2.2. Directory Services                                     14
  112. 3. ICAP COMMANDS - ANY STATE                                  14
  113. 3.1. CAPABILITY COMMAND                                       14
  114. 3.2. NOOP COMMAND                                             15
  115. 3.4. LOGOUT COMMAND                                           15
  116. 3.5. X-(ATOM) EXPERIMENTAL COMMANDS                           16
  117. 4. ICAP COMMANDS - NON-AUTHENTICATED STATE                    16
  118. 4.1. AUTHENTICATE COMMAND                                     16
  119. 4.2. LOGIN COMMAND                                            17
  120. 5. ICAP COMMANDS - AUTHENTICATED STATE                        18
  121. 5.1. SELECT COMMAND                                           18
  122. 5.2. EXAMINE COMMAND                                          20
  123. 5.3. CREATE COMMAND                                           20
  124.  
  125.  
  126. Page   2                                                  Expires
  127. 01/29/98
  128.  
  129.  
  130. draft-oleary-icap-02.txt                                          07/29/97
  131.  
  132.  
  133. 5.4. DELETE COMMAND                                           21
  134. 5.5. RENAME COMMAND                                           22
  135. 5.6. LIST COMMAND                                             22
  136. 5.7. LSUB COMMAND                                             23
  137. 5.8. SUBSCRIBE COMMAND                                        24
  138. 5.9. UNSUBSCRIBE COMMAND                                      24
  139. 5.10. APPEND COMMAND                                          24
  140. 5.11. ATTRIBUTES COMMAND                                      26
  141. 5.12. FREEBUSY COMMAND                                        28
  142. 6. ICAP COMMANDS - SELECTED STATE                             29
  143. 6.1. CLOSE COMMAND                                            29
  144. 6.2. RANGE COMMAND                                            31
  145. 6.3. CHECK COMMAND                                            32
  146. 6.4. EXPUNGE COMMAND                                          32
  147. 6.5. FETCH COMMAND                                            32
  148. 6.6. STORE COMMAND                                            33
  149. 6.7. COPY COMMAND                                             36
  150. 6.8. MOVE COMMAND                                             36
  151. 6.9. UID COMMAND                                              36
  152. 6.10. SEARCH COMMAND                                          37
  153. 7. SERVER RESPONSES                                           39
  154. 7.1.    SERVER RESPONSES - STATUS RESPONSES                   40
  155. 7.1.1. OK Response                                            40
  156. 7.1.2. NO Response                                            40
  157. 7.1.3. BAD Response                                           40
  158. 7.1.4. PREAUTH Response                                       41
  159. 7.1.5.  BYE Response                                          41
  160. 7.2. SERVER RESPONSES - DATA RESPONSES                        42
  161. 7.2.1.  CAPABILITY Response                                   42
  162. 7.2.2. LIST Response                                          43
  163. 7.2.3. LSUB Response                                          43
  164. 7.2.4. EXISTS Response                                        43
  165. 7.2.5. RECENT Response                                        43
  166. 7.2.6. EXPUNGE Response                                       44
  167. 7.2.7. FETCH Response                                         45
  168. 7.2.8. FLAGS Response                                         45
  169. 7.2.9.  SEARCH Response                                       46
  170. 7.3.    SERVER RESPONSES - COMMAND CONTINUATION REQUEST       46
  171. 8. FORMAL SYNTAX                                              46
  172. 9. EXAMPLE SESSIONS                                           47
  173. 10. OPEN ISSUES/WORK IN PROGRESS                              47
  174. 11. CHANGES FROM PREVIOUS DRAFT VERSION                          48
  175. 12. REFERENCES                                                48
  176. 13. SECURITY CONSIDERATIONS                                   48
  177. 14. AUTHOR'S NOTES                                            49
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190. Page   3                                                  Expires
  191. 01/29/98
  192.  
  193.  
  194. draft-oleary-icap-02.txt                                          07/29/97
  195.  
  196.  
  197.  
  198.  
  199. 1. Protocol Overview
  200.  
  201. 1.1. Conventions Used in this Document
  202.  
  203. In examples, "C:" and "S:" indicate lines sent by the client and server 
  204. respectively.
  205.  
  206. The following terms are used in this document to signify the 
  207. requirements of this specification.
  208.  
  209. 1) MUST, or the adjective REQUIRED, means that the definition is an 
  210. absolute requirement of the specification.
  211.  
  212. 2) MUST NOT that the definition is an absolute prohibition of the 
  213. specification.
  214.  
  215. 3) SHOULD means that there may exist valid reasons in particular 
  216. circumstances to ignore a particular item, but the full implications 
  217. MUST be understood and carefully weighed before choosing a 
  218. different course.
  219.  
  220. 4) SHOULD NOT means that there may exist valid reasons in 
  221. particular circumstances when the particular behavior is acceptable or 
  222. even useful, but the full implications SHOULD be understood and the 
  223. case carefully weighed before implementing any behavior described 
  224. with this label.
  225.  
  226. 5) MAY, or the adjective OPTIONAL, means that an item is truly 
  227. optional.  One vendor may choose to include the item because a 
  228. particular marketplace requires it or because the vendor feels
  229. that it enhances the product while another vendor may omit the same 
  230. item.  An implementation which does not include a particular option 
  231. MUST be prepared to interoperate with another implementation which 
  232. does include the option.
  233.  
  234. "Can" is used instead of "may" when referring to a possible 
  235. circumstance or situation, as opposed to an optional facility of the 
  236. protocol.
  237.  
  238. "User" is used to refer to a human user, whereas "client" refers to the 
  239. software being run by the user.
  240.  
  241. 1.2. Link Level
  242.  
  243. The ICAP server assumes a reliable, stream oriented transport such as 
  244. that provided by TCP/IP. When ICAP is used with TCP the server 
  245. listens on TCP port 7668 (subject to change).
  246.  
  247. 1.3. Commands and Responses
  248.  
  249. An ICAP session consists of the establishment of a client/server 
  250. connection, an initial greeting from the server, and client/server 
  251. interactions.  These client/server interactions consist of a client 
  252.  
  253.  
  254. Page   4                                                  Expires
  255. 01/29/98
  256.  
  257.  
  258. draft-oleary-icap-02.txt                                          07/29/97
  259.  
  260.  
  261. command, server data, and a server completion result response.
  262.  
  263. All interactions transmitted by client and server are in the form of lines;
  264.  
  265. that is, strings that end with a CRLF.  The protocol receiver of an ICAP 
  266. client or server is either reading a line, or is reading a sequence of 
  267. octets with a known count followed by a line.
  268.  
  269. The ICAP server states a greeting similar to the following:
  270.  
  271. S: * OK ICAP Server ready.
  272.  
  273. The greeting is an untagged response from the server which includes a 
  274. list of the server's capabilities followed by an optional human-readable 
  275. message. See below for the description of untagged responses. If the 
  276. ICAP server supports multiple capabilities (see below) they must be 
  277. presented using a parenthesized list. It is mandatory that the capability 
  278. ICAP be presented and that it be first in the list of capabilities. If the
  279.  
  280. capability ICAP is not presented, the client cannot proceed and must 
  281. close the connection immediately.
  282.  
  283. The server must present an OK response if it is ready to accept a client 
  284. connection. If the server is not ready to accept such a connect, it must 
  285. present a BYE response.
  286.  
  287. More examples of valid connection responses:
  288.  
  289. S: * OK (ICAP X-PigLatin) Server ready.
  290. S: * OK ICAP It's a wonderful day today!
  291. S: * BYE Connection refused. Please try again later.
  292.  
  293. 1.3.1.  Client Protocol Sender and Server Protocol Receiver
  294.  
  295. The client command begins an operation.  Each client command is 
  296. prefixed with a identifier (typically a short alphanumeric string, e.g. 
  297. A0001, A0002, etc.) called a "tag".  A different tag is generated by the 
  298. client for each command.
  299.  
  300. There are two cases in which a line from the client does not represent a 
  301. complete command.  In one case, a command argument is quoted with 
  302. an octet count (see the description of literal in String under Data 
  303. Formats); in the other case, the command arguments require server 
  304. feedback (see the AUTHENTICATE command).  In some of these 
  305. cases, the server sends a command continuation request response if it is 
  306. ready for the octets (if appropriate) and the remainder of the command.  
  307. This response is prefixed with the token "+".
  308.  
  309. Note: If, instead, the server detected an error in the command, it sends 
  310. a BAD completion response with tag matching the command (as 
  311. described below) to reject the command and prevent the client from 
  312. sending any more of the command.
  313.  
  314. It is also possible for the server to send a completion or intermediate 
  315. response for some other command (if multiple commands are in 
  316. progress), or untagged data.  In either case, the command continuation 
  317. request is still pending; the client takes the appropriate action for the 
  318.  
  319.  
  320. Page   5                                                  Expires
  321. 01/29/98
  322.  
  323.  
  324. draft-oleary-icap-02.txt                                          07/29/97
  325.  
  326.  
  327. response, and reads another response from the server.
  328.  
  329. The protocol receiver of an ICAP server reads a command line from 
  330. the client, parses the command and its arguments, and transmits server 
  331. data and a server command completion result response.
  332.  
  333. 1.3.2.  Server Protocol Sender and Client Protocol Receiver
  334.  
  335. Data transmitted by the server to the client come in four forms: 
  336. command continuation requests, command completion results, 
  337. intermediate responses, and untagged responses.
  338.  
  339. A command completion request is prefixed with the token "+".
  340.  
  341. A command completion result response indicates the success or failure 
  342. of the operation.  It is tagged with the same tag as the client command 
  343. which began the operation.  Thus, if more than one command is in 
  344. progress, the tag in a server completion response identifies the 
  345. command to which the response applies.  There are three possible 
  346. server completion responses: OK (indicating success), NO (indicating 
  347. failure), or BAD (indicating protocol error such as unrecognized 
  348. command or command syntax error).
  349.  
  350. An intermediate response returns data which can only be interpreted 
  351. within the context of a command in progress.  It is tagged with the 
  352. same tag as the client command which began the operation.  Thus, if 
  353. more than one command is in progress, the tag in an intermediate 
  354. response identifies the command to which the response applies.  A 
  355. tagged response other than "OK", "NO", or "BAD" is an intermediate 
  356. response.
  357.  
  358. An untagged response returns data or status messages which may be 
  359. interpreted outside the context of a command in progress.  It is prefixed 
  360. with the token "*".  Untagged data may be sent as a result of a client 
  361. command, or may be sent unilaterally by the server. There is no 
  362. syntactic difference between untagged data that resulted from a specific 
  363. command and untagged data that were sent unilaterally.
  364.  
  365. The protocol receiver of an ICAP client reads a response line from the 
  366. server.  It then takes action on the response based upon the first token 
  367. of the response, which may be a tag, a "*", or a "+" as described above.
  368.  
  369. A client MUST be prepared to accept any server response at all times. 
  370. This includes untagged data that it may not have requested. Due to the 
  371. obviously time-critical nature of applications which may use ICAP, an 
  372. ICAP server implementation should attempt to keep connected clients 
  373. "current" by sending updates to the client when a selected Calendar 
  374. Store is updated.
  375.  
  376. This topic is discussed in greater detail in the Server Responses section.
  377.  
  378. 1.4. Data Formats
  379.  
  380. ICAP uses textual commands and responses.  Data in ICAP can be in 
  381. one of several forms: atom, number, string, parenthesized list, dates or 
  382.  
  383.  
  384. Page   6                                                  Expires
  385. 01/29/98
  386.  
  387.  
  388. draft-oleary-icap-02.txt                                          07/29/97
  389.  
  390.  
  391. NIL.
  392.  
  393. 1.4.1.  Atom
  394.  
  395. An atom consists of one or more non-special characters.
  396.  
  397. 1.4.2.  Number
  398.  
  399. A number consists of one or more digit characters, and represents a 
  400. numeric value.
  401.  
  402. 1.4.3.  String
  403.  
  404. A string is in one of two forms: literal and quoted string.  The literal 
  405. form is the general form of string.  The quoted string form is an 
  406. alternative that avoids the overhead of processing a literal at the cost of
  407.  
  408. restrictions of what may be in a quoted string.
  409.  
  410. A literal is a sequence of zero or more octets (including CR and LF), 
  411. prefix-quoted with an octet count in the form of an open brace ("{"), 
  412. the number of octets, close brace ("}"), and CRLF.  In the case of 
  413. literals transmitted from server to client, the CRLF is immediately 
  414. followed by the octet data.  In the case of literals transmitted from 
  415. client to server, the client must wait to receive a command continuation 
  416. request (described later in this document) before sending the octet data 
  417. (and the remainder of the command).
  418.  
  419. A quoted string is a sequence of zero to 1024 7-bit characters, 
  420. excluding CR and LF, with double quote (<">) characters at each end.
  421.  
  422. The empty string is respresented as either "" (a quoted string with zero 
  423. characters between double quotes), as {0} followed by CRLF (a 
  424. synchronizing literal with an octet count of 0), or as {0+} followed by 
  425. a CRLF (a non-synchronizing literal with an octet count of 0).
  426.  
  427. Note: Even if the octet count is 0, a client transmitting a literal must 
  428. wait to receive a command continuation request.
  429.  
  430. 1.4.4. Parenthesized Lists
  431.  
  432. Data structures are represented as a "parenthesized list"; a sequence of 
  433. data items, delimited by space, and bounded at each end by 
  434. parentheses.  A parenthesized list can contain other parenthesized
  435. lists, using multiple levels of parentheses to indicate nesting.
  436.  
  437. The empty list is represented as () -- a parenthesized list with no 
  438. members.
  439.  
  440. 1.4.5. NIL
  441.  
  442. The special atom "NIL" represents the non-existence of a particular 
  443. data item that is represented as a string or parenthesized list, as 
  444. distinct 
  445. from the empty string "" or the empty parenthesized list ().
  446.  
  447. 1.4.6. Dates
  448.  
  449.  
  450. Page   7                                                  Expires
  451. 01/29/98
  452.  
  453.  
  454. draft-oleary-icap-02.txt                                          07/29/97
  455.  
  456.  
  457.  
  458. All dates given in this document are in a compact form of the ISO 8601 
  459. date and time format [6]: YYYYMMDD `T' HHMMSS. Hours are 
  460. always given using the 24 hour clock. A "Z" may be appended to 
  461. indicate UTC or "Zulu" time (that's GMT to most people). Any date 
  462. not given in UTC is assumed to be in the time zone of the server. 
  463. Explicit time zones can indicated using ISO 8601's time zone 
  464. convention of concatenating the number of hours (optionally minutes) 
  465. from UTC to the end of the given time. Clients can test and set the time 
  466. zone of the server they are connected to by using the ATTRIBUTES 
  467. command (see below).
  468.  
  469. Note: ICAP servers do not support ISO 8601's week of the year 
  470. notation. Before storing in an ICAP server, these dates must be 
  471. converted to the above format.
  472.  
  473. Examples of valid dates:
  474.  
  475. 19970927T1530-08    `Sept. 27, 1997 in California
  476. 19970928T0030+01    `The same time as above in Central Europe
  477. 20000101T0000-05    `New Year's Eve in New York City
  478.  
  479. 1.5.  Response when no Command in Progress
  480.  
  481. Server implementations are permitted to send an untagged response 
  482. while there is no command in progress.  Server implementations that 
  483. send such responses MUST deal with flow control considerations. 
  484. Specifically, they must either (1) verify that the size of the data does 
  485. not exceed the underlying transport's available window size, or (2) use 
  486. non-blocking writes.
  487.  
  488. 1.6.  Autologout Timer
  489.  
  490. If a server has an inactivity autologout timer, that timer MUST be of at 
  491. least 10 minutes' duration.  The receipt of ANY command from the 
  492. client during that interval should suffice to reset the autologout timer.
  493.  
  494. 1.7.  Multiple Commands in Progress
  495.  
  496. The client is not required to wait for the completion result response of a
  497.  
  498. command before sending another command, subject to flow control 
  499. constraints on the underlying data stream.  Similarly, a server is not 
  500. required to process a command to completion before beginning 
  501. processing of the next command, unless an ambiguity would result 
  502. because of a command that would affect the results of other commands. 
  503. If there is such an ambiguity, the server executes commands to 
  504. completion in the order given by the client.
  505.  
  506. 1.8. Calendar Store
  507.  
  508. The primary purpose of the ICAP protocol is to allow access to, and the 
  509. modification of, Calendar Stores. A Calendar Store is defined as one 
  510. set of Calendar Objects that are organized chronologically and given a 
  511. name. A Calendar Object is one discrete item that may be posted to a 
  512. calendar. In ICAP, Calendar Objects are represented in iCalendar [2] 
  513.  
  514.  
  515. Page   8                                                  Expires
  516. 01/29/98
  517.  
  518.  
  519. draft-oleary-icap-02.txt                                          07/29/97
  520.  
  521.  
  522. format and can consist of one or more Calendar Components as 
  523. described in the iCalendar specification.
  524.  
  525. Objects within a Calendar Store MUST meet one of the two following 
  526. requirements:
  527.  
  528. ? Every Date-Time property of every Object within the Calendar 
  529. Store MUST contain a UTC value or a UTC relative value. All 
  530. Objects within the Calendar Store MUST be sorted by UTC using 
  531. the per-Component rules specified in section 1.9 below.
  532. ? If all Objects within a Calendar Store are contained within the 
  533. same time zone and their time values can all be converted to UTC 
  534. using the same TIMEZONE component, then TIMEZONE 
  535. components and UTC relative information can be omitted from 
  536. individual Objects within the Calendar Store. All Objects within 
  537. the Calendar Store MUST be sorted by using the per-Component 
  538. rules specified in section 1.9 below.
  539.  
  540. 1.9. Calendar Objects and Components
  541.  
  542. iCalendar Objects as specified in [2] consist of a sequence of calendar 
  543. properties and one or more calendar Components. An ICAP 
  544. implementation MUST support all valid iCalendar Objects and their 
  545. Components, with the following qualifiers:
  546.  
  547. ? Calendar Properties, as identified in section 5.4.7 of [2] can be 
  548. omitted from any Object in a Calendar Store if those Properties are 
  549. common to all Objects in that Calendar Store. In this case, those 
  550. Calendar Properties common to every Object in the Calendar Store 
  551. MUST be returned via the ATTRIBUTES command. If the 
  552. Calendar Properties for Objects in a Calendar Store can vary from 
  553. Object to Object, every Object contained within a Calendar Store 
  554. MUST contain Calendar Properties appropriate to that Object.
  555. ? FREEBUSY Components MUST be returned only via the 
  556. FREEBUSY command.
  557. ? Event, To-Do and Journal Components can be intermixed within 
  558. the same Calendar Store. Event components are sorted according 
  559. to their DTSTART value. To-Do components are sorted according 
  560. to their DTSTART value. Journal Components are sorted 
  561. according to their DTSTART value.
  562. ? An Object within a Calendar Store can contain at most ONE 
  563. Event, To-Do or Journal Component.
  564.  
  565. 1.10. Unique Identifiers
  566.  
  567. Each ICAP server, Calendar store and Calendar Object must have a 
  568. unique identifier ("unique ID" or "UID") associated with it. This 
  569. unique ID must persist across sessions. Unique ID's in ICAP consist of 
  570. alphanumeric characters only, are exactly 16 characters in length and 
  571. are case sensitive. Nothing about the structure of the unique ID must be 
  572. assumed: they are not guaranteed to represent numeric values, 
  573. ascending in value, etc.
  574.  
  575. A Calendar store UID need only be unique within the current server 
  576. and is referred to hereafter as the Calendar Store ID (CSID). A 
  577.  
  578.  
  579. Page   9                                                  Expires
  580. 01/29/98
  581.  
  582.  
  583. draft-oleary-icap-02.txt                                          07/29/97
  584.  
  585.  
  586. Calendar Object UID need only be unique within its Calendar store and 
  587. is referred to as the Calendar Object ID (COID).
  588.  
  589. The exact method for ensuring that UID's are unique is implementation 
  590. dependent.
  591.  
  592. Note that the iCalendar specification [2] defines an attribute called 
  593. "UID" for calendar Objects which must be globally unique. This value 
  594. can be created by concatenating the server's host name then the CSID 
  595. and COID.
  596.  
  597. 1.11. Calendar Store Naming
  598.  
  599. Calendar names can be any string of alphanumeric characters and the 
  600. characters "_" (underscore), "." (period), "-" (hyphen) and "'" 
  601. (apostrophe). Calendar names can contain spaces, in which case the 
  602. whole name must be delimited by double quote characters (see below). 
  603. Calendar names are case sensitive and must be distinct from all other 
  604. Calendar stores.
  605.  
  606. Calendar names can be hierarchical: the hierarchy is read from left 
  607. (highest level in the hierarchy) to right and delimited by the "/" 
  608. (forward slash) character. If a hierarchical name is quoted, the entire 
  609. name must be quoted. An ICAP implementation is NOT required to 
  610. support hierarchical naming.
  611.  
  612. Examples of valid names:
  613.  
  614. "Pete's Calendar"
  615. Product_Calendar
  616. Project1
  617. SpinalTapPerformanceSchedule
  618. Projects/Pete/ICAP
  619. "Projects/Pete O'Leary/ICAP Specification Schedule"
  620.  
  621. Calendar names can contain a user's name delimited by angle braces 
  622. "<" and ">". Empty angle braces "<>" are meant to refer to the 
  623. currently authenticated user. This specification refers to "users" and 
  624. "user names", although these concepts can apply to things other than 
  625. human beings. For instance, a "user" with their own Calendar store 
  626. may actually be a resource such as a conference room which exists 
  627. outside of the Calendar server itself.
  628.  
  629. The important distinction between user names and store names is that 
  630. user names very often have meaning outside the implementation of the 
  631. current server. For instance, a user name may be an SMTP mail address 
  632. or a Distinguished Name that may be looked up using a directory 
  633. service like LDAP. An ICAP implementation must not assume 
  634. anything about the structure of a user name.
  635.  
  636. A user's name by itself, used as a Calendar Store name, must represent 
  637. the default Calendar Store (see below) for that user. The user's name 
  638. must also be the root by which other Calendar Stores the user has 
  639. created can be found (see the LIST command below). A user name 
  640. must always be at the leftmost position in the hierarchy of a Calendar 
  641.  
  642.  
  643. Page  10                                                  Expires
  644. 01/29/98
  645.  
  646.  
  647. draft-oleary-icap-02.txt                                          07/29/97
  648.  
  649.  
  650. Store name. It is invalid to have a Calendar name with more than one 
  651. user name in it.
  652.  
  653. See the description of the SELECT and LIST commands below for 
  654. more discussion about user names and their use.
  655.  
  656. Valid names with user/resource names:
  657.  
  658. <Pete>
  659. <Pete>/Project_Schedule
  660. <Large_Conference_Room>
  661. "<Palo Alto/Research Building/Large Conference Room>"
  662.  
  663. Invalid names:
  664.  
  665. Users/<Pete>
  666. <Pete>/<Paul>
  667. "Palo Alto/Research Building/<Large Conference Room>"
  668.  
  669. 1.12. Default Calendar
  670.  
  671. Every user local to a calendar server should have a "default calendar". 
  672. This is the Calendar store that is most likely to contain up-to-the-
  673. minute information about a person's calendar. The exact definition of 
  674. this concept is implementation-dependent. The default calendar, which 
  675. can be selected using only the user's name, can be used by clients to 
  676. look up free and busy time information for that user.
  677.  
  678. 1.13. Access Control
  679.  
  680. ICAP servers should allow for different levels of access control on 
  681. user's Calendar stores. The exact definition of this access control is 
  682. implementation dependent. A good default choice would be to allow 
  683. read-only access to a user's default calendar store via the EXAMINE 
  684. command to allow for free and busy time searches.
  685.  
  686. The server should give a NO response any time a client requests an 
  687. operation which is not permitted by access control.
  688.  
  689. For example, a server that allows anonymous read-only browsing of 
  690. Calendar stores may enforce the following rules:
  691.  
  692. 1. The client is only shown user's default Calendars when performing 
  693. a LIST command.
  694. 2. The client is only allowed to select Calendar stores via the 
  695. EXAMINE command.
  696. 3. The STORE command always returns a NO response and allows 
  697. no updates of the Calendar store. In this case, the server could 
  698. return a response to the client indicating where to send a meeting 
  699. invitation via e-mail to request a meeting with the desired user.
  700. 4. The FETCH command will return a NO response if the user 
  701. requests anything more than the flags and summary information of 
  702. a Calendar Object. This would allow the anonymous user to 
  703. browse the Calendar of another user in a company which had an 
  704. "open calendar" policy for all users.
  705.  
  706.  
  707. Page  11                                                  Expires
  708. 01/29/98
  709.  
  710.  
  711. draft-oleary-icap-02.txt                                          07/29/97
  712.  
  713.  
  714. 5. Optionally, for a higher level of security, the server may return a 
  715. NO response for an attempted FETCH and allow only the use of 
  716. the FREEBUSY command. The FREEBUSY command does not 
  717. return any specific information about the Objects of a user's 
  718. calendar.
  719.  
  720. 1.14. Server States
  721.  
  722. An ICAP server is in one of four states.  Most commands are valid in 
  723. only certain states.  It is a protocol error for the client to attempt a 
  724. command while the command is in an inappropriate state.  In this case, 
  725. a server will respond with a BAD or NO (depending upon server 
  726. implementation) command completion result.
  727.  
  728. When a command is valid in more than one server state, the description 
  729. below will list the "Valid States" for that command.
  730.  
  731. 1.13.1.  Non-Authenticated State
  732.  
  733. In non-authenticated state, the user must supply authentication 
  734. credentials before most commands will be permitted.  This state is 
  735. entered when a connection starts.
  736.  
  737. 1.13.2.  Authenticated State
  738.  
  739. In authenticated state, the user is authenticated and most commands 
  740. will be permitted.  This state is entered when acceptable authentication 
  741. credentials have been provided.
  742.  
  743. 1.13.3. Selected State
  744.  
  745. In selected state, the user has chosen a particular calendar store (or 
  746. calendar stores) and can perform operations on them.
  747.  
  748. 1.13.4.  Logout State
  749.  
  750. In logout state, the session is being terminated, and the server will close
  751.  
  752. the connection.  This state can be entered as a result of a client request
  753.  
  754. or by unilateral server decision.
  755.  
  756. 2. Scheduling Operations
  757.  
  758. This section discusses different scheduling operations and how ICAP 
  759. enables those operations. This section also presents scheduling 
  760. operations which ICAP does not enable and gives a short discussion of 
  761. why.
  762.  
  763. 2.1 Operations Supported by ICAP
  764.  
  765. For illustration purposes, the following is an incomplete list of the 
  766. scheduling operations that ICAP is intended to support:
  767.  
  768. 2.1.1. Calendar Browsing
  769.  
  770. ICAP supports the ability to open and browse Calendar Stores via the 
  771.  
  772.  
  773. Page  12                                                  Expires
  774. 01/29/98
  775.  
  776.  
  777. draft-oleary-icap-02.txt                                          07/29/97
  778.  
  779.  
  780. SELECT and FETCH commands. A client may obtain a list of 
  781. Calendar Stores available using the LIST command. A user can browse 
  782. a Calendar that belongs the them or to another user, subject to access 
  783. control restrictions. The SELECT command actually allows multiple 
  784. users' Calendars to be viewed simultaneously.
  785.  
  786. 2.1.2. Freetime Search
  787.  
  788. ICAP supports the ability to obtain free and busy information about a 
  789. user in two ways:
  790.  
  791. 1. The user's default Calendar Store can be browsed as described 
  792. above. 
  793. 2. The FREEBUSY command can be used to obtain a "snapshot" of 
  794. users' scehdule during a given period of time.
  795.  
  796. 2.1.3.  Creating, Deleting and Modifying Calendar Objects
  797.  
  798. A user can create, delete and modify Objects either in their own 
  799. Calendar Stores or, subject to access control restrictions, in another 
  800. user's Calendar store.
  801.  
  802. The APPEND command is used to create new Calendar Objects in any 
  803. accessible Calendar Store. The STORE command is used to modify or 
  804. mark for deletion Calendar Objects in the currently selected Calendar 
  805. store.
  806.  
  807. 2.1.4. Group Scheduling
  808.  
  809. ICAP supports the so-called "direct-book" mechanism of creating 
  810. group meetings by allowing a user to actually place a shared Calendar 
  811. Object into the Calendar Stores of multiple users. This is not the only 
  812. way that group scheduling can be performed (see below under 
  813. "Meeting Invitations"). 
  814.  
  815. An ICAP implementation may choose not to support direct-book group 
  816. scheduling by enforcing access control on users' Calendar Stores.
  817.  
  818. 2.2. Operations Not Supported By ICAP
  819.  
  820. The following is partially complete list of the scheduling operations 
  821. that ICAP is NOT intended to support:
  822.  
  823. 2.2.1. Meeting Invitations
  824.  
  825. ICAP contains no mechanisms for sending so-called "meeting 
  826. invitations" to Calendar users. Meeting invitations are one means by 
  827. which group scheduling can be accomplished. This operations may be 
  828. accomplished by sending iCalendar objects encapsulated as MIME [3] 
  829. content in an SMTP [4] mail message, as described in the iTIP 
  830. documents [7].
  831.  
  832. ICAP contains no mechanisms for allowing access to meeting 
  833. invitations that have been received by a user. This should be 
  834. accomplished via message access protocols like IMAP4 [1].
  835.  
  836.  
  837. Page  13                                                  Expires
  838. 01/29/98
  839.  
  840.  
  841. draft-oleary-icap-02.txt                                          07/29/97
  842.  
  843.  
  844.  
  845. 2.2.2. Directory Services
  846.  
  847. ICAP contains no mechanisms for locating a user or obtaining personal 
  848. information about a user. This operation should be accomplished via 
  849. LDAP [5].
  850.  
  851. 3. ICAP Commands - Any State
  852.  
  853. 3.1. CAPABILITY Command
  854.  
  855. Arguments:    None.
  856.  
  857. Data:        Mandatory untagged response: CAPABILITY
  858.  
  859. Result:        OK - Command completed
  860.         NO - Command failed
  861.         BAD - Improperly formed command, invalid 
  862. arguments
  863.  
  864. The CAPABILITY command requests a listing of capabilities that the 
  865. server supports.  The server MUST send a single untagged 
  866. CAPABILITY response with "ICAP" as one of the listed capabilities 
  867. before the (tagged) OK response.  This listing of capabilities is not 
  868. dependent upon connection state or user.  It
  869. is therefore not necessary to issue a CAPABILITY command more 
  870. than once in a session.
  871.  
  872. A capability name which begins with "AUTH=" indicates that the 
  873. server supports that particular authentication mechanism.  See [5] for a 
  874. discussion of authentication mechanisms that can be used with ICAP. 
  875. All authentication names are, by definition, part of this specification.  
  876. For example, the authorization capability for an experimental 
  877. "blurdybloop" authenticator would be "AUTH=X-BLURDYBLOOP" 
  878. and not "X-AUTH=BLURDYBLOOP" or "X-AUTH=X-
  879. BLURDYBLOOP".  Other capability names refer to extensions, 
  880. revisions, or amendments to this specification.  See the documentation 
  881. of the CAPABILITY response additional information.  No capabilities 
  882. are enabled without explicit client action to invoke the capability.  See 
  883. the section entitled "X-(Atom) Experimental Commands" for 
  884. information about the form of site or implementation-specific 
  885. capabilities.
  886.  
  887. Examples:
  888.  
  889. C: a001 CAPABILITY
  890. S: * CAPABILITY ICAP
  891. S: a001 OK CAPABILITY completed
  892.  
  893. C: a001 CAPABILITY
  894. S: * CAPABILITY ICAP X-Vegomatic AUTH=X-Secret-Decoder-
  895. Rings
  896. S: a001 OK CAPABILITY completed
  897.  
  898. C: a001 CAPABILITY
  899.  
  900.  
  901. Page  14                                                  Expires
  902. 01/29/98
  903.  
  904.  
  905. draft-oleary-icap-02.txt                                          07/29/97
  906.  
  907.  
  908. S: * CAPABILITY ICAP AUTH=KERBEROS_V4
  909. S: a001 OK CAPABILITY completed
  910.  
  911. 3.2. NOOP Command
  912.  
  913. Arguments:    None
  914.  
  915. Data:        Optional untagged responses.
  916.  
  917. Result:        OK - Command completed
  918.         BAD - Improperly formed command, arguments 
  919. supplied which are not allowed
  920.  
  921. An ICAP server must support this command. The NOOP command 
  922. always succeeds.  It does nothing.
  923.  
  924. Since any command can return a status update as untagged data, the 
  925. NOOP command can be used as a periodic poll during a period of 
  926. inactivity.  The NOOP command can also be used to reset any 
  927. inactivity autologout timer on the server. The ICAP server 
  928. implementation should attempt to ensure that the NOOP commands 
  929. completes in as little time as possible.
  930.  
  931. Examples:
  932.  
  933. C: A001 NOOP
  934. S: A001 OK NOOP Completed.
  935.  
  936. C: A002 NOOP
  937. S: * 42 EXISTS
  938. S: * 1 RECENT
  939. S: A002 OK NOOP Completed.
  940.  
  941. 3.4. LOGOUT Command
  942.  
  943. Arguments:    None
  944.  
  945. Data:        None
  946.  
  947. Result:        OK - Command completed.
  948.         NO - Command failed, this would indicate that 
  949. something is seriously wrong.
  950.         BAD - Improperly formed command, arguments 
  951. supplied which are not allowed
  952.  
  953. An ICAP server must support this command, closing all open selected 
  954. Calendars and disconnecting. If a NO response is returned by this 
  955. command, the server should return some human-readable information 
  956. describing why the Logout cannot occur and what the user can do to 
  957. correct the situation. The server must send an untagged BYE response 
  958. before the connection is closed and the command completes.
  959.  
  960. Example:
  961.  
  962. C: A001 LOGOUT
  963.  
  964.  
  965. Page  15                                                  Expires
  966. 01/29/98
  967.  
  968.  
  969. draft-oleary-icap-02.txt                                          07/29/97
  970.  
  971.  
  972. S: * BYE ICAP Server logging out.
  973. S: A001 OK LOGOUT Completed.
  974.  
  975. 3.5. X-(Atom) Experimental Commands
  976.  
  977. Arguments:    implementation defined
  978.  
  979. Data:        implementation defined
  980.  
  981. Result:        OK - command completed
  982. NO - failure
  983. BAD - command unknown or arguments invalid
  984.  
  985. Any command prefixed with an "X-" is an experimental command. 
  986. Commands which are not part of this specification MUST use the "X-" 
  987. prefix.
  988.  
  989. Any added untagged responses issued by an experimental command 
  990. MUST also be prefixed with an X.  Server implementations MUST 
  991. NOT send any such untagged responses, unless the client requested it 
  992. by issuing the associated experimental command.
  993.  
  994. Example:
  995.  
  996. C: a441 CAPABILITY
  997. S: * CAPABILITY ICAP AUTH=KERBEROS_V4 X-PIG-LATIN
  998. S: a441 OK CAPABILITY completed
  999. C: A442 X-PIG-LATIN
  1000. S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay
  1001. S: A442 OK X-PIG-LATIN ompleted-cay
  1002.  
  1003. 4. ICAP Commands - Non-Authenticated 
  1004. State
  1005.  
  1006. 4.1. AUTHENTICATE Command
  1007.  
  1008. Arguments:    Authentication mechanism name
  1009.  
  1010. Data:        None.
  1011.  
  1012. Result:        OK - Command completed, in Authenticated state
  1013.         NO - Command failed, still in Non-Authenticated 
  1014. state
  1015.         BAD - Improperly formed command, invalid 
  1016. arguments, still Non-Authenticated.
  1017.  
  1018. The AUTHENTICATE command indicates an authentication 
  1019. mechanism, such as described in [5], to the server.  If the server 
  1020. supports the requested authentication mechanism, it performs an 
  1021. authentication protocol exchange to authenticate and identify the client. 
  1022.  
  1023. It MAY also negotiate an OPTIONAL protection mechanism for 
  1024. subsequent protocol interactions.  If the requested authentication 
  1025. mechanism is not supported, the server SHOULD reject the 
  1026. AUTHENTICATE command by sending a tagged NO response.
  1027.  
  1028.  
  1029.  
  1030. Page  16                                                  Expires
  1031. 01/29/98
  1032.  
  1033.  
  1034. draft-oleary-icap-02.txt                                          07/29/97
  1035.  
  1036.  
  1037. The authentication protocol exchange consists of a series of server 
  1038. challenges and client answers that are specific to the authentication 
  1039. mechanism.  A server challenge consists of a command continuation 
  1040. request response with the "+" token followed by a BASE64 encoded 
  1041. string.  The client answer consists of a line consisting of a BASE64 
  1042. encoded string.  If the client wishes to cancel an authentication 
  1043. exchange, it issues a line with a single "*".  If the server receives such
  1044.  
  1045. an answer, it MUST reject the AUTHENTICATE command by 
  1046. sending a tagged BAD response.
  1047.  
  1048. A protection mechanism provides integrity and privacy protection to 
  1049. the protocol session.  If a protection mechanism is negotiated, it is 
  1050. applied to all subsequent data sent over the connection. The protection 
  1051. mechanism takes effect immediately following the CRLF that 
  1052. concludes the authentication exchange for the client, and the CRLF of 
  1053. the tagged OK response for the server.  Once the protection mechanism 
  1054. is in effect, the stream of command and response octets is processed 
  1055. into buffers of ciphertext.  Each buffer is transferred over the 
  1056. connection as a stream of octets prepended with a four octet field in 
  1057. network byte order that represents the length of the following data.  
  1058. The maximum ciphertext buffer length is defined by the protection 
  1059. mechanism.
  1060.  
  1061. Authentication mechanisms are OPTIONAL.  Protection mechanisms 
  1062. are also OPTIONAL; an authentication mechanism MAY be 
  1063. implemented without any protection mechanism.  If an 
  1064. AUTHENTICATE command fails with a NO response, the client MAY 
  1065. try another authentication mechanism by issuing another 
  1066. AUTHENTICATE command, or MAY attempt to authenticate by 
  1067. using the LOGIN command.  In other words, the client MAY request 
  1068. authentication types in decreasing order of preference, with the LOGIN 
  1069. command as a last resort.
  1070.  
  1071. Example:
  1072.  
  1073. S: * OK ICAP KerberosV4 Server
  1074. C: A001 AUTHENTICATE KERBEROS_V4
  1075. S: + AmFYig==
  1076. C: 
  1077. BAcAQU5EUkVXLkNNVS5FRFUAOCAsho84kLN3/IJmrMG+25a4
  1078. DT
  1079. +nZImJjnTNHJUtxAA+o0KPKfHEcAFs9a3CL5Oebe/ydHJUwYFd
  1080. WwuQ1MWiy6IesKvjL5rL9WjXUb9MwT9bpObYLGOKi1Qh
  1081. S: + or//EoAADZI=
  1082. C: DiAF5A4gA+oOIALuBkAAmw==
  1083. S: A001 OK Kerberos V4 authentication successful
  1084.  
  1085. Note: the line breaks in the first client answer are for editorial clarity
  1086.  
  1087. and are not in real authenticators.
  1088.  
  1089. 4.2. LOGIN Command
  1090.  
  1091. Arguments:    User name for login.
  1092. Optional password.
  1093.  
  1094.  
  1095.  
  1096. Page  17                                                  Expires
  1097. 01/29/98
  1098.  
  1099.  
  1100. draft-oleary-icap-02.txt                                          07/29/97
  1101.  
  1102.  
  1103. Data:        None.
  1104.  
  1105. Result:        OK - Command completed, in Authenticated state
  1106.         NO - Command failed, still in Non-Authenticated 
  1107. state
  1108.         BAD - Improperly formed command, invalid 
  1109. arguments, still in Non-Authenticated state.
  1110.  
  1111. The LOGIN command identifies the client to the server and carries the 
  1112. plaintext password authenticating this user.
  1113.  
  1114. This is accomplished by allowing a LOGIN command specifying a user 
  1115. name of "Anonymous" and any password. The anonymous user should 
  1116. be allowed to enter the Authenticated state, with access control 
  1117. restrictions. It is recommended that anonymous users be given read-
  1118. only permission to users' default Calendar stores to allow free busy 
  1119. time searches.
  1120.  
  1121. Example:
  1122.  
  1123. C: a001 LOGIN Pete Mumblefrtoz
  1124. S: a001 OK LOGIN completed
  1125.  
  1126. 5. ICAP Commands - Authenticated State
  1127.  
  1128. 5.1. SELECT Command
  1129.  
  1130. Arguments:    Name of the Calendar store to select.
  1131.  
  1132. Data:        Mandatory untagged response: FLAGS, EXISTS
  1133. Optional untagged responses: RECENT
  1134.  
  1135. Result:        OK - now in Selected state
  1136. NO - no such Calendar store, can't access Calendar 
  1137. store
  1138.         BAD - Invalid arguments
  1139.  
  1140. Valid states:    Authenticated, Selected
  1141.  
  1142. The SELECT command selects the Calendar store for the current user 
  1143. so that Calendar Objects can be queried and retrieved. Multiple 
  1144. Calendar stores can be selected by reissuing the SELECT command. In 
  1145. this way, a composite view of the Calendar stores can be created. This 
  1146. composite calendar can then be used to allow browsing of group 
  1147. calendars and creating of group meetings (see below). It is invalid to 
  1148. select the same Calendar store more than once.
  1149.  
  1150. The name parameter can be the name of a Calendar and optionally a 
  1151. user name. If a user name is given, then it is bracketed with angle 
  1152. braces "<" and ">" and added before the Calendar store name. The 
  1153. default Calendar store of a user can be selected by using only the user's 
  1154. name bracketed by angles. The default calendar store of the current 
  1155. user can be selected by using angles"<>". All commands which take a 
  1156. Calendar store name as a parameter can accept a user name in this 
  1157. manner. Which Calendar store is selected as a default is 
  1158.  
  1159.  
  1160. Page  18                                                  Expires
  1161. 01/29/98
  1162.  
  1163.  
  1164. draft-oleary-icap-02.txt                                          07/29/97
  1165.  
  1166.  
  1167. implementation dependent. It is recommended that the default store be 
  1168. whichever Calendar store most accurately represents the user's actual 
  1169. schedule, so that it can be queried to find freetime (see the FREEBUSY 
  1170. command below). Any Calendar store name given that does not include 
  1171. an explicit username must be assumed to belong to the current user. In 
  1172. other words, a prefix of "<>/" can be implicitly added before any 
  1173. Calendar store name that does not give an explicit user name.
  1174.  
  1175. The user name may be specified as <"username"@"hostname">. If 
  1176. "hostname" is the name of the current host machine, then "hostname" 
  1177. may be omitted and the form is: <"username">. If "hostname" is 
  1178. included, and it is different from the current host machine name, the 
  1179. server can either reject the name with a NO response or attempt to 
  1180. connect to the specified host machine on behalf of the user and issue an 
  1181. OK response if successful. If a NO response is given by the server 
  1182. because the given user's calendar information is not located on the host 
  1183. but the server knows where, a reference name in angle brackets may be 
  1184. included as part of the response.
  1185.  
  1186. The EXISTS response should return the total number of Objects 
  1187. currently selected. When multiple Calendar stores are selected, this is 
  1188. the combined total of all Objects selected in all the Calendar stores.
  1189.  
  1190. Recurring Objects may appear more than once within a selected 
  1191. Calendar Store if all recurring dates can be resolved in advance. See 
  1192. the RANGE command below for more information about handling 
  1193. recurring events.
  1194.  
  1195. All Objects in the selected Calendar stores must be presented by the 
  1196. server in chronological order from 1 to the number of Objects returned 
  1197. by the EXISTS response. If multiple Calendar stores are selected by 
  1198. reissuing the SELECT command and the server cannot support 
  1199. presenting multiple Calendars in chronological order the server must 
  1200. issue a NO response for additional Calendars as they are selected.
  1201.  
  1202. Note for readers familiar with IMAP4: The ICAP protocol does not 
  1203. require any correlation between Object numbers and unique ID's as 
  1204. IMAP4 does. UID's are not required to be strictly ascending. 
  1205. Furthermore, UID's in ICAP cannot change between sessions as in 
  1206. IMAP4 (per the UIDVALIDITY response).
  1207.  
  1208. The RECENT response should be given if new Calendar Objects have 
  1209. appear in the selected Calendar since it was last selected. This may 
  1210. occur when someone else's Calendar store is selected or possibly when 
  1211. someone else - an assistant perhaps - modifies the user's Calendar
  1212.  
  1213. The FLAGS response should list the flags supported by this Calendar 
  1214. store. Note that when multiple Calendar stores are selected, the FLAGS 
  1215. supported should be the intersection of those supported by all the 
  1216. Calendars.
  1217.  
  1218. Flags current supported are:
  1219.  
  1220. \Deleted - Object is marked for deletion.
  1221. \Recent - Object has been added since the last time that this Calendar 
  1222.  
  1223.  
  1224. Page  19                                                  Expires
  1225. 01/29/98
  1226.  
  1227.  
  1228. draft-oleary-icap-02.txt                                          07/29/97
  1229.  
  1230.  
  1231. store was selected.
  1232. \Repeating - Object is one of a repeating set of Objects.
  1233. \Tentative - The Object is marked as being "tentative" - not yet 
  1234. confirmed - by the Calendar's owner.
  1235. \Seen - The user has already seen this Object. Set by default when the 
  1236. user creates an Object in their own store.
  1237.  
  1238. Example interactions:
  1239.  
  1240. C: A001 SELECT
  1241. S: * 123 EXISTS
  1242. S: * FLAGS (\Deleted \Recent \Repeating)
  1243. S: A001 OK SELECT Completed
  1244. C: A002 RANGE 19970101T000000-0700 19970130T235959-0700
  1245.  
  1246. The  sequence above selects the current user's default Calendar store. It 
  1247. then sends a Selected state command called RANGE (see below).
  1248.  
  1249. C: A001 SELECT <>/Section1
  1250. S: * 45 EXISTS
  1251. S: * FLAGS (\Deleted \Recent \Repeating)
  1252. S: A001 OK SELECT completed
  1253. C: A002 RANGE 19970101T000000-0700 19970130T235959-0700
  1254.  
  1255. The sequence above selects the current user's Calendar store called 
  1256. "Section1". It then sends a Selected state command called RANGE.
  1257.  
  1258. C: A001 SELECT <>
  1259. S: * 23 EXISTS
  1260. S: * FLAGS (\Deleted \Recent \Repeating)
  1261. S: A001 OK SELECT completed
  1262. C: A002 SELECT <Bob>
  1263. S: * 56 EXISTS
  1264. S: * FLAGS (\Deleted \Recent \Repeating)
  1265. S: A002 OK SELECT completed
  1266. C: A003 SELECT <Sally>
  1267. S: * 123 EXISTS
  1268. S: * FLAGS (\Deleted \Recent \Repeating)
  1269. S: A003 OK SELECT completed
  1270.  
  1271. This sequence uses multiple SELECT commands to open the current 
  1272. user's default Calendar store plus the default Calendar stores of Bob 
  1273. and Sally. Note that the EXISTS response from the command contains 
  1274. the number of Calendar Objects in all of the Calendars currently 
  1275. selected.
  1276.  
  1277. C: A001 SELECT <jyip@clearblue.com>
  1278. S: A001 NO SELECT No such user.
  1279.  
  1280. C: A001 SELECT <paul@broadbase.com>
  1281. S: * 27 EXISTS
  1282. S: * FLAGS (\Deleted \Recent \Repeating)
  1283. S: A001 OK SELECT completed.
  1284.  
  1285. C: A001 SELECT <poleary@clearblue.com>
  1286.  
  1287.  
  1288. Page  20                                                  Expires
  1289. 01/29/98
  1290.  
  1291.  
  1292. draft-oleary-icap-02.txt                                          07/29/97
  1293.  
  1294.  
  1295. S: A001 NO SELECT Try <poleary@yosemite.clearblue.com>
  1296.  
  1297. These sequences demonstrate how a server might handle a SELECT 
  1298. command where the given user's Calendar store is not on the current 
  1299. host. In the second example, the server knows the location of the user's 
  1300. Calendar host and supplies that information to the client.
  1301.  
  1302. 5.2. EXAMINE Command
  1303.  
  1304. Data:        None.
  1305. Result:        OK - Command completed
  1306.         NO - Command failed
  1307.         BAD - Improperly formed command, invalid 
  1308. arguments
  1309.  
  1310. Valid states:    Authenticated, Selected
  1311.  
  1312. This command is identical to SELECT except that the selected 
  1313. Calendar store is returned read only. EXAMINE and SELECT 
  1314. command can be given in combination to select multiple calendars for 
  1315. browsing. The operation is identical in all respects, regardless of which 
  1316. command is used, except that a Calendar store selected via EXAMINE 
  1317. cannot be modified or updated in any way.
  1318.  
  1319. 5.3. CREATE Command
  1320.  
  1321. Arguments:    Name of Calendar store to create.
  1322.  
  1323. Data:        None.
  1324.  
  1325. Result:        OK - Calendar store created.
  1326.         NO - Calendar store not created.
  1327.         BAD - Invalid arguments.
  1328.  
  1329. Valid states:    Authenticated, Selected
  1330.  
  1331. Creates a new Calendar store with the given name. Calendar store 
  1332. names must begin with an alphabetic character and consist of 
  1333. alphanumeric characters. Calendar names are not case sensitive. It is 
  1334. illegal to create more than one Calendar store with the same name. 
  1335. CREATE does not automatically select the Calendar store created.
  1336.  
  1337. ICAP servers are NOT required to support hierarchical names. If a 
  1338. client attempts to create a Calendar Store with a hierarchical name on a 
  1339. server which does not support hierarchical names, the server MUST 
  1340. return a response of NO to the CREATE command.
  1341.  
  1342. If the Calendar name is suffixed with the hierarchy separator "/", this is
  1343.  
  1344. a declaration that the client intends to create Calendar names under this 
  1345. name in the hierarchy.  Server implementations that do not require this 
  1346. declaration MUST ignore it.
  1347.  
  1348. If the hierarchy separator character appears elsewhere in the name, the 
  1349. server SHOULD create any superior hierarchical names that are needed 
  1350. for the CREATE command to complete successfully. In other words, 
  1351.  
  1352.  
  1353. Page  21                                                  Expires
  1354. 01/29/98
  1355.  
  1356.  
  1357. draft-oleary-icap-02.txt                                          07/29/97
  1358.  
  1359.  
  1360. an attempt to create "foo/bar/zap" on a server SHOULD create foo/ and 
  1361. foo/bar/ if they do not already exist.
  1362.  
  1363. Example:
  1364.  
  1365. C: A001 CREATE Projects/
  1366. S: A001 OK CREATE Completed
  1367. C: A001 CREATE Projects/Purple
  1368. S: A001 OK CREATE Completed
  1369. C: A001 CREATE Projects/Green
  1370. S: A001 OK CREATE Completed
  1371.  
  1372. The above example creates two Calendar stores for the default user 
  1373. below the hierarchical name "Projects".
  1374.  
  1375. 5.4. DELETE Command
  1376.  
  1377. Arguments:    Name of Calendar store to delete.
  1378.  
  1379. Data:        None.
  1380.  
  1381. Result:        OK - Calendar store deleted.
  1382.         NO - Calendar store not deleted.
  1383.         BAD - Invalid arguments.
  1384.  
  1385. Valid states:    Authenticated, Selected
  1386.  
  1387. Deletes the Calendar store with the given name. If this command is 
  1388. given from the Selected state, a currently selected Calendar cannot be 
  1389. deleted.
  1390.  
  1391. Example:
  1392.  
  1393. C: A001 DELETE Projects/Purple
  1394. S: A001 OK DELETE Completed.
  1395.  
  1396. 5.5. RENAME Command
  1397.  
  1398. Arguments:    Name of Calendar store to rename.
  1399.         New Calendar store name.
  1400.  
  1401. Data:        None.
  1402.  
  1403. Result:        OK - Calendar store renamed
  1404.         NO - Calendar store not renamed.
  1405.         BAD - Invalid arguments
  1406.  
  1407. Valid states:    Authenticated, Selected
  1408.  
  1409. The RENAME command changes the name of a Calendar store.  A 
  1410. tagged OK response is returned only if the Calendar has been renamed.  
  1411. It is an error to attempt to rename from a Calendar name that does not 
  1412. exist or to a Calendar name that already exists.  Any error in renaming 
  1413. will return a tagged NO response. 
  1414.  
  1415.  
  1416.  
  1417. Page  22                                                  Expires
  1418. 01/29/98
  1419.  
  1420.  
  1421. draft-oleary-icap-02.txt                                          07/29/97
  1422.  
  1423.  
  1424. If the hierarchy separator character appears in the new Calendar store 
  1425. name, the server SHOULD create any superior hierarchical names that 
  1426. are needed for the RENAME command to complete successfully. In 
  1427. other words, an attempt to rename a Calendar to "foo/bar/zap" on a 
  1428. server SHOULD create foo/ and foo/bar/ if they do not already exist.
  1429.  
  1430. Example:
  1431.  
  1432. C: A001 RENAME Projects/Purple Projects/Orange
  1433. S: A001 OK RENAME Completed.
  1434. C: A001 RENAME Projects/Green Completed/Green
  1435. S: A001 OK RENAME Completed.
  1436.  
  1437. 5.6. LIST Command
  1438.  
  1439. Arguments:    Store name with optional wildcard
  1440.  
  1441. Data:        Untagged responses: LIST
  1442.  
  1443. Result:        OK - List complete.
  1444.         NO - List failed, no stores found that match the given 
  1445. pattern.
  1446.         BAD - What did that pattern mean anyway?
  1447.  
  1448. Valid states:    Authenticated, Selected
  1449.  
  1450. The LIST command returns an untagged LIST response for each 
  1451. Calendar store that matches the given reference and store name. The 
  1452. "*" character is a wildcard and can be used only in the right-most 
  1453. position in the given store name. The "*" character matches any length 
  1454. string of valid Calendar Store name characters.
  1455.  
  1456. ICAP uses the "/" character to delimit levels of hierarchy: if the 
  1457. Calendar store name returned by the LIST command ends with a "/" 
  1458. character, then a level of hierarchy exists below that store name. If that
  1459.  
  1460. store name cannot be selected, the LIST response must include the 
  1461. \Noselect flag, as described below in the LIST response.
  1462.  
  1463. The server must hide all Calendar stores that the current user does not 
  1464. have access to. 
  1465.  
  1466. These reference names should be interpreted in the following manner:
  1467.  
  1468. * - all top-level Calendar stores accessible to the current user
  1469. <*> - all users accessible by the server
  1470. <> - the currently authenticated user
  1471.  
  1472. Examples:
  1473.  
  1474. C: A001 LIST <*>
  1475. S: * LIST () <Ann>
  1476. S: * LIST () <Bob>
  1477. S: * LIST () <Pete>
  1478. S: * LIST () <Fred>
  1479. C: A002 LIST <Ann>/*
  1480.  
  1481.  
  1482. Page  23                                                  Expires
  1483. 01/29/98
  1484.  
  1485.  
  1486. draft-oleary-icap-02.txt                                          07/29/97
  1487.  
  1488.  
  1489. S: * LIST () <Ann>/Project_1
  1490. S: * LIST () <Ann>/Project_2
  1491. S: A001 OK LIST Completed.
  1492.  
  1493. C: A001 LIST *
  1494. S: * LIST () Business
  1495. S: * LIST () Private
  1496. S: * LIST () CorporateEvents
  1497. S: * LIST (\Noselect) Projects/
  1498. S: A001 OK LIST Completed.
  1499. C: A002 LIST Projects/*
  1500. S: * LIST () Projects/ICAP_Spec
  1501. S: * LIST () "Projects/Vacation Plans"
  1502. S: A002 OK LIST Completed.
  1503.  
  1504. 5.7. LSUB Command
  1505.  
  1506. Arguments:    Store name with optional wildcard
  1507.  
  1508. Data:        Untagged responses: LIST
  1509.  
  1510. Result:        OK - List complete.
  1511.         NO - List failed, no stores found that match the given 
  1512. pattern.
  1513.         BAD - What did that pattern mean anyway?
  1514.  
  1515. Valid states:    Authenticated, Selected
  1516.  
  1517. The LSUB command is identical to the LIST command except that it 
  1518. returns Calendar names from those that the current user has subscribed 
  1519. to.
  1520.  
  1521. 5.8. SUBSCRIBE Command
  1522.  
  1523. Arguments:    Calendar name
  1524.  
  1525. Data:        None
  1526.  
  1527. Result:        OK - Subscribe complete.
  1528.         NO - Subscribe failed, no stores found that match 
  1529. name.
  1530.         BAD - Invalid arguments
  1531.  
  1532. Valid states:    Authenticated, Selected
  1533.  
  1534. The SUBSCRIBE command adds the given Calendar store name to the 
  1535. list of subscribed stores that will be returned by the LSUB command.
  1536.  
  1537. Example:
  1538.  
  1539. C: A001 SUBSCRIBE Corporate_Calendar/Barbecues
  1540. S: A001 OK SUBSCRIBE Completed.
  1541.  
  1542. 5.9. UNSUBSCRIBE Command
  1543.  
  1544.  
  1545.  
  1546. Page  24                                                  Expires
  1547. 01/29/98
  1548.  
  1549.  
  1550. draft-oleary-icap-02.txt                                          07/29/97
  1551.  
  1552.  
  1553. Arguments:    Calendar name
  1554.  
  1555. Data:        None
  1556.  
  1557. Result:        OK - Unsubscribe complete.
  1558.         NO - Unsubscribe failed, no stores found that match 
  1559. name.
  1560.         BAD - Invalid arguments
  1561.  
  1562. Valid states:    Authenticated, Selected
  1563.  
  1564. The UNSUBSCRIBE command removes the given Calendar store 
  1565. name from the list of subscribed stores that will be returned by the 
  1566. LSUB command.
  1567.  
  1568. Example:
  1569.  
  1570. C: A001 UNSUBSCRIBE <Corporate_Calendar>/Barbecues
  1571. S: A001 OK UNSUBSCRIBE Completed.
  1572.  
  1573. 5.10. APPEND Command
  1574.  
  1575. Arguments:    Calendar store name list or NIL for currently selected 
  1576. stores
  1577.         Flags list
  1578.         Calendar Object literal
  1579.  
  1580. Data:        None.
  1581.  
  1582. Result:        OK - Command completed
  1583.         NO - Command failed, no Objects were added to any 
  1584. calendar store
  1585.         BAD - Improperly formed command, invalid 
  1586. arguments, no Objects added
  1587.  
  1588. Valid states:    Authenticated, Selected
  1589.  
  1590. The APPEND command creates a new Calendar Object in the given 
  1591. Calendar Stores. If the destination Calendar Store does not exist, the 
  1592. server must return a NO response.
  1593.  
  1594. In the Selected state, a NIL atom may be given for the list of Calendar 
  1595. store names to operate on.
  1596.  
  1597. The server can send an optional untagged response for each user or 
  1598. calendar that is specified. The NO response can be used to indicate that 
  1599. the store failed in a certain user's calendar with a response code of 
  1600. "REFUSED" followed by the name of the calendar refusing. The 
  1601. server can optionally return a response code of "MAILTO" followed 
  1602. by the calendar name and a mail address that can accept an invitation 
  1603. request for the given calendar. The server may return OK responses for 
  1604. selected Calendars to indicate that the STORE completed successfully 
  1605. in that Calendar but that some special condition exists. The server may 
  1606. send a response code of "TENTATIVE" to indicate that a new 
  1607. Calendar Object was created marked as \Tentative. The server may 
  1608.  
  1609.  
  1610. Page  25                                                  Expires
  1611. 01/29/98
  1612.  
  1613.  
  1614. draft-oleary-icap-02.txt                                          07/29/97
  1615.  
  1616.  
  1617. send a response code of "SENT" to indicate that a meeting invitation 
  1618. was sent to the owner of the Calendar store.
  1619.  
  1620. The \StoreAll flag should be given when the client is creating a new 
  1621. Calendar Object and wants to guarantee that the Object will be created 
  1622. in all of the selected Calendar stores simultaneously. If the server 
  1623. cannot store to at least one of the selected Calendars, it must not store 
  1624. to any of them and must return a NO response indicating that the 
  1625. command failed. The server may still return untagged responses 
  1626. indicating which Calendar stores failed.
  1627.  
  1628. The \NoConflict should be given when the Object being appended to 
  1629. the Calendar Stores specified cannot have a time conflict with any 
  1630. Object on any of the Calendar Stores. If a time conflict exists, the 
  1631. server MUST return a NO response and MUST not modify any of the 
  1632. specified Calendar stores.
  1633.  
  1634. New Calendar Objects added to a Calendar store with the APPEND 
  1635. command MUST contain all required iCalendar properties. If a 
  1636. required property is missing the server MUST return a NO response 
  1637. and MUST not modify any of the specified Calendar stores.
  1638.  
  1639. Examples:
  1640.  
  1641. C: A001 APPEND Personal_Calendar () {88}
  1642. C: BEGIN: VCALENDAR
  1643. C: VERSION: 2.0
  1644. C: BEGIN: VEVENT
  1645. C: DTSTART: 19970606T140000-0800
  1646. C: DTEND: 19970606T150000-0800
  1647. C: DESCRIPTION: Meeting with Pete.
  1648. C: END: VEVENT
  1649. C: END: VCALENDAR
  1650. C:
  1651. S: A001 OK APPEND completed
  1652.  
  1653. C: A001 APPEND (<Ann> <Bob> <Fred>) (\Tentative) {88}
  1654. C: BEGIN: VCALENDAR
  1655. C: VERSION: 2.0
  1656. C: BEGIN: VEVENT
  1657. C: DTSTART: 19970606T140000-0800
  1658. C: DTEND: 19970606T150000-0800
  1659. C: DESCRIPTION: Meeting with Pete.
  1660. C: END: VEVENT
  1661. C: END: VCALENDAR
  1662. C:
  1663. S: A001 OK APPEND completed
  1664.  
  1665. 5.11. ATTRIBUTES Command
  1666.  
  1667. Arguments:    Calendar store name
  1668.         Name of attributes to fetch
  1669.  
  1670. Data:        Untagged FETCH response.
  1671.  
  1672.  
  1673.  
  1674. Page  26                                                  Expires
  1675. 01/29/98
  1676.  
  1677.  
  1678. draft-oleary-icap-02.txt                                          07/29/97
  1679.  
  1680.  
  1681. Result:        OK - ATTRIBUTES completed
  1682.         NO - ATTRIBUTES failed, no attributes were 
  1683. returned
  1684.         BAD - Improperly formed command, invalid 
  1685. arguments
  1686.  
  1687. Valid states:    Authenticated, Selected
  1688.  
  1689. The ATTRIBUTES command returns information about the specified 
  1690. Calendar store. This command is similar in operation to the FETCH 
  1691. command (see below) except that it acts on Calendar stores instead of 
  1692. the Objects in them.
  1693.  
  1694. The ATTRIBUTES command currently supports fetching the 
  1695. following attributes:
  1696.  
  1697. FLAGS            Returns the flags supported by this Calendar 
  1698. store, as when the store is selected
  1699. TYPE            Flags which represents this Calendar store's 
  1700. type. See below.
  1701. CSID            The unique identifier of this Calendar store.
  1702. COMPONENTS        An iCalendar object, see below
  1703. TIMEZONE        An iCalendar object containing a 
  1704. TIMEZONE Component, see below.
  1705.  
  1706. The TYPE flags currently supported are:
  1707.  
  1708. \Default        This container is a user's default Calendar store
  1709. \Resource    This container is actually owned by a resource.
  1710.  
  1711. The COMPONENTS attribute can be used by a client to determine 
  1712. which Calendar Components that can be stored within a Calendar 
  1713. Store, along with the names and types of the properties of those 
  1714. Calendar Components. The server MUST return an iCalendar object 
  1715. which contains a "model" of all the Components the Calendar Store 
  1716. supports. The "model" Components MUST contain all of the properties 
  1717. that the Component can store. The Properties should specify a VALUE 
  1718. property parameter that identifies the data-type of the property. The 
  1719. property value MUST be an null string.
  1720.  
  1721. The server does not have to return a TIMEZONE Component to 
  1722. indicate that this Component is supported. The server MUST return an 
  1723. ALARM Component if this Component is supported.
  1724.  
  1725. The TIMEZONE attribute can be used by the client to determine time 
  1726. zone information about a specific Calendar Store. The server can return 
  1727. an Object containing zero or more TIMEZONE Components. If no 
  1728. TIMEZONE Components are returned, then every object fetched from 
  1729. the Calendar Store MUST contain at least one TIMEZONE 
  1730. Component. If one or more TIMEZONE Components are returned, 
  1731. then those Components apply to every Object fetched from the 
  1732. Calendar Store. The client MUST NOT expect to be able to store an 
  1733. Object that contains a TIMEZONE Component other than those 
  1734. returned by this attribute.
  1735.  
  1736.  
  1737.  
  1738. Page  27                                                  Expires
  1739. 01/29/98
  1740.  
  1741.  
  1742. draft-oleary-icap-02.txt                                          07/29/97
  1743.  
  1744.  
  1745. Examples:
  1746.  
  1747. C: A001 ATTRIBUTES <Pete> (FLAGS TYPE CSID)
  1748. S: * FETCH (FLAGS (\Deleted \Seen \Recent) TYPE \Default CSID 
  1749. 1234123412341234)
  1750. S: A001 OK ATTRIBUTES Completed.
  1751.  
  1752. In the above example, the client queries the server for the flags 
  1753. supported by the specified Calendar Store, the Calendar Store type and 
  1754. its UID.
  1755.  
  1756. C: A001 ATTRIBUTES <Pete> COMPONENTS
  1757. S: * FETCH COMPONENTS {200}
  1758. S: BEGIN: VCALENDAR
  1759. S: VERSION: 2.0
  1760. S: BEGIN: VEVENT
  1761. S: ATTACH; VALUE=URL:
  1762. S: DESCRIPTION; VALUE=TEXT:
  1763. S: DTSTART; VALUE=DATE-TIME:
  1764. S: DTEND; VALUE=DATE-TIME:
  1765. S: SUMMARY; VALUE=TEXT:
  1766. S: STATUS:
  1767. S: UID:
  1768. S: X-BILLING_CODE, VALUE=INTEGER:
  1769. S: X-CLIENT_NAME; VALUE=TEXT:
  1770. S: END: VEVENT
  1771. S: END: VCALENDAR
  1772. S: A001 OK ATTRIBUTES Completed.
  1773.  
  1774. In the above example, the client queries the server for the type of 
  1775. Components supported by the Calendar Store. The server returns an 
  1776. Object which specifies that only Event Components can be stored in 
  1777. the Calendar Store. The Event Components can store the required 
  1778. Event Component properties, plus the standard properties ATTACH, 
  1779. SUMMARY, STATUS and UID. Also, the non-standard properties X-
  1780. BILLING_CODE and X-CLIENT_NAME can be stored. This appears 
  1781. to be a lawyer's calendar.
  1782.  
  1783. 5.12. FREEBUSY Command
  1784.  
  1785. Arguments:    Calendar store name list or NIL for currently selected 
  1786. stores
  1787. Start of search range in ISO8601 format
  1788.         End of search range in ISO8601 format
  1789.  
  1790. Data:        Mandatory untagged response: FETCH
  1791.  
  1792. Result:        OK - Command completed
  1793.         NO - Command failed, no freetime found
  1794.         BAD - Improperly formed command, invalid 
  1795. arguments
  1796.  
  1797. Valid states:    Authenticated, Selected
  1798.  
  1799. The FREEBUSY command searches the currently selected Calendars, 
  1800.  
  1801.  
  1802. Page  28                                                  Expires
  1803. 01/29/98
  1804.  
  1805.  
  1806. draft-oleary-icap-02.txt                                          07/29/97
  1807.  
  1808.  
  1809. bounded by a start and end time, and returns a list of intervals during 
  1810. which an event of the given length of time can be scheduled. See below 
  1811. under "Example Sessions" for and example of the use of the 
  1812. FREEBUSY command.
  1813.  
  1814. As is the case in the RANGE command, the start time given is included 
  1815. in the search range of the FREEBUSY command and the end time is 
  1816. excluded.
  1817.  
  1818. In the Selected state, a NIL atom may be given for the list of Calendar 
  1819. store names to operate on.
  1820.  
  1821. The freetime data is returned in an untagged FETCH response in 
  1822. iCalendar FREEBUSY format. The FETCH attribute CSNAME must 
  1823. be returned along with the FETCH response if more than one Calendar 
  1824. Store name was specified. An ATTENDEE property within the 
  1825. FREEBUSY object return may also contain the name of the person 
  1826. corresponding to the FREEBUSY FETCH result. If every FREEBUSY 
  1827. component within the FETCH responses returned by the command 
  1828. contains an ATTENDEE property, then CSNAME is not required. The 
  1829. DTSTART and DTEND properties of the FREEBUSY object MUST 
  1830. match the start and end dates specified.
  1831.  
  1832. Example:
  1833.  
  1834. C: A001 FREEBUSY (<Ann> <Bob>) 19970930T0900-0700 
  1835. 19970930T1700-0700
  1836. S: * 1 FETCH (CSNAME <Ann> ICAL {88}
  1837. S: BEGIN: VCALENDAR
  1838. S: VERSION: 2.0
  1839. S: BEGIN: VFREEBUSY
  1840. S: ATTENDEE: Ann
  1841. S: DTSTART: 19970930T0900-0700
  1842. S: DTEND: 19970930T1700-0700
  1843. S: FREEBUSY; VALUE=PERIOD-START: 19970930T1000-
  1844. 0700/PT1H, 19970930T1200-0700/PT1H
  1845. S: END: VFREEBUSY
  1846. S: END: VCALENDAR
  1847. S: )
  1848. S: A001 OK FREEBUSY
  1849.  
  1850. In the example above, only two busy periods were found for the given 
  1851. time range: Ann is busy from 10 to 11 on 19970903 and also busy from 
  1852. 12 to 1 o'clock on the same day.
  1853.  
  1854. 6. ICAP Commands - Selected State
  1855.  
  1856. 6.1. CLOSE Command
  1857.  
  1858. Arguments:    Optional name of user and or Calendar store.
  1859.  
  1860. Data:        Optional untagged EXISTS response.
  1861.  
  1862. Result:        OK - Command completed successfully
  1863.         NO - Calendar name or user is not selected.
  1864.  
  1865.  
  1866. Page  29                                                  Expires
  1867. 01/29/98
  1868.  
  1869.  
  1870. draft-oleary-icap-02.txt                                          07/29/97
  1871.  
  1872.  
  1873.         BAD - Invalid argument, calendar name is invalid
  1874.  
  1875. The CLOSE closes the currently selected Calendar store or one of the 
  1876. Calendar stores currently selected. When no parameter is supplied, all 
  1877. currently selected Calendars are closed. When a parameter is supplied, 
  1878. it should be of the same form for Calendar names given in the SELECT 
  1879. command. If the user has not previously issued a SELECT command 
  1880. with the exact name given in the CLOSE command, a NO response is 
  1881. returned.
  1882.  
  1883. Examples:
  1884.  
  1885. C: A001 CLOSE
  1886. S: A001 OK CLOSE Completed.
  1887.  
  1888. C: A001 CLOSE <Bob>
  1889. S: * 11 EXISTS
  1890. S: A001 CLOSE Completed.
  1891.  
  1892. 6.2. RANGE Command
  1893.  
  1894. Arguments:    Start date/time in ISO8601 format or wildcard 
  1895. character.
  1896.         End date/time in ISO8601 format or wildcard 
  1897. character.
  1898.  
  1899. Data:        Mandatory untagged responses: EXISTS
  1900.  
  1901. Result:        OK - Command completed successfully, date range 
  1902. has been set
  1903.         NO - An error occurred while setting the date range
  1904.         BAD -  Bad date format
  1905.  
  1906. The RANGE command sets a date/time range for the currently selected 
  1907. Calendars and returns a EXISTS response with the number of items in 
  1908. the range.
  1909.  
  1910. Either the start time or end time can be replaced with the wildcard 
  1911. character "*" in which case lower or upper bound, respectively, is 
  1912. placed on the current date range.
  1913.  
  1914. The start time given must be included in the range. The end time given 
  1915. must be excluded from the range.
  1916.  
  1917. If any Object in the selected Calendar store contains a set of recurrence 
  1918. rules that resolve to dates within the specified date range, then that 
  1919. Object MUST appear once for each date resolved within the specified 
  1920. range. In other words, an Object may count for more than one Object in 
  1921. the EXISTS response returned by the RANGE command if it is a 
  1922. recurring Object.
  1923.  
  1924. Example:
  1925.  
  1926. C: A001 RANGE 19971230T0900-0500 19971230T1700-0500
  1927. S: * 9 EXISTS
  1928.  
  1929.  
  1930. Page  30                                                  Expires
  1931. 01/29/98
  1932.  
  1933.  
  1934. draft-oleary-icap-02.txt                                          07/29/97
  1935.  
  1936.  
  1937. S: A001 OK RANGE
  1938.  
  1939. The above example selects all Calendar Objects from 0900 to 1700 on 
  1940. 1997 December 30 in New York.
  1941.  
  1942. C: A001 RANGE 19970730-0700 19970731-0700
  1943. S: * 12 EXISTS
  1944. S: A001 OK RANGE
  1945.  
  1946. The above example selects all Calendar Objects on 1997 July 30 in San 
  1947. Francisco. 
  1948.  
  1949. C: A001 RANGE 19970101-0700 19980101-0700
  1950. S: * 56 EXISTS
  1951. S: A001 OK RANGE
  1952.  
  1953. The above example selects all Calendar Objects in 1997 Denver time.
  1954.  
  1955. 6.3. CHECK Command
  1956.  
  1957. Arguments:    None 
  1958.  
  1959. Data:        None.
  1960.  
  1961. Result:        OK - Command completed
  1962.         NO - Command failed
  1963.         BAD - Improperly formed command, invalid 
  1964. arguments
  1965.  
  1966. An ICAP server given the CHECK command should perform any 
  1967. housekeeping operations that ensure the integrity of the currently 
  1968. selected Calendar stores. It is expected that the CHECK command may 
  1969. take some time to complete.
  1970.  
  1971. Example:
  1972.  
  1973. C: A001 CHECK
  1974. S: A001 OK CHECK
  1975.  
  1976. 6.4. EXPUNGE Command
  1977.  
  1978. Arguments:    None
  1979.  
  1980. Data:        Mandatory untagged response: EXPUNGE
  1981.  
  1982. Result:        OK - Command completed
  1983.         NO - Command failed, no items were removed
  1984.         BAD - Improperly formed command, no items were 
  1985. removed
  1986.  
  1987. The EXPUNGE command permanently removes from the currently 
  1988. selected Calendar stores all Objects that have the \Deleted flag set. 
  1989. Before returning an OK to the client, an untagged EXPUNGE response 
  1990. is sent for each Object that is removed.
  1991.  
  1992.  
  1993.  
  1994. Page  31                                                  Expires
  1995. 01/29/98
  1996.  
  1997.  
  1998. draft-oleary-icap-02.txt                                          07/29/97
  1999.  
  2000.  
  2001. Example:
  2002.  
  2003. C: A001 EXPUNGE
  2004. S: * 3 EXPUNGE
  2005. S: * 3 EXPUNGE
  2006. S: * 5 EXPUNGE
  2007. S: * 8 EXPUNGE
  2008. S: A001 OK EXPUNGE completed
  2009.  
  2010. Note: in this example, Objects 3, 4, 7, and 11 had the \Deleted flag set. 
  2011.  
  2012. See the description of the EXPUNGE response for further explanation.
  2013.  
  2014. 6.5. FETCH Command
  2015.  
  2016. Arguments:    Set of calendar Objects to fetch.
  2017.         Item names.
  2018.  
  2019. Data:        Untagged responses: FETCH
  2020.  
  2021. Result:        OK - fetch completed
  2022.         NO - fetch error, no items were fetched
  2023.         BAD - command unknown or invalid arguments
  2024.  
  2025. Fetches for all the specified calendar Objects the data specified using 
  2026. the following item names:
  2027.  
  2028. FLAGS            The flags associated with this calendar 
  2029. Object
  2030. ICAL            iCalendar object format.
  2031. ICAL.SIZE        The size of the iCalendar iCalendar, in 
  2032. octets.
  2033. ICAL.REQUIRED    Only required iCalendar attribute 
  2034. information in iCalendar format.
  2035. ICAL.BRIEF        Only DTSTART, DTEND and SUMMARY 
  2036. attributes in iCalendar format.
  2037. UID            The unique ID of the calendar Object (the 
  2038. COID).
  2039. CSID            The unique ID of the Calendar Store that 
  2040. contains the fetched Object.
  2041. CSNAME        The name of the Calendar Store that 
  2042. contains the fetched Object.    
  2043.  
  2044. Note that items returned by FETCH should always be returned in 
  2045. ascending chronological order, even when multiple Calendar stores are 
  2046. selected.
  2047.  
  2048. Example:
  2049.  
  2050. C: A001 FETCH 1 FLAGS
  2051. S: * 1 FETCH FLAGS  (\Deleted \Seen)
  2052. S: A001 OK FETCH
  2053.  
  2054. C: A001 FETCH 1 (FLAGS ICAL.REQUIRED)
  2055. S: * 1 FETCH (FLAGS  (\Deleted \Seen) ICAL.REQUIRED {96}
  2056. S: BEGIN: VCALENDAR
  2057.  
  2058.  
  2059. Page  32                                                  Expires
  2060. 01/29/98
  2061.  
  2062.  
  2063. draft-oleary-icap-02.txt                                          07/29/97
  2064.  
  2065.  
  2066. S: VERSION: 2.0
  2067. S: BEGIN: VEVENT
  2068. S: DTBEGIN: 19970701T0300Z
  2069. S: DTEND: 19970701T0400Z
  2070. S: DESCRIPTION: Test meeting
  2071. S: END: VEVENT
  2072. S: END: VCALENDAR
  2073. S: )
  2074. S: A001 OK FETCH
  2075.  
  2076. C: A001 FETCH 1:4 UID
  2077. S: * 1 FETCH UID 1234123412341234
  2078. S: * 2 FETCH UID 5678567856785678
  2079. S: * 3 FETCH UID 2345234523452345
  2080. S: * 4 FETCH UID abcdabcdabcdabcd
  2081. S: A001 OK FETCH
  2082.  
  2083. 6.6. STORE Command
  2084.  
  2085. Arguments:    Calendar Object set
  2086.         Calendar Object data item name
  2087.         Calendar Object data item value
  2088.  
  2089. Data:        None.
  2090.  
  2091. Result:        OK - Command completed
  2092.         NO - Command failed, no Objects were added to any 
  2093. calendar store
  2094.         BAD - Improperly formed command, invalid 
  2095. arguments, no Objects added
  2096.  
  2097. Calendar data items:
  2098.  
  2099. +FLAGS
  2100.  
  2101. Set the flag list of the given Calendar Objects. In the STORE 
  2102. command, one additional flag can be given: \StoreAll. See below for 
  2103. the use of this flag.
  2104.  
  2105. -FLAGS
  2106.  
  2107. Remove the flag argument from the flags of the given Calendar 
  2108. Objects.
  2109.  
  2110. ICAL
  2111.  
  2112. Updates the iCalendar data associated with this Calendar Object. When 
  2113. this form of the STORE command is used, the Calendar data item must 
  2114. be supplied as a literal. The data must be a iCalendar object.
  2115.  
  2116. If a value of "0" is given for the Calendar Object set, then a new Object 
  2117. is created. This functionality is similar to performing an APPEND 
  2118. command except that it allows the client to check the availability of the 
  2119. Calendar stores before attempting to create new Objects. If there is 
  2120. more than one Calendar store selected in the given Selected object, 
  2121.  
  2122.  
  2123. Page  33                                                  Expires
  2124. 01/29/98
  2125.  
  2126.  
  2127. draft-oleary-icap-02.txt                                          07/29/97
  2128.  
  2129.  
  2130. then the STORE command will add the new Object to all of the 
  2131. Calendar stores. This will cause the EXISTS count for the current 
  2132. selection to increase by 1 for each currently selected Calendar store.
  2133.  
  2134. The server can send an optional untagged response for each user or 
  2135. calendar that is currently selected. The NO response can be used to 
  2136. indicate that the store failed in a certain user's calendar with a response
  2137.  
  2138. code of "REFUSED" followed by the name of the calendar refusing. 
  2139. The server can optionally return a response code of "MAILTO" 
  2140. followed by the calendar name and a mail address that can accept an 
  2141. invitation request for the given calendar. See the example below. The 
  2142. server may return OK responses for selected Calendars to indicate that 
  2143. the STORE completed successfully in that Calendar but that some 
  2144. special condition exists. The server may send a response code of 
  2145. "TENTATIVE" to indicate that a new Calendar Object was created 
  2146. marked as \Tentative. The server may send a response code of "SENT" 
  2147. to indicate that a meeting invitation was sent to the owner of the 
  2148. Calendar store. In the case of a "TENTATIVE" response from the 
  2149. server, the EXISTS count for the selected Calendars MUST be 
  2150. increased. When a SENT response is given, the EXISTS count MUST 
  2151. NOT be increased.
  2152.  
  2153. The \NoConflict should be given when the Object being appended to 
  2154. the Calendar Stores selected cannot have a time conflict with any 
  2155. Object on any of the Calendar Stores. If a time conflict exists, the 
  2156. server MUST return a NO response and MUST not modify any of the 
  2157. selected Calendar stores.
  2158.  
  2159. The \StoreAll flag should be given when the client is creating a new 
  2160. Calendar Object and wants to guarantee that the Object will be created 
  2161. in all of the selected Calendar stores simultaneously. If the server 
  2162. cannot store to at least one of the selected Calendars, it must not store 
  2163. to any of them and must return a NO response indicating that the 
  2164. command failed. The server may still return untagged responses 
  2165. indicating which Calendar stores failed.
  2166.  
  2167. New Calendar Objects added to a Calendar store must contain all 
  2168. required iCalendar properties. Updates to existing Calendar Objects 
  2169. need only contain the actual data to be updated. Duplicate attributes 
  2170. names are not allowed, whenever a value is given for a attribute name 
  2171. that already exists, the new value replaces the old value. If the new 
  2172. value is a null string (""), {0} or a CRLF immediately following the 
  2173. ":") then the old attribute is deleted.
  2174.  
  2175. In this first example, the users is creating a new Object in their own 
  2176. calendar. The operation succeeds:
  2177.  
  2178. C: A001 STORE 0 (+FLAGS \Repeating ICAL {102}
  2179. C: BEGIN: VCALENDAR
  2180. C: VERSION: 2.0
  2181. C: BEGIN: VEVENT
  2182. C: DTSTART: 19970606T140000-0800
  2183. C: DTEND: 19970606T150000-0800
  2184. C: DESCRIPTION: Meeting with Pete.
  2185. C: END: VEVENT
  2186.  
  2187.  
  2188. Page  34                                                  Expires
  2189. 01/29/98
  2190.  
  2191.  
  2192. draft-oleary-icap-02.txt                                          07/29/97
  2193.  
  2194.  
  2195. C: END: VCALENDAR
  2196. C: )
  2197. S: A001 OK STORE completed
  2198.  
  2199. In the following example, the user has two default Calendar stores 
  2200. selected, one for <Alice>, one for <Bruce> and one for <Cindy>. The 
  2201. client attempts to schedule a meeting in all Calendars by using the 
  2202. STORE command. <Alice> refuses, <Bruce> requests a meeting 
  2203. invitation be sent and <Cindy> accepts. Note that the terms "accept" 
  2204. and "refuse" to not imply an intervention on the part of a real person: 
  2205. whether the server accepts or refuses a STORE request should be based 
  2206. on access control.
  2207.  
  2208. C: A001 STORE 0 ICAL {102}
  2209. C: BEGIN: VCALENDAR
  2210. C: BEGIN: VEVENT
  2211. C: VERSION: 2.0
  2212. C: DTSTART: 19970606T140000-0700
  2213. C: DTEND: 19970606T150000-0700
  2214. C: DESCRIPTION: Meeting with Pete.
  2215. C: END: VEVENT
  2216. C: END: VCALENDAR
  2217. C:
  2218. S: * NO [REFUSED <Alice>] Alice doesn't like you.
  2219. S: * NO [MAILTO <Bruce> <Bruce@Iris.com>] Please send me a 
  2220. meeting invitation.
  2221. S: A001 OK STORE completed
  2222.  
  2223. The following sequence modifies Calendar Object number 23 with a 
  2224. new start and end date/time.
  2225.  
  2226. C: A001 STORE 23 ICAL {102}
  2227. C: BEGIN: VCALENDAR
  2228. C: VERSION: 2.0
  2229. C: BEGIN: VEVENT
  2230. C: DTSTART: 19970606T140000-0600
  2231. C: DTEND: 19970606T150000-0600
  2232. C: END: VEVENT
  2233. C: END: VCALENDAR
  2234. C:
  2235. S: A001 OK STORE completed
  2236.  
  2237. 6.7. COPY Command
  2238. 6.8. MOVE Command
  2239.  
  2240. Arguments:    Calendar Object set
  2241.         Name of Calendar to move or copy to
  2242.  
  2243. Data:        None.
  2244.  
  2245. Result:        OK - Calendar Objects moved.
  2246.         NO - Calendar Objects not moved.
  2247.         BAD - Bad date format given.
  2248.  
  2249. COPY and MOVE transfer a given set of Objects to a different 
  2250.  
  2251.  
  2252. Page  35                                                  Expires
  2253. 01/29/98
  2254.  
  2255.  
  2256. draft-oleary-icap-02.txt                                          07/29/97
  2257.  
  2258.  
  2259. Calendar store. In the case of the MOVE command, the Objects are 
  2260. removed from the current Calendar. MOVE must fail if the user does 
  2261. not have permission to remove an Object from the selected Calendar.
  2262.  
  2263. The Calendar store to move or copy to MUST exist before the 
  2264. operation is initiated.
  2265.  
  2266. Example:
  2267.  
  2268. C: A001 COPY 1 Section1
  2269. S: A001 OK COPY Completed.
  2270.  
  2271. 6.9. UID Command
  2272.  
  2273. Arguments:    Command
  2274.  
  2275. Data:        Untagged responses: FETCH, SEARCH.
  2276.  
  2277. Result:        OK - UID command completed.
  2278.         NO - UID command failed.
  2279.         BAD - Invalid command or UID given.
  2280.  
  2281. In its first form the UID command takes a COPY, MOVE, FETCH or 
  2282. STORE command as its arguments. These commands are processed as 
  2283. usual, except that unique ID's must be given instead of Object 
  2284. numbers.
  2285.  
  2286. In the second form, the UID command takes a SEARCH command 
  2287. with SEARCH command arguments. The interpretation of the 
  2288. arguments is the same as with SEARCH; however, the numbers 
  2289. returned in a SEARCH response for a UID SEARCH command are 
  2290. unique identifiers instead of sequence numbers.
  2291.  
  2292. The number after the "*" in an untagged FETCH response is always a 
  2293. sequence number, not a unique identifier, even for a UID command 
  2294. response.  However, server implementations MUST implicitly include 
  2295. the UID data item as part of any FETCH response caused by a UID 
  2296. command, regardless of whether UID was specified as a data item to 
  2297. the FETCH.
  2298.  
  2299. Example:
  2300.  
  2301. C: A001 UID FETCH 1234123412341234 (FLAGS 
  2302. ICAL.REQUIRED)
  2303. S: * 12 FETCH (UID 1234123412341234 FLAGS  (\Deleted \Seen) 
  2304. ICAL.REQUIRED {96}
  2305. S: BEGIN: VCALENDAR
  2306. S: VERSION: 2.0
  2307. S: BEGIN: VEVENT
  2308. S: DTBEGIN: 19970701T0300Z
  2309. S: DTEND: 19970701T0400Z
  2310. S: DESCRIPTION: Test meeting
  2311. S: END: VEVENT
  2312. S: END: VCALENDAR
  2313. S: )
  2314.  
  2315.  
  2316. Page  36                                                  Expires
  2317. 01/29/98
  2318.  
  2319.  
  2320. draft-oleary-icap-02.txt                                          07/29/97
  2321.  
  2322.  
  2323. S: A001 OK UID FETCH
  2324.  
  2325. 6.10. SEARCH Command
  2326.  
  2327. Arguments:    One or more search criteria
  2328.  
  2329. Data:        Untagged responses: SEARCH.
  2330.  
  2331. Result:        OK - search completed.
  2332.         NO - search error: can't search that criteria.
  2333.         BAD - command unknown or invalid arguments.
  2334.  
  2335. The SEARCH command searches the Calendar store for Objects that 
  2336. match the given searching criteria.  Searching criteria consist of one or 
  2337. more search keys.  The untagged SEARCH response from the server 
  2338. contains a listing of Object numbers corresponding to those Objects 
  2339. that match the searching criteria.
  2340.  
  2341. When multiple keys are specified, the result is the intersection (AND 
  2342. function) of all the messages that match those keys. A search key can 
  2343. also be a parenthesized list of one or more search keys (e.g. for use 
  2344. with the OR and NO keys).
  2345.  
  2346. <Object set>  Objects with sequence numbers corresponding to the 
  2347. specified message sequence number set
  2348.  
  2349. ALL
  2350. All Objects in the mailbox; the default initial key for ANDing.
  2351.  
  2352. COMPONENT <component_name>
  2353. Objects which contain at least one of the specified Components. Valid 
  2354. Components are: VEVENT, VTODO, VJOURNAL, VALARM. Note 
  2355. that Objects which have a VALARM Component embedded anywhere 
  2356. within them MUST match this key.
  2357.  
  2358. DELETED
  2359. Objects with the \Deleted flag set.
  2360.  
  2361. NEW
  2362. Objects that have the \Recent flag set but not the \Seen flag.  This is 
  2363. functionally equivalent to "(RECENT UNSEEN)".
  2364.  
  2365. NOT <search-key>
  2366. Objects that do not match the specified search key.
  2367.  
  2368. OR <search-key1> <search-key2>
  2369. Objects that match either search key.
  2370.  
  2371. RECENT
  2372. Objects that have the \Recent flag set.
  2373.  
  2374. SEEN
  2375. Objects that have the \Seen flag set.
  2376.  
  2377. TENTATIVE
  2378.  
  2379.  
  2380. Page  37                                                  Expires
  2381. 01/29/98
  2382.  
  2383.  
  2384. draft-oleary-icap-02.txt                                          07/29/97
  2385.  
  2386.  
  2387. Objects that have the \Tentative flag set.
  2388.  
  2389. UID <message set>
  2390. Objects with unique identifiers corresponding to the specified unique 
  2391. identifier set.
  2392.  
  2393. UNDELETED
  2394. Objects that do not have the \Deleted flag set.
  2395.  
  2396. UNSEEN
  2397. Objects that do not have the \Seen flag set.
  2398.  
  2399. ICAL <property name> <comparison operator> < property value>
  2400. Objects where the specified comparison operation is true.
  2401.  
  2402. The valid comparison operators are:
  2403.  
  2404. "="        Equals. True if the given property matches the given 
  2405. property value. String values are assumed to be case insensitive. Valid 
  2406. for all property types.
  2407.  
  2408. "contains"    Valid only for type TEXT, RFC822-ADDRESS and 
  2409. URL. True if the given value is a substring of the given property. 
  2410. String values are assumed to be case insensitive.
  2411.  
  2412. ">"        Greater than. True if the given property is greater 
  2413. than the given property value. Valid only for the property types DATE, 
  2414. TIME, DATE-TIME, PERIOD, DURATION, INTEGER, FLOAT and 
  2415. UTC-OFFSET.
  2416.  
  2417. "<"        Less than. True if the given property is less than the 
  2418. given property value. Valid only for the property types DATE, TIME, 
  2419. DATE-TIME, PERIOD, DURATION, INTEGER, FLOAT and UTC-
  2420. OFFSET.
  2421.  
  2422. The comparison value is assumed to have the same type as the 
  2423. specified Object property. The Object property type can be queried 
  2424. using the ATTRIBUTES command. If the property value specified in 
  2425. the comparison operation cannot be readily converted to the Object 
  2426. property type, the comparison operation is false.
  2427.  
  2428. Comparisons of DATE and DATE-TIME values are valid only under 
  2429. the following conditions. If the currently selected Calendar Store 
  2430. contains Object having different Time Zone information, as described 
  2431. in the section titled "Calendar Stores" above, then all comparison 
  2432. values for DATE and DATE-TIME types MUST be either UTC values 
  2433. or be convertible to UTC. Only Calendar Stores whose objects fall 
  2434. within the same Time Zone information may perform comparisons 
  2435. based on local time values.
  2436.  
  2437. DATE-TIME values which contain only a date component (e.g. 
  2438. 19970106-0700) MUST match any DATE-TIME which falls on the 
  2439. given date when used with the "=" operator.
  2440.  
  2441. If multiple properties with the same property name exist within the 
  2442.  
  2443.  
  2444. Page  38                                                  Expires
  2445. 01/29/98
  2446.  
  2447.  
  2448. draft-oleary-icap-02.txt                                          07/29/97
  2449.  
  2450.  
  2451. same Object, the comparison operator is true if ANY of the properties 
  2452. meet the specified criteria. If multiple properties with different property
  2453.  
  2454. types exist within an object, the result of the SEARCH operation is 
  2455. undefined.
  2456.  
  2457. If a COMPONENT key is specified, a property name given in an ICAL 
  2458. search request is assumed to refer to a field within any specified 
  2459. COMPONENT.
  2460.  
  2461. Examples:
  2462.  
  2463. C: A001 SEARCH 1:20 ICAL DUE = 19971001-0800
  2464. S: * SEARCH 4 9 12 19
  2465. S: A001 OK SEARCH Completed.
  2466.  
  2467. C: A001 SEARCH UNSEEN ICAL PRIORITY > 3
  2468. S: * SEARCH 3 12 45
  2469. S: A001 OK SEARCH Competed.
  2470.  
  2471. C: A001 SEARCH ICAL PRIORITY > 3 ICAL DUE < 19971112-
  2472. 0700
  2473. S: * SEARCH 3 45
  2474. S: A001 OK SEARCH Competed.
  2475.  
  2476. C: A001 SEARCH COMPONENT VALARM ICAL DTSTART = 
  2477. 19970808-0700
  2478. S: * SEARCH 14 18 19
  2479. S: A001 OK SEARCH Competed.
  2480.  
  2481. The above SEARCH operation finds all of the Objects which contain 
  2482. an alarm set to go off on August 8th of 1997 in the Pacific Time Zone.
  2483.  
  2484. 7. Server Responses
  2485.  
  2486. Server responses are in three forms: status responses, server data, and 
  2487. command continuation request.
  2488.  
  2489. The client MUST be prepared to accept any response at all times.
  2490.  
  2491. Status responses that are tagged indicate the completion result of a 
  2492. client command, and have a tag matching the command.
  2493.  
  2494. Some status responses, and all server data, are untagged.  An untagged 
  2495. response is indicated by the token "*" instead of a tag. Untagged status 
  2496. responses indicate server greeting, or server status that does not 
  2497. indicate the completion of a command.  For historical reasons, 
  2498. untagged server data responses are also called "unsolicited data", 
  2499. although strictly speaking only unilateral server data is truly 
  2500. "unsolicited".
  2501.  
  2502. Certain server data MUST be recorded by the client when it is 
  2503. received; this is noted in the description of that data.  Such data 
  2504. conveys critical information which affects the interpretation of all 
  2505. subsequent commands and responses (e.g. updates reflecting the 
  2506. creation or destruction of Calendar Objects).
  2507.  
  2508.  
  2509. Page  39                                                  Expires
  2510. 01/29/98
  2511.  
  2512.  
  2513. draft-oleary-icap-02.txt                                          07/29/97
  2514.  
  2515.  
  2516.  
  2517. Other server data SHOULD be recorded for later reference; if the client 
  2518. does not need to record the data, or if recording the data has no obvious 
  2519. purpose (e.g. a SEARCH response when no SEARCH command is in 
  2520. progress), the data SHOULD be ignored.
  2521.  
  2522. Command continuation request responses use the token "+" instead of a 
  2523. tag.  These responses are sent by the server to indicate acceptance of an 
  2524. incomplete client command and readiness for the remainder of the 
  2525. command.
  2526.  
  2527. 7.1.    Server Responses - Status Responses
  2528.  
  2529. Status responses MAY include an OPTIONAL response code.  A 
  2530. response  code consists of data inside square brackets in the form of an 
  2531. atom, possibly followed by a space and arguments.  The response code 
  2532. contains additional information or status codes for client software 
  2533. beyond the OK/NO/BAD condition, and are defined when there is a 
  2534. specific action that a client can take based upon the additional 
  2535. information.
  2536.  
  2537. The currently defined response codes are:
  2538.  
  2539. ALERT    - The human-readable text contains a special alert that MUST 
  2540. be presented to the user in a fashion that calls the user's attention to
  2541. the 
  2542. message.
  2543.  
  2544. PERMANENTFLAGS - Followed by a parenthesized list of flags, 
  2545. indicates which of the known flags that the client can change 
  2546. permanently.  Any flags that are in the FLAGS untagged response, but 
  2547. not the PERMANENTFLAGS list, can not be set permanently.  If the 
  2548. client attempts to STORE a flag that is not in the 
  2549. PERMANENTFLAGS list, the server will either reject it with a NO 
  2550. reply or store the state for the remainder of the current session only.
  2551.  
  2552. MAILTO - Returned from a STORE or APPEND command to indicate 
  2553. that an specific user requests Meeting Invitations to be sent to them via 
  2554. SMTP mail. Returned with NO response only.
  2555.  
  2556. READ-ONLY - The Calendar is selected read-only, or its access while 
  2557. selected has changed from read-write to read-only.
  2558.  
  2559. READ-WRITE - The Calendar is selected read-write, or its access 
  2560. while selected has changed from read-only to read-write.
  2561.  
  2562. REFUSED - Returned from a STORE or APPEND command to 
  2563. indicate that an specific user does not allow scheduling requests from 
  2564. other users. Returned with NO response only.
  2565.  
  2566. SENT - Returned from a STORE or APPEND command to indicate 
  2567. that a meeting invitation was sent by the server via e-mail rather than 
  2568. creating an Object in a user's Calendar.
  2569.  
  2570. TENTATIVE - Returned from a STORE or APPEND command to 
  2571. indicate that a Calendar Object marked as \Tentative was created in the 
  2572.  
  2573.  
  2574. Page  40                                                  Expires
  2575. 01/29/98
  2576.  
  2577.  
  2578. draft-oleary-icap-02.txt                                          07/29/97
  2579.  
  2580.  
  2581. specified users Calendar.
  2582.  
  2583. Additional response codes defined by particular client or server 
  2584. implementations SHOULD be prefixed with an "X-" until they are 
  2585. added to a revision of this protocol.  Client implementations SHOULD 
  2586. ignore response codes that they do not recognize.
  2587.  
  2588. 7.1.1. OK Response
  2589. 7.1.2. NO Response
  2590. 7.1.3. BAD Response
  2591.  
  2592. Data:    Optional response code
  2593. Optional human-readable text.
  2594.  
  2595. The OK, NO and BAD responses are intended to give the client 
  2596. information about a command's completion status or information about 
  2597. the operation of the server. When given in a tagged response, these 
  2598. responses indicates completion of the command with the associated 
  2599. tag. Untagged responses of this kind are always informational 
  2600. messages. In both cases, a message based on the response code and text 
  2601. MAY be presented to the user.
  2602.  
  2603. The untagged form is also used as one of three possible greetings 
  2604. (along with PREAUTH and BYE) at session startup.  It indicates that 
  2605. the session is not yet authenticated and that a LOGIN command is 
  2606. needed.
  2607.  
  2608. Examples of the OK, NO and BAD response can be found within many 
  2609. of the examples given above.
  2610.  
  2611. 7.1.4. PREAUTH Response
  2612.  
  2613. Data:    Optional response code
  2614. Human-readable text.
  2615.  
  2616. The PREAUTH response is always untagged, and is one of three 
  2617. possible greetings (along with OK and BYE) at session startup.  It 
  2618. indicates that the session has already been authenticated by external 
  2619. means and thus no LOGIN command is needed.
  2620.  
  2621. Example:
  2622.  
  2623. S: * PREAUTH ICAP server logged in as Smith
  2624.  
  2625. 7.1.5.  BYE Response
  2626.  
  2627.  Data:    Optional response code
  2628. Human-readable text.
  2629.  
  2630.  
  2631. The BYE response is always untagged, and indicates that the server is 
  2632. about to close the connection.  The human-readable text MAY be 
  2633. displayed to the user in a status report by the client.  The BYE response 
  2634. is sent under one of four conditions:
  2635.  
  2636.  
  2637.  
  2638. Page  41                                                  Expires
  2639. 01/29/98
  2640.  
  2641.  
  2642. draft-oleary-icap-02.txt                                          07/29/97
  2643.  
  2644.  
  2645. 1) as part of a normal logout sequence.  The server will close the 
  2646. connection after sending the tagged OK response to the LOGOUT 
  2647. command.
  2648.  
  2649. 2) as a panic shutdown announcement.  The server closes the 
  2650. connection immediately.
  2651.  
  2652. 3) as an announcement of an inactivity autologout.  The server closes 
  2653. the connection immediately.
  2654.  
  2655. 4) as one of three possible greetings at session startup (along with OK 
  2656. and PREAUTH), indicating that the server is not willing to accept a 
  2657. session from this client.  The server closes the connection immediately.
  2658.  
  2659. The difference between a BYE that occurs as part of a normal 
  2660. LOGOUT sequence (the first case) and a BYE that occurs because of a 
  2661. failure (the other three cases) is that the connection closes immediately 
  2662. in the failure case.
  2663.  
  2664. Example:
  2665.  
  2666. S: * BYE Autologout; idle for too long
  2667.  
  2668. 7.2. Server Responses - Data Responses
  2669.  
  2670. These responses are always untagged.  This is how server data are 
  2671. transmitted from the server to the client, often as a result of a command 
  2672. with the same name.
  2673.  
  2674. 7.2.1.  CAPABILITY Response
  2675.  
  2676. Data:       capability listing
  2677.  
  2678. The CAPABILITY response occurs as a result of a CAPABILITY 
  2679. command.  The capability listing contains a space-separated listing of 
  2680. capability names that the server supports.  The capability listing MUST 
  2681. include the atom "ICAP".
  2682.  
  2683. A capability name which begins with "AUTH=" indicates that the 
  2684. server supports that particular authentication mechanism.
  2685.  
  2686. Other capability names indicate that the server supports an extension, 
  2687. revision, or amendment to the ICAP protocol. Server responses MUST 
  2688. conform to this document until the client issues a command that uses 
  2689. the associated capability.
  2690.  
  2691. Capabilities not defined in this document MUST be prefixed with "X-".
  2692.  
  2693. Client implementations SHOULD NOT require any capability name 
  2694. other than "ICAP", and MUST ignore any unknown capability names.
  2695.  
  2696. Example:
  2697.  
  2698. S: * CAPABILITY ICAP AUTH=KERBEROS_V4 X-PocketToaster
  2699.  
  2700.  
  2701.  
  2702. Page  42                                                  Expires
  2703. 01/29/98
  2704.  
  2705.  
  2706. draft-oleary-icap-02.txt                                          07/29/97
  2707.  
  2708.  
  2709. 7.2.2. LIST Response
  2710.  
  2711. Data:    Name attributes list
  2712. Calendar name or hierarchical name, possible prefixed by an 
  2713. owner name
  2714.  
  2715. The LIST response is given in response to a LIST command.
  2716.  
  2717. Four name attributes are defined:
  2718.  
  2719. \Noinferiors   It is not possible for any child levels of hierarchy to
  2720. exist 
  2721. under this name; no child levels
  2722. exist now and none can be created in the future.
  2723.  
  2724. \Noselect      It is not possible to use this name as a selectable
  2725. Calendar.
  2726.  
  2727. \Marked        The Calendar has been marked "interesting" by the 
  2728. server; the Calendar probably contains Objects that have been added 
  2729. since the last time the Calendar was selected.
  2730.  
  2731. \Unmarked      The Calendar does not contain any additional Objects 
  2732. since the last time the Calendar was selected.
  2733.  
  2734. If it is not feasible for the server to determine whether the Calendar is 
  2735. "interesting" or not, or if the name is a \Noselect name, the server 
  2736. SHOULD NOT send either \Marked or \Unmarked.
  2737.  
  2738. The hierarchy delimiter "/" is used to delimit levels of hierarchy in a 
  2739. Calendar name.  A client can use it to create child Calendars, and to 
  2740. search higher or lower levels of naming hierarchy. 
  2741.  
  2742. The name represents an unambiguous left-to-right hierarchy, and 
  2743. MUST be valid for use as a reference in LIST and LSUB commands. 
  2744. Unless \Noselect is indicated, the name MUST also be valid as an 
  2745. argument for commands, such as SELECT, that accept Calendar 
  2746. names.
  2747.  
  2748. Example:
  2749.  
  2750. S: * LIST () Section1
  2751. S: * LIST () <Ann>
  2752. S: * LIST () <Bob>
  2753. S: * LIST (\Noselect) Projects/
  2754. S: * LIST () Projects/Project_Purple
  2755. S: * LIST () "Project 1/From Bill"
  2756.  
  2757. 7.2.3. LSUB Response
  2758.  
  2759. The LSUB command is identical to the LIST command except that it is 
  2760. given in response to the LSUB command.
  2761.  
  2762. Example:
  2763.  
  2764. S: * LSUB () Section1
  2765. S: * LSUB() Projects/Project_Purple
  2766.  
  2767.  
  2768. Page  43                                                  Expires
  2769. 01/29/98
  2770.  
  2771.  
  2772. draft-oleary-icap-02.txt                                          07/29/97
  2773.  
  2774.  
  2775. S: * LSUB() "Project 1/From Bill"
  2776.  
  2777. 7.2.4. EXISTS Response
  2778.  
  2779. Data:        None.
  2780.  
  2781. The EXISTS response reports the number of Objects in the Calendar. 
  2782. This response occurs as a result of a SELECT, EXAMINE or RANGE 
  2783. command, and if the size of the Calendar changes (e.g. new Calendar 
  2784. Objects).
  2785.  
  2786. The update from the EXISTS response MUST be recorded by the 
  2787. client.
  2788.  
  2789. Example:
  2790.  
  2791. S: * 23 EXISTS
  2792.  
  2793. 7.2.5. RECENT Response
  2794.  
  2795. Data:        None.
  2796.  
  2797. The RECENT response reports the number of Calendar Objects that 
  2798. have been posted since the previous time a SELECT command was 
  2799. done on this Calendar.  This response occurs as a result of a SELECT 
  2800. or EXAMINE command, and if the size of the Calendar changes (e.g. 
  2801. new Calendar Objects).
  2802.  
  2803. The update from the RECENT response MUST be recorded by the 
  2804. client.
  2805.  
  2806. Example:
  2807.  
  2808. S: * 1 RECENT
  2809.  
  2810. 7.2.6. EXPUNGE Response
  2811.  
  2812. Data:        None.
  2813.  
  2814. The EXPUNGE response reports that the specified Calendar Object 
  2815. sequence number has been permanently removed from the Calendar.  
  2816. The sequence number for each successive Object in the Calendar is 
  2817. immediately decremented by 1, and this decrement is reflected in 
  2818. sequence numbers in subsequent responses (including other untagged 
  2819. EXPUNGE responses).
  2820.  
  2821. As a result of the immediate decrement rule, sequence numbers that 
  2822. appear in a set of successive EXPUNGE responses depend upon 
  2823. whether the Objects are removed starting from lower numbers to higher 
  2824. numbers, or from higher numbers to lower numbers.  For example, if 
  2825. the last 5 Objects in a 9-Object Calendar are expunged; a "lower to 
  2826. higher" server will send five untagged EXPUNGE responses for 
  2827. sequence number 5, whereas a "higher to lower server" will send 
  2828. successive untagged EXPUNGE responses for sequence numbers 9, 8, 
  2829. 7, 6, and 5.
  2830.  
  2831.  
  2832. Page  44                                                  Expires
  2833. 01/29/98
  2834.  
  2835.  
  2836. draft-oleary-icap-02.txt                                          07/29/97
  2837.  
  2838.  
  2839.  
  2840. An EXPUNGE response MUST NOT be sent when no command is in 
  2841. progress; nor while responding to a FETCH, STORE, or SEARCH 
  2842. command.  This rule is necessary to prevent a loss of synchronization 
  2843. of sequence numbers between client and server.
  2844.  
  2845. The update from the EXPUNGE response MUST be recorded by the 
  2846. client.
  2847.  
  2848. Example:
  2849.  
  2850. S: * 1 EXPUNGE
  2851.  
  2852. 7.2.7. FETCH Response
  2853.  
  2854. Data:        Calendar Object data.
  2855.  
  2856. The FETCH response returns data about a Calendar Object to the 
  2857. client. The data are pairs of data item names and their values in 
  2858. parentheses.  This response occurs as the result of a FETCH, STORE, 
  2859. ATTRIBUTES and FREEBUSY commands, as well as by unilateral 
  2860. server decision (e.g. flag updates). See the description of the 
  2861. commands for a list of data items.
  2862.  
  2863. S: * 1 FETCH ICAL.REQUIRED {96}
  2864. S: BEGIN: VCALENDAR
  2865. S: VERSION: 2.0
  2866. S: BEGIN: VEVENT
  2867. S: DTBEGIN: 19970701T0300Z
  2868. S: DTEND: 19970701T0400Z
  2869. S: DESCRIPTION: Test meeting
  2870. S: END: VEVENT
  2871. S: END: VCALENDAR
  2872. S: )
  2873.  
  2874. 7.2.8. FLAGS Response
  2875.  
  2876. Data:        Calendar Object flags.
  2877.  
  2878. The FLAGS response occurs as a result of a SELECT or EXAMINE 
  2879. command.  The flag parenthesized list identifies the flags (at a 
  2880. minimum, the system-defined flags) that are applicable for this 
  2881. Calendar.  Flags other than the system flags can also exist, depending 
  2882. on server implementation.
  2883.  
  2884. The update from the FLAGS response MUST be recorded by the client.
  2885.  
  2886. Example:
  2887.  
  2888. S: * 1 FLAGS (\Deleted)
  2889.  
  2890. 7.2.9.  SEARCH Response
  2891.  
  2892. Data:       zero or more numbers
  2893.  
  2894.  
  2895.  
  2896. Page  45                                                  Expires
  2897. 01/29/98
  2898.  
  2899.  
  2900. draft-oleary-icap-02.txt                                          07/29/97
  2901.  
  2902.  
  2903. The SEARCH response occurs as a result of a SEARCH or UID 
  2904. SEARCH command.  The number(s) refer to those Objects that match 
  2905. the search criteria.  For SEARCH, these are sequence numbers; for 
  2906. UID SEARCH, these are unique identifiers.  Each number is delimited 
  2907. by a space.
  2908.  
  2909. Example:
  2910.  
  2911. S: * SEARCH 2 3 6
  2912.  
  2913. 7.3.    Server Responses - Command Continuation 
  2914. Request
  2915.  
  2916. The command completion request response is indicated by a "+" token 
  2917. instead of a tag.  This form of response indicates that the server is 
  2918. ready to accept the continuation of a command from the client.  The 
  2919. remainder of this response is a line of text.
  2920.  
  2921. This response is used in the AUTHORIZATION command to transmit 
  2922. server data to the client, and request additional client data.  This 
  2923. response is also used if an argument to any command is a literal.
  2924.  
  2925. The client is not permitted to send the octets of the literal unless the 
  2926. server indicates that it expects it.  This permits the server to process 
  2927. commands and reject errors on a line-by-line basis.  The remainder of 
  2928. the command, including the CRLF that terminates a command, follows 
  2929. the octets of the literal.  If there are any additional command arguments 
  2930. the literal octets are followed by a space and those arguments.
  2931.  
  2932. Example:
  2933.  
  2934. C: A001 LOGIN {11}
  2935. S: + Ready for additional command text
  2936. C: FRED FOOBAR {7}
  2937. S: + Ready for additional command text
  2938. C: fat man
  2939. S: A001 OK LOGIN completed
  2940.  
  2941. 8. Formal Syntax
  2942.  
  2943. This will be included in a later draft of this specification.
  2944.  
  2945. 9. Example Sessions
  2946.  
  2947. Here is an example of a client using guest access to query the freetime 
  2948. of three individuals:
  2949.  
  2950. S: * OK ICAP Server ready.
  2951. C: A001 LOGIN anonymous pete@clearblue.com
  2952. S: A001 OK LOGIN Anonymous access granted.
  2953. C: A002 EXAMINE <Alice>
  2954. S: * 12 EXISTS
  2955. S: A002 OK EXAMINE
  2956. C: A003 EXAMINE <bob>
  2957. S: * 22 EXISTS
  2958.  
  2959.  
  2960. Page  46                                                  Expires
  2961. 01/29/98
  2962.  
  2963.  
  2964. draft-oleary-icap-02.txt                                          07/29/97
  2965.  
  2966.  
  2967. S: A003 OK EXAMINE
  2968. C: A004 EXAMINE <carol>
  2969. S: * 36 EXISTS
  2970. S: A004 OK EXAMINE
  2971. C: A005 FREEBUSY "" 19970701T0300-0700 19970701T1900-0700
  2972. S: * 1 FETCH ICAL {200}
  2973. S: BEGIN: VCALENDAR
  2974. S: VERSION: 2.0
  2975. S: BEGIN: VFREEBUSY
  2976. S: ATTENDEE: Alice
  2977. S: DTBEGIN: 19970701T0300Z
  2978. S: DTEND: 19970701T1900Z
  2979. C: FREEBUSY; VALUE=PERIOD-START: 19970701T0800-
  2980. 0700/PT3H, 19970701T1500-0700/PT2H
  2981. S: END: VFREEBUSY
  2982. S: BEGIN: VFREEBUSY
  2983. S: ATTENDEE: bob
  2984. S: DTBEGIN: 19970701T0300Z
  2985. S: DTEND: 19970701T1900Z
  2986. C: FREEBUSY; VALUE=PERIOD-START: 19970701T1000-
  2987. 0700/PT1H, 19970701T1500-0700/PT1H
  2988. S: END: VFREEBUSY
  2989. S: BEGIN: VFREEBUSY
  2990. S: ATTENDEE: carol
  2991. S: DTBEGIN: 19970701T0300Z
  2992. S: DTEND: 19970701T1900Z
  2993. C: FREEBUSY; VALUE=PERIOD-START: 19970701T0900-
  2994. 0700/PT2H
  2995. S: END: VFREEBUSY
  2996. S: END: VCALENDAR
  2997. S: A005 OK FREEBUSY
  2998. C: A006 LOGOUT
  2999. S: * BYE ICAP Server terminating connection.
  3000. S: A006 OK LOGOUT
  3001.  
  3002. 10. Open Issues/Work in Progress
  3003.  
  3004. How should a user's Calendar server be located? For example, given a 
  3005. mail address like <pete@amplitude.com> how should a client locate 
  3006. the Calendar server. This is still not clearly defined.
  3007.  
  3008. 11. Changes From Previous Draft Version
  3009.  
  3010. 1. ICAP now supports iCalendar instead of vCalendar objects.
  3011. 2. Added description in Section 1 of ICAP's handling of different 
  3012. types of iCalendar Components.
  3013. 3. All references to Calendar "entry" or "entries" have been changed 
  3014. to "Object" and "Objects" respectively to be consistent with 
  3015. iCalendar terminology.
  3016. 4. Add Calendar Store requirement that all Object must be sorted 
  3017. according to the UTC time value.
  3018. 5. The COMPONENTS attribute has been added to the 
  3019. ATTRIBUTES command to allow greater flexibility in the 
  3020. information presented by the server.
  3021. 6. TIMEZONE has been added to ATTRIBUTES. This allows a 
  3022.  
  3023.  
  3024. Page  47                                                  Expires
  3025. 01/29/98
  3026.  
  3027.  
  3028. draft-oleary-icap-02.txt                                          07/29/97
  3029.  
  3030.  
  3031. server to enforce the idea that all Objects within a Calendar Store 
  3032. must be within the same time zone. This is useful for older 
  3033. scheduling systems which do not have time zone support and for 
  3034. applications such as conference room scheduling, where Calendar 
  3035. Store represent a fixed object.
  3036. 7. CSID and CSNAME have been added to FETCH. This allows the 
  3037. client to determine which Calendar Store an Object was fetched 
  3038. from using the Store's name or UID.
  3039. 8. SEARCH now has comparison operators on fields and support for 
  3040. iCalendar Components.
  3041. 9. The SETTINGS command has been removed completely. The 
  3042. ATTRIBUTES command is a much better method of retrieving 
  3043. Time Zone, language and character-set encoding information since 
  3044. it presents a "model" of exactly what an ICAL object is going to 
  3045. look like when it is presented to the client.
  3046. 10. Information for resolving recurring events has been included in the 
  3047. SELECT and RANGE commands.
  3048.  
  3049. 12. References
  3050.  
  3051. [1]    Crispin, M. "INTERNET MESSAGE ACCESS PROTOCOL - 
  3052. VERSION 4", RFC 1730, Dec 1994, 
  3053. http://andrew2.andrew.cmu.edu/cyrus/email/standards-IMAP.html
  3054.  
  3055. [2]    Dawson, F., Stenerson, D.,"Internet Calendaring and Scheduling 
  3056. Core Object Specification (iCalendar)", 03/26/1997, 
  3057. http://www.imc.org/draft-ietf-calsch-ical-main
  3058.  
  3059. [3]    Borenstein, N., and Freed, N., "MIME (Multipurpose Internet Mail 
  3060. Extensions) Part One: Mechanisms for Specifying and Describing 
  3061. the Format of Internet Message Bodies", RFC 1521, Bellcore, 
  3062. Innosoft, September 1993.
  3063.  
  3064. [4]    Postel, Jonathan B. "Simple Mail Transfer Protocol", STD 10, 
  3065. RFC 821, USC/Information Sciences Institute, August 1982.
  3066.  
  3067. [5]    Myers, J., "IMAP4 Authentication Mechanism", RFC 1731. 
  3068. Carnegie-Mellon University, December 1994.
  3069.  
  3070. [6]    Kuhn, M., "A Summary of the International Standard Date and 
  3071. Time Notation",  
  3072. http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html
  3073.  
  3074. [7]    Silverberg, S., Mansour, S., Dawson, F., Hopson, R.," iCalendar 
  3075. Transport-Independent Interoperability Protocol", 
  3076. http://www.imc.org/draft-ietf-calsch-itip-part1, 
  3077. http://www.imc.org/draft-ietf-calsch-itip-part2, 
  3078. http://www.imc.org/draft-ietf-calsch-itip-part3
  3079.  
  3080. 13. Security Considerations
  3081.  
  3082. The user name and password arguments of the LOGIN command are 
  3083. sent in clear text over most transport protocols. Consult [5] for a 
  3084. discussion of authentication mechanisms used by IMAP4 and by ICAP.
  3085.  
  3086.  
  3087.  
  3088. Page  48                                                  Expires
  3089. 01/29/98
  3090.  
  3091.  
  3092. draft-oleary-icap-02.txt                                          07/29/97
  3093.  
  3094.  
  3095. Servers should implement and enforce access control mechanisms for 
  3096. Calendar stores. This specification contains no provisions for defining 
  3097. and maintaining access control.
  3098.  
  3099. 14. Author's Notes
  3100.  
  3101. This spec is based in very large part on the operation, commands and 
  3102. concepts of IMAP4 [1]. In the spirit of "not reinventing the wheel" I 
  3103. have incorporated parts of the IMAP4 specification into this work. My 
  3104. thanks to the authors of the IMAP4 specification for their excellent 
  3105. work.
  3106.  
  3107. Author's Address:
  3108.  
  3109. Peter O'Leary
  3110. Amplitude Software Corp
  3111. 1650 South Amphlett Blvd #200
  3112. San Mateo, CA 94402
  3113. http://www.amplitude.com/
  3114. (415) 323-3380
  3115. E-mail: pete@amplitude.com
  3116.  
  3117.  
  3118.  
  3119.  
  3120.  
  3121.  
  3122.  
  3123.  
  3124.  
  3125.  
  3126.  
  3127.  
  3128.  
  3129.  
  3130.  
  3131.  
  3132.  
  3133.  
  3134.  
  3135.  
  3136.  
  3137.  
  3138.  
  3139.  
  3140.  
  3141.  
  3142.  
  3143.  
  3144.  
  3145.  
  3146.  
  3147.  
  3148.  
  3149.  
  3150.  
  3151.  
  3152. Page  49                                                  Expires 01/29/98
  3153.  
  3154.