<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc ipr="trust200902" category="info" docName="draft-mohali-dispatch-cause-for-service-number-13.txt" submissionType="independent" updates="4458">
  <front>
    <title abbrev="Cause for service number translation">Session Initiation
    Protocol (SIP) Cause URI parameter for Service Number translation</title>

    <author fullname="Marianne Mohali" initials="M" surname="Mohali">
      <organization>Orange</organization>
      <address>
        <postal>
          <street>44 Avenue de la Republique</street>
          <code>92320</code>
          <city>Chatillon</city>
          <country>France</country>
        </postal>
        <email>marianne.mohali@orange.com</email>
      </address>
    </author>

    <author fullname="Mary Barnes" initials="M" surname="Barnes">
      <organization>MLB@Realtime Communications</organization>
      <address>
        <postal>
          <street/>
          <region>TX</region>
          <country>US</country>
        </postal>
        <email>mary.ietf.barnes@gmail.com</email>
      </address>
    </author>

    <date day="26" month="January" year="2017"/>

    <keyword>Cause</keyword>

    <abstract>
      <t>
	  RFC4458 (SIP URIs for applications) defines a "cause" URI parameter, 
	  which may appear in the Request-URI of a SIP request, that is used to 
	  indicate a reason why the request arrived to the User Agent Server (UAS)
	  receiving the message.
	  This document creates a new predefined value for the "cause" URI 
	  parameter to cover service number translation for cases of retargeting 
	  due to specific service action leading to the translation of a called 
	  service access number.
	  This document also provides guidance, which was missing in RFC4458, for 
	  using the "cause" URI parameter within the History-Info header field 
	  since this use is mandatory in some IP networks' implementations.
	  </t>
	  <t>
	  This document updates RFC4458.
	  </t>

    </abstract>
  </front>
  <middle>
    <section title="Introduction, Terminology and Overview">
      <t>
	  <xref target="RFC4458" pageno="false" format="default"/> defines a mechanism
      to identify retargeting due to call forwarding supplementary services.
      The "cause" URI parameter in the target URI identifies the reason for
      retargeting and has defined values equivalent to the TDM (Time Division
      Multiplexing) Redirecting Reasons <xref target="ITU-T_Q.763"/>. The
      concept of "retargeting" is defined in <xref target="RFC7044" pageno="false" format="default"/>.
	  </t>
	  <t>
	  In the Public Switched Telephone Network (PSTN)/ Integrated Services 
	  Digital Network (ISDN), there is another kind of retargeting introduced 
	  by the Intelligent Network (IN) services based on a translation of the 
	  called number as mentioned in <xref target="ITU-T_Q.1214"/>.
	  Indeed, IN aims to ease the introduction of new services (i.e. Universal 
	  Personal Telecommunication (UPT), Virtual Private Network (VPN), 
	  Freephone, etc.) based on greater flexibility and new capabilities as 
	  described in <xref target="ITU-T_I.312_Q.1201"/>. For these IN services,
	  ISUP introduced the "called IN number" and the "original called IN number" 
	  parameters to capture the information of the requested service access 
	  number prior its translation <xref target="ITU-T_Q.763"/>.
	  </t>
	  <t>
	  The term "service access number" is used in this specification to refer 
	  to the dialable number by which a specific service is reached. This 
	  special number is not a globally routable number and therefore needs to 
	  be translated into a routable SIP or tel URI to process the session
      establishment.
	  </t>
	  <t>
	  This specification proposes a solution to allow the identification of 
	  well-known services such as premium or toll free services that perform 
	  service access number translation, and to enable interworking with SIP 
	  signaling with the ISUP Called IN number and Original Called IN numbers 
	  parameters.
	  </t>
	  <t>
	  The mechanism will allow a SIP network to insert and convey the service 
	  access number requested prior its translation to the final destination.
	  </t>
	  <t>
	  In order to provide full call forwarding or access number translation 
	  services, usage of the "cause" URI parameter is only relevant within the 
	  History-Info header field defined in <xref target="RFC7044" pageno="false" format="default"/>. 
	  Because this relation has not been described in <xref target="RFC4458" pageno="false" format="default"/>, 
	  this document provides guidance for using the "cause" URI parameter in
	  conjunction with the History-Info header field.
	  </t>
	  <t>
	  This document also answers a need expressed by the 3rd-Generation 
	  Partnership Project (3GPP) <xref target="TS.3GPP.24.229"/> to identify 
	  the service access number. The procedures it defines are intended for 
	  networks that use 3GPP defined services. Their use is undefined for 
	  other networks.
	  </t>
    </section>

    <section title="Solution">
      <t>
	  A new value for the "cause" URI parameter of the 'sip:' or 'sips:'
      URI schemes is defined for "Service number translation" use case. This 
	  value may be used in a 'sip:' or 'sips:' URI inserted in the Request-URI
	  and in the History-Info header field <xref target="RFC7044" pageno="false" format="default"/> 
	  when the URI is issued from a retargeting or a service access number 
	  translation by a specific service similar to PSTN/ISDN IN services that 
	  is not a call forwarding service.
	  </t>
	  <t>
	  As defined in <xref target="RFC4458" pageno="false" format="default"/>, 
	  the cause URI parameter must be encoded in the new target URI when 
	  generated by the service. 
	  </t>
	  <t>
	  The ABNF grammar <xref target="RFC5234" pageno="false" format="default"/> for the
      cause-param and target-param parameters is summarized below as it has
      been subject to Errata [ID: 1409] in <xref target="RFC4458" pageno="false" format="default"/>. 
	  The Status-Code is defined in <xref target="RFC3261" pageno="false" format="default"/>.
	  </t> 
	  <t>
	  target-param = "target=" pvalue
	  </t>
	  <t>
	  cause-param = "cause=" Status-Code
	  </t>
	  <t>
	  The following value for this URI parameter is added to
      the existing ones: 
	  </t>
      <figure>
        <artwork align="center"><![CDATA[
+---------------------------------+-------+
|         Cause                   | Value |
+---------------------------------+-------+
| Service number translation      | 380   |
+---------------------------------+-------+
		]]></artwork>
      </figure>
    </section>
    <section title="Guidelines">
		<t>
		In order to help implementation of this solution for conveyance of 
		the service access number, this document proposes guidance for usage
		of the "cause" URI parameter: a guidance for the "cause" URI parameter
		usage in the request history information in section 3.1 and a guidance 
		for processing a service number translation service using the new 
		"cause" URI parameter value in section 3.2. 
		</t>
		<section title="Interaction with Request History Information">
			<t>The History-Info header field defined in <xref target="RFC7044" pageno="false" format="default"/>
			specifies a means of providing the UAS and UAC with information 
			about the retargeting of a request. This information includes the 
			initial	Request-URI and any retargeted URIs. This information is 
			placed in History-Info headers as the request is retargeted and, 
			upon reaching the UAS, is returned in certain responses. The 
			History-Info header	field enables many enhanced services by 
			providing the information as to how and why a SIP request arrives 
			at a specific application or user and to keep this information 
			throughout the signaling path even when	successive applications 
			are involved.
			</t>
			<t>
			When a proxy inserts a URI containing the "cause" URI parameter 
			defined in	<xref target="RFC4458" pageno="false" format="default"/> 
			into the Request-URI of a forwarded request, per <xref target="RFC7044" pageno="false" format="default"/>,
			the proxy must also copy this new Request-URI within a 
			History-Info header field entry into the forwarded request, and so
			the URI in that entry includes the "cause" URI parameter. 
			Therefore, even if the Request-URI is replaced as a	result of 
			rerouting by a downstream proxy, the History-Info header field 
			will still contain these parameters, which can be of use to the
			UAS. Note that if a proxy does not support generation of the
			History-Info header field or if a downstream proxy removes the
			History-Info header fields, an application will only have access 
			to the "cause" URI parameter if the request is not subsequently
			retargeted (i.e., it will be contained only in the Request-URI in 
			the	incoming request). The implications of the solution are 
			further discussed in section Section 3.2.
			</t>
			<t>
			In order to be able to filter specific entries among the history 
			information, header field parameters have been defined in <xref target="RFC7044" pageno="false" format="default"/>.
			In particular, the "mp" and "rc" header field parameters having 
			the	following definitions: The "mp" header field parameter is 
			added when the new target was determined based on a mapping to a 
			user other than	the target user associated with the Request-URI 
			being retargeted. This	allows identifying retargets that are the 
			result of a decision made by a particular type of application or 
			that an initial request has been retargeted as a result of an 
			application decision in a general manner.
			The "rc" header field parameter is added when the new target
			represents a change in Request-URI, while the target user remains 
			the	same. These header field parameters can be used in conjunction
			with the new "cause" URI parameter for certain applications, an 
			example of	which is provided in section Section 4.
			</t>
			<t>
			When using the History-Info header field in conjunction with the 
			"cause" URI parameter in a Request-URI, it is important to 
			consider that the "cause" URI parameter is not the same parameter 
			as the "cause" header field parameter included in the Reason 
			header <xref target="RFC3326" pageno="false" format="default"/>. 
			The "cause" header	field parameter of the Reason header field 
			should be added to a History-Info entry only when the retargeting 
			is due to a received SIP response.
			</t>
		</section>

		<section title="Handling and Processing the Service Number Translation &quot;cause&quot; URI parameter value">
			<t>At the Application Server:
			<list>
				<t>
				When an application receiving a request that is addressed to a
				service access number changes the Request-URI into a routable
				number, it should insert within this new Request-URI a "cause"
				URI	parameter value set to 380 "Service Number Translation". 
				Following the process described in <xref target="RFC7044" pageno="false" format="default"/>,
				the application server adds a new History-Info header field 
				entry including the new Request-URI value including the 
				"cause" URI parameter. It is also possible for an application 
				server to add a "target" URI parameter as defined in <xref target="RFC4458" pageno="false" format="default"/> 
				with the initial value of the Request-URI received by the 
				application server.
				</t>
			</list>
			</t>
			<t>
			Note that if the new Request-URI is further replaced by a 
			downstream proxy for any reason and if the History-Info header 
			field is not supported, the information of the service access 
			number initially requested would be lost. Thus, it is strongly 
			recommended to support the History-Info header field all along the
			signaling path. 
			</t>
			<t>At the UAS:</t>
			<t>
			<list>
				<t>
				When the UAS receiving the request wants to retrieve the
				service access number by which it has been reached, first it
				should look for the "cause" URI parameter value 380 in the
				History-Info header field. This History-Info entry should also
				contain an "mp" or "rc" header field parameter and then the 
				UAS	can find the requested service number in the History-Info 
				entry having an index parameter value that match this "mp" or 
				"rc" header field parameter value. If for any reason, there is
				no "mp"	or "rc" header field parameter in the identified 
				History-Info entry, the UAS can find the requested service 
				number in the preceding History-Info entry.
				</t>
			</list>
			</t>
			<t>
			If the History-Info header is not supported or has been removed by
			a proxy for any reason, the UAS might be able to find the 
			requested service access number before translation in either of 
			the following ways, but there is no guarantee:
			<list hangIndent="0" style="symbols">
				<t>
				If the UAS is the direct target of the request coming from the
				application, the UAS ought to be able to find the service 
				access	number in the "target" URI parameter of the 
				Request-URI if there is also a "cause" URI parameter set to 
				380 in this	Request-URI.
				</t>
				<t>
				If there is no "cause" URI parameter set to 380 in the 
				Request-URI	and there is no History-Info header field, the UAS
				will not be	able to reliably retrieve the service access 
				number before translation. Some existing implementations are 
				known to extract the number from the "To" header field. While 
				that approach may work in some situations, it will not work in
				the general case because the To header field value is 
				sometimes changed by intermediaries, and such a change is not 
				always detectable.
				</t>
			</list>
			</t>
		</section>
    </section>
    <section title="Example">
		<t>
		In this section an example is provided to illustrate the application
		of the new cause-param value.
		</t>
		<t>
		In this example, Alice calls her bank customer care. John is the 
		person at the call center that answers the call. John is in a call 
		center that manages several toll-free services and he needs to know 
		for which service Alice is calling to provide the appropriate welcome 
		speech.
		</t>
		<figure>
			<artwork align="center" xml:space="preserve"><![CDATA[     
	Alice      Toll-Free Service   Atlanta.com          John
	  |                |              |                   |
	  |    INVITE F1   |              |                   |
	  |--------------->|   INVITE F2  |                   |
	  |                |------------->|                   |
	  |                |              |  INVITE F3        |
	  |                |              |------------------>|

                   * Rest of flow not shown *

	  Figure 1: Service Access Number Translation Example

Message Details

   F1 INVITE [2001:db8:9::2] -> Toll-Free Service

      In the initial request, the Request-URI contains the Toll-Free 
      number dialed by Alice.

      INVITE sip:+18005551002@example.com;user=phone  SIP/2.0
      Via: SIP/2.0/TCP [2001:db8:9::2]:5060;branch=z9hG4bK74bf
      From: Alice <sip:+15551001@example.com;user=phone>;tag=9fxced76sl
      To: <sip:+18005551002@example.com;user=phone>
      Call-ID: c3x842276298220188511
      CSeq: 1 INVITE
      Max-Forwards: 70
      Contact: <sip:alice@[2001:db8:9::2]>
      Content-Type: application/sdp
      Content-Length: <appropriate value>

      [SDP Not Shown]


   F2 INVITE Toll-Free Service -> Atlanta.com

      The Toll-Free application receives the request and translates
      the service number into a routable number toward the call center.
      The Request-URI is changed and, in the new Request-URI, the
      "cause" URI parameter set to 380 is added. As there was no
      History-Info header field in the received request,
      the application creates a History-Info header with two entries:
      one for the received Request-URI and one for the new Request-URI.

      INVITE sip:+15555551002@atlanta.com;cause=380;user=phone SIP/2.0
      Via: SIP/2.0/TCP [2001:db8:a::2];branch=z9hG4bK-ik8
      Via: SIP/2.0/TCP [2001:db8:9::2]:5060;branch=z9hG4bK74bf
      From: Alice <sip:+15551001@example.com;user=phone>;tag=9fxced76sl
      To: <sip:+18005551002@example.com;user=phone>
      Call-ID: c3x842276298220188511
      CSeq: 1 INVITE
      Max-Forwards: 69
      Supported: histinfo
      History-Info: <sip:+18005551002@example.com;user=phone>;index=1
      History-Info: <sip:+15555551002@atlanta.com;cause=380;user=phone>;
                    index=1.1;mp=1
      Contact: <sip:alice@[2001:db8:9::2]>
      Content-Type: application/sdp
      Content-Length: <appropriate value>

      [SDP Not Shown]

	  
   F3 INVITE Atlanta.com -> John

      The call center proxy routes the received request to John's
      IP address by changing the Request-URI. When changing the
      Request-URI, the proxy adds a new entry in the History-Info
      header field.

      INVITE sip:john@[2001:db8:b::2] SIP/2.0
      Via: SIP/2.0/TCP [2001:db8:b::3]:5060;branch=z9hG4bKpxk7g
      Via: SIP/2.0/TCP [2001:db8:a::2];branch=z9hG4bK-ik8
      Via: SIP/2.0/TCP [2001:db8:9::2]:5060;branch=z9hG4bK74bf
      From: Alice <sip:+15551001@example.com;user=phone>;tag=9fxced76sl
      To: <sip:+18005551002@example.com;user=phone>
      Call-ID: c3x842276298220188511
      CSeq: 1 INVITE
      Max-Forwards: 68
      Supported: histinfo
      History-Info: <sip:+18005551002@example.com;user=phone>;index=1
      History-Info: <sip:+15555551002@atlanta.com;cause=380;user=phone>;
                    index=1.1;mp=1
      History-Info: <sip:john@[2001:db8:b::2]>;index=1.1.1;rc=1.1
      Contact: <sip:alice@[2001:db8:9::2]>
      Content-Type: application/sdp
      Content-Length: <appropriate value>

      [SDP Not Shown]
	  
NOTE: Line breaks for display purpose only

			]]></artwork>
        </figure>
    </section>
    <section title="IANA Considerations">
		<t> 
		<xref target="RFC4458" pageno="false" format="default"/> defines a 
		"cause" parameter specified as having predefined values. This document
		defines a new value for the "cause" parameter: 380.
		</t>
		<section title="SIP/SIPS URI Parameters Subregistery">
			<t>
			This document requests IANA to modify the existing row for the 
			"cause" parameter to add a reference to this document under the 
			"SIP/SIPS URI Parameters" subregistry within the "Session 
			Initiation Protocols" registry:
			</t>
			<figure>
				<artwork align="center" xml:space="preserve"><![CDATA[
Parameter Name    Predefined Values           References 
--------------    -----------------    ------------------------- 
   cause               Yes            [RFC4458][TBD:thisdocument] 
		]]>	</artwork>
			</figure>
		</section>
		<section title="SIP Cause Subregistery">
			<t>
			This document requests IANA to add a new subregistry, "SIP Cause",
			to the "Session Initiation Protocol (SIP) Parameters" registry. 
			Its format and initial values are as shown in the following table:
			</t>
			<figure>
				<artwork align="center" xml:space="preserve"><![CDATA[
   Cause         Reference 
-----------    ------------- 
    404	         [RFC4458]
    486          [RFC4458]				
    408	         [RFC4458]
    302	         [RFC4458]
    487	         [RFC4458]
    480	         [RFC4458]
    503	         [RFC4458]
    380	      [TBD:thisdocument] 
			]]></artwork>
			</figure>
		</section>
    </section>

    <section title="Security Considerations">
		<t>
		The security considerations in <xref target="RFC4458" pageno="false" format="default"/> apply.
		</t>
		<t>
		A privacy service that performs the "Privacy: header"
		Service <xref target="RFC3323" pageno="false" format="default"/> must 
		remove the cause URI parameter from the URI. Privacy of the parameters, 
		when they form part of a URI within the History-Info header field, is 
		covered in <xref target="RFC7044" pageno="false" format="default"/>.
		</t>
    </section>

    <section title="Acknowledgements">
		<t>
		The authors wish to thank the 3GPP community for providing guidance,
		input, and comments on the document. Thanks also to Paul Kyzivat, Dale
		Worley, Jean Mahoney, Robert Sparks, Joel Halpern and Lionel Morand 
		for their detail reviews of the document. Special thanks to Ben 
		Campbell for his help to make the work progress.
		</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
		<?rfc include="reference.RFC.3261"?>
		<?rfc include="reference.RFC.3323"?>
		<?rfc include="reference.RFC.3326"?>
		<?rfc include="reference.RFC.7044"?>
      <reference anchor="TS.3GPP.24.229">
        <front>
          <title>IP multimedia call control protocol based on Session
          Initiation Protocol (SIP) and Session Description Protocol
          (SDP);Stage 3</title>
          <author>
            <organization>3GPP TS 24.229 13.0.0</organization>
          </author>
          <date month="December" year="2014"/>
        </front>
      </reference>
    </references>

    <references title="Informative References">
      <reference anchor="ITU-T_I.312_Q.1201">
        <front>
          <title>Principles of Intelligent Network Architecture</title>
          <author>
            <organization>ITU-T Recommendation I312/Q.1201</organization>
          </author>
          <date month="October" year="1992"/>
        </front>
      </reference>

      <reference anchor="ITU-T_Q.1214">
        <front>
          <title>Distributed Functional Plane For Intellignet Network
          CS-1</title>
          <author>
            <organization>ITU-T Recommendation Q.1214</organization>
          </author>
          <date month="October" year="1995"/>
        </front>
      </reference>

      <reference anchor="ITU-T_Q.763">
        <front>
          <title>Signalling System No. 7 &minus; ISDN User Part formats and
          codes.</title>
          <author>
            <organization>ITU-T Recommendation Q.763</organization>
          </author>
          <date month="December" year="1999"/>
        </front>
      </reference>
	  <?rfc include="reference.RFC.4458"?>
	  <?rfc include="reference.RFC.5234"?>
    </references>
  </back>
</rfc>
