<?xml version="1.0" encoding="US-ASCII"?>
<?xml-stylesheet type='text/xsl'
             href='http://xml.resource.org/authoring/rfc2629.xslt' ?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "http://xml.resource.org/authoring/rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC2119 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3325 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3325.xml">
<!ENTITY RFC3427 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3427.xml">
<!ENTITY RFC3455 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3455.xml">
<!ENTITY RFC3603 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3603.xml">

]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="info" docName="draft-york-sipping-p-charge-info-06"
ipr="trust200811">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
      <title abbrev="P-Charge-Info, a SIP Private Header">P-Charge-Info - A Private Header (P-Header) Extension to the Session Initiation
      Protocol (SIP)</title>

    <author fullname="Dan York" initials="D." surname="York">
	    <organization abbrev="Voxeo">Voxeo Corporation</organization>

      <address>
        <postal>
          <street></street>
          <city>Keene</city>
          <region>NH</region>
          <code></code>
          <country>USA</country>
        </postal>

        <phone>+1-407-455-5859</phone>

        <email>dyork@voxeo.com</email>

	<uri>http://www.voxeo.com/</uri>
      </address>
    </author>
    <author fullname="Tolga Asveren" initials="T." surname="Asveren">
                <organization abbrev="Sonus">Sonus Networks</organization>
      <address>
        <postal>
          <street> 3 Paragon Way</street>
          <city>Freehold </city>
          <region>NJ</region>
          <code>07728</code>
          <country>USA</country>
        </postal>
        <email>tasveren@sonusnet.com</email>
      </address>
    </author>
    
    <date year="2009" />

    <!-- Meta-data Declarations -->

    <area>Real-time Applications and Infrastructure</area>

    <workgroup>SIPPING</workgroup>
	 <keyword>p-header</keyword>

    <abstract>
       <t>This document describes 'P-Charge-Info', a private Session
       Initiation Protocol (SIP) header (P-header) used to convey billing information
       about the party to be charged.  This P-Header is currently
       in production usage by a number of equipment vendors and carriers
       and this document is submitted to request the registration of
       this header with IANA as required by section 4.2 of RFC 3427. This
       P-Header may also be used in some situations to carry the ISUP
       Charge Number parameter for PSTN interconnection.</t>
    </abstract>
  </front>

  <middle>
    <section title="Overview">
        <t>In certain network configurations, it is desirable to decouple
	the identity of the caller (what is normally thought of as "Caller
	ID") from the identity/number used for billing purposes.  This
	document describes the current usage of 'P-Charge-Info', a private
	SIP header, to provide simple billing information and requests the
	registration of this header with IANA as required by section 4.2 of
	 <xref target="RFC3427">RFC 3427</xref>.</t>
	
	<t>In a typical configuration, the identity of the caller, commonly
	referred to as "Caller ID" by end users, is derived from one of the
	following SIP headers:<list style="symbols">
	   <t>P-Asserted-Identity</t>
	   <t>From (in the absence of P-Asserted-Identity)</t>
	</list>(NOTE: Some service providers today also use the
	"Remote-Party-ID" header but this was replaced by
	P-Asserted-Identity in RFC 3325.)</t>
	<t>This identity/number is typically presented to the receiving UA where
	it is usually displayed for the end user.  It is also typically
	used for billing purposes by the network entities involved in
	carrying the session.  </t>
	<t>However, in some network configurations the "Caller ID" presented
	to the receiving UA may be different from the number desired to be
	used for billing purposes.</t>
	
	<t>For example, the "Caller ID" may not reflect the actual reality of 
	the underlying network in terms of costs incurred on the PSTN. This 
	may result in excessive charging of one carrier by another based on the
	erroneous assumption that the call was originating from a different
	point on the PSTN.</t>

	<t>Another example would be where a gateway to the Public Switched
	Telephone Network (PSTN) receives the ISUP "Charge Number" in the
	PSTN signaling which designates the number to be billed.  The
	gateway needs to pass this information along to a SIP entity
	associated with billing.</t>

	<t>In both these examples, there exists a need for a way to pass 
	an additional billing
	identifier that can be used between network entities in order to
	correctly bill for services.  At least one equipment provider,
	Sonus Networks, and several carriers have been using the
	"P-Charge-Info" header for the last 2-3 years as a simple 
	mechanism to exchange this billing identifier.</t>


    </section>

      <section title="Requirements Language">
        <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 RFC 2119.</t>
      </section>

    <section anchor="Purpose" title="Purpose of this Document">
    <t>This document has been prepared to comply with section 4.2 of  
        <xref target="RFC3427">RFC 3427</xref> which states very clearly:
       <list hangIndent="5" style="empty">
<t>All implemented P-headers SHOULD meet the P-Header requirements in 4.1. 
   Any P-header used outside of a very restricted research or teaching environment
   (such as a student lab on implementing extensions) MUST meet those
   requirements and MUST be documented in an RFC and be IANA registered.</t>
        </list> </t>
<t>This document is submitted to comply with the process outlined in
section RFC 3427 Section 4.1 and the registration requirements in Section
4.2.</t>
    </section>

    <section anchor="ProblemExplanation" title="Examples of the Problem">
    <section anchor="UseCase-BillingID" title="Use Case - Billing
    Identifier">
    <t>The simplest use case for P-Charge-Info could be an enterprise
    environment where each SIP endpoint has a direct number that is passed
    by the enterprise SIP proxy across to a SIP proxy at a SIP Service
    Provider who provides PSTN connectivity.  Rather than cause the SIP
    Service Provider to have to track each individual direct number for
    billing purposes, the enterprise SIP proxy could send in the
    P-Charge-Info header a single billing identifier that the SIP Service
    Provider uses for billing purposes.</t>
    </section>
    <section anchor="UseCase-ISUPChargeNumber" title="Use Case - ISUP
    Charge Number">
    <t>A second use case is one in which a PSTN gateway receives PSTN
    signaling that includes an ISUP Charge Number parameter and the PSTN
    gateway needs to send that ISUP Charge Number via SIP to other servers. 
    In this instance, the PSTN gateway will insert the ISUP Charge Number
    into the P-Charge-Info SIP header.</t>

    </section>
    <section anchor="UseCase-DistributedEnterprise" title="Use Case -
    Distributed Enterprise">
      <t>A third and common use case is a large enterprise with a widely
      distributed SIP network to designate the specific point at which PSTN
      interconnection occurs.  Consider an enterprise with a work force and
      offices distributed over a wide geographic area and linked by a
      common internal network over which voice traffic is sent. Users
      across the network may be able to contact each other directly via SIP
      sessions, but there may only be a relatively few points in the
      network where interconnection occurs to the PSTN.  Consider this
      case:</t>
      <t><list style="symbols">
         <t>A branch office in Massachusetts has a series of IP phones that are
	 connected via SIP to systems in the main office in Colorado and from
	 there via SIP connections to the PSTN through a SIP service
	 provider.</t>
	 <t>The phones in the Massachusetts office have each been assigned a
	 direct, local phone number in the US area code of 617.</t>
	 <t>This local 617 phone number is presented to callers on the PSTN
	 as the "Caller ID" based on its inclusion in the From and/or
	 P-Asserted-Identity SIP headers.</t>
	 <t>This local 617 phone number may also be used by the SIP service
	 provider as the billing identifier and the call will be charged to
	 the enterprise according to the relevant rates.</t>
	 <t>However, the call actually connected to the PSTN via the SIP
	 connection in the Colorado office where the USA area code is 303.
	 </t>
      </list>Rather than use the direct numbers of each SIP endpoint for
      generating the billing information, the enterprise might choose to
      instead pass the SIP URI of the PSTN interconnection point in the
      P-Charge-Info header, either for simplicity or potentially to obtain
      better rates from the SIP service provider.</t>

    </section>
    <section anchor="Use Case-HostedTelephonyProvider" title="Use Case -
    Hosted Telephony Provider">
      <t>Similar to the third use case of a large enterprise, a hosted 
      telephony provider or hosted voice application provider may have a 
      large SIP network with customers distributed over a very large
      geographic area using local market PSTN numbers but with only a very
      few actual PSTN interconnection points.</t>

      <t>As with the branch office earlier, the customer may have all local
      phone numbers yet outgoing calls are actually being routed across a
      SIP network and out specific PSTN gateways or across specific SIP
      connections to SIP service providers. The hosted provider may want to
      pass a billing identifier to its SIP service providers again either
      for the purpose of simplicity in billing or to obtain better rates
      from the SIP service providers.</t>

    </section>

    </section>

    <section anchor="Alternatives" title="Alternatives">

      <section anchor="P-Charging-Vector" title="P-Charging-Vector">

        <t>P-Charging-Vector is defined in section 4.6 of <xref target="RFC3455">RFC
	3455</xref> and used by the 3GPP to carry information related to
	the charging of a session. There are, however, some differences 
	in the semantics associated with P-Charging-Vector and
	P-Charge-Info.  P-Charging-Vector is mainly used to carry information for 
	correlation of multiple charging records generated for a single session. 
	On the other hand, P-Charge-Info is used to convey information about 
	the party to be billed for a call. Furthermore, P-Charging-Vector has 
	a mandatory icid-value parameter which is a globally unique value to 
	identify the session for which the charging information is generated. 
	Such a globally-unique identifier is not necessary when carrying 
	information about the user to be billed when it is attached to the 
	corresponding session-related signaling.</t>

      </section>

      <section anchor="P-DCS-Billing-Info" title="P-DCS-Billing-Info">
      <t>P-DCS-Billing-Info is defined in section 7 of <xref target="RFC3603">RFC
      3603</xref> and used for passing billing information between trusted 
      entities in the PacketCable Distributed Call Signaling Architecture.
      For many billing situations, particularly the very large-scale
      residential telephone networks for which this header is designed,
      P-DCS-Billing-Info is an excellent solution. However, this ability to
      address a range of situations adds complexity. According to RFC 3603,
      each use of the P-DCS-Billing-Info header MUST include in the header
      the following:
      <list style="symbols">
         <t>Billing-Correlation-ID, a globally unique identifier</t>
	 <t>Financial-Entity-ID</t>
	 <t>RKS-Group-ID (record keeping server</t>
      </list>
      and may include a variety of additional parameters.</t>

      <t>While this may work well in many billing scenarios, there are
      other billing scenarios that do not at all need this level of
      complexity. In those simpler scenarios all that is needed is simply a
      number to use for billing. P-Charge-Info provides this simple
      solution for simple billing scenarios.</t>

      <t>Additionally, section 7.3 of RFC 3603 mandates that a UA MUST create a
      Billing-Correlation-ID and insert this into the P-DCS-Billing-Info
      header (along with the other required information) sent in the initial 
      SIP INVITE. This again makes sense for the residential telephone
      service environment for which this header is designed. In contrast,
      P-Charge-Info is designed to be used among proxies and not to be used
      at all by normal user agents. (P-Charge-Info may, though, by used by user agents
      associated with PSTN gateways.)</t>

      </section>

      <section anchor="P-Asserted-Identity" title="P-Asserted-Identity">
      <t>Early reviewers of this document asked why the "P-Asserted-Identity"
      header documented in <xref target="RFC3325">RFC 3325</xref> could not
      be used. As mentioned in the use case example above,
      P-Asserted-Identity is used to indicate the identity of the calling
      party. However, in this instance, the requirement is to provide an
      additional identity of the SIP-to-PSTN interconnect point. </t>
      <t>It would be typical to find both P-Asserted-Identity and
      P-Charge-Info used in a SIP exchange. P-Asserted-Identity would be
      used to provide the caller identity which would be displayed to the
      end user as "Caller ID" while P-Charge-Info would provide the billing
      identifier used for the billing associated with the call.</t>

      </section>

    </section>

    <section anchor="P-Charge-Info" title="The P-Charge-Info Header">

       <section anchor="applicability" title="Applicability Statement for the P-Charge-Info header">
          <t>The P-Charge-Info header is applicable within a single private
	  administrative domain or between different administrative domains
	  where there is a trust relationship between the domains.</t>
       </section>

       <section anchor="usage" title="Usage of the P-Charge-Info header">
         <t>The P-Charge-Info header is used to convey information about
	 the identity of the party to be charged.  The P-Charge-Info header
	 is typically inserted by one of the following:<list
	 style="symbols">
	    <t>the SIP proxy on the originating network;</t>
	    <t>a PSTN gateway acting as a SIP UA; or</t>
	    <t>an application server generating billing information.</t>
	 </list></t>

              <t>P-Charge-Info is to be consumed by the SIP entity that
	      provides billing services for a session. This could be an
	      entity generating billing records or an entity interacting
	      with another enitity generating billing records. Upon receipt
	      of an INVITE request with P-Charge-Info header, such an
	      entity SHOULD use the value present in the P-Charge-Info as
	      indicating the party responsible for the charges associated
	      with the session.</t>
            <section anchor="usage-ua" title="Procedures at the UA">
	      <t>The P-Charge-Info header may be inserted by PSTN gateways
	      or application servers
	      acting as a SIP UA, either through local policy or as a
	      result of information received via PSTN signaling, e.g. the
	      Charge Number parameter in an ISUP IAM message.</t>
	      <t>The P-Charge-Info header is not used/interpreted by a
	      regular UA and should not normally be seen
	      by such a UA. If the header is transmitted to such a UA, the UA
	      SHOULD ignore the header.</t>

              <t>A PSTN gateway or application server acting as a UA MAY use 
	      the content of the P-Charge-Info header 
	      present in an INVITE request it received for billing related 
	      procedures, e.g. in a billing record or during interaction with 
	      another entity generating billing records, as the identity of 
	      the party to be charged for the session. A PSTN gateway or
	      application server acting as a UA MAY use 
	      the content of the P-Charge-Info header to populate information 
	      about the identity of the party to charge in another type of 
	      signaling, e.g. ISUP.</t>
	    </section>
	    <section anchor="usage-proxies" title="Procedures at the Proxy">
	    <t>A SIP proxy that supports this extension and receives a
	    request, typically a SIP INVITE, without the P-Charge-Info
	    header MAY insert a P-Charge-Info header. The contents of the
	    inserted header may be decided based on local policy or by
	    querying an external entity to determine the identity of the
	    party to be charged.</t>
            <t>A proxy MAY use the content of the P-Charge-Info header
	    present in an INVITE request it received for billing related
	    procedures, e.g. in a billing record or during interaction with
	    another entity generating billing records.</t>
	    <t>A SIP proxy that does not support this extension will pass
	    any received P-Charge-Info header unmodified in compliance with
	    RFC 3261.</t>
	    <t>A proxy supporting this extension SHOULD remove the
	    P-Charge-Info header before sending a request to a UA that is
	    not acting as a PSTN gateway or appropriate application server.</t>
	    </section>
       </section>

       <section anchor="example" title="Examples of Usage">
       <t>The content of the P-Charge-Info header is typically simply a SIP URI used
       as a billing indicator.  As such, an example would be as simple as:</t>
       <t>P-Charge-Info: &lt;sip:4075555555@1.2.3.4&gt;</t>
       <t>Any other applicable SIP URI could be used.</t>

       <t>P-Charge-Info optionally includes the additional parameters of
       the "Numbering Plan Indicator" and "Nature of Address".  These are used when 
       the ISUP Charge Number value needs to be passed as part of
       P-Charge-Info. For instance, this might be required in a
       SIP message for scenarios where SIP is used to connect two PSTN segments
       and needs to pass charging information between them. An example of
       the usage of the optional header is:</t>
       <t>P-Charge-Info: &lt;sip:6835555555@10.10.7.21&gt;;npi=ISDN;noa=3</t>
       </section>

    </section>
    <section anchor="formalsyntax" title="Formal Syntax">
       <t>The Private Header specified in this document is described in
   both prose and an augmented Backus-Naur Form (BNF) defined in RFC
   2234.  Further, several BNF definitions are inherited from SIP
   and are not repeated here.  Implementors need to be familiar with the
   notation and contents of SIP [1] and RFC 2234 [3] to understand this
   document.</t>
       <t>The syntax of the P-Charge-Info header is described as follows:</t>
       <figure><artwork><![CDATA[
      P-Charge-Info = "P-Charge-Info" HCOLON (name-addr / addr-spec)* 
              (SEMI charge-param)
              ; name-addr and addr-spec are specified in RFC 3261
          charge-param = npi-param / noa-param / generic-param
          npi-param = "npi" EQUAL npi-value
              ; generic-param is specifed in RFC 3261
          npi-value = ("ISDN" / "DATA" / "TELEX" / "PRIVATE" / 
                 "SPARE0" / "SPARE1" / "SPARE2" / "SPARE3" / 
                 "SPARE4" / "SPARE5" / "SPARE6" / "SPARE7" / "UNKNOWN" )
          noa-param = "noa" EQUAL noa-value
          noa-value = gen-value
       ]]></artwork></figure>


    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document defines a private SIP extension header field
      (beginning with the prefixe "P-").</t>
      <t>The extension is registered as a private extension field:</t>
      <t>RFC Number:	RFCXXXX [Note to IANA: Please fill in with the RFC number
      of this specification.</t>
      <t>Header Field Name:  P-Charge-Info</t>
      <t>Compact Form:  none</t>

    </section>

    <section anchor="Security" title="Security Considerations">
       <section anchor="TrustRelationship" title="Trust Relationship">
       <t>Given that the information contained in the P-Charge-Info header
       will be used for billing purposes the proxies and other SIP entities
       that share this information MUST have a trust relationship.</t>
       <t>If an untrusted entity were inserted between the trusted
       entities, it could potentially interfere with the billing records
       for the call.  If the SIP connections are not made over a private
       WAN, a mechanism for securing the confidentiality and integrity of
       the SIP connection should be used to protect the information. One
       such mechanism could be TLS-encryption of the SIP signaling stream.</t>
       </section>
       <section anchor="SecurityUntrustedPeers" title="Untrusted Peers">
       <section anchor="UntrustedPeersIngress" title="Ingress from
       Untrusted Peers">
       <t>If the P-Charge-Info header was accepted by a SIP entity from an
       untrusted peer, there is the potential for fraud if the untrusted
       entity sent incorrect information, either inadvertently or
       maliciously.</t>
       <t>Therefore a SIP entity MUST remove and ignore the P-Charge-Info
       header when it is received from an untrusted entity.</t>
       </section>
       <section anchor="UntrustedPeersEgress" title="Egress to
       Untrusted Peers">
       <t>If the P-Charge-Info header was sent by a SIP entity to an
       untrusted peer, there is the potential exposure of network
       information that is internal to a trust domain.  For instance, the
       untrusted entity may learn the identities of public SIP proxies used
       within the trust domain which could then potentially be directly
       attacked.</t>
       <t>Therefore a SIP entity MUST remove the P-Charge-Info
       header when it is sent to an untrusted entity.</t>
       </section>
       </section>
    </section>

    <section anchor="acknowledgements" title="Acknowledgements">
      <t>The authors thank the following people for their comments,
      criticism, suggestions and assistance with ABNF notation: Keith
      Drage, Miguel Garcia, Christer Holmberg, Paul Kyzivat, Jonathan
      Rosenberg, Juha Heinanen and Sumit Garg.</t>
      <t>For revision -05, the authors thank John Haluska who provided a
      range of comments and specific information related to interworking
      with the ISUP Charge Number.</t>
    </section>

    <section anchor="Changes" title="Changes">
      <t>NOTE TO RFC EDITOR - Please remove this "Changes" section prior to
      publication. Thank you.</t>
      <t>Revision -06 had only a minor correction to the second usage
      example. The IPR statement was also updated to comply with RFC 5378.</t>
      <t>Revision -05 included the following modifications:<list
      style="symbols">
         <t>The usage of P-Charge-Info for carrying the ISUP Charge Number
	 parameter was formally incorporated into the draft. Previous
	 revisions had mentioned it as a possible use case but had not
	 really explicitly included it.</t>
	 <t>The examples/use cases section was expanded to include further
	 examples of where P-Charge-Info may be used.</t>
	 <t>The original use case which discussed inter/intra-state billing
	 practices was changed as the geographical references were clouding
	 the more fundamental issue.</t>
	 <t>The "UNKNOWN" value was added to the ABNF for the "npi-value"
	 parameter as that was identified as missing but required for ISUP
	 interworking.</t>
	 <t>The optional "Nature of Address" parameter was added to support
	 interworking with the ISUP Charge Number.</t>
      </list></t>
      <t>Revision -04 corrected a major error in the example where the
      parameter was placed inside the angle brackets.  The
      P-DCS-Billing-Info header was also added as an alternative and a few
      minor edits were made.</t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>

    <references title="Normative References">

    &RFC3427;

    </references>

    <references title="Informative References">

    &RFC3455;
    &RFC3325;
    &RFC3603;

    </references>

  </back>
</rfc>
