<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes" ?>
<?rfc compact="yes" ?>
  <?rfc sortrefs="yes"?>
  <?rfc symrefs="yes" ?>
  <?rfc linkmailto="yes"?>
  <?rfc strict="yes"?>
  <?rfc subcompact="no"?>

<rfc ipr="trust200811" category="std" docName="draft-mdolly-sipping-push-01" obsoletes="" updates="" xml:lang="en">
  <!-- ************************************************************** -->
  <!-- The FRONT section includes the title, date, authors names and -->
  <!-- addresses, abstract etc. Some of the stuff, like TOC, expiration -->
  <!-- date and the rest are automatically generated by the conversion -->
  <!-- tools (e.g., xml2rfc) -->
  <!-- ************************************************************** -->
  <front>
    <title abbrev="Content Push Delivery over SIP">Session Initiation Protocol (SIP) Event Package for Content Push Delivery</title>
    <author initials="M." surname="Dolly" fullname="Martin Dolly">
      <organization>AT&T</organization>
      <address>
        <postal>
          <street>200 Laurel Ave</street>
          <city>Middletown, NJ</city>
          <region></region>
          <code></code>
          <country>US</country>
        </postal>
        <phone></phone>
        <email>mdolly@att.com</email>
      </address>
    </author>

    <author initials="S." surname="Loreto" fullname="Salvatore Loreto">
      <organization>Ericsson</organization>
      <address>
	<postal>
          <street>Hirsalantie 11</street>
	  <code>02420</code> 
	  <city>Jorvas</city> 
	  <country>Finland</country>
 	</postal>
	<email>salvatore.loreto@ericsson.com</email>
      </address>
    </author>

   <author initials="K" surname="Bogestam" fullname="Kent Bogestam">
       <organization></organization>
       <address>
     <postal>
           <street></street>
       <code></code>
       <city></city>
       <country> Sweden </country>
      </postal>
     <email> kent.bogestam@cumbari.com </email>
       </address>
   </author>

    <date year="2009" />
    <area>General</area>
    <keyword>I-D</keyword>
    <keyword>Internet-Draft</keyword>
    <keyword>SIP</keyword>
    <keyword>events</keyword>
    <keyword>throttle</keyword>
    <abstract>
      <t>This document specifies an event package for content push delivery protocol over
   SIP. The purpose is to allow an application on a UA to subscribe to
   updates to its own application events containing either content or
   references to the content.  This document describes how content can
   be pushed out to an application by the use of push events. A new SIP 
   event package is defined for notification of push events for content delivery.</t>
    </abstract>
  </front>
  <!-- ************************************************************** -->
  <!-- The MIDDLE section includes the actual draft contents -->
  <!-- ************************************************************** -->
  <middle>
    <!-- Introduction -->
    <section anchor="intro" title="Introduction" toc="default">
      <t>Push service are usually based on information preference expressed in
   advanced, in a sort of Publish/Subscribe model. A client might
   "subscribe" to various information "channels". Whenever new content
   is available on one of those channels the server would push that
   information out of the user.  Nowadays many applications depend on
   being able to get content delivered on by a an supporting network
   service on a scheduled and non scheduled delivery model based on the
   networks knowledge rather then a trial and error model as provided by
   a pull model. Specifically service that needs real time information
   as stock market updates or earthquake alerts relies on a working push
   model. This specification define the scenarios and requirements
   necessary to use SIP in a Push service.  In particular it shows what
   is necessary to define/extend in sip to let applications on the
   client subscribe to events in the network, how those events can be
   delivered and what type of content can be delivered by them.</t>
    </section>
    <section title="Definitions and Document Conventions" toc="default">
      <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" pageno="false" format="default">RFC 2119</xref> and indicate requirement
      levels for compliant implementations.</t>
    </section>

    <section anchor="overview" title="Overview" toc="default">
      <t>This section provides an overview of the push and how other protocols or technology solves the problem.</t>
      <section anchor="wap" title="WAP (Wireless Application Protocol) Push" toc="default">
        <t>
WAP Push is implemented in all mobile clients and the base for carring content and update applications on the mobile client e.g. MMS, location services, device management etc. A Push Initiator(PI) is the actor that holds the original content. It communicates with a Push Proxy Gateway (PPG) using the Push Access Protocol (PAP). The PPG uses the Push Over-The-Air (OTA) Protocol typically SMS to deliver the push content to the client. PAP is based on standard Internet protocols; XML is used to express the delivery instructions, and the push content can be any MIME media type. Also HTTP based delivery exists but it has not really taken off as an alternative.
        </t>
      </section>

      <!--section anchor="xmpp" title="Pub/Sub in XMPP">
        <t>

        </t>
      </section-->


      <section anchor="web" title="Web">
        <t>

        </t>
	<section anchor="ajax" title="Reversed Ajax" toc="ajax">
        <t>
This is a popular technique in the WEB environment. The client uses http and requests a web page over a TCP connection, the server returns the data as slowly as possible, trying to maintain an open connection for as long as possible.
The problem with this solution is that it requires a TCP connection to be open for each application expecting a push to be delivered at sometime in the future, this may course a resource problem in the network.
        </t>
        <!--t>
	ATOM (RFC 4287)
	</t><t>
	RSS (Web Feed)
	</t-->
      </section>

	<section anchor="bosh" title="Bidirectional-streams Over Synchronous HTTP (BOSH)" toc="bosh">
        <t>
The BOSH <xref target="BOSH"/> protocol defines a mechanism to efficiently transport arbitrary content over HTTP in both directions between a client and server. It make use of multiple synchronous HTTP request/response pairs without requiring the use of polling or asynchronous chunking. BOSH is largely used in the development of Web Applications that require both "push" and "pull" communications.
This mechanism requires only one HTTP connection to be open between the User Agent and the Server.</t>
         </section>
       </section>


    </section>

      <section anchor="Use-Case" title="Use Cases">
        <t>A Push Application  requests push events from a Push server.</t>
	<t>A Push Application  MAY request from more then one Push Server.</t>
	<t>A push server delivers content directly by imbedding small content into the notification itself or indirectly by supporting content indirection to one or more pushes clients.</t>
      </section>


      <section anchor="scenarios" title="Motivation Scenarios">
        <t>There is a need for a push content model in the SIP environment to create the possibility to support a view where the network, not the client, has the knowledge about content availability and thereby need to take the delivery decisions to push content to the client. Currently such a mechanism is missing in SIP.</t>
<t>In the mobile environment a push mechanism, WAP Push, has been very successful due to strong support for the standard gining the ability for any mobile application to take advantage of a generic push capability. In the fixed environment does such a standard not exist, instead do the market relay on different implementations of delaying the HTTP response or pure pull models. A common push model for fixed and mobile environment will benefit all parties.</t>
<t>The proposed push specification in this document allows for a Service / Content Providers to at a low cost feed content updates into an application.</t>
<t>It will also solve one of our current problem with the current need to create a new event package for each new service type something that in realty is undo able is it exists an endless number of possible services.</t>
<t>This proposal provides a push model based on SUBSRIBE / NOTIFY model, as this will provide the best model to ensure the required functionality. A push model based on MESSAGE will be to complex as it needs to meet the requirements of a push service e.g. need support of GRUU and additional subscription to a Reg-event package. Using INVITE / MSRP on the other hand will provide an overhead when the content is small or content indirection is used.</t>
<t>The proposal will cover the push delivery mechanism and how add and remove resource to the push service but not any application specific services as for example subscription.</t>
<t>This will allow for example for:</t>
	<t>
        <list style="hanging">
	<t>SIP applications to get content updates directly or indirectly without the need to implement other protocol.</t>
	<t>Non SIP application that don’t want or can’t have a TCP connection (reverse Ajax) open during the whole time the terminal is connected to the network.</t>
	</list>
	</t>
      </section>


      <section anchor="framework" title="Push Delivery Framework">
        <t>This section specifies the push delivery framework.  It provides the requirements push delivery stages and presents the associated security requirements. It supports two push delivery stages – enrollment and content delivery</t>
      </section>

      <section anchor="pushAS" title="Discovery of Push AS">
        <t>The <xref target="I-D.ietf-sipping-config-framework"/> describes how SIP User Agents can discover sources.</t>
        <t>TBD</t>
        <!--t>How to find resources in the network</t>
        <t>Forking for a generic URI?</t>
        <t>From Push Initiator out of scope?</t>
        <t>Others?</t-->
      </section>

      <section anchor="deliver" title="Push delivery stages">
        <t>The specified in this document requires an application to initiate push delivery by explicitly request and register for Push events. It also requires one or more Push Servers which provides the push data.  The processes that lead an application to obtain push content, can be explained in three stages, termed the profile delivery stages.</t>
        <t>Push Initiating:  the process by which an application initiates the push delivery, and if successful, enrolls with one or more Push servers capable of providing push content.</t>
        <t>A successful enrollment is indicated by a notification with the accepted push resources that will be delivered in the push events in the form of (contents or content indirection information). Depending on the request, this could also eventually results in a subscription to notification of profile changes.</t>
        <t>Push Content Retrieval:  the process by which a application retrieves push contents, if the push enrollment was successful.</t>
	<t>Change Notification:  the process by which an application is notified of any changes to an enrolled profile.  This may provide the application with modified profile data or content indirection information</t>
      </section>


      <section anchor="event-package" title="The “push” event package (Normative)">
        <t>The “push” Event Package defines a configuration framework, and allow for SIP applications to subscribe with a specific push event deliveries on an application server. The “push” event package specified in this document proposes and specifies an event package according to <xref target="RFC3265"/></t>
        <t>The Push Agent uses the app profile type to subscribe to content for Push Application s. The oma-app profile allows a Push Application to provide application-specific content.</t>
        <t>The oma-app profile type MUST follow the steps of Profile Enrolment and Profile Content Retrieval as defined in [SIP_UA_Prof]. Profile Enrolment is the process by which the Push Receiver Agent requests and if successful, subscribes with a Push Application corresponding to the Profile Delivery Server and the Profile Content Retrieval is the process by which an application on a device receives profile content.</t>

      <section anchor="pakage-definition" title="Event Package Definition">
        <t>This section defines a new SIP event package <xref target="RFC3265"/>.  The purpose of this event package is to send to subscribers notification of content updates to the subscribed push resources via content indirection [I-D.ietf-sip- content-indirect-mech] or directly in the body of the NOTIFY</t>
      </section>

      <section anchor="pakage-name" title="Event Package Name">
        <t>The name of this package is "push ". This value appears in the Event header field present in SUBSCRIBE and NOTIFY requests for this package as defined in <xref target="RFC3265"/>.</t>
      </section>

      <section anchor="pakage-parameters" title="Event Package Parameters">
        <t>This package defines the event-app-id, dev-cap as new parameters for the event Header. 
The "event-app-id" parameter is used to indicate the token name of the push events the user agent wishes to obtain content or URIs for and to be notified of subsequent changes.</t>
      </section>

      <section anchor="parameters" title="Event parameters">
        <t>The following table shows the use of Event header parameters in SUBSCRIBE requests for the push event package:
      <figure>
        <artwork xml:space="event-parameters" name="" type="" align="left" alt="" width="" height="">
                                        
   Event header		push
   -------------------- --------------- 
   event-app-id		mandatory
   dev-cap		optional
   extension		optional
       
       </artwork>
      </figure>
</t>
	<t>The Push Application  and the Push AS MAY support extensions to the push event. Extensions MUST be registered via IANA. The Push Application  and Push AS MUST ignore extensions that they do not support.</t>
      </section>


      <section anchor="parameters-format" title="Parameters format">
        <t>A Push Receiver or ApplicationMUST use the following format for oma-app: In the following ABNF, SEMI, , EQUAL and token are defined in <xref target="RFC3261"/>.
      <figure>
        <artwork xml:space="event-parameters" name="" type="" align="left" alt="" width="" height="">
                                        
	EVENT-APP-ID SEMI DEV-CAP 
	
	EVENT-APP-ID = “event-app-id” EQUAL event-app-id-list
	DEV-CAP = "OMA-UAProf" EQUAL quoted-string	

	event-app-id-list = DQUOTE app *("," app) DQUOTE
	app = 1*(%x21 / %x23-2B / %x2D-7E)
	DQUOTE = %x22 ;as per section 6.1 of [RFC2234]

	OMA-UAProf  = [OMA-UAProf]
       </artwork>
      </figure>
	</t>
      </section>

      <section anchor="Dev-cap" title="Dev-cap">
        <t>This parameter is useful to the Push AS to affect the content provided. In some scenarios it is desirable to provide different services based upon this parameter. e.g., feature property X in a service may work differently on two versions of the same user agent. This gives the Push Application the ability to compensate for, or take advantage of, the differences.</t>
<t>The DEV-CAP parameter is a parameter that provides an optional method of getting the device capabilities.</t>
<t>When using DEV-CAP Parameter, the "vendor", "model" and "version" parameter SHOULD not be used.</t>
<t>The DEV-CAP Parameter SHOULD use the [OMA-UAProf] reference to the device capabilities.</t>
<t>If the DEV-CAP Parameter is not available the UA SHOULD include a User-Agent header containing the model, vendor, and version of the Push Application  according to the rules and procedures of <xref target="RFC3261"/></t>
      </section>

      <section anchor="Event-app-id" title="Event-app-id">
        <t>The event-app-id parameter provides the reference for the Push Application  / AS to the requested resources.</t>
	<t>The value of a event-app-id MUST be a URI [reference].</t>
      </section>
      </section>

      <section anchor="push" title="Push AS Processing of SUBSCRIBE Requests">
        <t>A successful SUBSCRIBE request results in a NOTIFY with either profile contents or a pointer to it (via Content Indirection).  The SUBSCRIBE SHOULD be either authenticated, or transmitted over an integrity protected SIP communications channel.</t>
      </section>


      <section anchor="Enrollment" title="Push Enrollment">

      <section anchor="initiating" title="Initiation of a Push Enrollment">
        <t>To initiate Push Enrolment the Push Receiver agent sends a SIP SUBSCRIBE with the with the event header set to push.</t>
	<t>During the push Enrolment the Push Application sends a SIP SUBSCRIBE, optionally including the specific applications and versions being requested using the "event-app-id" parameter.</t>
	<t>The event-app-id parameter MAY contain one or more Application Resource Identifiers.</t>
	<t>The Push AS MUST respond with its supported Application Resource Identifiers in the event-app-id parameter of the push event in the confirming NOTIFY message.
</t>
      </section>
      <section title="The Profile Enrollment Confirmation">
        <t></t>
	<t>
The Push Application only subscribes to one application (app1), and supports UAProf. The Push AS supports app1.
       <figure>
        <artwork xml:space="" name="" type="" align="left" alt="" width="" height="">
SUBSCRIBE sip:user-aor@example.com SIP/2.0:
Event: push;resource-type=event-app-id="app1";
       dev-cap= "http://wap.company.com/UAProf/model.xml"
NOTIFY
Event: push; event-app-id =”app1”
       </artwork>
      </figure>
</t><t>
The Push Application only subscribes to one application (app1), and does not support UAProf. The Push AS supports app1.
<figure>
<artwork xml:space="" name="" type="" align="left" alt="" width="" height="">
SUBSCRIBE sip:user-aor@example.com SIP/2.0
Event: push; event-app-id =”app1”
NOTIFY
Event: push; event-app-id="app1”
       </artwork>
      </figure>
</t><t>
* The Push Application subscribes to multiple applications (app1, app2 and app3), and supports UAProf. The Push AS supports app1, app2, and app3. 
<figure>
<artwork xml:space="" name="" type="" align="left" alt="" width="" height="">
SUBSCRIBE sip:user-aor@example.com SIP/2.0
Event: push;event-app-id="app1, app2, app3";
       dev-cap= "http://wap.company.com/UAProf/model.xml"
NOTIFY
Event: push; event-app-id="app1, app2, app3”
</artwork>
      </figure>
</t><t>
* The Push Application subscribes to multiple applications (app1, app2 and app3), and does not support UAProf. The Push AS supports app1, app2.
<figure>
<artwork xml:space="" name="" type="" align="left" alt="" width="" height="">
SUBSCRIBE sip:user-aor@example.com SIP/2.0
Event: push;event-app-id=" app1, app2, app3";
NOTIFY
Event: push; event-app-id="app1, app2”
       </artwork>
      </figure>
</t>
      </section>
      <section title="Content Push">
        <t>A successful Push Enrollment may result in continuous delivery of notifications to the Push Receiver Agent.</t>
	<t>The Push Application MUST only include exactly one value referring to the targeted Application Resource Identifier in the event-app-id parameter in the NOTIFY.</t>
      </section>
      </section>


      <section title="SUBSCRIBE Bodies">
        <t>This package defines no new use of the SUBSCRIBE request body.</t>
      </section>

      <section title="Subscription Duration">
        <t>It is recommended that default subscription duration be 86400 seconds (one day).</t>
      </section>

      <section title="NOTIFY Bodies">
        <t>The Accept header of the SUBSCRIBE MUST support the MIME type message/external-body indicating support for content indirection the Push AS SHOULD use content indirection [I-D.ietf-sip-content-indirect-mech] in the NOTIFY body for providing the profiles.</t>
<t>When delivering push content via indirection the push AS MUST include the Content-ID MIME header described in [I-D.ietf-sip-content-indirect-mech] for each profile URI.  This is to avoid unnecessary download of the profiles.</t>
<t>The Content-Type MUST be specified for each URI.  For minimal interoperability, the profile delivery server MUST support the "http:" and "https:" URI schemes for content indirection.  Other URI schemes MAY also be provided in the content indirection.  However the security considerations are define for content indirection using HTTP and HTTPS.  Other protocols MAY be supported for content indirection, but are out of scope of this document.</t>
<t>The NOTIFY body MAY include the actual content itself.</t>
<t>The header of the NOTIFY MUST then include the Content-Length and Content-Type headers indicating size and type of the content.</t>
      </section>




      <section title="Deployment considerations">
        <t></t>
      <section title="Support for NATs">
        <t></t>
      </section>
      <section title="Handling of Forked Requests">
        <t>This Event package allows the creation of only one dialog as a result of an initial SUBSCRIBE request as described in section 4.4.9 of <xref target="RFC3265"/>. It does not support the creation of multiple subscriptions using forked SUBSCRIBE requests.</t>
      </section>
      <section title="Rate of Notifications">
        <t></t>
      </section>
      </section>



<section title="IANA Considerations" anchor="sec-IANA">
<t>
There are two IANA considerations associated with this document, SIPEvent Package and SIP configuration profile types.  These are outlined in the following sub-sections.
</t>

<section title="SIP Event Package">
<t>
This specification registers a new event package as defined in [RFC3265].  The following information required for this registration:
</t><t>
<figure>
<artwork xml:space="" name="" type="" align="left" alt="" width="" height="">
Package Name: push
Package or Template-Package: This is a package
Published Document: RFC XXXX 
Persons to Contact:
New event header parameters: profile-type
       </artwork>
      </figure>
</t><t>
(Note to RFC Editor: Please fill in XXXX with the RFC number of this specification)
</t><t>
The following table illustrates the additions to the IANA SIP Header
Field Parameters and Parameter Values: (Note to RFC Editor: Please
fill in XXXX with the RFC number of this specification)
</t><t>
<figure>
<artwork xml:space="" name="" type="" align="left" alt="" width="" height="">
  Predefined
Header FieldParameter Name  Values  Reference
----------------------------  ---------------------------------
Event profile-typeYes[RFCXXXX]
       </artwork>
      </figure>
</t>

</section>

</section>

<section title="Security Considerations" anchor="sec-cons">
<t>
The security considerations listed in SIP events <xref target="RFC3265"/>, which the Push mechanism extends, apply in entirety. In particular, authentication and message integrity SHOULD be applied to subscriptions with the Push extension.
</t>
</section>





  </middle>
  <!-- ************************************************************** -->
  <!-- The BACK section includes the rest of the stuff, references,   -->
  <!-- acknowledgements, authors addresIf
       the endpoint receives 5xx responses more than some threshold
       number of times in a row, it SHOULD assume the session has
       failed, and initiate tear-down via the signaling protocol.ses, etc.                      -->
  <!-- ************************************************************** -->
  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119" ?>
      <?rfc include="reference.RFC.2234" ?>
      <?rfc include="reference.RFC.3265" ?>
      <?rfc include="reference.RFC.3261" ?>

    </references>
    <references title="Informative References">
      <?rfc include="reference.I-D.ietf-sipping-config-framework"?>

<reference anchor="BOSH">
  <front>
    <title>Bidirectional-streams Over Synchronous HTTP (BOSH)</title>
    <author initials="I." surname="Paterson" fullname="Ian Paterson">
      <organization/>
      <address>
        <email>ian.paterson@clientside.co.uk</email>
      </address>
    </author>
    <author initials="D." surname="Smith" fullname="Dave Smith">
      <organization/>
      <address>
        <email>dizzyd@jabber.org</email>
      </address>
    </author>
    <author initials="P." surname="Saint-Andre" fullname="Peter Saint-Andre">
      <organization/>
      <address>
        <email>stpeter@jabber.org</email>
      </address>
    </author>
    <date day="21" month="February" year="2007"/>
  </front>
  <seriesInfo name="XSF XEP" value="0124"/>
  <format type="HTML" target="http://www.xmpp.org/extensions/xep-0124.html"/>
</reference>

    </references>
  </back>
</rfc>
