<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY rfc3261 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3261.xml">
<!ENTITY rfc3966 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3966.xml">
<!ENTITY rfc3969 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3969.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc rfcedstyle="yes"?>
<?rfc subcompact="no"?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc compact='yes'?>
<rfc number="4967" category="std">
  <front>
    <title abbrev="Dialstring Parameter">Dialstring Parameter for the Session
    Initiation Protocol Uniform Resource Identifier</title>

    <author fullname="Brian Rosen" initials="B.R" surname="Rosen">
      <organization>NeuStar</organization>

      <address>
        <postal>
          <street>470 Conrad Dr</street>

          <city>Mars</city>

          <region>PA</region>

          <code>16046</code>

          <country>USA</country>
        </postal>

        <phone>+1 724 382 1051</phone>

        <email>br@brianrosen.net</email>
      </address>
    </author>

    <date month="July" year="2007" />

    <area>Real Time Applications</area>

    <workgroup>iptel</workgroup>

<!-- [rfced] Please insert any keywords (beyond those that appear in the title) for use on http://www.rfc-editor.org/search.html. -->
<keyword>example</keyword>

    <abstract>
      <t>RFC 3966 explicitly states that 'tel' URIs may not represent a dial
      string. That leaves no way specify a dial string in a standardized way.
<!-- [rfced] Please review your use of "dial string" and
"dialstring".  Both are used throughout the document.  -->
      Great confusion exists with the SIP URI parameter "user=phone", and
      specifically, if it can represent a dial string. This memo creates a new
      value for the user parameter "dialstring", so that one may specify
      "user=dialstring" to encode a dial string as a 'sip:' or 'sips:' URI.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>A user at a phone often has a limited User Interface, and in some
      cases, is limited to a 10 key pad (and sometimes a "flash" function with
      the switchhook). The user enters a series of digits that invoke some kind of
      function. The entered sequence, called a "dial string", may be
      translated to a telephone number, or it may invoke a special service. In
      many newer designs, the mapping between a dial string and a phone number
      or service URI is contained within the phone (digitmap). However, there
      are many phones and terminal adapters that do not have internal
      translation mechanisms. Without a translation mechanism in the phone,
      the phone must send the dial string in a 'sip:' or 'sips:' URI <xref
      target="RFC3261"></xref> to an intermediary that can transform the
      dial string to a phone number or a service invocation.  The intermediary 
      is able to perform this transform provided that it knows the context 
      (i.e., dialing plan) within which the number was dialed.</t>

      <t>There is a problem here. The intermediary can apply its transformation 
      only if it recognizes that the user part of the SIP URI is a dial string. 
      However, there is currently no way to distinguish a user part consisting 
      of a dial string from a user part that happens to be composed of characters 
      that would appear in a dial string.</t>

      <t>Use of DTMF (dual tone multi-frequency) detectors after the initial number has been dialed is not uncommon. A common function
      some systems have is to express a string that incorporates fixed time
      delays, or in some cases, an actual "wait for call completion" after which
      additional DTMF signals are emitted. For example, many voicemail systems
      use a common phone number, after which the system expects the desired
      mailbox number as a series of DTMF digits to deposit a message for. Many gateways have the
      ability to interpret such strings, but there is no standardized way to
      express them, leading to interoperability problems between
      endpoints.  This is another case where the ability to indicate
      that a dialstring is being presented would be useful.</t>
    </section>

    <section title="Terminology">
      <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"></xref>.</t>
      <t>It is assumed that the reader is familiar with the terminology and acronyms defined in <xref
      target="RFC3261"></xref>.</t>
    </section>

    <section title="Requirements">
      <t>A mechanism to express a dial string in a 'sip:' or 'sips:' URI is required.
      A dial string consists of a sequence of <list style="hanging">
          <t hangText="*">the digits 0-9</t>

          <t hangText="*">the special characters # and *</t>

          <t hangText="*">the DTMF digits A-D</t>

          <t hangText="*">characters representing a short pause, and a "Wait for call
             completion" in a dial string</t>
      </list></t>

      <t>  Note: DTMF = dual tone multi-frequency. Each "tone:" is actually two
      frequencies superimposed. DTMF is a 4 x 4 matrix with four row
      frequencies (697, 770, 852, 941 Hz) and four column frequencies (1209,
      1336, 1477, 1633<!-- [rfced] AQ: Unit of measurement? Hz?-->). Most telephones only implement 3 of the 4 columns,
      which are used just as the telephone dial pad implies. Thus,
      the digit 2 is the first row, second column, and consists of 770Hz and
      1209Hz frequencies mixed together. The fourth column is not used in the
      PSTN (Public Switched Telephone Network). The "digits" for the fourth column are usually expressed using the
      letters A through D. Thus, "C" is 852/1633Hz. Some equipment do use
      these digits, so we include them in the definition of the
      dial string.</t>



      <t>A dial string always exists within a context. The context MUST be
      specified when expressing a dial string.</t>

      <t>It MUST be possible to distinguish between a dial string and a user 
      part that happens to consist of the same characters.</t>

    </section>

    <section title="Solution">
      <t>A new alternative value for the "userinfo" parameter of the 'sip:' or 'sips:' URI schemes is
      defined, "dialstring". This value may be used in a 'sip:' or 'sips:' URI when
      the user part is a dial string. The dialstring is a sequence of the
      characters 0-9, A-F, P, X, '*' and '#'. E represents *, F represents #, P is a
      pause (short wait, like a comma in a modem string) and X represents "wait for call completion".</t>

      <t>When the "user=dialstring" is used, a context parameter, as defined in
      <xref target="RFC3966"></xref>, MUST be specified.  The context parameter would normally be a domain name.
      The domain name does not have to resolve to any actual host but MUST
      be under the administrative control of the entity managing the local
      phone context. The context parameter value is normally configured in the user agent.</t>

      <figure><preamble>The syntax of the context parameter follows the same conventions as the same parameter in 
      <xref target="RFC3966"></xref>, that is, it appears between the
      digits and the "@" in the userinfo 
      <xref target="RFC3261"></xref> of the URI:</preamble>
<artwork><![CDATA[
    dialstring = dialstring-digits context; context from RFC 3966
    dialstring-digits = *dialstring-element dialstring-digit 
               *dialstring-element
    dialstring-digit = HEXDIG / "*" / "#"; HEXDIG from RFC 3966
    dialstring-element =  dialstring-digit  / "P" / "X" /
               visual-separator; visual-separator from RFC 3966
]]></artwork></figure>
      <t>A dialstring SHOULD NOT be used for an AoR (Address of Record) in a REGISTER.  Parameters are ignored in registration.  
      Thus, two registrations with different phone-contexts would be considered equivalent, which is probably
      not desirable.</t>

      <t>A proxy server or Back to Back User Agent (B2BUA) <xref
      target="RFC3261"></xref>, which is authoritative for the context, may
      translate the dial string to a telephone number or service invocation
      URI. The telephone number MAY be expressed as a global or local tel: URI, or it MAY be left as as a sip: or sips: URI with
      the URI parameter value changed from "user=dialstring" to "user=phone".</t>
      <figure>
          <preamble>Examples of dialstring use include:</preamble>

          <artwork><![CDATA[  
   ;what a SIP Phone might emit when a user dials extension 123
sip:123;phone-context=atlanta.example.com@example.com;user=dialstring
   
   ;existing voicemail systems have a local access extension, 
   ;then expect to see the extension number as DTMF for the mailbox
sip:450X123;phone-context=biloxi.example.com@example.com;user=dialstring
   ]]></artwork>

          <postamble></postamble>
        </figure>
    </section>

    <section title="IANA Considerations">
      <t><xref target="RFC3969"></xref> defines a 'sip:' or 'sips:' URI Parameter sub
      registry. The "user" parameter is specified as having predefined
      values.</t>

      <t>This RFC defines a new value for the "user" parameter, "dialstring".
      This RFC has been added to the references listed for the "user"
      parameter.</t>

    </section>

    <section anchor="security" title="Security Considerations">
      <t>Dialstrings exposed to the Internet may reveal information about
      internal network details or service invocations that could allow
      attackers to use the PSTN or the Internet to attack such internal
      systems. Dialstrings normally SHOULD NOT be sent beyond the
      domain of the UAC (User Agent Client).  
      If they are sent across the Internet, they SHOULD be protected against eavesdropping 
      with TLS (Transport Layer Security) per the procedures in <xref target="RFC3261"></xref>.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      &rfc2119;

      &rfc3261;

      &rfc3966;
      &rfc3969;
    </references>
  </back>
</rfc>
