<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC2119 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3261 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3261.xml">
<!ENTITY RFC3458 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3458.xml">
<!ENTITY RFC3550 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3550.xml">
<!ENTITY RFC3665 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3665.xml">
<!ENTITY RFC3842 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3842.xml">
<!ENTITY RFC3966 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3966.xml">
<!ENTITY RFC4102 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4102.xml">
<!ENTITY RFC4103 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4103.xml">
<!ENTITY RFC4585 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4585.xml">
<!ENTITY RFC4733 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4733.xml">
<!ENTITY RFC4961 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4961.xml">
<!ENTITY RFC4967 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4967.xml">
<!ENTITY RFC5104 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5104.xml">
<!ENTITY RFC5168 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5168.xml">
<!ENTITY RFC5194 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5194.xml">
<!ENTITY RFC5245 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5245.xml">
<!ENTITY RFC5246 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5246.xml">
<!ENTITY RFC5389 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5389.xml">
<!ENTITY RFC5626 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5626.xml">
<!ENTITY RFC5766 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5766.xml">
<!ENTITY RFC5870 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5870.xml">
<!ENTITY RFC5986 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5986.xml">
<!ENTITY RFC6011 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6011.xml">
<!ENTITY RFC6184 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6184.xml">
<!ENTITY RFC6351 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6351.xml">
<!ENTITY RFC6352 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6352.xml">
<!ENTITY RFC6442 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6442.xml">
<!ENTITY RFC6764 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6764.xml">
<!ENTITY RFC6881 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6881.xml">
<!ENTITY RFC7159 PUBLIC '' "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7159.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-vrs-rue-dispatch-00" ipr="trust200902">

<!-- ***** FRONT MATTER ***** -->

 <front>
   <title abbrev="RUE Profile">Interoperability Profile for Relay User Equipment (RUE)</title>

   <!-- add 'role="editor"' below for the editors if appropriate -->

   <!-- Another author who claims to be an editor -->

   <author fullname="Paul Kyzivat" initials="P." role="editor"
           surname="Kyzivat">
     <organization></organization>

     <address>
       <email>pkyzivat@alum.mit.edu</email>

       <!-- uri and facsimile elements may also be added -->
     </address>
   </author>

   <author fullname="Henning Schulzrinne" initials="H." role="editor"
           surname="Schulzrinne">
     <organization>FCC</organization>

     <address>
       <postal>
         <street>450 12th Street SW</street>
         <city>Washington</city>
         <region>DC</region>
         <code>20554</code>
         <country>US</country>
       </postal>

       <phone></phone>

       <email>schulzrinne@cs.columbia.edu</email>

       <!-- uri and facsimile elements may also be added -->
     </address>
   </author>

   <date year="2016" />

   <!-- Meta-data Declarations -->

   <area>ART</area>
   <workgroup>DISPATCH</workgroup>

   <keyword>SIP</keyword>
   <keyword>deaf</keyword>
   <keyword>hard-of-hearing</keyword>
   <keyword>relay service</keyword>
   <keyword>VRS</keyword>
   <keyword>IP-CTS</keyword>

   <abstract>
     <t>
        This document defines and specifies a protocol profile defining an interface between a relay
        service endpoint used by a deaf or hard-of-hearing user
        and a relay service.
     </t>
   </abstract>
 </front>
<!-- *********************************************************************** -->
 <middle>
<section title="Introduction">

	<t>Video Relay Service (VRS) is a form of Telecommunications Relay Service (TRS) that enables persons with hearing disabilities who use sign language, such as American Sign Language (ASL), to
        communicate with voice telephone users through video equipment.
	These services also enable communication between such
	individuals directly in suitable modalities, including any
	combination of sign language via video, real-time text (RTT)
	and speech.</t>

	<t>This Relay User Equipment (RUE) profile is a profile of the
	Session Initiation Protocol (SIP) and related media protocols
	which enables end-user equipment registration and calling for
	video relay service (VRS) calls.  It specifies the minimal set
	of call flows, IETF and ITU-T standards that must be
	supported, provides guidance where the standards leave
	multiple implementation options, and specifies minimal and
	extended capabilities for RUE calls.</t>

	<t>This RUE profile supports the requirements of relay
	services in the United States, as described in 47 CFR 64.601
	et seq., but may be applicable to similar uses elsewhere.</t>

</section>

<section title="Scope">

  <t>This document defines a standard interface
  between a RUE and the services offered by relay service (RS)
  providers.  This document does not enumerate the features that the RUE
  or relay service provider must support to meet, for example, national
  regulatory requirements.</t>

</section>

<section title="Terminology">
  <t><list style="hanging">
	<t hangText="Communication Assistant (CA):">The American
	Sign Language (ASL) interpreter stationed in a TRS registered
	call center working for a VRS provider, acting as part of the
	wire of a call to provide functionally equivalent phone
	service.</t>

	<t hangText="Communication modality (modality):">A
	particular form of communication that may be employed by two
	users, e.g., English voice, Spanish voice, American
	Sign Language, English lip reading, French real-time-text,
	or English MSRP instant messaging.  Here, one communication
	modality is assumed to encompass both the language and the
	manner in which that language is exchanged.  For example,
	English voice and French voice are two different communication
	modalities.</t>

	<t hangText="Default video relay service:">The video relay
	service operated by a subscriber's default video relay service
	provider.</t>

  <t hangText="Default video relay service provider (default provider):">The video relay service provider that registers, and
  assigns a telephone number to, a specific subscriber.  A subscriber's
  default provider provides the video relay service that handles
  incoming relay calls to the user.  It also handles outgoing relay
  calls by default.</t>

  <t hangText="Dial-around call:"> A relay call where the subscriber
  specifies the use of a video relay service provider other than one of
  the providers the subscriber is registered with.  This can be
  accomplished by the user dialing a "front-door" number for a VRS
  provider and signing or texting a phone number to call ("two-stage")
  or by the user's RUE software instructing the server of its default
  VRS provider to automatically route the call through the alternate
  provider to the desired PSTN directory number ("one-stage").</t>

  <t hangText="Full Intra Request (FIR):">A request to a media sender,
  requiring that media sender to send a Decoder Refresh Point at the
  earliest opportunity.  FIR is sometimes known as "instantaneous
  decoder refresh request"; "video fast update request"; or "fast update
  request".</t>

  <t hangText="NANP:">North America Numbering Plan (see:
  http://nationalnanpa.org)</t>

  <t hangText="Point-to-Point Call (P2P Call):">A call between two RUEs,
  without including a CA.</t>

  <t hangText="PSTN UE:">User equipment (UE) that interfaces with a
  human being via the PSTN, and mediates communication via voice.  A
  telephone.</t>

  <t hangText="PSTN user:">An individual using PSTN UE.</t>

  <t hangText="Relay call:">A call that allows persons with hearing or
  speech disabilities to use a RUE to talk to users of traditional voice
  services with the aid of a communication assistant (CA) to relay the
  communication.  See [FCC-VRS-GUIDE].</t>

  <t hangText="Relay number database (RND):">The iTRS Relay Number
  Database (RND) functions as a 10-digit NANP phone number lookup for
  SIP and H.323 URLs for TRS subscribers.</t>

  <t hangText="Relay-to-relay call:">A call between two subscribers each
  using different forms of relay (video relay, IP relay, TTY), each with
  a separate communication assistant to assist in relaying the
  conversation.</t>

  <t hangText="Relay service (RS):">A service that allow a registered
  subscriber to use a RUE to make and receive relay calls,
  point-to-point, and relay-to-relay calls.  The functions provided by
  the relay service include the provision of media links supporting the
  communication modalities used by the caller and callee, user
  registration and validation, authentication, authorization, automatic
  call distributor (ACD) platform functions, routing (including
  emergency call routing), call setup, mapping, call features (such as
  call forwarding and video mail), and assignment of CAs to relay
  calls.</t>

  <t hangText="Relay service provider:">An organization that operates a
  relay service.  A subscriber selects a relay service provider to
  assign and register a telephone number for their use, to register with
  for receipt of incoming calls, and as the default service for outgoing
  calls.</t>

  <t hangText="Relay user:">See subscriber.</t>

	<t hangText="Relay user E.164 Number (user E.164):">The telephone
  number assigned to the RUE, in ITU-T E.164 format.</t>

	<t hangText="Relay user equipment (RUE):">A SIP user agent (UA)
  enhanced with extra features to support a subscriber in requesting and
  using relay calls.  A RUE may take many forms, including a stand-alone
  device, an application running on a general-purpose computing device
  such as a laptop, tablet or smart phone, or proprietary equipment
  connected to a server that provides the RUE interface.</t>

	<t hangText="Sign language:">A language which uses hand
	gestures and body language to convey meaning, including but
	not limited to American Sign Language (ASL).</t>

	<t hangText="Subscriber:"> An individual that has registered
	with a relay service provider, and who obtains service by
	using relay user equipment.  This is the traditional telecom
	term for an end-user customer, in our case, a relay user.</t>

	<t hangText="Telecommunications relay services (TRS):"> (from
	the FCC):  "Telephone transmission services that provide the
	ability for an individual who has a hearing or speech
	disability to engage in communication by wire or radio with a
	hearing individual in a manner that is functionally equivalent
	to the ability of an individual who does not have a hearing or
	speech disability to communicate using voice communication
	services by wire or radio.  Such term includes services that
	enable two-way communication between an individual who uses a
	text telephone or other nonvoice terminal device and an
	individual who does not use such a device, speech-to-speech
	services, video relay services and non-English relay
	services."</t>

	<t hangText="Video relay service (VRS):"> A relay service for
	people with hearing or speech disabilities who use sign
	language to communicate using video equipment (video RUE) with
	other people in real time.  The video link allows the CA to
	view and interpret the subscriber's signed conversation and
	relay the conversation back and forth with the other
	party.</t>

  </list></t>
</section>

<section anchor="normative" title="Normative 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 BCP 14, RFC 2119
   <xref target="RFC2119"/>.</t>

   <t>In many portions of this
   document, the document specifies a required implementation for an
   optional feature; i.e., that a provider's systems MAY implement a
   specific feature, and if they do, they MUST implement it in a
   specific way, in order to implement the functionality provided
   through this document.</t>

</section>

<section anchor="general" title="General Requirements">

   <t>All HTTP/HTTPS connections specified throughout this document
   MUST use HTTPS, and MUST use TLS 1.2 <xref target="RFC5246"/> or later, 
   using a server-side certificate. </t>

   <t>During the establishment of a TLS connection with a
   provider the RUE MAY be asked by the server for a
   client certificate. In that case it SHOULD provide a client certificate.
   Providers MAY reject requests that fail to provide a recognized certificate.</t>

   <t>RUEs MUST include a "User-Agent" 
   header field uniquely identifying the RUE application, 
   platform and version in all SIP requests, and MUST include a "Server"
   header field with the same content in SIP responses. </t>

   <t>All text data payloads not otherwise constrained by a
   specification in another standards document MUST be encoded as
   Unicode UTF/8.</t>

</section>

<section anchor="initial" title="Initial Selection, Configuration and Registration">

  <section anchor="provider-selection" title="RUE Provider Selection">

        <t>In order to allow the user to select a relay service, the RUE
        SHALL obtain, on startup, a list of providers from a publicly
        accessible URL, e.g., hosted by the national regulatory agency.
        This provider will be used for outbound calls; the provider
        chosen for inbound calls is determined by the user's' E.164
        number.</t>

        <t>The provider list, formatted as JSON, contains:</t>

        <t><list style="hanging">

          <t hangText="version:">
               Specifies the version number of the provider list format. 
               A new version number SHOULD only be used 
               if the new version is not backwards-compatible with the older version. 
               A new version number is not needed if new elements are optional and 
               can be ignored by older implementations.</t>

          <t hangText="providers:">
               An array where each entry describes one provider. 
               Each entry consists of the following items: </t>

          <t hangText="name:"> This parameter contains the text label identifying the
          provider and is meant to be displayed to the human VRS user.</t>

          <t hangText="domain:"> The domain parameter is
          used for configuration purposes by the RUE (as discussed in
          <xref target="configuration"/>) and also as the domain to
          use when targetting one-stage dial-around calls to this provider
          (as discussed in <xref target="one-stage"/>).</t>

          <t hangText="operator:"> (Optional) The operator parameter is a 
          SIP URL that identifies the operator "front-door" that VRS users may 
          contact for manual (two-stage) dial-around calls.</t>

        </list></t>

        <t>The VRS user interacts with the RUE to select from the provider
        list one or more providers with which the user has already established
        an account.</t>

    <figure anchor="provider-list-example" title="Example of a provider list">
        <artwork type="json">
<![CDATA[
{
  "version": 1,
  "providers": [
    {
      "name": "Red",
      "domain": "red.example.net",
      "operator": "sip:operator@red.example.net"
    },
    {
      "name": "Green",
      "domain": "green.example.net",
      "operator": "sip:+18885550123@green.example.net;user=phone"
    },
    {
      "name": "Blue",
      "domain": "blue.example.net"
    }
  ]
}
]]>
  </artwork>
</figure>

  </section>

  <section anchor="configuration" title="RUE Configuration Service">

    <t>The RUE uses the following steps
    to obtain the configuration for each selected provider:</t>

    <t><list style="symbols">

      <t>The RUE follows the mechanism described in <xref target="RFC6011"/>
      to construct a Configuration Request URL.</t>

      <t>The RUE MUST use a <spanx style="verb">domain</spanx> specified in the
      Provider List as the Configuration Service Domain,
      taking precedence over other techniques specified in
      <xref target="RFC6011"/> for discovering the domain.</t>

      <t>If the HTTPS request to the Configuration Service URL results
      in an authentication challenge, and the RUE has not cached credentials
      that satisfy the challenge, then it MUST interact with the VRS user
      for a userid and password with which to satisfy the challenge.
      The RUE MAY then cache resulting digest credentials, but MUST NOT
      cache the password.</t>

    </list></t>

    <t>This document extends <xref target="RFC6011"/> by describing
    a format for the configuration data.</t>

    <t>The data returned will include a set of key/value configuration
    parameters to be used by the RUE, formatted as a JSON object and
    identified by the associated <xref target="RFC7159"/>
    "application/json" MIME type to allow for other formats in the
    future.</t>

    <t>(As specified in section 2.3.2.1 of <xref target="RFC6011"/> the query
    for the configuration includes parameters that identify the RUE.
    The provider's configuration service MAY use these parameters to
    select distinct configurations for each RUE the user uses.)</t>

    <t>The configuration data payload includes
    the following data items. Items not noted as (Optional) are REQUIRED.
    If other, unexpected, items are found they MUST be ignored.</t>

    <t>
        <list style="hanging">
            <t hangText="version:"> 
               Identifies the version of the configuration data format. 
               A new version number SHOULD only be used 
               if the new version is not backwards-compatible with the older version. 
               A new version number is not needed if new elements are optional and 
               can be ignored by older implementations.</t>
            <t hangText="lifetime:"> 
               Specifies how long (in seconds) the RUE MAY cache the configuration values.</t>
            <t hangText="display-name:">  
               (Optional) An user-friendly name to identify the subscriber when originating calls.</t>
            <t hangText="phone-number:">  
               The telephone number (in E.164 format) assigned to this subscriber.
               This becomes the user portion of the SIP URI identifying the subscriber.</t>
            <t hangText="provider-domain:">  
               The DNS domain name of the default provider servicing this subscriber.</t>
            <t hangText="outbound-proxies:">  
               (Optional) A list of URIs of SIP proxies to be used when sending requests the provider.
               Multiple URIs identify alternative (redundant) paths to to provider.</t>
            <t hangText="mwi:">  
               (Optional) A URI identifying a SIP event server that generates 
               <spanx style="verb">message-summary</spanx> events for this subscriber. </t>
            <t hangText="videomail:">  
               (Optional) a SIP URI that can be called to retrieve videomail messages.</t>
            <t hangText="contacts:">  
               An HTTPS URI that may be used to export (retrieve) the subscriber's complete 
               contact list managed by the provider.</t>
            <t hangText="carddav:">  
               (Optional) A username and domain name (separated by "@") identifying a 
               "CardDAV" server and user name that can be used to synchronize the RUE's contact list 
               with the contact list managed by the provider.</t>
            <t hangText="ice-servers:"> 
               (Optional) An array of URLs identifying STUN and TURN servers available for use
               by the RUE for establishing media streams in calls via the provider. </t>
            <t hangText="credentials:"> 
               (Optional) An array of sets of credentials available for use in responding to 
               SIP, HTTP, STUN, and TURN digest authentication challenges from specified realms. 
               Each set consists of the following items:
               <list style="hanging">
                  <t hangText="realm:">
                     The realm to which this set of credentials applies.</t>
                  <t hangText="username:">
                     The username field to be used in responding to a challenge.</t>
                  <t hangText="password:">
                     The password to use in generating the response to the challenge.</t>
               </list>
               </t>
        </list>
    </t>

    <t>Below is an example configuration payload.</t>

    <t>NOTE: For document formatting reasons long quoted strings have
    been broken into multiple quoted strings separated by whitespace.
    This is solely for publication reasons - it is not valid JSON syntax.</t>

<figure anchor="RUE-config-example" title="Example RUE configuration JSON object">
      <artwork type="json">
<![CDATA[
{
      "version": 1,
      "lifetime": 86400,
      "display-name" : "Bob Smith",
      "phone-number": "+18135551212",
      "provider-domain": "red.example.net",
      "outbound-proxies": [
         "sip:p1.red.example.net",
         "sip:p2.red.example.net"
      ],
      "mwi": "sip:+18135551212@red.example.net",
      "videomail": "sip:+18135551212@vm.red.example.net",
      "contacts": "https://red.example.net:443/contacts"
                  "/export/xcard" ,
      "carddav": "bob@red.example.com" ,
      "ice-servers": [
        "uri": "stun:stun.l.google.com:19302",
        "uri": "turn:turn.red.example.net:3478"
      ],
      "credentials": [
        {
          "realm": "red.example.net",
          "username": "bob",
          "password": "reg-pw"
        },
        {
          "realm": "proxies.red.example.net",
          "username": "bob",
          "password": "proxy-pw"
        },
        {
          "realm": "cd.red.example.net",
          "username": "bob",
          "password": "cd-pw"
        },
        {
          "realm": "vm.red.example.net",
          "username": "bob",
          "password": "vm-pw"
        },
        {
          "realm": "stun-turn.red.example.net",
          "username": "bob",
          "password": "stun-turn-pw"
        }
      ]
}
]]>
      </artwork>
    </figure>

    <t>The wire format of the data is in keeping with the standard JSON
    description in <xref target="RFC7159"/>.</t>

    <t>The <spanx style="verb">lifetime</spanx>
    parameter in the configuration indicates how long
    the RUE MAY cache the configuration values, but MUST do so in a
    cryptographically protected way. The RUE SHOULD retrieve
    a fresh copy of the configuration before the lifetime expires, or as
    soon as possible after it expires. However the lifetime is not
    guaranteed - the configuration may change before the lifetime
    value expires. In that case the provider MAY indicate this by
    generating authorization challenges to requests and/or prematurely
    terminating a registration.</t>

    <t>NOTE: In some cases retrieval of a fresh copy of the configuration
    may be successfully accomplished using digest credentials
    cached from the prior retrieval. 
    If this is not the case, then it will be necessary to interact with the user
    to ask her for the user name and password. 
    Unfortunately, this authentication step might occur when the user
    is not present, preventing SIP registration and thus incoming calls. 
    To avoid this situation, the RUE MAY want to
    retrieve a new copy of the configuration when it knows the user
    is present, even when there is still plenty of time before the lifetime expires.</t>

  </section>
  <section anchor="schemas" title="JSON Schemas">

    <t>Below are JSON schemas for the Provider List and the RUE Configuration.
    These are represented using the JSON Content Rules 
    <xref target="JCR"/> schema notation. </t>

    <figure anchor="provider-list-schema" title="Provider list JSON schema">
      <artwork type="jcr">
<![CDATA[
{
  "version": 1,
  "providers": [
    1*
    {
      "name": string,
      "domain": fqdn,
      ?"operator":           ; "front-door" access to provider
          uri,               ; (sip uri)
      * /^.*$/ : any         ; (allow future extensions)
    }
  ] ,
  * /^.*$/ : any             ; (allow future extensions)
}
]]>
      </artwork>
    </figure>


    <figure anchor="config-schema" title="RUE configuration JSON schema">
      <artwork type="jcr">
<![CDATA[
{
      "version": 1,            ; Interface version
      "lifetime": integer,     ; Deadline (in seconds) for 
                               ; refreshing this config without 
                               ; user input.
      "phone-number": /^\+[0-9]+$/ , ; E.164 phone number
                               ; for this user
      ?"display-name" : string,; display name for From: header
      "provider-domain": fqdn, ; SHOULD match that in Provider List
      ?"outbound-proxies": [ 1* : uri ], ; sip URIs
      ?"mwi": uri ,            ; sip URI for MWI subscriptions
      ?"videomail": uri ,      ; sip URI for videomail retrieval
      "contacts": uri ,        ; https URI for contact list retrieval
      ?"carddav": /^[^@]+@[^@]+$/ , ; for contact list synch
      ?"ice-servers":          ; (Required for ICE use)
         [ 1* : uri ],         ; (stun[s] & turn[s] URIs 
      ?"credentials":          ; for digest authentication
      [ 1* {
          "realm": string,
          "username": string,
          "password": string
      } ],
      * /^.*$/ : any           ; (allow future extensions)
}
]]>
      </artwork>
    </figure>

    <t><xref target="config-flow"/> illustrates the message flow for retrieving a configuration.</t>

<figure anchor="config-flow" title="Diagram of RUE automatic configuration using
    HTTPS Digest authentication">
    <artwork>
<![CDATA[
     ,-.
     `-'
     /|\     ,---.  ,---.  ,------------. ,----------------.  ,---.
      |      |RUE|  |DNS|  |HTTPS Server| |   Provider     |  |CRM| 
     / \     |   |  |   |  |            | |Global Settings |  |   |
  RUE User   `-+-'  `-+-'  `-----+------' `--------+-------'  `-+-'
     |         |      |          |                 |            |
[1] Select a VRS Provider name   |                 |            |
     | ------->|      |          |                 |            |
     |         |      |          |                 |            |
[2] NAPTR "SFUA.CFG" red.example.net               |            |
     |         |----->|          |                 |            |
     |         |      |          |                 |            |
[3] NAPTR "!.*!https://server.red.example.net/!"   |            |
     |         |<-----|          |                 |            |
     |         |      |          |                 |            |
[4] If NAPTR found, query DNS server.red.example.net            |
     |         |----->|          |                 |            |
     |         |      |          |                 |            |
[5] If NXDOMAIN, query DNS config.red.example.net  |            |
     |         | - - >|          |                 |            |
     |         |      |          |                 |            |
[6] IP Address of Config Server  |                 |            |
     |         |<-----|          |                 |            |
     |         |      |          |                 |            |
[7] Establish TLS connection     |                 |            |
     |         |<--------------->|                 |            |
     |         |      |          |                 |            |
[8] HTTP: https://config.red.example.net/v1        |            |
     |         |---------------->|                 |            |
     |         |      |          |                 |            |
[9] HTTP: 401 Unauthorized       |                 |            |
    WWW-Authenticate Digest realm="Y" qop="auth,auth-int" nonce=|
     |         |<----------------|                 |            |
     |         |      |          |                 |            |
[10] Query for userid/pw         |                 |            |
     |<--------|      |          |                 |            |
     |         |      |          |                 |            |
[11] User="bob", pw="bob's global provider pw"     |            |
     |-------->|      |          |                 |            |
     |         |      |          |                 |            |
[12] HTTP: https://config.red.example.net/v1       |            |
     | Authorization Digest username="bob" realm="Y" qop="auth" |
     | nonce=... response="..." ...                |            |
     |         |---------------->|                 |            |
     |         |      |          |                 |            |
     |   [13] Find subscriber information for username="bob"    |
     |         |      |          |----------------------------->|
     |         |      |          |                 |            |
     |   [14] Subscriber specific configuration information     |
     |         |      |          |<-----------------------------|
     |         |      |          |                 |            |
     |   [15] Retrieve provider specific settings               |
     |         |      |          |---------------->|            |
     |         |      |          |                 |            |
     |   [16] Provider configuration information   |            |
     |         |      |          |<----------------|            |
     |         |      |          |                 |            |
[17] 200 OK + JSON merge subscriber + provider configs          |
     |         |<----------------|                 |            |
     |         |      |          |                 |            |
  RUE User   ,---.  ,---.  ,------------. ,----------------.  ,---.
     ,-.     |RUE|  |DNS|  |HTTPS Server| |   Provider     |  |CRM|
     `-'     |   |  |   |  |            | |Global Settings |  |   |
     /|\     `-+-'  `-+-'  `-----+------' `--------+-------'  `-+-'
      |
     / \
]]>
</artwork></figure>

</section>
</section>

<section anchor="registration" title="RUE SIP Registration">

  <t>The RUE MUST register with a SIP registrar, following <xref target="RFC3261"/> and
  <xref target="RFC5626"/> and MUST use SIP-over-TLS.
  If the configuration contains multiple
  <spanx style="verb">outbound-proxies</spanx>,
  then the RUE MUST use them as specified in <xref target="RFC5626"/>
  to establish multiple flows. </t>

  <t>The request-URI for the REGISTER request MUST contain the
  <spanx style="verb">provider-domain</spanx> from the configuration.
  The To-URI and From-URI MUST be identical URIs, formatted as specified in
  <xref target="uri"/>, using the <spanx style="verb">phone-number</spanx> and
  <spanx style="verb">provider-domain</spanx> from the configuration.</t>

  <t>The URI to be resolved by the RUE for sending the REGISTER request
  (from <spanx style="verb">outbound-proxies</spanx> if present, else the
  request-URI) MUST have a domain that is provisioned in DNS with NAPTR
  records that specify TLS as the preferred transport for SIP. For example
  a DNS NAPTR query for
  <spanx style="verb">sip:p1.red.example.net</spanx>
  could return:</t>

  <figure><artwork>
<![CDATA[
   IN NAPTR 50  50 "s" "SIPS+D2T" "" _sips._tcp.p1.red.example.net.
   IN NAPTR 90  50 "s" "SIP+D2T"  "" _sip._tcp.p1.red.example.net
   IN NAPTR 100 50 "s" "SIP+D2U"  "" _sip._udp.p1.red.example.net.
]]>
  </artwork></figure>

  <t>If the RUE receives a 439 (First Hop Lacks Outbound Support) response
  to a REGISTER request, it MUST re-attempt registration
  without using the outbound mechanism.</t>

  <t>The registrar MUST authenticate using SIP MD5 digest authentication. The credentials
  to be used (username and password) MUST be supplied within the credentials section
  of the configuration, identified by the realm the registrar uses in a digest challenge.
  This username/password combination SHOULD NOT be the same as that used for other purposes,
  such as retrieving the RUE configuration or logging into the provider's customer
  service portal.</t>

  <t>If the registration request fails with an indication that credentials
  from the configuration are invalid, then the RUE SHOULD retrieve a fresh
  version of the configuration. If credentials from a freshly retrieved configuration
  are found to be invalid, then the RUE MUST cease attempts to register and SHOULD
  inform the RUE User of the problem.</t>

  <t>Multiple simultaneous RUE SIP registrations from different RUE
  devices with the same SIP URI SHALL be permitted by the VRS
  provider. The provider MAY limit the total number of simultaneous registrations.
  When a new registration request is received that
  results in exceeding the limit on simultaneous registrations, the provider
  MAY then prematurely terminate another registration. However it SHOULD NOT do this
  when it would cause an active call to be disconnected.</t>

  <t>If a provider prematurely terminates a registration in order to reduce the
  total number of concurrent registrations with the same URI, it SHOULD take some
  action to prevent the affected RUE from automatically re-registering. For example,
  it could change the registration username/password and revoke cached authorization
  data so that further attempts by this RUE (or all RUEs) to register with this URI will require
  the end user of the RUE to re-login before it can fetch a configuration
  containing the new userid/password.</t>

<figure anchor="registration-flow" title="RUE SIP registration message flow">
  <artwork>
<![CDATA[
    ,-+-.   ,-+-.  ,------+------.
    |RUE|   |DNS|  |SIP Registrar|
    `-+-'   `-+-'  `------+------'
      |       |           |
[1] Look up SRV DNS for _sip._tls.red.example.net
      |------>|           |
      |       |           |
[2] SRV DNS response with red.example.net:5061
      |<------|           |
      |       |           |
[3] Look up DNS A/CNAME for red.example.net
      |------>|           |
      |       |           |
[4] IP Address(es) of SIP REGISTRAR Server(s)
      |<------|           |
      |       |           |
[5] Establish TLS connection to registrar
      |<----------------->|
      |       |           |
[6] SIP: REGISTER sip:red.example.net
    To: sip:+18135551212@red.example.net;...
    From: sip:+18135551212@red.example.net;...
      |------------------>|
      |       |           |
[7] SIP: 401 Unauthorized
    WWW-Authenticate Digest realm="read.example.net" 
      |  qop="auth,auth-int" nonce=...
      |<------------------|
      |       |           |
[8] SIP: REGISTER sip_username@sip_domain
    Authorization Digest username="bob" realm="red.example.net"
      |  qop="auth" nonce=... response="..."
      |------------------>|
      |       |           |
[9] 200 OK    |           |
      |<------------------|
      |       |           |
    ,-+-.   ,-+-.  ,------+------.
    |RUE|   |DNS|  |SIP Registrar|
    `---'   `---'  `-------------'
]]>
  </artwork>
</figure>

</section>

<section anchor="nat" title="NAT Traversal">

  <t>The RUE SHALL support ICE <xref target="RFC5245"/> and SHALL be able to use STUN
  <xref target="RFC5389"/> and TURN <xref target="RFC5766"/> servers, when provided,
  to generate ICE candidates. If a STUN or TURN server issues a challenge for
  digest credentials, the RUE MUST attempt to continue using matching 
  <spanx style="verb">credentials</spanx> from the configuration. </t>

  <t>Providers MAY operate STUN and TURN servers for RUEs to use (see
  <xref target="configuration"/> for configuration). 
  Alternatively, providers MAY use media relaying for all relay and point-to-point
  calls.</t>

  <t>The RUE MUST support SIP outbound <xref target="RFC5626"/>
  (also see <xref target="registration"/>).</t>

</section>

<section anchor="CardDAV" title="RUE CardDAV Login and Synchronization">

     <t>A RUE MUST be able to synchronize
     the user's contact directory between the RUE endpoint and one
     maintained by the user's VRS provider using CardDAV 
     (<xref target="RFC6352"/> and <xref target="RFC6764"/>). </t>

     <t>Support of CardDAV by providers is OPTIONAL. </t>

     <t>The provider MAY include a <spanx style="verb">carddav</spanx> item in 
     the configuration to supply a username and domain identifying a CardDAV 
     server and address book for this account.
     If no <spanx style="verb">carddav</spanx> item is present,
     the RUE SHOULD use the <spanx style="verb">phone-number</spanx> and 
     <spanx style="verb">provider-domain</spanx>.</t>

     <t>To access the CardDAV server and address book, the RUE
     MUST follow section 6 of <xref target="RFC6764"/>, using the
     chosen username and domain in place of an email address.
     If the request triggers a challenge for digest authentication
     credentials, the RUE MUST attempt to continue using matching 
     <spanx style="verb">credentials</spanx> from the configuration.
     If no matching credentials are configured, the RUE MAY query the user. </t>

     <t>Synchronization using CardDAV SHALL be a two-way
     synchronization service, properly handling asynchronous adds,
     changes, and deletes at either end of the transport channel. </t>

     <t><xref target="carddav-flow"/> shows an example message flow for
     CardDAV synchronization. </t>

     <figure anchor="carddav-flow" title="RUE CardDAV message flow">
       <artwork>
<![CDATA[
     ,-.
     `-'
     /|\
      |      ,---.   ,---.  ,---------------.  ,---.
     / \     |RUE|   |DNS|  |CardDAV Service|  |CRM|
  RUE User   `-+-'   `-+-'  `-------+-------'  `-+-'
     |         |       |            |            |
[1] Select a VRS Provider name      |            |
     | ------->|       |            |            |
     |         |       |            |            |
[2] Lookup SRV _carddavs._tcp.red.example.net    |
     |         |------>|            |            |
     |         |       |            |            |
[3]  |     SRV carddav.red.example.net:443       |
     |         |<------|            |            |
     |         |       |            |            |
[4] resolve carddav.red.example.net |            |
     |         |------>|            |            |
     |         |       |            |            |
[5]        IP Address of CardDAV Server          |
     |         |<------|            |            |
     |         |       |            |            |
[6] Establish TLS connection to carddav.red.example.net:443
     |         |<------------------>|            |
     |         |       |            |            |
[7] HTTP: (CardDAV request)         |            |
     |         |------------------->|            |                          
     |         |       |            |            |                          
[8] HTTP: 401 Unauthorized          |            |                          
    WWW-Authenticate Digest         |            |
    realm="cd.red.example.net"      |            |
    qop="auth,auth-int" nonce=...   |            |
     |         |<-------------------|            |                          
     |         |       |            |            |                          
[9] HTTP: (CardDAV request)         |            |
    Authorization Digest username="bob"          |
    realm="cd.red.example.net" qop="auth"        |
    nonce=... response="..."        |            |
     |         |------------------->|            |                          
     |         |       |            |            |                          
     |         |  [10] Sync address book         |
     |         |<..................>|<..........>|
     |         |       |            |            |
  RUE User   ,-+-.   ,-+-.  ,-------+-------.  ,-+-.
     ,-.     |RUE|   |DNS|  |CardDAV Service|  |CRM|
     `-'     `---'   `---'  `---------------'  `---'
     /|\
      |
     / \
]]>
       </artwork>
     </figure>

</section>

<section anchor="contacts" title="Contacts Export Service">

  <t>Each provider
  MUST provide a standard xCard export interface, and RUEs MUST be
  able to import the list of contacts in xCard <xref target="RFC6351"/>
  XML format. </t>

  <t>The provider MUST supply a URI for access to this service via the
  <spanx style="verb">contacts</spanx> URI in the configuration.
  The URL MUST resolve to identify a web server resource that exports contact
  lists for authorized user. </t>

  <t>The RUE MAY retrieve the contact list (address book)
  by issuing an HTTPS GET request.
  If the request triggers a challenge for digest authentication
  credentials, the RUE MUST attempt to continue using matching 
  <spanx style="verb">credentials</spanx> from the configuration.
  If no credentials are configured, the RUE MAY query the user. </t>

  <t><xref target="contacts-flow"/> shows an example message flow for
  contact list retrieval. </t>

  <figure anchor="contacts-flow" title="Message flow for RUE contacts retrieval using xCard">
    <artwork>
<![CDATA[
     ,-.
     `-'
     /|\
      |      ,---.   ,---.  ,---------------------------.  ,---.
     / \     |RUE|   |DNS|  |Contacts Export Web Service|  |CRM|
  RUE User   `-+-'   `-+-'  `-------------+-------------'  `-+-'
     |         |       |                  |                  |
[1] Select a VRS Provider name            |                  |
     | ------->|       |                  |                  |
     |         |       |                  |                  |
[2] resolve red.example.net               |                  |
     |         |------>|                  |                  |
     |         |       |                  |                  |
[3] IP Address of Web Server              |                  |
     |         |<------|                  |                  |
     |         |       |                  |                  |
[4] Establish TLS web connection to red.example.net          |
     |         |<------------------------>|                  |
     |         |       |                  |                  |
[5] HTTP: GET /contacts/export/xcard      |                  |
     |         |------------------------->|                  |                          
     |         |       |                  |                  |                          
[6] HTTP: 401 Unauthorized                |                  |                          
    WWW-Authenticate Digest               |                  |
    realm="cd.red.example.net"            |                  |
    qop="auth,auth-int" nonce=...         |                  |
     |         |<-------------------------|                  |                          
     |         |       |                  |                  |                          
[7] HTTP: GET /contacts/export/xcard      |                  |
    Authorization Digest username="bob"   |                  |
    realm="cd.red.example.net" qop="auth" |                  |
    nonce=... response="..."              |                  |
     |         |------------------------->|                  |                          
     |         |       |                  |                  |                          
     |         | [8] Find contacts for username="bob"        |
     |         |       |                  |----------------->|
     |         |       |                  |                  |
     |         | [9] Contacts list in xCard format           |
     |         |      (application/vcard+xml)                |
     |         |       |                  |<-----------------|
     |         |       |                  |                  |
     |         | [10] 200 OK              |                  |
     |         |<-------------------------|                  |
     |         |       |                  |                  |
  RUE User   ,-+-.   ,-+-.  ,-------------+-------------.  ,-+-.
     ,-.     |RUE|   |DNS|  |Contacts Export Web Service|  |CRM|
     `-'     `---'   `---'  `---------------------------'  `---'
     /|\
      |
     / \
]]>
    </artwork>
  </figure>

</section>

<section anchor="use" title="SIP Session Establishment">
  <section anchor="normal-call" title="RUE Normal Call Origination">

        <t>After initial SIP registration, the RUE adheres to SIP <xref
        target="RFC3261"/> basic call flows, as documented in <xref
        target="RFC3665"/>.</t>

        <t>The RUE SHALL route all calls through the outbound proxy of the default provider.
        INVITE requests used to initiate calls SHOULD NOT contain route headers except that
        one route header which addresses the outbound proxy MAY be added. The SIP URIs in
        the To field and the Request-URI MUST be formatted as specified in
        <xref target="uri"/> using the destination phone number.
        The domain field of the URIs SHOULD be the
        <spanx style="verb">provider-domain</spanx> from the configuration.
        (E.g., sip:+13115552368@red.example.com;user=phone.)</t>

        <t>The From-URI MUST be formatted as specified in <xref target="uri"/>, using
        the phone-number and
        <spanx style="verb">provider-domain</spanx> from the configuration. It SHOULD
        also contain the display-name from the configuration, when present.
        (See <xref target="configuration"/>.)</t>

        <t>Negotiated media MUST follow the guidelines specified in
        <xref target="media"/> of this document.</t>

  </section>

  <section anchor="one-stage" title=" Dial-Around">

        <t>Only relay calls use dial around. If the dialed number is in
        the iTRS RND, the call is a point-to-point call and follows the
        procedures in <xref target="normal-call"/>.</t>

        <t>For one-stage dial-around the RUE MUST follow the procedures in
        <xref target="normal-call"/> with the following exception:</t>

        <t>The domain part of the SIP URIs in the To field and the Request-URI MUST be the
        domain of the dial-around provider, discovered according to
        <xref target="provider-selection"/>.</t>

        <t>The following is a partial example of a one-stage dial around call
        from VRS user +1-555-222-0001 hosted by red.example.com to a hearing
        user +1-555-123-4567 using dial-around to green.example.com for the relay service.
        Only important details of the messages are shown and many header fields
        have been omitted.</t>

        <figure anchor="one-stage-flow" title="Example of one-stage dial around call">
          <artwork>
<![CDATA[
    ,-+-.        ,----+----.    ,-----+-----.
    |RUE|        |Default  |    |Dial-Around|
    |   |        |Provider |    | Provider  |
    `-+-'        `----+----'    `-----+-----'
      |               |               |
      | [1] INVITE    |               |
      |-------------->| [2] INVITE    |
      |               |-------------->|

Message Details:

[1] INVITE Rue -> Default Provider

INVITE sip:+15551234567@green.example.net;user=phone SIP/2.0
To: <sip:+15551234567@green.example.net;user=phone>
From: "Bob Smith" <sip:+18135551212@red.example.net;user=phone>
Route: sip:green.example.net


[2] INVITE Default Provider -> Dial-Around Provider

INVITE sip:+15551234567@green.example.net;user=phone SIP/2.0
To: <sip:+15551234567@green.example.net;user=phone>
From: "Bob Smith" <sip:+18135551212@red.example.net;user=phone>

]]>
      </artwork>
    </figure>

  </section>

  <section anchor="termination" title="RUE Normal Call Termination">

     <t>After initial SIP registration, the RUE SHALL be reachable via
     their telephone number.</t>

     <t>As per SIP <xref target="RFC3261"/> basic call flows, as shown
     in <xref target="RFC3665"/>, in-bound SIP INVITEs SHALL be
     forwarded to the SIP-registered RUE.</t>

     <t>All SIP registered RUE with the same SIP URI should receive the
     same parallel forked SIP INVITE so that they ring at the same time.  The
     first RUE to reply with a 200 OK answers the call, and the
     other call branches should be CANCELed.</t>

     <t>If no RUE has an active SIP registration or none of the RUE
     respond to the call during the ring period chosen by the provider,
     and a videomail service is available, the in-bound SIP INVITE SHALL
     be forwarded to the videomail service, as in, sip:+18135551212@vm.red.example.net.</t>

  </section>

  <section anchor="emergency" title="Emergency Calls">

     <t>RUEs MUST comply with <xref target="RFC6881"/>
     for handling of emergency calls, with the following exception:</t>

     <t><list style="symbols">

       <t>location information MUST be conveyed with a "geo:" URI in a
       Geolocation header field, as defined in <xref target="RFC5870"/>.
       <vspace blankLines="1"/>
       (While section 4.1 of <xref target="RFC6442"/>
       prohibits this usage, the reasons for doing so do not apply to
       emergency calls.)</t>

     </list></t>

     <t>Providers MAY comply with <xref target="RFC6881"/>
     for handling of emergency calls. In addition they MUST:</t>

     <t><list style="symbols">

       <t>accept RUE emergency calls complying with the specifications
       in this document;</t>

       <t>recognize such calls as emergency calls and properly handle
       them as such;</t>

     </list></t>

     <t>Other behavior not specified by <xref target="RFC6881"/> is
     specified by <xref target="use"/>.</t>

     <figure anchor="emergency-flow" title="Example of emergency call set-up with geo URI">
       <artwork>
<![CDATA[
    ,-+-.        ,----+----.
    |RUE|        |Default  |
    |   |        |Provider |
    `-+-'        `----+----'
      |               |
      | [1] INVITE    |
      |-------------->|
      |               |

Message Details:

[1] INVITE Rue -> Default Provider

INVITE urn:service:sos SIP/2.0
Via: ...
Max-Forwards: ...
To: <urn:service:sos>
From: "Bob Smith" <sip:+18135551212@red.example.net;user=phone>
Call-ID: ...
Geolocation: <geo:40.6777,-111.915;u=0>
Geolocation-Routing: yes
Accept: application/sdp, application/pidf+xml
CSeq: ...
Contact: ...
Content-Type: application/sdp
Content-Length: ...

...Session Description Protocol (SDP) goes here

]]>
      </artwork>
     </figure>

  </section>
</section>

<section anchor="videomail" title="RUE Videomail">

  <section anchor="mwi" title="Mail Waiting Indicator (MWI)">

    <t>If the provider includes an MWI URI in the configuration
    (see <xref target="configuration"/>) then it MUST process a
    subscription to <spanx style="verb">message-summary</spanx>
    events <xref target="RFC3842"/> at that URI.</t>

    <t>To subscribe to MWI the RUE SHOULD attempt to
    subscribe to <spanx style="verb">message-summary</spanx> events
    at the URI provided by configuration.
    If there is no URI in the configuration
    the RUE SHOULD NOT attempt to subscribe to
    <spanx style="verb">message-summary</spanx> events. (This differs from the
    default behavior implied in <xref target="RFC3842"/>.)</t>

    <t>In notification bodies videomail messages SHOULD be reported
    using message-context-class <spanx style="verb">multimedia-message</spanx>,
    defined in <xref target="RFC3458"/>.</t>

  </section>

  <section title="Videomail Retrieval">

    <t>To retrieve videomail, the RUE establishes a SIP session
    to the <spanx style="verb">videomail</spanx> URI in the configuration.
    (See <xref target="configuration"/>.) The user interaction required to select messages to view is
        at the discretion of the provider; the provider MAY also offer other means, such as a web page, to view video mail.</t>

  </section>


</section>

<section anchor="uri" title="URI Representation of Phone Numbers">

   <t>SIP URIs constructed from non-URI sources (dial strings) and sent to
   SIP proxies by the RUE MUST be represented as follows, depending on whether they can be represented as an E.164 number.</t>

   <t>A dial string that can be written as an E.164 formatted phone number
   MUST be represented as a SIP URI with a URI ";user=phone" tag.
   The user part of the URI MUST be in conformance with
   'global-number' defined in <xref target="RFC3966"/>.  The user
   part MUST NOT contain any 'visual-separator' characters.  The
   'hostport' <xref target="RFC3261"/> in the URI depends
   upon the provider's setup.</t>

   <t>Dial strings that cannot be written as E.164 numbers MUST be represented as
   dialstring URIs, as specified by <xref target="RFC4967"/>, e.g., SIP:411@red.example.net;user=dialstring</t>

</section>


<section anchor="media" title="Media">

  <section anchor="rtt" title="Text-Based Communication">

    <t>The RUE MUST support real-time text (<xref
    target="RFC4102"/>,<xref target="RFC4103"/> and <xref
    target="RFC5194"/>) via T.140 media.</t>

    <t>One original and two redundant generations SHALL be transmitted
    and supported, with a 300 ms transmission interval.</t>

  </section>

  <section title="Video Codecs">

     <t>The RUE must implement the video/H.264 <xref target="RFC6184"/>
     Constrained Baseline Profile, Level 1.3, packetization mode 1.</t>

  </section>
  <section title="Audio Codecs">

    <t>Both RUEs and providers MUST support G.711 mu-law and they SHOULD	
    support G.722. In addition, G.722.1 and/or G.722.2 MAY also be supported.</t>

  </section>

  <section anchor="dtmf" title="DTMF Digits">

    <t>The RUE and providers MUST offer and accept offers of the
        "audio/telephone-event" <xref target="RFC4733"/> media type. They MUST support conveying event codes 0 through 15
    (DTMF digits "0"-"9", "A"-"D","*","#") defined in Table 7 of
    <xref target="RFC4733"/>. Handling of other tones is OPTIONAL.</t>

  </section>

</section>

<section anchor="rtp" title="RTP &amp; RTCP">

   <t>All media streams between the RUE and another endpoint or relay
   provider MUST be exchanged using the real-time transport protocol
   (RTP) as described in <xref target="RFC3550"/>.  All RTP and RTCP
   traffic over UDP MUST use symmetric RTP <xref target="RFC4961"/>.
   Receivers of RTP traffic MUST be capable of processing RTP packets
   with a different packetization rate than the rate used for
   sending.</t>

  <section anchor="bandwidth" title="Bandwidth Negotiation Flow Control and Media Performance">
        <t>During a call, codec control messages SHOULD be used as described in
        <xref target="RFC5104"/> to negotiate maximum bitrate. Specifically, Temporary
        Maximum Media Stream Bit Rate Request (TMMBR) SHOULD be used where
        endpoints have detected the need to decrease or increase the bit rate.
        Where either side of a session doesn't support CCM TMMBR, INVITE
        messages MAY be used during a call to renegotiate the use of
        bandwidth. Automatic bit rate control SHALL be applied on video for
        the purpose of enabling transmission of at least 30 frames of video
        per second with low latency and good video quality.</t>
  </section>

  <section anchor="profile" title="RTP / AVPF Profile for RTCP Feedback">

        <t>Implementations SHOULD support the RTP/AVPF profile per
        <xref target="RFC4585"/> for RTCP feedback support, but MUST signal "RTP/AVP" in the
        SDP m-line for compatibility. Supporting the RTP/AVPF profile allows
        implementations to use advanced RTCP mechanisms, like indicating packet
        loss, requesting intra frame and temporary bitrate change indication,
        which are essential for video streams.</t>

        <t>Supported AVPF messages MUST be declared by RTCP Feedback
        attributes.  Since implementations convey media streams from RUEs of
        varying background, there may be situations when no AVPF attributes are
        supported in a session.</t>

        <t>For complete support of both AVPF and AVP, it is recommended to make
        an initial INVITE with "AVPF". If some media are not accepted with that
        profile, then a re-INVITE should be made with AVP declaration on the non-accepted media and the other media unchanged.</t>
  </section>

  <section anchor="nak" title="Negative Acknowledgement, Packet Loss Indicator, Full Intraframe Request">

        <t>For calls with more than two parties, negative acknowledgement mode (NACK)
        SHOULD be used. With only two parties, NACK MAY be used if the round-trip
        latency time is low enough to allow it.</t>

        <t>Signaling picture lossses as Packet Loss Indicator (PLI) SHOULD be preferred,
        as described in <xref target="RFC5104"/>.</t>

        <t>FIR SHOULD be used only in situations where not sending a decoder refresh point
        would render the video unusable for the users, as per draft-ietf-avt-avpf-ccm-10
        [draft-ietf-avt-avpf-ccm-10] section 4.3.1.2</t>

        <t>If the above have not been negotiated because either side of the call
        cannot support it, SIP INFO messages MAY be used to send XML encoded Picture
        Fast Update messages according to <xref target="RFC5168"/>.</t>
  </section>
</section>

<section anchor="IANA" title="IANA Considerations">
  <t>This memo includes no request to IANA.</t>
</section>

<section anchor="security" title="Security Considerations">

  <t>The RUE is required to communicate with a number of servers on
  public IP addresses and specific ports in order to perform its
  required functions.  If it is necessary for a subscriber to operate
  the client software on a corporate or other network which operates a
  default-deny firewall between the RUE and these services, the user
  will have to arrange with their network manager for passage of traffic
  through such a firewall, in accordance with the protocols and
  associated SRV records as exposed by the RS provider.  Because the VRS
  providers may use different ports for different services, these port
  numbers may be different from provider to provider.</t>

</section>

<section title="Contributors">

   <t>Contributions to this document have been made by: </t>
   <t>
<!-- Providers and VTCSecure -->  
      Jay Ashworth,
      Grant Beckmann,
      Lorenzo Benoni,
      Ian Blenke,
      Scot Brooksby,
      Byron Caswell,
      Eugene Christensen,
      Brandon Dopf,
      Dennis Episkopos,
      Kadian Ferguson,
      Brendan Foley,
      James Hamlin,
      Dustin Laun,
      George Lee,
      John Martin,
      Bruce Mattie,
      Adam Montero,
      Andrew Mulitz,
      Tom Murillo,
      Jose Pereira,
      Peter Preinitz,
      Isaac Roach,
      Zarko Roganovic,
      Lydia Runnels,
      Steve Saunders,
      Ed Sayers,
      Jeremy Shaffner,
      Joshua Shaffner,
      Roger Slusser,
      Mike Strecker,
      Antonio Sweet,
      Kyle Vaught,
      Claudio Villalobos.
   </t>
   <t>The completion of the document was facilitated by MITRE staff.</t>

</section>

<section title="vCard Example">

<figure anchor="vcard-example-xml" title="vCard example"><artwork>
<![CDATA[
<vcards xmlns="urn:ietf:params:xml:ns:vcard-4.0">
<vcard>
  <fn><text>Billy Boberson</text></fn>
  <n>
    <surname>Boberson</surname>
    <given>Billy</given>
    <additional/>
    <prefix/>
    <suffix>ing. jr</suffix>
    <suffix>M.Sc.</suffix>
  </n>
  <lang>
    <parameters><pref><integer>1</integer></pref></parameters>
    <language-tag>en</language-tag>
  </lang>
  <tel>
    <parameters>
      <type>
        <text>work</text>
        <text>voice</text>
      </type>
    </parameters>
    <uri>tel:+1-206-656-9254;ext=102</uri>
  </tel>
  <tel>
    <parameters>
      <type>
        <text>work</text>
        <text>voice</text>
        <text>cell</text>
        <text>video</text>
      </type>
    </parameters>
    <uri>tel:+1-253-262-6501</uri>
  </tel>
</vcard>
</vcards>
]]>
</artwork></figure>
</section>

</middle>

<!-- ********************************************************************************* -->

 <back>
   <references title="Normative References">
     &RFC2119;
     &RFC3261;
     &RFC3458;
     &RFC3550;
     &RFC3665;
     &RFC3842;
     &RFC3966;
     &RFC4102;
     &RFC4103;
     &RFC4585;
     &RFC4733;
     &RFC4961;
     &RFC4967;
     &RFC5104;
     &RFC5168;
     &RFC5194;
     &RFC5245;
     &RFC5246;
     &RFC5389;
     &RFC5626;
     &RFC5766;
     &RFC5870;
     &RFC6011;
     &RFC6184;
     &RFC6351;
     &RFC6352;
     &RFC6442;
     &RFC6764;
     &RFC6881;
     &RFC7159;

     <reference anchor="JCR" target="https://tools.ietf.org/html/draft-newton-json-content-rules-06">
        <front>
           <title>A Language for Rules Describing JSON Content</title>

           <author initials="A." surname="Newton" fullname="Andrew Lee Newton">
              <organization>ARIN</organization>
           </author>
           <author initials="P." surname="Cordell" fullname="Pete Cordell">
              <organization>Codalogic</organization>
           </author>
           <date year="2016" month="March"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-newton-json-content-rules-06"/>
     </reference>

   </references>

 </back>
</rfc>
