<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
  <!ENTITY rfc2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
  <!ENTITY rfc3261 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3261.xml'>
  <!ENTITY rfc3515 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3515.xml'>
  <!ENTITY rfc4488 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4488.xml'>
  <!ENTITY rfc4538 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4538.xml'>
  <!ENTITY rfc5057 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5057.xml'>
  <!ENTITY rfc5589 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5589.xml'>
  <!ENTITY rfc6665 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6665.xml'>
]>

<?rfc toc="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<?rfc sortrefs="yes" ?>
<?rfc strict="yes" ?>
<?rfc comments="yes" ?>
<?rfc inline="yes" ?>
<?rfc symrefs="yes" ?>

<rfc ipr="trust200902"  category="std" docName="draft-sparks-sipcore-refer-explicit-subscription-00">

<front>

<title abbrev="REFER Explicit Subscriptions">
Explicit Subscriptions for the REFER Method
</title>

<author initials="R." surname="Sparks" fullname="Robert Sparks" >
 <organization>Oracle</organization>
 <address>
 <postal>
 <street>7460 Warren Parkway</street>
 <street>Suite 300</street>
 <city>Frisco</city>
 <region>Texas</region>
 <code>75034</code>
 <country>US</country>
 </postal>
 <email>RjS@nostrum.com</email>
 </address>
</author>

<date day="17" month="June" year="2014"/>

<abstract>
<t>
The SIP REFER request, as defined by RFC3515, triggers an implicit SIP-Specific Event 
Notification framework subscription. Conflating the start of the subscription with handling the
REFER request makes negotiating SUBSCRIBE extensions impossible, and complicates
avoiding SIP dialog sharing. This document defines an extension to REFER to remove
the implicit subscription and replace it with an explicit one.
</t>
</abstract>

</front>

<middle>
<section anchor="conventions" title="Conventions and Definitions" >
<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 <xref target= "RFC2119"/>.
</t>
</section>

<section anchor="status" title="Status">
<t>
This version of the document is a strawman proposal of mechanism, and seeds for discussion
of that proposal. The material in this version of the document is not yet appropriate for early
implementation.
</t>
</section>

<section anchor="intro" title="Introduction">
<t>
REFER as defined by <xref target="RFC3515"/> triggers an implicit SIP-Specific Event Framework
subscription. Sending a REFER within a dialog established by an INVITE results in dialog
reuse and the associated problems described in <xref target="RFC5057"/>.
The SIP-Specific Event Notification framework definition <xref target="RFC6665"/> disallows such dialog reuse.
Call transfer, as defined in <xref target="RFC5589"/>, thus requires sending a REFER request
on a new dialog, associating it with an existing dialog using the 'Target-Dialog' mechanism defined in 
<xref target="RFC4538"/>.
</t><t>
Because there is no explicit SUBSCRIBE request, the tools for negotiating subscription details are
unavailable for REFER subscriptions. This includes negotiating subscription duration and providing
information through Event header field parameters. The use of the SIP 'Supported' and 'Require'
extension mechanisms <xref target="RFC3261"/> is complicated by the implicit subscription. Avoiding potential confusion around
whether the extension applies to handling the REFER request itself, or to the messages in the subscription
created by the REFER, or both, requires careful specification in each extension. Many existing extensions do not
provide this clarity.
</t><t>
This document proposes a strawman mechanism to remove the implicit subscription and replace it with an explicit one.
The benefits of doing so include:
</t>
<t><list style="symbols">
<t>Allowing REFER to be used within INVITE-created dialogs without creating dialog reuse.</t>
<t>Allowing standard subscription parameter negotiation.</t> 
<t>Allowing standard negotiation of SIP extensions.</t>
</list></t>
</section>

<section anchor="strawman" title="Strawman Mechanism">
<t>In this version of the draft, the mechanism is described at a high level. Future versions (if the group decides
to explore this idea further) will contain a formal specification.
</t>
<t><list>
<t>Define an option tag ('explicitsub') for use in the Require: header field of REFER requests.</t>
<t>Define a header field ('Refer-Events-At') to be included in 200 class REFER responses, containing a URL with GRUU-properties for which to subscribe to event 'refer'</t>
<t>Modify the REFER specifiation to allow accepting a new SUBSCRIBE for event 'refer'</t>
</list></t>
<t>
The authorization policy for accepting a REFER subscription is based on possession of the URL for the resource. (Any adversary capable of obtaining the URL is in a position to see any NOTIFY contents anyhow). The notifier may accept more than one subscription for the resource as long as the resource exists. The mechanics called out in RFC3515 for indicating that the resource no longer exists still apply.
</t>
</section>

<section anchor="discussion" title="Discussion Points">
<section title="Backward compatibility">
<t> A 3515 Notifier will reject an initial REFER because of the Require: option, allowing the updated Subscriber to learn that it needs to retry the REFER allowing for an implicit subsccription.</t>
<t> An updated Notifier receiving a REFER without the option tag can create an implicit subscription per 3515.</t>
</section>
<section title="Should this be a different method?">
<t>Instead of using Require:, this could be something like REFERBIS.</t>
<t>The strawman proposes no, on the weak grounds that new option tags are easier to deploy than new methods.</t>
</section>
<section title="Should this use a different event package?">
<t>The strawman proposes no.  Neither the payload of NOTIFY messages, nor the meaning of the state being subscribed to changes. </t>
</section>
<section title="Could this deprecate RFC4488?">
<t>The extension could define that a server not wishing to provide subscriptions return a URL from the .invalid family in the 'Refer-Events-At' header field (alternatively, no Refer-Events-At header field at all). That, along with the use of Require (and not Supported) from the subscriber simplifies the negotiation flows over those in <xref target="RFC4488"/> when the client does not know ahead of time if the server supports the extension. A client not interested in subscriptions can simply not subscribe.</t>
</section>
<section title="Should this tighten down what can appear in a Refer-To header field?">
<t> The strawman proposal is no. As with 3515, a REFER recipient that doesn't know what to do with a non-SIP URL (for example) can decline the REFER. </t>
</section>
</section>

<section title="Security Considerations">
<t>
If the group decides to pursue this idea, this section will need to add detail to the authorization policy mentioned above, and consider the ramifications of being asked to subscribe to a URL this way (which will be very similar to the security considerations that apply to the URI in a Refer-To header field in the first place).
</t>
</section>

<section title="IANA Considerations">
<t>
This document has no actions for IANA.
</t>
</section>

<!--
<section title="Acknowledgements">
<t>
</t>
</section>
-->

<!--
<section title="Changelog">

<t>RFC Editor - please remove this section when formatting this document as an RFC.</t>

<section title="00 to 01">
<t><list style="numbers">
<t>Stuff</t> 
</list></t>
</section>
</section>
-->

</middle>
<back>

<references title="Normative References">
&rfc2119;
&rfc3261;
&rfc3515;
&rfc4488;
&rfc4538;
&rfc5589;
&rfc6665;
</references>

<references title="Informative References">
&rfc5057;
</references>

</back>
	
</rfc>
