Rob Osborne
Sonu Aggarwal
Leon Wong
Peter Beebee
Martin Calsyn
Lisa Lippert
Microsoft Corporation
RVP: A Presence and Instant Messaging Protocol
1. Abstract
Instant Messaging has recently emerged as a new and highly
popular medium of communication over the Internet, driven by the
desire of individuals to know instantly whether another
individual is online, to be notified when another individual
arrives online, and to send messages in ‘real time’. These are
all special cases of the more general problem of Internet-wide
notification. The RVP protocol, is designed to enable such
notifications and messages across a loosely coupled (federated)
constellation of servers. RVP is designed to address the need for
notification in a secure, reliable and scaleable fashion. RVP
encompasses the client-server and server-server interactions.
The forthcoming release of Microsoft Exchange 2000 includes an
Instant Messaging service, based on the RVP protocol. This draft
contains details of the RVP wire protocol, and its associated XML
schema. This document is intended as a reference for third party
developers who wish to interoperate with Exchange Instant
Messaging. Those wishing to interoperate may also use the
Exchange Instant Messaging SDK, which abstracts RVP protocol
elements for developers, and will be available at
http://msdn.microsoft.com/exchange/ starting around Microsoft
Exchange 2000 release in the first half of 2000. Any comments or
questions should be directed to the authors, see the
Author’s Addresses section
RVP is related to the work done by the IETF Instant Messaging and
Presence Protocol Working group (IMPP). This protocol is not
intended to compete with the IMPP effort, but to inform the
design process with an existing implementation. This document is
an update to draft-calsyn-rvp-01 “A Presence Notification
Protocol”, [RVP-CALSYN], that reflects the actual Microsoft
Exchange 2000 implementation.
The presentation, distribution or other dissemination of the
information contained herein by Microsoft is not a license,
either expressly or impliedly, to any intellectual property owned
or controlled by Microsoft.
This document and the information contained herein is provided on
an "AS IS" basis and MICROSOFT DISCLAIMS ALL WARRANTIES, EXPRESS
Osborne et al 1
RVP
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
USE OFTHE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY
IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
PURPOSE.
IN NO EVENT WILL MICROSOFT BE LIABLE TO ANY OTHER PARTY FOR THE
COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS,
LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL,
DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT,
TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY MANNER RELATING TO
THIS DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF
THE POSSIBILITY OF SUCH DAMAGES.
2. Contents
1. Abstract ................................................... 1
2. Contents ................................................... 2
3. Overview ................................................... 3
4. Protocol Introduction ...................................... 4
4.1 Architecture .......................................... 4
4.1.1 General Interaction ............................... 5
4.1.2 Addressing ........................................ 5
4.2 Authentication ........................................ 6
4.3 Examples .............................................. 6
5. Protocol Methods ........................................... 7
5.1 SUBSCRIBE ............................................. 7
5.1.1 Subscribtion Ids .................................. 7
5.1.2 Leased subscriptions .............................. 7
5.1.3 Notification types ................................ 8
5.1.4 Notification delivery ............................. 8
5.1.5 Changing/discarding subscriptions ................. 9
5.1.6 Response .......................................... 9
5.1.7 Examples .......................................... 9
5.1.7.1 Login Subscription ........................... 9
5.1.7.2 Property subscription ....................... 10
5.2 UNSUBSCRIBE .......................................... 11
5.2.1 Example .......................................... 11
5.3 SUBSCRIPTIONS ........................................ 11
5.3.1 Example .......................................... 12
5.4 PROPFIND ............................................. 13
5.4.1 Example .......................................... 13
5.5 PROPPATCH ............................................ 14
5.5.1 Example .......................................... 15
5.5.2 Implementation considerations .................... 17
5.6 NOTIFY ............................................... 18
5.6.1 Examples ......................................... 19
5.7 ACL .................................................. 24
5.7.1 Access rights .................................... 24
5.7.2 Principals ....................................... 25
5.7.2.1 Credentials ................................. 25
5.7.2.2 ntlm ........................................ 26
5.7.2.3 digest ...................................... 26
5.7.2.4 assertion ................................... 26
Osborne et al 2
RVP
5.7.2.5 internal .................................... 26
5.7.2.6 any ......................................... 26
5.7.3 Examples ......................................... 27
5.8 Other methods ........................................ 28
6. Authentication ............................................ 29
6.1 NT Lan Manager (NTLM) ................................ 29
6.2 Digest Access Authentication ......................... 29
6.3 Example .............................................. 29
7. Headers ................................................... 30
7.1 Existing DAV/HTTP headers ............................ 30
7.2 RVP headers .......................................... 31
8. Return codes .............................................. 31
9. XML Document Type Definition .............................. 32
9.1 RVP elements ......................................... 33
9.1.1 State ............................................ 33
9.1.2 leased-value ..................................... 33
9.1.3 default-value .................................... 33
9.1.4 value ............................................ 33
9.1.5 online ........................................... 33
9.1.6 offline .......................................... 33
9.1.7 away ............................................. 34
9.1.8 busy ............................................. 34
9.1.9 back-soon . ...................................... 34
9.1.10 on-phone ...................................... 34
9.1.11 at-lunch ...................................... 34
9.1.12 view-id ....................................... 34
9.1.13 principal ..................................... 34
9.1.14 rvp-principal ................................. 34
9.1.15 email ... ..................................... 34
9.1.16 mobile-state .................................. 35
9.1.17 mobile-description ............................ 35
9.1.18 notification .................................. 35
9.1.19 propnotification .............................. 35
9.1.20 message ....................................... 35
9.1.21 notification-from ............................. 35
9.1.22 notification-to ............................... 35
9.1.23 msgbody ....................................... 35
9.1.24 contact ....................................... 36
9.1.25 description ................................... 36
9.1.26 mime-data ..................................... 36
10. MIME Payloads ............................................ 36
10.1 Instant Message ...................................... 36
10.2 Typing Message ....................................... 36
10.3 Application Invites .................................. 37
11. References ............................................... 37
12. Author’s Addresses ....................................... 38
3. Overview
RVP is designed to enable subscriptions and notifications within
an organization, and across a loosely coupled (federated)
constellation of organizations. These organizations may contain
large, scalable server farms, or may be small one-server
operations.
Osborne et al 3
RVP
RVP is a strict extension of HTTP/1.1. Being used on HTTP allows
RVP to leverage existing flexible and well-known technologies,
such as Firewall support, and Proxies. Also the requirements of
basic Authentication and Redirection have already been addressed
within HTTP.
4. Protocol Introduction
RVP-specific information is general transferred in new methods or
by specifying the RVP namespace in XML-formatted data within the
XML body of an HTTP protocol element. Use of XML in this way
allows an RVP server to coexist with an HTTP server. XML is used
in order to provide flexibility and extensibility.
4.1 Architecture
RVP allows for WATCHERs to obtain PRESENCE INFORMATION, for
PRESENTITYs to determine what WATCHERs are obtaining it’s
PRESENCE INFORMATION, and send INSTANT MESSAGEs to an INSTANT
MESSAGE INBOX within the current or different domain. To
accomplish this the architecture within Microsoft Exchange 2000
can be as follows (see [MODEL] and [IMPP-REQTS] for definitions
of the capitalized terms):
----------Domain A---------- ----------Domain B----------
| | | |
| -------- | | |
| |Router| | | |
| -------- | | |
| | | |
| | | |
| ---------- ---------- | | ---------- |
| | Home | | Home | | | | Home | |
| |Server 1| |Server n| | | | Server | |
| ---------- ---------- | | ---------- |
| | | |
| | | |
| ---------- ---------- |
| |Firewall|--|Firewall| |
| ---------- ---------- |
| | | |
| | | |
| ------------ ------------| | ------------ ------------|
| | Client 1 | | Client n || | | Client 1 | | Client n ||
| ------------ ------------| | ------------ ------------|
| | | |
---------------------------- ----------------------------
In the above diagram a Client consists of a PRESENTITY, WATCHER,
and/or an INSTANT INBOX. The Router is used as the main contact
point for all entities, and is used to determine which Home
Server is responsible for a certain Client. It is possible for
the Router to redirect, or proxy the requests.
Osborne et al 4
RVP
The Home Server is responsible for maintaining the current
PRESENCE INFORMATION for any PRESENTITY’s assigned to it, and for
issuing any NOTIFICATIONs of changes to a PRESENTITY’s current
online state to any SUBSCRIBERs. Any INSTANT MESSAGEs destined
for a PRESENTITY must initially be sent to the appropriate Home
Server.
The Client is used as both a PRESENTITY, and an INSTANT INBOX for
a particular PRINCIPAL. Also the Client controls any
SUBSCRIPTIONs that a PRINCIPAL may wish to issue.
4.1.1 General Interaction
For a Client to find the appropriate server to carry out actions
such as update it’s PRESENTITY’s PRESENCE INFORMATION, or send an
INSTANT MESSAGE to an INSTANT INBOX, it must first carry out a
DNS SRV record lookup for the domain. The domain could be the
domain containing the PRESENTITY, or that of another PRESENTITY.
The SRV record lookup returns the hostname of the server
responsible for that domain. If the domain SRV record is not
available, then the DNS A record for the IM server is looked up.
The Client then connects to this server as if it was the
destination Home Server, sending it the request. If the server
were a Home Server, it would handle the request. If the server
was a Router, it would either proxy the request, or use HTTP
redirection to notify the Client to connect to a specific Home
Server. To improve speed of later requests, the Client can cache
the destination server for some time.
This interaction allows for federation amongst very flexible
organizational topologies. A Client is able to find out the
PRESENCE INFORMATION, and send INSTANT MESSAGES across domains.
Also organizations can create their own topologies based on their
requirements. For example a small organization with only a few
hundred Clients could only have one server acting as the
Router/Home Server. A larger organization with several hundred
thousand Clients, can use a combination of load balancing, and
directory lookups to control access to it’s multiple Routers and
Home Servers.
4.1.2 Addressing
Addressing is achieved by the use of URLs. These URLs consists of
a hierarchy of nodes, with each node representing an entity. This
entity may be a PRESENTITY, WATCHER or INSTANT INBOX, or a
combination of all three. This hierarchy can be organized so that
different entities are grouped together. For example all human
PRINCIPALS could be grouped together as follows:
http://im.somedomain.com/instmsg/aliases/roberto
http://im.somedomain.com/instmsg/aliases/lorrainec
Osborne et al 5
RVP
Another example would be to group stock information as follows:
http://im.somedomain.com/information/stock/companyA
http://im.somedomain.com/information/stock/companyB
Also devices such as printers, or cell phones could be grouped as
follows:
http://im.somedomain.com/devices/printers/floor1prn
http://im.somedomain.com/devices/cellphones/555-1234
There are two types of URL, logical and physical. A logical URL
is the default that should be used, and determines which domain
that node is located. For example, one possible mapping of an
email address andyo@domain1.com maps to the logical URL of
http://im.domain1.com/instmsg/aliases/andyo.
A physical URL may be the same as a logical URL, or it could
provide extra information as to which Home Server is responsible
for the entity. A physical URL is used when a Router redirects
requests for a certain entity. For example, if the email address
kevinf@domain2.com is within a domain with a Router and several
Home Servers, any requests to the Router would be redirected to
the physical URL
http://imhome1.domain2.com/instmsg/local/im.domain2.com/instmsg/a
liases/kevinf. This physical URL would then be used to access the
node at the Home Server imhome1.domain2.com.
4.2 Authentication
Users may authenticate to their Home Server, but this is not
required. Each request may contain user credentials, using HTTP
syntax, in order to authenticate the user to the server that will
actually process the request. See section 5.0 Authentication, for
more information.
Upon receiving a request for the modification of information, the
server processing the request must validate the authentication
and honor any access control list entries, which might gate the
completion of the request. See section 4.7 on the ACL method for
more information.
Return codes in HTTP style are provided for indicating
insufficient access rights.
4.3 Examples
Throughout this document, several examples have been given,
almost all relate to Instant Messaging and Presence. However this
is not the only use to which RVP can be applied, and is only
presented, as it is a well-understood application. RVP could be
used for many other uses that require subscriptions, and
notification of when an event has occurred, such as a stock price
Osborne et al 6
RVP
reaching a certain value, process completion, and inventory
alerts.
5. Protocol Methods
5.1 SUBSCRIBE
The SUBSCRIBE method, adopted from General Event Notification
Architecture Base [GENA] establishes subscriptions of a WATCHER
to a resource; the WATCHER can receive notifications intended for
that resource or notifications of property changes on that
resource. For example, an RVP WATCHER will SUBSCRIBE to the
online status of PRINCIPALs on the PRESENTITY’s contact list; the
WATCHER is notified when the online status of these PRINCIPALs
changes.
5.1.1 Subscription IDs
PRESENCE SERVICEs must return a Subscription-Id header with
successful subscriptions. The header contains a number unique to
that subscription, and must be referenced in all future
interactions involving that subscription, both by the PRESENCE
SERVICE and the WATCHER.
5.1.2 Leased subscriptions
Subscriptions can be static (permanent, unless explicitly removed
by an UNSUBSCRIBE) or leased (temporary). The Microsoft Exchange
2000 implementation does not accept static subscriptions, and
will return an error response. Leased subscriptions are used to
keep subscriptions on a resource “relevant”: subscriptions that
are not explicitly renewed expire. For example, a WATCHER may
subscribe to a PRESENTITY’s online status for a period of 1 day;
if the WATCHER remains offline for an extended period after
establishing this subscription, the subscription expires and the
PRESENTITY’s PRESENCE SERVICE does not incur any overhead to
maintain an unneeded subscription.
The Subscription-Lifetime header in a SUBSCRIBE request to a
PRESENCE SERVICE indicates the lifetime for a leased subscription
in seconds. If the PRESENCE SERVICE response to a leased
subscription request includes a Subscription-Lifetime header then
the subscription will expire after this interval of time. (To
manage load, a PRESENCE SERVICE may choose a lifetime different
from the one requested.) The absence of a Subscription-Lifetime
header in the response indicates that the subscription is
permanent.
To refresh a leased subscription, WATCHERs issue new SUBSCRIBE
requests with the Subscription-Id and the Subscription-Lifetime
headers.
5.1.3 Notification types
Osborne et al 7
RVP
Any RVP node can serve as a notification sink: a destination for
notifications. For example, when an RVP PRESENTITY logs on, the
PRINCIPAL’s URL (e.g.
http://im.example.com/instmsg/aliases/stevem”) can be sent
arbitrary notifications, by other RVP entities (e.g. RVP PRESENCE
SERVICE or PRINCIPALs). Subscriptions can be made on notification
sinks: A group node such as http://im.example.com/groups/rec-
cycling can act as a notification sink; members of the group
would subscribe to this node. Notifications to the sink node are
passed along to subscribers of that sink.
RVP entities may also wish to be notified of property changes at
other nodes. For example, if PRINCIPAL A has PRINCIPAL B on her
contact list, A will subscribe to the properties of PRINCIPAL B
(which includes PRINCIPAL B’s “online-status” property), so that
A can be notified when the “online-status” property changes. The
Notification-Type header in a SUBSCRIBE request lets the
requester specify whether it is interested in subscribing to
property changes at the destination node (if the header value is
update/propchange) or in general notifications at the destination
node sink (if the header value is pragma/notify).
5.1.4 Notification delivery
To request asynchronous callbacks, a Call-Back header is provided
with the URL for the resource that will receive the callback.
The callback URL may be either the PRINCIPAL’s Public URL, or one
hosted by the WATCHER itself. The Public URL is used to allow
notifications to be routed through the PRESENCE SERVICE. The
callback hosted by the WATCHER itself is used to allow
notifications to be routed from the PRESENCE SERVICE to the
WATCHER.
For example, the WATCHER on machine stevem1.example.com may
SUBSCRIBE to http://im.example.com/instmsg/aliases/stevem and
provide a Call-Back that looks like http://198.176.154.132:1234.
The WATCHER may also SUBSCRIBE to
http://im.acme.com/instmsg/aliases/bruceb and provide a Call-Back
of http://im.example.com/instmsg/aliases/stevem. The difference
in the form of the Call-Back (i.e. IP address vs URL) is to
ensure that any requests from outside the domain, do not attempt
to connect to the client directly.
Any changes to Bruce’s properties will result in a notification
being sent to http://im.example.com/instmsg/aliases/stevem. Also
any Instant Messages will be sent to this same node. When
im.example.com receives any notifications for this node, it will
route them to the Call-Back of http:// 198.176.154.132:1234.
This ensures that only the PRESENTITY’s Home Server is aware of
it’s IP address, and all notifications are routed through it.
Osborne et al 8
RVP
Such notifications are delivered through NOTIFY requests. (In
the above example, the PRESENCE SERVICE makes a NOTIFY request to
the WATCHER.)
5.1.5 Changing/discarding subscriptions
To change a subscription’s characteristics other than it’s
lifetime, a WATCHER must UNSUBSCRIBE then SUBSCRIBE with the new
settings.
RVP servers must not discard subscriptions that it determines are
duplicates of each other; such subscriptions are independently
managed by their Subscription-Id.
5.1.6 Response
In response to a successful SUBSCRIBE for a Notification-Type of
pragma/notify, the PRESENCE SERVICE will return a response code
of 200 – Successful. The response headers contain details of the
successful subscription, including the Subscription-Id and the
Subscription-Lifetime which may be different than that requested.
In response to a successful SUBSCRIBE for a Notification-Type of
update/propchange, the PRESENCE SERVICE will return a response
code of 207 – Multi Status. The response headers will contain the
details of the successful subscription, as described above. There
may also be an XML body containing the current values for the
properties requested.
When refreshing a lease, a successful response from the PRESENCE
SERVICE will return a response code of 200 – Successful. Again,
this will contain details of the Subscription-Id and the
Subscription-Lifetime which may be different than that requested.
5.1.7 Examples
5.1.7.1 Login Subscription
When a PRESENTITY logs on, it may create a “local node” and an
associated URL. For example, suppose a PRINCIPAL
http://im.acme.com/instmsg/aliases/bruceb runs a PRESENTITY on
machine 198.176.154.132. When the PRESENTITY logs on, it creates
a local node http://198.176.154.132:1234. Assuming the PRINCIPAL
is hosted on server “im.acme.com”, the PRESENTITY would set up a
“login subscription” to the node
http://im.acme.com/instmsg/aliases/bruceb , specifying the local
node as the callback.
>> Request
SUBSCRIBE /instmsg/aliases/bruceb HTTP/1.1
Subscription-Lifetime: 14400
Notification-Type: pragma/notify
Call-Back: http://198.176.154.132:1234
Osborne et al 9
RVP
RVP-Notifications-Version: 1.0
Host: imhome1.acme.com
Content-Length: 0
RVP-From-Principal: http://im.acme.com/instmsg/aliases/bruceb
>> Response
HTTP/1.1 200 Successful
Subscription-Id: 98210
Subscription-Lifetime: 14400
RVP-Notifications-Version: 1.0
5.1.7.2 Property Subscription
In this example, the PRINCIPAL in the above example makes a
permanent subscription to the properties of node
http://im.example.com/instmsg/aliases/stevem. In this example the
Call-back is the logical URL of the subscriber – bruceb. This
allows for greater protection, but does mean that bruceb has to
have SUBSCRIBEd to his logical node on im.acme.com to have the
property updates forwarded.
>> Request
SUBSCRIBE http://im.example.com/instmsg/aliases/stevem HTTP/1.1
Subscription-Lifetime: 14400
Notification-Type: update/propchange
Call-Back: http://im.acme.com/instmsg/aliases/bruceb
RVP-Notifications-Version: 1.0
Host: im.example.com
Content-Length: 0
RVP-From-Principal: http://im.acme.com/instmsg/aliases/bruceb
>> Response
HTTP/1.1 207 Multi-Status
Subscription-Id: 79
Subscription-Lifetime: 14400
Content-Type: text/xml
Content-Length: XXXX
RVP-Notifications-Version: 1.0
http://im.example.com/instmsg/aliases/stevem
Steve
stevem@example.com
Osborne et al 10
RVP
0
HTTP/1.1.200.Successful
5.2 UNSUBSCRIBE
The UNSUBSCRIBE method, adopted from [GENA], is used to remove
subscriptions established using SUBSCRIBE requests. The
Subscription-Id is used to specify uniquely which subscription
should be cancelled.
It is up to the PRESENCE SERVICE implementation to decide who can
cancel subscriptions.
5.2.1 Example
A WATCHER decides that they no longer to wish receive updates for
a stock.
>> Request
UNSUBSCRIBE /stock/companyA HTTP/1.1
Host: im.stockquotes.com
RVP-Notifications-Version: 1.0
RVP-From-Principal: http://im.acme.com/instmsg/aliases/bruceb
Subscription-Id: 1234
Content-Length: 0
>> Response
HTTP/1.1 200 Successful
RVP-Notifications-Version: 1.0
5.3 SUBSCRIPTIONS
The SUBSCRIPTIONS method, a new RVP method, fetches a list of
active subscriptions on a node at a server. Possible uses include
viewing membership of distribution lists or RVP PRESENTITYs
viewing the list of WATCHERs watching their online status.
The request contains the Notification-Type of the subscriptions
(update/propchange or pragma/notify) that the requester is
interested in (this was the Notification-Type sent in the
corresponding SUBSCRIBE calls to establish each subscription).
The reply contains a list of subscriptions in the XML body. Each
subscription contains the Subscription-Id of the subscription,
the subscriber URL (if available), and the time remaining, in
seconds, for that subscription.
Osborne et al 11
RVP
SUBSCRIPTIONS use the new RVP XML elements “subscriptions”,
“subscription”, “subscription-id”, “timeout”, and “rvp-
principal”.
5.3.1 Example
>>Request
SUBSCRIPTIONS /lists/sales-event HTTP/1.1
Host: im.example.com
RVP-Notifications-Version: 1.0
Notification-Type: update/propchange
RVP-From-Principal: http://im.acme.com/instmsg/aliases/bruceb
>>Response
HTTP/1.1 200 Successful
RVP-Notifications-Version: 1.0
Content-Type: text/xml
Content-Length: XXXX
456
http://im.example.com/instmsg/aliases/bruceb
http://im.example.com/instmsg/aliase
s/bruceb
4789
http://im.example.com/instmsg/aliases/stevem
6656
http://im.example.com/instmsg/aliase
s/stevem
8752
Osborne et al 12
RVP
5.4 PROPFIND
The PROPFIND DAV method is used to get a node’s properties.
Properties contain tuples of PRESENCE INFORMATION, such as the
online status, or the display name of the represented PRINCIPAL.
For RVP, the PROPFIND method is used to get other PRINCIPAL’s
online status from their respective home servers. This method may
also be used to fetch other properties an RVP implementation may
maintain, such as persistent contact lists stored on servers.
The PROPFIND method retrieves properties defined on the requested
URL. A PRESENTITY submits a propfind XML element in the body of
the request method describing what information is being
requested. It is possible to request particular property values,
all property values, or a list of the names of the resource’s
properties. A PRESENTITY must submit a body with at least one
property.
If there is an error retrieving a property then a proper error
result MUST be included in the response. A request to retrieve
the value of a property that does not exist is an error and MUST
be noted, if the response uses a multistatus XML element, with a
response XML element that contains a 404 Not Found status value.
Each response XML element MUST contain an href XML element that
identifies the resource on which the properties in the prop XML
element are defined. Results for a PROPFIND on a resource with
internal members are returned as a flat list whose order of
entries is not significant.
While DAV allows PROPFINDs at depths 0, 1, or “infinity”, with
“infinity” being the default, RVP requires a depth header of 0.
This is due to difficulties in supporting this for namespaces
implemented in a distributed fashion.
If the Depth header is not present or depth argument is not 0,
RVP PRESENCE SERVICEs return status code 412 (Precondition
Failed).
5.4.1 Example
The following example retrieves the displayname property of an
RVP PRESENTITY.
>>Request
PROPFIND /instmsg/aliases/stevem HTTP/1.1
Host: im.example.com
RVP-Notifications-Version: 1.0
RVP-From-Principal: http://im.example.com/instmsg/aliases/stevem
Depth: 0
Content-type: text/xml
Content-Length: XXXX
Osborne et al 13
RVP
>>Response
HTTP/1.1 207 Multi-Status
Content-Type: text/xml
Content-Length: XXXX
RVP-Notifications-Version: 1.0
http://im.example.com/instmsg/aliases/stevem
Steve Morgan
HTTP/1.1 200 OK
5.5 PROPPATCH
The PROPPATCH DAV method is used to set a node’s properties. For
RVP, this method can be used to set a PRINCIPAL’s online status
on a PRESENCE SERVICE or to set other properties maintained by an
RVP implementation. For example, when a PRESENTITY “logs on”,
the PRESENTITY will issue a PROPPATCH to the PRESENTITY’s home
server to set the “online-status” property to “online”.
RVP introduces the notion of “leased properties”. Leased
property values automatically reset to a default value after a
timeout period. They can be used to implement buddy list online
status – a PRESENTITY’s online status can reset itself to the
offline state unless refreshed. This is useful for scenarios
involving client crashes, network failures, etc. that necessitate
resetting a PRESENTITY’s status to offline.
All RVP properties can have leased values, though RVP
implementations may disallow leasing the values of particular
properties.
Osborne et al 14
RVP
PRESENTITYs get and set leased values in the exact same fashion
as they do regular DAV properties - it is up to the PRESENCE
SERVICE to recognize and interpret leased values and enforce
their behavior
An RVP PRESENCE SERVICE may decline to set a property value if
the requested timeout is not permitted by its admin policy.
As there may be multiple PRESENTITYs setting properties for a
certain node (i.e. User logs in from multiple machines), the XML
schema allows for a view identifier element to be specified in
the PROPPATCH requests and responses. This allows state changes
to be replicated amongst all PRESENTITYs, and certain states to
be specific to a PRESENTITY.
For example if a PRINCIPAL has multiple PRESENTITYs logged in,
any state changes to be “busy”, or “out to lunch”, will result in
all PRESENTITYs being notified of this status change. However if
a certain PRESENTITY became offline or idle, then no other
PRESENTITYs would be notified of this status change, and the
PRINCIPAL would remain online at a different PRESENTITY.
When a PROPPATCH request does not contain a view identifier, a
successful response will include one. This identifier is unique
to that leased property, and any subsequent PROPPATCH requests
that specify the view identifier. If all leased properties, with
that view identifier, expire then it is no longer valid and
should not be used.
5.5.1 Example
This example sets the “online-status” value of an RVP PRESENTITY
to “online”, for an interval of 1 hour. Unless the property is
subsequently reset by the PRESENTITY, the PRESENCE SERVICE will
revert the “online” value to “offline” after 1 hour.
>>Request:
PROPPATCH /instmsg/aliases/stevem HTTP/1.1
Host: im.example.com
RVP-Notifications-Version: 1.0
RVP-From-Principal: http://im.example.com/instmsg/aliases/stevem
Content-Type: text/xml
Content-Length: XXXX
Osborne et al 15
RVP
3600
>>Response:
HTTP/1.1 207 Multi-Status
RVP-Notifications-Version: 1.0
Content-Type: text/xml
Content-Length: XXXX
http://im.example.com/instmsg/aliases/stevem
3600
3577
HTTP/1.1 200 OK
5.5.2 Implementation considerations
An RVP PRESENTITY will use the PROPPATCH method, with leased
values, to keep its online-status property “online”. The
PRESENTITY will use some timeout value, t, which will make the
Osborne et al 16
RVP
PRESENCE SERVICE revert the online-status property to “offline”
after t has elapsed.
If the PRINCIPAL continues to be “logged in” at the PRESENTITY,
the PRESENTITY should refresh the online-status property by
issuing another PROPPATCH before t has expired, and getting a new
lease for interval t on the property. Therefore, if t=30
minutes, the PRESENTITY should issue another PROPPATCH at ~29
minutes. Otherwise, if the PRESENTITY issues a PROPPATCH at 30
minutes, there is a chance that the new PROPPATCH will reach the
PRESENCE SERVICE just after the first lease expires. In this
case, any subscribers to the PRINCIPAL’s online status (e.g. all
WATCHERs who have this PRINCIPAL on their contact list) would get
spurious notifications – one for the PRINCIPAL logging off, and
another one just after for the PRINCIPAL logging back on.
Several considerations determine the appropriate value of t that
should be used. If the PRESENTITY were to OUT OF CONTACT (e.g.
the PRESENTITY computer crashes), the PRESENCE SERVICE has no way
of knowing that the PRESENTITY has gone down, and the PRINCIPAL’s
online-status property would remain online until the lease
expires. Thus, t bounds the time interval for which WATCHERs
continue to see the PRINCIPAL as “online”, even though the
PRINCIPAL is offline. Keeping status “fresh” at WATCHER’s
contact lists requires that t be small – ideally close to 0.
However, if the PRINCIPAL is logged on, the PRESENTITY must
reissue PROPPATCHes at intervals less than t, to maintain online
status. Thus, every logged-in PRESENTITY consumes resources at
a PRESENCE SERVICE; the PRESENTITY effectively “pings” the
PRESENCE SERVICE at intervals less than t. This also generates
network traffic, even under “idle” conditions. For a PRESENCE
SERVICE with thousands of PRESENTITYs logged on, this load can be
considerable. To keep the ping load under control, t should be
kept as large as possible without degrading the PRINCIPAL
experience.
The Microsoft Exchange 2000 Instant Messaging implementation uses
an interval of 20 minutes.
5.6 NOTIFY
The NOTIFY RVP method, adopted from [GENA], sends asynchronous
notifications to an RVP node – a “notification sink”.
When a WATCHER A issues a SUBSCRIBE to property changes on
another PRINCIPAL B, via a Home Server, WATCHER A receives NOTIFY
requests of property changes to PRINCIPAL B.
NOTIFYs can also be issued without prior subscriptions being
established. For instance, assuming the correct access control
permissions, any entity can send a NOTIFY message to a group node
such as “http://im.example.com/groups/rec-cycling”; the group
node need not SUBSCRIBE to any other node.
Osborne et al 17
RVP
A “notification” XML element in the request body contains the
notification data.
Within an intranet, NOTIFY will be commonly used by home servers
to send notifications to their INSTANT MESSAGE INBOXs. NOTIFY
will also be used by PRESENCE SERVICEs to send online status
changes for PRESENTITYs hosted by them to other PRESENCE
SERVICES.
As the sender of a NOTIFY may require acknowledgement of
delivery, the successful response will be issued once delivery
has been completed. To determine when the sender of a NOTIFY is
satisfied delivery has been completed and an acknowledgement is
required, a new header field RVP-Ack-Type exists. This can
contain the following information.
SingleHop: This indicates the sender only wishes
acknowledgement when the initial receiver (e.g. Home
server) receives the NOTIFY.
DeepOr: This indicates the sender only wishes
acknowledgement when one of the final destinations
receives the NOTIFY. An example of this use is when
a user sends an INSTANT MESSAGE to a principal, or a
printer runs out of paper and requires that one of
the system administrators are notified.
DeepAnd: This indicates the sender only wishes
acknowledgement when all of the final destinations
receive the NOTIFY. An example of this use is when
sending to a group or distribution list, and there
are multiple WATCHERs awaiting NOTIFYs.
Also in the request, an additional field is the RVP-Hop-Count.
This is a 1-based indication how many hops have occurred to
produce this request.
E.g. Client->Server RVP-Hop-Count = 1
Server->Server RVP-Hop-Count = 2
Server->Client RVP-Hop-Count = 3
NOTIFY uses new RVP XML elements -- “Message”,
“propnotification”, “notification-from”, “notification-to”,
“contact”, “description”, “msgbody” and “mime-data”.
5.6.1 Examples
Sending an Instant Message
A PRESENTITY “http://im.example.com/instmsg/aliases/stevem” sends
an instant message to an INSTANT MESSAGE INBOX of
“http://im.acmewidgets.com/instmsg/aliases/bruceb.
>>Request
Osborne et al 18
RVP
NOTIFY /instmsg/aliases/bruceb HTTP/1.1
Host: im.acmewidgets.com
RVP-Notifications-Version: 1.0
RVP-Ack-Type: DeepOr
RVP-Hop-Count: 1
RVP-From-Principal: http://im.example.com/instmsg/aliases/stevem
Content-Type: text/xml
Content-length: XXXX
http://im.example.com/instms
g/aliases/stevem
Steve Morgan
http://im.acmewidgets.com/in
stmsg/aliases/bruceb
bruce
>>Response
Osborne et al 19
RVP
HTTP/1.1 200 Successful
RVP-Notifications-Version: 1.0
Sending notification of PRINCIPAL property changes
A PRINCIPAL “http://im.example.com/instmsg/aliases/stevem” is on
the contact list of “http://im.acmewidgets.com/users/bruceb, and
“bruceb” has subscribed to the online status of “stevem”. When
“stevem” logs on, a NOTIFY is sent to “bruceb”:
>>Request
NOTIFY / HTTP/1.1
RVP-Hop-Count: 2
RVP-Notifications-Version: 1.0
Host: 128.1.1.11
Content-Length: XXXX
Content-Type: text/xml
RVP-From-Principal: im.example.com
http://im.example.com/instmsg/a
liases/stevem
http://im.acmewidgets.com/instm
sg/aliases/bruceb
Osborne et al 20
RVP
>>Response
HTTP/1.1 200 Successful
RVP-Notifications-Version: 1.0
Notification application: Package tracking
Here is another NOTIFY example, but more complex.
The application is the package tracker. Shipment data is
expressed as XML data structures on the web server. The WATCHER
is interested in being notified when the package has been
delivered.
In addition, “shipment events” notifications are also defined by
an XML schema. The total shipment record or “manifest” is set of
information which includes a collection of “shipment events”.
“Shipment Event” DTD snippet:
eventType( “PICKUP” | “HUB_TRANSITION” | “DELIVERY” )
eventTime( #PCDATA)
eventDate( #PCDATA)
eventComment( #PCDATA)
mEvent ( eventType, eventTime, eventDate, eventComment)
“manifest” DTD snippet:
mTrackNo( #PCDATA)
pName (#PCDATA)
pAddress(#PCDATA)
pPhone(#PCDATA)
mShipper ( pName, pAddress, pPhone )
mDestination (pName, pAddress, pPhone )
manifest(mTrackNo, mShipper, mDestination, mEvent+)
In this example, the notification schema is mEvent or “shipment
event”. The fact that mEvent is a component of “manifest” is
convenient, but not necessary.
The server will provide the manifest record ( which is the actual
content here) along with the event notification.
TrackNo: 12345
The package data resides on www.package.com
The event that we are delivering is:
DELIVER
13:45 PST
03/24/98
Signed for by J Cohen
WATCHER opens a connection to www.package.com
Osborne et al 21
RVP
>>> WATCHER->PRESENCE SERVICE
SUBSCRIBE http://www.package.com/shipments/12345/delivery_status/
HTTP/1.1
Host: www.package.com
RVP-Notifications-Version: 1.0
Notification-Type: pragma/notify
Call-Back: http://shipper.com:5150/
RVP-From-Principal: http://shipper.com/instmsg/aliases/bruceb
>>> PRESENCE SERVICE->WATCHER
HTTP/1.1 200 Successful
RVP-Hop-Count: 1
RVP-Notifications-Version: 1.0
Server: Big_Database/1.0
Subscription-Id: 9A504
(PRESENCE SERVICE closes connection)
… time elapses, package is delivered, “J Cohen” signs for it.
PRESENCE SERVICE opens a connection to “call-back:”
http://shipper.com:5150/
>>> PRESENCE SERVICE->WATCHER
NOTIFY / HTTP/1.1
Host: shipper.com:5150
RVP-Notifications-Version: 1.0
RVP-Ack-Type: DeepOr
Subscription-Id: 9A504
Content-Type: text/xml
Content-Length: xxxx
DELIVER
13:45 PST
03/24/98
Signed for by J Cohen eventComment>
12345
CDNOW
100 any street, anytown, USA
Osborne et al 22
RVP
111-555-1212
Josh Cohen
100 any other street, anyother town,
USA
999-555-1212
PICKUP
13:45 PST
03/2 0/98
Picked up from CDNOW shipping room
HUB_TRANSITION
09:45 PST
03/21/98
Dropped, smashed
DELIVER
13:45 PST
03/24/98
Signed for by J Cohen
(end of notification data from notification PRESENCE SERVICE to
WATCHER)
>>> WATCHER->PRESENCE SERVICE
HTTP/1.1 200 Successful
RVP-Notifications-Version: 1.0
Server: PackageClient/1.0
(WATCHER closes connection)
5.7 ACL
This is based on WEBDAV ACL specification [WEBDAV-ACL], and has a
few additions to the XML schema. An access control list (ACL) is
used to determine who can access, and update information on a
Osborne et al 23
RVP
node. An example of its use is to restrict the ability for a
WATCHER to see if a PRESENTITY is “online”.
The namespace for RVP ACL is slightly different than that for
WEBDAV-ACL, as several elements are not required, or several new
ones have been added. The namespace is
http://schemas.microsoft.com/rvp/acl/
5.7.1 Access rights
The elements that define rights that are supported are read,
write, readacl, writeacl, and all.
The access rights that are not supported are writeowner, delete,
createchild and deletechild.
The new access right elements have a parent of either allow or
deny, and are specified below.
Name: send-to
Purpose: The send-to right determines who is allowed to send
“NOTIFY” methods to a given node.
Values: none
Name: presence
Purpose: To determine who is allowed access to presence
information
Values: None
Name: list
Purpose: To determine who is allowed to list properties
Values: None
Name: receive-from
Purpose: To determine who is allowed to receive notifications
and subscription notifications
Values: None
Name: subscriptions
Purpose: To determine who is allowed to access the list of
subscriptions
Values: None
Name: subscribe-others
Purpose: To determine who is allowed to subscribe to
properties and notifications using unrecognized
callbacks
Values: None
5.7.2 Principals
All PRINCIPALs within RVP have a unique identifier, which is
their logical URL. To identifier this PRINCIPAL within the ACL,
each tag pair must contain one and only
Osborne et al 24
RVP
one child, and one and only one
child.
Name: rvp-principal
Parent:
Purpose: To encapsulate an RVP URL, and to keep it distinct
from any other PRINCIPAL representation—whatever
that may be.
Values: Any valid RVP PRINCIPAL identifier. (Either a
PRINCIPAL identifier like
“http://im.acme.com/instmsg/bruceb” or an PRESENCE
SERVICE identifier like “im.acme.com.”) Null values
are not permitted. White space surrounding an RVP
PRINCIPAL identifier will be stripped by the
PRESENCE SERVICE. The PRESENCE SERVICE will never
generate white space in an . It is
important to note that there is no form of
“Principal inheritance” (i.e. im.example.com is not
a superset of http://im.example.com/instmsg/bruceb)
If a PRINCIPAL connects using credentials other than those listed as
acceptable in the element, either explicitly or
implicitly (as part of an element,) the PRINCIPAL should be
treated as if the PRINCIPAL wasn’t listed in the ACL at all. If no
credentials are specified, or if is null, the ACL
manipulation must be rejected with a “400 credentials not specified”.
5.7.2.1 credentials
Definition:
Parent:
Purpose: To uniquely identify the credentials a PRINCIPAL
must present.
Values: Any set of one or more valid credentials identifiers
(currently any combination of “
” or “”)
5.7.2.2 ntlm
Definition:
Purpose: To indicate that a PRINCIPAL must satisfy an NTLM
challenge from the PRESENCE SERVICE. The PRESENCE
SERVICE should not check for the specified
PRINCIPAL’s existence when the ACL is set.
Values: none
5.7.2.3 digest
Definition:
Purpose: To indicate that a PRINCIPAL must satisfy a digest
challenge from the PRESENCE SERVICE. The PRESENCE
Osborne et al 25
RVP
SERVICE should not check for the specified
PRINCIPAL’s existence when the ACL is set.
Values: none
5.7.2.4 assertion
Definition:
Purpose: To indicate that a PRINCIPAL doesn’t need to present
credentials to prove it’s identity.
Values: none
5.7.2.5 internal
Definition:
Purpose: To indicate that a PRINCIPAL must prove its identity
via some PRESENCE SERVICE dependent out-of-band
mechanism
Values: none
5.7.2.6 any
Definition:
Purpose: To indicate that a PRINCIPAL presenting any valid
credentials should be considered to be this
PRINCIPAL.
Values: none
AllAuthPrincipals, a generic aggregate PRINCIPAL which represents
all PRINCIPALs who have provided some form of authentication is
redundant with the identifier, and is not
supported.
5.7.3 Examples
When a PRESENTITY starts it needs to obtain the ACLs for the
current PRINCIPAL. The following example shows that all WATCHERs
are allowed to be notified of the PRINCIPALs presence, and send
notifications except for
http://im.example.com/instmsg/aliases/steveb. It also shows that
the PRINCIPAL known by http://im.acme.com/instmsg/aliases/bruceb
is allowed all rights to his own node.
>>Request
ACL /instmsg/aliases/bruceb HTTP/1.1
RVP-Notifications-Version: 1.0
Host: im.acme.com
Content-Length: 0
RVP-From-Principal: http://im.acme.com/instmsg/aliases/bruceb
>> Response
Osborne et al 26
RVP
HTTP/1.1 200 Successful
Content-Type: text/xml
Content-Length: XXXX
RVP-Notifications-Version: 1.0
none
http://im.example.com/instmsg/ali
ases/steveb/
http://im.acme.com/instmsg/a
liases/bruceb
Osborne et al 27
RVP
5.8 Other methods
The HTTP methods of GET, HEAD, POST, PUT are not supported, and
should return 501 – Not Implemented if received.
The DAV methods of COPY, MOVE, LOCK, UNLOCK, OPTIONS are also not
supported. COPY, and MOVE should return error code 405 – Method
not allowed. LOCK, UNLOCK and OPTIONS should return error code
501 – Not Implemented if received.
6. Authentication
Authentication is achieved within RVP by use HTTP/1.1 methods.
This allows for the PRESENCE SERVICE to deny access to a
protected resource by returning a status code of “401
Unauthorized”, and at least one WWW-Authenticate headers
specifying a scheme that will allow authorization. Within RVP,
two schemes are allowed; NTLM (NT Lan Manager) and Digest Access
Authentication.
RVP uses HTTP challenge-response authentication mechanism, which
allows the PRESENCE SERVICE to provide the PRESENTITY with the
allowed authentication types. The PRESENTITY is then expected to
retry based on the authentication information returned.
6.1 NT Lan Manager (NTLM).
This authentication scheme is provided by Microsoft Exchange 2000
to allow a secure method of authenticating a PRESENTITY as the
username and password do not travel across the network in the
clear. More detailed information on NTLM is available at
http://msdn.microsoft.com.
6.2 Digest Access Authentication
Osborne et al 28
RVP
This authentication scheme verifies that both parties share a
secret (i.e. A password), without communicating this secret in
the clear. For more detailed information on Digest Access
Authentication, see RFC 2617 – HTTP Authentication: Basic and
Digest Access Authentication. This authentication scheme can be
used by clients on non-NTLM capable platforms, such as UNIX.
6.3 Example
The following example shows the requests and responses that allow
a PRESENTITY to authenticate a subscription to their own node. As
in the example for SUBSCRIBE, the PRINCIPAL is known as
http://im.acme.com/instmsg/aliases/bruceb. This example shows the
server denying the initial request, and specifying that the
available authentication schemes are NTLM and Digest. The client
then issues a second request using NTLM authentication.
>> Request
SUBSCRIBE /instmsg/aliases/bruceb HTTP/1.1
Subscription-Lifetime: 14400
Notification-Type: pragma/notify
Call-Back: http://198.176.154.132:1234
RVP-Notifications-Version: 1.0
Host: imhome1.acme.com
Content-Length: 0
RVP-From-Principal: http://im.acme.com/instmsg/aliases/bruceb
>> Response
HTTP/1.1 401 Access Denied
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Digest qop="auth", realm="im.acme.com",
nonce="78a8ffeeb123458a400358100000b4d0ed33ae239123441b44896487fe
da"
Content-Type: text/html
Content-Length: XXXX
RVP-Notifications-Version: 1.0
>> Request
SUBSCRIBE /instmsg/aliases/bruceb HTTP/1.1
Subscription-Lifetime: 14400
Notification-Type: pragma/notify
Call-Back: http://198.176.154.132:1234
RVP-Notifications-Version: 1.0
Host: imhome1.acme.com
Content-Length: 0
Authorization: NTLM
TlRMTVNTUAADABCDGAAYAF4AAAAYABgAdgAAAAAAAABABCDDgAOAEAAAAAQABAATg
AAAAAAAACOAAAABYKAgHIAbwBiAGUAcgB0AG8AUgBPAEIARQBS
>> Response
Osborne et al 29
RVP
HTTP/1.1 200 Successful
Subscription-Id: 98210
Subscription-Lifetime: 14400
RVP-Notifications-Version: 1.0
7.0 Headers
7.1 Existing DAV/HTTP headers
Implementations may ignore all DAV-specific headers unless
otherwise mentioned.
DAV header
Since the current version of the protocol is only partially DAV-
compliant, this header is never returned by servers and is
ignored in requests.
Depth header
This is only supported with depth value of 0 in the PROPFIND
method, where it is required.
7.2 New RVP headers
RVP-Notifications-Version
This is the version number of the notifications protocol. Every
request and response must include this header.
Call-Back
This header, adopted from [GENA], is contained in SUBSCRIBE
method, and gives a URL for async NOTIFY callbacks for
subscription notifications.
Subscription-Id
This header, adopted from [GENA], is contained in SUBSCRIBE
requests/responses, and NOTIFY, and UNSUBSCRIBE requests. It
gives the unique identifier for a subscription.
Subscription-Lifetime
This is adopted from [GENA], and is used in the SUBSCRIBE method,
it indicates the requested (in the request) and actual (in the
response) subscription timeouts (if the subscription is leased).
Notification-Type
This header, adopted from [GENA], is contained in a SUBSCRIBE
method; it indicates the type of notifications desired (within
the GENA framework).
Osborne et al 30
RVP
Values can be update/propchange or pragma/notify, and is
extensible to other values.
RVP-Ack-Type
This determines when the sender of a NOTIFY is satisfied delivery
has been completed and an acknowledgement is required. It can
have the values SingleHop, DeepOr, or DeepAnd.
RVP-Hop-Count
This is used to indicate how many hops (including the source of
the NOTIFY, i.e. initially set to 1) have occurred to produce
this request.
RVP-From-Principal
Indicates where the method originates, and is typically the
logical URL of the sender.
8. Return codes
RVP uses several existing HTTP return codes, and several from
DAV. The return codes that are generally used are as follows.
200 Successful
This is used to indicate that the request has been successfully
carried out.
207 Multi-Status
The default 207 (Multi-Status) is normally received is response
to a PROPPATCH, or PROPFIND. Its body is a text/xml HTTP entity
that contains a single XML element called multistatus, which
contains a set of XML elements called response which contain 200,
300, 400, and 500 series status codes generated during the method
invocation.
302 Object moved
This is used to indicate that the requested node is not
maintained by that server. The response will include the new URL
for that node. A response of this type is typically received is
response to a request to a Router.
401 Access denied
When attempting to access a node that is protected, the PRESENCE
SERVICE will respond with this return code. The response headers
will contain details of available authorization schemes.
412 Precondition Failed
Osborne et al 31
RVP
The request could not be applied to the requested node. An
example of its use is when attempting to send an Instant Message
to a PRINCIPAL who is no longer available.
500 Internal Server Error
An example of this use is when a PRINCIPAL has left a discussion
with multiple PRINCIPALs. When the PRINCIPALs INSTANT MESSAGE
INBOX receives a notification for this session, it would use this
return code. The sender of the INSTANT MESSAGE would then be able
to indicate that the PRINCIPAL has left the conversation.
9. XML Document Type Definition
DAV elements
The elements that are used from DAV are as follows:
set
prop
timeout
displayname
subscription
subscription-id
href
subscriptions
multistatus
response
propstat
propertyupdate
9.1 RVP elements
The elements provided by RVP are as follows:
9.1.1 state
Definition:
Parent: DAV:
Purpose: To indicate the current state information for the
node.
9.1.2 leased-value
Definition:
Parent:
Purpose: To indicate the current leased values status
9.1.3 default-value
Definition:
Parent:
Osborne et al 32
RVP
Purpose: To indicate the current default status of the node
(currently one of “ ”
or )
9.1.4 value
Definition:
Parent:
Purpose: To indicate the current status of the node
(currently one of “ ”
or )
9.1.5 online
Definition:
Parent: |
Purpose: To indicate the online status
9.1.6 offline
Definition:
Parent: |
Purpose: To indicate the offline status
9.1.7 away
Definition:
Parent: |
Purpose: To indicate the away status
9.1.8 busy
Definition:
Parent: |
Purpose: To indicate the busy status
9.1.9 back-soon
Definition:
Parent: |
Purpose: To indicate the back soon status
9.1.10 on-phone
Definition:
Parent: |
Purpose: To indicate the on the phone status
9.1.11 at-lunch
Definition:
Parent: |
Purpose: To indicate the at lunch status
Osborne et al 33
RVP
9.1.12 view-id
Definition:
Parent:
Purpose: A unique identifier for updates to a node
9.1.13 principal
Definition:
Parent:
Purpose: Container for details about the PRINCIPAL
9.1.14 rvp-principal
Definition:
Parent
Purpose: To detail the logical URL for a PRINCIPAL
9.1.15 email
Definition:
Parent: DAV:
Purpose: Contains details of the PRINCIPAL’s email address
9.1.16 mobile-state
Definition:
Parent: DAV:
Purpose: Determines if PRINCIPAL’s mobile is online
9.1.17 mobile-description
Definition:
Parent: DAV:
Purpose: Description of PRINCIPAL’s mobile (e.g. Cell phone
number)
9.1.18 notification
Definition:
Parent: None
Purpose: To indicate an instant message, or update to
PRINCIPAL’s state has occurred
9.1.19 propnotification
Definition:
Parent:
Purpose: To indicate a change in PRINCIPAL’s state
9.1.20 message
Osborne et al 34
RVP
Definition:
Parent:
Purpose: To indicate that a instant message has been sent, or
received
9.1.21 notification-from
Definition:
Parent: |
Purpose: To indicate who the notification or message is from
9.1.22 notification-to
Definition:
Parent: |
Purpose: To indication who the notification or message is
destined for
9.1.23 msgbody
Definition:
Parent:
Purpose: Contains the MIME encoded message that needs to be
sent
9.1.24 contact
Definition:
Parent: |
Purpose: To detail how to contact the PRINCIPAL
9.1.25 description
Definition:
Parent:
Purpose: To describe the contact
9.1.26 mime-data
Definition:
Parent:
Purpose: Contains the actual Instant Message to be sent or
received.
10 MIME Payloads
The are three types of payloads that can be delivered within the
mime-data of an notification. The following are details of each
of these payloads.
10.1 Instant Message
Osborne et al 35
RVP
This is the most common type of payload, and is typically used to
send some text between two PRINCIPALs. The mime-data would be as
follows:
10.2 Typing Message
This is used to indicate that a PRINCIPAL is typing. In Microsoft
Exchange 2000 these are sent every four seconds.
10.3 Application Invites
This is used when a request to start an application occurs.
© 2000 Microsoft Corporation. All Rights Reserved.
11. References
[WEBDAV] Y. Goland, E. Whitehead, A. Faizi, S. Carter and D.
Jensen, "HTTP Extensions for Distributed Authoring - WEBDAV", RFC
2518
[MODEL] M. Day, J. Rosenberg, and H. Sugano, "A Model for
Presence and Instant Messaging," work in progress, draft-ietf-
impp-model-03.txt.
Osborne et al 36
RVP
[HTTP] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, and T.
Berners-Lee, ‘Hypertext Transfer Protocol – HTTP/1.1’, RFC 2068
[WEBDAV-ACL] Leach P. J. and Goland Y. Y., "WebDAV ACL Protocol",
INTERNET-DRAFT , November 1997
[RVP-CALSYN] M. Calsyn, L. Dusseault and G. Mohr, “A Presence
Notification Protocol”, INTERNET DRAFT ,
September 1998
[IMPP-REQTS] M. Day, S. Aggarwal, G. Mohr, and J. Vincent,
“Instant Messaging / Presence Protocol Requirements”, INTERNET
DRAFT
[GENA] J. Cohen, S. Aggarwal, and Y. Y. Goland, “General Event
Notification Architecture Base”, INTERNET DRAFT , June 1998
12. Author's Addresses
Rob Osborne
Microsoft Corporation
One Microsoft Way,
Redmond, WA 98052
Email: roberto@microsoft.com
Sonu Aggarwal
Microsoft Corporation
One Microsoft Way
Redmond, WA 98052
Email: sonuag@microsoft.com
Leon Wong
Microsoft Corporation
One Microsoft Way
Redmond, WA 98052
Email: leonw@microsoft.com
Peter Beebee
Microsoft Corporation
One Microsoft Way
Redmond, WA 98052
Email: peterbee@microsoft.com
Martin Calsyn
Microsoft Corporation
One Microsoft Way
Redmond, WA 98052
Email: martinca@microsoft.com
Lisa Lippert
Microsoft Corporation
One Microsoft Way
Osborne et al 37
RVP
Redmond, WA 98052
Email: lisal@microsoft.com
Osborne et al 38