<!--

Subject: [Sip] comments on draft-worley-sip-many-refers-00
X-Name: Jonathan Rosenberg 
From: Jonathan Rosenberg <jdrosen@cisco.com>
To: IETF SIP List <sip@ietf.org>
Date: Wed, 05 Jul 2006 23:07:26 -0400
DKIM-Signature: a=rsa-sha1; q=dns; l=2034; t=1152155248; x=1153019248;
	c=relaxed/simple; s=sjdkim4001;
	h=Content-Type:From:Subject:Content-Transfer-Encoding:MIME-Version;
	d=cisco.com; i=jdrosen@cisco.com;
	z=From:Jonathan=20Rosenberg=20<jdrosen@cisco.com>
	|Subject:comments=20on=20draft-worley-sip-many-refers-00;
	X=v=3Dcisco.com=3B=20h=3D/yPCriWQYgWjxdtOJ4aEyTrxpqQ=3D;
	b=gQh+t3IAr3KTuT0dOz9p5OWPg05AZUK7FwGu2GtdoS176vHTG2qAsKqlVc0t5635T6geuRxb
	saVxL80Evco8A8aSrrZOl1gztBiYehzVF1Wp7qNtceabb2tfLp/4I3jC;
Authentication-Results: sj-dkim-4.cisco.com; header.From=jdrosen@cisco.com;
	dkim=pass ( sig from cisco.com verified; ); 
X-Scan-Signature: 7baded97d9887f7a0c7e8a33c2e3ea1b

Dale,

Thanks for taking a stab at this. The 'hidden semantic' behind REFER is 
a looming potential problem that I don't think we've fully captured. 
Your draft takes a good step towards uncovering it, but I don't think it 
quite gets there.

In particular, the Summary section of the draft is where you actually 
show the differences between the various usages. None of the 'Actions' 
in the table demonstrate the UA having to do something that is 
usage-specific and not directly inferred from the request itself. That, 
to me, is the sign of trouble - that a UA has to manipulate some kind of 
other state, or take some kind of other action, as a side effect of 
REFER, and that other action or state change depends on the usage. Thus, 
at the moment, your draft doesn't seem to point out that there are any 
problems with the REFER mechanism.

One possible place this side-effect issue might show up is in the UI of 
a phone device. Without a doubt, its a better experience for a user to 
get asked, "Joe wants to transfer you to Bob, proceed?" than "You have 
received a REFER with Refer-To of sip:bob@example.com, proceed?", and 
this would seem to require the device to know that the reason for the 
REFER is a transfer. You might want to look at these kinds of UI issues 
across the different usages.

You call out a transfer #1 use case in which the transferee has to send 
a BYE after the transfer. However, this is not the case AFAIK. In none 
of the transfer flows does the transferee need to send a BYE; its the 
entity doing the transfer (which obviously knows its transferring) that 
needs to do a BYE after the REFER for the INVITE succeeds.

Thanks,
Jonathan R.
-- 
Jonathan D. Rosenberg, Ph.D.                   600 Lanidex Plaza
Cisco Fellow                                   Parsippany, NJ 07054-2711
Cisco Systems
jdrosen@cisco.com                              FAX:   (973) 952-5050
http://www.jdrosen.net                         PHONE: (973) 952-5000
http://www.cisco.com

_______________________________________________
Sip mailing list  https://www1.ietf.org/mailman/listinfo/sip
This list is for NEW development of the core SIP Protocol
Use sip-implementors@cs.columbia.edu for questions on current sip
Use sipping@ietf.org for new developments on the application of sip

-->

<?xml version='1.0'?>
<!DOCTYPE rfc SYSTEM 'rfcXXXX.dtd'>
<?rfc strict="yes" ?>
<?rfc toc="yes" ?>
<rfc ipr='full3978' category="info" docName='draft-worley-sip-many-refers-00'>

<front>
<title abbrev='The Five Meanings of the REFER Method'>
The Five Meanings of the REFER Method
</title>
<author initials='D. R.' surname='Worley' fullname='Dale R. Worley'>
       <organization abbrev='Ariadne'>
           Ariadne Internet Services, Inc.
       </organization>
   <address>
       <postal>
           <street>738 Main St.</street>
           <city>Waltham</city>
           <region>MA</region>
           <code>02451</code>
           <country>US</country>
       </postal>
       <phone>+1 781 647 9199</phone>
       <email>worley@ariadne.com</email>
   </address>
</author>
<date month='June' year='2006' />
<area>Transport</area>
<workgroup>SIP</workgroup>
<keyword>REFER</keyword>
<abstract>
<t>
The REFER method is defined in RFC 3515.  That RFC defines the syntax
of the REFER request and some of the machinery involved in its
execution, but it defines the semantics of the method only so far as
to specify that the recipient will initiate a request to the target
specified in the Refer-To header.
But since almost all requests that can be sent by the recipient are inherently
part of an encompassing UA action that affects the state of the
recipient in ways that are not directly reflected in SIP protocol
actions, 
the standardized action of initiating a request implicitly has further
consequences which are often not clearly specified.
As a result, various SIP call-control proposals assume that a UA
receiving a REFER will perform the UA operation that is needed at that
moment without specifying clearly how the UA recognizes which UA
operation is needed.
As a result there are now five semantically distinct defined uses of REFER.
All five uses bear a family resemblance, and each involves sending a
SIP request, but the exact meaning of each use is logically
independent of the others, and the rules by which a UA  distinguishes
the five cases are at best implicit.
</t>
</abstract>
</front>

<middle>

<section title='Introduction' anchor='intro'>

<t>
The REFER method is defined in <xref target='refer-rfc'/>.
That RFC defines the syntax
of the REFER request, that its recipient is expected to "contact" the
resource designated by the Refer-To URI, and some of the machinery
involved in its
execution.
But the RFC does not specify what the request causes
the recipient to do in relationship to other SIP dialogs, its users,
etc.
This allows a SIP call-control process to assume that a REFER will
cause the UA to perform the operation that would be convenient for that
particular call-control process - an operation which would naturally
be implemented by sending the SIP request specified, but unfortunately,
the implementing SIP request does not uniquely determine the UA operation.
As a result, there are now five defined uses of REFER.
All five uses bear a family resemblance, but the exact meaning of each
use is logically independent of the others.
</t>

<t>
The purpose of this document is to enumerate all semantically distinct
uses of REFER, expose the logic that is used to determine
which use is
implied by any particular REFER request, and to make people aware of
the need to clearly specify any additional uses they desire to create.
The reader is expected to be familiar with the machinery of the REFER
request as described in <xref target='refer-rfc'/>.
</t>

</section>

<section title='The Meanings'>

<section title='Remote Dial' anchor='remote'>

<t>
The simplest application of REFER can be called "remote dial" <xref
target='cc-framework'/>.  In this usage, a REFER is sent out-of-dialog
to a recipient UA.  The recipient UA sends a dialog-initiating INVITE
to the Refer-To URI,
to establish a dialog for its user.
</t>

<t>
At first sight, this use may appear unlikely in practice, but sending
such a REFER to a UA can
be used to induce it to join a conference <xref
target='conference'/>.  (That is feasible because each conference has
a unique "conference URI".)
Similarly, a remote dial REFER can be sent to a conference focus to
induce it to send an INVITE to a UA that one wishes to have join the
conference.
This is a natural way to implement "click-to-dial" functionality.
</t>

</section>

<section title='Transfer' anchor='transfer'>

<t>
The most popular use of REFER is for transferring calls <xref
target='cc-transfer'/>.
From a user perspective, there are several different kinds of call transfer,
but in all cases, the crucial step is performed by a REFER request.
Using the terminology of <xref target='cc-transfer'/>, there is an
existing dialog between Transferor and Transferee.  Transferor wants
to terminate that dialog, changing Transferee's focus from
the existing dialog to a new dialog with Transfer Target.
</t>

<t>
This action is done by Transferor sending a REFER in the existing dialog
to Transferee.  Transferee sends a dialog-initiating INVITE to
Transfer Target.  If and when the INVITE receives a successful
response, Transferee terminates the original dialog and changes its
focus to the new dialog.
</t>

</section>

<section title='Third-Party Conference Departure' anchor='bye'>

<t>
Another envisioned use of REFER is to delete a third party from a
conference <xref target='cc-conferencing'/>.  In this use, the executor
sends a REFER with a Refer-To containing the header parameter
"method=BYE" to a conference focus, causing it to send a BYE to the
participant.
</t>

<t>
In this use of REFER, the recipient UA is requested to insert a BYE request
into an existing dialog, rather than sending an out-of-dialog request.
The dialog in question is implicitly identified by the Refer-To URI, which is
expected to be the URI of a participant in the conference.  Of course,
this requires that there be only one participant in the conference
that entered using that URI.
</t>

</section>

<section title='Remote Hangup' anchor='hangup'>

<t>
REFER can also be used more generally to terminate a dialog by
causing one UA in the dialog to send a BYE request.  The dialog to be
terminated is specified by using Call-ID, To, and From header
parameters in the Refer-To URI <xref target='cc-framework'/> to
specify that the BYE should be sent within the specified dialog.  The
example given in <xref target='cc-framework'/> is (after correcting
the escaping):

<figure>
<artwork>
   sip:bob@babylon.biloxi.example.com;method=BYE
     ?Call-ID=13413098
     &amp;To=%3Csip:bob%40biloxi.com%3E%3Btag%3D879738
     &amp;From=%3Csip:alice%40atlanta.example.com%3E%3Btag%3D023214
</artwork>
</figure>
</t>

<t>
Beware that using header parameters to specify Call-ID and From
headers contravenes section 19.1.5 of RFC 3261 <xref target='sip'/>.
We interpret this contradiction to mean that the values specified must
be validated by the UA to match one of its dialogs (and that the REFER
requester is allowed to manipulate that dialog).
</t>

</section>

<section title='Remotely Induced Response' anchor='remote-response'>

<t>
The Internet-Draft <xref target='remote-cc'/> proposes a URI parameter "response"
to be used in the Refer-To URI.  Its presence indicates that the
recipient of the REFER should send a response to one of its existing early
dialogs, using the value of the "response" URI parameter as the
response code.  The
early dialog in question is identified by the Target-Dialog header in
the REFER request.</t>

<t>However, it is not clear (to this author) whether
this use of Target-Dialog is semantically compatible with the
definition given in <xref target='target-dialog'/>, which specifies
that Target-Dialog is to be used to authorize a request because "it
indicates to the recipient that the sender is aware of
an existing dialog with the recipient".
</t>

</section>

</section>

<section title='Summary' anchor='summary'>

<texttable>

<ttcol align='left'>Meaning</ttcol>
<ttcol align='left'>Distinguishing features</ttcol>
<ttcol align='left' width='30em'>Action</ttcol>

<c>Remote Dial</c>
<c>Out-of-dialog, method=INVITE</c>
<c>UA sends a dialog-initiating INVITE to Refer-To URI.</c>

<c>Transfer #1</c>
<c>In-dialog, method=INVITE</c>
<c>UA sends a dialog-initiating INVITE to Refer-To URI.  When new dialog is
confirmed, UA terminates the original dialog and transfers its focus
to the new dialog.</c>

<c>Transfer #2</c>
<c>In-dialog, method=INVITE, Replaces header parameter</c>
<c>(Same implementation as Transfer #1.)
UA sends a dialog-initiating INVITE with a Replaces header to
Refer-To URI.  When new dialog is confirmed (thus replacing the
specified dialog at the Refer-To UA), UA terminates the original
dialog and transfers its focus to the new dialog.</c>

<c>Transfer #3</c>
<c>Out-of-dialog, method=INVITE, Replaces header parameter</c>
<c>(Same implementation as Remote Dial.)
UA sends a dialog-initiating INVITE with a Replaces header to
Refer-To URI.  New dialog replaces the
specified dialog at the Refer-To UA.</c>

<c>Third-Party Conference Departure</c>
<c>recipient is conference URI, method=BYE</c>
<c>Conference focus uses Refer-To URI to look up a dialog currently in
the conference, then terminates it by sending BYE on it.</c>

<c>Remote Hangup</c>
<c>method=BYE, Call-ID, To, and From header parameters</c>
<c>UA terminates the specified dialog by sending BYE on it.</c>

<c>Remotely Induced Response </c>
<c>response URI parameter, Target-Dialog header</c>
<c>UA sends the specified response to the early dialog identified by
the Target-Dialog header.</c>

</texttable>

</section>

<section title="Security Considerations">

<t>
None.
</t>

</section>

</middle>

<back>

<references title='Informative References'>

<reference anchor='refer-rfc'>
<!-- rfc3515.txt -->
    <front>
	<title>The Session Initiation Protocol (SIP) Refer Method</title>
        <author initials='R.' surname='Sparks'><organization/></author>
	<date month='April' year='2003' />
    </front>
    <seriesInfo name='RFC' value='3515' />
    <format type='TXT'
            target='ftp://ftp.isi.edu/in-notes/rfc3515.txt' />
</reference>

<reference anchor='cc-framework'>
<!-- draft-ietf-sipping-cc-framework-06.txt -->
    <front>
	<title>A Call Control and Multi-party usage framework for the Session Initiation Protocol (SIP)</title>
        <author initials='R.' surname='Mahy'><organization/></author>
        <author initials='B.' surname='Campbell'><organization/></author>
        <author initials='R.' surname='Sparks'><organization/></author>
        <author initials='J.' surname='Rosenberg'><organization/></author>
        <author initials='D.' surname='Petrie'><organization/></author>
        <author initials='A.' surname='Johnston'><organization/></author>
	<date month='March' year='2006'/>
    </front>
    <format type='TXT'
            target='http://tools.ietf.org/html/draft-ietf-sipping-cc-framework-06.txt' />
</reference>

<reference anchor='cc-transfer'>
<!-- draft-ietf-sipping-cc-transfer-06.txt -->
    <front>
	<title>Session Initiation Protocol Call Control - Transfer</title>
        <author initials='R.' surname='Sparks'><organization/></author>
        <author initials='A.' surname='Johnston'><organization/></author>
        <author initials='D.' surname='Petrie'><organization/></author>
	<date month='March' year='2006'/>
    </front>
    <format type='TXT'
            target='http://tools.ietf.org/html/draft-ietf-sipping-cc-transfer-06.txt' />
</reference>

<reference anchor='conference'>
<!-- rfc4353.txt -->
    <front>
	<title>A Framework for Conferencing with the Session Initiation Protocol (SIP)</title>
        <author initials='J.' surname='Rosenberg'><organization/></author>
	<date month='February' year='2006' />
    </front>
    <seriesInfo name='RFC' value='4353' />
    <format type='TXT'
            target='ftp://ftp.isi.edu/in-notes/rfc4353.txt' />
</reference>

<reference anchor='cc-conferencing'>
<!-- draft-ietf-sipping-cc-conferencing-07.txt -->
    <front>
	<title>Session Initiation Protocol Call Control - Conferencing for User Agents</title>
        <author initials='A.' surname='Johnston'><organization/></author>
        <author initials='O.' surname='Levin'><organization/></author>
	<date month='June' year='2005'/>
    </front>
    <format type='TXT'
            target='http://tools.ietf.org/html/draft-ietf-sipping-cc-conferencing-07.txt' />
</reference>

<reference anchor='remote-cc'>
<!-- draft-mahy-sip-remote-cc-02.txt -->
    <front>
	<title>Remote Call Control in SIP using the REFER method and the session-oriented dialog package</title>
        <author initials='R.' surname='Mahy'><organization/></author>
        <author initials='C.' surname='Jennings'><organization/></author>
	<date month='October' year='2005'/>
    </front>
    <format type='TXT'
            target='http://tools.ietf.org/html/draft-mahy-sip-remote-cc-02.txt' />
</reference>

<reference anchor='target-dialog'>
<!-- draft-ietf-sip-target-dialog-03 -->
    <front>
	<title>Request Authorization through Dialog Identification in the Session Initiation Protocol (SIP)</title>
        <author initials='J.' surname='Rosenberg'><organization/></author>
	<date month='December' year='2005'/>
    </front>
    <format type='TXT'
            target='http://tools.ietf.org/html/draft-ietf-sip-target-dialog-03' />
</reference>

<reference anchor='sip'>
<!-- RFC 3261 -->
    <front>
	<title>SIP: Session Initiation Protocol</title>
        <author initials='J.' surname='Rosenberg'><organization/></author>
        <author initials='H.' surname='Schulzrinne'><organization/></author>
        <author initials='G.' surname='Camarillo'><organization/></author>
        <author initials='A.' surname='Johnston'><organization/></author>
        <author initials='J.' surname='Peterson'><organization/></author>
        <author initials='R.' surname='Sparks'><organization/></author>
        <author initials='M.' surname='Handley'><organization/></author>
        <author initials='E.' surname='Schooler'><organization/></author>
	<date month='June' year='2002'/>
    </front>
    <seriesInfo name='RFC' value='3261'/>
    <format type='TXT'
            target='ftp://ftp.isi.edu/in-notes/rfc3261.txt' />
</reference>

</references>

</back>

</rfc>

