< draft-rosenberg-sip-call-package-00.txt   draft-rosenberg-sip-call-package-01.txt >
Internet Engineering Task Force SIP WG Internet Engineering Task Force SIPPING WG
Internet Draft Rosenberg,Schulzrinne Internet Draft J. Rosenberg
draft-rosenberg-sip-call-package-00.txt dynamicsoft,Columbia U. dynamicsoft
July 13, 2001 H. Schulzrinne
Expires: February 2001 Columbia U.
draft-rosenberg-sip-call-package-01.txt
March 1, 2002
Expires: September 2002
SIP Event Packages for Call Leg and Conference State SIP Event Packages for Call Leg and Conference State
STATUS OF THIS MEMO STATUS OF THIS MEMO
This document is an Internet-Draft and is in full conformance with This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026. all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
skipping to change at page 1, line 42 skipping to change at page 1, line 45
Abstract Abstract
This document defines two new event packages for the SIP Events This document defines two new event packages for the SIP Events
architecture, along with two new data formats used in notifications architecture, along with two new data formats used in notifications
for those packages. The first is a call-leg package, and the second for those packages. The first is a call-leg package, and the second
is a conference package. The call-leg package allows users to is a conference package. The call-leg package allows users to
subscribe to another user, an receive notifications about the changes subscribe to another user, an receive notifications about the changes
in state of call legs that the user is involved in. The conference in state of call legs that the user is involved in. The conference
package allows users to subscribe to a URL that is associated with a package allows users to subscribe to a URL that is associated with a
conference. Notifications are sent about changes in the membership of conference. Notifications are sent about changes in the membership of
this conference, changes in active speaker, and floor control this conference, changes in active speaker, and media mixing
information. We also define two new SIP headers, To-Replace and To- information. These general purpose packages can enable many new SIP
Join, that can be used to convey globally routable join and services, including single line extension, automatic callback,
replacement URLS. These general purpose packages and the new headers
enable many new SIP services. We discuss how they can be used to
support some of the more challenging services that have been
discussed, including single line extension, automatic callback,
unattended consultation-hold transfer, call park and pickup, and IM- unattended consultation-hold transfer, call park and pickup, and IM-
a-call. a-call.
Table of Contents
1 Introduction ........................................ 5
2 Dialog Event Package ................................ 6
2.1 Event Package Name .................................. 6
2.2 Event Package Parameters ............................ 6
2.3 SUBSCRIBE Bodies .................................... 6
2.4 Subscription Duration ............................... 6
2.5 NOTIFY Bodies ....................................... 7
2.6 Notifier Processing of SUBSCRIBE Requests ........... 7
2.7 Notifier Generation of NOTIFY Requests .............. 8
2.8 Subscriber Processing of NOTIFY Requests ............ 9
2.9 Handling of Forked Requests ......................... 9
2.10 Rate of Notifications ............................... 9
2.11 State Agents ........................................ 9
3 Dialog Data Format .................................. 9
3.1 Structure of Dialog Information ..................... 10
3.2 Dialog Sub-Elements ................................. 11
3.2.1 Status .............................................. 12
3.2.2 Local SDP ........................................... 12
3.2.3 Remote SDP .......................................... 12
3.2.4 Route Set ........................................... 13
3.2.5 Remote Target ....................................... 13
3.2.6 Local CSeq .......................................... 13
3.2.7 Remote CSeq ......................................... 14
4 Conference Event Package ............................ 14
4.1 Event Package Name .................................. 15
4.2 Event Package Parameters ............................ 15
4.3 SUBSCRIBE Bodies .................................... 15
4.4 Subscription Duration ............................... 15
4.5 NOTIFY Bodies ....................................... 15
4.6 Notifier Processing of SUBSCRIBE Requests ........... 16
4.7 Notifier Generation of NOTIFY Requests .............. 16
4.8 Subscriber Processing of NOTIFY Requests ............ 16
4.9 Handling of Forked Requests ......................... 17
4.10 Rate of Notifications ............................... 17
4.11 State Agents ........................................ 17
5 Conference Data Format .............................. 17
5.1 Structute of the Format ............................. 17
5.2 User Sub-Elements ................................... 18
5.3 Example ............................................. 19
6 Relationship to User Presence ....................... 20
7 Open Issues and To-Dos .............................. 20
8 Security Considerations ............................. 20
9 IANA Considerations ................................. 20
10 Acknowledgements .................................... 21
11 Changes since -00 ................................... 21
12 Authors Addresses ................................... 21
13 Normative References ................................ 21
14 Informative References .............................. 22
1 Introduction 1 Introduction
The SIP Events architecture [1] defines general mechanisms for The SIP Events framework [1] defines general mechanisms for
subscription to, and notification of, events within SIP networks. It subscription to, and notification of, events within SIP networks. It
introduces the notion of a package, which is a specific introduces the notion of a package, which is a specific
"instantiation" of the events mechanism for a well-defined set of "instantiation" of the events mechanism for a well-defined set of
events. Packages have been defined for user presence [2], watcher events. Packages have been defined for user presence [3], watcher
information [3], and message waiting indicators [4], amongst others. information [4], and message waiting indicators [5], amongst others.
Here, we define two new packages - one for call legs, and the other Here, we define two new packages - one for dialogs, and the other for
for conferences. conferences.
The need for these packages is driven based on the fact that many The need for these packages is driven based on the fact that many
applications are driven off of knowledge about the progress of calls applications are driven off of knowledge about the progress of
and conferences. In the case of call legs, we see many potential dialogs and conferences. In the case of dialogs, we see many
applications that require knowledge of call-leg state: potential applications that require knowledge of dialog state:
Automatic Callback: In this basic PSTN application, user A calls Automatic Callback: In this basic PSTN application, user A calls
user B. User B is busy. User A would like to get a callback user B. User B is busy. User A would like to get a callback
when user B hangs up. When B hangs up, user A's phone when user B hangs up. When B hangs up, user A's phone
rings. When A picks it up, they here ringing, and are being rings. When A picks it up, they here ringing, and are being
connected to B. In VoIP, this requires A to receive a connected to B. In VoIP, this requires A to receive a
notification when the call-legs at A are complete. notification when the dialogs at A are complete.
Presence-Enabled Conferencing: In this application, a user A Presence-Enabled Conferencing: In this application, a user A
wishes to set up a conference call with users B and C. wishes to set up a conference call with users B and C.
Rather than scheduling it, it is to be created Rather than scheduling it, it is to be created
automatically when A, B and C are all available. To do automatically when A, B and C are all available. To do
this, the server providing the application would like to this, the server providing the application would like to
know whether A, B and C are "online", not idle, and not in know whether A, B and C are "online", not idle, and not in
a phone call. Determining whether or not A, B and C are in a phone call. Determining whether or not A, B and C are in
calls can be done in two ways. In the first, the server calls can be done in two ways. In the first, the server
acts as a call stateful proxy for users A, B and C, and acts as a call stateful proxy for users A, B and C, and
therefore knows their call state. This won't always be therefore knows their call state. This won't always be
possible, however, and it introduces scalability, possible, however, and it introduces scalability,
reliability, and operational complexities. Rather, the reliability, and operational complexities. Rather, the
server would subscriber to the call state of those users, server would subscriber to the dialog state of those users,
and receive notifications as it changes. This enables the and receive notifications as it changes. This enables the
application to be provided in a distributed way; the server application to be provided in a distributed way; the server
need not reside in the same domain as the users. need not reside in the same domain as the users.
IM Conference Alerts: In this application, a user can get an IM IM Conference Alerts: In this application, a user can get an IM
sent to their phone whenever someone joins a conference sent to their phone whenever someone joins a conference
that the phone is involved in. The IM alerts are generated that the phone is involved in. The IM alerts are generated
by an application separate from the conference server. by an application separate from the conference server.
In general, defining call-leg and conference state packages allows In general, defining dialog and conference state packages allows for
for construction of distributed applications, where the application construction of distributed applications, where the application
requires information on call-leg and conference state, but is not requires information on dialog and conference state, but is not co-
co-resident with the end user or conference server. We think this is resident with the end user or conference server. We think this is a
a very important piece of the SIP services model. very important piece of the SIP services model.
2 Call-Leg Event Package 2 Dialog Event Package
This section fills in the template that is needed in order to fully This section provides the details for defining a SIP Events package,
specify a SIP event package for call-leg state. as specified by [1].
2.1 Package Name 2.1 Event Package Name
The name of this event package is "call-leg". This package name is The name of this event package is "dialog". This package name is
carried in the Event and Allow-Events header, as defined in [1]. carried in the Event and Allow-Events header, as defined in [1].
2.2 SUBSCRIBE Bodies 2.2 Event Package Parameters
A SUBSCRIBE for a call-leg package MAY contain a body. This body This package does not define any event package parameters.
2.3 SUBSCRIBE Bodies
A SUBSCRIBE for a dialog package MAY contain a body. This body
defines a filter to apply to the subscription. defines a filter to apply to the subscription.
A SUBSCRIBE for a call-leg package MAY be sent without a body. This A SUBSCRIBE for a dialog package MAY be sent without a body. This
implies the default subscription filtering policy. The default policy implies the default subscription filtering policy. The default policy
is: is:
o Notifications are generated every time there is any change in o Notifications are generated every time there is any change in
the state of any call legs for the user identified in the the state of any dialogs for the user identified in the
request URI of the SUBSCRIBE. request URI of the SUBSCRIBE.
o Notifications do not normally contain full state; rather, they o Notifications do not normally contain full state; rather, they
only indicate the state of the call-leg whose state has only indicate the state of the dialog whose state has changed.
changed. The exception is a NOTIFY sent in response to a The exception is a NOTIFY sent in response to a SUBSCRIBE.
SUBSCRIBE. These NOTIFYs contain the complete view of call leg These NOTIFYs contain the complete view of dialog state.
state.
o The notifications contain the identities of the participants o The notifications contain the identities of the participants
in the call leg, the call-leg identifiers, and a join URL. in the dialog, and the dialog identifiers. Additional
Additional information, such as the route set, CSeq numbers, information, such as the route set, remote target URI, CSeq
SDP information, and so on, are not included normally unless numbers, SDP information, and so on, are not included normally
explicitly requested. unless explicitly requested and/or explicitly authorized.
2.3 Expiration 2.4 Subscription Duration
Call leg state changes fairly quickly; once established, a typical Dialog state changes fairly quickly; once established, a typical
phone call lasts a few minutes (this is different for other session phone call lasts a few minutes (this is different for other session
types, of course). However, the interval between new calls is types, of course). However, the interval between new calls is
typically infrequent. typically infrequent.
We do note that there are two distinct use cases for call leg state. We do note that there are two distinct use cases for dialog state.
The first is when a subscriber is interested in the state of a The first is when a subscriber is interested in the state of a
specific call leg (and they are authorized to find out about just the specific dialog (and they are authorized to find out about just the
state of that call leg). In that case, when the call leg terminates, state of that dialog). In that case, when the dialog terminates, so
so too does the subscription. In these cases, the refresh interval too does the subscription. In these cases, the refresh interval can
can be very long, since there exists an easy alternative way to be very long, since there exists an easy alternative way to destroy
destroy subscription state. As a result, a default of one day for subscription state. As a result, the default duration of these
these subscriptions is RECOMMENDED. subscriptions is one day. The subscriber MAY request other durations.
In another case, a subscriber is interested in the state of all call In another case, a subscriber is interested in the state of all call
legs for a specific user. In these cases, a shorter interval makes legs for a specific user. In these cases, a shorter interval makes
more sense. One hour is RECOMMENDED as the default. more sense. The default is one hour for these subscriptions.
2.4 NOTIFY Bodies OPEN ISSUE: We should probably have a single default
subscription duration.
The body of the notification contains a call-leg information 2.5 NOTIFY Bodies
document. The format of this document is described in Section 3. All
subscibers MUST support this format, and MUST list its type in an
Accept header in the SUBSCRIBE.
Other call leg information formats might be defined in the future. In The body of the notification contains a dialog information document.
The format of this document is described in Section 3. Its MIME type
is "application/dialog-info+xml". All subscribers MUST support this
format, and MUST list its type in any Accept header in the SUBSCRIBE.
When no Accept header is present in the SUBSCRIBE, its default value
is "application/dialog-info+xml".
Other dialog information formats might be defined in the future. In
that case, the subscriptions MAY indicate support for other formats. that case, the subscriptions MAY indicate support for other formats.
However, they MUST always support and list application/call-leg- However, they MUST always support and list "application/dialog-
info+xml as an allowed format. info+xml" as an allowed format.
Of course, the notifications generated by the server MUST be in one Of course, the notifications generated by the server MUST be in one
of the formats specified in the Accept header in the SUBSCRIBE of the formats specified in the Accept header in the SUBSCRIBE
request. request.
2.5 Authorization Considerations 2.6 Notifier Processing of SUBSCRIBE Requests
The call-leg information for a user contains very sensitive The dialog information for a user contains very sensitive
information. Therefore, all subscriptions SHOULD be authenticated and information. Therefore, all subscriptions SHOULD be authenticated and
then authorized before approval. Authorization policy is at the then authorized before approval. Authorization policy is at the
discretion of the administrator, as always. However, a few discretion of the administrator, as always. However, a few
recommendations can be made. recommendations can be made.
It is RECOMMENDED that if the policy of a user is that A is called to It is RECOMMENDED that if the policy of a user is that A is allowed
call them, subscriptions from user A be allowed. However, the to call them, dialog subscriptions from user A be allowed. However,
information provided in the notifications does not contain any call the information provided in the notifications does not contain any
leg identification information; merely an indication of whether the dialog identification information; merely an indication of whether
user in in one or more calls, or not. Specifically, they should not the user in in one or more calls, or not. Specifically, they should
be able to find out any more information than if they sent an INVITE. not be able to find out any more information than if they sent an
INVITE.
It is RECOMMENDED that if a user agent registers with the address- It is RECOMMENDED that if a user agent registers with the address-
of-record X, that this user agent authorize subscriptions that come of-record X, that this user agent authorize subscriptions that come
from any entity that can authenticate itself as X. Complete from any entity that can authenticate itself as X. Complete
information on the call leg state SHOULD be sent in this case. This information on the dialog state SHOULD be sent in this case. This
authorization behavior allows a group of devices representing a authorization behavior allows a group of devices representing a
single user to all become aware of each other's state. single user to all become aware of each other's state. This is useful
for applications such as single-line-extension.
2.6 Generation of Notifications 2.7 Notifier Generation of NOTIFY Requests
Notifications are generated for the call-leg package when a new Notifications are generated for the dialog package when a new dialog
call-leg comes into existence at a UA, or when the state of an comes into existence at a UA, or when the state of an existing dialog
existing call leg changes. changes.
For the purposes of this package, we define the states of a call leg For the purposes of this package, we define the states of a dialog
through numeric codes. These codes are equivalent to the most recent through numeric codes. These codes are equivalent to the most recent
SIP status codes sent in response to the INVITE which created the SIP status codes sent in response to the INVITE which created the
call leg. The status code "0" is reserved for the case where no call leg. The status code "0" is reserved for the case where no
response has yet been received or sent. response has yet been received or sent.
When a UAC initially creates an INVITE to establish a call, this When a UAC initially creates an INVITE to establish a call, this
causes a change to state "0". When it receives the first non-100 causes a change to state "0". When it receives the first non-100
provisional response, the state changes to the value of that status provisional response, the state changes to the value of that status
code. Any further provisional responses cause the UA to change state code. Any further provisional responses cause the UA to change state
to the value of that status code. When a final response is received, to the value of that status code. When a final response is received,
the state changes to the value of that response. If the response was the state changes to the value of that response. If the response was
a non-200, the call-leg is considered terminated, and no further a non-200, the dialog is considered terminated, and no further state
state changes are possible. Multiple 2xx responses received create changes are possible. Multiple 2xx responses received create
additional call legs, each with the state of that specific 2xx. additional dialogs, each with the state of that specific 2xx.
When a UAS initially receives an INVITE to establish a call, this When a UAS initially receives an INVITE to establish a call, this
causes a change to the state of the provisional response which was causes a change to the state of the provisional response which was
sent. Any subequent provisional responses cause a change in state to sent. Any subequent provisional responses cause a change in state to
the value of that response. A final response causes a transition in the value of that response. A final response causes a transition in
state to that response code. There is no change in state when the ACK state to that response code. There is no change in state when the ACK
arrives. However, if no ACK is received, and the UAS destroys the arrives. However, if no ACK is received, and the UAS destroys the
call, the state changes to a value of -1. call, the state changes to a value of -1.
When the call is terminated as a result of a BYE, the state changes When the call is terminated as a result of a BYE, the state changes
to -1. to -1.
OPEN ISSUE: This is kind of ugly. We could alternately OPEN ISSUE: This is kind of ugly. We could alternately
define a more formal state machine. define a more formal state machine.
2.7 Rate Limitations on NOTIFY 2.8 Subscriber Processing of NOTIFY Requests
The SIP Events framework expects packages to specify how a subscriber
processes NOTIFY requests in any package specific ways, and in
particular, how it uses the NOTIFY requests to contruct a coherent
view of the state of the subscribed resource.
Typically, the NOTIFY for the dialog package will only contain
information about those dialogs whose state has changed. To construct
a coherent view of the total state of all dialogs, a subscriber to
the dialog package will need to combine NOTIFYs received over time.
The subscriber maintains is complete dialog list in a table, indexed
by the id. This ID is different from the formal dialog ID as defined
in [2], which is the concatenation of the local tag, remote tag, and
Call-Id. This ID is conveyed in the id attribute of the dialog
element of the "application/dialog-info+xml" type. If the dialog
information in a NOTIFY has a dialog listed with an ID not in the
table, an entry is added to that table. The version number from the
dialog element is also extracted, and placed in the table. If the
dialog information in a NOTIFY has a dialog listed with an ID in the
table, and the version in the NOTIFY is greater than the version
stored in the table, the dialog information in the table for that
dialog is updated, including the version number. If a dialog is
updated such that its status is now "-1", that entry MAY be removed
from the table at any time.
2.9 Handling of Forked Requests
A forked SUBSCRIBE request for dialog state can install multiple
subscriptions. Subscribers to this package MUST be prepared to
install subscription state for each NOTIFY generated as a result of a
single SUBSCRIBE.
2.10 Rate of Notifications
For reasons of congestion control, it is important that the rate of For reasons of congestion control, it is important that the rate of
notifications not become excessive. As a result, it is RECOMMENDED notifications not become excessive. As a result, it is RECOMMENDED
that the server not generate notifications for a single subscriber at that the server not generate notifications for a single subscriber at
a rate faster than once every 5 seconds. a rate faster than once every 5 seconds.
3 Call-Leg Data Format 2.11 State Agents
We specify an XML-based data format to describe the state of call
legs. The MIME type for this format is application/call-leg-info+xml,
consistent with the recommendations provided in RFC 3023 [5].
3.1 Structure of Call Leg Information Dialog state is ideally maintained in the user agents in which the
dialog resides. Therefore, the elements that maintain the dialog are
the ones best suited to handle subscriptions to it. Therefore, the
usage of state agents is NOT RECOMMENDED for this package.
A call-leg-info document starts with a user tag that identitifies the 3 Dialog Data Format
user. Within that tag are a series of call-leg tags. Each of those We specify an XML-based data format to describe the state of a
use attributes to identify the call leg, using the local and remote dialog. The MIME type for this format is "application/dialog-
URIs, local and remote tags, and the Call-ID. Within the call leg info+xml", consistent with the recommendations provided in RFC 3023
tags are a single mandatory tag which contains the status, followed [6].
by a series of optional tags that contain additional information
about the call leg. There is also an optional tag called join, which 3.1 Structure of Dialog Information
contains a URL that can be used to join the conference associated
with the call leg (and if there is none, one is created). There is A dialog-info document starts with a user tag that identitifies the
another pair of optional tags called replace-local and replace- user. Within that tag are a series of dialog tags. Each of those use
remote, which contain a URL to use that can replace the specific call attributes to identify the dialog and provide its version number.
leg at either side. There are also attributes to provide the formal dialog identifier,
using the local and remote tags, and the Call-ID. Additional
attributes are present to specify the local and remote URIs. There is
also an attribute that indicates whether the user initiated this
dialog or not. Within the dialog tags are a single mandatory tag
which contains the status, followed by a series of optional tags that
contain additional information about the dialog.
The top level tag is user: The top level tag is user:
<!ELEMENT user (call-leg*)> <!ELEMENT user (dialog*)>
<!ATTLIST user uri CDATA #REQUIRED> <!ATTLIST user uri CDATA #REQUIRED>
The mandatory uri attribute is the identifier of the user whose The mandatory uri attribute is the identifier of the user whose
call-leg state is being reported. dialog state is being reported.
What follows is a series of call-leg tags: What follows is a series of dialog tags:
<!ELEMENT call-leg (status,join?,replace-local?,replace-remote?, <!ELEMENT dialog (status,local-sdp?,remote-sdp?,
local-sdp?,remote-sdp?, route-set?,remote-target?,local-cseq?,remote-cseq?)
route-set?,local-cseq?,remote-cseq?> <!ATTLIST dialog id CDATA #REQUIRED
<!ATTLIST call-leg call-id CDATA #IMPLIED version CDATA #REQUIRED
call-id CDATA #IMPLIED
local-uri CDATA #IMPLIED local-uri CDATA #IMPLIED
local-tag CDATA #IMPLIED local-tag CDATA #IMPLIED
remote-uri CDATA #IMPLIED remote-uri CDATA #IMPLIED
remote-tag CDATA #IMPLIED> remote-tag CDATA #IMPLIED
direction (iniatiator|recipient) #IMPLIED>
The local-uri and local-tag specify the URL and tag placed in the The local-uri, local-tag, remote-uri, remote-tag and call-id
From field of outgoing INVITEs, and present in the From field of attributes convey their corresponding components of the dialog state
incoming INVITEs. The remote-uri and remote-tag specify the URL and as defined in [2]. The direction attribute is "initiator" if the user
tag placed in the To field of outgoing INVITEs, and present in the initiated this dialog, and "recipient" if it did not. The remote tag
From field of incoming INVITEs. The call-id is the Call-ID for the attribute won't be present if there is only a "half-dialog",
leg. The tag attributes are not present if the tag is not specified resulting from generation of a request that can create a dialog.
(or not yet specified).
For example, if a UAC sends an INVITE that looks like, in part: For example, if a UAC sends an INVITE that looks like, in part:
INVITE sip:callee@foo.com SIP/2.0 INVITE sip:callee@foo.com SIP/2.0
From: sip:caller@bar.com;tag=123 From: sip:caller@bar.com;tag=123
To: sip:callee@foo.com To: sip:callee@foo.com
Call-ID: 987@1.2.3.4 Call-ID: 987@1.2.3.4
the call-leg tag sent out in a notification might looks like: the dialog tag sent out in a notification might looks like:
<call-leg call-id="987@1.2.3.4" local-uri="sip:caller@bar.com" <dialog id="as7d900as8" version="0" call-id="987@1.2.3.4"
local-tag="123" remote-uri="sip:callee@foo.com"> local-uri="sip:caller@bar.com"
local-tag="123" remote-uri="sip:callee@foo.com"
direction="initiator">
If a 200 OK is received, which looks like, in part: If a 200 OK is received, which looks like, in part:
INVITE sip:callee@foo.com SIP/2.0 SIP/2.0 200 OK
From: sip:caller@bar.com;tag=123 From: sip:caller@bar.com;tag=123
To: sip:callee@foo.com;tag=abc To: sip:callee@foo.com;tag=abc
Call-ID: 987@1.2.3.4 Call-ID: 987@1.2.3.4
The call-leg ID is now complete, and the notification sent out will The dialog is now confirmed, and the notification sent out will have
have a call-leg tag which looks like: a dialog tag which looks like:
<call-leg call-id="987@1.2.3.4" local-uri="sip:caller@bar.com" <dialog id="as7d900as8" version="0" call-id="987@1.2.3.4"
local-tag="123" remote-uri="sip:callee@foo.com" remote-tag="abc"> local-uri="sip:caller@bar.com"
local-tag="123" remote-uri="sip:callee@foo.com"
remote-tag="abc" direction="initiator">
3.2 Call Leg Subtags 3.2 Dialog Sub-Elements
There are many subtags defined for the call-leg. There are many sub-elements defined for the dialog element.
3.2.1 Status 3.2.1 Status
The only mandatory subtag of call-leg is status. The only mandatory sub-element of dialog is status.
<!ELEMENT status CDATA> <!ELEMENT status CDATA>
<!ATTLIST status code CDATA #REQUIRED> <!ATTLIST status code CDATA #REQUIRED>
The mandatory code attribute contains the status code. This is the The mandatory code attribute contains the status code. This is the
SIP response code last sent or received for this leg in the initial SIP response code last sent or received for this leg in the initial
INVITE that established the leg. If no response has been sent or INVITE that established the leg. If no response has been sent or
received, the value of zero is used. If the call ends, a value of -1 received, the value of zero is used. If the call ends, a value of -1
is used. is used.
The value within the status tag is a textual phrase that can be The value within the status tag is a textual phrase that can be
rendered to described call status. The reason phrase from the rendered to described call status. The reason phrase from the
response is RECOMMENDED. response is RECOMMENDED.
Example: Example:
<status code="180">Ringing</status> <status code="180">Ringing</status>
3.2.2 Join 3.2.2 Local SDP
The optional join tag provides a URL that can be used to join any
conference associated with the call-leg. When the notifier receives
an INVITE with this URL, it MUST treat that as a request to join the
conference. The notifier can use any method to create the conference
call, if it doesn't already exist. Several approaches are described
in [6]. The format of the URL is at the discretion of the notifier.
It is RECOMMENDED that it be structured so that the notifier can
associate it with the specific call leg. As with any other
invitiations, an INVITE received with this URL SHOULD be
authenticated.
The URL MUST be globally routable.
OPEN ISSUE: Tall order. This means UAs will need a way to
generate URLs which they know are globally routable to
them.
<!ELEMENT join >
<!ATTLIST join uri CDATA #REQUIRED>
Clearly, the notifier SHOULD only insert this tag if it can execute a
multi-party conference call for the user.
3.2.3 Replace Tags
The optional replace-local and replace-remote tags provide URLs that
can be used to replace the given call leg at either side. In other
words, if A are B are in a call, and A generated a NOTIFY with a
replace-local and replace-remote tag, the replace-local URL would get
routed to A, and replace the call leg with B. The replace-remote URL
would get routed to B, and replace the call leg with A.
Replacement means that the new call leg is silently accepted, and a
BYE is sent on the old call leg.
<!ELEMENT replace-local >
<!ELEMENT replace-remote >
<!ATTLIST replace-local uri CDATA #REQUIRED>
<!ATTLIST replace-remote uri CDATA #REQUIRED>
This has the very interesting implication of removing the
need for a separate Replaces header. Instead, the URI
itself would indicate to the UA that a replaces for a
specific call leg is desired. This is very much in the
spirit of the web, and of RFC 3087 [7], where URLs are
almost always server generated, and the semantics of the
URL have meaning only within the context of the server that
created them.
Clearly, the notifier SHOULD only insert this tag if it can execute
the call replacement.
3.2.4 Discussion on Join and Replaces
The inclusion of the join and replace tags merits discussion.
Do we really need join and replaces as part of this specification? We
could instead define a Join header, and revive the Replaces header
draft. That has the benefit of being explicit. The benefit of the
approach here is that we get to define a totally different URL. By
making it globally routable, we fix the "unassisted transfer with
consultation hold" problem [8]. Specifically, this transfer variant
is hard since the transferor needs to pass, in the Refer-To header, a
globally routable URL that reaches the specific UA that is the
transfer target. Neither the Contact nor the To/From have this
property. But, by defining a specific URL just for the purposes of
replacement, we can, by definition, make it globally routable to the
UA which generated it. That seems very, very useful. It means that,
unlike Contact and To/From, this URL can be emailed, IM'd, REFERed,
placed in html, or whatever, and it is guaranteed to get to the right
place and do the right thing. Furthermore, by generating the URLs for
each call, the notifier can embed information into the URLs for
cookie functionality. Finally, using a separate URL means the join or
replace requests can go to different hosts that the ones owning the
call leg. Not sure if this is useful, though.
The replace-remote URL can only be known to a notifier for call-leg
events if its received from the other party in the call-leg in the
INVITE or 200 OK. As such, we would also propose a To-Join and To-
Replace header, which is present in either INVITE or 200 OK. It
contains a URL that can be used to replace the call leg for each
respective side. Putting them both in a NOTIFY means that other
entities besides the participants in a call can get at them, which is
possibly useful (operator barge-in, for example).
Its worth observing that currently, there is an asymmetry between the
way one joins a conference, and the way one replaces a call leg. To
join a conference call, we have agreed that one sends an INVITE to a
URL on a conference server which interprets that URL to mean "mix me
into the call with everyone else that has used the same URL". This is
exactly consistent with the approach here for joining. However, we
have defined an explicit Replaces header. Why the difference? We
should either have both a Join and Replaces header, or neither.
Indeed, there is a problem right now with ad-hoc conferences that is
related to the proposal here. Lets say A clicks a URL in a web page
that says "click here to call". This results in some call being
placed to B. At some point during the call, A decides to add another
party, C. According to the multiparty conferencing models draft [6],
A would obtain a URL for a conference server, and REFER B to that
server. However, this is totally unneeded (and bad), if B is already
a conference server! Indeed, A has no way, right now, of
ascertaining whether that URL in the web page is for a single user,
or to a conference server that automatically dials out to B. In one
case (where its a user), A would need to obtain a conference URL, and
REFER B to it. In the other, A could directly REFER C to the URL it
used to call B.
The problem is solved when we stop making assumptions about the
semantics of the URL. URLs should ideally be handed to a user, either
through interpersonal contact (i.e., on a business card), or through
a transmission mechanism that defines a specific usage for those
URLs. In the above scenario, if A wants to add C, A should not make
any assumptions about whether the URL to call B can be used for
adding users to a conference. Only B can know this. So, A needs to
ask B what URL to use to join. That can be done using the
SUBSCRIBE/NOTIFY mechanisms here (although this is a lot of overhead;
these URLs could be passed directly in the INVITE and 200 OK). B
would then provide the URL, which would be the same URL used to call
it in the case of a dial-out conference server, or a new URL obtained
by B, pointing to a conference server, if B was for an end user that
didn't want to do endpoint mixing. Indeed, many different URLs could
be used, and B is the ideal party to decide.
3.2.5 Local SDP
The local SDP tag contains the SDP used by the notifier for its end The local SDP tag contains the SDP used by the notifier for its end
of the call leg. This tag should generally NOT be included in the of the dialog. This tag should generally NOT be included in the
notifications, unless explicitly requested by the subscriber. notifications, unless explicitly requested by the subscriber.
<!ELEMENT local-sdp CDATA> <!ELEMENT local-sdp CDATA>
The SDP is included, verbatim, between the tags. The SDP is included, verbatim, between the tags.
3.2.6 Remote SDP 3.2.3 Remote SDP
The remote SDP tag contains the SDP used by the notifier for the The remote SDP tag contains the SDP used by the notifier for the
other end of the call leg. This tag should generally NOT be included other end of the dialog. This tag should generally NOT be included in
in the notifications, unless explicitly requested by the subscriber. the notifications, unless explicitly requested by the subscriber.
<!ELEMENT remote-sdp CDATA> <!ELEMENT remote-sdp CDATA>
The SDP is included, verbatim, between the tags. The SDP is included, verbatim, between the tags.
3.2.7 Route Set 3.2.4 Route Set
The route-set tag contains the route set, as defined in RFC 2543bis The route-set tag contains the route set as constructed by the user
[9]. It is the combination of the Record-Route and Contact headers agent for this dialog, as defined in RFC BBBB [2]. It is constructed
used for this call leg. This tag should generally NOT be included in from the Record-Route header field used for this dialog. This tag
the notifications, unless explicitly requested by the subscriber. should generally NOT be included in the notifications, unless
explicitly requested by the subscriber.
<!ELEMENT route-set CDATA> <!ELEMENT route-set CDATA>
The route set is included verbatim. It is structured as a comma The route set is included verbatim. It is structured as a comma
separated list of URLs. separated list of URLs.
Example: Example:
<route-set>sip:user@host,sip:user@proxy</route-set> <route-set>sip:proxy2.example.com;lr</route-set>
3.2.8 Local CSeq 3.2.5 Remote Target
The remote-target contains the remote-target URI as constructed by
the user agent for this dialog, as defined in RFC BBBB [2]. It is
constructed from the Contact header of the INVITE. This tag should
generally not be included in notifications, unless explicitly
requested by the subscriber.
<!ELEMENT remote-target CDATA>
The remote target URI is included verbatim between the tags.
Example:
<remote-target>sip:user@pc33.example.com</remote-target>
3.2.6 Local CSeq
The local-cseq tag contains the most recent value of the CSeq header The local-cseq tag contains the most recent value of the CSeq header
used by the UA in an outgoing request on the call leg. This tag used by the UA in an outgoing request on the dialog. This tag should
should generally NOT be included in the notifications, unless generally NOT be included in the notifications, unless explicitly
explicitly requested by the subscriber. requested by the subscriber.
<!ELEMENT local-cseq CDATA> <!ELEMENT local-cseq CDATA>
The numeric value of the CSeq is included as the CDATA. The numeric value of the CSeq is included as the CDATA.
3.2.9 Remote CSeq 3.2.7 Remote CSeq
The remote-cseq tag contains the most recent value of the CSeq header The remote-cseq tag contains the most recent value of the CSeq header
seen by the UA in an incoming request on the call leg. This tag seen by the UA in an incoming request on the dialog. This tag should
should generally NOT be included in the notifications, unless generally NOT be included in the notifications, unless explicitly
explicitly requested by the subscriber. requested by the subscriber.
<!ELEMENT remote-cseq CDATA> <!ELEMENT remote-cseq CDATA>
The numeric value of the CSeq is included as the CDATA. The numeric value of the CSeq is included as the CDATA.
4 Conference Event Package 4 Conference Event Package
The conference event package allows a user to subscribe to a The conference event package allows a user to subscribe to a
conference. A conference is a collection of users that are all able conference. A conference is a collection of users that are all able
to communicate with each other. Generally, when multicast is not to communicate with each other. Generally, when multicast is not
used, a conference is associated by a set of call legs that have used, a conference is associated by a set of dialogs that have their
their media mixed together. This is true for all of the non-multicast media mixed together. This is true for all of the non-multicast
models in [6]. However, some of the models use topologies where there models in [7]. However, some of the models use topologies where there
is no root to which all call-legs are connected. These topologies do is no root to which all dialogs are connected. These topologies do
not work well with the mechanism here. not work well with the mechanism here.
This package allows a user to subscribe to a conference, identified This package allows a user to subscribe to a conference, identified
by a SIP URL. Ideally, this SIP URL routes the SUBSCRIBE to the by a SIP URI. Ideally, this SIP URI routes the SUBSCRIBE to the
entity acting as the root of the topology (which is why it doesn't entity acting as the root of the topology (which is why it doesn't
work well for the non-centralized topologies). The notifications work well for the non-centralized topologies). The notifications
contain information on the participants in the conference. The contain information on the participants in the conference. The
specific information conveyed is: specific information conveyed is:
o The SIP URL identifying the user. o The SIP URI identifying the user.
o Their status in the conference (active, declined, departed). o The dialog state associated with that users attachment to the
conference.
o The replace URLs for the call leg connecting to that user. o Their status in the conference (active, declined, departed).
o If floor control policies are in place, what the user's floor o Their status in terms of receiving media in the conference.
control status is.
This section fills in the template that is needed in order to fully This section provides the details for defining a SIP Events package,
specify the SIP event package for conferences. as specified by [1].
4.1 Package Name 4.1 Event Package Name
The name of this event package is "conference". This package name is The name of this event package is "conference". This package name is
carried in the Event and Allow-Events header, as defined in [1]. carried in the Event and Allow-Events header, as defined in [1].
4.2 SUBSCRIBE Bodies 4.2 Event Package Parameters
A SUBSCRIBE for a call-leg package MAY contain a body. This body This event package does not define any event package parameters.
4.3 SUBSCRIBE Bodies
A SUBSCRIBE for a dialog package MAY contain a body. This body
defines a filter to apply to the subscription. defines a filter to apply to the subscription.
A SUBSCRIBE for a conference package MAY be sent without a body. This A SUBSCRIBE for a conference package MAY be sent without a body. This
implies the default subscription filtering policy. The default policy implies the default subscription filtering policy. The default policy
is: is:
o Notifications are generated every time there is any change in o Notifications are generated every time there is any change in
the set of users participating in the conference, or a change the set of users participating in the conference, or a change
in floor control status (assuming floor control is in use). their state (dialog state, media mixing state, etc.)
o Notifications do not normally contain full state; rather, they o Notifications do not normally contain full state; rather, they
only indicate the state of the participant whose state has only indicate the state of the participant whose state has
changed. The exception is a NOTIFY sent in response to a changed. The exception is a NOTIFY sent in response to a
SUBSCRIBE. These NOTIFYs contain the complete view of SUBSCRIBE. These NOTIFYs contain the complete view of
conference state. conference state.
o For a given user, the notifications contain the identity o For a given user, the notifications contain the identity
information, status, and replace URLs. The floor control information and status.
information is not provided unless explicitly requested.
4.4 Subscription Duration
4.3 Expiration
The default expiration time for a subscription to a conference is one The default expiration time for a subscription to a conference is one
hour. Of course, once the conference ends, all subscriptions to that hour. Of course, once the conference ends, all subscriptions to that
particular conference are terminated. particular conference are terminated, with a reason of "noresource"
[1].
4.4 NOTIFY Bodies 4.5 NOTIFY Bodies
The body of the notification contains a conference information The body of the notification contains a conference information
document. The format of this document is described in Section 5. All document. The format of this document is described in Section 5. Its
subscibers MUST support this format, and MUST list its type in an MIME type is "application/conference-info+xml". All subscibers MUST
Accept header in the SUBSCRIBE. support this format, and MUST list its type in an Accept header in
the SUBSCRIBE. The default value for the Accept header when it is not
present in a request is "application/conference-info+xml".
Other conference information formats might be defined in the future. Other conference information formats might be defined in the future.
In that case, the subscriptions MAY indicate support for other In that case, the subscriptions MAY indicate support for other
formats. However, they MUST always support and list formats. However, they MUST always support and list
application/conference-info+xml as an allowed format. "application/conference-info+xml" as an allowed format.
Of course, the notifications generated by the server MUST be in one Of course, the notifications generated by the server MUST be in one
of the formats specified in the Accept header in the SUBSCRIBE of the formats specified in the Accept header in the SUBSCRIBE
request. request.
4.5 Authorization Considerations 4.6 Notifier Processing of SUBSCRIBE Requests
The conference information contains very sensitive information. The conference information contains very sensitive information.
Therefore, all subscriptions SHOULD be authenticated and then Therefore, all subscriptions SHOULD be authenticated and then
authorized before approval. Authorization policy is at the discretion authorized before approval. Authorization policy is at the discretion
of the administrator, as always. However, a few recommendations can of the administrator, as always. However, a few recommendations can
be made. be made.
It is RECOMMENDED that all users in the conference be allowed to It is RECOMMENDED that all users in the conference be allowed to
subscribe to the conference. subscribe to the conference.
4.6 Generation of Notifications 4.7 Notifier Generation of NOTIFY Requests
Notifications are generated for the conference whenever a new Notifications SHOULD be generated for the conference whenever a new
participant joins, a participant leaves, a dial-out attempt succeeds participant joins, a participant leaves, and a dial-out attempt
or fails, floor control status changes, or the call leg replace URLs succeeds or fails. Notifications MAY be generated for the conference
change. whenever the media mixing status of a user changes.
4.7 Rate Limitations on NOTIFY 4.8 Subscriber Processing of NOTIFY Requests
The SIP Events framework expects packages to specify how a subscriber
processes NOTIFY requests in any package specific ways, and in
particular, how it uses the NOTIFY requests to contruct a coherent
view of the state of the subscribed resource.
Typically, the NOTIFY for the conference package will only contain
information about those users whose state has changed. To construct a
coherent view of the total state of the entire conference, a
subscriber to the conference package will need to combine NOTIFYs
received over time. The subscriber maintains is complete user list in
a table, indexed by the id in the dialog element. If the dialog
information in a NOTIFY has a dialog listed with an ID not in the
table, an entry is added to that table. The version number from the
dialog element is also extracted, and placed in the table. If the
dialog information in a NOTIFY has a dialog listed with an ID in the
table, and the version in the NOTIFY is greater than the version
stored in the table, the dialog information in the table for that
dialog is updated, including the version number. If a dialog is
updated such that its status is now "-1", that entry MAY be removed
from the table at any time.
4.9 Handling of Forked Requests
By their nature, the conferences supported by this package are
centralized. Therefore, SUBSCRIBE requests for a conference should
not generally fork. Users of this package MUST NOT install more than
a single subscription as a result of a single SUBSCRIBE request.
4.10 Rate of Notifications
For reasons of congestion control, it is important that the rate of For reasons of congestion control, it is important that the rate of
notifications not become excessive. As a result, it is RECOMMENDED notifications not become excessive. As a result, it is RECOMMENDED
that the server not generate notifications for a single subscriber at that the server not generate notifications for a single subscriber at
a rate faster than once every 5 seconds. a rate faster than once every 5 seconds.
4.11 State Agents
Conference state is ideally maintained in the element in which the
conference resides. Therefore, the elements that maintain the
conference are the ones best suited to handle subscriptions to it.
Therefore, the usage of state agents is NOT RECOMMENDED for this
package.
5 Conference Data Format 5 Conference Data Format
The conference data format is an XML document of MIME type The conference data format is an XML document of MIME type
application/conference-info+xml, consistent with the recommendations "application/conference-info+xml", consistent with the
provided in RFC 3023 [5]. recommendations provided in RFC 3023 [6].
5.1 Structute of the Format 5.1 Structute of the Format
The conference data format has the top level tag of conference. It The conference data format has the top level tag of conference. It
consists of a set of sub-tags of type user, which contain information consists of a set of sub-tags of type user, which contain information
on the users in the conference. Each user tag contains the identity on the users in the conference. Each user tag contains the identity
of the user, their status, their replace URL, and their floor control of the user, their dialog information, their status in the
status. conference, and their media reception information.
The top level tag is conference: The top level tag is conference:
<!ELEMENT conference (user*)> <!ELEMENT conference (user*)>
<!ATTLIST conference uri CDATA #REQUIRED> <!ATTLIST conference uri CDATA #REQUIRED>
The mandatory uri attribute contains the URL used to join the The mandatory uri attribute contains the URI used to join the
conference call (and to subscribe to its state). conference call (and to subscribe to its state).
What follows are a series of user tags: What follows are a series of user tags:
<!ELEMENT user (status,replace?,floor-status?)> <!ELEMENT user (status,dialog,media-status?)>
<!ATTLIST user uri CDATA #REQUIRED <!ATTLIST user uri CDATA #REQUIRED
name CDATA #IMPLIED> name CDATA #IMPLIED>
The uri attribute contains the URL for the user. This is a logical The uri attribute contains the URI for the user. This is a logical
identifier, not a machine specific one (i.e., its taken from the identifier, not a machine specific one (i.e., its taken from the
To/From, not the Contact). The name is a textual name for rendering To/From, not the Contact). The name is a textual name for rendering
to a human. It is ususally taken from the display name. to a human. It is ususally taken from the display name.
5.2 User Sub-Elements 5.2 User Sub-Elements
The sub-elements of the user tag are status, replace, and floor- The sub-elements of the user tag are status, dialog aned media-
status. status.
Status contains the status of the user in the conference. Status contains the status of the user in the conference.
<!ELEMENT status> <!ELEMENT status>
<!ATTLIST status <!ATTLIST status
value (active|departed|booted|failed) "active" > value (active|departed|booted|failed) "active" >
The statuses have the following meaning: The statuses have the following meaning:
active: The user is in an active call leg with the conference active: The user is in an active dialog with the conference
host. host.
departed: The user sent a BYE, thus leaving the conference. departed: The user sent a BYE, thus leaving the conference.
booted: The user was sent a BYE by the conference host, booting booted: The user was sent a BYE by the conference host, booting
them out of the conference. them out of the conference.
failed: The conference host is a dialout conference server, and failed: The conference host is a dialout conference server, and
its attempt to contact the specific user resulted in a its attempt to contact the specific user resulted in a
non-200 class final response. non-200 class final response.
The replace URL is the same replace-remote URL defined for the call The dialog element is the same one from the dialog package above.
leg package above. It is exposed through the conference server, so
that subscribers have, if authorized, the ability to pull a user out
of the conference.
OPEN ISSUE: Do we really want or need this? The only real
use I found was to back out of a centralized conference
server, to a point-to-point call, when only two users
remain. Is this sufficient need? Other uses?
<!ELEMENT replace>
<!ATTLIST url CDATA #IMPLIED>
The floor-status contains the status of the user as far as floor
control is concerned.
<!ELEMENT floor-status>
<!ATTLIST status
value (owner|non-owner|chair) "non-owner" >
The values have the following meaning:
owner: The user has floor control.
non-owner: The user does not have floor control. The media-status attribute is a series of media streams. Each media
stream is associated with a media type, a sending status, and a
receiving status.
chair: The user is the chair, and is the one who controls who <!ELEMENT media-status (media-stream*)>
gets floor control. <!ELEMENT media-stream>
<!ATTLIST media-stream
type (audio|video|message|application) #REQUIRED
send-status (received-by-all|muted) "received-by-all"
recv-status (receiving-all|anchor-only) "receiving-all">
OPEN ISSUE: Does this belong here? If we have a separate If the send-status is "received-by-all", it means that the media for
floor control protocol, perhaps the notifications of state that stream that is being generated by the user is being mixed by the
changes are in the specific protocol for floor control. Or, server and sent to all recipients. "muted" means that no one is
perhaps this is a separate package. receiving their media. If the receive-status is "receiving-all" it
means that the user is hearing all other participants. If it is
"anchor-only", the user is hearing media from just a single
participant.
5.3 Example 5.3 Example
The following is an example conference information document: The following is an example conference information document:
<conference> <conference>
<user uri="sip:jdrosen@dynamicsoft.com" name="Jonathan Rosenberg"> <user uri="sip:jdrosen@dynamicsoft.com" name="Jonathan Rosenberg">
<status value="active"/> <status value="active"/>
<replace uri="sip:p09asd8asd-0-f88a70@dynamicsoft.com"/> <dialog id="as7d900as8" version="0" call-id="987@1.2.3.4"
local-uri="conference3@example.com"
local-tag="123" remote-uri="sip:jdrosen@dynamicsoft.com"
remote-tag="abc" direction="recipient"/>
<media-status>
<media-stream type="audio"/>
</media-status>
</user> </user>
<user uri="sip:hgs@cs.columbia.edu" name="Henning Schulzrinne"> <user uri="sip:hgs@cs.columbia.edu" name="Henning Schulzrinne">
<status value="active"/> <status value="active"/>
<replace uri="sip:nj99999skasdka@cs.columbia.edu"/> <dialog id="as7d900as8" version="0" call-id="654@8.8.7.7"
local-uri="conference3@example.com"
local-tag="xyz" remote-uri="sip:hgs@cs.columbia.edu"
remote-tag="efg" direction="recipient"/>
</user> </user>
</conference> </conference>
This document describes a conference with two users, both of which This document describes a conference with two users, both of which
are active. are active.
6 Relationship to User Presence 6 Relationship to User Presence
The SIP events package for user presence [2] has a close relationship The SIP events package for user presence [3] has a close relationship
with these two event packages. It is fundamental to the presence with these two event packages. It is fundamental to the presence
model that the information used to obtain user presence is model that the information used to obtain user presence is
constructed from any number of different input sources. Examples of constructed from any number of different input sources. Examples of
such sources include SIP REGISTER requests and uploads of presence such sources include SIP REGISTER requests and uploads of presence
documents. These two packages can be considered another mechanism documents. These two packages can be considered another mechanism
that allows a presence agent to determine the presence state of the that allows a presence agent to determine the presence state of the
user. Specifically, a user presence server can act as a subscriber user. Specifically, a user presence server can act as a subscriber
for the call-leg and conference packages to obtain additional for the dialog and conference packages to obtain additional
information that can be used to construct a presence document. information that can be used to construct a presence document.
7 Example Services 7 Open Issues and To-Dos
This section overviews some example services that can be enabled by
the extensions described here.
7.1 Automatic Callback
Automatic callback is a simple service. User A calls user B. User B
is already on the phone, and so returns a 486 Busy to the INVITE from
A. Rather than continually trying to call B, user A asks for
automatic callback. With this service, A's phone will ring when B is
available. When A picks up, A hears ringing, which is B's phone.
The call flow for this service is shown in Figure 1. In (1-3), A
calls B, but B is busy. So, in (4), A sends a SUBSCRIBE to B. This
results in a 200 OK (5) followed by a NOTIFY with the current call-
leg state for B. This is a call state document which looks like:
<user uri="sip:B@B.com">
<call-leg>
<status code="200"/>
</call-leg>
</user>
The call leg identifiers are not included in this notification,
because this is not information that A would normally be able to
obtain by sending an INVITE.
When B hangs up their call, this causes a second notify containing
document 2:
<user uri="sip:B@B.com">
<call-leg>
<status code="-1"/>
</call-leg>
</user>
A can then try the INVITE again.
7.2 Single Line Extension
In the single line extension application, we wish to have a group of
phones which are all treated as "extensions" of a single line. This
means that a call for one rings them all. As soon as one picks up,
the others stop ringing (all of that is standard forking behavior).
The additional complexity is that once the call is answered, one of
the extensions should be able to "pick up" and join the call. This
emulates the home phone behavior.
|(1) INVITE |
|---------------------------->| B is in another call
|(2) 486 Busy |
|<----------------------------|
|(3) ACK |
|---------------------------->|
| |
user |(4) SUBSCRIBE Event:call-leg |
requests|---------------------------->|
cb |(5) 200 OK |
|<----------------------------|
|(6) NOTIFY doc1 |
|<----------------------------|
|(7) 200 OK |
|---------------------------->|
| |
| |
| |
| |
| |
|(8) NOTIFY doc2 | B's other call
|<----------------------------| ends
A's phone rings|(9) 200 OK |
|---------------------------->|
A picks up |(10) INVITE |
|---------------------------->| B's phone rings
|(11) 200 OK |
|<----------------------------|
|(12) ACK |
|---------------------------->|
| |
|(13) SUBSCRIBE Expires:0 |
|---------------------------->|
|(14) 200 OK |
|<----------------------------|
| |
| |
A B
Figure 1: Automatic callback flow
This feature is enabled by the mechanisms described in this draft.
The basic idea is that the phones all share a common SIP URL, and
there is a forking proxy that forwards calls to all of them. The
belonging to the same extension group. The phones are also configured
with the address of a standard conferencing server, as described in
[10]. To support the feature, only the phones have to know about how
to do it.
The call flow for this feature is shown in Figures 2 and 3. First,
the caller sends an INVITE to call a phone in the extension group
(1). This is a normal INVITE, with a request URI of
sip:joe@joeshouse.net, for example. This INVITE arrives at the proxy
serving Joe's house. Since both extension 1 and extension 2 had
registered contacts for this URL previously (not shown), the INVITE
is forked to extension 1 (2) and extension 2 (3). Joe picks up
extension 1, generating a 200 OK to the INVITE (4). The proxy
forwards the 200 OK from extension 1 upstream (5), and cancels the
other branch (6), which causes extension B to stop ringing, and then
response 200 OK to the CANCEL (7), followed by a 487 to the INVITE
(8). The proxy ACKs the 487 (9). The caller sends an ACK for the 200
OK (10), and the caller is now talking to Joe on extension 1. In
order to keep track of that call, so that its status can be displayed
in its UI, extension 2 now generates a SUBSCRIBE for
sip:joe@joeshouse.net. This goes to the proxy (11), which forks it as
it would any normal request. It gets forked to extension 1 (12) and
extension 2 (13). Extension 2 receives its own SUBSCRIBE, and
generates a 482 Loop Detected error response (14). Extension 1
accepts the SUBSCRIBE, and sends a 200 OK (15) (its assumed that the
SUBSCRIBE was authenticated with the shared secret; the 401 and
resubmission are not shown). The 200 OK is forwarded back to
extension 2 (16). In the event that there were more than two
extensions, only a single 200 OK would still be returned to extension
2. However, as described in [1], the NOTIFY's that are generated will
allow extension 2 to find out about all of the other extensions which
accepted the subscription. In this case, its just one, extension 1.
It generates a NOTIFY (17) that contains document 1, shown below:
<user uri="sip:joe@joeshouse.net">
<call-leg local-uri="sip:joe@joeshouse.net"
remote-uri="sip:caller@foo.edu"
local-tag="00a9"
remote-tag="ffd2"
call-id="aa9@1.2.3.4">
<status code="200"/>
<replace-local uri="sip:00a9.ffd2.aa9_1-2-3-4@ex1.joeshouse.net">
<replace-remote uri="sip:ffd2.00a9.aa9_1-2-3-4@hispc.foo.edu">
<join uri="sip:join-00a9.ffd2.aa9_1-2-3-4@ex1.joeshouse.net">
</call-leg>
</user>
|(1) INVITE | | | |
|-------------->|(2) INVITE | | |
| |-------------->| | |
| |(3) INVITE | | |
| |------------------------------->| |
| |(4) 200 OK | | |
|(5) 200 OK |<--------------| | |
|<--------------|(6) CANCEL | | |
| |------------------------------->| |
| |(7) 200 CANCEL | | |
| |<-------------------------------| |
| |(8) 487 | | |
| |<-------------------------------| |
| |(9) ACK | | |
| |------------------------------->| |
|(10) ACK | | | |
|------------------------------>| | |
| |(11) SUBSCRIBE | | |
| |<-------------------------------| |
| |(12) SUBSCRIBE | | |
| |-------------->| | |
| |(13) SUBSCRIBE | | |
| |------------------------------->| |
| |(14) 482 | | |
| |<-------------------------------| |
| |(15) 200 OK | | |
| |<--------------| | |
| |(16) 200 OK | | |
| |------------------------------->| |
| | |(17) NOTIFY doc1| |
| | |--------------->| |
| | |(18) 200 OK | |
| | |<---------------| |
| | | | |
| | | | |
Caller Proxy Extension Extension Conf.
1 2 Server
Figure 2: Single line extension flow: Part I
This allows extension 2 to show that a call is active on the
extension group, and a UI can be provided for the call to be picked
up by someone on extension 2.
At some point, Joe's wife picks up extension 2 in order to join the
active call. That causes the phone to send an INVITE to the join URI
in the notification it received. This INVITE (19) goes directly to
extension 1. When extension 1 receives this, it knows this is a
request to join the call. It challenges and authenticates the INVITE
to make sure that its another extension in the group (not shown). It
then redirects the call, providing a Contact header which is a new
conference URI at the conference server (20). Presumably, each
extension is configured with the domain name of the conference
server, and can create conferences by choosing usernames that are
globally unique in space and time. The resulting user@domain SIP URL
can be used for ad-hoc conference calls, like this one. Extension 2
ACKs the 300 (21). Extension 1 knows it needs to join that conference
call. So, it sends an INVITE to the conference URL it just returned
to extension 2 (23), which is accepted (25) and acknowledged (26).
Extension 1 is now the only member of the call. In the meantime,
extension 1 knows that it needs to get the caller into the conference
as well. So, it sends out a REFER (22), containing a Refer-To URL
that points to the conference URL being used. The REFER is accepted
by the caller (24). Extension 2 recurses on the redirect it receives,
and sends an INVITE to the conference URL (27), which is accepted
(28) and acknowledged (29). Finally, the caller acts on the REFER,
and generates an INVITE (30) that will join it into the conference as
well. This is accepted (31) and acknowleged (32). Now, there is a
three-party conference between the caller, extension 1 and extension
2. The caller generates a NOTIFY as discussed in [8] (33) which is
accepted (34). The NOTIFY tells extension 1 that the caller has been
connected to the conference server. So, extension 1 terminates its
direct call leg with the caller (35).
If other extensions pick up, a similar thing happens - they are
redirected to the conference URL. By using a conference server, we
have the advantage that the call remains active as long as any one
extension is in the call. This also emulates typical home phone line
behavior.
OPEN ISSUE: Its not clear that extension 1 should REFER the
caller to the conference server. We want the change to the
conference server to be transparent to the caller. A REFER
will trigger a UI query at the caller, most likely. An
alternative is to have extension 1 REFER the conference
server to the caller, using the replaces URL learned from
| | |(19) INVITE | |
| | |<---------------| |
| | |(20) 300 | |
| | |--------------->| |
| | |(21) ACK | |
|(22) REFER | |<---------------| |
|<------------------------------|(23) INVITE | |
|(24) 200 OK | |------------------------------->|
|------------------------------>|(25) 200 OK | |
| | |<-------------------------------|
| | |(26) ACK | |
| | |------------------------------->|
| | | |(27) INVITE |
| | | |-------------->|
| | | |(28) 200 OK |
| | | |<--------------|
| | | |(29) ACK |
| | | |-------------->|
|(30) INVITE | | | |
|--------------------------------------------------------------->|
|(31) 200 OK | | | |
|<---------------------------------------------------------------|
|(32) ACK | | | |
|--------------------------------------------------------------->|
|(33) NOTIFY | | | |
|------------------------------>| | |
|(34) 200 OK | | | |
|<------------------------------| | |
|(35) BYE | | | |
|<------------------------------| | |
|(36) 200 OK | | | |
|------------------------------>| | |
| | | | |
| | | | |
| | | | |
Caller Proxy Extension Extension Conf.
1 2 Server
Figure 3: Single line extension flow: Part II
the caller as the Refer-To header. This works better.
However, the INVITE triggered from this will be challenged
by the caller, and its not clear how the conference server
will obtain credentials.
7.3 Unattended Consultation-Hold Transfer
In unattended consultation-hold transfer, A is talking to B. A wishes
to transfer B to C. So, A first calls C, and talks to them to OK the
transfer.If C agrees, B is connected to C.
As discussed in [8], this flow is difficult. The main problem is that
once the transfer has been verbally approved, A needs to send a REFER
to C, containing B in the Refer-To header. However, what is desired
is to refer C to that very specific instance of B. Placing the
To/From with B into the Refer-To therefore won't work, since it won't
necessarily route to the UA that user B is using. Putting the Contact
at B may not work either, since it may not be globally routable.
Our To-Replace header fixes this. By definition, it contains a
globally routable URL which can be used to replace the specific call
leg. B would return this in its 200 OK to A. When A REFERs C to B,
this URL would be placed in the Refer-To header. The result is that
the service executes perfectly.
7.4 Call Park and Pickup
In the PSTN, call park and pickup is defined as follows. Joe (using
UA A) is talking to Bob (using UA B). Joe would like to walk over to
another phone (UA C) that Joe can see, but doesn't have the number
for, and pick continue on the call at that new phone. To do that, Joe
places Bob on hold, walks over to the phone, picks it up, dials some
numbers, and then talks to Bob.
A SIP flow for call park is given in the service examples document
[11]. However, that service only works when the parking phone is the
same as the picking up phone (and thus is more like music-on-hold).
There is also a flow for pickup. This relies on registrations to
cause an in-progress INVITE to fork to the new phone. However, this
only works for calls that haven't yet completed at the first phone.
The flow for the call park and pickup service is shown in Figure 4.
First, A calls B as a normal SIP call (1-3). The INVITE (1) contains
a To-Replace header with the value sip:00a9.ffd2.aa9_1-2-3-
4@mypc.company.com, and the 200 OK has a To-Replace header with value
sip:ffd2.00a9.aa9_1-2-3-4@hispc.foo.edu. At some point, Joe decides
to park the call for later pickup. A simply places B on hold (4-6).
Joe walks over to another phone, C, and enters in his extension (i.e,
the identity of the phone which the call is being retrieved from). To
pickup, C needs to learn the call legs at A. So, it sends a SUBSCRIBE
to A's extension (7). The SUBSCRIBE is authenticated (Joe will need
to enter his own username and password), which is not shown, and the
resubmitted SUBSCRIBE generates a 200 OK (8). That triggers a NOTIFY
(9) which contains the call leg state at A:
<user uri="sip:A@company.com">
<call-leg local-uri="sip:A@company.com"
remote-uri="sip:B@foo.edu"
local-tag="00a9"
remote-tag="ffd2"
call-id="aa9@1.2.3.4">
<status code="200"/>
<replace-local uri="sip:00a9.ffd2.aa9_1-2-3-4@mypc.company.com">
<replace-remote uri="sip:ffd2.00a9.aa9_1-2-3-4@hispc.foo.edu">
</call-leg>
</user>
From this, C learns there is a single accepted call at A. The
notification also contains a replace-remote URL, which can be used to
replace the existing call leg at B with a new one. So, C takes that
URL, and generates an INVITE for it (15). This is authenticated and
authorized by B (specifically, B allows a call-leg to be replaced if
the authenticated identity of the new leg matches the identity of the
replaced leg), and then silently accepted (16). Now, Joe is talking
to Bob using UA C. Since B has replaced its old call leg, it sends a
BYE on it (18). UA A is now disconnected from the call.
7.5 IM a call
This service is a much "cooler" variant on transfer. A calls B, and
they talk. During the call, A wants C to take over the call. Rather
than sending a REFER to execute a transfer, A sends C an instant
message. This IM has HTML inside of it, which asks C to click on a
URL to take the call. When C clicks on it, they take over the call,
and A is disconnected.
The call flow for this is shown in Figure 5. A calls B using a o There is a strong relationship between the dialog event
standard INVITE sequence (1-3). The 200 OK from B contains a To- package, and the notifications used by the REFER specification
Replace URL. A decides to send the call to B using an IM. So, it [8]. Should these be unified, so that a REFER basically
sends a MESSAGE (4) that has an HTML body. This request looks like: implies a subscription to the dialog state created by that
REFER?.
| |(1) INVITE | o Reuse of dialogs for conference and dialog subscriptions needs
| |--------------------->| to be discussed. It has an implication for the dialog state
| |(2) 200 OK | package. Now, the session may be terminated, but the dialog
| |<---------------------| remains.
| |(3) ACK |
| |--------------------->|
| |(4) INVITE hold |user A holds
| |--------------------->|
| |(5) 200 OK |
| |<---------------------|
| |(6) ACK |
user A | |--------------------->|
picks up |(7) SUBSCRIBE | |
at C |-------------------->| |
|(8) 200 OK | |
|---------------------| |
|(9) NOTIFY doc1 | |
|<--------------------| |
|(10) 200 OK | |
|-------------------->| |
|(11) SUBSCRIBE | |
|------------------------------------------->|
|(12) 200 OK | |
|<-------------------------------------------|
|(13) NOTIFY doc2 | |
|<-------------------------------------------|
|(14) 200 OK | |
|------------------------------------------->|
|(15) INVITE | |
|------------------------------------------->|
|(16) 200 OK | |
|<-------------------------------------------|
|(17) ACK | |
|------------------------------------------->|
| |(18) BYE |
| |<---------------------|
| |(19) 200 OK |
| |--------------------->|
| | |
| | |
C A B o Need to add IANA considerations
Figure 4: Call Park and Pickup o Should we split this into two documents, or even four?
|(1) INVITE | | Probably two.
|<----------------| |
|(2) 200 OK | |
|---------------->| |
|(3) ACK | |
|<----------------| |
| |(4) MESSAGE |
| |---------------->|
| |(5) 200 OK |
| |<----------------|
| | |
| | |
| | |
| | |
| | |
|(6) INVITE | |
|<----------------------------------|
|(7) 200 OK | |
|---------------------------------->|
|(8) ACK | |
|<----------------------------------|
|(9) BYE | |
|---------------->| |
|(10) 200 OK | |
|-----------------| |
| | |
| | |
| | |
B A C 8 Security Considerations
Figure 5: Call flow for IM-a-call Subscriptions to dialog state and conference state can reveal very
sensitive information. For this reason, the document recommends
authentication and authorization, and provides guidelines on sensible
authorization policies.
MESSAGE sip:C@foo.com SIP/2.0 Since the data in notifications is sensitive as well, end-to-end SIP
Via: SIP/2.0/UDP pc22.foo.com encryption mechanisms using S/MIME SHOULD be used to protect it.
From: sip:A@foo.com
To: sip:C@foo.com
Call-ID: 9as8da8s@1.2.3.4
CSeq: 99 MESSAGE
Content-Type: text/html
Content-Length: ...
<html> 9 IANA Considerations
<body>
Hi, Jack. Would you take this <a href="sip:hhggff@bar.com">call</a>?
Thanks, Bob.
</body>
</html>
Where sip:hhggff@bar.com is the URL from the To-Replace header in the TODO.
200 OK from B (message 2).
C returns a 200 OK to this MESSAGE (5). At some time later, C clicks 10 Acknowledgements
on the URL in the MESSAGE, which causes a call to be made to the
replace URL. This goes to B. This is a standard INVITE sequence (7-
9). Once done, since B knows this is a replace URL, it hangs up with
A (10-11).
8 Open Issues and To-Dos The authors would like to thank Dan Petrie for his comments.
There is a strong relationship between the call-leg event package, 11 Changes since -00
and the notifications used by the REFER specification [8]. We believe
that these should be unified, so that a REFER basically implies a
subscription to the call leg state created by that REFER. That still
needs to be done.
There are many security issues to be worked out. Authentication of o Alignment with bis and sip-events
join and replaces INVITEs are complex, and need further
investigation.
The requirement for globally routable join and replaces URLs is a o Added direction attribute to dialog format
real issue. Its not clear how that can be done. Using the hostname of
the UA won't work in general, since calls may need to flow through a
proxy. This introduces the need for a UA to generate a new URL which
contains the domain name of the top-level proxy in its network, yet
is routed to that UA. The UA could then REGISTER this URL at its
proxy. This might work in some networks, but not in more complex ones
with multiple tiers of proxies, some of which use database queries to
route calls to specific users. More thinking on this is needed.
More details and examples are needed. o Removed To-Join and To-Replace header, along with joining and
replacing URIs from the various formats.
9 Security Considerations o Conference data format reuses dialog formats
Subscriptions to call-leg state and conference state can reveal very o Added media mixing information to conference format
sensitive information. For this reason, the document recommends
authentication and authorization, and provides guidelines on sensible
authorization policies.
Since the data in notifications is sensitive as well, end-to-end SIP o Removal of example services (will go into service examples
encryption mechanisms SHOULD be used to protect it. specification)
Furthermore, the To-Replace and To-Join URLs provide significant o Removal of floor control from conference package; rather,
power to any user that can obtain them. INVITEs to these URLs SHOULD place it into a separate event package, as was done in
be authenticated and authorized.
10 Authors Addresses 12 Authors Addresses
Jonathan Rosenberg Jonathan Rosenberg
dynamicsoft dynamicsoft
72 Eagle Rock Avenue 72 Eagle Rock Avenue
First Floor First Floor
East Hanover, NJ 07936 East Hanover, NJ 07936
email: jdrosen@dynamicsoft.com email: jdrosen@dynamicsoft.com
Henning Schulzrinne Henning Schulzrinne
Columbia University Columbia University
M/S 0401 M/S 0401
1214 Amsterdam Ave. 1214 Amsterdam Ave.
New York, NY 10027-7003 New York, NY 10027-7003
email: schulzrinne@cs.columbia.edu email: schulzrinne@cs.columbia.edu
11 Bibliography 13 Normative References
[1] A. Roach, "SIP specific event notification," Internet Draft, [1] A. Roach et al. , "SIP-specific event notification," Internet
Internet Engineering Task Force, July 2001. Work in progress. Draft, Internet Engineering Task Force, Feb. 2002. Work in progress.
[2] J. Rosenberg et al. , "SIP extensions for presence," Internet [2] J. Rosenberg, H. Schulzrinne, et al. , "SIP: Session initiation
Draft, Internet Engineering Task Force, Apr. 2001. Work in progress. protocol," Internet Draft, Internet Engineering Task Force, Feb.
2002. Work in progress.
[3] J. Rosenberg, "A SIP event sub-package for watcher information," 14 Informative References
[3] J. Rosenberg, "SIP extensions for presence," Internet Draft,
Internet Engineering Task Force, Nov. 2001. Work in progress.
[4] J. Rosenberg, "A SIP event sub-package for watcher information,"
Internet Draft, Internet Engineering Task Force, July 2001. Work in Internet Draft, Internet Engineering Task Force, July 2001. Work in
progress. progress.
[4] R. Mahy and I. Slain, "SIP extensions for message waiting [5] R. Mahy and I. Slain, "SIP event package for message waiting
indication," Internet Draft, Internet Engineering Task Force, Feb. indication," Internet Draft, Internet Engineering Task Force, Nov.
2001. Work in progress. 2001. Work in progress.
[5] M. Murata, S. S. Laurent, and D. Kohn, "XML media types," Request [6] M. Murata, S. S. Laurent, and D. Kohn, "XML media types," Request
for Comments 3023, Internet Engineering Task Force, Jan. 2001. for Comments 3023, Internet Engineering Task Force, Jan. 2001.
[6] J. Rosenberg and H. Schulzrinne, "Models for multi party [7] J. Rosenberg and H. Schulzrinne, "Models for multi party
conferencing in SIP," Internet Draft, Internet Engineering Task conferencing in SIP," Internet Draft, Internet Engineering Task
Force, Nov. 2000. Work in progress. Force, Nov. 2001. Work in progress.
[7] J. Myers, "IMAP4 QUOTA extension," Request for Comments 2087, [8] R. Sparks, "The refer method," Internet Draft, Internet
Internet Engineering Task Force, Jan. 1997. Engineering Task Force, Oct. 2001. Work in progress.
[8] R. Sparks, "SIP call control," Internet Draft, Internet Full Copyright Statement
Engineering Task Force, Feb. 2001. Work in progress.
[9] M. Handley, H. Schulzrinne, E. Schooler, and J. Rosenberg, "SIP: Copyright (c) The Internet Society (2002). All Rights Reserved.
Session initiation protocol," Internet Draft, Internet Engineering
Task Force, Nov. 2000. Work in progress.
[10] J. Rosenberg, P. Mataga, and H. Schulzrinne, "An application This document and translations of it may be copied and furnished to
server component architecture for SIP," Internet Draft, Internet others, and derivative works that comment on or otherwise explain it
Engineering Task Force, Mar. 2001. Work in progress. or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
[11] A. Johnston, R. Sparks, C. Cunningham, S. Donovan, and K. The limited permissions granted above are perpetual and will not be
Summers, "SIP service examples," Internet Draft, Internet Engineering revoked by the Internet Society or its successors or assigns.
Task Force, Mar. 2001. Work in progress.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
 End of changes. 141 change blocks. 
847 lines changed or deleted 452 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/