<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes" ?>
<?rfc rfcedstyle="yes" ?>
<?rfc subcompact="no" ?>
<?rfc sortrefs="no" ?>
<?rfc symrefs="yes" ?>
<rfc number="5368"
     category="std">
<front>
    <title abbrev="SIP Multiple REFER">
       Referring to Multiple Resources in the Session Initiation Protocol (SIP)
    </title>
    <author initials="G." surname="Camarillo" fullname="Gonzalo Camarillo">
      <organization>Ericsson</organization>
      <address>
	<postal>
          <street>Hirsalantie 11</street>
	  <code>02420</code> 
	  <city>Jorvas</city> 
	  <country>Finland</country>
 	</postal>
	<email>Gonzalo.Camarillo@ericsson.com</email>
      </address>
    </author>

    <author initials="A." surname="Niemi" fullname="Aki Niemi">
      <organization>Nokia</organization>
      <address>
	<postal>
          <street>P.O. Box 321</street>	   
	  <city>NOKIA GROUP</city> <region>FIN 00045</region>
	  <country>Finland</country>
 	</postal>
	<email>Aki.Niemi@nokia.com</email>
      </address>
    </author>


    <author initials="M." surname="Isomaki" fullname="Markus Isomaki">
      <organization>Nokia</organization>
      <address>
	<postal>
          <street>P.O. Box 100</street>
	  <city>NOKIA GROUP</city>  
	  <region>FIN</region>
	  <code>00045</code>
	  <country>Finland</country>
 	</postal>
	<email>markus.isomaki@nokia.com</email>
      </address>
    </author>
    <author initials="M." surname="Garcia-Martin" fullname="Miguel A. Garcia-Martin">
      <organization>Ericsson</organization>
      <address>
	<postal>
          <street>Via de los Poblados 13</street>
          <city>Madrid</city> <code>28033</code>
          <country>Spain</country>
 	</postal>
        <email>miguel.a.garcia@ericsson.com</email>
      </address>
    </author>


    <author initials="H." surname="Khartabil" fullname="Hisham Khartabil">
      <organization>Ericsson Australia</organization>
      <address>
	<email>hisham.khartabil@gmail.com</email>
	
      </address>

    </author>

    <date month="October" year="2008" />

    <keyword>SIP</keyword>
    <keyword>REFER</keyword>
    <keyword>multiple</keyword>

    <abstract>
    <t>
This document defines extensions to the SIP REFER method so that it
can be used to refer to multiple resources in a single request. These
extensions include the use of pointers to Uniform Resource Identifier
(URI) lists in the Refer-To header field and the "multiple-refer" SIP
option-tag.
    </t>
    </abstract>
</front>
<middle>

<section title="Introduction">
<t>
<xref target="RFC3261">RFC 3261 (SIP)</xref> is extended
by <xref target="RFC3515">RFC 3515</xref> with a REFER method that
allows a user agent (UA) to request a second UA to send a SIP
request to a third party.  For example, if Alice is in a call with
Bob, and decides Bob needs to talk to Carol, Alice can instruct her
SIP UA to send a REFER request to Bob's UA providing
Carol's SIP Contact information. Assuming Bob has given it permission,
Bob's UA will attempt to call Carol using that contact. That is, it
will send an INVITE request to that contact.
</t>
<t>
A number of applications need to request this second UA to
initiate transactions towards a set of destinations.  In one example,
the moderator of a conference may want the conference server to send
BYE requests to a group of participants. In another example, the same
moderator may want the conference server to INVITE a set of new
participants.
</t>
<t>
We define an extension to the REFER method so that REFER requests can
be used to refer other user agents (such as conference servers) to multiple
destinations. In addition, this mechanism uses the suppression of the
REFER method implicit subscription specified in <xref
target="RFC4488">RFC 4488</xref>.
</t>
</section>

<section title="Terminology">
<t>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14, <xref
target="RFC2119">RFC 2119</xref> and indicate requirement levels for
compliant implementations.
</t>
<t>
This document reuses the following terminology defined in <xref
target="RFC3261">RFC 3261</xref>:
</t>
<?rfc subcompact="yes" ?>
<t><list style="symbols">
  <t>User Agent (UA)</t>
  <t>User Agent Client (UAC)</t>
  <t>User Agent Server (UAS)</t>
</list></t>
<?rfc subcompact="no" ?>
<t>
This document defines the following new terms:
</t>
<t><list style="hanging">
<t hangText="REFER-Issuer:">a user agent issuing a REFER
request.</t>
<t hangText="REFER-Recipient:">an entity receiving a REFER request and
forwarding a SIP request to a number of REFER-Targets. The
REFER-Recipient is typically a network entity, such as a URI-list
server, that acts as a UAS for REFER requests and as a UAC for other
SIP requests.</t>
<t hangText="REFER-Target:">a UA of the intended final recipient of
a SIP request generated by the REFER-Recipient.</t>
</list></t>
</section>

<section title="Overview of Operation" anchor="sec-overview">
<t>
This document describes an application of <xref
target="RFC5363">URI-list services</xref>
that allows a URI-list service to receive a SIP REFER request
containing a list of targets. The URI-list service invokes the
requested SIP method to each of the targets contained in the
list. This type of URI-list service is referred to as a
REFER-Recipient throughout this document.
</t>
<t>
This document defines an extension to the SIP REFER method specified
in <xref target="RFC3515">RFC 3515</xref> that allows a SIP UAC to
include a URI list as specified in <xref target="RFC4826">RFC 4826</xref> of REFER-Targets in a
REFER request and send it to a REFER-Recipient. The REFER-Recipient
creates a new SIP request for each entry in the URI list and sends it
to each REFER-Recipient.
</t>
<t>
The URI list that contains the list of targets is used in conjunction
with <xref target="RFC5364">RFC 5364</xref> to allow the sender indicate the role (e.g., 'to', 'cc', or
anonymous) in which the REFER-Target is involved in the signalling.
</t>
<t>
We represent multiple targets of a REFER request using a
URI list as specified in <xref target="RFC4826">RFC 4826</xref>. A REFER-Issuer that wants to
refer a REFER-Recipient to a set of destinations creates a SIP REFER
request. The Refer-To header contains a pointer to a URI list, which
is included in a body part, and an option-tag in the Require header
field: "multiple-refer". This option-tag indicates the requirement to
support the functionality described in this specification.
</t>
<t>
When the REFER-Recipient receives such a request, it creates a new
request per REFER-Target and sends them, one to each REFER-Target.
</t>
<t>
This document does not provide any mechanism for REFER-Issuers to find
out about the results of a REFER request containing multiple
REFER-Targets. Furthermore, it does not provide support for the
implicit subscription mechanism that is part of the SIP REFER
method. The way REFER-Issuers are kept informed about the results of a
REFER is service specific. For example, a REFER-Issuer sending a REFER
request to invite a set of participants to a conference can discover
which participants were successfully brought into the conference by
subscribing to the conference state event package specified in <xref
target="RFC4575">RFC 4575</xref>.
</t>
</section>

<section title="The multiple-refer SIP Option-Tag" 
anchor="sec-multiple-refer">
<t>
We define a new SIP option-tag for the Require and Supported header
fields: "multiple-refer".
</t>
<t>
A user agent including the "multiple-refer" option-tag in a Supported
header field indicates compliance with this specification.
</t>
<t>
A user agent generating a REFER with a pointer to a URI list in its
Refer-To header field MUST include the "multiple-refer" option-tag in
the Require header field of the REFER.
</t>
</section>

<section title="Suppressing REFER's Implicit Subscription" 
anchor="sec-norefersub">
<t>
REFER requests with a single REFER-Target establish implicitly a
subscription to the refer event. The REFER-Issuer is informed about
the result of the transaction towards the REFER-Target through this
implicit subscription. As described in <xref target="RFC3515">RFC
3515</xref>, NOTIFY requests sent as a result of an implicit
subscription created by a REFER request contain a body of type <xref
target="RFC3420">"message/sipfrag", RFC 3420</xref>, that describes
the status of the transaction initiated by the REFER-Recipient.
</t>
<t>
In the case of a REFER-Issuer that generates a REFER with multiple
REFER-targets, the REFER-Issuer is typically already subscribed to
other event packages that can provide the information about the result
of the transactions towards the REFER-Targets. For example, a
moderator instructing a conference server to send a BYE request to a
set of participants is usually subscribed to the conference state
event package for the conference. Notifications to this event package
will keep the moderator and the rest of the subscribers informed of
the current list of conference participants.
</t>
<t>
Most of the applications using the multiple REFER technology described
in this memo do not need its implicit subscription. Consequently, a
SIP REFER-Issuer generating a REFER request with multiple
REFER-Targets SHOULD include the "norefersub" option-tag in a Require
header field and SHOULD include a Refer-Sub header field set to
"false" to indicate that no notifications about the requests should be
sent to the REFER-Issuer. The REFER-Recipient SHOULD honor the
suggestion and also include a Refer-Sub header field set to "false" in
the 200 (OK) response. The "norefersub" SIP option-tag and the
Refer-Sub header field are specified in <xref target="RFC4488">RFC
4488</xref>.
</t>

<t><list style="hanging">
  <t><xref target="RFC4488">RFC 4488</xref> indicates that a
  condition for the REFER-Issuer to include a Refer-Sub header is that
  the REFER-Issuer is sure that the REFER request will not fork.
  </t>
</list></t>

<t>
At the time of writing, there is no extension that allows to report
the status of several transactions over the implicit subscription
associated with a REFER dialog. That is the motivation for this
document to recommend the usage of the "norefersub" option-tag. If in
the future such an extension is defined, REFER-Issuers using it could
refrain from using the "norefersub" option-tag and use the new
extension instead.
</t>

</section>


<section title="URI-List Format" anchor="sec-format">

<t>
As described in <xref target="RFC5363">RFC 5363</xref>, specifications of individual URI-list services need to
specify a default format for 'recipient-list' bodies used within the
particular service.
</t>
<t>
The default format for 'recipient-list' bodies for REFER-Issuers and
REFER-Recipients is <xref target="RFC4826">RFC 4826</xref> extended with <xref
target="RFC5364">RFC 5364</xref>.
REFER-Recipients handling 'recipient-list' bodies MUST support both of
these formats. Both REFER-Issuers and REFER-Recipients MAY support
other formats.
</t>

<t>
As described in <xref
target="RFC5364">RFC 5364</xref>, each
URI can be tagged with a 'copyControl' attribute set to either "to",
"cc", or "bcc", indicating the role in which the target will get
the referred SIP request. However, depending on the target SIP method,
a 'copyControl' attribute lacks sense. For example, while a
'copyControl' attribute can be applied to INVITE requests, it does not
make sense with mid-dialog requests such as BYE requests. 
</t>
<t>
In addition to the 'copyControl' attribute, URIs can be tagged with the
'anonymize' attribute (also specified in <xref
target="RFC5364">RFC 5364</xref>) to prevent
that the REFER-Recipient discloses the target URI in a URI list.
</t>
<t>
Additionally, <xref
target="RFC5364">RFC 5364</xref> defines
a 'recipient-list-history' body that contains the list of targets.
The default format for 'recipient-list-history' bodies for conference
services is also <xref target="RFC4826">RFC 4826</xref> extended with <xref
target="RFC5364">RFC 5364</xref>.
REFER-Recipients supporting this specification MUST support both
of these formats; REFER-Targets MAY support these formats.  Both
REFER-Recipients and REFER-Targets MAY support other formats.
</t>
<t>
Nevertheless, <xref target="RFC4826">RFC 4826</xref> provides
features, such as hierarchical lists and the ability to include
entries by reference relative to the XML Configuration Access Protocol
(XCAP) root URI, that are not
needed by the multiple REFER service defined in this document.
</t>

<t>
<xref target="fig-simple-list" /> shows an example of a flat list that
follows the resource list document.
</t>
<figure anchor="fig-simple-list" title="URI list"> <artwork><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists"
           xmlns:cp="urn:ietf:params:xml:ns:copycontrol">

  <list>
    <entry uri="sip:bill@example.com" cp:copyControl="to"  />
    <entry uri="sip:joe@example.org" cp:copyControl="cc" />
    <entry uri="sip:ted@example.net" cp:copyControl="bcc" />
  </list>
</resource-lists>
]]></artwork></figure> 


</section>



<section title="Behavior of SIP REFER-Issuers" 
anchor="sec-refer-issuers">
<t>
As indicated in Sections <xref target="sec-multiple-refer" format="counter"/> and <xref
target="sec-norefersub" format="counter"/>, a SIP REFER-Issuer that creates a REFER
request with multiple REFER-Targets includes a "multiple-refer" and
"norefersub" option-tags in the Require header field and, if
appropriate, a Refer-Sub header field set to "false". The REFER-Issuer
includes the set of REFER-Targets in a recipient-list body whose
disposition type is 'recipient-list', as defined in <xref
target="RFC5363">RFC 5363</xref>. The URI-list body is
further described in <xref target="sec-format"/>.
</t>
<t>
The Refer-To header field of a REFER request with multiple
REFER-Targets MUST contain a pointer (i.e., a <xref
target="RFC2392">Content-ID Uniform Resource Locator (URL) as per RFC
2392</xref>) that points to the body part that carries the
URI list. The REFER-Issuer SHOULD NOT include any particular URI more
than once in the URI list.
</t>
<t>
<xref target="RFC4826">RFC 4826</xref> provides features, such
as hierarchical lists and the ability to include entries by reference
relative to the XCAP root URI. However, these features are not needed
by the multiple REFER service defined in this document. Therefore,
when using the default resource list document, SIP REFER-Issuers
generating REFER requests with multiple REFER-Targets SHOULD use flat
lists (i.e., no hierarchical lists) and SHOULD NOT use
&lt;entry-ref&gt; elements.
</t>

</section>

<section title="Behavior of REFER-Recipients" anchor="sec-refer-recipients">

<t>
The REFER-Recipient follows the rules in Section 2.4.2 of <xref
target="RFC3515">RFC 3515</xref> to determine the status code of the
response to the REFER.
</t>
<t>
The REFER-Recipient SHOULD not create an implicit subscription, and
SHOULD add a Refer-Sub header field set to "false" in the 200 OK
response. 
</t>
<t>
The incoming REFER request typically contains a URI-list document or
reference with the actual list of targets. If this URI list includes
resources tagged with the 'copyControl' attribute set to a value of
"to" or "cc", and if the request is appropriate for the service, e.g.,
it is not received mid-dialog, the REFER-Recipient SHOULD include a
URI list in each of the outgoing requests.  This list SHOULD be
formatted according to <xref target="RFC4826">RFC 4826</xref>
and <xref target="RFC5364">RFC 5364</xref>.  The REFER-Recipient MUST
follow the procedures specified in <xref target="RFC4826">RFC
4826</xref> with respect to handling of the 'anonymize', 'count', and
'copyControl' attributes.
</t>
<t>
Section 4 of <xref target="RFC5363">RFC 5363</xref>
discusses cases when duplicated URIs are found in a URI list.  In
order to avoid duplicated requests, REFER-Recipients MUST take those
actions specified in <xref target="RFC5363">RFC 5363</xref> into
account to avoid sending a duplicated request to the same target.
</t>
<t>
If the REFER-Recipient includes a URI list in an outgoing request, it
MUST include a <xref target="RFC2183">Content-Disposition header
field, specified in RFC 2183</xref>, with the value set to
'recipient-list-history' and a <xref target="RFC3204">'handling'
parameter, specified in RFC 3204</xref>, set to "optional".
</t>


<t>
Since the multiple REFER service does not use hierarchical lists nor
lists that include entries by reference to the XCAP root URI, a
REFER-Recipient receiving a URI list with more information than what
has been described in <xref target="sec-format"/> MAY discard all the
extra information.
</t>


<t>
The REFER-Recipient follows the rules in <xref target="RFC3515">RFC
3515</xref> to generate the necessary requests towards the
REFER-Targets, acting as if it had received a regular (no URI list)
REFER per each URI in the URI list.
</t>
</section>



<section title="Example" anchor="sec-example">
<t>
<xref target="fig-flow-refer" /> shows an example flow where a
REFER-Issuer sends a multiple-REFER request to the focus of a
conference, which acts as the REFER-Recipient. The REFER-Recipient
generates a BYE request per REFER-Target. Details for using REFER
request to remove participants from a conference are specified in
<xref target="RFC4579">RFC 4579</xref>.
</t>


<figure anchor="fig-flow-refer" title="Example flow of a REFER request
	containing multiple&nbsp;REFER&nbhy;Targets">
<artwork><![CDATA[
+--------+         +---------+    +--------+  +--------+  +--------+
| REFER  |         |  REFER  |    | REFER  |  | REFER  |  | REFER  |
| issuer |         |recipient|    |target 1|  |target 2|  |target 3|
|        |         |         |    |        |  |        |  |        |   
| Carol  |         | (focus) |    |  Bill  |  |  Joe   |  |  Ted   |
+--------+         +---------+    +--------+  +--------+  +--------+
     | 1. REFER         |             |           |           |
     | ---------------->|             |           |           |
     | 2. 202 Accepted  |             |           |           |
     |<---------------- |   3. BYE    |           |           |
     |                  | ----------->|           |           |
     |                  |   4. BYE    |           |           |
     |                  | ----------------------->|           |
     |                  |   5. BYE    |           |           |
     |                  | ----------------------------------->|
     |                  |   6. 200 OK |           |           |
     |                  |<----------- |           |           |
     |                  |   7. 200 OK |           |           |
     |                  |<----------------------- |           |
     |                  |   8. 200 OK |           |           |
     |                  |<----------------------------------- |
     |                  |             |           |           |
     |                  |             |           |           |
     |                  |             |           |           |
]]></artwork></figure> 


<t>
The REFER request (1) contains a Refer-To header field that includes a
pointer to the message body, which carries a list with the URIs of the
REFER-Targets. In this example, the URI list does not contain the
'copyControl' attribute extension. The REFER's Require header field carries
the "multiple-refer" and "norefersub" option-tags. The Request-URI is
set to a <xref target="SIP-GRUU">Globally Routable User
Agent URI (GRUU)</xref> (as a guarantee that the REFER request will
not fork). The Refer-Sub header field is set to "false" to request the
suppression of the implicit subscription.  <xref target="fig-refer" />
shows an example of this REFER request. The resource list document
contains the list of REFER-Target URIs along with the method of the
SIP request that the REFER-Recipient generates.
</t>

<figure anchor="fig-refer" title="REFER request with multiple
REFER-Targets">
<artwork><![CDATA[
REFER sip:conf-123@example.com;gruu;opaque=hha9s8d-999a  SIP/2.0 
Via: SIP/2.0/TCP client.chicago.example.com
        ;branch=z9hG4bKhjhs8ass83
Max-Forwards: 70
To: "Conference 123" <sip:conf-123@example.com>
From: Carol <sip:carol@chicago.example.com>;tag=32331
Call-ID: d432fa84b4c76e66710
CSeq: 2 REFER
Contact: <sip:carol@client.chicago.example.com>
Refer-To: <cid:cn35t8jf02@example.com>
Refer-Sub: false
Require: multiple-refer, norefersub
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Allow-Events: dialog
Accept: application/sdp, message/sipfrag
Content-Type: application/resource-lists+xml
Content-Disposition: recipient-list
Content-Length: 362
Content-ID: <cn35t8jf02@example.com>

<?xml version="1.0" encoding="UTF-8"?>
<resource-lists xmlns="urn:ietf:params:xml:ns:resource-lists"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <list>
    <entry uri="sip:bill@example.com?method=BYE" />
    <entry uri="sip:joe@example.org?method=BYE" />
    <entry uri="sip:ted@example.net?method=BYE" />
  </list>
</resource-lists>
]]></artwork></figure> 

<t>
<xref target="fig-bye" /> shows an example of the BYE request (3) that
the REFER-Recipient sends to the first REFER-Target.
</t>


<figure anchor="fig-bye" title="BYE request">
<artwork><![CDATA[
BYE sip:bill@example.com SIP/2.0
Via: SIP/2.0/TCP conference.example.com
        ;branch=z9hG4bKhjhs8assmm
Max-Forwards: 70
From: "Conference 123" <sip:conf-123@example.com>;tag=88734
To: <sip:bill@example.com>;tag=29872
Call-ID: d432fa84b4c34098s812
CSeq: 34 BYE
Content-Length: 0
]]></artwork></figure> 

</section>

<section title="Security Considerations" anchor="sec-security">
<t>
<xref target="RFC5363">RFC 5363</xref> discusses issues related to SIP
URI-list services. Given that a REFER-Recipient accepting REFER
requests with multiple REFER-targets acts as a URI-list service,
implementations of this type of server MUST follow the
security-related rules in <xref target="RFC5363">RFC 5363</xref>.  These
rules include opt-in lists and mandatory authentication and
authorization of clients.
</t>
<t>
Additionally, REFER-Recipients SHOULD only accept REFER requests
within the context of an application that the REFER-Recipient
understands (e.g., a conferencing application). This implies that
REFER-Recipients MUST NOT accept REFER requests for methods they do
not understand. The idea behind these two rules is that
REFER-Recipients are not used as dumb servers whose only function is
to fan-out random messages they do not understand.
</t>
</section>

<section title="IANA Considerations" anchor="sec-iana">
<t>
This document defines a new SIP option-tag: "multiple-refer". This
option-tag has been registered in the SIP Parameters registry.
</t>
<t>
The following row has been added to the "Option Tags" section of the
SIP Parameter Registry:
</t>

<texttable anchor="ianatable" title="Registration of the
  'multiple-refer' option-tag in SIP">
<ttcol width="25%">Name</ttcol>
<ttcol>Description</ttcol>
<ttcol width="15%" align="center">Reference</ttcol>
<c>multiple-refer</c>
<c>This option tag indicates support for REFER requests that contain a
resource list document describing multiple REFER targets.</c>
<c>[RFC&rfc.number;]</c>
</texttable>

</section>



</middle>
<back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119" ?>
      <?rfc include="reference.RFC.2183" ?>
      <?rfc include="reference.RFC.2392" ?>
      <?rfc include="reference.RFC.3204" ?>
      <?rfc include="reference.RFC.3261" ?>
      <?rfc include="reference.RFC.3420" ?>
      <?rfc include="reference.RFC.3515" ?>
      <?rfc include="reference.RFC.4488" ?>
      <?rfc include="reference.RFC.4826" ?>

<!-- draft-ietf-sipping-uri-services became
      RFC 5363 -->

<reference anchor='RFC5363'>
<front>
<title>Framework and Security Considerations for Session Initiation Protocol (SIP) URI-List Services</title>

<author initials='G' surname='Camarillo' fullname='Gonzalo Camarillo'>
    <organization />
</author>

<author initials='A' surname='Roach' fullname='Adam Roach'>
    <organization />
</author>

<date month='October' year='2008' />

</front>

<seriesInfo name='RFC' value='5363'/>

</reference>

<!-- draft-ietf-sipping-capacity-attribute became RFC 5364 -->

<reference anchor='RFC5364'>
<front>
<title>Extensible Markup Language (XML) Format Extension for Representing Copy Control Attributes in Resource Lists</title>

<author initials='M' surname='Garcia-Martin' fullname='Miguel Garcia'>
    <organization />
</author>

<author initials='G' surname='Camarillo' fullname='Gonzalo Camarillo'>
    <organization />
</author>

<date month='October' year='2008' />

</front>

<seriesInfo name='RFC' value='5364'/>

</reference>
    </references>

    <references title="Informative References">

      <?rfc include="reference.RFC.4575" ?>
      <?rfc include="reference.RFC.4579" ?>

   <!-- draft-ietf-sip-gruu became SIP-GRUU -->

<reference anchor='SIP-GRUU'>
<front>
<title>Obtaining and Using Globally Routable User Agent (UA) URIs (GRUU) in the Session Initiation Protocol (SIP)</title>

<author initials='J' surname='Rosenberg'>
    <organization />
</author>

<date month='October' year='2007' />

</front>

<seriesInfo name='Work in' value='Progress'/>

</reference>


    </references>
  </back>

</rfc>

<!--  LocalWords:  xref CDATA
 -->
