RFC 8496

P-Charge-Info: A Private Header Field (P-Header) Extension to the Session Initiation Protocol (SIP)

πŸ“… published October 2018, from ietf

P-Charge-Info: A Private Header Field (P-Header) Extension to the Session Initiation Protocol (SIP) ✨

okay bestie, this is RFC 8496 πŸ’– It was written by D. York (as an Individual 🌸) and T. Asveren (from Ribbon Communications πŸŽ€). It came out in October 2018 with ISSN 2070-1721. It's Informational, so it's not a standards-track spec 🧚. It doesn't list anything it obsoletes or updates, so it's a fresh start πŸ’…

Abstract

okay so this doc writes down how P-Charge-Info is actually used today πŸ¦‹ It's a SIP private header field (a P-Header) that tells the network who should get the bill. Several equipment vendors and carriers are running it in production, and it's been around since at least 2007 πŸ’… The doc also details how this header field gets registered with IANA πŸ“‹

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 has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Not all documents approved by the IESG are candidates for any level of Internet Standard; see Section 2 of RFC 7841.

Info about the current status of this document, any errata, and how to give feedback on it lives at https://www.rfc-editor.org/info/rfc8496 πŸ”—

Copyright (c) 2018 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 (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

Table of Contents πŸ“‘

1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . . . .   3
2.  Requirements Language . . . . . . . . . . . . . . . . . . . .   4
3.  Purpose of This Document  . . . . . . . . . . . . . . . . . .   4
4.  Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . .   4
5.  The P-Charge-Info Header  . . . . . . . . . . . . . . . . . .   5
  5.1.  Applicability Statement for the P-Charge-Info Header
        Field . . . . . . . . . . . . . . . . . . . . . . . . . .   5
  5.2.  Usage of the P-Charge-Info Header Field . . . . . . . . .   5
    5.2.1.  Procedures at the UA  . . . . . . . . . . . . . . . .   5
    5.2.2.  Procedures at the Proxy . . . . . . . . . . . . . . .   6
  5.3.  Use-Case Example  . . . . . . . . . . . . . . . . . . . .   6
6.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   7
7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   7
  7.1.  Header Field  . . . . . . . . . . . . . . . . . . . . . .   7
8.  Security Considerations . . . . . . . . . . . . . . . . . . .   7
  8.1.  Trust Relationship  . . . . . . . . . . . . . . . . . . .   7
  8.2.  Untrusted Peers . . . . . . . . . . . . . . . . . . . . .   8
    8.2.1.  Ingress from Untrusted Peers  . . . . . . . . . . . .   8
    8.2.2.  Egress to Untrusted Peers . . . . . . . . . . . . . .   8
9.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   8
  9.1.  Normative References  . . . . . . . . . . . . . . . . . .   8
  9.2.  Informative References  . . . . . . . . . . . . . . . . .   9
Appendix A.  Alternatives . . . . . . . . . . . . . . . . . . . .  10
  A.1.  P-Charging-Vector . . . . . . . . . . . . . . . . . . . .  10
  A.2.  P-DCS-Billing-Info  . . . . . . . . . . . . . . . . . . .  10
  A.3.  P-Asserted-Identity . . . . . . . . . . . . . . . . . . .  11
Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  11
Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  11

1. Overview 🌈

okay so in some network setups, a bunch of network entities found it useful to split apart the identity of the caller (the thing people usually call "Caller ID") from the identity/number used for billing πŸ’Έ This doc records how P-Charge-Info is used today. It's a private SIP header field that gives simple billing info, and it details how the header gets registered with IANA, as required by Section 4 of [RFC5727] ✨

In a typical setup, the caller's identity (what end users call "Caller ID") comes from one of these SIP header fields:

  • P-Asserted-Identity
  • From (when P-Asserted-Identity isn't there)

(NOTE: some service providers have also used the Remote-Party-ID header field, but that was never standardized and got replaced by P-Asserted-Identity in [RFC3325] πŸ™ˆ)

That identity/number usually shows up on the receiving user agent (UA), where it's normally displayed for the end user. It's also typically used for billing by the network entities carrying the session 🧾

But in some network setups, the "Caller ID" shown to the receiving UA can be different from the number that should be billed. Here's the tea: there's a real need for a way to pass an extra billing identifier between network entities so they can bill for services correctly 🫢

Several carriers, application providers, and equipment providers have been using the P-Charge-Info header field since at least 2007 as a simple way to pass this billing identifier around πŸ¦‹

This document specifies how to use the P-Charge-Info header field in INVITE requests. The header field might be useful in other SIP messages too, but that's beyond the scope of this doc πŸ™ƒ

2. Requirements Language πŸ“

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

The key words describe requirements needed to interoperate with existing usage.

3. Purpose of This Document 🎯

This doc exists to write down the existing deployed usage of the P-Charge-Info header field, and to follow Section 4 of [RFC5727] when registering it with IANA. Heads up: RFC 5727 specifically deprecates new usage of "P-" header fields πŸ‘€ But P-Charge-Info has been deployed since before 2007, which is before RFC 5727 came out. So the authors believe P-Charge-Info is a "grandfathered case" per Section 4 of RFC 5727 πŸ‘‘

4. Use Cases πŸ“

The simplest use case for P-Charge-Info is an enterprise environment. Each SIP endpoint has a direct number, and the enterprise SIP proxy passes that along to a SIP proxy at a SIP service provider that connects to the Public Switched Telephone Network (PSTN) πŸ“ž Instead of making the SIP service provider track every individual direct number for billing, the enterprise SIP proxy sends a single billing identifier in the P-Charge-Info header field, and the SIP service provider bills using that πŸ’…

Another example: a hosted telephony provider or hosted voice-application provider might run a big SIP network with customers spread over a huge geographic area. Those customers use local-market PSTN numbers, but the network only has a few actual PSTN interconnection points πŸ—ΊοΈ

So all the customers can have local phone numbers, yet outgoing calls actually get routed across a SIP network and out specific PSTN gateways, or across specific SIP connections to other SIP service providers. The hosted provider might want to pass a billing identifier to its SIP service providers, either to keep billing simple or to get better rates from them πŸ€‘

5. The P-Charge-Info Header ✨

5.1. Applicability Statement for the P-Charge-Info Header Field

The P-Charge-Info header field works within a single private administrative domain, or between different administrative domains that have a trust relationship with each other 🀝

5.2. Usage of the P-Charge-Info Header Field

The P-Charge-Info header field is used to pass along info about the identity of the party to be charged πŸ’° It's typically inserted into a SIP request, usually an INVITE, by one of the following:

  • the SIP proxy on the originating network;
  • a PSTN gateway acting as a SIP UA; or
  • an application server generating billing information.

P-Charge-Info is meant to be used by the SIP entity that provides billing services for a session. That could be an entity generating billing records, or another entity that interacts with it 🧾 When an entity gets an INVITE request with the P-Charge-Info header field, it MAY use the value in P-Charge-Info to figure out the party responsible for the charges associated with the session. For example, that decision could be based on local policy πŸŽ€

5.2.1. Procedures at the UA

The P-Charge-Info header field may be inserted by PSTN gateways or application servers acting as a SIP UA πŸ€–

The P-Charge-Info header field is ignored by an end-user UA and should not normally be received by such a UA. It MUST NOT be sent to an end-user UA, because that would tell the UA who's getting charged. That info could cause security-related issues. For example, the UA would learn the calling-party information for a call that was otherwise anonymous πŸ™ˆ A UA SHOULD ignore it if it receives this header. Similarly, an end-user UA originating a SIP message SHOULD NOT insert this header field 🚫

Big warning: sending P-Charge-Info to an end-user UA can leak who's paying, and that can expose calling-party info on calls that were meant to stay anonymous 😭

A PSTN gateway or application server acting as a UA MAY use the content of the P-Charge-Info header field in an INVITE request it received as the identity to be charged for the session. It can do this for billing-related procedures, like in a billing record or while talking to another entity that generates billing records πŸ’œ A PSTN gateway or application server acting as a UA MAY also use the content of the P-Charge-Info header field to fill in the identity of the party to charge in another type of signaling, such as ISDN User Part (ISUP) 🌸

5.2.2. Procedures at the Proxy 🧚

okay so proxies get their own little storyline πŸ’… A SIP proxy that supports this extension and gets a request (usually a SIP INVITE) MAY insert a P-Charge-Info header field πŸŽ€ What goes in it can come from local policy, or the proxy can ask an external entity who should be charged πŸ’–

When a proxy gets an INVITE, it MAY use whatever's in the P-Charge-Info header field for billing stuff 🧾 Like, writing it into a billing record, or talking to another entity that makes billing records ✨

A SIP proxy that doesn't support this extension just passes any P-Charge-Info header field along unchanged, because RFC 3261 says so πŸ¦‹

And here's the big one: a proxy that supports this extension MUST remove the P-Charge-Info header field before it sends a request to a UA that isn't acting as a PSTN gateway or appropriate application server, if the proxy knows what role the UA plays πŸ™ˆ No peeking at billing info for random endpoints!!

5.3. Use-Case Example 🌸

the P-Charge-Info header field usually holds just a SIP/tel URI that works as a billing indicator πŸ“ Here are some super simple examples:

P-Charge-Info: <sip:+14075550134@example.net;user=phone>

P-Charge-Info: <sip:+12345550167@example.com>

P-Charge-Info: <sips:1234@example.com>

P-Charge-Info: <tel:+14075551234>

Any other applicable SIP URI could be used too πŸ’œ

6. Formal Syntax πŸ“

okay this part is giving grammar πŸ€“ This RFC defines one or more SIP header fields that let you pick between addr-spec and name-addr when you build header-field values. [RFC8217] doesn't allow addr-spec if its value would contain a comma, semicolon, or question mark πŸ™…β€β™€οΈ

The private header field is described in prose and in an augmented Backus-Naur Form (BNF) defined in [RFC5234] ✨ A bunch of BNF definitions are inherited from SIP and aren't repeated here, so implementors need to be familiar with the notation and contents of [RFC3261] and [RFC5234] to understand this document 🫢

The syntax of the P-Charge-Info header field goes like this:

      P-Charge-Info = "P-Charge-Info" HCOLON (name-addr / addr-spec)
              ; name-addr and addr-spec are specified in RFC 3261

The SIP URI inside the name-addr/addr-spec is the billing indicator that gets passed between the parties πŸ’…

7. IANA Considerations 🌈

this spec registers a new proprietary SIP header field following the procedures in [RFC5727] 🧚

7.1. Header Field πŸŽ€

The P-Charge-Info private header field has been registered in the "Header Fields" subregistry of the "Session Initiation Protocol (SIP) Parameters" registry like this:

Header Field Name: P-Charge-Info

Compact Form: none

Reference: RFC 8496

8. Security Considerations πŸ”

this section is serious, bestie 😭 Please read every word.

8.1. Trust Relationship 🀝

The info in the P-Charge-Info header field is used for billing, so the proxies and other SIP entities that share it MUST have a trust relationship πŸ’€

If an untrusted entity got inserted between the trusted entities, it could mess with the billing records for the call 😱 If the SIP connections aren't made over a private network, a mechanism for securing the confidentiality and integrity of the SIP connection MUST be used to protect the information. One such mechanism could be TLS encryption of the SIP signaling stream πŸ”’

8.2. Untrusted Peers 🚫

8.2.1. Ingress from Untrusted Peers πŸ“₯

If a SIP entity accepted the P-Charge-Info header field from an untrusted peer, there's potential for fraud if that untrusted entity sent incorrect information, whether by accident or on purpose 😀

So a SIP entity MUST remove and ignore the P-Charge-Info header field when it's received from an untrusted entity πŸ—‘οΈ

8.2.2. Egress to Untrusted Peers πŸ“€

If a SIP entity sent the P-Charge-Info header field to an untrusted peer, there's potential for exposing network information that's internal to a trust domain πŸ‘€ The untrusted entity might learn the identities of public SIP proxies used within the trust domain, and those could then potentially be directly attacked 😭

If an implementation doesn't strip P-Charge-Info from the message where this document specifies, it introduces serious privacy risks 🚨 Examples include revealing third-party billing relationships that might be sensitive, and unmasking the identity of callers who want to stay anonymous. Depending on circumstances, the latter case may result in unwanted harassment and even physical harm to the calling party πŸ₯Ί

Warning, bestie: a SIP entity MUST remove the P-Charge-Info header field when it's sent to an untrusted entity. No exceptions πŸ›‘

9. References πŸ“š

9.1. Normative References πŸ“–

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119,
           DOI 10.17487/RFC2119, March 1997,
           <https://www.rfc-editor.org/info/rfc2119>.

[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,
           <https://www.rfc-editor.org/info/rfc3261>.

[RFC5727]  Peterson, J., Jennings, C., and R. Sparks, "Change Process
           for the Session Initiation Protocol (SIP) and the Real-
           time Applications and Infrastructure Area", BCP 67,
           RFC 5727, DOI 10.17487/RFC5727, March 2010,
           <https://www.rfc-editor.org/info/rfc5727>.

[RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
           2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
           May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[RFC8217]  Sparks, R., "Clarifications for When to Use the name-addr
           Production in SIP Messages", RFC 8217,
           DOI 10.17487/RFC8217, August 2017,
           <https://www.rfc-editor.org/info/rfc8217>.

9.2. Informative References 🧠

[RFC5234]  Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
           Specifications: ABNF", STD 68, RFC 5234,
           DOI 10.17487/RFC5234, January 2008,
           <https://www.rfc-editor.org/info/rfc5234>.

[RFC3325]  Jennings, C., Peterson, J., and M. Watson, "Private
           Extensions to the Session Initiation Protocol (SIP) for
           Asserted Identity within Trusted Networks", RFC 3325,
           DOI 10.17487/RFC3325, November 2002,
           <https://www.rfc-editor.org/info/rfc3325>.

[RFC5503]  Andreasen, F., McKibben, B., and B. Marshall, "Private
           Session Initiation Protocol (SIP) Proxy-to-Proxy
           Extensions for Supporting the PacketCable Distributed Call
           Signaling Architecture", RFC 5503, DOI 10.17487/RFC5503,
           March 2009, <https://www.rfc-editor.org/info/rfc5503>.

[RFC7315]  Jesske, R., Drage, K., and C. Holmberg, "Private Header
           (P-Header) Extensions to the Session Initiation Protocol
           (SIP) for the 3GPP", RFC 7315, DOI 10.17487/RFC7315, July
           2014, <https://www.rfc-editor.org/info/rfc7315>.

Appendix A. Alternatives πŸ”

A.1. P-Charging-Vector 🧩

P-Charging-Vector is defined in Section 4.6 of [RFC7315] and the 3GPP uses it to carry info about charging for a session πŸ“‘ The semantics are a bit different from P-Charge-Info, though. P-Charging-Vector is mainly for carrying info that lets you correlate multiple charging records generated for a single session. P-Charge-Info is for conveying info about the party to be billed for a call πŸ’Έ

Also, P-Charging-Vector has a mandatory icid-value parameter, a globally unique value that identifies the session the charging info is generated for. That kind of globally unique identifier isn't necessary when you're just carrying info about the user to be billed, attached to the matching session-related signaling πŸ™Œ

A.2. P-DCS-Billing-Info 🏠

P-DCS-Billing-Info is defined in Section 7 of [RFC5503] and passes billing info between trusted entities in the PacketCable Distributed Call Signaling Architecture πŸ“ž For lots of billing situations, especially the very large-scale residential telephone networks this header field was designed for, P-DCS-Billing-Info is an excellent solution. But being able to handle a range of situations adds complexity πŸ˜΅β€πŸ’«

According to RFC 5503, the following info is mandatory to include in each use of the P-DCS-Billing-Info header field:

  • Billing-Correlation-ID, a globally unique identifier
  • Financial-Entity-ID
  • RKS-Group-ID (record-keeping server)

The P-DCS-Billing-Info header field may also include a variety of additional parameters 🧾

Other billing scenarios don't need all that complexity. In those simpler scenarios, all you need is a number to bill against, and P-Charge-Info is the simple solution for simple billing πŸ’–

Additionally, according to Section 7.3 of RFC 5503, it's mandatory for a UA to create a Billing-Correlation-ID and insert it into the P-DCS-Billing-Info header field (along with the other required info) sent in the initial SIP INVITE 🎟️ That makes sense for the residential-telephone-service environment this header field is built for. P-Charge-Info, in contrast, is designed to be used among proxies and not at all by normal user agents πŸ™…β€β™€οΈ (P-Charge-Info may, though, be used by user agents associated with PSTN gateways.) πŸŒ‰

A.3. P-Asserted-Identity πŸͺͺ

Early reviewers asked why the P-Asserted-Identity header field documented in [RFC3325] couldn't be used. As mentioned in the use-case example above, P-Asserted-Identity indicates the identity of the calling party. But here the requirement is to provide an additional identity for the SIP-to-PSTN interconnect point πŸ“

It'd be typical to see both P-Asserted-Identity and P-Charge-Info in a SIP exchange ✨ P-Asserted-Identity provides the caller identity that gets displayed to the end user as "Caller ID", while P-Charge-Info provides the billing identifier used for the billing associated with the call 🫢

Acknowledgements πŸ’Œ

The authors thank the following people for their comments: Keith Drage, Miguel Garcia, Sumit Garg, John Haluska, Juha Heinanen, Christer Holmberg, Paul Kyzivat, Adam Roach, Jonathan Rosenberg, Henning Schulzrinne, Tom Taylor, and Glen Wang 🌟

Authors' Addresses πŸ–‹οΈ

Dan York
Individual
Keene, NH
United States of America

Email: dyork@lodestar2.com


Tolga Asveren
Ribbon Communications
3 Paragon Way, Suite 100
Freehold, NJ  007728
United States of America

Email: tasveren@rbbn.com

That's the whole RFC, bestie! πŸŒˆπŸ’– Go be a main character in your networks πŸ‘‘

πŸ“¦ where this page comes from