Internet DRAFT - draft-stucker-sip-publish
draft-stucker-sip-publish
Internet Engineering Task Force Brian Stucker
Internet Draft Nortel Networks, Inc.
Category: Standards Track November 2001
Expires May 2002
<draft-stucker-sip-publish-00.txt>
SIP-Specific Network Service Publishing
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 cite them other than as "work in
progress".
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/lid-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html
This document is an individual submission to the IETF. Comments
should be directed to the authors.
Abstract
This document describes an extension to the Session Initiation
Protocol (SIP). The purpose of this extension is to create a means
for publishing and retrieving information regarding services in the
network by using SIP.
The methods described in this document allow a framework by which
arbitrary service data can be transported into the network for
use by services running in the network. It is not intended to be
a general-purpose mechanism for transport of arbitrary data as
there are better suited mechanisms for this purpose (ftp, etc.),
but is intended to be a simple, light-weight, mechanism that
employs SIP in order to support SIP-related services. It is
envisioned that each service that employs this method may
extend and provide more detail as to how that service interacts
with the mechanisms put forth in this draft.
Stucker [Page 1]
Internet Draft DATA method November 12, 2001
1. Table of Contents
2 Introduction ........................................ 2
2.1 Overview of Operation................................ 3
3. Syntax............................................... 3
3.1 New Methods.......................................... 3
3.2 New Headers.......................................... 5
3.2.1 "Action" Header...................................... 5
3.2.2 "Service" Header..................................... 5
3.3 The DATA Method...................................... 6
3.4 Usage of the Service Header.......................... 7
3.5 Usage of the Action Header........................... 8
3.5.1 The PUT Action....................................... 8
3.5.2 The GET Action....................................... 9
3.5.3 The DELETE Action.................................... 9
4. Security Considerations.............................. 9
4.1 Authentication....................................... 10
4.2 Authorization........................................ 10
5. Statefulness of Service Data......................... 10
5.1 Soft Stated Service Data............................. 11
5.2 Hard Stated Service Data............................. 11
6. Error Cases.......................................... 11
6.1 Authorization or Authentication Failure.............. 11
6.2 Service Location Failure............................. 12
6.3 Wrong Data Format.................................... 13
6.4 Unsupported Action................................... 14
7. Extensibility of Actions............................. 14
8. Proof of Concept Example - Presence.................. 16
8.1 Message Details...................................... 17
9. Compatibility with Proxies........................... 23
10. Why use SIP?......................................... 23
9. References........................................... 25
10. Acknowledgements..................................... 25
11. Author's Address..................................... 25
Stucker [Page 2]
Internet Draft DATA method November 12, 2001
2. Introduction
The ability for a user to push data into the network has already
shown its usefulness. In the case of CPL and presence, both
require client devices to publish information regarding how
services should behave, based on data pushed into the network.
However, the mechanism that is used to place data into the network
has not been well defined up to this point, and problems exist
with the current ad-hoc approach of using the REGISTER method to
do so.
Therefore, this document describes a new method that creates a
framework by which arbitrarty service data can be transported into
the network for use by services. An example of this would be
CPL scripting documents, or presence documents. It is not intended
to be a general-purpose (non-SIP) data transport as there are
better suited mechanisms for this purpose (ftp, etc.)
Meeting the data publication requirements for the general problem
domain of how to transport any given piece of data between two SIP
endpoints is not possible. The goal of this draft is to provide a
SIP-specific framework that allows simple pieces of client data to
be transported into the network for a specific, SIP-related,
purpose. An example of such a purpose would be to transport CPL
script data into the network for a CPL call routing service to
handle SIP intiated calls appropriately.
SIP is chosen as the transport protocol because the services that
this mechanism applies to are services created by way of using SIP.
Where SIP is not the mechanism by which a service is provided, the
use of the mechanisms described in this draft should be thought out
very carefully.
The framework described in this draft does not outline an extension
which may be used directly. It is intended to be extensible, again,
because the needs of different services whose data may need to be
publish can vary. Each data type that intends to use this mechanism
is responsible for defining the complete set of rules as to how
this mechanism is to behave. This draft simply sets the framework
for this to occur. Guidelines and requirements as to how these
extensions must behave and requirements about their definition are
described in later sections of this draft.
Stucker [Page 3]
Internet Draft DATA method November 12, 2001
2.1. Overview of Operation
The concept of this draft is that entities in the network can
notify a resource of changes in their configuration data. Whereas
the generalized subscribe-notify framework is used to synchronize
two finite state machines, synchronization of data across multiple
nodes can be viewed as an event notification. Whenever the data
changes at one end, it simply notifies the other side of the
change.
A typical flow of messages to push data to a service would be:
Data Source Service
|------------DATA-------->| Provide or change service data
|<-----------200----------|
Data may be hard-stated, and if so, must be refreshed in exactly
the same manner as registrations (see RFC 2543 [1] ).
3. Syntax
This section describes the syntax extensions required for data
notification in SIP. Semantics are described in section 4.
3.1. New Methods
This document describes one new SIP method: "DATA."
This table expands on tables 4 and 5 in RFC 2543 [1] .
Header Where DATA
------ ----- ---
Accept R o
Accept-Encoding R o
Accept-Language R o
Action Rr m
Action 400 -
Alert-Info g -
Allow Rr o
Allow 405 m
Authentication-Info 2xx o
Authorization R o
Call-ID c m
Call-Info o
Stucker [Page 4]
Internet Draft DATA method November 12, 2001
Header Where DATA
------ ----- ---
Contact R m
Contact 1xx, 485 o
Contact 2xx, 3xx m
Content-Disposition o
Content-Encoding o
Content-Length o
Content-Type m
CSeq c m
Date o
Encryption g o
Expires g o
From c m
In-Reply-To R -
Max-Forwards R o
Organization g o
Priority R -
Proxy-Authenticate 407 m
Proxy-Authorization R o
Proxy-Require R o
Record-Route R o
Record-Route 2xx, 481, 484 o
Require g o
Retry-After 404, 413, 480 o
Retry-After 486, 500, 503 o
Retry-After 600, 603 o
Route R o
Server r o
Service R m
Service r o
Subject R o
Suppported o
Timestamp o
To gc(1) m
Unsupported 420 o
User-Agent o
Via c m
Warning r o
WWW-Authenticate 401 m
Stucker [Page 5]
Internet Draft DATA method November 12, 2001
3.2 New Headers
This table expands on tables 4 and 5 in RFC 2543 [1] , as amended
by the changes described in section 3.1.
Header field where proxy ACK BYE CAN INV OPT REG DAT
-----------------------------------------------------------------
Action R - - - - - - m
Service g - - - - - - m
3.2.1. "Action" header
The following header is defined for the purposes of this
specification.
Action = ( "Action" ) ":" action-type
*( "," SP action-type )
action-type = ( "Get" | "Put" | "Delete" )
*("." action-subtype )
action-subtype = token-nodot
token-nodot = 1*( alphanum | "-" | "!" | "%" | "*"
| "_" | "+" | "`" | "'" | "~" )
Action is added to the definition of the element "request-header"
in the SIP message grammar.
This document does not define values for action-subtypes. These
values will be defined by individual event packages, and MUST be
registered with the IANA.
There must be exactly one action type listed per action header.
Multiple actions per message are disallowed except in error
responses where the supported actions are listed.
3.2.2. "Service" header
The following header is defined for the purposes of this
specification.
Service = ( "Service" ) ":" service-tag
*( "," SP service-tag )
service-tag = token-nodot
token-nodot = 1*( alphanum | "-" | "!" | "%" | "*"
| "_" | "+" | "`" | "'" | "~" )
Stucker [Page 6]
Internet Draft DATA method November 12, 2001
Service is added to the definition of the element "general-header"
in the SIP message grammar.
This document does not define values for service. These values will
be defined by individual event packages, and MUST be registered
with the IANA.
There must be exactly one service type listed per action header.
Multiple services per message are disallowed except in error
responses where the supported services are listed.
3.3. The DATA method
The DATA method is used to provide a mechanism for publishing data
into the network. This is done on a domain basis, and follows the
formatting, and routing rules used for the REGISTER method.
When the DATA method is routed to the server responsible for the
domain listed in the requestURI, that server checks the Service
header, and may modify the requestURI so that the message is
then forwarded to the correct machine for that service, or may
process the message immediately instead.
Example:
DATA foo.com SIP/2.0
Via: SIP/2.0/UDP pc.foo.com
To: sip:A@foo.com
From: sip:A@foo.com;tag=123
Service: cpl
Action: put
Call-ID: 9876@pc.foo.com
CSeq: 1288 DATA
Contact: sip:B@pc.foo.com
Content-Type: application/cpl+xml
Content-Length: ...
<cpl>
<incoming>
<location url="sip:meadams@47.102.21.11:5060">
<redirect permanent="no" />
</location>
</incoming>
</cpl>
Stucker [Page 7]
Internet Draft DATA method November 12, 2001
A@foo.com proxy bar.com proxy foo.com registrar foo.com
|----DATA----->| | |
| |------DATA------>| |
| | |------DATA----->|
| | |<-----200-------|
| |<-----200--------| |
|<---200-------| | |
In the example shown above, since the "bar.com" proxy was not the
definitive controller for "foo.com" the DATA message was forwarded
(just like a REGISTER would be). However, once the DATA message
hit the proxy at "foo.com" the proxy there was the definitive
controller for "foo.com", but forwarded the message anyhow. This is
allowed because that proxy may not have had the registrar, where
"foo.com" handles cpl information co-located. Therefore the proxy
was able to forward the DATA message on to the server that was
handling the cpl service for "foo.com". This is allowed.
Once a DATA message gets to a server within the domain listed in
the requestURI, one additional forwarding of the message is allowed
in order to route to a server handling the service described in the
Service header to cover the case that the service is not co-located
with the inbound server for that domain. The requestURI MAY be
changed in order to facilitate this routing, but only by a server
in the domain that was listed in the original DATA message.
3.4 Usage of the Service Header
The Service header in the DATA message is used to denote the
service for which the data being acted upon resides within. Each
service MUST define and register with IANA it's own service tag
to be placed in this header. Service tags used in this document
are for example only, and have not necessarily been registered
with IANA.
Servers within the domain listed in the request URI of the DATA
message MUST inspect the contents of this header to see if the
service specified is hosted on that machine. If it is not, the
DATA message may be forwarded (within the same domain) in order
to reach the correct service hosting the service specified.
Authors registering new service tags SHOULD pick service tags
that as closely mimic the MIME type value for their data where
the MIME type is unambiguous to the service the data is for.
Stucker [Page 8]
Internet Draft DATA method November 12, 2001
For instance, if your service's data MIME type is
application/voicemail+xml, a good basis for a service tag
would be "voicemail" since it forms an identifiable portion of
the MIME type header. If the service in question reuses a
generic MIME type, the service tag should be descriptive of
the service, and not the MIME type. You should always be
able to look at the service tag and easily figure out what
service it refers to.
3.5 Usage of the Action Header
The Action header in the DATA message is used to denote what
the service should do, at a minimum, upon receiving the DATA
message. Three default values are defined, of which the actual
operation of each is dependent on the particular service.
Actions may be sub-typed as well, so that a service can
define a sub-action called "put.merge" in order to have the
data merged via rules specific to that service instead of simply
overwritten by use of the "put" action. It is up to each service
to decide how the data will be processed according to the action
specified, including the operation of the three defaul values
specified in this draft.
3.5.1 The PUT Action
The PUT action is used to associate the resource identified
within the message body of the DATA message with the TO party
and service specified in the DATA message. It is modeled on the
HTTP/1.1 PUT method, and acts as such. Services, generally, will
take the data in the message body and apply it to the user
identified in the TO header (similar to a REGISTER message) for
the service specified in the Service header.
The result of this operation is denoted by the response to the
DATA message, where 200 OK always denotes that the operation
requested succeeeded. Other return values may include a warning
header or explaination in the reason code as to why the operation
failed. 4xx, 5xx, and 6xx return codes should always denote
failure of the operation requested.
Using a DATA (PUT) message that contains no message body MUST NOT
be used in lieu of sending a DATA (DELETE) message, as this can
cause information used to filter the data to be deleted to be
confused with information to be stored for the resource identified
in the DATA message.
Stucker [Page 9]
Internet Draft DATA method November 12, 2001
3.5.2 The GET Action
The GET action is used to retrieve the data for the resource
identified within the message body of the DATA message with the
TO party and service specified in the DATA message. It is modeled
on the HTTP/1.1 GET method, and acts as such. The message body of
the DATA (GET) message may contain information used to filter
which service data is to be returned. For example, a service
may define message body elements to denote which version of a
piece of service data is to be returned by sending a last-modified
timestamp. Normally, the message body of a DATA (GET) message is
expected to be empty, however.
The result of this operation is denoted by the response to the
DATA message, where 200 OK always denotes that the operation
requested succeeded. The data requested is returned in the message
body of the response to the DATA (GET) request, and absence of data
does not imply that the request failed. The value of the response
code should always be used to determine success or failure of the
get action. 4xx, 5xx, and 6xx return codes should always denote
failure of the operation requested (even if data is present in the
message body of these responses).
3.5.3 The DELETE Action
The DELETE action is used to delete the data for the resource
identified within the message body of the DATA message with the
TO party and service specified in the DATA message. It is modeled
on the HTTP/1.1 DELETE method, and acts as such. The message body
of the DATA (DELETE) message may contain information used to filter
which service data is to be deleted, and MUST NOT be ambiguous. For
example, a service may define message body elements to denote which
portions of the service data is to be deleted by using a timestamp
to delete information before the date noted.
The result of this operation is denoted by the response to the
DATA message, where 200 OK always denotes that the operation
request succeeded. An indication of what data was deleted MAY be
included in the message body of the response, if so desired by the
service. The value of the response code should always be used to
determine success or failure of the delete action. 4xx, 5xx, and
6xx return codes should always denote failure of the operation
requested (even if data is present in the message body of these
responses).
4. Security Considerations
Stucker [Page 10]
Internet Draft DATA method November 12, 2001
4.1 Authentication
Since the data contained in a DATA message can be potentially
sensitive in nature, it is STRONGLY RECOMMENDED that all DATA
messages be authenticated as to their source. Additionally, it is
RECOMMENDED that they be encrypted. The extent to which SIP is
used is up to the implementor as various transport protocols
(such as TLS) can mitigate the need to add additional protection
using SIP. However, SIP authentication SHOULD be part of any
authentication scheme for service data since the service data is
part of the SIP service space. Usage of HTTP Basic authentication
is NOT RECOMMENDED.
4.2 Authorization
In order to support third-party service data (much like third-party
registrations), the content of the TO header identifies the
resource that the data in the message body (or action) is to be
applied. In the case where TO and the FROM headers describe
different parties, the FROM party must be authorized prior to the
sending of the DATA message to take action on the TO party's
service data. The means by which this authorization takes place
is outside the scope of this document.
If the network wishes to conceal whether or not an update to the
service data has succeeded or not, when a third-party is involved,
it may send back a 200 response to the request, even though the
request has failed. It should be stressed however, that such
operation should be used sparingly, and only in scenarios where
notifying the third party that the request failed would reveal
information that could be used in an attack on the network or
TO party of the request. This follows the third-party registration
model already in SIP [1].
5. Statefulness of Service Data
Service data may be soft-stated (expires after a specified period
of time) or hard-stated (does not expire until modified
explicitly). In order to support both models of statefulness, the
presence or absence of an Expires header in the DATA message is
utilized.
Mixed statefulness of data for the same service in the same
request is undefined. If a service contains information that is
both hard-stated and soft-stated, requests and responses must
be crafted such that information can be kept separate unless
such statefulness is identifiable within the message body itself.
Stucker [Page 11]
Internet Draft DATA method November 12, 2001
5.1 Soft-Stated Service Data
Soft-stated service data is denoted by inclusion of an Expires
header specifying the interval of time the data is to be considered
valid. If an Expires value is set in the DATA request, it MUST be
included in the response. The expires interval in the request may
decreased by the service provider. The actual interval that the
service data will be valid for MUST BE INCLUDED in the response.
Requests including an Expires header MUST NOT request an interval
smaller than 60 seconds for the data to be valid.
An Expires header MUST NOT be included in a request containing
a GET or DELETE action (or an sub-typed action derived from these
actions). Responses to a GET MAY contain an Expires header to show
the remaining amount of time soft-stated service data may be
valid for. Responses to a DELETE action MUST NOT contain an Expires
header.
5.2 Hard-Stated Service Data
Hard-stated service data is denoted by NOT including an Expires
header in the request. Service data contained in such requests
SHOULD remain valid until replaced or removed. Responses to
requests containing hard-stated data should likewise not contain
an Expires header.
Statefulness for the DELETE action is defined to be hard-stated
since completion of the action removes any material that could
be soft-stated. Responses to a DELETE action should therefore
always be considered hard-stated, and not contain an Expires
header.
Statefulness for the GET action is defined to be both soft-stated
and hard-stated. Requests with a GET action are considered hard-
stated, but responses MAY or MAY NOT contain an Expires header
depending on the statefullness of the data retrieved. If the
data retrieved is hard-stated, an Expires header should not
be included in the response.
6. Error Cases
6.1 Authorization or Authentication Failure
Errors arising from authorization or authentication failures should
be handled according to the rules for the REGISTER method defined
within SIP.
Stucker [Page 12]
Internet Draft DATA method November 12, 2001
6.2 Service Location Failure
In the case that a service is not located, it is possible to return
the known set of services that are supported for data publication
in the response. This is done by including the list in the
Service header returned in the response to the request. The response
MUST NOT contain the Action header.
Example:
DATA foo.com SIP/2.0
Via: SIP/2.0/UDP pc.foo.com
To: sip:A@foo.com
From: sip:A@foo.com;tag=123
Service: cpl
Action: put
Call-ID: 9876@pc.foo.com
CSeq: 1288 DATA
Contact: sip:B@pc.foo.com
Content-Type: application/cpl+xml
Content-Length: ...
<cpl>
<incoming>
<location url="sip:meadams@47.102.21.11:5060">
<redirect permanent="no" />
</location>
</incoming>
</cpl>
SIP/2.0 400 Service Not Supported
Via: SIP/2.0/UDP pc.foo.com
To: sip:A@foo.com
From: sip:A@foo.com;tag=123
Service: presence, voicemail
Call-ID: 9876@pc.foo.com
CSeq: 1288 DATA
Contact: sip:B@pc.foo.com
Content-Length: 0
Stucker [Page 13]
Internet Draft DATA method November 12, 2001
6.3 Wrong Data Format
If the service is known, but the data supplied is not formatted
according to the requirements of that service, an error response
SHOULD be generated for the request using a 415 Unsupported Media
Type, identifying the accepted formats using the Accept, Accept-
Encoding, and Accept-Language headers.
Example:
DATA foo.com SIP/2.0
Via: SIP/2.0/UDP pc.foo.com
To: sip:A@foo.com
From: sip:A@foo.com;tag=123
Service: presence
Action: put
Call-ID: 9876@pc.foo.com
CSeq: 1288 DATA
Contact: sip:B@pc.foo.com
Content-Type: application/cpl+xml
Content-Length: ...
<cpl>
<incoming>
<location url="sip:meadams@47.102.21.11:5060">
<redirect permanent="no" />
</location>
</incoming>
</cpl>
SIP/2.0 415 Unsupported Media Type
Via: SIP/2.0/UDP pc.foo.com
To: sip:A@foo.com
From: sip:A@foo.com;tag=123
Service: presence
Action: put
Call-ID: 9876@pc.foo.com
CSeq: 1288 DATA
Contact: sip:B@pc.foo.com
Content-Length: 0
Accept: application/cpim+pidf
Stucker [Page 14]
Internet Draft DATA method November 12, 2001
6.4 Unsupported Action
If the service identified does not support the requested action, an
error SHOULD be generated. In this case a 400 response is used to
denote a failure in the syntax of the request. Since the Action is
the incorrect header, the Service header MUST NOT be included. This
is done in order to make it clear which header was in error.
Example:
DATA foo.com SIP/2.0
Via: SIP/2.0/UDP pc.foo.com
To: sip:A@foo.com
From: sip:A@foo.com;tag=123
Service: cpl
Action: put.merge
Call-ID: 9876@pc.foo.com
CSeq: 1288 DATA
Contact: sip:B@pc.foo.com
Content-Type: application/cpl+xml
Content-Length: ...
<cpl>
<incoming>
<location url="sip:meadams@47.102.21.11:5060">
<redirect permanent="no" />
</location>
</incoming>
</cpl>
SIP/2.0 400 Unsupported Action
Via: SIP/2.0/UDP pc.foo.com
To: sip:A@foo.com
From: sip:A@foo.com;tag=123
Action: put, get, delete
Call-ID: 9876@pc.foo.com
CSeq: 1288 DATA
Contact: sip:B@pc.foo.com
Content-Length: 0
7. Extensibility of Actions
Services may extend the basic action values of PUT, GET, and
DELETE for their purposes. Extending these should be done only
when specifying the correct action to take would be difficult
using the contents of the message body.
Stucker [Page 15]
Internet Draft DATA method November 12, 2001
Such extensions are denoted by a ".extension". For instance, if
an append action were desired for a service data operation,
the extended action would be "put.append", etc.
Extensions should not violate the basic operation of the base
action. For instance, "delete.append" would not be considered
a valid extension because to append is to add, which is counter
to the base action "delete" which is to remove.
Extensions must be defined explicitly for each of the basic
actions. Defining a sub-action type for one action does not
define it for all other action types. This may result in
simply stating that the sub-action type is not defined for
a given basic action.
Example:
In order to define the append sub-action, you might state:
put.append - Appends data onto the bottom of the already
existing service data.
get.append - Unsupported.
delete.append - Unsupported.
Example:
In orde to define that actions should take into account
the Date header of the request, you might state:
put.date - Overwrites service data older than the date
specified in the request.
get.date - Retrieves service data newer than the date
specified in the request.
delete.date - Deletes service data older than the date
specified in the request.
Note, that any such sub-actions would need to be registered with
IANA to ensure that the namespace for the action header is
coordinated. This would be done as part of defining a service
specific publication package based on this draft.
Stucker [Page 16]
Internet Draft DATA method November 12, 2001
8. Proof of Concept Example - Presence
In order to provide a proof of concept example to help illustrate
how the DATA method would work with a real-world application, the
following section gives an example of how DATA could be used to
publish presence documents according to the framework of the
SIMPLE draft. The exact rules of how the presence service would
handle each of the actions for DATA would need to be further
specified in a separate draft. Depending on those rules, and
policy uploaded by the user, the actual messaging outcomes may
vary from what is put forth here. This section is for
demonstration only.
Presence
Watcher Server PUA
| SUBSCRIBE | |
|------------------>| |
| 200 OK | |
|<------------------| |
| NOTIFY | |
|<------------------| |
| 200 OK | |
|------------------>| |
| | |
| | F1 DATA |
| |<-------------------|
| | F2 200 OK |
| |------------------->|
| F3 NOTIFY | |
|<------------------| |
| F4 200 OK | |
|------------------>| F5 DATA |
| |<-------------------|
| | F6 200 OK |
| |------------------->|
| F7 NOTIFY | |
|<------------------| |
| F8 200 OK | |
|------------------>| |
| | F9 REGISTER |
| |<-------------------|
| | F10 200 OK |
| |------------------->|
| F11 NOTIFY | |
|<------------------| |
| F12 200 OK | |
|------------------>| |
Stucker [Page 17]
Internet Draft DATA method November 12, 2001
8.1 Message Details
F1 DATA PUA->presence server
DATA sip:example.com SIP/2.0
Via: SIP/2.0/UDP pua.example.com:5060
To: <sip:userA@example.com>
From: <sip:userA@example.com>;tag=1234
Call-ID: 9876@pua.example.com
CSeq: 1 DATA
Service: presence
Action: put
Accept: application/cpim-pidf+xml
Contact: <sip:userA@pua.example.com>
<presence xmlns="http://www.ietf.org/ns/cpim-pidf-xml-1.0">
<tuple name="im-1">
<status>
<value>open</value>
<detail type="im"
schema="http://www.ietf.org/dtd/im-type-im.dtd">available</detail>
</status>
<contact priority="2">im:userA@pua.example.com</contact>
</tuple>
</presence>
F2 200 OK presence server->PUA
SIP/2.0 200 OK
Via: SIP/2.0/UDP pua.example.com:5060
To: <sip:userA@example.com>;tag=abcd
From: <sip:userA@example.com>;tag=1234
Call-ID: 9876@pua.example.com
CSeq: 1 DATA
Contact: sip:example.com
Stucker [Page 18]
Internet Draft DATA method November 12, 2001
F3 NOTIFY presence server-> watcher
NOTIFY sip:userB@watcherhost.example.com SIP/2.0
Via: SIP/2.0/UDP presence.example.com:5060
From: <sip:userA@example.com>;tag=ffd2
To: <sip:userB@example.com>;tag=xfg9
Call-ID: 192837@presence.example.com
CSeq: 1 NOTIFY
Event: presence
Content-Type: application/cpim-pidf+xml
Content-Length: ..
<presence xmlns="http://www.ietf.org/ns/cpim-pidf-xml-1.0">
<tuple name="im-1">
<status>
<value>open</value>
<detail type="im"
schema="http://www.ietf.org/dtd/im-type-im.dtd">available</detail>
</status>
<contact priority="2">im:userA@pua.example.com</contact>
</tuple>
</presence>
F4 200 OK
Via: SIP/2.0/UDP presence.example.com:5060
From: <sip:userA@example.com>;tag=ffd2
To: <sip:userB@example.com>;tag=xfg9
Call-ID: 192837@presence.example.com
CSeq: 1 NOTIFY
Stucker [Page 19]
Internet Draft DATA method November 12, 2001
F5 DATA PUA->presence server
DATA sip:example.com SIP/2.0
Via: SIP/2.0/UDP pua.example.com:5060
To: <sip:userA@example.com>
From: <sip:userA@example.com>;tag=1234
Call-ID: 9876@pua.example.com
CSeq: 2 DATA
Service: presence
Action: delete
Accept: application/cpim-pidf+xml
Contact: <sip:userA@pua.example.com>
<presence xmlns="http://www.ietf.org/ns/cpim-pidf-xml-1.0">
<tuple name="im-1">
<status>
<value>open</value>
</status>
</tuple>
</presence>
F6 200 OK presence server->PUA
SIP/2.0 200 OK
Via: SIP/2.0/UDP pua.example.com:5060
To: <sip:userA@example.com>;tag=abcd
From: <sip:userA@example.com>;tag=1234
Call-ID: 9876@pua.example.com
CSeq: 2 DATA
Contact: sip:example.com
Stucker [Page 20]
Internet Draft DATA method November 12, 2001
F7 NOTIFY presence server-> watcher
NOTIFY sip:userB@watcherhost.example.com SIP/2.0
Via: SIP/2.0/UDP presence.example.com:5060
From: <sip:userA@example.com>;tag=ffd2
To: <sip:userB@example.com>;tag=xfg9
Call-ID: 192837@presence.example.com
CSeq: 2 NOTIFY
Event: presence
Content-Type: application/cpim-pidf+xml
Content-Length: ..
<presence xmlns="http://www.ietf.org/ns/cpim-pidf-xml-1.0">
<tuple name="im-1">
<status>
<value>open</value>
</status>
<contact priority="2">im:userA@example.com</contact>
</tuple>
</presence>
F8 200 OK
Via: SIP/2.0/UDP presence.example.com:5060
From: <sip:userA@example.com>;tag=ffd2
To: <sip:userB@example.com>;tag=xfg9
Call-ID: 192837@presence.example.com
CSeq: 2 NOTIFY
F9 REGISTER PUA->registrar/presence server
REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP pua.example.com:5060
To: <sip:userA@example.com>
From: <sip:userA@example.com>
Call-ID: 234897@pua.example.com
CSeq: 2 REGISTER
Contact: <sip:userA@pua.example.com>
Expires: 0
Stucker [Page 21]
Internet Draft DATA method November 12, 2001
F10 200 OK registrar/presence server->PUA
SIP/2.0 200 OK
Via: SIP/2.0/UDP pua.example.com:5060
To: <sip:userA@example.com>
From: <sip:userA@example.com>
Call-ID: 234897@pua.example.com
CSeq: 2 REGISTER
F11 NOTIFY presence server-> watcher
NOTIFY sip:userB@watcherhost.example.com SIP/2.0
Via: SIP/2.0/UDP presence.example.com:5060
From: <sip:userA@example.com>;tag=ffd2
To: <sip:userB@example.com>;tag=xfg9
Call-ID: 192837@presence.example.com
CSeq: 3 NOTIFY
Event: presence
Content-Type: application/cpim-pidf+xml
Content-Length: ..
<presence xmlns="http://www.ietf.org/ns/cpim-pidf-xml-1.0">
<tuple name="im-1">
<status>
<value>closed</value>
</status>
<contact priority="2">im:userA@example.com</contact>
</tuple>
</presence>
F12 200 OK
Via: SIP/2.0/UDP presence.example.com:5060
From: <sip:userA@example.com>;tag=ffd2
To: <sip:userB@example.com>;tag=xfg9
Call-ID: 192837@presence.example.com
CSeq: 3 NOTIFY
Stucker [Page 22]
Internet Draft DATA method November 12, 2001
9. Compatibility with Proxies
Because the DATA method shares the same routing rules as a REGISTER
method message, in general, the routing of a DATA message is
compatible with the current (bis-05) routing rules contained in
SIP [1].
In particular, a stateless proxy is allowed to inspect the service
header in order to determine the next hop the message should take.
This is allowed for in SIP. However, should a stateless proxy
be the definitive domain controller for a given domain, the DATA
message may be forwarded an additional time (if needed), instead
of the one-more-hop rule stated earlier. Should the stateless
proxy forward to another stateless proxy, an additional hop is
again allowed until the DATA message reaches the correct server
to process the request, or reaches a stateful proxy server.
This follows the routing rules set forth in section 16 of (bis-05)
SIP.
10. Why use SIP?
There are several arguments for using SIP as a mechanism by which
to publish generic service information.
First, there are already several such mechanisms defined
within SIP. The REGISTER method is used to publish contact
information for network routing services. It is possible to use
SIP quite well, without the use of the REGISTER message; at the
cost that there is no network based routing. Thus, in order for
network based routing services to work, a mechanism for
publishing information into the SIP network must be supported:
hence REGISTER.
Another well-known method of publishing service data is the
SUBSCRIBE-NOTIFY framework. There are a number of event packages
including presence, watcherinfo, REFER, and voicemail that have
defined message bodies to support the transport of service
information via SIP.
Finally, SIP itself is designed to be open for service data
transport. Nearly any message sent using SIP is allowed to
contain a message body. It is the very rare case that the
message body MUST be empty, and the content-type header is
very rarely excluded from any given method defined for SIP.
Stucker [Page 23]
Internet Draft DATA method November 12, 2001
The common thread here, though, is that data that is transported
is *directly related* to the service space created by SIP. This
is done, presumably, to make the protocol simpler to understand
by limiting the number of transports, and easier to implement
(again, by using a common protocol). By inspection of the
SIP RFC, and the many drafts and extensions that have been
created since, the conclusion, therefore, can be made that
using SIP to carry service specific information, for services
defined in the SIP space (not any arbitrary service), is
appropriate.
Stucker [Page 24]
Internet Draft DATA method November 12, 2001
11. References
[1] M. Handley/H. Schulzrinne/E. Schooler/J. Rosenberg, "SIP:
Session Initiation Protocol", RFC 2543, IETF; March 1999.
[2] A. Roach, "SIP-Specific Event Notification", <draft-
ietf-sip-events-01.txt>, IETF; November 2001. Work in
progress.
[3] R. Fielding et. al., "Hypertext Transfer Protocol --
HTTP/1.1", RFC2068, IETF, January 1997.
[4] S. Donovan, "Requirements for Publication of SIP
Related Service Data", <draft-donovan-publish-
requirements-00.txt>, September 2001. Work in progress.
[5] Rosenberg, J. and H. Schulzrinne, "Guidelines for Authors of
SIP Extensions", RFC Guidelines, March 2001.
[6] Rosenberg, J., et. al., "SIP Extensions for Presence",
draft-ietf-simple-presence-03.txt, September 2001.
Work in pregress.
[7] M. Handley/H. Schulzrinne/E. Schooler/J. Rosenberg/
G. Camarillo/A. Johnston/J. Peterson/R. Sparks/E. Schooler,
"SIP: Session Initiation Protocol", <draft-ietf-sip-
rfc2543bis-05.txt>, October 2001. Work in Progress.
12. Acknowledgements
The author wishes to thank Steve Donovan for a thorough
presentation of service data publication requirements, as well
as Jennifer Beckman, Trip Ingle, Alex Nava, Mary Barnes,
and Sriram Parameswar for various guidance and support in
the creation of this draft.
13. Author's Address
Brian Stucker
Nortel Networks, Inc.
2375-B Glenville Rd.
Richardson, TX 75082
USA
Phone: +1 972 685 7724
Fax: +1 972 685 3653
E-Mail: bstucker@nortelnetworks.com
Stucker [Page 25]