RFC 8119
SIP "cause" URI Parameter for Service Number Translation
RFC 8119: SIP "cause" URI Parameter for Service Number Translation β¨
okay bestie, RFC 8119 is here π It was published in March 2017 by M. Mohali from Orange and M. Barnes from MLB@Realtime Communications. It's an Informational document, so it's guidance and not a Standards Track spec πΈ The ISSN is 2070-1721. The header says it updates RFC 4458 π¦ and doesn't list anything it obsoletes.
Abstract
okay so RFC 4458 (the one about SIP URIs for applications) gives us a "cause" URI parameter π It can show up in the Request-URI of a SIP request, and it tells the User Agent Server (UAS) that receives the message why the request got there π§ This doc updates RFC 4458 by adding a brand-new predefined value for "cause" that covers service number translation. That's for when a retargeting happens because of a specific service action that translates a called service access number π It also gives guidance that RFC 4458 was missing: how to use the "cause" URI parameter inside the History-Info header field. That use is mandatory in some IP networks' implementations, so it really matters π
Status of This Memo
This document is not an Internet Standards Track specification. It's published for informational purposes π
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). Not every document the IESG approves is a candidate for any level of Internet Standard, so check Section 2 of RFC 7841 if you're curious π«Ά
Info about the current status, any errata, and how to send feedback lives at http://www.rfc-editor.org/info/rfc8119 π₯
Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved π
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the publication date. Please read these carefully, because they spell out your rights and restrictions for this document π Any Code Components pulled out of this document must include the Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions. They're provided without warranty, as the Simplified BSD License describes π
Table of Contents
1. Introduction, Terminology, and Overview . . . . . . . . . . . 2
2. Solution . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.1. Interaction with Request History Information . . . . . . 4
3.2. Handling and Processing the Service Number Translation
"cause" URI Parameter Value . . . . . . . . . . . . . . . 5
4. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9
6. Security Considerations . . . . . . . . . . . . . . . . . . . 10
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 10
7.1. Normative References . . . . . . . . . . . . . . . . . . 10
7.2. Informative References . . . . . . . . . . . . . . . . . 11
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 11
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12
1. Introduction, Terminology, and Overview π¦
okay so [RFC4458] defines a way to spot retargeting that's caused by call forwarding supplementary services π The "cause" URI parameter in the target URI says why the retargeting happened. Its defined values are equivalent to the TDM (Time Division Multiplexing) Redirecting Reasons from [ITU-T_Q.763] πΈ The idea of "retargeting" is defined in [RFC7044] β¨
In the Public Switched Telephone Network (PSTN) / Integrated Services Digital Network (ISDN) world, there's a different kind of retargeting π It comes from Intelligent Network (IN) services that translate the called number, as described in [ITU-T_Q.1214]. IN is all about making new services easier to launch, with more flexibility and new capabilities π§ Examples are Universal Personal Telecommunication (UPT), Virtual Private Network (VPN), Freephone, and so on, as described in [ITU-T_I.312_Q.1201]. For these IN services, ISUP (ISDN User Part) introduced the "called IN number" and "original called IN number" parameters. They capture the requested service access number before it gets translated [ITU-T_Q.763] π
In this spec, "service access number" means the dialable number that a specific service is reached by. This special number isn't globally routable, so it has to be translated into a routable SIP or tel URI before the session can be set up π
This spec proposes a solution for identifying well-known services, like premium or toll-free services that do service access number translation. It also lets SIP signaling interwork with the ISUP called IN number and original called IN number parameters π₯
The mechanism lets a SIP network insert and convey the service access number that was requested, before its translation, all the way to the final destination π«Ά
For full call forwarding or access number translation services, the "cause" URI parameter is only relevant inside the History-Info header field defined in [RFC7044]. [RFC4458] never described that relationship, so this document gives guidance on using the "cause" URI parameter together with the History-Info header field π
This doc also answers a need from the Third Generation Partnership Project (3GPP) [TS.3GPP.24.229], which wants to identify the service access number. The procedures defined here are meant for networks that use 3GPP-defined services. Their use is undefined for other networks π
2. Solution π
A new value for the "cause" URI parameter of the 'sip:' or 'sips:' URI schemes is defined for the "Service number translation" use case π This value may be used in a 'sip:' or 'sips:' URI that's inserted in the Request-URI and in the History-Info header field [RFC7044]. That happens when the URI comes from a retargeting, or from a service access number translation done by a specific service similar to PSTN/ISDN IN services that isn't a call forwarding service π§
As defined in [RFC4458], the "cause" URI parameter must be encoded in the new target URI when the service generates it π
The ABNF grammar [RFC5234] for the cause-param and target-param parameters from [RFC4458] is summarized below (including the updates described in [Err1409]). The Status-Code is defined in [RFC3261] π¦
target-param = "target=" pvalue
cause-param = "cause=" Status-Code
The following value for this URI parameter is added to the existing ones β¨
+---------------------------------+-------+
| Cause | Value |
+---------------------------------+-------+
| Service number translation | 380 |
+---------------------------------+-------+
3. Guidelines πΈ
To help implement this solution for conveying the service access number, this document proposes guidance for using the "cause" URI parameter π There's guidance on using "cause" in the request history information (in Section 3.1), and guidance on processing a service number translation service with the new "cause" URI parameter value (in Section 3.2) π«Ά
3.1. Interaction with Request History Information π₯
The History-Info header field defined in [RFC7044] gives the UAS and User Agent Client (UAC) information about how a request was retargeted. That includes the initial Request-URI and any retargeted URIs π§ This info goes into History-Info headers as the request gets retargeted. When it reaches the UAS, it comes back in certain responses. History-Info unlocks a lot of enhanced services, since it shows how and why a SIP request arrived at a specific application or user, and it keeps that info across the whole signaling path even when several applications are involved π
When a proxy inserts a URI containing the "cause" URI parameter defined in [RFC4458] into the Request-URI of a forwarded request (per [RFC7044]), the proxy must also copy this new Request-URI into a History-Info header field entry in the forwarded request. That way the URI in that entry includes the "cause" URI parameter π So even if a downstream proxy replaces the Request-URI through rerouting, the History-Info header field still keeps these parameters, which can be useful to the UAS π¦
Heads up bestie: if a proxy doesn't support generating the History-Info header field, or if a downstream proxy removes the History-Info header fields, an application only gets the "cause" URI parameter when the request isn't retargeted afterwards. In that case it's only in the Request-URI of the incoming request π Section 3.2 talks more about what this means for the solution.
To filter specific entries in the history information, [RFC7044] defines header field parameters. The "mp" and "rc" header field parameters work like this π
- When the new target was determined by mapping to a user other than the target user tied to the Request-URI being retargeted, the "mp" header field parameter is added. This lets you spot retargets that happen because an application decided something on a user's behalf, and also retargets that happen because of an internal decision made by an application π
- The "rc" header field parameter is added when the new target represents a change in Request-URI, while the target user stays the same π
These header field parameters can be used together with the new "cause" URI parameter for certain applications. Section 4 has an example of that π
When you use the History-Info header field with the "cause" URI parameter in a Request-URI, remember that the "cause" URI parameter is not the same thing as the "cause" header field parameter in the Reason header [RFC3326] β οΈ 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 β¨
3.2. Handling and Processing the Service Number Translation "cause" URI Parameter Value β¨
Okay bestie, this part is where the magic happens πͺ Two sides, two jobs.
At the Application Server:
When an application gets a request addressed to a service access number and swaps the Request-URI for a routable number, it should put a "cause" URI parameter set to 380 "Service number translation" into that new Request-URI. Following the process in [RFC7044], the application server adds a new History-Info header field entry with the new Request-URI, including the "cause" URI parameter. An application server can also add a "target" URI parameter, as defined in [RFC4458], holding the original Request-URI it received π¦
Note that if a downstream proxy replaces the new Request-URI for any reason, and the History-Info header field isn't supported, the service access number that was originally dialed would be lost π So it is strongly recommended to support the History-Info header field all along the signaling path π
At the UAS:
When the UAS gets the request and wants to find the service access number it was reached by, it should first look for the "cause" URI parameter value 380 in the History-Info header field. That History-Info entry should also contain an "mp" or "rc" header field parameter, so the UAS can find the requested service number in the History-Info entry whose index parameter value matches that "mp" or "rc" value. If there's no "mp" or "rc" header field parameter in the identified History-Info entry for any reason, the UAS can find the requested service number in the preceding History-Info entry πΈ
If the History-Info header is not supported or a proxy removed it for any reason, the UAS might be able to find the service access number from before translation in either of these ways, but there is no guarantee π
- 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, provided there's also a "cause" URI parameter set to 380 in that Request-URI π
- If there's no "cause" URI parameter set to 380 in the Request-URI and 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 pull the number out of the To header field. That can work in some situations, but it won't work in the general case, because intermediaries sometimes change the To header field value, and that change isn't always detectable π
4. Example π§
In this section we get a worked example to show how the new cause-param value gets used. Lowkey my favourite part π
Alice calls her bank's customer care line. John is the person at the call center who picks up. John's call center manages several toll-free services, so he needs to know which service Alice is calling about, so he can play the right welcome speech π
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 holds the toll-free number Alice dialed π
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 gets the request and translates the service number into a routable number that leads to the call center. The Request-URI changes, and the new Request-URI gets a "cause" URI parameter set to 380. There was no History-Info header field in the received request, so 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 request to John's IP address by changing the Request-URI. When it changes the Request-URI, the proxy adds a new entry to 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 are for display purpose only π
5. IANA Considerations π
[RFC4458] defines a "cause" URI parameter that has predefined values. This document defines a new value for the "cause" URI parameter: 380 β¨
IANA has updated the existing row for the "cause" URI parameter so it references this document, under the "SIP/SIPS URI Parameters" subregistry within the "Session Initiation Protocol (SIP) Parameters" registry π
Parameter Name Predefined Values Reference
-------------- ----------------- ----------------------
cause Yes [RFC4458][RFC8119]
6. Security Considerations π
The security considerations in [RFC4458] apply. This is serious, so read them!! π¨
If a privacy level of 'header' is requested in the Privacy header field as described in [RFC3323], the "cause" URI parameter must be removed from the Request-URI to keep the network-provided privacy that was requested. Privacy of parameters, when they're part of a URI within the History-Info header field, is covered in [RFC7044] π«£
7. References π
7.1. Normative References
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, DOI 10.17487/RFC3261, June 2002, <http://www.rfc-editor.org/info/rfc3261>.
[RFC3323] Peterson, J., "A Privacy Mechanism for the Session Initiation Protocol (SIP)", RFC 3323, DOI 10.17487/RFC3323, November 2002, <http://www.rfc-editor.org/info/rfc3323>.
[RFC3326] Schulzrinne, H., Oran, D., and G. Camarillo, "The Reason Header Field for the Session Initiation Protocol (SIP)", RFC 3326, DOI 10.17487/RFC3326, December 2002, <http://www.rfc-editor.org/info/rfc3326>.
[RFC7044] Barnes, M., Audet, F., Schubert, S., van Elburg, J., and C. Holmberg, "An Extension to the Session Initiation Protocol (SIP) for Request History Information", RFC 7044, DOI 10.17487/RFC7044, February 2014, <http://www.rfc-editor.org/info/rfc7044>.
[TS.3GPP.24.229] 3GPP, "IP multimedia call control protocol based on Session Initiation Protocol (SIP) and Session Description Protocol (SDP); Stage 3", 3GPP TS 24.229 13.6.0.0, January 2015.
7.2. Informative References
[Err1409] RFC Errata, Erratum ID 1409, RFC 4458.
[ITU-T_I.312_Q.1201] ITU-T, "Principles of Intelligent Network Architecture", ITU-T Recommendation I312/Q.1201, October 1992.
[ITU-T_Q.1214] ITU-T, "Distributed Functional Plane For Intellignet Network CS-1", ITU-T Recommendation Q.1214, October 1995.
[ITU-T_Q.763] ITU-T, "Signalling System No. 7 -- ISDN User Part formats and codes", ITU-T Recommendation Q.763, December 1999.
[RFC4458] Jennings, C., Audet, F., and J. Elwell, "Session Initiation Protocol (SIP) URIs for Applications such as Voicemail and Interactive Voice Response (IVR)", RFC 4458, DOI 10.17487/RFC4458, April 2006, <http://www.rfc-editor.org/info/rfc4458>.
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", STD 68, RFC 5234, DOI 10.17487/RFC5234, January 2008, <http://www.rfc-editor.org/info/rfc5234>.
Acknowledgements π«Ά
The authors want to thank the 3GPP community for guidance, input, and comments on the document π Big thanks also to Paul Kyzivat, Dale Worley, Jean Mahoney, Robert Sparks, Joel Halpern, and Lionel Morand for their detailed reviews of the document. Special thanks to Ben Campbell for helping the work progress π
Authors' Addresses π
Marianne Mohali Orange 44 Avenue de la Republique Chatillon 92320 France
Email: marianne.mohali@orange.com
Mary Barnes MLB@Realtime Communications TX United States of America
Email: mary.ietf.barnes@gmail.com
π¦ where this page comes from
- ietf: rfc8119 2017-03
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms