draft-ietf-mmusic-sip-cc-00.txt | draft-ietf-mmusic-sip-cc-01.txt | |||
---|---|---|---|---|
Internet Engineering Task Force MMUSIC WG | Internet Engineering Task Force MMUSIC WG | |||
Internet Draft Schulzrinne/Rosenberg | Internet Draft Schulzrinne/Rosenberg | |||
draft-ietf-mmusic-sip-cc-00.txt Columbia U./Bell Laboratories | draft-ietf-mmusic-sip-cc-01.txt Columbia U./Bell Laboratories | |||
March 13, 1998 | June 17, 1999 | |||
Expires: August 1, 1998 | Expires: December, 1999 | |||
SIP Call Control Services | SIP Call Control Services | |||
STATUS OF THIS MEMO | STATUS OF THIS MEMO | |||
This document is an Internet-Draft. Internet-Drafts are working | This document is an Internet-Draft and is in full conformance with | |||
documents of the Internet Engineering Task Force (IETF), its areas, | all provisions of Section 10 of RFC2026. | |||
and its working groups. Note that other groups may also distribute | ||||
working documents as Internet-Drafts. | 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 | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as ``work in progress''. | material or to cite them other than as work in progress. | |||
To learn the current status of any Internet-Draft, please check the | The list of current Internet-Drafts can be accessed at | |||
``1id-abstracts.txt'' listing contained in the Internet-Drafts Shadow | http://www.ietf.org/ietf/1id-abstracts.txt | |||
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe), | ||||
munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or | ||||
ftp.isi.edu (US West Coast). | ||||
Distribution of this document is unlimited. | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | ||||
ABSTRACT | Abstract | |||
This document describes the org.ietf.sip.call extensions | This document describes a set of extensions to SIP which allow for | |||
to the Session Initiation Protocol (SIP). The document | various call control services. Example services include blind | |||
also describes how standard telephony services can be | transfer, transfer with consultation, multi-party calls, bridged | |||
implemented in SIP. | conferences, and ad-hoc conferencing. The services are supported in a | |||
fully distributed manner, so that they can be provided without a | ||||
central conference server. However, a SIP proxy can act as a | ||||
conference server to provide these services. For the various services | ||||
described here, we overview the requirements for the service, and | ||||
specify the protocol functions needed to support it. We then define a | ||||
basic set of SIP primitives which can be used to construct these | ||||
services, and others. | ||||
1 Terminology | 1 Terminology | |||
In this document, the key words "MUST", "MUST NOT", "REQUIRED", | In this document, the key words "MUST", "MUST NOT", "REQUIRED", | |||
"SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", | "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", | |||
and "OPTIONAL" are to be interpreted as described in RFC 2119 [1] and | and "OPTIONAL" are to be interpreted as described in RFC 2119 [1] and | |||
indicate requirement levels for compliant SIP implementations. | indicate requirement levels for compliant SIP implementations. | |||
2 Introduction | 2 Introduction | |||
This document describes the org.ietf.sip.call extensions to the | The Session Initiation Protocol (SIP) [2] is a signaling protocol | |||
Session Initiation Protocol (SIP) [2]. When using the extensions | used for the initiation of multimedia sessions. SIP also defines | |||
described here, the client MUST include the extension name in a | mechanisms for termination of sessions using the BYE method. However, | |||
Require header. | SIP has less support for signaling of services that take place during | |||
the call itself. These kinds of services can be broken into several | ||||
classes: | ||||
3 Headers | Session Control Services These services relate to the media session. | |||
Examples include floor and chair control (which controls who can | ||||
send/receive data in the session), hold, and mute. | ||||
type ACK BYE INV OPT REG | Call Control Services These services relate to participant | |||
_________________________________________________________ | management. These services are all built on the basic blocks of | |||
Accept-Location R - - o o - | adding and removing users from a call. Examples include transfer | |||
Also R - - o o - | (the simultaneous removal and addition of a member from a call), | |||
Also r - - o o - | multi-party calling, call bridging, and ad-hoc bridged | |||
Call-Disposition R - o o - - | conferences. | |||
Replaces R - - o o - | ||||
Replaces r - - o o - | ||||
Requested-By R - - o o - | ||||
Requested-By r - - o o - | ||||
Table 1: Summary of header fields. "o": optional, "m": mandatory, "- | This document describes extensions to SIP for providing call control | |||
": not applicable, "R': request header, "r": response header, "g": | services. The services are supported in a fully distributed manner, | |||
general header, "*": needed if message body is not empty. A numeric | so that they can be provided without a central conference server. | |||
value in the "type" column indicates the status code the header field | However, a SIP proxy can act as a conference server to provide these | |||
is used with. | services. Our aim is to provide a general set of tools which can be | |||
used to construct, at a minimum, a core set of services, but be | ||||
potentially useful as building blocks for future services. To | ||||
accomplish this goal, we begin by overviewing the requirements for | ||||
each of the core services. This includes its basic functional | ||||
requirements and its security requirements. Then, we overview the | ||||
technical issues in providing these services, and outline the basic | ||||
primitives that we have concluded are needed. The next section | ||||
formally defines these primitives through new headers and UA | ||||
behavior. | ||||
3.1 Accept-Location | 3 Services | |||
The Accept-Location request header allows the caller to provide | We overview the services which we desire to support at a minimum. For | |||
hints to proxy and redirect servers. It uses the same parameters as | each, we define the requirements for the service, with a particular | |||
the Location header (Section 3.4). | focus on security. Security is a primary concern for many of these | |||
services. As such, the following general principles apply: | ||||
3.2 Also | o Parties involved in some service should be able to | |||
cyryptographically verify the identity of the other parties in | ||||
the service | ||||
The Also request and response header advises the recipient to issue | o Parties involved in some service should have a choice about | |||
INVITE requests to the addresses listed. Each of these invitations | their participation in the service | |||
SHOULD contain a Requested-By header that contains the From field | ||||
of the message containing the Also field. The Also header MUST only | ||||
be processed by the calling or called user agent, not by any | ||||
intermediate proxy or redirect servers. | ||||
If a message contains both Also and Replaces, the invitations | o Parties involved in some service should know what the service | |||
requested in the Also header MUST be completed, successfully or not, | being invoked is | |||
before the terminations requested in the Replaces header. | ||||
Also = "Also" ":" 1#( SIP-URL | URI ) [ comment ] | These three basic requirements are a natural consequence of an | |||
Example header: | architecture where endpoints are assumed to be intelligent. Note, | |||
however, that just because the protocol provides information and | ||||
gives choices, does not mean all implementations need to take | ||||
advantage of this. Thin and dumb endpoints can choose not to provide | ||||
information to the end users, and can choose not to provide choices | ||||
to them. This has the advantage of enabling one common protocol for | ||||
smart and dumb endpoints alike. | ||||
Also: sip://jones@foo.com, sip://mueller@bar.edu | 3.1 Blind Transfer | |||
If A, B and C are end points, the following is a typical scenario: | In the blind transfer service, two parties are in an existing call. | |||
One party, the transferring party , wishes to terminate the call with | ||||
the other party the transferred pary , and at the same time, transfer | ||||
them to another party, the transferred-to party | ||||
A -> B: INVITE B SIP/2.0 | ---------------- | |||
Call-ID: 19971214T123503.33@A | -> | Transferred-to | | |||
Also: C | / | party | | |||
From: A | / ---------------- | |||
B -> A: SIP/2.0 200 OK | / | |||
Call-ID: 19971214T123503.33@A | / | |||
From: A | -------------- ---------------- | |||
B -> C: INVITE C SIP/2.0 | | Transferred |<------------------------| Transferring | | |||
Call-ID: 19971214T123503.33@A | | party | | party | | |||
From: B | -------------- ---------------- | |||
Requested-By: A | ||||
C -> B: SIP/2.0 200 OK | ||||
Call-ID: 19971214T123503.33@A | ||||
From: B | ||||
If G is a group address with members X through Z, a group invitation | Figure 1: Transfer Service | |||
may proceed as follows: | ||||
A -> G: INVITE G SIP/2.0 | Some of the requirements for this service include: | |||
From: A | ||||
Call-ID: 19971214T124523.00@A | ||||
G -> A: SIP/2.0 200 OK | o The original call terminates regardless of whether the | |||
From: A | transfer succeeds or not. | |||
Call-ID: 19971214T124523.00@A | ||||
Also: X, Y, Z | ||||
A -> X: INVITE X SIP/2.0 | o The transferring party does not know whether the transfer | |||
From: A | succeeds or not. | |||
Call-ID: 19971214T124523.00@A | ||||
Requested-By: G | ||||
A -> Y: INVITE Y SIP/2.0 | o The transferred party should be able to know that they are | |||
From: A | being transferred | |||
Call-ID: 19971214T124523.00@A | ||||
Requested-By: G | ||||
A -> Z: INVITE Z SIP/2.0 | ||||
From: A | ||||
Call-ID: 19971214T124523.00@A | ||||
Requested-By: G | ||||
The Also header makes it possible to create full meshes | o The transferred party should be able to know to whom they are | |||
(generalized "three-way" calling) and supports the | being transferred | |||
resolution of group addresses. Unlike the Location header, | ||||
which enumerates alternatives to be tried, the Also header | ||||
lists addresses to be all invited. | ||||
3.3 Call-Disposition | o The transferred party should be able to decide whether to | |||
accept or reject the transfer | ||||
The Call-Disposition request header field allows the client to | o If the transferred party rejects the transfer, the call with | |||
indicate how the server is to handle the call. The following options | the transferring party still terminates | |||
can be used singly or in combination: | ||||
all: If the user part of the SIP request address identifies a group | o The transferred party should be able to verify that they are | |||
rather than an individual, the " all" feature indicates to a | being transferred by the transferring party | |||
proxy or redirect server that it should resolve the address to a | ||||
list of group members and return a 300 (Multiple Choices) | ||||
response. The list of group members is contained in an Also | ||||
header. | ||||
do-not-forward: The "do-not-forward" request prohibits proxies from | o The transferred-to party should know that they are being | |||
forwarding the call to another individual (e.g., the call is | transferred-to | |||
personal or the caller does not want to be shunted to a | ||||
secretary if the line is busy.) | ||||
queue: If the called party is temporarily unreachable, e.g., because | o The transferred-to party should be able to know the identity | |||
it is in another call, the caller can indicate that it wants to | of the transferring party | |||
have its call queued rather than rejected immediately. If the | ||||
call is queued, the server returns "181 Queued" (see Section | ||||
4.1). A pending call be terminated by a SIP BYE request. | ||||
do-not-respond: The do-not-respond directive indicates to the callee | o The transferred-to party should be able to accept or reject | |||
that it should not issue a response, informational or final. | the transferred call just like any other call | |||
This may be used to send invitations to multicast groups. | ||||
Maybe the combination of do-not-respond and all could be | 3.2 Transfer and Hold | |||
used for group invitations to larger lists? | ||||
Call-Disposition = "Call-Disposition" ":" 1#( "all" | "do-not-forward" | This service is a variation on blind transfer. The difference is that | |||
| "queue" | "do-not-respond" ) | the transferring party does not leave the call with the transferred | |||
party. If the service is successful, the transferred party is | ||||
involved in two calls - one with the transferring party, and one with | ||||
the transferred to party. Many of the requirements are similar. The | ||||
requirements for the service are: | ||||
Example: | o The call between the transferring and transferred parties | |||
remains active, regardless of the status of the new call | ||||
between the transferred and transferred-to parties. | ||||
Call-Disposition: all, do-not-forward, queue | o The transferring party does not know whether the transfer | |||
succeeds or not. | ||||
3.4 Location | o The transferred party should be able to know that they are | |||
being transferred | ||||
o The transferred party should be able to know to whom they are | ||||
being transferred | ||||
This document adds extension parameters to the Location header. | o The transferred party should be able to decide whether to | |||
accept or reject the transfer | ||||
extension-name = token | o If the transferred party rejects the transfer, the call with | |||
extension-value = *( token | quoted-string | LWS | extension-specials) | the transferring party remains unchanged | |||
extension-specials = < any element of tspecials except <"> > | ||||
language-tag = < see [H3.10] > | ||||
priority-tag = "urgent" | "normal" | "non-urgent" | ||||
service-tag = "fax" | "IP" | "PSTN" | "ISDN" | "pager" | ||||
media-tag = Internet media type [ "/" subtype ] | ||||
feature-list = "voice-mail" | "attendant" | "permanent" | ||||
extension-attribute | "class" "=" ( "personal" | "business" ) | o The transferred party should be able to verify that they are | |||
| "description" "=" quoted-string | being transferred by the transferring party | |||
| "duplex" "=" ( "full" | "half" | | ||||
"receive-only" | "send-only" ) | ||||
| "features" "=" 1# feature-list | ||||
| "language" "=" 1# language-tag | ||||
| "media" "=" 1# media-tag | ||||
| "mobility" "=" ( "fixed" | "mobile" ) | ||||
| "priority" "=" 1# priority-tag | ||||
| "service" "=" 1# service-tag | ||||
class: The class parameter indicates whether this terminal is found | o The transferred-to party should know that they are being | |||
in a residential or business setting. (A caller may defer a | transferred-to | |||
personal call if only a business line is available, for | ||||
example.) | ||||
description: The description field further describes, as text, the | o The transferred-to party should be able to know the identity | |||
terminal. It is expected that the user interface will render | of the transferring party | |||
this text. | ||||
duplex: The duplex parameter lists whether the terminal can | o The transferred-to party should be able to accept or reject | |||
simultaneously send and receive ("full"), alternate between | the transferred call just like any other call | |||
sending and receiving ("half"), can only receive ("receive- | ||||
only") or only send ("send-only"). Typically, a caller will | ||||
prefer a full-duplex terminal over a half-duplex terminal and | ||||
these over receive-only or send-only terminals. | ||||
features: The feature list enumerates additional features of this | o The transferred-to party should not be able to ascertain, | |||
address. The "permanent" flag indicates that this address is a | through signaling messages, that the transferring party is | |||
new, permanent address. When used for registration, the server | still communicating with the transferred party. In other | |||
SHOULD return a 301 status instead of 302. | words, blind transfer and transfer and hold appear identical | |||
to the transferred-to party. | ||||
language: The language parameter lists, in order of preference, the | 3.3 Transfer with Consultation | |||
languages spoken by the person answering. This feature may be | ||||
used to have a caller automatically select the appropriate | ||||
attendant or customer service representative, without having to | ||||
declare its own language skills. | ||||
media: The media tag lists the media types supported by the terminal. | This service is similar to blind transfer. However, the transferring | |||
Media types can be the standard Internet media types ("audio", | party first contacts the transferred-to party to approve the transfer | |||
"video", "text", "application"), optionally followed by a | through multimedia communication. Pending approval, the transferring | |||
subtype (e.g., "text/html"). In addition, the type | party then simultaneosly disconnects from the transferred-to and | |||
"application/email" is defined. | transferred parties, and connects the transferred and transferred-to | |||
parties. The transferring and transferred parties stay connected if, | ||||
for some reason, the transfer fails. | ||||
mobility: The mobility parameter indicates if the terminal is fixed | The requirements for this service are more complex. They include: | |||
or mobile. In some locales, this may affect voice quality or | ||||
charges. | ||||
priority: The priority tag indicates the minimum priority level this | o The transferring party should not need to know ahead of time | |||
terminal is to be used for. It can be used for automatically | that they will transfer the call to the transferred-to party. | |||
restricting the choice of terminals available to the user. | In other words, it should not be neccesary to know ahead of | |||
time that the consultation call (between the transferring and | ||||
transferred-to parties) is for the purposes of a transfer. | ||||
service: The service tag describes what service is being provided by | o The transferred party should be able to know that they are | |||
the terminal. | being transferred | |||
o The transferred party should be able to know to whom they are | ||||
being transferred | ||||
Attributes which are unknown should be omitted. New tags for class- | o The transferred party should be able to decide whether to | |||
tag and service-tag can be registered with IANA. The media tag uses | accept or reject the transfer | |||
Internet media types, e.g., audio, video, application/x-wb. This is | ||||
meant for indicating general communication capability, sufficient for | ||||
the caller to choose an appropriate address. | ||||
Location: sip://watson@worcester.bell-telephone.com ;q=0.7 | o The transferred party should be able to verify that they are | |||
;service=IP,voice-mail | being transferred by the transferring party | |||
;media=audio+video+application/x-wb ;duplex=full | ||||
Location: rtsp://tape.bell-telephone.com?watson482178 ;q=0.6 | ||||
;service=IP,voice-mail | ||||
;media=audio+video ;duplex=full | ||||
Location: phone://1-415-555-1212 ;q=0.5 | ||||
;service=ISDN;mobility=fixed; | ||||
language=en,es,iw | ||||
Location: phone://1-800-555-1212 ;q=0.2 | ||||
;service=pager;mobility=mobile; | ||||
duplex=send-only;media=text; priority=urgent; | ||||
description="For emergencies only" | ||||
Location: mailto:watson@bell-telephone.com ;q=0.1 | ||||
;media=application/email | ||||
Location: http://www.bell-telephone.com/~watson ;q=0.1 | ||||
;service=text/html | ||||
A 301 or 302 response MAY contain additional information in human- | o The transferred-to party should know that they are being | |||
readable form, e.g., as Content-Type: text/html. It is up to the | transferred-to | |||
server issuing the Location header to ensure consistency between the | ||||
content of the Location header and the response entity. | ||||
3.5 Replaces | o The transferred-to party should be able to know the identity | |||
of the transferring party | ||||
The Replaces request and response header is analogous to the Also | o The transferred-to party should be able to know that the | |||
header (Section 3.2, except that it asks the recipient to issue a | transferred party is being transferred as a result of the | |||
BYE to the addresses listed, with the same Call-ID as the request | consultation call in progress with the transferring party. | |||
containing the Replaces header. The special address "*" indicates | ||||
that the recipient should replace all existing legs of the call | ||||
within the Call-ID. If a message contains both Also and Replaces, | ||||
the invitations requested in the Also header MUST be completed, | ||||
successfully or not, before the terminations requested in the | ||||
Replaces header. | ||||
For example, with entities A, B and M (an MCU): | o The transferred-to party should be able to accept or reject | |||
the transferred call just like any other call | ||||
A -> B: INVITE B SIP/2.0 | o If the transferred-to party accepts the transfer, the | |||
Call-ID: 19971214T123503.33@A | transferring party should be able to know this | |||
From: A | ||||
B -> A: SIP/2.0 200 OK | o If the transferred-to party rejects the transfer, the | |||
Call-ID: 19971214T123503.33@A | transferring party should be able to know this | |||
From: A | ||||
M -> B: INVITE B SIP/2.0 | o The call between the transferring and transferred-to party | |||
Call-ID: 19971214T123503.33@A | terminates at the same time as the call between the | |||
From: M | transferring and transferred party, should the transfer be | |||
Replaces: * | successful | |||
B -> M: SIP/2.0 200 OK | This service is harder to implement. To be done in a distributed | |||
Call-ID: 19971214T123503.33@A | manner requires that information on the success of the call between | |||
From: M | transferred and transferred-to parties is communicated back to the | |||
transferring party. | ||||
B -> A: BYE A SIP/2.0 | 3.4 Multi-party Conferencing | |||
Call-ID: 19971214T123503.33@A | ||||
From: B | ||||
Requested-By: M | ||||
A -> B: SIP/2.0 200 OK | Multiparty conferencing allows multiple participants to | |||
Call-ID: 19971214T123503.33@A | simultaneously exchange media so that each party hears media from | |||
From: A | every other one. There are many flavors of this service. | |||
3.6 Requested-By | 3.4.1 Loosely Coupled Multicast Conference | |||
The Requested-By request header is only used in requests triggered | In this flavor, there is a very large conference, for which multicast | |||
by Also or Replaces. It contains the URI of the entity that issued | is being used to distribute the media. The conference is large enough | |||
the request containing the Also header. The URI is taken from the | so that there is not a direct signaling relationship between all | |||
From header of the request. For example, if A sends an invitation to | parties. Session participants simply join the multicast group, and | |||
B containing Also: C, B issues an invitation to C with Requested- | learn about each other through RTCP [3]. This kind of conference | |||
By: A. | model is often referred to as a loosely coupled conference | |||
4 Status Code Definitions | The main requirement is to be able to invite another participant to | |||
join in this conference. In fact, this kind of conference is readily | ||||
supported by baseline SIP, as it was the initial application for it. | ||||
The only new requirement is that the called party needs some way to | ||||
know that there will not be an actual SIP session - no BYE will ever | ||||
arrive (nor should one be sent). The INVITE delivers the session | ||||
invitation, and thats it. Relying on session parameters for this is | ||||
undesirable, since it leads to a dependency between SIP behavior and | ||||
the specific session type. Furthermore, it may not be possible to | ||||
ascertain from the media session whether an actual SIP session is | ||||
needed. | ||||
This feature set defines one additional status code. | 3.4.2 Distributed Full Mesh | |||
4.1 181 Queued | In this conference model, each participant has a SIP signaling | |||
session open with each other participant. The media session may be | ||||
multi-unicast or multicast. To support these conferences, the | ||||
signaling must provide support for: | ||||
The called party was temporarily unavailable, but the caller | o Transitioning gracefully from a normal two-party call to a | |||
indicated via a "Call-Disposition: Queue" directive (Section 3.3) to | conference without knowing apriori this will happen | |||
queue the call rather than reject it. When the callee becomes | ||||
available, it will return the appropriate final status response. The | ||||
reason phrase MAY give further details about the status of the call, | ||||
e.g., "5 calls queued; expected waiting time is 15 minutes". The | ||||
server may issue several 181 responses to update the caller about the | ||||
status of the queued call. | ||||
5 ISDN and Intelligent Network Services | o Adding parties to the conference | |||
SIP may be used to support a number of ISDN [4] and Intelligent | o Leaving the conference | |||
Network [5] telephony services, described below. Due to the | ||||
fundamental differences between Internet-based telephony and | ||||
conferencing as compared to public switched telephone network | ||||
(PSTN)-based services, service definitions cannot be precisely the | ||||
same. Where large differences beyond addressing and location of | ||||
implementation exist, this is indicated below. The term address | ||||
implies any SIP address. | ||||
This section is for information and illustration only. There are many | The requirements for the service are: | |||
different ways of implementing services in SIP. Since SIP only | ||||
describes the behavior induced by messages, different means of | ||||
implementing services will interoperate. | ||||
5.1 Call Redirection and "Number"-Translation Services | o Any member of an existing conference can add another party to | |||
the conference. | ||||
Call transfer (TRA) enables a user to transfer an established (i.e., | o The new party should know they are being asked to join an | |||
active) call to a third party. SIP signals this via the Location | existing conference. | |||
header in the BYE method. | ||||
Call forwarding (CF) permits the called user to forward particular | o The new party should be able to accept or reject the | |||
pre-selected calls to another address. Unlike telephony, the | invitation to join the existing call. | |||
choice of calls to be forwarded depends on program logic | ||||
contained in any of the SIP servers and can thus be made | ||||
dependent on time-of-day, subject of call, media types, urgency | ||||
or caller identity, rather than being restricted to matching | ||||
list entries. This forwarding service encompasses: | ||||
Call forwarding busy/don't answer (CFB/CFNR, SCF-BY/DA) allows the | o If the new party rejects the invitation to the conference, no | |||
called user to forward particular pre-selected calls if the | other participant should have received any messages which | |||
called user is busy or does not answer within a set time. | indicates they were ever asked to join the conference | |||
Selective call forwarding (SCF) permits the user to have her incoming | o The new party should be able to know, within the limits of | |||
calls addressed to another network destination, no matter what | synchronization of state across participants, the current set | |||
the called party status is, if the calling address is included | of participants in the call before they decide whether to | |||
in, or excluded from, a screening list. The user's originating | reject or accept the invitation. | |||
service is unaffected. | ||||
Destination call routing (DCR) allows customers to specify the | o Each participant in the call should learn that a new party is | |||
routing of their incoming calls to destinations according to | being added. | |||
- time of day, day of week, etc.; | o Each participant in the call should be able to | |||
cryptographically verify that the new party has been invited | ||||
by a specific participant. | ||||
- area of call origination; | o Each participant in the call should be able to decide whether | |||
to accept or reject the new participant. | ||||
- network address of caller; | o If any existing participant in the call rejects the new | |||
participant, the new participant is not added to the call at | ||||
all. | ||||
- service attributes; | o The inviting party can learn the success or failure of the | |||
addition of the new party. | ||||
- priority (e.g., from input of a PIN or password); | o Each participant should be able to know whether the new party | |||
was successfully added or not. | ||||
- charge rates applicable for the destination; | o Any participant should be able to leave the conference at any | |||
time. | ||||
- proportional routing of traffic. | o Each participant should know within a short period of time | |||
when some other participant has left | ||||
In SIP, destination call routing is implemented by user agents, proxy | o A participant who leaves the conference should have its SIP | |||
and redirect servers that implement custom call handling logic, with | signaling relationship terminated with all other participants. | |||
parameters including, but not limited to the set listed above. Caller | ||||
preferences are expressed in the Accept-Location header, callee | ||||
preferences in the Location header. | ||||
Follow-me diversion (FMD) allows the service subscriber to remotely | o It must be possible for two participants to simultaneously add | |||
control the redirection (diversion) of calls from his primary | a new party to the conference. | |||
network address to other locations. | ||||
In SIP, finding the current network-reachable location of a callee is | o It must be possible for a participant to add another to the | |||
left to the location service and is outside the scope of this | conference while some other participant leaves the conference. | |||
specification. However, users may use the REGISTER method to | ||||
appraise their "home" SIP server of their new location. | ||||
Universal access number (UAN) allows a subscriber with several | o The existence of the conference does not depend on the | |||
network addresses to be reached with a single, unique address. | presence of any single user in the conference. | |||
The subscriber may specify which incoming calls are to be routed | ||||
to which address. SIP offers this functionality through proxies | ||||
and redirection. | ||||
Universal personal telecommunications (UPT) is a mobility service | o The conference terminates when the last two parties terminate | |||
which enables subscribers to be reached with a unique personal | their signaling relationships. | |||
telecommunication number (PTN) across multiple networks at any | ||||
network access. The PTN will be translated to an appropriate | ||||
destination address for routing based on the capabilities | ||||
subscribed to by each service subscriber. A person may have | ||||
multiple PTNs, e.g., a business and private PTN. In SIP, a | ||||
host-independent address of the form user@domain serves as the | ||||
PTN, which is translated into one or more host-dependent | ||||
addresses. | ||||
5.2 Camp-on | It is important to note that this kind of conference does not require | |||
the use of a centralized conference controller. | ||||
Completion of calls to busy subscriber (CCBS) allows a calling user | 3.4.3 Dial-in Bridge | |||
encountering a busy destination to be informed when the busy | Another conferencing application is the "dial-up bridge". In this | |||
destination becomes free, without having to make a new call attempt. | scenario, a media bridge is used, and this device also acts as a | |||
SIP supports services close to CCBS by allowing a callee to indicate | centralized signaling server. Users join the conference by "dialing- | |||
a more opportune time to call back with the Retry-After header. | in", which means they try and initiate a SIP session with the | |||
Also, calling and called user agents can easily record the URI of | conference bridge directly. Participants do not maintain a signaling | |||
outgoing and incoming calls, so that a user can re-try or return | session with each other. Rather, each participant maintains a single | |||
calls with a single mouse click or automatically. Call-Disposition: | SIP session with the conference bridge. | |||
queue allows a caller to wait until the line becomes available. This | ||||
service is also known as a "camp-on" service. | ||||
5.3 Call Screening | The requirements for this kind of conference are: | |||
Originating call screening (OCS) controls the ability of a node to | o It should not be neccesary for a participant to know apriori | |||
originate calls. In a fashion similar to closed user groups, a | that they are contacting a dial-up bridge - it should take | |||
firewall would have to be used to restrict the ability to initiate | place as a regular SIP call. | |||
SIP invitations outside a designated part of the network. In many | ||||
cases, gateways to the PSTN will require appropriate authentication. | ||||
5.4 Directed Call Pickup | o Participants should be able to join the conference at any time | |||
by dialing in. | ||||
Directed call pickup allows a station user to answer calls directed | o Participants should be able to invite another participant to | |||
to a specific address from any other address by providing the address | join the conference call. | |||
of the line to be answered. The rung station must permit pickup. If | ||||
the call has not been answered at the ringing station, regular call | ||||
pickup occurs. If the call has been answered already, an error is | ||||
generated. | ||||
5.5 Directed Call Pickup with Barge-In | o Participants should still be able to learn, through some | |||
means, the identity of the other participants in the call. | ||||
Directed call pickup with barge-in establishes a 3-way call if the | o Participants should be able to leave the conference at any | |||
call has been answered at the original destination. | time. | |||
5.6 Outgoing Call Routing | o When a participant leaves or joins, this information should be | |||
propagated to all other conference participants through some | ||||
means besides tones or announcements in the media stream. | ||||
User-defined routing (UDR) allows a subscriber to specify how | o It must be possible for the conference bridge to authenticate | |||
outgoing calls, from the subscriber's location, shall be routed. SIP | the identity of participants. | |||
cannot specify routing preferences; this is presumed to be handled by | ||||
a policy-based routing protocol, source routing or similar | ||||
mechanisms. However, the SIP Accept-Location header may be used by | ||||
proxies and redirect servers to route calls according to caller | ||||
preferences. | ||||
5.7 End-System Services | 3.4.4 Ad-hoc Bridge | |||
Some telephony services can be provided by the end system, without | This service is not so much another conferencing model, as a | |||
involvement by SIP: | transition mechanism between conferencing models. A conference starts | |||
out as a fully distributed mesh. These conferences become unwieldy as | ||||
this number of participants approaches tens to hundreds. Someone in | ||||
the conference then decides to transition the call to a conference | ||||
bridge. The bring a conference bridge into the call, and then | ||||
instruct each participant to drop their signaling relationships with | ||||
the other participants in favor of a single signaling relationship | ||||
with the bridge. After the transition is complete, the conference | ||||
runs similar to the dial-in bridge case. However, there are some | ||||
distinctions. In the dialup conference, any participant can join in | ||||
without being invited if they know a conference code of some sort. In | ||||
the ad-hoc bridge case, participants must still be actively invited. | ||||
Abbreviated dialing allows users to reach local subscribers without | The requirements for this service are: | |||
specifying the full address (domain or host name). For SIP, the | ||||
user application completes the address to be a fully qualified | ||||
domain name. | ||||
Call waiting (CW) allows the called party to receive a notification | o The transition must be at the behest of one of the | |||
that another party is trying to reach her while she is busy | participants. | |||
talking to another calling party. | ||||
For SIP-based telephony, the called party can maintain several call | o Any participant can cause the transition to take place. | |||
presences at the same time, limited by local resources. Thus, it is | ||||
up to the called party to decide whether to accept another call. The | ||||
separation of resource reservation and call control may lead to the | ||||
situation that the called party accepts the incoming call, but that | ||||
the network or system resource allocation fails. This cannot be | ||||
completely prevented, but if the likely resource bottleneck is at the | ||||
local system, the user agent may be able to determine whether there | ||||
are sufficient resources available or roughly track its own resource | ||||
consumption. | ||||
Consultation calling (COC) allows a subscriber to place a call on | o It is not necessary for the protocol to detect and resolve | |||
hold, in order to initiate a new call for consultation. In | simultaneous transitions. It is assumed that the persons in | |||
systems using SIP, consultation calling can be implemented as | the conference would coordinate this themselves. | |||
two separate SIP calls, possibly with the temporary release of | ||||
reserved resources for the call being put on hold. | ||||
Customized ringing (CRG) allows the subscriber to allocate a | o The conference should continue to be operable during the | |||
distinctive ringing to a list of calling parties. In a SIP-based | transition | |||
system, this feature is offered by the user application, based | ||||
on caller identification ( From header) provided by the SIP | ||||
INVITE request. | ||||
Malicious call identification (MCI) allows the service subscriber to | o Participants should be informed of the transition, but it must | |||
control the logging (making a record) of calls received that are | be possible for the perception to be that there has been no | |||
of a malicious nature. In SIP, by default, all calls identify | change. | |||
the calling party and the SIP servers that have forwarded the | ||||
call. In addition, calls may be authenticated using standard | ||||
HTTP methods or transport-layer security. A callee may decide | ||||
only to accept calls that are authenticated. | ||||
Multiway calling (MWC) allows the user to establish multiple, | o It should be possible for some participants to accept the | |||
simultaneous calls with other parties. For a SIP-based end | transition, and appear through the bridge, and for others to | |||
system, the considerations for consultation calling apply. | remain in full mesh. | |||
Terminating call screening (TCS) allows the subscriber to specify | o Participants should be able to leave the conference at any | |||
that incoming calls either be restricted or allowed, according | time, including the transition period. | |||
to a screening list and/or by time of day or other parameters. | ||||
5.8 Billing Features | o Participants should be able to invite others to the | |||
conference, even during the transition period. The mechanism | ||||
for inviting them should not depend on the fact that a | ||||
transition is taking place. | ||||
Billing features such as account card dialing , automatic alternative | 3.4.5 Conference out of Consultation | |||
billing , credit card calling (CCC) , reverse charging , freephone | ||||
(FPH) , premium rate (PRM) and split charging are supported through | ||||
authentication. However, mechanisms for indicating billing | ||||
preferences and capabilities have not yet been specified for SIP. | ||||
Advice of charge allows the user paying for a call to be informed of | In this service, a user A has a call in progress with B, and a | |||
usage-based charging information. Charges incurred by reserving | separate call in progress with C. These calls are unrelated, with | |||
resources in the network are probably best indicated by a protocol | different Call-ID's. From this double call scenario, the conference | |||
closely affiliated with the reservation protocol. Advice of charge | out of consultation service allows the calls to be merged, resulting | |||
when using Internet-to-PSTN gateways through SIP appears feasible, | in a single, full-mesh conference, as described above. | |||
but is for further study. Desirable facilities include indication of | ||||
charges at call setup time, during the call and at the end of the | ||||
call | ||||
Closed user groups (CUGs) that restrict members to communicate only | ||||
within the group can be implemented using firewalls and SIP proxies. | ||||
5.9 User-to-User Signaling | The requirements for this service are: | |||
User-to-user signaling is supported within SIP through the addition | o Only participant A can invoke the service | |||
of headers, with predefined header fields such as Subject or | ||||
Organization. | ||||
5.10 Operator Services | o It must not be neccesary for A to know that he will merge the | |||
two calls before any or either of them is made | ||||
There are a number of services which involve three parties, for | o It must not be neccesary for A to have been the initiator of | |||
example, a secretary dialing for boss, an auto-dialer handing a call | the calls that are being merged | |||
to a telemarketer, attended call transfer, operator services such as | o It must be possible to merge an arbitrary number of calls | |||
person-to-person calls and full-mesh "multicast". | ||||
Operator services can be implemented in a number of ways, combining | o The participants being merged must be informed that the | |||
Also, Replaces with either INVITE or BYE. The callee's end system | merging is taking place | |||
does not have to be cognizant of the fact that this an operator | ||||
service. The services make use of the Call-ID rules that stipulate | ||||
that a new INVITE for an existing Call-ID does not alert the user, | ||||
but is added silently. | ||||
Figure 1 shows the example of an autodialer connecting to a | o A participant must be able to reject the merge, in which case | |||
prospective customer and, once the callee picks up, transfering the | they are disconnected with all parties | |||
call to the telemarketer. (This goes to show that SIP is morally | ||||
neutral.) | ||||
telemarketer | o A participant must be able to verify that A was the party that | |||
T ------------. n | initiated the merge. | |||
^ : ----> nth step; INVITE (Also:) | ||||
| : ....> nth step; BYE (Also:) | 4 Discussion of Implementation Options | |||
2(C) | : 4 3( | ||||
| : ( | This section discusses some of the technical issues in designing a | |||
| V 5 V | protocol mechanism to support the above requirements. | |||
.................> | ||||
A C | 4.1 Transfer | |||
For the discussion which follows, we assume the transferring party is | ||||
A, the transferred party is B, and the transferred-to party is C. | ||||
The nature of the transfer service is that the transferred party (B) | ||||
must be informed about the transfer and accept it before C (the | ||||
transferred-to party) is contacted. This implies that the messaging | ||||
flow for the service must consist of a message from A to B, and then | ||||
B to C. | ||||
The message from A to B must simultaneously disconnect A and B, and | ||||
alert B about the transfer. This is most readily accomplished by | ||||
including some kind of header in the BYE message which indicates that | ||||
B should initiate a call to C. This header is the Also header, which | ||||
is described in greater detail in section 5.1. It contains the | ||||
address of a participant, along with a signed token. This token is | ||||
the signature over the sender of the message (the From field), the | ||||
address in the Also header, and the Call-ID. Since C needs to know | ||||
that he is being contacted as a result of a transfer, the INVITE from | ||||
B to C must contain some kind of header indicating that it was A who | ||||
asked for the transfer. This header needs to contain A's name along | ||||
with the authorization token from the Also header. This token allows | ||||
C to verify that A requested the transfer to C for this particular | ||||
call. This header is the Requested-By header, described in greater | ||||
detail in section 5.3. | ||||
Therefore, the basic transfer messaging flow is simple. A sends a BYE | ||||
to B, containing an Also header listing C. The BYE causes A and B to | ||||
be disconnected. User B is alerted about the transfer. If accepted, B | ||||
sends an INVITE to C, including a Requested-By header in the INVITE. | ||||
4.2 Full mesh conferences | ||||
We assume the conference starts as a standard two party call in SIP. | ||||
One of the parties wishes to add a third to the conference. Based on | ||||
the requirements, the new party needs to first be asked if they wish | ||||
to join the conference. This implies that messaging begins with the | ||||
inviting party (party A) sending a message to the new participant | ||||
(party B). This message must contain a list of the other | ||||
participants. If the invitation is acceptable to B, B can begin to | ||||
join the conference. To join the conference, a signaling relationship | ||||
must be established between B and all other participants. This can be | ||||
done by having existing participants contact B, or B contacting | ||||
existing participants. Since B has the list of participants in the | ||||
initial INVITE from A, the most efficient approach is to have B | ||||
contact each participant directly. | ||||
Thus, in the simplest scenario, A (who is in a call with C), sends an | ||||
INVITE to B. This INVITE contains an Also header, indicating C. B | ||||
sends an INVITE to C, containing a Requested-By header naming A. C | ||||
accepts, and then B sends a 200 OK to A. Now, there is a signaling | ||||
relationship between all parties. Adding additional parties is done | ||||
in a similar fashion. | ||||
On the surface, this simple mechanism appears sufficient. However, it | ||||
is not. Consider the following problematic cases (assume A,B, and C | ||||
are already in a conference): | ||||
o While A is adding D, B adds E. Since A did not tell D about E | ||||
(as it didn't know about E), D may not know of E's existence. | ||||
This results in a partially connected conference. | ||||
o While A is adding D, B sends a BYE to the group. If this BYE | ||||
is sent by B before the INVITE from D arrives at B, B should | ||||
respond to the INVITE with an error. As far as B is concerned, | ||||
the INVITE has failed, and it responds with an error to A. | ||||
What should A do now? It cannot tell whether the add party | ||||
failed because someone left the group, or because someone | ||||
refused to add that party. In one case, the add should be | ||||
tried again, and in the other, it should not. Even worse, | ||||
should B accept the call from D, a partially disconnected | ||||
conference will occur. | ||||
o What happens if a transfer takes place at the same time as an | ||||
add party? | ||||
o A participant leaves the conference, but fails to send a BYE | ||||
to all the other participants (either on purpose or by | ||||
accident). The result is a partially disconnected conference. | ||||
The problems can all be categorized as difficulties in synchronizing | ||||
a distributed database. The database, in this case, is the set of | ||||
participants. This database is replicated at each participant. The | ||||
database is dynamic, with each participant owning the entry in the | ||||
database corresponding to itself. As changes occur, everyone must be | ||||
quickly synchronized to achieve a consistent view of the conference | ||||
participants. | ||||
4.2.1 Approach I: Caretaker | ||||
In this approach, the party (A) that invites another (D) to the | ||||
conference is its caretaker. When A adds D, it informs D of the other | ||||
participants it knows about. D then sends an INVITE to each of these | ||||
in turn, establishing a signaling relationship. Should the | ||||
participant list (at A) change during the time D is being addded | ||||
(until a 200 OK arrives from D), A makes note of these changes, and | ||||
then propagates them to D. | ||||
The difficulty with this approach is there is no easy way for A to | ||||
know when it can cease being caretaker for D. Lets say A invited D, | ||||
and told it to contact B and C, which it did. After receiving the 200 | ||||
OK from D, A receives an INVITE from E, a new party added by B. Now, | ||||
does A need to inform D about E? If B had invited E after knowing | ||||
about D, A does not have to inform E, but if B invited E before | ||||
knowing about D, A does have to inform D. | ||||
Furthermore, should the caretaker itself leave the conference, the | ||||
mechanism ceases to work. As a result, we don not believe this | ||||
approach is viable. | ||||
4.2.2 Approach II: Flooding | ||||
We make the following important observation: | ||||
synchronization of the set of participants in a fully | ||||
meshed multiparty conference is similar to the problem of | ||||
database synchronization in link state routing protocols, | ||||
like OSPF. | ||||
Based on this, we can develop mechanisms for SIP based on the same | ||||
synchronization, flooding, and adjacency notions in OSPF. We further | ||||
observe that this approach has already been used as the basis for | ||||
existing conferencing mechanisms [4]. | ||||
To solve the first problem above, we introduce additional semantics | ||||
and behavior into the Also header. When A invites D into the | ||||
conference, the INVITE includes an Also header listing B and C. This | ||||
prompts D to send an INVITE to both B and C. In OSPF terminology, | ||||
this effectively establishes an adjacency between D and B, and D and | ||||
C. These INVITEs contain Also headers as well, listing the set of | ||||
participants the D believes is in the call. | ||||
When B and C receive this INVITE, they compare the set of | ||||
participants in the Also header with the set of participants they | ||||
believe are in the call. Note that this is effectively the same | ||||
operation as database synchronization in OSPF. The result is three | ||||
sets for each pair (assume B below): | ||||
S1: S1 is BD - the intersection of the set of participants B and D | ||||
both believe to be in the conference. | ||||
S2: S2 is B - BD - the set of participants B believes to be in the | ||||
conference, but D is not aware of | ||||
S3: S3 is D - BD - the set of participants D has been asked to | ||||
contact, which are not known to B | ||||
First consider S2. There are only two ways this inconsistency can | ||||
happen. The first way is that B has learned of a new participant | ||||
before A issued the add party to D. The second is that A has learned | ||||
the party has left the call before the INVITE from D arrives at B. | ||||
Unfortunately, the desired behavior is different in each case. If B | ||||
is correct, and a new party has joined, B should return the address | ||||
of the party in the 200 OK to the INVITE from D. This would prompt D, | ||||
in turn, to add those parties. On the other hand, if B is wrong, and | ||||
the party has left the conference, B should say nothing in the 200 OK | ||||
about this participant. | ||||
To enable these differing cases, we can add two additional pieces of | ||||
information to the addresses in the Also header. These are the | ||||
participant state (either active or inactive), and the version | ||||
number. When a participant receives a BYE from another, they mark | ||||
that participant as inactive, and hold onto the state for a short | ||||
duration (time TBD). This member is included in Also headers as other | ||||
participants, but they are marked as inactive. Based on this, in the | ||||
case above, B can ascertain the right behavior. | ||||
The version number satisfies a different need. What happens if the | ||||
participant that left, comes back because they are re-INVITEd? In | ||||
this case, some of the participants will think this participant is | ||||
inactive, and others will consider them active. To determine which | ||||
piece of state is correct, the version number increments each time | ||||
the state changes. The version with the highest value is always the | ||||
most recent. (TBD: who sets this? Can't always be the originator). | ||||
This is identical to the use of sequence numbers in LSA's in OSPF. | ||||
Consider now the set S3. When B receives the INVITE, this represents | ||||
the set of users D claims is in the conference, but B does not know | ||||
about. Since B keeps a cache of users who have left the conference, B | ||||
can be sure these are new participants that it has not learned of | ||||
yet. B should then send an INVITE to these users to establish | ||||
signaling relationships with them. As with other INVITEs' the Also | ||||
field contains B's perspective on the set of conference participants. | ||||
This is effectively the same process as flooding of new LSA's in | ||||
OSPF. | ||||
TBD: How is requested-by handled in these various cases? | ||||
We believe the flooding approach to be robust and well-proven from | ||||
many other protocols. | ||||
4.3 Dial-up Bridges | ||||
Dial up bridges are easily supported. We model them as virtual users. | ||||
When a user wants to join a dial-up conference, they send an INVITE | ||||
to the conference bridge. The bridge answers the call, and | ||||
establishes a point to point signaling relationship with the new | ||||
participant. The bridge performs the mixing locally, and sends the | ||||
mixed stream to each participant separately. As far as each | ||||
participant is concerned, they have a single signaling relationship | ||||
with one other entity - the conference server. | ||||
Fortunately, this does not prohibit each party from learning the | ||||
identity of the others in the call. The bridge is effectively an RTP | ||||
mixer. As such, it can use contributing sources (CSRC) in the RTP and | ||||
RTCP packets to identify the other participants in the call. | ||||
A user leaves the conference by hanging up with the bridge, as they | ||||
would hang up with any other user in a normal two party call. | ||||
An important issue is how conferences are identified. In the | ||||
telephone network, there is usual a dial-in number and a passcode | ||||
that the participant must know. In SIP, there are many more | ||||
possibilities: | ||||
o The conference is identified by a single URL - | ||||
sip:conference332@conferences.com, for example. A user sends | ||||
an INVITE to this address. The bridge identifies the | ||||
conference by looking at the URI in the Request-URI. | ||||
o There is a single URI for each bridge - | ||||
sip:bridge3@conferences.com. The specific conference is | ||||
identified by a passcode sent as the password in the URI: | ||||
sip:bridge3:9987097@conferences.com. | ||||
o The conference is identified by a single URL, as in the first | ||||
case. However, participants must also have a passcode. When | ||||
the server receives an INVITE for this URI, it responds with a | ||||
401 demanding digest authorization. The shared secret used for | ||||
authenticating the caller is the passcode. | ||||
o The conference is identified by a single URL, as in the first | ||||
case. The server is programmed with the public keys of those | ||||
participants allowed to join. When a participant tries to join | ||||
the conference by sending an INVITE to its address, the server | ||||
uses PGP authentication to verify the user is one of those | ||||
permitted. This allows for tight, per user controls on | ||||
conference participation. | ||||
Some have suggested identifying the conference by Call-ID. We do not | ||||
believe this is the right approach. The Call-ID represents a SIP | ||||
signaling relationship shared among two or more users. Since, in the | ||||
conference bridge case, each user has a separate signaling | ||||
relationship with the bridge, using a common Call-ID is not | ||||
appropriate. | ||||
Note that, based on this description, dial-in conferences are readily | ||||
supported in baseline SIP without any extensions. However, the | ||||
situation is more complex when a participant wishes to add another to | ||||
the conference. | ||||
We believe it is essential that the act of adding a party to a | ||||
bridged conference is no different than the act of adding a party to | ||||
a fully meshed one. Consider a bridged conference with participants | ||||
A, B, and C. Each has a signaling relationship with the bridge, X. A | ||||
wishes to bring D into the conference. Using the same mechanisms as | ||||
for fully meshed conferences, A sends an INVITE to D, with the Also | ||||
header indicating X. D then sends an INVITE to X, which accepts. The | ||||
result is that D has a signaling relationship with the bridge, but is | ||||
still maintaining its signaling relationship with A. | ||||
To resolve this, the bridge needs to step up and instruct D to | ||||
effectively abandon its signaling relationship with A (and vice a | ||||
versa). This does not mean the bridge wants A to send an BYE to D. | ||||
Rather, the bridge wants another one call leg to subsume another. For | ||||
D, this means that the D-X call leg should subsume the D-A call leg. | ||||
To accomplish this, the bridge sends an INVITE to D with a header | ||||
called Replaces. Replaces indicates that the call leg the INVITE | ||||
arrived on is subsuming the one identified in the header. The | ||||
Replaces contains the address of A. The request must also be | ||||
authenticated, since the Replaces header presents a powerful DOS | ||||
attack. Users should accept an INVITE with a Replaces header only | ||||
after either requesting confirmation from the user, or if the request | ||||
is signed by an authorized bridging service. | ||||
4.4 Conference out of Consultation | ||||
In this service, A is in a call with B, and separately, A is in a | ||||
call with C. These are two separate calls, and thus have identical | ||||
Call-IDs. Transitioning to a full mesh multiparty conference is | ||||
relatively straightforward. A can simply send an INVITE to B, with an | ||||
Also listing C. As far as B is concerned, the process is a normal add | ||||
party. | ||||
The only difference is that the Call-ID is different in both calls. | ||||
Thus, the INVITE to C from B would not appear to be for the same | ||||
call. To resolve this, A must effectively change the Call-ID with B, | ||||
and then perform an add party. The change in Call-ID is accomplished | ||||
by having A send an INVITE to B (using the Call-ID from the A-C | ||||
call), with a Replaces header containing the A-B Call-ID and A's | ||||
address. The Replaces header has the same semantic here as in the | ||||
bridged conference case above. The call leg identified in the | ||||
Replaces header is subsumed by the call-leg of the INVITE. | ||||
Once this transition has taken place, A can send an INVITE to B, | ||||
containing Also:C, as discussed above. | ||||
If the calls being connected are multi-party calls, the situation is | ||||
more complex. (TBD: does this mechanism work for bridging two full | ||||
mesh calls?) | ||||
4.5 Ad-hoc conference bridging | ||||
To support an ad-hoc conference bridge, the following operations must | ||||
take place: | ||||
o One of the parties in the call must contact a bridge, | ||||
informing it of the set of participants | ||||
o The bridge must contact those participants, and cause them to | ||||
replace their signaling relationship with the other parties | ||||
with the relationship with the bridge | ||||
To support the first, the initiator sends a message to the bridge, | ||||
containing the list of participants. We use an INVITE method for | ||||
this, and the participants are listed in the Also headers. It is not | ||||
clear if this is the right approach. The semantics of INVITE with | ||||
Also are not the same here. The bridge is not being asked to join the | ||||
call, rather, its being asked to take over the the signaling and | ||||
media connectivity for the call. For this reason, it might be | ||||
appropriate to define a new method to indicate this, or perhaps a new | ||||
header or parameter to Also. | ||||
Once the bridge has been contacted with the list of participants, it | ||||
must send an INVITE to each (using the same Call-ID as the current | ||||
call) to establish a relationship with them. This call leg must | ||||
eventually replace the call legs the user has with all the other | ||||
users. However, the user should not subsume a call leg with some | ||||
other user until the bridge has succesfully contacted that other | ||||
user. | ||||
For this to work, the initial INVITE with each user is treated as a | ||||
normal add-party. The Also list contains those users the bridge knows | ||||
about (initially, those the initiator told the bridge about). As far | ||||
as the contacted user is concerned, a normal add party is taking | ||||
place. The response is (under normal cases) a 200 OK containing those | ||||
additional parties the contacted user knows about. This way, if a | ||||
user was in the process of an add party while someone else | ||||
transitioned to a bridge, the bridge can learn about the new party. | ||||
Should the user add parties after being contacted by the bridge, the | ||||
user will tell the new party about the bridge. This allows the bridge | ||||
to learn about all users that come (and go) during the transition | ||||
period. | ||||
Once the bridge has completed contacting all participants in the | ||||
party, it attempts to subsume the various call legs into its own call | ||||
leg. To do this, it sends another INVITE to each participant, listing | ||||
those call legs which must be subsumed. In the case where a | ||||
participant has added another user after the response to the bridges | ||||
initial INVITE was sent, but before the the "subsuming INVITE" | ||||
arrives, things still work. The new party will be informed about the | ||||
bridge, contact the bridge, and the bridge accepts. The bridge can | ||||
then send another INVITE to each user subsuming this particular new | ||||
call leg. | ||||
4.6 Transfers to Multiparty Conferences | ||||
This situation is more complex than normal transfers. We first | ||||
consider the case of a full mesh signaling relatioship. Assume A, B, | ||||
and C are already in a call. A wishes to transfer both B and C to Z. | ||||
Extending the mechanism for a single party call is the ideal choice. | ||||
In this case, A would ask B to contact Z, and A would ask C to | ||||
contact Z. Everything works fine so long as (1) both B and C perform | ||||
the transfer (i.e., both contact Z), and (2) Z accepts both B and C's | ||||
invitations. However, if these assumptions fail to hold, the | ||||
resulting transfer will only partially complete. For example, it is | ||||
possible that only A gets transferred to Z. | ||||
Whether this behavior is acceptable or not is a good question. We | ||||
believe that since the blind transfer mechanism has no guarantees on | ||||
success (the transferring party disconnects in either case), this | ||||
behavior is acceptable. | ||||
Another issue that arises for multiparty conference transfers is a | ||||
flooding effect at the transferred-to party. If a large number of | ||||
participants where transferred, Z would receive, in rapid succession, | ||||
an INVITE from each. To facilitate a usable application, Z should not | ||||
really prompt the user about accepting each of these parties. Rather, | ||||
it should accept them all if it accepts the first. So, we therefore | ||||
have the rule: if a user accepts a transfer, it must accept all other | ||||
parties which have been transferred. | ||||
The specific mechanism is the same for multiparty conferences. A | ||||
sends a BYE to B and C containing an Also header listing Z. B and C | ||||
send a 200 OK to the BYE, and then send an INVITE to Z. This INVITE | ||||
contains a Requested-By header listing A. When Z gets the first of | ||||
these, it alerts the user and accepts the call. (TBD: should these | ||||
triggered INVITEs contain Also's? Probably. But, in this case, Z is | ||||
going to get the first INVITE with lots of Also's. Many of these (but | ||||
perhaps not all) will eventually contact Z directly. So, should Z | ||||
send an INVITE to those in the Also headers it doesn't know about | ||||
already? Perhaps it should wait a while to see who contacts it first. | ||||
As an alternative, the BYE from A can contain Z's address, PLUS those | ||||
it send the BYE to. As a result, the INVITE from B or C to Z would | ||||
only contain those users in the Also which Z did not list in the BYE. | ||||
What is the right approach here?) | ||||
5 Header Syntax | ||||
This section defines the syntax for the three new headers defined | ||||
here - Also, Replaces, and Requested-By. | ||||
5.1 Also | ||||
The Also header is used to list other participants in a call. It is a | ||||
request and response header, and contains a list of SIP URI's, along | ||||
with some special parameters. | ||||
Also = ``Also'' ``:'' 1#Also-Values | ||||
Also-Values = name-addr [parameters] | ||||
parameters = 1*parameter | ||||
parameter = ``;'' (status-param | version-param | crypto-param) | ||||
status-param = ``status'' ``='' (``active'' | ``inactive'') | ||||
version-param = ``version'' ``='' 1*3digit | ||||
crypto-param = ``token'' ``='' token | ||||
The crypto-param is a token which is copied into the Requested-By | ||||
header for requests that are "triggered" as a result of an Also | ||||
header. The token is a signature over the URI of the entity | ||||
generating the Also header, the address in the Also header itself, | ||||
and the Call-ID. See section 6.1 for details on its computation. | ||||
5.2 Replaces | ||||
The Replaces header is used to indicate that the call leg identified | ||||
in the header is to be subsumed by the one initiated by this INVITE. | ||||
It is a request header only, valid only in INVITE messages. The | ||||
syntax is: | ||||
Replaces = ``Replaces'' ``:'' 1#Replaces-Values | ||||
Replaces-Values= SIP-URI [call-id-param] | ||||
call-id-param = ``;'' ``call-id'' ``='' token | ||||
When the call-id parameter is not present, it is presumed to be the | ||||
same as the Call-ID of the INVITE itself. | ||||
5.3 Requested-By | ||||
The Requested-By header is a request header only. It identifies the | ||||
participant who asked the UAC to send the request. The syntax is: | ||||
Requested-By = ``Requested-By'' ``:'' name-addr [req-params] | ||||
req-params = ``;'' token-param | ||||
token-param = ``token'' ``='' token | ||||
6 Also and Requested-By Header Semantics | ||||
This section overviews the detailed semantics associated with the | ||||
Also and Requested-By headers. | ||||
6.1 Sending an Untriggered INVITE | ||||
When a UAC sends an INVITE containing an Also header, without having | ||||
been asked by some other UAC to do so, it is called an untriggered | ||||
INVITE. Untriggered INVITEs are sent when a user wishes to add | ||||
another user to a call, or to perform a transfer and hold service. | ||||
Other uses may exist. | ||||
An untriggered INVITE MUST NOT contain a Requested-By header. This | ||||
header is used to determine whether an INVITE is triggered or not. | ||||
When a UAC sends an untriggered INVITE containing an Also header, it | ||||
implies that the UAC wishes the recipient to send an INVITE to those | ||||
parties listed in the Also headers. If sent to a party not already in | ||||
the call, the INVITE effects an add party operation. If sent to a | ||||
party already in a call, it affects a transfer and hold operation. To | ||||
ensure fully connected conferences, it is RECOMMENDED that a UAC | ||||
include a URI for each participant it is aware of. | ||||
Each element in the Also list should additionally contain a status | ||||
and a version parameter. If the UAC believes the participant is no | ||||
longer in the call, the status parameter is set to inactive, | ||||
otherwise its active. The version parameter contains the version of | ||||
the status for each participant that the UAC is currently aware of. | ||||
The Also header SHOULD contain a token parameter for each URI listed. | ||||
This parameter is computed in the following fashion: | ||||
1. Initialize a string to the value of the Call-ID. | ||||
2. Append the URI from the Also, not including any | ||||
displaynames, but otherwise including all URI parameters. | ||||
Also append the Also parameters status and version. | ||||
3. Append the URI that will be included in the From field of | ||||
the INVITE. | ||||
4. Append the URI that will be included in the To field of the | ||||
INVITE. | ||||
5. Compute a signature over this field, using a XXX hash and | ||||
encryption using XXX. | ||||
6. The signature is then base64 encoded. The result is the | ||||
token. | ||||
The response to the INVITE is a non-200 value if the UAS failed to | ||||
establish a call leg with all the participants listed in the Also | ||||
fields, or if the UAS was unwilling or unable to execute the request. | ||||
A 200 OK response means that the UAS successfully established the | ||||
call with those participants which have not already left the call. In | ||||
other words, if A sends an untriggered INVITE to B, containing C in | ||||
the Also header, B will send an INVITE to C. If C has left the call | ||||
(a fact which A did not know yet), C will respond with a specific | ||||
error code indicating this. In this fashion, B will know that it may | ||||
still respond with a 200 OK to A should all other call legs become | ||||
established. Furthermore, if other participants have joined the call | ||||
since A sent the INVITE to B, B may have established call legs to | ||||
them as well. The triggered INVITE will fail if B fails to establish | ||||
a call leg with those participants, even if they are not listed in | ||||
the Also header. | ||||
Thus, a UAC SHOULD NOT treat a 200 OK to an untriggered INVITE as an | ||||
indication that a call leg was established with all (and only) the | ||||
participants listed in the Also header. | ||||
6.2 Receiving an Untriggered INVITE | ||||
A UAS can determine whether or not an INVITE was triggered or | ||||
untriggered based on the presence of the Requested-By header. | ||||
Presence of this header means that the INVITE was triggered, and its | ||||
absence implies untriggered. | ||||
If the UAS receiving the INVITE is not currently in the call | ||||
identified by the Call-ID, the UAS is being invited to join an | ||||
existing call as a new member. The UAS SHOULD alert the user and ask | ||||
for confirmation. | ||||
If the UAS receiving the INVITE is currently in a call identified by | ||||
the Call-ID, the UAS is being transferred and held. The UAS SHOULD | ||||
alert the user and ask for confirmation. | ||||
6.2.1 New Call | ||||
The UAS SHOULD send a 100 Trying response. If the transfer or add | ||||
party request is not acceptable to the user, a 6XX response SHOULD be | ||||
sent to the UAC. If the transfer/add-party is acceptable, the UAS | ||||
MUST NOT respond definitively at this point. | ||||
Instead, the UA formulates an INVITE for each participant listed in | ||||
the Also header. Each INVITE MUST also contain a Requested-By header. | ||||
This header is formed by attaching the URI in the From field in the | ||||
INVITE to the Requested-By header. The token from the element in the | ||||
Also field is copied to the token parameter in the Requested-By | ||||
header. The URI for the Also field is copied into the To field of the | ||||
INVITE. The remaining fields are initialized as they would be for any | ||||
other INVITE sent by this UA. The INVITE's generated by the UA are | ||||
called triggered INVITEs. | ||||
The UA also formulates an internal participant list. This list | ||||
contains a set of URIs for each user, and for each, a version and | ||||
status parameter. This list is initialized to the set contained in | ||||
the Also header in the INVITE. This list is also placed into the Also | ||||
headers of each triggered INVITE. The token in the Also field is | ||||
generated as described in section 6.1. Note that this is NOT the same | ||||
token received for this Also element in the untriggered INVITE. It is | ||||
regenerated with the UA as the originator. | ||||
Each triggered INVITE is then sent. The INVITEs MAY be sent in | ||||
parallel, or MAY be sent sequentially, or MAY be sent in any | ||||
groupings deemed appropriate. However, for sake of low latencies, | ||||
sending the triggered INVITEs all at once is RECOMMENDED. | ||||
If the UA receives a response to any of these INVITEs that is not 200 | ||||
or 6XX (Not in Call), the UA determines that it was not successfully | ||||
added to the call. It MUST send a BYE to those participants which: | ||||
o responded to a triggered INVITE with a 200 | ||||
o have not yet responded | ||||
o sent it a triggered INVITE for the same call | ||||
The latter case occurs when another party in the call (who has | ||||
received an INVITE from the UA) adds a new party as well. This new | ||||
party is informed of the UA, and sends it a triggered INVITE. | ||||
The UA MUST then respond to the original untriggered INVITE with an | ||||
error code (TBD: what code?). | ||||
If a response to a triggered INVITE is a 200, this response may | ||||
contain additional Also headers. These headers contain additional | ||||
participants that the recipient of the triggered INVITE knew about, | ||||
but the UA did not. The 200 may also contain updated status on | ||||
participants the UA knew about. | ||||
The UA uses this list to update its own list of participants. New | ||||
users learned about from the 200 OK are added to the list. Users | ||||
listed in the 200 OK, which are known to the UA, but whose version | ||||
number in the 200 OK is higher, are updated. | ||||
If the resulting update generates new active members, the UA MUST | ||||
generate additional triggered INVITEs for them. The generation of | ||||
these triggered INVITEs is identical to the above process, with an | ||||
important difference. The URI in the Requested-By field is copied | ||||
from the To field in the 200 OK. 200 responses to these triggered | ||||
INVITEs may cause further triggered invites. | ||||
If the resulting update causes members to move from active to | ||||
inactive, the UA should not send them a triggered INVITE if it has | ||||
not already done so. | ||||
If the response to a triggered INVITE is a 6xx (not in call), the UA | ||||
changes the status of that member to inactive, and increments the | ||||
version number (TBD: should this be an increment? Perhaps the 6xx | ||||
should contain the new version number). | ||||
Once responses have been received to all triggered INVITEs, all of | ||||
which were either 200 or 6xx, the UA responds to the original INVITE | ||||
(TBD: should this contain an Also list?). The UA is now in the call. | ||||
6.2.2 Existing Call | ||||
When a UA receives an INVITE containing an Also field, but no | ||||
Requested-By field, the INVITE is to transfer/hold the UA. | ||||
If the originator of the INVITE is not already in the call, the | ||||
INVITE is ignored. A 200 OK response is sent, however. (Transfers can | ||||
only take place from parties already in the call). Those users in the | ||||
Also header, who are already in the call, are ignored. If there are | ||||
no remaining users from the Also list, the INVITE is ignored. | ||||
The UA then generates triggered INVITEs to the remaining UA's in the | ||||
Also list. The behavior from this point forward is identical to | ||||
processing triggered INVITE responses in the previous section. | ||||
6.3 Receiving a Triggered INVITE | ||||
When a UA receives an INVITE containing a Requested-By header, it has | ||||
received a triggered INVITE. If the INVITE is for a new call, the UA | ||||
has just been transferred-to. If the INVITE is for an existing call, | ||||
the UA is being informed of a new party in this call. | ||||
6.3.1 New Call | ||||
The UA has just been transferred-to. The Requested-By header contains | ||||
the address of the transferring party. The UA SHOULD verify that the | ||||
token in the Requested-By header is valid. This will verify that the | ||||
transferring party is, in fact the one listed, and that this party | ||||
did, in fact, transfer the user listed in the From field. If the | ||||
token is not verified, the UAS SHOULD respond with a 4xx code, and | ||||
SHOULD NOT alert the user. | ||||
If the token is verified, the UA SHOULD alert the user, and ask for | ||||
confirmation. If the user rejects the transfer-to, the UAS SHOULD | ||||
send a 6xx response. | ||||
In either case, the UA MUST remember that it rejected the transfer | ||||
for this Call-ID. Subsequent triggered INVITEs for the same call MUST | ||||
be responded to with the same error response code. The UA MUST cache | ||||
its rejection of this transfer (identified by the Call-ID and URI of | ||||
the transferring party) for at least XX minutes. (TBD - what happens | ||||
if a very old INVITE arrives after the cache expires, and the user | ||||
accepts this time - we get a partial disconnect). The UA SHOULD alert | ||||
the user if it receives a triggered INVITE with a different user | ||||
listed in the Requested-By header, and MAY respond differently to | ||||
this transfer. | ||||
If the INVITE is acceptable, the UA sends a 200 OK. Processing of | ||||
subsequent triggered INVITEs (one will likely come from each | ||||
participant in the call) follows the rules below for an existing | ||||
call. | ||||
6.3.2 Existing Call | ||||
When a UA receives a triggered INVITE for an existing call, the | ||||
INVITE is an attempt to inform the participant of new members for | ||||
that call. | ||||
The UA SHOULD first verify the token. It does so by computing the | ||||
hash of the Call-ID, To address, Requested-By address, and From | ||||
address. This is compared to the decrypted value of the token using | ||||
the public key of the user listed in the Requested-By. If the two | ||||
match, the token is verified. | ||||
If the token is not verified, the INVITE is rejected with a 4xx | ||||
response. If the token is verified, the UA checks to see if the user | ||||
listed in the Requested-By is an active call participant. If they are | ||||
not, the INVITE is rejected with a 4xx response (TBD: is there a case | ||||
where the UA might not know about this participant yet?). If the user | ||||
is a participant, the INVITE is accepted. The user SHOULD NOT be | ||||
alerted. | ||||
The list of users in the Also header is then examined. If this list | ||||
contains users already known to the UA, the local list of | ||||
participants is updated if the version number is higher. If the list | ||||
contains users not known to the UA, they are added to the local list | ||||
of participants. | ||||
The UA then computes a difference set between its updated list and | ||||
the list in the Also header. This set includes any users in its local | ||||
list and not in the Also list. The set also includes users in both | ||||
lists, but whose version is higher in the local list. This set is | ||||
included in the Also header in the 200 OK to the INVITE. The token in | ||||
the 200 OK is generated as described in 6.1. | ||||
The UA then computes a second difference set between its updated list | ||||
and the list in the Also header. This set includes any users in the | ||||
Also list not in its local list. The set also includes users in both | ||||
lists, but whose version is higher than in the local list. The active | ||||
users from this set are then sent triggered INVITEs. The Requested-By | ||||
and Also fields in these triggered INVITEs are computed as described | ||||
above. The inactive users in this set are then sent triggered BYE's. | ||||
The Requested-By and Also fields in the triggered BYEs are computed | ||||
in the same fashion as triggered INVITEs, except a triggered BYE | ||||
contains no Also fields. | ||||
6.4 Sending an untriggered BYE | ||||
A UA MAY send a BYE, containing Also headers, at any time. This BYE | ||||
simulataneously terminates a call leg with the recipient, and causes | ||||
the recipient to attempt to set up a call leg to the parties listed | ||||
in the Also header. Unlike the INVITE, the BYE response is sent | ||||
immediately, without first adding the various parties. Sending an | ||||
untriggered BYE is equivalent to a blind transfer. | ||||
The Also headers in the untriggered BYE MUST contain tokens. These | ||||
tokens are generated in the same way described in section 6.1. | ||||
6.5 Receiving an untriggered BYE | ||||
If the BYE corresponds to an existing call leg, the UA sends a 200 OK | ||||
to the BYE. If it does not, it sends a 481. | ||||
The UA then generates triggered INVITEs to all participants listed in | ||||
the Also field. Generation of the triggered INVITEs, and processing | ||||
of their responses, is done in the same fashion as described in | ||||
section 6.1. The difference is, of course, that no additional | ||||
response is sent to the BYE. | ||||
6.6 Receiving a triggered BYE | ||||
If the BYE doesn't correspond to an existing call leg, the UA sends a | ||||
481. The UA then validates the token in the Requested-By header. If | ||||
it is validated, a 200 OK is sent to the BYE, and the call-leg is | ||||
torn down. | ||||
7 Replaces header semantics | ||||
The Replaces header is used to allow one call leg to subsume another. | ||||
The new call leg is identified by the combination of To, From, and | ||||
Call-ID in the INVITE carrying the Replaces header. Replaces is a | ||||
request header only, and MUST appear only in INVITEs. A UAS receiving | ||||
a Replaces header in a non-INVITE request MUST respond with a 4xx | ||||
status code. | ||||
The request containing a Replaces header SHOULD be authenticated. | ||||
The Replaces header contains a list of call-legs, identified by the | ||||
URI of the remote party and a Call-ID. If any of these are not valid | ||||
call-legs as known to the UAS, the INVITE MUST be responded to with a | ||||
4xx status code. Otherwise, the UAS "abandons" each call leg listed - | ||||
acting as if it had never been established. No BYE is sent. A 200 OK | ||||
is then sent to the client. | ||||
If a BYE additionally contains Also headers, the UAS MUST first | ||||
generate the triggered INVITEs implied by the Also headers. Only if | ||||
all triggered INVITEs succeed should the UAS act on the Replaces | ||||
header. | ||||
8 Example Call Flows | ||||
This section illustrates some example call flows. Messages are of the | ||||
form: | ||||
INV B Also:C,D | ||||
BYE A Also:Y | ||||
Where INV implies an INVITE request, and BYE a BYE request. The | ||||
letter after the method is the Request URI. Also:C,D implies that | ||||
URI's C and D were in the Also header. | ||||
8.1 Basic Transfer | ||||
Figure 2 exemplifies the basic transfer in a two party call. A first | ||||
sets up a call to B, and then transfers B to C. | ||||
8.2 Basic Add Party | ||||
Figure 3 exemplifies the basic add party. A and B are already in a | ||||
call. A adds C to the call. | ||||
8.3 Add Party during Add Party | ||||
In this example (Figure 4), A and B are in a call. A adds another | ||||
party, C, while B adds a different party, D. In the example, B adds D | ||||
before learning about C. | ||||
A B C | ||||
INV | ||||
-----------------> | -----------------> | |||
auto dialer 1 customer | ||||
Figure 1: Telemarketer example | 200 OK | |||
<---------------- | ||||
5.11 Multipoint Control Unit (MCU) Services | ACK | |||
In the language of IN services, SIP supports: | -----------------> | |||
Conferencing (CON) allows the user to communicate simultaneously with | BYE B Also:C | |||
multiple parties, which may also communicate among themselves. | ------------------> | |||
SIP can initiate IP multicast conferences with any number of | ||||
participants, conferences where media are mixed by a conference | ||||
bridge (multipoint control unit or MCU) and, for exceptional | ||||
applications with a small number of participants, fully-meshed | ||||
conferences, where each participant sends and receives data to | ||||
all other participants. This is described in more detail in | ||||
Sections 5.11 and 5.12. | ||||
Conference calling add-on allows a user to add and drop participants | 200 OK | |||
once the conference is active. Participants in the SIP session | <------------------ INV C ReqBy:A | |||
accomplish this by sending INVITE and BYE requests to the | ---------------------> | |||
parties to be added and dropped. If A wants B to drop out of a | ||||
conference, it sends a BYE request with " Replaces: *". | ||||
Conference calling meet-me (MMC) allows the user to set up a | 200 OK | |||
conference or multi-party call, indicating the date, time, | <--------------------- | |||
conference duration, conference media and other parameters. The | ||||
conference session description included in the SIP invitation | ||||
may indicate a time in the future. For multicast conferences, | ||||
participants do not have to connect using SIP at the actual time | ||||
of the conference; instead, they simply subscribe to the | ||||
multicast addresses listed in the announcement. For MCU-based | ||||
conferences, the session description may contain the address of | ||||
the MCU to be called at the time of the conference. | ||||
Some conferences use a multipoint control unit (MCU) to mix, convert | ACK | |||
and replicate media streams. While this solution has scaling | ---------------------> | |||
problems, it is widely deployed in traditional telephony and ISDN | ||||
conferencing settings, as so-called conference bridges. In a MCU- | ||||
based conference, the conference initiator or any authorized member | ||||
invites a new participant and indicates the address of the MCU in the | ||||
Also header. The invitee then contacts the MCU using the same session | ||||
description and requests to be added to the call, just like a normal | ||||
two-party call. | ||||
Parties inviting others to a conference do not have to know that the | Figure 2: Transfer Message Flow | |||
conference media is managed by an MCU. The inviting party A treats | ||||
the MCU M like another participant and includes it in the Also list. | ||||
The newly invited participant B invites the MCU, which in turn sends | ||||
a Replaces header with all participants. (See example in Section | ||||
3.5). Figure 2 shows the transition from a fully-meshed conference | ||||
(see below) to an MCU-based conference. | ||||
MCU MCU -----------, | In the example, C acts on the untriggered INVITE, and sends a | |||
1 ^ 2 | | triggered INVITE to B. B responds with a 200 OK, also alerting it to | |||
Also:B / Replace:A | | D's new presence in the call. D, acting on its untriggered INVITE, | |||
/ | | sends a triggered INVITE to A, and learns about C. Now, both C and D | |||
/ 3 V | | know about each other. In the example, C sends the INVITE to D first. | |||
A........B A.<xxxxx.B | | It is possible in other cases for D to send the INVITE to C first, or | |||
: : : : : ^ : ^ | | for both INVITEs cross each other on the wire (in this case, both | |||
: : : : : x : x 4| Replace: A,B | sides back off with a 500 and a Retry-After, so that eventually one | |||
: :: : : 6 x: x 5 | | invitation reaches the other side without an invite in transit in the | |||
: :: : : :x x | | other direction). | |||
: : : : : : x x | | ||||
: : : : : : x x | | ||||
D........C D........C <------' | ||||
----> INVITE | Having received an INVITE from C, D doesn't bother to INVITE C. Both | |||
xxxx> BYE | D and C then OK their respective INVITEs. | |||
Figure 2: Transition from fully-meshed to MCU-based conference | 8.4 Party leaves during add party | |||
Operator-assisted dial-out: The operator calls each participant, and | In this example (Figure 5), a three party call is in place between A, | |||
simply indicates the MCU in the Also list. The Call-ID and/or | ||||
the address used by the operator serves as the identifier to the | ||||
MCU. For example: | ||||
O -> A: INVITE A SIP/2.0 | A B C | |||
From: O | ||||
Also: conference176@M | ||||
A -> M: INVITE conference176@M | INV C Also:B | |||
Requested-By: O | ----------------------------------> | |||
INV B Also:C ReqBy:A | ||||
<------------------- | ||||
200 OK | ||||
--------------------> | ||||
ACK | ||||
<-------------------- | ||||
200 OK | ||||
<----------------------------------- | ||||
ACK | ||||
-----------------------------------> | ||||
Meet-me: The leader and participants dial into their conference at | Figure 3: Add Party Message Flow | |||
the scheduled time with an assigned conference identifier and | ||||
security code. | ||||
A -> M: INVITE conference189@M | B and C. A adds another user, D, and shortly thereafer, C leaves the | |||
From: A | call. | |||
5.12 Fully-Meshed Conferences | Since D learns from B that C has left the call, D does not bother to | |||
For very small conferences, such as adding a third party to a two- | contact C, and responds right away to the add party. The result is | |||
party call, multicast may not always be appropriate or available. | now a three party call with A,B, and D. | |||
Instead, when inviting a new participant, the caller asks the new | ||||
member to call the remaining members. The Call-ID for all | ||||
participants is the same. | ||||
6 Acknowledgements | 9 A note on multicast media | |||
Parameters of the terminal negotiation mechanism in the Location | Another useful service, which we have not discussed so far, is to | |||
header were influenced by Scott Petrack's CMA design. | transition a conference from distributing media through multi-unicast | |||
to distribution through multicast. In fact, this is not a SIP issue | ||||
at all. However, we discuss it here for completeness. | ||||
7 Bibliography | Assume a call between A, B, and C. Media is being distributed through | |||
multi-unicast. At some point, A decides its appropriate to transition | ||||
to multicast. It should send a re-INVITE to B and C, containing an | ||||
updated SDP with a multicast group (allocated by A by some means, | ||||
perhaps MADCAP [5]. If the transition to multicast is acceptable, | ||||
both B and C respond with a 200 OK. No SDP is needed in the response, | ||||
as per [2]. | ||||
If B and C decide to switch to multicast, it is in their interest | ||||
(but not required) to send a re-INVITE to the other participants they | ||||
A B C D | ||||
INV C Also:B | ||||
----------------------------------> | ||||
INV D Also:A | ||||
---------------------------------> | ||||
INV B Also:A ReqBy:A | ||||
<---------------- | ||||
200 OK Also:D | ||||
-----------------> | ||||
INV A Also:A,B | ||||
<-------------------------------------------------- | ||||
200 OK Also:C | ||||
---------------------------------------------------> | ||||
INV D Also:A,B ReqBy:B | ||||
------------------> | ||||
200 OK | ||||
<------------------ | ||||
ACK | ||||
-------------------> | ||||
200 OK | ||||
<----------------------------------- | ||||
ACK | ||||
-----------------------------------> | ||||
200 OK | ||||
<----------------- | ||||
ACK | ||||
------------------> | ||||
Figure 4: Add Party During Add Party Message Flow | ||||
know about, containing the SDP describing the multicast session. The | ||||
result is that some or all of the sessions on the call-legs | ||||
transition to multicast. If not all have transitioned, the user may | ||||
still need to send some packets unicast. | ||||
There is no capability for determining the codec parameters for the | ||||
multicast session based on the intersection of the capabilities of | ||||
each participant. The model for multicast media distribution in a | ||||
tightly coupled conference is identical to that for loosely coupled | ||||
sessions. The initiator of the multicast session chooses a codec, and | ||||
that is what is used. Note, however, that in the case where the | ||||
A B C D | ||||
INV D Also:B,C | ||||
--------------------------------------------------> | ||||
BYE B | ||||
<----------------- | ||||
BYE A | ||||
<-------------------------------- | ||||
200 OK | ||||
-----------------> | ||||
200 OK | ||||
--------------------------------> | ||||
INV B Also:A,B,C ReqBy:A | ||||
<----------------------------------- | ||||
200 OK Also:C;status=inactive | ||||
-----------------------------------> | ||||
ACK | ||||
<----------------------------------- | ||||
200 OK | ||||
<-------------------------------------------------- | ||||
ACK | ||||
--------------------------------------------------> | ||||
Figure 5: Party Leaves During Add Message Flow | ||||
sessions start as multi-unicast, the originator will know the | ||||
capabilities of all the other parties, and thus can intelligently | ||||
choose the codecs for the session. | ||||
10 Security Considerations | ||||
Security issues are addressed throughout this document. | ||||
The call control mechanisms have serious security issues. An INVITE | ||||
with an Also cause the recipient to add or drop other parties, | ||||
possibly without user interaction. This implies that authorization of | ||||
the requests is critical. | ||||
11 Open Issues | ||||
There are many, many open issues: | ||||
1. How to do this with shared secrets rather than public keys? | ||||
2. If the transferred-to party in a transfer accepts some, but | ||||
not all (or rejects some, but not all) of the INVITEs for | ||||
it, we end up with a partially disconnected conference. | ||||
3. Should we use a session timer to refresh things and | ||||
periodically re-flood the participant list, in an attempt | ||||
to keep things synchronized? | ||||
4. The version/status concept is still very vague. Does it | ||||
work? Is it needed? | ||||
5. Conference out of consultation for multi-party calls - not | ||||
clear the Replaces mechanism works here. | ||||
12 Acknowledgements | ||||
The authors would like to especially thank Jonathan Lennox for his | ||||
many insightful comments and contributions to this work. | ||||
13 Bibliography | ||||
[1] S. Bradner, "Key words for use in RFCs to indicate requirement | [1] S. Bradner, "Key words for use in RFCs to indicate requirement | |||
levels," RFC 2119, Internet Engineering Task Force, Mar. 1997. | levels," Request for Comments (Best Current Practice) 2119, Internet | |||
Engineering Task Force, Mar. 1997. | ||||
[2] M. Handley, H. Schulzrinne, and E. Schooler, "SIP: Session | [2] M. Handley, H. Schulzrinne, E. Schooler, and J. Rosenberg, "SIP: | |||
initiation protocol," Internet Draft, Internet Engineering Task | session initiation protocol," Request for Comments (Proposed | |||
Force, Nov. 1997. Work in progress. | Standard) 2543, Internet Engineering Task Force, Mar. 1999. | |||
[3] M. Handley and V. Jacobson, "SDP: Session description protocol," | [3] H. Schulzrinne, S. Casner, R. Frederick, and V. Jacobson, "RTP: a | |||
Internet Draft, Internet Engineering Task Force, Mar. 1997. Work in | transport protocol for real-time applications," Request for Comments | |||
progress. | (Proposed Standard) 1889, Internet Engineering Task Force, Jan. 1996. | |||
[4] International Telecommunication Union, "Integrated services | [4] C. Elliott, "A 'sticky' conference control protocol," vol. 5, pp. | |||
digital network (ISDN) service capabilities -- definition of | 97--119, 1994. | |||
supplementary services," Recommendation I.250, Telecommunication | ||||
Standardization Sector of ITU, Geneva, Switzerland, 1993. | ||||
[5] International Telecommunication Union, "General recommendations | [5] S. Hanna, B. Patel, and M. Shah, "Multicast address dynamic | |||
on telephone switching and signaling -- intelligent network: | client allocation protocol (MADCAP)," Internet Draft, Internet | |||
Introduction to intelligent network capability set 1," Recommendation | Engineering Task Force, May 1999. Work in progress. | |||
Q.1211, Telecommunication Standardization Sector of ITU, Geneva, | ||||
Switzerland, Mar. 1993. | Full Copyright Statement | |||
Copyright (c) The Internet Society (1999). All Rights Reserved. | ||||
This document and translations of it may be copied and furnished to | ||||
others, and derivative works that comment on or otherwise explain it | ||||
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. | ||||
The limited permissions granted above are perpetual and will not be | ||||
revoked by the Internet Society or its successors or assigns. | ||||
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. | ||||
Table of Contents | Table of Contents | |||
1 Terminology ......................................... 1 | 1 Terminology ......................................... 1 | |||
2 Introduction ........................................ 1 | 2 Introduction ........................................ 2 | |||
3 Headers ............................................. 2 | 3 Services ............................................ 2 | |||
3.1 Accept-Location .................................... 2 | 3.1 Blind Transfer ...................................... 3 | |||
3.2 Also ............................................... 2 | 3.2 Transfer and Hold ................................... 4 | |||
3.3 Call-Disposition ................................... 4 | 3.3 Transfer with Consultation .......................... 5 | |||
3.4 Location ........................................... 5 | 3.4 Multi-party Conferencing ............................ 6 | |||
3.5 Replaces ........................................... 7 | 3.4.1 Loosely Coupled Multicast Conference ................ 6 | |||
3.6 Requested-By ....................................... 8 | 3.4.2 Distributed Full Mesh ............................... 7 | |||
4 Status Code Definitions ............................. 8 | 3.4.3 Dial-in Bridge ...................................... 8 | |||
4.1 181 Queued .......................................... 8 | 3.4.4 Ad-hoc Bridge ....................................... 9 | |||
5 ISDN and Intelligent Network Services ............... 8 | 3.4.5 Conference out of Consultation ...................... 10 | |||
5.1 Call Redirection and "Number"-Translation Services | 4 Discussion of Implementation Options ................ 11 | |||
................................................................ 9 | 4.1 Transfer ............................................ 11 | |||
5.2 Camp-on ............................................. 10 | 4.2 Full mesh conferences ............................... 12 | |||
5.3 Call Screening ...................................... 10 | 4.2.1 Approach I: Caretaker ............................... 13 | |||
5.4 Directed Call Pickup ................................ 11 | 4.2.2 Approach II: Flooding ............................... 13 | |||
5.5 Directed Call Pickup with Barge-In .................. 11 | 4.3 Dial-up Bridges ..................................... 15 | |||
5.6 Outgoing Call Routing ............................... 11 | 4.4 Conference out of Consultation ...................... 17 | |||
5.7 End-System Services ................................. 11 | 4.5 Ad-hoc conference bridging .......................... 17 | |||
5.8 Billing Features .................................... 12 | 4.6 Transfers to Multiparty Conferences ................. 18 | |||
5.9 User-to-User Signaling .............................. 13 | 5 Header Syntax ....................................... 19 | |||
5.10 Operator Services ................................... 13 | 5.1 Also ................................................ 19 | |||
5.11 Multipoint Control Unit (MCU) Services .............. 13 | 5.2 Replaces ............................................ 20 | |||
5.12 Fully-Meshed Conferences ............................ 15 | 5.3 Requested-By ........................................ 20 | |||
6 Acknowledgements .................................... 16 | 6 Also and Requested-By Header Semantics .............. 20 | |||
7 Bibliography ........................................ 16 | 6.1 Sending an Untriggered INVITE ....................... 20 | |||
6.2 Receiving an Untriggered INVITE ..................... 22 | ||||
6.2.1 New Call ............................................ 22 | ||||
6.2.2 Existing Call ....................................... 24 | ||||
6.3 Receiving a Triggered INVITE ........................ 24 | ||||
6.3.1 New Call ............................................ 24 | ||||
6.3.2 Existing Call ....................................... 25 | ||||
6.4 Sending an untriggered BYE .......................... 26 | ||||
6.5 Receiving an untriggered BYE ........................ 26 | ||||
6.6 Receiving a triggered BYE ........................... 26 | ||||
7 Replaces header semantics ........................... 26 | ||||
8 Example Call Flows .................................. 27 | ||||
8.1 Basic Transfer ...................................... 27 | ||||
8.2 Basic Add Party ..................................... 27 | ||||
8.3 Add Party during Add Party .......................... 27 | ||||
8.4 Party leaves during add party ....................... 28 | ||||
9 A note on multicast media ........................... 29 | ||||
10 Security Considerations ............................. 31 | ||||
11 Open Issues ......................................... 31 | ||||
12 Acknowledgements .................................... 32 | ||||
13 Bibliography ........................................ 32 | ||||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |