INTERET-DRAFT J.Costa-Requena
draft-lonnfors-simple-partial-notify-00.txt Eva Leppanen
Expires: August 2003 Hisham Khartabi
Mikko Lonnfors
Nokia
February 2003
Partial Notification of Presence Information
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
Abstract
A Presence service implemented using SIMPLE has some constraints for
delivering presence information to devices with low data processing
capabilities, small display, and limited battery power. Other
limitations can be caused by the interface between the terminal and
the network, i.e. over radio links with high latency and low
bandwidth. This memo presents a solution that aids in reducing the
impact of those constrains and increasing efficiency, by introducing
a new MIME-type æpartial notificationsÆ and a Require header
extension æpartial-notificationÆ.
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 1]
INTERNET-DRAFT Partial Notification of Presence February 2003
Table of Contents
1 Introduction....................................................2
1.1 Existing mechanisms........................................3
2 Conventions used in this document...............................5
3 Introduction of the partial notification solution...............5
3.1 Normal presence server operation...........................5
3.2 Operation of the partial notification......................6
4 Client and server operations....................................6
4.1 Watcher generating SUBSCRIBE requests......................6
4.2 Notifier processing of SUBSCRIBE requests..................7
4.3 NOTIFY body for partial notifications......................8
4.4 Notifier generation of partial notifications...............8
4.5 Watcher processing of partial notifications................9
5 IANA considerations............................................10
6 Examples.......................................................11
6.1 Subscription with partial notification as optional........11
6.2 Subscription with partial notification as requirement.....15
7 XML Schema.....................................................19
8 Security Considerations........................................21
9 Acknowledgements...............................................21
10 Changes from version 00.......................................22
11 References....................................................22
12 Author's Addresses............................................23
1 Introduction
SIP extensions for presence [1] allow users ('watchers') to subscribe
to other users ('presentities') presence information. The presence
information is composed of multiple pieces of data that normally is
delivered to the watcher. The presence information is usually
delivered in a XML document ('Presence document') that uses 'pdif'
MIME type [8] as the default format. The size of the presence
information can be large (i.e. an arbitrary number of elements called
'Presence tuples' defined in the 'pdif' MIME type for conveying
presence data). It may not be reasonable to send the complete
presence information over low bandwidth and high latency links when
only part of that information changes. This may end up in degrading
the presence service and causing bad perception at the watcher side.
Thus, it is necessary to provide solutions to overcome this problem
for the sake of success of the presence service.
Presence based applications in wireless terminals have certain
limitations because it is envisioned that the presence service may
demand high bandwidth. It is foreseen that the presence information
may have a considerable size, especially if large content is included
in presence information. Requirements of wireless environments can
also be found in [2].
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 2]
INTERNET-DRAFT Partial Notification of Presence February 2003
There are some mechanisms which might be used to help the problem,
such as signaling compression [3] and content indirection [4] and
[5]. However, none of the existing solutions are optimal because they
set additional requirements on basic network functionalities such as
charging and security. Some of the existing solutions enforce certain
requirements on the network and terminals for supporting compression
mechanism, while other solutions require having a specific server to
store the requested presence information until the terminal fetches
it using another protocol (HTTP) and therefore increases possible
security concerns.
This draft presents another approach as a solution to the problem,
namely 'Partial Notifications'. The idea is already identified by the
SIP Extensions for Presence document [1] as a potential solution. The
default behaviour of the Presence server consists of including all
the presence information ( or 'full state') in the presence document
(the pdif XML document) delivered to the watcher. However, the
partial notification approach means that the Presence Server (PS)
delivers to the watchers only that part of the presence information
that has changed compared to the previous notification (or 'partial
state'). (See also [2] for requirements). Note that the 'Partial
Notifications' are not IMPP compliant.
In order to implement this functionality, this document introduces a
new MIME-Type 'application/pidf-partial+xml' and a Require-header
extension 'partial-notification'.
1.1 Existing mechanisms
The SIMPLE Working Group has already proposed a set of mechanisms in
order to accommodate excessive message size when messages are
delivered over links with limited bandwidth.
- SigComp[3]: Signalling compression.
This mechanism provides a reasonable message size reduction because
of the text-based nature of SIP. However, this approach has certain
limitations when the messages contain binary content and it does not
reduce the size after the compression process. This approach also
requires having additional functionality in the terminal and in the
server. (I.e. the SigComp dictionaries require additional memory that
is a scarce resource in small devices, especially when the dictionary
includes binary content). Some concerns have been raised about how
SigComp operates with content that cannot be compressed by SigComp
and which are large in terms of size. Static SigComp should not be
affected by æbinaryÆ content. Using dynamic dictionaries with
æbinaryÆ content may require some intelligence from SigComp
implementation. If SigComp tries to use dynamic dictionaries with
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 3]
INTERNET-DRAFT Partial Notification of Presence February 2003
large binary content it may reduce the compression ratio of SigComp.
This can be avoided using one of the following mechanisms:
- SigComp implementation knows content types it can compress. Based
on this information it can leave other parts of the message
uncompressed
- SigComp implementation knows content types it cannot compress and
can then leave those parts of the message uncompressed
- SigComp implementation can check the compression ratio and if that
ratio is lower than set threshold value SigComp implementation can
leave those parts of message uncompressed
Using one of these mechanisms SigComp implementation using dynamic
dictionaries should perform well as binary content would not be
present.
- Content Indirection [4],[5]:
Consists of sending a URL pointing to the content. This approach
solves the problem of excessive message size sent in the presence
notifications. The notification only includes a URL pointing to the
location where the content is stored. The watcher receiving the URL
has the option to use a more appropriate data protocol such as HTTP
to fetch the content every time a notification is received.
The inconvenience with this mechanism is that the URL has an
expiration time and after expiry, the URL becomes obsolete. There are
also security concerns since the URL should also include some
security credentials for authentication purposes when fetching the
content. In addition to this, the terminal has to fetch the content
after receiving the notification, causing delays in receiving the
presence information. In some systems this may also complicate the
charging system because there is an additional transaction using a
different protocol but still bound to the same presence service.
- Embedded URL in Presence Content:
Include a URL, that points to the binary content, in the
notification. This approach is similar to the previous Content
Indirection approach but instead of sending the URL for the whole
presence document, the URL included in the presence information is
pointing only to some pieces of information (e.g. images or other
binary content).
This mechanism would be the most suitable one because if it were used
in conjunction with the compression mechanism, it would lead into a
reduced size of the message to be delivered in the notification. The
inconveniences with this approach are the security, charging and
performance problems identified for the 'Content Indirection'
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 4]
INTERNET-DRAFT Partial Notification of Presence February 2003
approach. Another inconvenience is that he watcher receives the
notification and thereafter has to fetch the content that is included
in the presence document with URLs. It is also unclear how user can
make decision whether content behind CI is interesting or not. CI
delivers some meta data about the content like media type and length.
This really doesnÆt tell user what has changed since last
notification. For example if picture has changed user is able to tell
difference to last notification only after content has been fetched.
Making decision what parts of presence document user wants to receive
could be made using filtering mechanism [16]. CI approach also
requires an ability to differentiate the URLs that have to be fetched
in order to complete the presence document versus the URLs that are
pointing to some other content.
2 Conventions used in this document
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [6].
3 Introduction of the partial notification solution
This chapter briefly introduces the current functionality of the
Presence service, and gives an overview of the partial notification
solution and new items needed to implement it.
The motivation for introducing a partial notification mechanism, in
addition to the existing solutions described in Section 1.1, is to
mitigate the excessive message size in certain circumstances
(notifications with large un-compressed content). The approach is
Presence Server (PS) centric in a sense that the watcher, also
referred to as subscriber in this document, initiates the negotiation
in order to inform the Presence server (PS) about its ability to
receive partial notifications. The PS is the ultimate element that
decides whether the partial notification capability is used or not in
the particular subscription.
3.1 Normal presence server operation
The presence service normally operates so that the watcher sends the
SIP SUBSCRIBE method targeted to the presentity. The request is
routed up to the PS responsible for storing the presence information
of the presentity. The SUBSCRIBE request MAY include an Accept-header
field for indicating the supported content types [7].
The PS receives the SUBSCRIBE request and if there is no Accept
header indicating supported content types, PS will generate the
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 5]
INTERNET-DRAFT Partial Notification of Presence February 2003
presence notification using the default PIDF format [8]. PIDF may
contain one or multiple 'tuples' and presence document level
information. The 'tuples' include a set of elements defined in the
presence model [9] for representing the presence information. The
presence information is sent to the watcher in the body of the NOTIFY
request according to [10]. By default, the presence information
contains the full state corresponding to the presence status of the
presentity, as allowed by the PS local policy.
3.2 Operation of the partial notification
The proposed mechanism for implementing the partial notification
consists of defining a new content type as extension to the existing
'PIDF' format [8]. The new content type is named as
'application/pdif-partial+xml' and it adds new elements in addition
to the existing 'PIDF' schema in order to enable the partial
notifications. The new elements are 'version' and 'state'.
The 'version' information is a sequence number that is progressively
incremented for each watcher when notification is sent. The 'state'
indicates the nature of the presence information included in the
notified document, whether it contains 'full' or 'partial' state
corresponding to the cases when the full presence information or only
changed parts of the presence information are delivered. The use of
these attributes is similar to watcher information template package
[11].
In addition the 'content-type' header of the NOTIFY request also
refers to the format type included in the document (i.e. 'CPIM-
PIDF+xml' or 'PIDF-partial+xml').
4 Client and server operations
This document assumes that unless otherwise specified in this
document normal subscriber and notifier behavior is applied as
defined in [12]. The watcher has the same behavior as a subscriber.
4.1 Watcher generating SUBSCRIBE requests
The SUBSCRIBE request can be used to negotiate the preferred content
type to be used in the notifications. The 'Accept' header is used for
this purpose as specified in [7]. When sending a SUBSCRIBE request,
the watcher has the following options:
- Watcher may omit the 'Accept' header or place default content type
as a value of 'Accept' header. In this case the watcher is willing to
receive only the default presence format.
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 6]
INTERNET-DRAFT Partial Notification of Presence February 2003
- Watcher may add the 'Accept' header with values: 'application/cpim-
pidf+xml' and 'application/pidf-partial+xml'. In this case the
watcher is able to process both the default content type and the
partial notification content type.
Therefore, the watcher can indicate the content types that it is
willing to receive in the NOTIFY using the 'Accept' header. At least
the default content type specified for the Presence service MUST be
indicated. If the 'Accept' header is omitted the default content type
(pdif[8]) MUST be used by the Presence Server.
The watcher MAY include a 'Require' header field with the value
'partial-notification' if the watcher wants to be sure that the PS
supports and uses the extensions defined in this specification. If PS
does not understand the extension indicated in the 'Require' header
field the PS SHOULD reject the subscription and send back an error
response.
The 'Supported' header achieves the same result as the 'Accept'
header field. Since the 'Accept' header MUST be present in a
SUSBSCRIBE request that requires a NOTIFY request with a content type
that is not the default one, the field presence of 'Supported' header
is considered to be redundant, but it is not strictly disallowed.
4.2 Notifier processing of SUBSCRIBE requests
The Presence Server receives the subscriptions from the watchers and
generates the notifications according to [1]. The watcher might have
indicated the supported formats of the presence document by listing
the content types in the 'Accept' header. The Presence Server MUST
compare the content types included in the 'Accept' header with
supported ones, and decide which one to use according to its local
policy. There are the following cases:
- There is no 'Accept' header field present in the request or the
æAcceptÆ header field contains the default content type. In this
case, the subscription processing proceeds as defined in [1].
- The 'Accept' header field contains both 'application/cpim-pidf+xml'
and 'application/pidf-partial+xml'. Choosing either of these content
types is up to the local configuration as defined in [1]
- The 'Accept' header field contains both 'application/cpim-pidf+xml'
and 'application/pidf-partial+xml' the 'Require' header field
includes 'partial-notification'. If the PS does not support the
'partial-notification' extension, then it rejects the request as
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 7]
INTERNET-DRAFT Partial Notification of Presence February 2003
defined in [1]. If the PS supports the extension, it MUST use the
'application/pidf-partial+xml' content type in all subsequent NOTIFY
requests. The semantics for the 'Require' header with value 'partial-
notification' apply to the content type included in the 'Accept'
header with value 'application/pidf-partial+xml'.
Note: If Accept-header field does not include 'application/pidf-
partial+xml' but a Require-header field with 'partial-notification'
was present, the PS rejects the subscription.
4.3 NOTIFY body for partial notifications
The watchers supporting the partial notification extension described
in this document MUST support the 'application/pidf-partial+xml'
content-type.
4.4 Notifier generation of partial notifications
If the negotiation between the watcher and the PS resulted in the
agreement to use partial notifications, then the PS MUST use
'application/pdif-partial+xml' content type in NOTIFY requests.
The PS MUST deliver the full state of the presence information
according to [1] in the first notification. In this case, the 'state'
element of the presence document MUST be set to the value 'full'. The
'version' attribute MUST also be present and it MUST be initialized
to value zero.
When the PS generates subsequent notifications, the presence document
includes only the tuples that have changed compared to the previous
notification and the presence document level information ( e.g.
'note' element). Except in the case when the tuples are removed, the
complete presence information is sent. It is up to the local
configuration to determine what is considered as change to previous
state. The 'state' element's value MUST be set to 'partialÆ.
The PS constructs the presence document according to the following
logic:
The delivered presence information is constructed according to [1] in
such a way that only changed tuples are delivered in addition to the
presence information outside 'tuple' at presence document level.
There might also be new tuples added to the presence information
because presentity has published more information or because
authorization policy has been changed.
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 8]
INTERNET-DRAFT Partial Notification of Presence February 2003
In addition, the 'version' number and 'state' element are also
included in the presence document. The version number is incremented
by one compared to the earlier delivered presence document to the
watcher associated with a certain subscription. The version number
should follow the COUNTER32 format that after reaching the maximum
value it starts from zero [13].
When there are changes (e.g. in the authorization), which lead to the
removal of a tuple from the previously delivered presence
information, the PS sets the value of the XML attribute ædeletedÆ to
æTRUEÆ, e.g., ô<tuple deleted=TRUE id='idw2342gf'>ö.
(Note that there is also another alternative for the removal of
information: the PS sends the 'full presence' information by setting
the value 'full' for the 'state' element, and restarting the version
numbering again. The decision whether to send æfullÆ state or
æpartialÆ state with ædeleteÆ attribute TRUE is up to the local
policy of the PS).
4.5 Watcher processing of partial notifications
If the negotiation between the watcher and the PS resulted in the
agreement to use partial notifications, then the watcher receives
'application/pdif-partial+xml' content type in the subsequent NOTIFY
requests.
The watcher receives the full state of the presence information
according to [1] in the first notification. In this case, the 'state'
element of the presence document has the value 'full'. When the
watcher receives full state notifications it MUST perform the
following actions:
- Watcher MUST discard all previously received presence information
from that particular presentity.
- Watcher MUST initialize internal version counter, related that
particular presentity or subscription, to the value received in the
notification
- Watcher MUST store the values of all tuple IDs together with the
content received in the notification.
When the watcher receives subsequent notifications, the presence
document includes only those tuples that have changed compared to the
previous notification and the presence document level information
(e.g. the 'note' element). The 'state' element includes the value of
'partial' telling to the watcher that the notification includes
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 9]
INTERNET-DRAFT Partial Notification of Presence February 2003
partial information. The watcher MUST construct the presence
information according to the following logic:
- The version number of the presence document SHOULD be compared with
the version number of the previously received presence document. If
the version number is incremented by one, the watcher SHOULD continue
handling the content present in the notification.
- The Watcher MUST compare tuple IDs to tuple IDs received in
previous notifications. If a tuple ID in the notification matches an
existing tuple ID, the existing tuple must be replaced with the newly
received in the notification. If the tuple ID does not match to the
ones received in earlier notifications, it will be stored as new
tuple.
- The Watcher MUST compare tuple IDs to tuple IDs received in the
previous notifications. If a tuple ID in the notification matches an
existing tuple ID and the tuple contains the attribute ædeletedÆ with
value TRUE, the exiting tuple MUST be deleted.
- The missing tuples means that they remain unchanged.
- The presence document level information (outside 'tuples') is
replaced with the new information received in the notification at
that level.
In case the watcher receives a partial notification, which has a
'version' number that is higher than the stored value by more than
one, the watcher assumes that one or more NOTIFY were lost and SHOULD
refresh the subscription within the existing dialog in order to
receive a complete update (æfull stateÆ) of the presence information.
If the watcher receives a notification with 'state' value equal
'partial' and the æversionÆ number equal or smaller than the previous
notification, it is considered a PS failure and the watcher SHOULD
refresh the subscription.
5 IANA considerations
This memo calls for IANA to register a new XML namespace URN as
defined in [14].
A new content type 'application/pidf-partial+xml' is defined to
represent an XML MIME for the partial presence information content.
This specification follows the guidelines of RFC3023 [15].
It may also be needed an IANA registration for the value 'partial-
notification' of the 'Require' header as a SIP extension and the
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 10]
INTERNET-DRAFT Partial Notification of Presence February 2003
required information for this registration, as specified in RFC3261
[7], is:
Name: partial-notification
URI:
urn:ietf:params:xml:ns:pidf-partial
Description: This option tag is used in the 'Require' header field by
a UAC to ensure that partial notifications are honored at the PS.
Registrant Contact: IETF, SIMPLE working group, <simple@ietf.org>
BEGIN
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
"http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml
<head>
<meta http-equiv="content-type"
content="text/html;charset=iso-8859-1"/>
<title>PIDF extension for partial notifications</title>
</head>
<body>
<h1>Namespace for PIDF extension for partial
notifications</h1>
<h2>application/pidf-partial+xml</h2>
<p>See <a href="[[[URL of published RFC]]]">RFCXXXX</a>.</p>
</body>
</html>
END
6 Examples
The following flows show examples when applying the proposed partial
notification extension. The document of the æpidf-partial+xmlÆ format
mentioned in the message details is constructed according to the XML
schema described in the chapter 6.2.
6.1 Subscription with partial notification as optional
The watcher sends a SUBSCRIBE request including the default presence
format (PIDF) and the pdif partial extension using the 'Accept'
header field. The PS accepts the subscription and based on a local
policy it selects to send partial notifications in NOTIFY requests
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 11]
INTERNET-DRAFT Partial Notification of Presence February 2003
according to the logic described in this document. The first NOTIFY
request includes the full state of presence information represented
in the 'application/pidf-partial+xml' content type. The following
notifications only include the delta of the presence information from
the previous NOTIFY request.
Watcher Presence Server PUA
| F1 SUBSCRIBE | |
|-------------------------->| |
| F2 200 OK | |
|<--------------------------| |
| F3 NOTIFY | |
|<--------------------------| |
| F4 200 OK | |
|-------------------------->| |
| | |
| | Update presence |
| |<----------------------- |
| | |
| F5 NOTIFY | |
|<--------------------------| |
| F6 200 OK | |
|-------------------------->| |
Message Details
F1 SUBSCRIBE watcher->example.com server
SUBSCRIBE sip:resource@example.com SIP/2.0
Via: SIP/2.0/TCP watcherhost.example.com;branch=z9hG4bKnashds7
To: sip:resource@example.com
From: sip:watcher@somewhere.com ;tag=xfg9
Call-ID: 2010@watcherhost.example.com
CSeq: 17766 SUBSCRIBE
Max-Forwards: 70
Event: presence
Accept: application/cpim-pidf+xml, application/pidf-partial+xml
Contact: user@watcherhost.example.com
Expires: 600
Content-Length: 0
F2 200 OK example.com server->watcher
The Presence Server accepts the subscription and based on the local
policy it applies the partial notification. (See 'Content-Type'=
'application/pidf-partial+xml').
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 12]
INTERNET-DRAFT Partial Notification of Presence February 2003
SIP/2.0 200 OK
Via: SIP/2.0/TCP watcherhost.example.com;branch=z9hG4bKnashds7
;received=192.0.2.1
To: sip:resource@example.com;tag=ffd2
From: sip:watcher@somewhere.com;tag=xfg9
Call-ID: 2010@watcherhost.example.com
CSeq: 17766 SUBSCRIBE
Event: presence
Expires: 600
Contact: sip:server.example.com
Content-Length: 0
F3 NOTIFY example.com server-> watcher
NOTIFY sip:user@watcherhost.example.com SIP/2.0
Via: SIP/2.0/TCP server.example.com;branch=z9hG4bKna998sk
To: sip:watcher@somewhere.com;tag=xfg9
From: sip:resource@example.com;tag=ffd2
Call-ID: 2010@watcherhost.example.com
Event: presence
Subscription-State: active;expires=599
Max-Forwards: 70
CSeq: 8775 NOTIFY
Contact: sip:server.example.com
Content-Type: application/pidf-partial+xml
Content-Length: ..
PIDF-PARTIAL+XML Document with 'FULL STATE' information:
<?xml version="1.0" encoding="UTF-8"?>
<impp:presence xmlns:impp="urn:ietf:params:xml:ns:pidf-partial"
entity="pres:someone@example.com" version=ö1ö state=öfullö>
<impp:tuple id="sg89ae">
<impp:status><impp:basic>open</impp:basic></impp:status>
<impp:contact priority="0.8">tel:09012345678</impp:contact>
</impp:tuple>
<impp:tuple id="cg231jcr">
<impp:status><impp:basic>open</impp:basic></impp:status>
<impp:contact priority="1.0">
im:pep@nokia.com</impp:contact>
</impp:tuple>
<impp:note xml:lang=öenö>No e-mail connection
currently</impp:note>
</impp:presence>
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 13]
INTERNET-DRAFT Partial Notification of Presence February 2003
F4 200 OK watcher-> example.com server
SIP/2.0 200 OK
Via: SIP/2.0/TCP server.example.com;branch=z9hG4bKna998sk
;received=192.0.2.2
To: sip:watcher@somewhere.com;tag=xfg9
From: sip:resource@example.com;tag=ffd2
Call-ID: 2010@watcherhost.example.com
CSeq: 8775 NOTIFY
Content-Length: 0
F5 NOTIFY example.com server -> watcher
It is the local policy issue to construct the 'PIDF-partial+xml'
formated document including the delta from the previous NOTIFY.
NOTIFY sip:user@watcherhost.example.com SIP/2.0
Via: SIP/2.0/TCP server.example.com;branch=z9hG4bKna998sl
To: sip:watcher@somewhere.com;tag=xfg9
From: sip:resource@example.com;tag=ffd2
Call-ID: 2010@watcherhost.example.com
CSeq: 8776 NOTIFY
Event: presence
Subscription-State: active;expires=543
Max-Forwards: 70
Contact: sip:server.example.com
Content-Type: application/pidf-partial+xml
Content-Length: ...
New PIDF-PARTIAL+XML Document with 'PARTIAL STATE' information:
<?xml version="1.0" encoding="UTF-8"?>
<impp:presence xmlns:impp="urn:ietf:params:xml:ns:pidf-partial"
entity="pres:someone@example.com" version=ö2ö state=öpartialö>
<impp:tuple id="cg231jcr">
<impp:status><impp:basic>closed</impp:basic></impp:status>
<impp:contact priority="1.0">
im:pep@nokia.com</impp:contact>
<impp:notexml:lang="en">This is an update of existing tuple
sent in previous notification</note>
</impp:tuple>
<impp:note xml:lang=öenö>No e-mail connection
currently</impp:note>
<impp:tuple id="wsqw798jcr">
<impp:status><impp:basic>open</impp:basic></impp:status>
<impp:contact priority="0.4">
im:mac@hut.com</impp:contact>
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 14]
INTERNET-DRAFT Partial Notification of Presence February 2003
<impp:note xml:lang="en">This is a completely new tuple not
sent in previous notification</note>
</impp:tuple>
</impp:presence>
F6 200 OK watcher-> example.com server
SIP/2.0 200 OK
Via: SIP/2.0/TCP server.example.com;branch=z9hG4bKna998sl
;received=192.0.2.2
To: sip:watcher@somewhere.com;tag=xfg9
From: sip:resource@example.com;tag=ffd2
Call-ID: 2010@watcherhost.example.com
CSeq: 8776 NOTIFY
Content-Length: 0
6.2 Subscription with partial notification as requirement
The watcher sends SUBSCRIBE request including 'partial-notification'
extension in the 'Require' header field. The PS does not support the
'partial-notification' extension, so it rejects the subscription. The
watcher re-subscribes without including the 'Require' header field.
Watcher Presence Server PUA
| F1 SUBSCRIBE | |
|-------------------------->| |
| F2 420 Bad Extension | |
|<--------------------------| |
| F3 SUBSCRIBE | |
|-------------------------->| |
| F4 200 OK | |
|<--------------------------| |
| F5 NOTIFY | |
|<--------------------------| |
| F6 200 OK | |
|-------------------------->| |
| | |
| | Update presence |
| |<----------------------- |
| | |
| F7 NOTIFY | |
|<--------------------------| |
| F8 200 OK | |
|-------------------------->| |
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 15]
INTERNET-DRAFT Partial Notification of Presence February 2003
Message Details:
F1 SUBSCRIBE watcher->example.com server
SUBSCRIBE sip:resource@example.com SIP/2.0
Via: SIP/2.0/TCP watcherhost.example.com;branch=z9hG4bKnashds7
To: sip:resource@example.com
From: sip:watcher@somewhere.com;tag=xfg9
Call-ID: 2010@watcherhost.example.com
CSeq: 17766 SUBSCRIBE
Max-Forwards: 70
Event: presence
Require: partial-notification
Contact: sip:user@watcherhost.example.com
Expires: 600
Content-Length: 0
F2 420 Bad Extension example.com server->watcher
The Presence Server does not support the extension indicated in the
æRequireÆ header and the subscription is rejected.
SIP/2.0 420 OK
Via: SIP/2.0/TCP watcherhost.example.com;branch=z9hG4bKnashds7
;received=192.0.2.1
To: sip:resource@example.com
From: sip:watcher@somewhere.com;tag=xfg9
Call-ID: 2010@watcherhost.example.com
CSeq: 17766 SUBSCRIBE
Event: presence
Expires: 600
Unsupported: partial-notification
Contact: sip:server.example.com
Content-Length: 0
F3 SUBSCRIBE watcher -> example.com server
The watcher makes subscribtion without any requirements for partial
notification. The default presence service and pdif format [1] are
applied.
SUBSCRIBE sip:resource@example.com SIP/2.0
Via: SIP/2.0/TCP watcherhost.example.com;branch=z9hG4bKnashds7
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 16]
INTERNET-DRAFT Partial Notification of Presence February 2003
To: sip:resource@example.com
From: sip:watcher@somewhere.com;tag=xfg9
Call-ID: 2010@watcherhost.example.com
CSeq: 17767 SUBSCRIBE
Max-Forwards: 70
Event: presence
Contact: sip:user@watcherhost.example.com
Expires: 600
Content-Length: 0
F4 200 OK example.com server->watcher
SIP/2.0 200 OK
Via: SIP/2.0/TCP watcherhost.example.com;branch=z9hG4bKnashds7
;received=192.0.2.1
To: sip:resource@example.com
From: sip:watcher@somewhere.com;tag=xfg9
Call-ID: 2010@watcherhost.example.com
CSeq: 17767 SUBSCRIBE
Event: presence
Expires: 600
Contact: sip:server.example.com
Content-Length: 0
F5 NOTIFY example.com server -> watcher
NOTIFY sip:user@watcherhost.example.com SIP/2.0
Via: SIP/2.0/TCP server.example.com;branch=z9hG4bKna998sk
To: sip:watcher@somewhere.com;tag=xfg9
From: sip:resource@example.com;tag=ffd2
Call-ID: 2010@watcherhost.example.com
Event: presence
Subscription-State: active;expires=599
Max-Forwards: 70
CSeq: 8775 NOTIFY
Contact: sip:server.example.com
Content-Type: application/cpim-pidf+xml
Content-Length: ..
CPIM-PIDF+XML formatted document:
<?xml version="1.0" encoding="UTF-8"?>
<impp:presence xmlns:impp="urn:ietf:params:xml:ns:cpim-pidf"
entity="pres:someone@example.com">
<impp:tuple id="sg89ae">
<impp:status><impp:basic>open</impp:basic></impp:status>
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 17]
INTERNET-DRAFT Partial Notification of Presence February 2003
<impp:contact priority="0.8">tel:09012345678</impp:contact>
</impp:tuple>
<impp:tuple id="cg231jcr">
<impp:status><impp:basic>open</impp:basic></impp:status>
<impp:contact priority="1.0">
im:pep@nokia.com</impp:contact>
</impp:tuple>
</impp:presence>
F6 200 OK watcher-> example.com server
SIP/2.0 200 OK
Via: SIP/2.0/TCP server.example.com;branch=z9hG4bKna998sk
;received=192.0.2.2
To: sip:watcher@somewhere.com;tag=xfg9
From: sip:resource@example.com;tag=ffd2
Call-ID: 2010@watcherhost.example.com
CSeq: 8775 NOTIFY
Content-Length: 0
F7 NOTIFY example.com server -> watcher
NOTIFY sip:user@watcherhost.example.com SIP/2.0
Via: SIP/2.0/TCP server.example.com;branch=z9hG4bKna998sl
To: sip:watcher@somewhere.com;tag=xfg9
From: sip:resource@example.com;tag=ffd2
Call-ID: 2010@watcherhost.example.com
CSeq: 8776 NOTIFY
Event: presence
Subscription-State: active;expires=543
Max-Forwards: 70
Contact: sip:server.example.com
Content-Type: application/cpim-pidf+xml
Content-Length: ...
New CPIM-PIDF+XML formatted_document:
<?xml version="1.0" encoding="UTF-8"?>
<impp:presence xmlns:impp="urn:ietf:params:xml:ns:cpim-pidf"
entity="pres:someone@example.com">
<impp:tuple id="sg89ae">
<impp:status><impp:basic>open</impp:basic></impp:status>
<impp:contact priority="0.8">tel:09012345678</impp:contact>
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 18]
INTERNET-DRAFT Partial Notification of Presence February 2003
</impp:tuple>
<impp:tuple id="cg231jcr">
<impp:status><impp:basic>closed</impp:basic></impp:status>
<impp:contact priority="1.0">
im:pep@nokia.com</impp:contact>
<impp:note xml:lang="en">This is an update of existing
tuple sent in previous notification</note>
</impp:tuple>
<impp:tuple id="wsqw798jcr">
<impp:status><impp:basic>open</impp:basic></impp:status>
<impp:contact priority="0.4">
im:mac@hut.com</impp:contact>
<impp:note xml:lang="en">This is a completely new tuple not
sent in previous notification</note>
</impp:tuple>
</impp:presence>
F8 200 OK
SIP/2.0 200 OK
Via: SIP/2.0/TCP server.example.com;branch=z9hG4bKna998sl
;received=192.0.2.2
To: sip:watcher@somewhere.com;tag=xfg9
From: sip:resource@example.com;tag=ffd2
Call-ID: 2010@watcherhost.example.com
CSeq: 8776 NOTIFY
Content-Length: 0
7 XML Schema
The XML schema for the 'pidf-partial+xml' data format.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="urn:ietf:params:xml:ns:pidf-partial"
xmlns:tns="urn:ietf:params:xml:ns:pidf-partial"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<!-- This import brings in the XML language attribute xml:lang-->
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 19]
INTERNET-DRAFT Partial Notification of Presence February 2003
<xs:element name="presence" type="tns:presence"/>
<xs:complexType name="presence">
<xs:sequence>
<xs:element name="tuple" type="tns:tuple"
maxOccurs="unbounded"/>
<xs:element name="note" type="tns:note" minOccurs="0"
maxOccurs="unbounded"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="entity" type="xs:anyURI" use="required"/>
<xs:attribute name="version" type="xs:nonNegativeInteger"
use="required"/>
<xs:attribute name="state" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="full"/>
<xs:enumeration value="partial"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="tuple">
<xs:sequence>
<xs:element name="status" type="tns:status"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="contact" type="tns:contact" minOccurs="0"/>
<xs:element name="note" type="tns:note" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="timestamp" type="xs:dateTime" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute name="deleted" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="status">
<xs:sequence>
<xs:element name="basic" type="tns:basic" minOccurs="0"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="basic">
<xs:restriction base="xs:string">
<xs:enumeration value="open"/>
<xs:enumeration value="closed"/>
</xs:restriction>
</xs:simpleType>
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 20]
INTERNET-DRAFT Partial Notification of Presence February 2003
<xs:complexType name="contact">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute name="priority" type="tns:qvalue"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="note">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute ref="xml:lang"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="qvalue">
<xs:restriction base="xs:decimal">
<xs:pattern value="0(.[0-9]{0,3})?"/>
<xs:pattern value="1(.0{0,3})?"/>
</xs:restriction>
</xs:simpleType>
<!-- Global Attributes -->
<xs:attribute name="mustUnderstand" type="xs:boolean" default="0">
<xs:annotation>
<xs:documentation>
This attribute may be used on any element within an optional
PIDF extension to indicate that the corresponding element must
be understood by the PIDF processor if the enclosing optional
element is to be handled.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:schema>
8 Security Considerations
The security considerations for the presence are considered in [2],
and also RFC 2779 [5] outlines them. Furthermore, the pdif [8]
document includes additional security requirements to be considered
in the data format for the partial notifications.
9 Acknowledgements
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 21]
INTERNET-DRAFT Partial Notification of Presence February 2003
The authors would like to thank Jyrki Aarnos, Jonathan Rosenberg,
Dean Willis, Krisztian Kiss, Juha Kalliokulju and Tim Moran for their
valuable comments.
10 Changes from version 00
This document version 01 revises the previous version 00. The changes
included in this version fix some typos and errors discovered in
previous version.
- The æpidf-partial+xmlÆ format includes a new tuple attribute named
ædeleteÆ that is optional. This attribute is used when a tuple is
removed and Presence Server decides to do not send the presence
document with the æfullÆ state, and instead the PS sends the
æpartialÆ state including this new attribute for indicating the tuple
has been removed.
- The logic in the watcher side has been modified accordingly to
accommodate the addition of the new ædeleteÆ attribute.
- The background section introduces some additional information about
the reasoning of using SigComp and other alternatives to æpartial
notificationsÆ.
11 References
[1] Rosenberg, J., et al, "SIP Extensions for Presence", draft-ietf-
simple-presence-07.txt. Internet Draft, May 2002, Work in progress.
[2] K.Kiss, ôRequirements for Presence Service based on 3GPP
specifications and wireless environment characheristicsö draft-kiss-
simple-presence-wireless-reqs-01.txt. Internet Draft, October 2002.
Work in progress.
[3] Price, R., et al, öSignaling Compression (SigComp)ö, RFC 3320,
Internet Engineering Task Force, January 2003.
[4] Olson, S.,ö A Mechanism for Content Indirection in Session
Initiation Protocol (SIP) Messagesö, draft-ietf-sip-content-indirect-
mech-01. Internet Draft, November 2002, Work in progress.
[5] Khartabil. H.,ö Congestion safety and Content Indirectionö,
draft-khartabil-sip-congestionsafe-ci-01.txt, Internet Draft, October
2002, Work in progress.
[6] S. Bradner, "Key words for use in RFCs to indicate requirement
levels," RFC 2119, Internet Engineering Task Force, Mar. 1997.
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 22]
INTERNET-DRAFT Partial Notification of Presence February 2003
[7] J. Rosenberg, et al. ôSIP: Session Initiation Protocolö. RFC
3261, Internet Engineering Task Force, June 2002.
[8] H. Sugano, S. Fujimoto, et al, "CPIM presence information data
format," draft-ietf-impp-cpim-pidf-05.txt. Internet Draft, May 2002.
Work in progress.
[9] M. Day, J. Rosenberg, H. Sugano, "A Model for Presence and
Instant Messaging", RFC 2778, Internet Engineering Task Force,
February 2000.
[10] Roach, A., "SIP-Specific Event Notification", RFC 3265, Internet
Engineering Task Force, June 2002.
[11] Rosenberg, J.,ö A Watcher Information Event Template-Package for
the Session Initiation Protocol (SIP)ö, draft-ietf-simple-winfo-
package-04.txt, Internet Draft, December 2002. Work in progress.
[12] Day, M., Aggarwal, S., Mohr, G., Vincent,K., "Instant Messaging/
Presence Protocol Requirements", RFC 2779, Internet Engineering Task
Force, February 2000.
[13] K. McCloghrie et al, ôStructure of Management Information
Version 2 (SMIv2)ö, RFC 2578, STD 58, April 1999.
[14] Mealling, M., "The IETF XML Registry", draft-mealling-iana-
xmlns-registry-04, June 2002, work in progress.
[15] M. Murata, S. S. Laurent, and D. Kohn, "XML media types," RFC
3023, Internet Engineering Task Force, Jan. 2001.
[16] H. Khartabil, M. Lonnfors, J. Costa-Reguena, and E. Leppanen,
ôEvent Notification Filtering for Presenceö, draft-khartabil-simple-
presence-filter-00, Jan 2002, work in progress.
12 Author's Addresses
Jose Costa-Requena
Nokia
Valimotie 9
00380 HELSINKI
Finland
Tel: +358-71-8008000
E-mail: jose.costa-requena@nokia.com
Mikko Lonnfors
Nokia Research Center
P.O. Box 407
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 23]
INTERNET-DRAFT Partial Notification of Presence February 2003
FIN-00045 NOKIA GROUP
Finland
Tel: +358 50 4836402
Email: mikko.lonnfors@nokia.com
Eva Leppanen
Nokia
P.O Box 785
FIN-33101 Tampere
FINLAND
Tel: +358 7180 77066
Email: eva-maria.leppanen@nokia.com
Hisham Khartabil
Nokia
P.O. Box 321
FIN-00045
NOKIA GROUP
FINLAND
Email: hisham.khartabil@nokia.com
Tel: + 358 7180 76161
Costa-Requena, Leppanen, Khartabil, Lonnfors [Page 24]