Internet-Draft                                                       07/18/96
draft-oleary-icap-00.txt                                     Expires 01/18/97
-------------------------------------------------------------------------------

Internet Calendar Access Protocol (ICAP)

Status of this Memo

This document is an Internet-Draft. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF) , its areas,
and its working groups. Note that other groups may also distribute
working documents as Internet-Drafts.

Internet-Drafts are draft documents valid for a maximum of six
months and may be updated, replaced, or obsoleted by other
documents at any time. It is inappropriate to use Internet-Drafts as
reference material or to cite them other than as "work in progress."

To learn the current status of any Internet-Draft, please check the "lid-
abstracts.txt" listing contained in the Internet-Drafts Shadow
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe) ,
munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
ftp.isi.edu (US West Coast).

Abstract

This Internet Calendar Access Protocol  (ICAP) allows a client to
access, manipulate and store Calendar information on a server. ICAP
can be used either as a set of capability extensions to IMAP4 [1] to
create a server which supports both messaging and calendaring
functions, or as a standalone protocol for a server dedicated to
calendaring only. ICAP employs the vCalendar format [2] for
interchange of calendaring information.

ICAP includes operations for creating Calendar stores on a server,
opening them and retrieving information about them. When a
Calendar store has been opened, it can be bounded by start and end
times so that the client can act on a smaller subset of Calendar
information for more efficient operation. ICAP allows users to store
new Calendar entries into their own Calendar store and Calendar
stores owned by other users with a single operation.

NOTE FOR DRAFT VERSION: The IMAP4 specification [1] requires
that capabilities that are not part of a standards track revision to the
IMAP4 spec, and all commands and responses associated with such
"experimental" extensions, be prefixed with an "X". This DRAFT
version of the ICAP spec does not use this prefix for purposes of
clarity since ICAP can also be used in a standalone mode. The "X"
prefix should be inferred whenever a new command or response is
added as a capability extension to IMAP4.

-------------------------------------------------------------------------------
                                                                    Page:     1







-------------------------------------------------------------------------------
Overview

The Internet Calendar Access Protocol (ICAP) allows clients to access
a Calendar store on a server via a network connection like TCP/IP.
The operation of ICAP is based on that of the Internet Message Access
Protocol Version 4 [1]. This was done so that ICAP could be used in
conjunction with IMAP whenever it made sense to closely tie together
electronic mail and calendar services.

This document specifies a protocol for Calendaring, it does not specify
a text-based format for Calendar information interchange. ICAP uses
the versit Consortium's vCalendar specification [2] for Calendar
information interchange.

ICAP is intended to be used in two different ways: first, as a set of
capability extensions to IMAP 4 and second as a standalone protocol
server.

An IMAP server which is also a Calendar server must return ICAP as
a capability when queried using the CAPABILITY command.

Example:

C: a001 CAPABILITY
S: * CAPABILITY IMAP ICAP
S: a001 OK CAPABILITY completed

When ICAP is added as a set of protocol extensions to IMAP4 via
TCP, the server listens on port 143, as is the case with IMAP4. In this
case, it is essential that the ICAP/IMAP server support all functions
and operations of both protocols.

When ICAP is used as a standalone protocol, the server listens on TCP
port 7668 (subject to change) and states a greeting similar to IMAP:

S: * OK ICAP Server ready.

Throughout this document, reference will be made to "IMAP/ICAP"
servers and "ICAP" servers. "IMAP/ICAP" refers to a server which
implements the IMAP4 protocol described in [1] and the protocol
defined in this document. "ICAP" refers to a server which implements
the protocol defined in this document.

IMAP defines 4 states: Non-Authenticated, Authenticated, Selected
and Logout. An ICAP/IMAP server must support all of these states as
described in [1]. An ICAP server must support all of these states
except Selected. When a server supports both ICAP and IMAP,
Selected is equivalent to "Mailbox Selected" as Calendar selection is
-------------------------------------------------------------------------------
                                                                    Page:     2







-------------------------------------------------------------------------------
distinct from mailbox access.

The ICAP server adds one additional state to the states already defined
for IMAP4. The ICAP server supports a state called CalendarSelected,
which can be entered via the CALSELECT command. A server which
supports IMAP and ICAP can be in both the Selected and
CalendarSelected state at the same time.
Data Formats

Refer to the discussion of "Data Formats" in [1].

All dates given in this document are in the ISO8601 format:
yyyymmddThhmmss. A "Z" may be appended to indicate Zulu time
(that's GMT to most people). Any date not given in GMT is assumed
to be in the time zone of the server. Clients can test and set the time
zone using the CALSETTINGS command (see below).
ICAP Commands - Any State

CAPABILITY Command

Arguments:  None.

Mandatory untagged response:    CAPABILITY

The ICAP or IMAP/ICAP server must respond with a list of
capabilities in a format like that of an IMAP server. The servers must
respond with both "IMAP4" and "ICAP", or with just "ICAP", as
appropriate.

Example 1, IMAP/ICAP server:

C: a001 CAPABILITY
S: * CAPABILITY IMAP4 ICAP
S: a001 OK CAPABILITY completed

Example 2, ICAP only server:

C: a001 CAPABILITY
S: * CAPABILITY ICAP
S: a001 OK CAPABILITY completed


NOOP Command

Arguments:  None

An ICAP/IMAP server must support the NOOP command as described
in [1]. An ICAP server must support this command. In both cases,
-------------------------------------------------------------------------------
                                                                    Page:     3







-------------------------------------------------------------------------------
ICAP responses can be returned along with IMAP specific responses.

LOGOUT Command

Arguments:  None

An ICAP/IMAP server must support the LOGOUT command as
described in [1]. An ICAP server must support this command, closing
all open selected Calendars and disconnecting.

CALSETTINGS Command

Arguments:  Optional keyword "QUERY"

Allows the client to set session-level options that apply to all
subsequent Calendar operations. Options are given in the form:

option_name ":" option_setting [CRLF]

After all options have been given, a single period "." followed by a
CRLF is given, signifying the end of the options list. After this
completion line has been given, the server must send untagged status
responses back to the client corresponding to the options given. These
responses can specify whether or not the given option was set
correctly. The status responses must contain the response code
CALSETTINGS. OK responses should also include the option name
and option setting. NO responses must contain the option name not
set.

Mandatory options and their defaults are as follows. Implementation
specific extensions to these options may be added. Any option
extension which is not part of this standard or is not intended to be
part of this standard must be prefixed with an "X".

The current options correspond to vCalendar properties, see [2]:

LANGUAGE        "en-US" (US English)
CHARSET     "ASCII"
ENCODING        "7BIT"
TZ          "00" (GMT)

In this example, the client attempts to set 3 options the standard
"ENCODING" and "TZ" the implementation specific option "XFOO".
The server accepts the first two options and rejects the last:

C: A001 CALSETTINGS
C: ENCODING: BASE64
C: TZ: -06
-------------------------------------------------------------------------------
                                                                    Page:     4







-------------------------------------------------------------------------------
C: XFOO: BAR
C: .
S: * OK [CALSETTING ENCODING BASE64]
S: * OK [CALSETTING TZ -06]
S: * NO [CALSETTING XFOO]
S: A001 OK CALSETTINGS

The keyword "QUERY" can be given on the same line as the
CALSETTINGS command to query all existing settings. In this case,
no additional lines must be sent by the client. The server replies with
an untagged response for each setting.

Example:

C: A001 CALSETTINGS QUERY
S: * OK [CALSETTING ENCODING 7BIT]
S: * OK [CALSETTING TZ -09]
S: * OK [CALSETTING CHARSET ASCII]
S: * OK [CALSETTING LANGUAGE en-US]
S: A001 OK CALSETTINGS

ICAP Commands - Non-Authenticated State

AUTHENTICATE Command

Arguments:  Authentication mechanism name.

Both ICAP/IMAP and ICAP servers must support the
AUTHENTICATE command as described in [1].

LOGIN Command

Arguments:  User name and password.

Both ICAP/IMAP and ICAP servers must support the
AUTHENTICATE command as described in [1].

ICAP Commands - Authenticated State

CALSELECT Command

Arguments:  Name of the Calendar store to select.

Data:

Mandatory untagged response: CALFLAGS, CALEXISTS
Optional untagged response: CALRECENT

-------------------------------------------------------------------------------
                                                                    Page:     5







-------------------------------------------------------------------------------
Result:

OK - now in CalendarSelected state
NO - no such Calendar store, can't access Calendar store

The CALSELECT command selects the Calendar store for the current
user so that Calendar entries can be queried and retrieved.
CALSELECT is different in one major respect from the SELECT
command in IMAP [1] in that multiple Calendar stores can be selected
by reissuing the CALSELECT command. In this way, a composite
view of the Calendar stores can be created. This composite calendar
can then be used to allow browsing of group calendars and creating of
group meetings (see below).

The name parameter can be the name of a Calendar and optionally a
user name. If a user name is given, then it is bracketed with angle
braces "<" and ">" and added before the Calendar store name. The
default Calendar store of a user can be selected by using only the
user's name bracketed by angles. The default calendar store of the
current user can be selected by using angles"<>". All commands
which take a Calendar store name as a parameter can accept a user
name in this manner. Which Calendar store is selected as a default is
implementation dependent. It is recommended that the default store be
whichever Calendar store most accurately represents the user's actual
schedule, so that it can be queried to find freetime (see the CALFREE
command below).

The user name is specified as <"username"@"hostname">. If
"hostname" is the name of the current host machine, then "hostname"
may be omitted and the form is: <"username">. If "hostname" is
included, and it is different from the current host machine name, the
server can either reject the name with a NO response or attempt to
connect to the specified host machine on behalf of the user and issue
an OK response if successful. If a NO response is given by the server
because the given user's calendar information is not located on the
host but the server knows where, a reference name in angle brackets
may be included as part of the response.

The CALEXISTS response should return the number of entries
currently selected.

The CALRECENT response should be given if new Calendar entries
have appear in the selected Calendar since it was last selected. This
may occur when someone else's Calendar store is selected or possibly
when someone else - an assistant perhaps - modifies the user's
Calendar

The CALFLAGS response should list the flags supported by this
-------------------------------------------------------------------------------
                                                                    Page:     6







-------------------------------------------------------------------------------
Calendar store. Note that when multiple Calendar stores are selected,
the CALFLAGS supported should be the intersection of those
supported by all the Calendars.

Flags current supported are:

\Deleted - Entry is marked for deletion.
\Recent - Entry has been added since the last time that this Calendar
store was selected.
\Repeating - Entry is one of a repeating set of entries.

Example interactions:

C: A001 CALSELECT
S: * 123 CALEXISTS
S: * CALFLAGS (\Deleted \Recent \Repeating)
S: A001 OK CALSELECT Completed
C: A002 CALRANGE 19960101T000000 19960130T235959

This sequence selects the current user's default Calendar store. It then
sends a CalendarSelected state command called CALRANGE (see
below).

C: A001 CALSELECT <>Section1
S: * 45 CALEXISTS
S: * CALFLAGS (\Deleted \Recent \Repeating)
S: A001 OK CALSELECT completed
C: A002 CALRANGE 19960101T000000 19960130T235959

This sequence selects the current user's Calendar store called
"Section1". It then sends a CalendarSelected state command called
CALRANGE.

C: A001 CALSELECT <>
S: * 23 CALEXISTS
S: * CALFLAGS (\Deleted \Recent \Repeating)
S: A001 OK CALSELECT completed
C: A002 CALSELECT <Bob>
S: * 56 CALEXISTS
S: * CALFLAGS (\Deleted \Recent \Repeating)
S: A002 OK CALSELECT completed
C: A003 CALSELECT <Sally>
S: * 123 CALEXISTS
S: * CALFLAGS (\Deleted \Recent \Repeating)
S: A003 OK CALSELECT completed

This sequence uses multiple CALSELECT commands to open the
current user's default Calendar store plus the default Calendar stores
-------------------------------------------------------------------------------
                                                                    Page:     7







-------------------------------------------------------------------------------
of Bob and Sally. Note that the CALEXISTS response from the
command contains the number of Calendar entries in all of the
Calendars currently selected.

C: A001 CALSELECT <jyip@clearblue.com>
S: A001 NO CALSELECT No such user.

C: A001 CALSELECT <poleary@clearblue.com>
S: A001 NO CALSELECT Try <poleary@yosemite.clearblue.com>

These sequences demonstrate how a server might handle a
CALSELECT command where the given user's Calendar store is not
on the current host. In the second example, the server knows the
location of the user's Calendar host and supplies that information to
the client.

CALEXAMINE Command

This command is identical to CALSELECT except that the selected
Calendar store is returned read only.

CALCREATE Command

Arguments:  Name of Calendar store to create.

Result:     OK - Calendar store created.
        NO - Calendar store not created.
        BAD - Invalid arguments.

Creates a new Calendar store with the given name. Calendar store
names must begin with an alphabetic character and consist of
alphanumeric characters. Calendar names are not case sensitive. It is
illegal to create more than one Calendar store with the same name.

CALDELETE Command

Arguments:  Name of Calendar store to delete.

Result:     OK - Calendar store deleted.
        NO - Calendar store not deleted.
        BAD - Invalid arguments.

Deletes the Calendar store with the given name.

CALRENAME Command

Arguments:  Name of Calendar store to rename.
        New Calendar store name.
-------------------------------------------------------------------------------
                                                                    Page:     8







-------------------------------------------------------------------------------

Result:     OK - Calendar store renamed
        NO - Calendar store not renamed.
        BAD - Invalid arguments

Renames the specified Calendar store.

CALLIST Command

Arguments:  Calendar name pattern, possibly with "*" as a
wildcard character.

Data:       Untagged responses: CALLIST

Result:     OK - List complete.
        NO - List failed, no Calendars found that match the
given pattern.
        BAD - What did that pattern mean anyway?

The CALLIST command returns a list of all Calendars that the current
user has access to. "*" is the only wildcard character supported and
can be used more than once in the same pattern. The Calendar name
parameter can be prefixed with a user name in angle brackets, as
described in the CALSELECT command.

Examples of CALLIST patterns and their meaning:

"*"     All of  the current user's Calendar stores and any
publicly available Calendar stores.
"<*>"       The name of all users that can be accessed by this
server.

Example:

C: A001 CALLIST <*>
S: * CALLIST <Ann>
S: * CALLIST <Bob>
S: * CALLIST <Pete>
S: A001 OK CALLIST Completed.

C: A001 CALLIST *
S: * CALLIST Business
S: * CALLIST Private
S: * CALLIST CorporateEvents
S: A001 OK CALLIST Completed.

ICAP Commands - CalendarSelected State

-------------------------------------------------------------------------------
                                                                    Page:     9







-------------------------------------------------------------------------------
CALSELECT Command

As described above, the CALSELECT command can be given from
the CalendarSelected state as well as the AUTHENTICATED state.

CALCLOSE Command

Arguments:  Optional name of user and or Calendar store.

Result:     OK
        BAD - Calendar name or user is not selected.

The CALCLOSE closes the currently selected Calendar store or one of
the Calendar stores currently selected. When no parameter is supplied,
all currently selected Calendars are closed. When a parameter is
supplied, it should be of the same form for Calendar names given in
the CALSELECT command. If the user has not previously issued a
CALSELECT command with the exact name given in the
CALCLOSE command, a BAD response is returned.

CALRANGE Command

Arguments:  Start date/time in ISO8601 format
        End date/time in ISO8601 format.

Mandatory untagged response:    CALEXISTS

Result:     OK - Command completed successfully, date range
has been set
        NO - An error occurred while setting the date range
        BAD -  Bad date format

The CALRANGE command sets a date/time range for the currently
selected Calendars and returns a CALEXISTS response with the
number of items in the range. All subsequent calls that require an item
number will be bound by the given date range.

CHECK Command

Arguments:  None

An IMAP server which implements ICAP should perform
housekeeping operations on the currently selected Calendar store in
addition the current mail store. As with IMAP [1], the server is not
required to return any untagged response with this command.

CALEXPUNGE Command

-------------------------------------------------------------------------------
                                                                    Page:    10







-------------------------------------------------------------------------------
Arguments:  None

Mandatory untagged response:    CALEXPUNGE

Like the IMAP EXPUNGE command [1], CALEXPUNGE
permanently removes all Calendar items marked with the \Deleted
flag. An untagged CALEXPUNGE response is returned for each item
removed.

CALFETCH Command

Arguments:  Set of calendar entries to fetch.
        Item names.

Data:   Untagged responses: CALFETCH

Result: OK - fetch completed
    NO - fetch error
    BAD - command unknown or invalid arguments

Fetches for all the specified calendar entries the data specified using
the following item names:

CALFLAGS        The flags associated with this calendar
entry
VCAL            vCalendar Simplegram format.
VCAL.SIZE       The size of the vCalendar Simplegram, in
octets.
VCAL.REQUIRED   Only required vCalendar field information
in Simplegram format.
VCAL.BRIEF      Only DTSTART and DTEND fields in
Simplegram format.

Note that items returned by CALFETCH should always be returned in
ascending chronological order, even when multiple Calendar stores
are selected.

Example:

C: A001 CALFETCH 1 CALFLAGS
S: * 1 CALFETCH CALFLAGS  (\Deleted \Seen)
S: A001 OK CALFETCH

C: A001 CALFETCH 1 (CALFLAGS VCAL.REQUIRED)
S: * 1 CALFETCH (CALFLAGS  (\Deleted \Seen)
VCAL.REQUIRED {96}
S: BEGIN: vCalendar
S: BEGIN: vEvent
-------------------------------------------------------------------------------
                                                                    Page:    11







-------------------------------------------------------------------------------
S: DTBEGIN: 19960701T0300Z
S: DTEND: 19960701T0400Z
S: DESCRIPTION: Test meeting
S: END: vEvent
S: END: vCalendar
S: )
S: A001 OK CALFETCH

CALSTORE Command

Arguments:  Calendar entry set
        Calendar entry data item name
        Calendar entry data item value

Calendar data items:

+CALFLAGS

Set the flag list of the given Calendar entries.

-CALFLAGS

Remove the flag argument from the flags of the given Calendar
entries.

VCAL

Updates the vCalendar data associated with this Calendar entry. When
this form of the CALSTORE command is used, the Calendar data item
must be supplied as a literal. The data must be a vCalendar
Simplegram.

If a value of "0" is given for the Calendar entry set, then a new entry is
created in the current CalendarSelected object.

If there is more than one Calendar store selected in the given
CalendarSelected object, then the CALSTORE command will add the
new entry to all of the Calendar stores.

The server can send an optional untagged response for each user or
calendar that is currently selected. The response can be used to
indicate that the store failed in a certain user's calendar with a
response code of "REFUSED" followed by the name of the calendar
refusing.

New Calendar entries added to a Calendar store must contain all
required vCalendar fields. Updates to existing Calendar entries need
only contain the actual data to be updated.
-------------------------------------------------------------------------------
                                                                    Page:    12







-------------------------------------------------------------------------------

Examples:

C: A001 CALSTORE 23 (+CALFLAGS \Repeating VCAL {102}
C: BEGIN: vCalendar
C: BEGIN: vEvent
C: DTSTART: 19960606T140000
C: DTEND: 19960606T150000
C: DESCRIPTION: Meeting with Pete.
C: END: vEvent
C: END: vCalendar
C: )
S: A001 OK CALSTORE completed

C: A001 CALSTORE 23 VCAL {102}
C: BEGIN: vCalendar
C: BEGIN: vEvent
C: DTSTART: 19960606T140000
C: DTEND: 19960606T150000
C: DESCRIPTION: Meeting with Pete.
C: END: vEvent
C: END: vCalendar
S: * NO [REFUSED <alice>] Alice doesn't like you.
S: A001 OK CALSTORE completed

This sequence modifies Calendar entry number 23 with a new start
and end date/time. Also in this sequence, an untagged response from
the server indicates that updating the Calendar entry in the user
"alice" Calendar has failed.

CALFREE Command

Arguments:  Start of search range in ISO8601 format
        End of search range in ISO8601 format
Length of time, in minutes

Mandatory untagged response:    CALFETCH

The CALFREE command searches the currently selected Calendar,
bounded by a start and end time, and returns a list of intervals during
which an event of the given length of time can be scheduled. See
below under "Example Sessions" for and example of the use of the
CALFREE command.

The freetime data is returned in an untagged CALFETCH response as
VCAL.BRIEF.

CALCOPY Command
-------------------------------------------------------------------------------
                                                                    Page:    13







-------------------------------------------------------------------------------
CALMOVE Command

Arguments:  Calendar entry set
        Name of Calendar to move or copy to

Result:     OK - Calendar entries moved.
        NO - Calendar entries not moved.
        BAD - Bad date format given.

CALCOPY and CALMOVE transfer a given set of entries to a
different Calendar store. In the case of the CALMOVE command, the
entries are removed from the current Calendar. CALMOVE must fail
if the user does not have permission to remove an entry from the
selected Calendar.

Example:

C: A001 CALCOPY 1 Section1
S: A001 OK CALCOPY Completed.

Server Responses

CALLIST Response

S: * CALLIST Section1
S: * CALLIST <Ann>
S: * CALLIST <Bob>

CALEXISTS Response

This response is similar to the EXISTS response defined in IMAP4 [1]
except that it applies to the selected Calendar store.

Example:

S: * 23 CALEXISTS

CALRECENT Response

This response is similar to the RECENT response defined in IMAP4
[1] except that it applies to the selected Calendar store.

Example:

S: * 1 CALRECENT

CALEXPUNGE Response

-------------------------------------------------------------------------------
                                                                    Page:    14







-------------------------------------------------------------------------------
This response is similar to the EXPUNGE response defined in IMAP4
[1] except that it applies to the selected Calendar store.

Example:

S: * 1 CALEXPUNGE

CALFETCH Response

This response is similar to the FETCH response defined in IMAP4 [1]
except that it applies to the selected Calendar store.

S: * 1 CALFETCH VCAL.REQUIRED {96}
S: BEGIN: vCalendar
S: BEGIN: vEvent
S: DTBEGIN: 19960701T0300Z
S: DTEND: 19960701T0400Z
S: DESCRIPTION: Test meeting
S: END: vEvent
S: END: vCalendar
S: )

CALFLAGS Response

This response is similar to the FLAGS response defined in IMAP4 [1]
except that it applies to the selected Calendar store.

S: * 1 CALFLAGS (\Deleted)

Formal Syntax

This will be included in a later draft of this specification.

Example Sessions

Here is an example of a client using guest access to query the freetime
of three individuals:

S: * OK ICAP Server ready.
C: A001 LOGIN guest pete@clearblue.com
S: A001 OK LOGIN Anonymous access granted.
C: A002 CALEXAMINE <alice>
S: * 12 CALEXISTS
S: A002 OK CALEXAMINE
C: A003 CALEXAMINE <bob>
S: * 22 CALEXISTS
S: A003 OK CALEXAMINE
C: A004 CALEXAMINE <carol>
-------------------------------------------------------------------------------
                                                                    Page:    15







-------------------------------------------------------------------------------
S: * 36 CALEXISTS
S: A004 OK CALEXAMINE
C: A005 CALFREE 19960701T0300Z 19960701T1200Z 60
S: * 1 CALFETCH VCAL.BRIEF {200}
S: BEGIN: vCalendar
S: BEGIN: vEvent
S: DTBEGIN: 19960701T0300Z
S: DTEND: 19960701T0400Z
S: END: vEvent
S: BEGIN: vEvent
S: DTBEGIN: 19960701T1000Z
S: DTEND: 19960701T1100Z
S: END: vEvent
S: END: vCalendar
S: A005 OK CALFREE
C: A006 LOGOUT
S: * BYE ICAP Server terminating connection.
S: A006 OK LOGOUT

Open Issues/Work in Progress

How should a user's Calendar server be located? For example, given a
mail address like <poleary@clearblue.com> how should a client locate
the Calendar server.

Hierarchical Calendar store names are not currently specified.

No subscribe/unsubscribe capabilities are currently defined, although
these could be very useful.

Calendar searching is not yet defined. Need some input on the best
way to handle searching through vCalendar Simplegrams.

Repeating events are not defined in this specification except for the
\Repeating flag. Do we need special treatment of repeating events
here?
References

[1] Crispin, M. "INTERNET MESSAGE ACCESS PROTOCOL -
VERSION 4", RFC 1730, Dec 1994,
http://andrew2.andrew.cmu.edu/cyrus/email/standards-IMAP.html

[2] versit Consortium, "Electronic Calendaring and Scheduling
(vCalendar) Specification", 03/29/1996, http://www.versit.com/

Security Considerations

The user name and password arguments of the LOGIN command are
-------------------------------------------------------------------------------
                                                                    Page:    16





                                                                     07/18/96
                                                             Expires 01/18/97
-------------------------------------------------------------------------------
sent in clear text over most transport protocols. Servers should
implement access control mechanisms for the Calendar store.

Author's Address

The author is currently relocating to California after barely surviving
the worst winter on record in Massachusetts. Contact information after
August 1st:

Peter O'Leary
Clear Blue Network Systems, Inc.
1028 Cowper St.
Palo Alto, CA 94043
(415) 323-3380
E-mail: poleary@clearblue.com

































-------------------------------------------------------------------------------
                                                                    Page:    17