Internet DRAFT - draft-bhatia-3pcc-refer
draft-bhatia-3pcc-refer
M. Bhatia
Internet-Draft NexTone Communications
draft-bhatia-3pcc-refer-01.txt
Oct 16, 2001
Expires: Feb 15, 2002
3pcc using the REFER method
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This Internet-Draft will expire on [Feb 15, 2002].
Abstract
This document defines a method for third party call control using
the REFER method. The usage of Session Initiation Protocol SIP [3]
for third party call control is discused in [1], and the REFER
method is defined in [2].
1. Introduction
The application and description of third party call control, and
how the Session Initiation Protocol (SIP) [3] can be used to
provide such an application is discussed in [1]. Using the call
flows defined in [1] we can use SIP without any new extensions.
In this document, we present an alternate mechanism to do the
same applications using the REFER method, which is a SIP extension
defined in [2]. There are advantages of using this approach over the
approach described in [1], in terms of reduced complexity.
2. Definitions
controller: the entity which sets up a call relationship
between two parties. This has the same meaning as in
[1].
A, B: Peers of the controller in a call setup using third
party call call control. A will be understood to be on
leg 1 of the call, which is set up first and B to be
on the leg 2 of the call which is bridged with leg 1
subsequently.
2. Overview of approach specified in [1]
[1] specifies two call flows to solve the 3pcc problem. They are
referred as "First Attempt" and "Third Flow". In this document we
will refer to them as [1].f1, and [1].f2. [1].f1 is the simpler of
the two and is advisable to use only if the controller knows that B
will accept the call immediately. [1].f2 is the more general call
flow guaranteed to work in most of the cases. However, in certain
situations, an alternate solution may be desired:
1. [1].f2 requires the controller to go back and
forth between two call legs, in order to set up the call. In terms
of information transfer, the application is really simple, but is
complicated because of the following requirements of RFC 2543:
(a) An ACK must immediately be sent following a 200 OK to an
INVITE, otherwise we have problems of retransmission and
timeouts.
(b) After a re-INVITE, a UA may change the SDP it has been
using for the call, in its response . This can result in an
infinite loop of re-INVITES.
(c) A UA may respond to a media "on-hold" with a media
"on-hold", which results in a "deadlock".
[1].f2 does no consider the fact that after receiving
an ACK with held media, the UA may also decide to send a re-INVITE
with held media. This can be handled by the controller, but does
cause an extra complication in the call flows. The controller also
has to perform SDP manipulations, where it has to replace SDP with
held SDP.
2. Both [1].f1 and [1].f2 depend on using INVITE with no
SDP. Even though support for this will increase with time, some SIP
devices, like the IWF (SIP/H.323 Interworking) gateways exhibit an
interoperability problem when INVITE without SDP is used in the
beginning of a call.
3. Problem definition
In order to find another approach lets look at what is the problem
that [1] attempts to solve.
3.1 How does INVITE without SDP help ?
An INVITE without SDP solves several problems for the
controller. First, the controller need not assume anything about
the media or the ports the call is going to use. In essence the
controller is asking A (recepient) to make the call to it. The last
two steps (OK and ACK) of this kind of a transaction are similar in
terms of information flow to the first two steps of a regular
transaction (INVITE and OK). Also, in this case A need
not know the ultimate destination of the call, which may be useful
in some applications, where A might get connected to an
intermediate entity like a media server.
However there is one drawback of using the INVITE without
SDP. The controller has to immediately respond with an ACK to the
200 OK from A, and the ACK must have SDP in it. In some
situations, the controller inserts the held SDP in the
response. This creates an artificial situation, where A thinks its
being put on hold. This problem never arises when INVITE no SDP is
used in the middle of the call, as it is basically [1].f1 (without
any of its retransmission problems).
3.3 Problem goal:
What do we need ?
(a) Need a mechanism by which we can trigger A to
initiate the call to the controller.
(b) In response to the A's triggering of the call, the
controller should not have to send the final response
immediately.
(c) This call which A initiates must pass through the
controller.
(d) Controller must be able to identify the incoming call from
A in the right context. ie., it should be able to distinguish
the call from a regular call made by A to the controller.
(e) The mechanism the controller employs to trigger
A into making the call should be usable in an
independent call leg as well as in an already established call
leg.
4.0 Using the REFER method to solve the problem.
The usage of REFER, as explained in [2] satisfies (a) and
(e). Condition (c) is achieved by putting the right SIP request URI
in the Refer-To header. (d) is achieved by putting a "Replaces"
header in the Refer-To header. When A sends the INVITE
to the controller, the controller has an option of generating a
"100 Trying" response (meanwhile it is proxying the INVITE to the
desired destination, B). This satisfies (c).
4.1 Support required for using the REFER method:
Clearly, the controller and the UA must support the REFER method,
and the "Replaces" header. If the REFER is sent on an independent
call leg, the controller must create a call state before
sending the "Replaces" header to A. This allows the controller to
put the call from A in the right context.
4.2 Using the body of SIP REFER message
[2] indicates on the inclusion of a message body in a REFER
method. No meaning to that body is however assigned. In this
document we will assign the following meaning to the body, if its
present in the REFER method:
Body of the REFER method, if present, will indicate what B
intends to use as SDP for the resulting call. It however gives no
assurance that B will actually respond with that SDP when
A initiates the call to it. It is meant solely as an advisory
function, and may be used by A or any intermediate proxy sitting
between A and the controller.
5. Call Flows
5.1 Basic 3pcc call flow from [1]
A Controller B
| | |
| create callid1 |
| REFER callid1 | |
|<------------------| |
| | |
| 202 Accepted | |
|------------------>| |
| | |
|INVITE callid1 SDPA| |
|------------------>| |
| | |
| | INVITE SDP A |
| |----------------->|
| | |
| | 200 SDP B |
| |<-----------------|
| | |
| 200 SDP B | |
|<------------------| |
| | |
| ACK | |
|------------------>| |
| | |
| | ACK |
| |----------------->|
| | |
| | RTP |
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
In this scenario, the controller has no ongoing calls with A and B
in the beginning. It creates a local context for callid1. This
context MUST contain a SIP call id, and MAY contain from and to
tags locally generated at the controller. At this point the
controller sends a REFER with the Replaces callid1 header to A. If
A is interested in the call, it sends a 202 Accepted back to the
controller. At this point the controller starts a timer,
"timer-callid1", on callid1 for TC seconds. (TC is an application
specific timer, which should at least take into account the
retransmissions from A. ~10*T2 seconds is probably a good value).
When the INVITE arrives from A with the Replaces callid1 header,
the timer is cancelled, the INVITE is forwarded to B. At this point
the controller may act as a Back to Back user agent or a proxy for
the call duration, depending on the kind of application running on
the controller. The 200 OK from B arrives and is forwared to
A. This way the controller does not need to assume anything about
what SDP will be used for the call.
1. Controller creates SIP call leg 1 (Call id=12345%40192.168.118.3;
to-tag=12345;from-tag=5FFE-3994), and sends a REFER to A:
REFER sip:A@agentland SIP/2.0
Via: SIP/2.0/UDP controller.nextone.net
To: <sip:A@agentland>
From: <sip:B@controller.nextone.net>;tag=193402342
Call-ID: 898234234@controller.nextone.net
CSeq: 93809823 REFER
Refer-To: <sip:B@controller@nextone.net?Replaces:12345%40192.168.118.3;
to-tag=12345;from-tag=5FFE-3994>
Referred-By: <sip:B@controller.nextone.net>
Contact: sip:B@controller.nextone.net
Content-Length: 0
Note the presence of the To tag, even though the INVITE is
being sent by A. The Controller may or may not put the To tag.
2. B sends a 202 Accepted to the Controller.
3. B sends an INVITE to the Controller
INVITE <sip:B@controller@nextone.net?Replaces:12345%40192.168.118.3;
to-tag=12345;from-tag=5FFE-3994> SIP/2.0
Via: SIP/2.0/UDP sip:A@agentland
From: A <sip:A@agentland>;tag=3pcc
To: B <B@controller@nextone.net>
Call-ID: 31415@agentland
CSeq: 1 INVITE
Contact: A@agentland
This INVITE specifies the context in the Replaces header, and
now the controller forwards it to B. It also sends a Trying
message to A. The responses from B are now sent back to A. In
other words, after Step 3, the controller acts as a proxy.
5.2 Mid call 3pcc
The same mechanism can be used in the middle of a call. This is the
scenario when the controller already has a call up with A. The only
change in this case is that the REFER is sent on the existing call
leg. The call flows in this case are similar to the call transfer
call flows given the sip-call-transfer draft. In this case A sends
a NOTIFY back to the controller, containing the status of the
REFER, and the controller disconnects the old call with A by
sending a BYE to it.
A Controller B
| | |
| | |
| REFER callid1 | |
|<------------------| |
| | |
| 202 Accepted | |
|------------------>| |
| | |
|INVITE callid1 SDPA| |
|------------------>| |
| | |
| | INVITE SDP A |
| |----------------->|
| | |
| | 200 SDP B |
| |<-----------------|
| | |
| 200 SDP B | |
|<------------------| |
| | |
| ACK | |
|------------------>| |
| | |
| | ACK |
| |----------------->|
| NOTIFY (200 OK) | |
|------------------>| |
| | |
| 200 OK | |
|<------------------| |
| | |
| BYE | |
|<------------------| |
| | |
| | RTP |
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
6. Security Considerations
The security considerations of the REFER method specified in [2]
dictate these scenarios. However as the REFER is sent by the
controller to A, which results in a call coming in back to the
controller, a lot of considerations mentioned in [2] will not apply
here. For example, there is no need ever to reveal the identity of
B. Also the controller is a trusted entity, which additionally
simplifies security logic running on A.
7. References
[1] Rosenberg/Peterson/Schulzrinne/Camarillo, Internet Draft,
Internet Engineering Task Force, Mar 2002. Work in progress.
[2] Sparks, R. "The Refer Method", Internet Draft, Internet
Engineering Task Force, Sep 2001. Work in progress.
[3] Handley, M., Schulzrinne, H., Schooler, E. and J. Rosenberg,
"SIP: Session Initiation Protocol", RFC 2543, March 1999.
8. Changes since -00
o Added call flow diagrams
Author's Address
Medhavi Bhatia
NexTone Communications
9700 Great Seneca Highway
Rockville, MD 20874
EMail: mbhatia@nextone.com
Expires: Feb 15, 2002 3pcc using the REFER method