<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"
[
  <!ENTITY rfc0793 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0793.xml'>
  <!ENTITY rfc2119 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
  <!ENTITY rfc2277 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2277.xml'>
  <!ENTITY rfc2595 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2595.xml'>
  <!ENTITY rfc2781 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2781.xml'>
  <!ENTITY rfc2821 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2821.xml'>
  <!ENTITY rfc2914 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2914.xml'>
  <!ENTITY rfc2960 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2960.xml'>
  <!ENTITY rfc3023 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3023.xml'>
  <!ENTITY rfc3066 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3066.xml'>
  <!ENTITY rfc3080 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3080.xml'>
  <!ENTITY rfc3375 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3375.xml'>
  <!ENTITY rfc3629 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3629.xml'>
  <!ENTITY rfc3688 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3688.xml'>
  <!ENTITY rfc3730 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3730.xml'>

  <!ENTITY W3C.xml PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml4/reference.W3C.REC-xml-20040204.xml'>
  <!ENTITY W3C.xmlschema-1 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml4/reference.W3C.REC-xmlschema-1-20041028.xml'>
  <!ENTITY W3C.xmlschema-2 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml4/reference.W3C.REC-xmlschema-2-20041028.xml'>
  <!ENTITY W3C.p3p PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml4/reference.W3C.REC-P3P-20020416.xml'>
]>

<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>

<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="4"?>
<?rfc rfcedstyle="yes"?>
<?rfc subcompact="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>


<rfc number="4930" obsoletes="3730" category="std">
  <front>
    <title abbrev="EPP">
    Extensible Provisioning Protocol (EPP)</title>
    <author initials="S." surname="Hollenbeck" fullname="Scott Hollenbeck">
      <organization>VeriSign, Inc.</organization>
      <address>
        <postal>
          <street>21345 Ridgetop Circle</street>
          <city>Dulles</city>
          <region>VA</region>
          <code>20166-6503</code>
          <country>US</country>
        </postal>
        <email>shollenbeck@verisign.com</email>
      </address>
    </author>

    <date year="2007" month="May"/>
    <area>Applications</area>
    <keyword>EPP</keyword>
    <keyword>Extensible Provisioning Protocol</keyword>
    <keyword>XML</keyword>

    <abstract>
      <t>This document describes an application layer client-server protocol
      for the provisioning and management of objects stored in a shared
      central repository.  Specified in XML, the protocol defines generic
      object management operations and an extensible framework that maps
      protocol operations to objects.  This document includes a protocol
      specification, an object mapping template, and an XML media type
      registration.  This document obsoletes RFC 3730.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>This document describes specifications for the Extensible
      Provisioning Protocol (EPP) version 1.0, an XML text protocol that
      permits multiple service providers to perform object provisioning
      operations using a shared central object repository.  EPP is
      specified using the Extensible Markup Language (XML) 1.0 as described
      in <xref target="W3C.REC-xml-20040204"/> and XML Schema notation as
      described in <xref target="W3C.REC-xmlschema-1-20041028"/> and
      <xref target="W3C.REC-xmlschema-2-20041028"/>.  EPP meets and exceeds
      the requirements for a generic registry registrar protocol as described
      in <xref target="RFC3375"/>.  This document obsoletes RFC 3730
      <xref target="RFC3730"/>.</t>

      <t>EPP content is identified by MIME media type application/epp+xml.
      Registration information for this media type is included in an
      appendix to this document.</t>

      <t>EPP is intended for use in diverse operating environments where
      transport and security requirements vary greatly.  It is unlikely
      that a single transport or security specification will meet the needs
      of all anticipated operators, so EPP was designed for use in a
      layered protocol environment.  Bindings to specific transport and
      security protocols are outside the scope of this specification.</t>

      <t>The original motivation for this protocol was to provide a standard
      Internet domain name registration protocol for use between domain
      name registrars and domain name registries.  This protocol provides a
      means of interaction between a registrar's applications and registry
      applications.  It is expected that this protocol will have additional
      uses beyond domain name registration.</t>

      <t>XML is case sensitive.  Unless stated otherwise, XML specifications
      and examples provided in this document MUST be interpreted in the
      character case presented to develop a conforming implementation.</t>

      <section title="Conventions Used in This Document">
        <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"/>.</t>

        <t>In examples, "C:" represents lines sent by a protocol client and "S:"
        represents lines returned by a protocol server.  Indentation and
        white space in examples are provided only to illustrate element
        relationships and are not a REQUIRED feature of this protocol.</t>
      </section>
    </section>

    <section title="Protocol Description" anchor="protDesc">
      <t>EPP is a stateful XML protocol that can be layered over multiple
      transport protocols.  Protected using lower-layer security protocols,
      clients exchange identification, authentication, and option
      information, and then engage in a series of client-initiated
      command-response exchanges.  All EPP commands are atomic (there is no
      partial success or partial failure) and designed so that they can be
      made idempotent (executing a command more than once has the same net
      effect on system state as successfully executing the command once).</t>

      <t>EPP provides four basic service elements: service discovery,
      commands, responses, and an extension framework that supports
      definition of managed objects and the relationship of protocol
      requests and responses to those objects.</t>

      <t>An EPP server MUST respond to client-initiated communication (which
      can be either a lower-layer connection request or an EPP service
      discovery message) by returning a greeting to a client.  A server
      MUST promptly respond to each EPP command with a coordinated response
      that describes the results of processing the command.  The following
      server state machine diagram illustrates the message exchange process
      in detail:</t>


      <figure>
        <artwork>           |
           V
   +-----------------+                  +-----------------+
   |   Waiting for   |     Connected    |     Prepare     |
   |      Client     |-----------------&gt;|     Greeting    |
   +-----------------+    or &lt;hello&gt;    +-----------------+
      ^                                           |
      | Close Connection                     Send |
      |     or Idle                      Greeting |
   +-----------------+                            V
   |       End       |     Timeout      +-----------------+
   |     Session     |&lt;-----------------|   Waiting for   |
   +-----------------+                  |      Client     |
      ^    ^    ^        Send +--------&gt;|  Authentication |
      |    |    |    Response |         +-----------------+
      |    |    |     +--------------+            |
      |    |    |     | Prepare Fail |            | &lt;login&gt;
      |    |    +-----|   Response   |            | Received
      |    |    Send  +--------------+            V
      |    |    2501          ^         +-----------------+
      |    |   Response       |         |   Processing    |
      |    |                  +---------|     &lt;login&gt;     |
      |    |                  Auth Fail +-----------------+
      |    |       Timeout                         |
      |    +-------------------------------+       | Auth OK
      |                                    |       V
      |   +-----------------+  &lt;hello&gt;  +-----------------+
      |   |     Prepare     |&lt;----------|   Waiting for   |
      |   |     Greeting    |----------&gt;|   Command or    |
      |   +-----------------+   Send    |     &lt;hello&gt;     |
      | Send x5xx             Greeting  +-----------------+
      | Response  +-----------------+  Send    ^  |
      +-----------|     Prepare     | Response |  | Command
                  |     Response    |----------+  | Received
                  +-----------------+             V
                             ^          +-----------------+
                     Command |          |   Processing    |
                   Processed +----------|     Command     |
                                        +-----------------+</artwork>
      </figure>

      <t>Figure 1: EPP Server State Machine</t>

      <t>EPP commands fall into three categories: session management commands,
      query commands, and object transform commands.  Session management
      commands are used to establish and end persistent sessions with an
      EPP server.  Query commands are used to perform read-only object
      information retrieval operations.  Transform commands are used to
      perform read-write object management operations.</t>

      <t>Commands are processed by a server in the order they are received
      from a client.  Though an immediate response confirming receipt and
      processing of the command is produced by the server, the protocol
      includes features that allow for offline review of transform commands
      before the requested action is actually completed.  In such
      situations, the response from the server MUST clearly note that the
      command has been received and processed, but the requested action is
      pending.  The state of the corresponding object MUST clearly reflect
      processing of the pending action.  The server MUST also notify the
      client when offline processing of the action has been completed.
      Object mappings SHOULD describe standard formats for notices that
      describe completion of offline processing.</t>

      <t>EPP uses XML namespaces to provide an extensible object management
      framework and to identify schemas required for XML instance parsing
      and validation.  These namespaces and schema definitions are used to
      identify both the base protocol schema and the schemas for managed
      objects.  The XML namespace prefixes used in examples (such as the
      string "foo" in "xmlns:foo") are solely for illustrative purposes.  A
      conforming implementation MUST NOT require the use of these or any
      other specific namespace prefixes.</t>

      <t>All XML instances SHOULD begin with an &lt;?xml?&gt; declaration to
      identify the version of XML that is being used, optionally identify
      use of the character encoding used, and optionally provide a hint to
      an XML parser that an external schema file is needed to validate the
      XML instance.  Conformant XML parsers recognize both UTF-8 (defined
      in RFC 3629 <xref target="RFC3629"/>) and UTF-16 (defined in RFC 2781 <xref target="RFC2781"/>);
      per RFC 2277 <xref target="RFC2277"/> UTF-8 is the RECOMMENDED character encoding
      for use with EPP.</t>

      <t>Character encodings other than UTF-8 and UTF-16 are allowed by XML.
      UTF-8 is the default encoding assumed by XML in the absence of an
      "encoding" attribute or a byte order mark (BOM); thus, the "encoding"
      attribute in the XML declaration is OPTIONAL if UTF-8 encoding is
      used.  EPP clients and servers MUST accept a UTF-8 BOM if present,
      though emitting a UTF-8 BOM is NOT RECOMMENDED.</t>

      <t>Example XML declarations:</t>

      <t>&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;</t>

      <t>&lt;?xml version="1.0" standalone="no"?&gt;</t>

      <t>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</t>

      <t>&lt;?xml version="1.0"?&gt;</t>

      <section title="Transport Mapping Considerations">
        <t>As described previously, EPP can be layered over multiple transport
        protocols.  There are, however, a common set of considerations that
        MUST be addressed by any transport mapping defined for EPP.  These
        include:<vspace blankLines="1"/>
        <list style="hanging">
          <t hangText="-">The transport mapping MUST preserve command order.<vspace blankLines="1"/></t>

          <t hangText="-">The transport mapping MUST address the relationship between
          sessions and the client-server connection concept.<vspace blankLines="1"/></t>

          <t hangText="-">The transport mapping MUST preserve the stateful nature of the
          protocol.<vspace blankLines="1"/></t>

          <t hangText="-">The transport mapping MUST frame data units.<vspace blankLines="1"/></t>

          <t hangText="-">The transport mapping MUST be onto a transport such as TCP
          <xref target="RFC0793"/> or Stream Control Transmission
          Protocol (SCTP) <xref target="RFC2960"/> that provides congestion avoidance that
          follows RFC 2914 <xref target="RFC2914"/>, or if it maps onto a protocol such as
          SMTP <xref target="RFC2821"/> or Blocks Extensible Exchange Protocol (BEEP) <xref target="RFC3080"/>, then the performance issues need
          to take into account issues of overload, server availability, and
          so forth.<vspace blankLines="1"/></t>

          <t hangText="-">The transport mapping MUST ensure reliability.<vspace blankLines="1"/></t>

          <t hangText="-">The transport mapping MUST explicitly allow or prohibit
          pipelining.</t>
        </list></t>

        <t>Pipelining, also known as command streaming, is when a client sends
        multiple commands to a server without waiting for each corresponding
        response.  After sending the commands, the client waits for the
        responses to arrive in the order corresponding to the completed
        commands.  Performance gains can sometimes be realized with
        pipelining, especially with high-latency transports, but there are
        additional considerations associated with defining a transport
        mapping that supports pipelining:<vspace blankLines="1"/>
        <list style="hanging">
          <t hangText="-">Commands MUST be processed independent of each other.<vspace blankLines="1"/></t>

          <t hangText="-">Depending on the transport, pipelining MAY be possible in the form
          of sending a complete session in a well-defined "batch".<vspace blankLines="1"/></t>

          <t hangText="-">The transport mapping MUST describe how an error in processing a
          command affects continued operation of the session.</t>
        </list></t>

        <t>A transport mapping MUST explain how all of these requirements are
        met given the transport protocol being used to exchange data.</t>
      </section>

      <section title="Protocol Identification">
        <t>All EPP XML instances MUST begin with an &lt;epp&gt; element.  This element
        identifies the start of an EPP protocol element and the namespace used
        within the protocol.  The &lt;epp&gt; start element and the associated
        &lt;/epp&gt; ending element MUST be applied to all structures sent by both
        clients and servers.</t>

        <t>Example "start" and "end" EPP elements:<vspace blankLines="1"/></t>

        <figure>
          <artwork>&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
&lt;/epp&gt;</artwork>
        </figure>
      </section>

      <section title="Hello Format">
        <t>EPP MAY be carried over both connection-oriented and connection-less
        transport protocols.  An EPP client MAY request a &lt;greeting&gt; from
        an EPP server at any time between a successful &lt;login&gt; command and
        a &lt;logout&gt; command by sending a &lt;hello&gt; to a server.  Use of this
        element is essential in a connection-less environment where a server
        cannot return a &lt;greeting&gt; in response to a client-initiated
        connection.  An EPP &lt;hello&gt; MUST be an empty element with no child
        elements.</t>

        <t>Example &lt;hello&gt;:<vspace blankLines="1"/></t>

        <figure>
          <artwork>C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;hello/&gt;
C:&lt;/epp&gt;</artwork>
        </figure>
      </section>

      <section title="Greeting Format">
        <t>An EPP server responds to a successful connection and &lt;hello&gt; element
        by returning a &lt;greeting&gt; element to the client.  An EPP greeting
        contains the following elements:</t>

        <t><list style="hanging">
          <t hangText="-">An &lt;svID&gt; element that contains the name of the server.
          <vspace blankLines="1"/></t>

          <t hangText="-">An &lt;svDate&gt; element that contains the server's current date and
          time in UTC.
          <vspace blankLines="1"/></t>

          <t hangText="-">An &lt;svcMenu&gt; element that identifies the services supported by the
          server, including:</t>

            <t><list style="hanging">
              <t hangText="-">One or more &lt;version&gt; elements that identify the protocol versions
              supported by the server.
              <vspace blankLines="1"/></t>

              <t hangText="-">One or more &lt;lang&gt; elements that contain the identifiers of the
              text response languages known by the server.  Language identifiers
              MUST be structured as documented in <xref target="RFC3066"/>.
              <vspace blankLines="1"/></t>

              <t hangText="-">One or more &lt;objURI&gt; elements that contain namespace URIs
              representing the objects that the server is capable of managing.
              A server MAY limit object management privileges on a per-client basis.
              <vspace blankLines="1"/></t>

              <t hangText="-">An OPTIONAL &lt;svcExtension&gt; element that contains one or more
              &lt;extURI&gt; elements that contain namespace URIs representing object
              extensions supported by the server.
              <vspace blankLines="1"/></t>

              <t hangText="-">A &lt;dcp&gt; (data collection policy) element that contains child
              elements used to describe the server's privacy policy for data
              collection and management.  Policy implications usually extend
              beyond the client-server relationship.  Both clients and servers
              can have relationships with other entities that need to know the
              server operator's data collection policy to make informed
              provisioning decisions.  Policy information MUST be disclosed to
              provisioning entities, though the method of disclosing policy data
              outside of direct protocol interaction is beyond the scope of this
              specification.  Child elements include the following:</t>

              <t><list style="hanging">
                <t hangText="-">An &lt;access&gt; element that describes the access provided by the
                server to the client on behalf of the originating data source.
                The &lt;access&gt; element MUST contain one of the following child
                elements:</t>

                <t><list style="hanging">
                  <t hangText="-">&lt;all/&gt;: Access is given to all identified data.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;none/&gt;: No access is provided to identified data.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;null/&gt;: Data is not persistent, so no access is possible.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;personal/&gt;: Access is given to identified data relating to
                  individuals and organizational entities.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;personalAndOther/&gt;: Access is given to identified data
                  relating to individuals, organizational entities, and other
                  data of a non-personal nature.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;other/&gt;: Access is given to other identified data of a non-personal nature.
                  <vspace blankLines="1"/></t>
                </list></t>

                <t hangText="-">One or more &lt;statement&gt; elements that describe data collection
                purposes, data recipients, and data retention.  Each &lt;statement&gt;
                element MUST contain a &lt;purpose&gt; element, a &lt;recipient&gt; element,
                and a &lt;retention&gt; element.  The &lt;purpose&gt; element MUST contain one or more of
                the following child elements that describe the purposes for which data is collected:</t>

                <t><list style="hanging">
                  <t hangText="-">&lt;admin/&gt;: Administrative purposes.  Information can be used for
                  administrative and technical support of the provisioning system.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;contact/&gt;: Contact for marketing purposes.  Information can be
                  used to contact individuals, through a communications channel
                  other than the protocol, for the promotion of a product or
                  service.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;prov/&gt;: Object provisioning purposes.  Information can be used to
                  identify objects and inter-object relationships.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;other/&gt;: Other purposes.  Information may be used in other ways
                  not captured by the above definitions.
                  <vspace blankLines="1"/></t>
                </list></t>

                <t hangText="-">The &lt;recipient&gt; element MUST contain one or more of the following
                child elements that describes the recipients of collected data:</t>

                <t><list style="hanging">
                  <t hangText="-">&lt;other/&gt;: Other entities following unknown practices.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;ours&gt;: Server operator and/or entities acting as agents or
                  entities for whom the server operator is acting as an agent.
                  An agent in this instance is defined as a third party that
                  processes data only on behalf of the service provider for the
                  completion of the stated purposes.  The &lt;ours&gt; element contains
                  an OPTIONAL &lt;recDesc&gt; element that can be used to describe the
                  recipient.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;public/&gt;: Public forums.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;same/&gt;: Other entities following server practices.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;unrelated/&gt;: Unrelated third parties.
                  <vspace blankLines="1"/></t>
                </list></t>

                <t hangText="-">The &lt;retention&gt; element MUST contain one of the following child
                elements that describes data retention practices:</t>

                <t><list style="hanging">
                  <t hangText="-">&lt;business/&gt;: Data persists per business practices.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;indefinite/&gt;: Data persists indefinitely.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;legal/&gt;: Data persists per legal requirements.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;none/&gt;: Data is not persistent and is not retained for more
                  than a brief period of time necessary to make use of it during
                  the course of a single online interaction.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;stated/&gt;: Data persists to meet the stated purpose.
                  <vspace blankLines="1"/></t>
                </list></t>

                <t hangText="-">An OPTIONAL &lt;expiry&gt; element that describes the lifetime of the
                policy.  The &lt;expiry&gt; element MUST contain one of the following
                child elements:</t>

                <t><list style="hanging">
                  <t hangText="-">&lt;absolute/&gt;: The policy is valid from the current date and time
                  until it expires on the specified date and time.
                  <vspace blankLines="1"/></t>

                  <t hangText="-">&lt;relative/&gt;: The policy is valid from the current date and time
                  until the end of the specified duration.</t>
                </list></t>
              </list></t>
            </list></t>
        </list></t>

        <t>Data collection policy elements are based on work described in the
        World Wide Web Consortium's Platform for Privacy Preferences <xref target="W3C.REC-P3P-20020416"/>
        specification.</t>

        <figure>
          <artwork>Example greeting:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;greeting&gt;
S:    &lt;svID&gt;Example EPP server epp.example.com&lt;/svID&gt;
S:    &lt;svDate&gt;2000-06-08T22:00:00.0Z&lt;/svDate&gt;
S:    &lt;svcMenu&gt;
S:      &lt;version&gt;1.0&lt;/version&gt;
S:      &lt;lang&gt;en&lt;/lang&gt;
S:      &lt;lang&gt;fr&lt;/lang&gt;
S:      &lt;objURI&gt;urn:ietf:params:xml:ns:obj1&lt;/objURI&gt;
S:      &lt;objURI&gt;urn:ietf:params:xml:ns:obj2&lt;/objURI&gt;
S:      &lt;objURI&gt;urn:ietf:params:xml:ns:obj3&lt;/objURI&gt;
S:      &lt;svcExtension&gt;
S:        &lt;extURI&gt;http://custom/obj1ext-1.0&lt;/extURI&gt;
S:      &lt;/svcExtension&gt;
S:    &lt;/svcMenu&gt;
S:    &lt;dcp&gt;
S:      &lt;access&gt;&lt;all/&gt;&lt;/access&gt;
S:      &lt;statement&gt;
S:        &lt;purpose&gt;&lt;admin/&gt;&lt;prov/&gt;&lt;/purpose&gt;
S:        &lt;recipient&gt;&lt;ours/&gt;&lt;public/&gt;&lt;/recipient&gt;
S:        &lt;retention&gt;&lt;stated/&gt;&lt;/retention&gt;
S:      &lt;/statement&gt;
S:    &lt;/dcp&gt;
S:  &lt;/greeting&gt;
S:&lt;/epp&gt;</artwork>
        </figure>
      </section>

      <section title="Command Format">
        <t>An EPP client interacts with an EPP server by sending a command to
        the server and receiving a response from the server.  In addition to
        the standard EPP elements, an EPP command contains the following
        elements:</t>

        <t><list style="hanging">
          <t hangText="-">A command element whose tag corresponds to one of the valid EPP
          commands described in this document.  The command element MAY
          contain either protocol-specified or object-specified child
          elements.<vspace blankLines="1"/></t>

          <t hangText="-">An OPTIONAL &lt;extension&gt; element that MAY be used for server-
          defined command extensions.<vspace blankLines="1"/></t>

          <t hangText="-">An OPTIONAL &lt;clTRID&gt; (client transaction identifier) element that
          MAY be used to uniquely identify the command to the client.
          Clients are responsible for maintaining their own transaction
          identifier space to ensure uniqueness.<vspace blankLines="1"/></t>
        </list></t>

        <figure>
          <artwork>Example command with object-specified child elements:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;info&gt;
C:      &lt;obj:info xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
C:        &lt;obj:name&gt;example&lt;/obj:name&gt;
C:      &lt;/obj:info&gt;
C:    &lt;/info&gt;
C:    &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
        </figure>
      </section>

      <section title="Response Format">
        <t>An EPP server responds to a client command by returning a response to
        the client.  EPP commands are atomic, so a command will either
        succeed completely or fail completely.  Success and failure results
        MUST NOT be mixed.  In addition to the standard EPP elements, an EPP
        response contains the following elements:</t>

        <t><list style="hanging">
          <t hangText="-">One or more &lt;result&gt; elements that document the success or failure
          of command execution.  If the command was processed successfully,
          only one &lt;result&gt; element MUST be returned.  If the command was
          not processed successfully, multiple &lt;result&gt; elements MAY be
          returned to document failure conditions.  Each &lt;result&gt; element
          contains the following attribute and child elements:</t>

            <t><list style="hanging">
              <t hangText="-">A "code" attribute whose value is a four-digit, decimal number
              that describes the success or failure of the command.<vspace blankLines="1"/></t>

              <t hangText="-">A &lt;msg&gt; element containing a human-readable description of the
              response code.  The language of the response is identified via
              an OPTIONAL "lang" attribute.  If not specified, the default
              attribute value MUST be "en" (English).<vspace blankLines="1"/></t>

              <t hangText="-">Zero or more OPTIONAL &lt;value&gt; elements that identify a client-
              provided element (including XML tag and value) or other information that caused a
              server error condition.<vspace blankLines="1"/></t>

              <t hangText="-">Zero or more OPTIONAL &lt;extValue&gt; elements that can be used to
              provide additional error diagnostic information, including:</t>

                <t><list style="hanging">
		  <t hangText="-">A &lt;value&gt; element that identifies a client-provided element
                  (including XML tag and value) that caused a server error
                  condition.<vspace blankLines="1"/></t>

		  <t hangText="-">A &lt;reason&gt; element containing a human-readable message that
                  describes the reason for the error.  The language of the
                  response is identified via an OPTIONAL "lang" attribute.  If
                  not specified, the default attribute value MUST be "en"
                  (English).<vspace blankLines="1"/></t>
                </list></t>
            </list></t>

          <t hangText="-">An OPTIONAL &lt;msgQ&gt; element that describes messages queued for
          client retrieval.  A &lt;msgQ&gt; element MUST NOT be present if there
          are no messages queued for client retrieval.  A &lt;msgQ&gt; element MAY
          be present in responses to EPP commands other than the &lt;poll&gt;
          command if messages are queued for retrieval.  A &lt;msgQ&gt; element
          MUST be present in responses to the EPP &lt;poll&gt; command if messages
          are queued for retrieval.  The &lt;msgQ&gt; element contains the
          following attributes:</t>

          <t><list style="hanging">
            <t hangText="-">A "count" attribute that describes the number of messages that
            exist in the queue.<vspace blankLines="1"/></t>

            <t hangText="-">An "id" attribute used to uniquely identify the message at the
            head of the queue.</t>
          </list></t>
        </list></t>

        <t><list style="empty">
        <t>The &lt;msgQ&gt; element contains the following OPTIONAL child elements
        that MUST be returned in response to a &lt;poll&gt; request command and
        MUST NOT be returned in response to any other command, including a
        &lt;poll&gt; acknowledgement:</t>

          <t><list style="hanging">
            <t hangText="-">A &lt;qDate&gt; element that contains the date and time that the message
            was enqueued.<vspace blankLines="1"/></t>

            <t hangText="-">A &lt;msg&gt; element containing a human-readable message.  The language
            of the response is identified via an OPTIONAL "lang" attribute.
            If not specified, the default attribute value MUST be "en"
            (English).  This element MAY contain XML content for formatting
            purposes, but the XML content is not specified by the protocol and
            will thus not be processed for validity.</t>
          </list></t>
        </list></t>

        <t><list style="hanging">
          <t hangText="-">An OPTIONAL &lt;resData&gt; (response data) element that contains child
          elements specific to the command and associated object.<vspace blankLines="1"/></t>

          <t hangText="-">An OPTIONAL &lt;extension&gt; element that MAY be used for server-
          defined response extensions.<vspace blankLines="1"/></t>

          <t hangText="-">A &lt;trID&gt; (transaction identifier) element containing the
          transaction identifier assigned by the server to the command for
          which the response is being returned.  The transaction identifier
          is formed using the &lt;clTRID&gt; associated with the command if
          supplied by the client and a &lt;svTRID&gt; (server transaction
          identifier) that is assigned by and unique to the server.</t>
        </list></t>

        <t>Transaction identifiers provide command-response synchronization
        integrity.  They SHOULD be logged, retained, and protected to
        ensure that both the client and the server have consistent
        temporal and state management records.<vspace blankLines="1"/></t>

        <figure>
          <artwork>Example response without &lt;value&gt; or &lt;resData&gt;:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg lang="en"&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
          </figure>

          <t></t>

        <figure>
          <artwork>Example response with &lt;resData&gt;:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;resData&gt;
S:      &lt;obj:creData xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
S:        &lt;obj:name&gt;example&lt;/obj:name&gt;
S:      &lt;/obj:creData&gt;
S:    &lt;/resData&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
          </figure>

          <t></t>

        <figure>
          <artwork>Example response with error value elements:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="2004"&gt;
S:      &lt;msg&gt;Parameter value range error&lt;/msg&gt;
S:      &lt;value xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
S:        &lt;obj:elem1&gt;2525&lt;/obj:elem1&gt;
S:      &lt;/value&gt;
S:    &lt;/result&gt;
S:    &lt;result code="2005"&gt;
S:      &lt;msg&gt;Parameter value syntax error&lt;/msg&gt;
S:      &lt;value xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
S:        &lt;obj:elem2&gt;ex(ample&lt;/obj:elem2&gt;
S:      &lt;/value&gt;
S:      &lt;extValue&gt;
S:        &lt;value xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
S:          &lt;obj:elem3&gt;abc.ex(ample&lt;/obj:elem3&gt;
S:        &lt;/value&gt;
S:        &lt;reason&gt;Invalid character found.&lt;/reason&gt;
S:      &lt;/extValue&gt;
S:    &lt;/result&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
          </figure>

          <t></t>

        <figure>
          <artwork>Example response with notice of waiting server messages:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;msgQ count="5" id="12345"/&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
          </figure>

<?rfc needLines="5"?>
        <t>Command success or failure MUST NOT be assumed if no response is
        returned or if a returned response is malformed.  Protocol
        idempotency ensures the safety of retrying a command in cases of
        response delivery failure.</t>
      </section>

      <section title="Protocol Extension Framework">
        <t>EPP provides an extension framework that allows features to be added
        at the protocol, object, and command-response levels.</t>

        <section title="Protocol Extension">
          <t>The EPP extension framework allows for definition of new protocol
          elements identified using XML namespace notation with a reference to
          an XML schema that defines the namespace.  The &lt;epp&gt; element that
          identifies the beginning of a protocol instance includes multiple
          child element choices, one of which is an &lt;extension&gt; element whose
          children define the extension.  For example, a protocol extension
          element would be described in generic terms as follows:<vspace blankLines="1"/></t>

          <figure>
            <artwork>C:&lt;epp&gt;
C:  &lt;extension&gt;
C:    &lt;!-- One or more extension elements. --&gt;
C:    &lt;ext:foo xmlns:ext="urn:ietf:params:xml:ns:ext"&gt;
C:      &lt;!-- One or more extension child elements. --&gt;
C:    &lt;/ext:foo&gt;
C:  &lt;/extension&gt;
C:&lt;/epp&gt;</artwork>
          </figure>

          <t>This document does not define mappings for specific extensions.
          Extension specifications MUST be described in separate documents that
          define the objects and operations subject to the extension.</t>
        </section>

        <section title="Object Extension">
          <t>EPP provides an extensible object management framework that defines
          the syntax and semantics of protocol operations applied to a managed
          object.  This framework pushes the definition of each protocol
          operation into the context of a specific object, providing the
          ability to add mappings for new objects without having to modify the
          base protocol.</t>

          <t>Protocol elements that contain data specific to objects are
          identified using XML namespace notation with a reference to an XML
          schema that defines the namespace.  The schema for EPP supports use
          of dynamic object schemas on a per-command and per-response basis.
          For example, the start of an object-specific command element would be
          described in generic terms as follows:<vspace blankLines="1"/></t>

          <figure>
            <artwork>C:&lt;EPPCommandName&gt;
C:  &lt;object:command xmlns:object="urn:ietf:params:xml:ns:object"&gt;
C:    &lt;!-- One or more object-specific command elements. --&gt;
C:  &lt;/object:command&gt;
C:&lt;/EPPCommandName&gt;</artwork>
          </figure>

          <t>An object-specific response element would be described similarly:<vspace blankLines="1"/></t>

          <figure>
            <artwork>S:&lt;resData&gt;
S:  &lt;object:resData xmlns:object="urn:ietf:params:xml:ns:object"&gt;
S:    &lt;!-- One or more object-specific response elements. --&gt;
S:  &lt;/object:resData&gt;
S:&lt;/resData&gt;</artwork>
          </figure>

         <t>This document does not define mappings for specific objects.  The
         mapping of EPP to an object MUST be described in separate documents
         that specifically address each command and response in the context of
         the object.  A suggested object mapping outline is included as an
         appendix to this document.</t>
        </section>

        <section title="Command-Response Extension">
          <t>EPP provides a facility for protocol command and response extensions.
          Protocol commands and responses MAY be extended by an &lt;extension&gt;
          element that contains additional elements whose syntax and semantics
          are not explicitly defined by EPP or an EPP object mapping.  This
          element is OPTIONAL.  Extensions are typically defined by agreement
          between client and server and MAY be used to extend EPP for unique
          operational needs.  A server-extended command element would be
          described in generic terms as follows:<vspace blankLines="1"/></t>

          <figure>
            <artwork>C:&lt;command&gt;
C:  &lt;!-- EPPCommandName can be "create", "update", etc. --&gt;
C:  &lt;EPPCommandName&gt;
C:    &lt;object:command xmlns:object="urn:ietf:params:xml:ns:object"&gt;
C:      &lt;!-- One or more object-specific command elements. --&gt;
C:    &lt;/object:command&gt;
C:  &lt;/EPPCommandName&gt;
C:  &lt;extension&gt;
C:    &lt;!-- One or more server-defined elements. --&gt;
C:  &lt;/extension&gt;
C:&lt;/command&gt;</artwork>
          </figure>

          <t>An server-extended response element would be described similarly:<vspace blankLines="1"/></t>

          <figure>
            <artwork>S:&lt;response&gt;
S:  &lt;result code="1000"&gt;
S:    &lt;msg lang="en"&gt;Command completed successfully&lt;/msg&gt;
S:  &lt;/result&gt;
S:  &lt;extension&gt;
S:    &lt;!-- One or more server-defined elements. --&gt;
S:  &lt;/extension&gt;
S:  &lt;trID&gt;
S:    &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
S:    &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
S:  &lt;/trID&gt;
S:&lt;/response&gt;</artwork>
          </figure>

          <t>This document does not define any specific server extensions.  The
          mapping of server extensions to EPP MUST be described in separate
          documents that specifically address extended commands and responses
          in the server's operational context.</t>
        </section>
      </section>

      <section title="Object Identification">
        <t>Some objects, such as name servers and contacts, can have utility in
        multiple repositories.  However, maintaining disjoint copies of
        object information in multiple repositories can lead to
        inconsistencies that have adverse consequences for the Internet.  For
        example, changing a name server name in one repository, but not in a
        second repository that refers to the server for domain name
        delegation, can produce unexpected DNS query results.</t>

        <t>Globally unique identifiers can help facilitate object information
        sharing between repositories.  A globally unique identifier MUST be
        assigned to every object when the object is created; the identifier
        MUST be returned to the client as part of any request to retrieve the
        detailed attributes of an object.  Specific identifier values are a
        matter of repository policy, but they SHOULD be constructed according
        to the following algorithm:</t>

        <t><list style="letters">
          <t>Divide the provisioning repository world into a number of object
          repository classes.<vspace blankLines="1"/></t>

          <t>Each repository within a class is assigned an identifier that is
          maintained by IANA.<vspace blankLines="1"/></t>

          <t>Each repository is responsible for assigning a unique local
          identifier for each object within the repository.<vspace blankLines="1"/></t>

          <t>The globally unique identifier is a concatenation of the local
          identifier, followed by a hyphen ("-", ASCII value 0x002D),
          followed by the repository identifier.</t>
        </list></t>
      </section>

      <section title="Protocol Commands">
        <t>EPP provides commands to manage sessions, retrieve object
        information, and perform transformation operations on objects.  All
        EPP commands are atomic and designed so that they can be made
        idempotent, either succeeding completely or failing completely and
        producing predictable results in case of repeated executions.  This
        section describes each EPP command, including examples with
        representative server responses.</t>

        <section title="Session Management Commands">
          <t>EPP provides two commands for session management: &lt;login&gt; to
          establish a session with a server, and &lt;logout&gt; to end a session with
          a server.  The &lt;login&gt; command establishes an ongoing server session
          that preserves client identity and authorization information during
          the duration of the session.</t>

          <section title="EPP &lt;login&gt; Command">
            <t>The EPP &lt;login&gt; command is used to establish a session with an EPP
            server in response to a greeting issued by the server.  A &lt;login&gt;
            command MUST be sent to a server before any other EPP command to
            establish an ongoing session.  A server operator MAY limit the number
            of failed login attempts N, 1 &lt;= N &lt;= infinity, after which a login
            failure results in the connection to the server (if a connection
            exists) being closed.</t>

            <t>A client identifier and initial password MUST be created on the
            server before a client can successfully complete a &lt;login&gt; command.
            The client identifier and initial password MUST be delivered to the
            client using an out-of-band method that protects the identifier and
            password from inadvertent disclosure.</t>

            <t>In addition to the standard EPP command elements, the &lt;login&gt; command
            contains the following child elements:</t>

            <t><list style="hanging">
              <t hangText="-">A &lt;clID&gt; element that contains the client identifier assigned to
              the client by the server.
              <vspace blankLines="1"/></t>

              <t hangText="-">A &lt;pw&gt; element that contains the client's plain text password.
              The value of this element is case sensitive.
              <vspace blankLines="1"/></t>

              <t hangText="-">An OPTIONAL &lt;newPW&gt; element that contains a new plain text
              password to be assigned to the client for use with subsequent
              &lt;login&gt; commands.  The value of this element is case sensitive.
              <vspace blankLines="1"/></t>

              <t hangText="-">An &lt;options&gt; element that contains the following child elements:</t>

              <t><list style="hanging">
                <t hangText="-">A &lt;version&gt; element that contains the protocol version to be
                used for the command or ongoing server session.
                <vspace blankLines="1"/></t>

                <t hangText="-">A &lt;lang&gt; element that contains the text response language to be
                used for the command or ongoing server session commands.
                <vspace blankLines="1"/></t>
              </list></t>

              <t>The values of the &lt;version&gt; and &lt;lang&gt; elements MUST exactly match
              one of the values presented in the EPP greeting.<vspace blankLines="1"/></t>

              <t hangText="-">A &lt;svcs&gt; element that contains one or more &lt;objURI&gt; elements that
              contain namespace URIs representing the objects to be managed
              during the session.  The &lt;svcs&gt; element MAY contain an OPTIONAL
              &lt;svcExtension&gt; element that contains one or more &lt;extURI&gt; elements
              that identify object extensions to be used during the session.</t>
            </list></t>

            <t>The PLAIN Simple Authentication and Security Layer (SASL) mechanism presented in <xref target="RFC2595"/> describes a format
            for providing a user identifier, an authorization identifier, and a
            password as part of a single plain text string.  The EPP
            authentication mechanism is similar, though EPP does not require a
            session-level authorization identifier and the user identifier and
            password are separated into distinct XML elements.  Additional
            identification and authorization schemes MUST be provided at other
            protocol layers to provide more robust security services.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;login&gt; command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;login&gt;
C:      &lt;clID&gt;ClientX&lt;/clID&gt;
C:      &lt;pw&gt;foo-BAR2&lt;/pw&gt;
C:      &lt;newPW&gt;bar-FOO2&lt;/newPW&gt;
C:      &lt;options&gt;
C:        &lt;version&gt;1.0&lt;/version&gt;
C:        &lt;lang&gt;en&lt;/lang&gt;
C:      &lt;/options&gt;
C:      &lt;svcs&gt;
C:        &lt;objURI&gt;urn:ietf:params:xml:ns:obj1&lt;/objURI&gt;
C:        &lt;objURI&gt;urn:ietf:params:xml:ns:obj2&lt;/objURI&gt;
C:        &lt;objURI&gt;urn:ietf:params:xml:ns:obj3&lt;/objURI&gt;
C:        &lt;svcExtension&gt;
C:          &lt;extURI&gt;http://custom/obj1ext-1.0&lt;/extURI&gt;
C:        &lt;/svcExtension&gt;
C:      &lt;/svcs&gt;
C:    &lt;/login&gt;
C:    &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>When a &lt;login&gt; command has been processed successfully, a server MUST
            respond with an EPP response with no &lt;resData&gt; element.  If
            successful, the server will respond by creating and maintaining a new
            session that SHOULD be terminated by a future &lt;logout&gt; command.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;login&gt; response:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

<?rfc needLines="5"?>
            <t>The EPP &lt;login&gt; command is used to establish a session with an EPP
            server.  A &lt;login&gt; command MUST be rejected if received within the
            bounds of an existing session.  This action MUST be open to all
            authorized clients.</t>
          </section>

          <section title="EPP &lt;logout&gt; Command">
            <t>The EPP &lt;logout&gt; command is used to end a session with an EPP server.
            The &lt;logout&gt; command MUST be represented as an empty element with no
            child elements.</t>

            <t>A server MAY end a session due to client inactivity or excessive
            client session longevity.  The parameters for determining excessive
            client inactivity or session longevity are a matter of server policy
            and are not specified by this protocol.</t>

            <t>Transport mappings MUST explicitly describe any connection-oriented
            processing that takes place after processing a &lt;logout&gt; command and
            ending a session.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;logout&gt; command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;logout/&gt;
C:    &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>When a &lt;logout&gt; command has been processed successfully, a server
            MUST respond with an EPP response with no &lt;resData&gt; element.  If
            successful, the server MUST also end the current session.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;logout&gt; response:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1500"&gt;
S:      &lt;msg&gt;Command completed successfully; ending session&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

<?rfc needLines="5"?>
            <t>The EPP &lt;logout&gt; command is used to end a session with an EPP server.
            A &lt;logout&gt; command MUST be rejected if the command has not been
            preceded by a successful &lt;login&gt; command.  This action MUST be open
            to all authorized clients.</t>
          </section>
        </section>

        <section title="Query Commands">

          <section title="EPP &lt;check&gt; Command">
            <t>The EPP &lt;check&gt; command is used to determine if an object can be
            provisioned within a repository.  It provides a hint that allows a
            client to anticipate the success or failure of provisioning an object
            using the &lt;create&gt; command as object provisioning requirements are
            ultimately a matter of server policy.</t>

            <t>The elements needed to identify an object are object-specific, so the
            child elements of the &lt;check&gt; command are specified using the EPP
            extension framework.  In addition to the standard EPP command
            elements, the &lt;check&gt; command contains the following child elements:</t>

            <t><list style="hanging">
              <t hangText="-">An object-specific &lt;obj:check&gt; element that identifies the objects
              to be queried.  Multiple objects of the same type MAY be queried
              within a single &lt;check&gt; command.</t>
            </list>
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;check&gt; command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;check&gt;
C:      &lt;obj:check xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
C:        &lt;obj:name&gt;example1&lt;/obj:name&gt;
C:        &lt;obj:name&gt;example2&lt;/obj:name&gt;
C:        &lt;obj:name&gt;example3&lt;/obj:name&gt;
C:      &lt;/obj:check&gt;
C:    &lt;/check&gt;
C:    &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>When a &lt;check&gt; command has been processed successfully, a server MUST
            respond with an EPP &lt;resData&gt; element that MUST contain a child
            element that identifies the object namespace.  The child elements of the
            &lt;resData&gt; element are object-specific, though the EPP &lt;resData&gt;
            element MUST contain a child &lt;obj:chkData&gt; element that contains one
            or more &lt;obj:cd&gt; (check data) elements.  Each &lt;obj:cd&gt; element
            contains the following child elements:</t>

            <t><list style="hanging">
              <t hangText="-">An object-specific element that identifies the queried object.
              This element MUST contain an "avail" attribute whose value
              indicates object availability (can it be provisioned or not) at
              the moment the &lt;check&gt; command was completed.  A value of "1" or
              "true" means that the object can be provisioned.  A value of "0"
              or "false" means that the object cannot be provisioned.
              <vspace blankLines="1"/></t>

              <t hangText="-">An OPTIONAL &lt;obj:reason&gt; element that MAY be provided when an
              object cannot be provisioned.  If present, this element contains
              server-specific text to help explain why the object cannot be
              provisioned.  This text MUST be represented in the response
              language previously negotiated with the client; an OPTIONAL "lang"
              attribute MAY be present to identify the language if the
              negotiated value is something other than the default value of "en"
              (English).
              <vspace blankLines="1"/></t>
            </list></t>

            <figure>
              <artwork>Example &lt;check&gt; response:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;resData&gt;
S:      &lt;obj:chkData xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
S:        &lt;obj:cd&gt;
S:          &lt;obj:name avail="1"&gt;example1&lt;/obj:name&gt;
S:        &lt;/obj:cd&gt;
S:        &lt;obj:cd&gt;
S:          &lt;obj:name avail="0"&gt;example2&lt;/obj:name&gt;
S:          &lt;obj:reason&gt;In use&lt;/obj:reason&gt;
S:        &lt;/obj:cd&gt;
S:        &lt;obj:cd&gt;
S:          &lt;obj:name avail="1"&gt;example3&lt;/obj:name&gt;
S:        &lt;/obj:cd&gt;
S:      &lt;/obj:chkData&gt;
S:    &lt;/resData&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54322-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

            <t>The EPP &lt;check&gt; command is used to determine if an object can be
            provisioned within a repository.  This action MUST be open to all
            authorized clients.</t>
          </section>

          <section title="EPP &lt;info&gt; Command">
            <t>The EPP &lt;info&gt; command is used to retrieve information associated
            with an existing object.  The elements needed to identify an object
            and the type of information associated with an object are both
            object-specific, so the child elements of the &lt;info&gt; command are
            specified using the EPP extension framework.  In addition to the
            standard EPP command elements, the &lt;info&gt; command contains the
            following child elements:</t>

            <t><list style="hanging">
              <t hangText="-">An object-specific &lt;obj:info&gt; element that identifies the object
              to be queried.</t>
            </list>
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;info&gt; command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;info&gt;
C:      &lt;obj:info xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
C:        &lt;!-- Object-specific elements. --&gt;
C:      &lt;/obj:info&gt;
C:    &lt;/info&gt;
C:    &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>When an &lt;info&gt; command has been processed successfully, a server MUST
            respond with an EPP &lt;resData&gt; element that MUST contain a child
            element that identifies the object namespace and the Repository Object
            IDentifier (ROID) that was  assigned to the object when the object was created.
            Other child elements of the &lt;resData&gt; element are object-specific.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;info&gt; response:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;resData&gt;
S:      &lt;obj:infData xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
S:        &lt;obj:roid&gt;EXAMPLE1-REP&lt;/obj:roid&gt;
S:        &lt;!-- Object-specific elements. --&gt;
S:      &lt;/obj:infData&gt;
S:    &lt;/resData&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54322-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

           <t>The EPP &lt;info&gt; command is used to retrieve information associated
           with an existing object.  This action SHOULD be limited to authorized
           clients; restricting this action to the sponsoring client is
           RECOMMENDED.</t>
          </section>

          <section title="EPP &lt;poll&gt; Command">
            <t>The EPP &lt;poll&gt; command is used to discover and retrieve service
            messages queued by a server for individual clients.  If the message
            queue is not empty, a successful response to a &lt;poll&gt; command MUST
            return the first message from the message queue.  Each response
            returned from the server includes a server-unique message identifier
            that MUST be provided to acknowledge receipt of the message, and a
            counter that indicates the number of messages in the queue.  After a
            message has been received by the client, the client MUST respond to
            the message with an explicit acknowledgement to confirm that the
            message has been received.  A server MUST dequeue the message and
            decrement the queue counter after receiving acknowledgement from the
            client, making the next message in the queue (if any) available for
            retrieval.</t>

            <t>Servers can occasionally perform actions on objects that are not in
            direct response to a client request, or an action taken by one client
            can indirectly involve a second client.  Examples of such actions
            include deletion upon expiration, automatic renewal upon expiration,
            and transfer coordination; other types of service information MAY be
            defined as a matter of server policy.  Service messages SHOULD be created
            for passive clients affected by an action on an object.  Service messages
            MAY also be created for active clients that request an action on an object,
            though such messages MUST NOT replace the normal protocol response to the
            request.  For example, &lt;transfer&gt; actions SHOULD be reported to the
            client that has the authority to approve or reject a transfer request.
            Other methods of server-client action notification, such as offline reporting,
            are also possible and are beyond the scope of this specification.</t>

            <t>Message queues can consume server resources if clients do not
            retrieve and acknowledge messages on a regular basis.  Servers MAY
            implement other mechanisms to dequeue and deliver messages if queue
            maintenance needs exceed server resource consumption limits.  Server
            operators SHOULD consider time-sensitivity and resource management
            factors when selecting a delivery method for service information
            because some message types can be reasonably delivered using non-
            protocol methods that require fewer server resources.</t>

            <t>Some of the information returned in response to a &lt;poll&gt; command can
            be object-specific, so some child elements of the &lt;poll&gt; response MAY
            be specified using the EPP extension framework.  The &lt;poll&gt; command
            MUST be represented as an empty element with no child elements.  An
            "op" attribute with value "req" is REQUIRED to retrieve the first
            message from the server message queue.  An "op" attribute (with value
            "ack") and a "msgID" attribute (whose value corresponds to the value
            of the "id" attribute copied from the &lt;msg&gt; element in the message
            being acknowledged) are REQUIRED to acknowledge receipt of a message.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;poll&gt; command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;poll op="req"/&gt;
C:    &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>The returned result code notes that a message has been dequeued and
            returned in response to a &lt;poll&gt; command.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;poll&gt; response with object-specific information:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1301"&gt;
S:      &lt;msg&gt;Command completed successfully; ack to dequeue&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;msgQ count="5" id="12345"&gt;
S:      &lt;qDate&gt;2000-06-08T22:00:00.0Z&lt;/qDate&gt;
S:      &lt;msg&gt;Transfer requested.&lt;/msg&gt;
S:    &lt;/msgQ&gt;
S:    &lt;resData&gt;
S:      &lt;obj:trnData
S:       xmlns:obj="urn:ietf:params:xml:ns:obj-1.0"&gt;
S:        &lt;obj:name&gt;example.com&lt;/obj:name&gt;
S:        &lt;obj:trStatus&gt;pending&lt;/obj:trStatus&gt;
S:        &lt;obj:reID&gt;ClientX&lt;/obj:reID&gt;
S:        &lt;obj:reDate&gt;2000-06-08T22:00:00.0Z&lt;/obj:reDate&gt;
S:        &lt;obj:acID&gt;ClientY&lt;/obj:acID&gt;
S:        &lt;obj:acDate&gt;2000-06-13T22:00:00.0Z&lt;/obj:acDate&gt;
S:        &lt;obj:exDate&gt;2002-09-08T22:00:00.0Z&lt;/obj:exDate&gt;
S:      &lt;/obj:trnData&gt;
S:    &lt;/resData&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

            <t>A client MUST acknowledge each response to dequeue the message and
            make subsequent messages available for retrieval.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;poll&gt; acknowledgement command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;poll op="ack" msgID="12345"/&gt;
C:    &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>A &lt;poll&gt; acknowledgement response notes the ID of the message that has been
             acknowledged and the number of messages remaining in the queue.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;poll&gt; acknowledgement response:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;msgQ count="4" id="12345"/&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54322-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

            <t>Service messages can also be returned without object information.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;poll&gt; response with mixed message content and without
object-specific information:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1301"&gt;
S:      &lt;msg&gt;Command completed successfully; ack to dequeue&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;msgQ count="4" id="12346"&gt;
S:      &lt;qDate&gt;2000-06-08T22:10:00.0Z&lt;/qDate&gt;
S:      &lt;msg lang="en"&gt;Credit balance low.
S:        &lt;limit&gt;100&lt;/limit&gt;&lt;bal&gt;5&lt;/bal&gt;
S:      &lt;/msg&gt;
S:    &lt;/msgQ&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

            <t>The returned result code and message is used to note an empty server
            message queue.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;poll&gt; response to note an empty message queue:

   S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
   S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
   S:  &lt;response&gt;
   S:    &lt;result code="1300"&gt;
   S:      &lt;msg&gt;Command completed successfully; no messages&lt;/msg&gt;
   S:    &lt;/result&gt;
   S:    &lt;trID&gt;
   S:      &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
   S:      &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
   S:    &lt;/trID&gt;
   S:  &lt;/response&gt;
   S:&lt;/epp&gt;</artwork>
            </figure>

            <t>The EPP &lt;poll&gt; command is used to discover and retrieve client
            service messages from a server.  This action SHOULD be limited to
            authorized clients; queuing service messages and limiting queue
            access on a per-client basis is RECOMMENDED.</t>
          </section>

          <section title="EPP &lt;transfer&gt; Query Command">
            <t>The EPP &lt;transfer&gt; command provides a query operation that allows a
            client to determine real-time status of pending and completed
            transfer requests.  The elements needed to identify an object that is
            the subject of a transfer request are object-specific, so the child
            elements of the &lt;transfer&gt; query command are specified using the EPP
            extension framework.  In addition to the standard EPP command
            elements, the &lt;transfer&gt; command contains an "op" attribute with
            value "query", and the following child elements:</t>

            <t><list style="hanging">
              <t hangText="-">An object-specific &lt;obj:transfer&gt; element that identifies the
              object whose transfer status is requested.</t>
            </list></t>

            <t>Transfer status is typically considered sensitive information by the
            clients involved in the operation.  Object mappings MUST provide
            features to restrict transfer queries to authorized clients, such as
            by requiring authorization information as part of the request.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;transfer&gt; query command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;transfer op="query"&gt;
C:      &lt;obj:transfer xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
C:        &lt;!-- Object-specific elements. --&gt;
C:      &lt;/obj:transfer&gt;
C:    &lt;/transfer&gt;
C:    &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>When a &lt;transfer&gt; query command has been processed successfully, a
            server MUST respond with an EPP &lt;resData&gt; element that MUST contain a
            child element that identifies the object namespace.  The child elements of
            the &lt;resData&gt; element are object-specific, but they MUST include
            elements that identify the object, the status of the transfer, the identifier
            of the client that requested the transfer, the date and time that the request
            was made, the identifier of the client that is authorized to act on the
            request, the date and time by which an action is expected, and an
            OPTIONAL date and time noting changes in the object's validity period
            (if applicable) that occur as a result of the transfer.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;transfer&gt; query response:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;resData&gt;
S:      &lt;obj:trnData xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
S:        &lt;obj:name&gt;example&lt;/obj:name&gt;
S:        &lt;obj:trStatus&gt;pending&lt;/obj:trStatus&gt;
S:        &lt;obj:reID&gt;ClientX&lt;/obj:reID&gt;
S:        &lt;obj:reDate&gt;2000-06-08T22:00:00.0Z&lt;/obj:reDate&gt;
S:        &lt;obj:acID&gt;ClientY&lt;/obj:acID&gt;
S:        &lt;obj:acDate&gt;2000-06-13T22:00:00.0Z&lt;/obj:acDate&gt;
S:        &lt;obj:exDate&gt;2002-09-08T22:00:00.0Z&lt;/obj:exDate&gt;
S:      &lt;/obj:trnData&gt;
S:    &lt;/resData&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54322-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

            <t>The EPP &lt;transfer&gt; command provides a query operation that allows a
            client to determine real-time status of pending and completed
            transfer requests.  This action SHOULD be limited to authorized
            clients; restricting queries to the requesting and responding clients
            is RECOMMENDED.  Object transfer MAY be unavailable or limited by
            object-specific policies.</t>
          </section>
        </section>

        <section title="Object Transform Commands">
          <t>EPP provides five commands to transform objects: &lt;create&gt; to create
          an instance of an object with a server, &lt;delete&gt; to remove an
          instance of an object from a server, &lt;renew&gt; to extend the validity
          period of an object, &lt;transfer&gt; to manage changes in client sponsorship of
          an object, and &lt;update&gt; to change information associated with
          an object.</t>

          <section title="EPP &lt;create&gt; Command">
            <t>The EPP &lt;create&gt; command is used to create an instance of an object.
            An object can be created for an indefinite period of time, or an
            object can be created for a specific validity period.  The EPP
            mapping for an object MUST describe the status of an object with
            respect to time, to include expected client and server behavior if a
            validity period is used.</t>

            <t>The elements needed to identify an object and associated attributes
            are object-specific, so the child elements of the &lt;create&gt; command
            are specified using the EPP extension framework.  In addition to the
            standard EPP command elements, the &lt;create&gt; command contains the
            following child elements:</t>

            <t><list style="hanging">
              <t hangText="-">An object-specific &lt;obj:create&gt; element that identifies the object
              to be created and the elements that are required to create the
              object.</t>
            </list>
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;create&gt; command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;create&gt;
C:      &lt;obj:create xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
C:        &lt;!-- Object-specific elements. --&gt;
C:      &lt;/obj:create&gt;
C:    &lt;/create&gt;
C:    &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>When a &lt;create&gt; command has been processed successfully, a server MAY
            respond with an EPP &lt;resData&gt; element that MUST contain a child
            element that identifies the object namespace.  The child elements of the
            &lt;resData&gt; element are object-specific.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;create&gt; response with &lt;resData&gt;:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;resData&gt;
S:      &lt;obj:creData xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
S:        &lt;!-- Object-specific elements. --&gt;
S:      &lt;/obj:creData&gt;
S:    &lt;/resData&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12345&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54321-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

            <t>The EPP &lt;create&gt; command is used to create an instance of an object.
            This action SHOULD be limited to authorized clients and MAY be
            restricted on a per-client basis.</t>
          </section>

          <section title="EPP &lt;delete&gt; Command">
            <t>The EPP &lt;delete&gt; command is used to remove an instance of an existing
            object.  The elements needed to identify an object are object-
            specific, so the child elements of the &lt;delete&gt; command are specified
            using the EPP extension framework.  In addition to the standard EPP
            command elements, the &lt;delete&gt; command contains the following child
            elements:</t>

            <t><list style="hanging">
              <t hangText="-">An object-specific &lt;obj:delete&gt; element that identifies the object
              to be deleted.</t>
            </list>
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;delete&gt; command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;delete&gt;
C:      &lt;obj:delete xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
C:        &lt;!-- Object-specific elements. --&gt;
C:      &lt;/obj:delete&gt;
C:    &lt;/delete&gt;
C:    &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>When a &lt;delete&gt; command has been processed successfully, a server MAY
            respond with an EPP &lt;resData&gt; element that MUST contain a child
            element that identifies the object namespace.  The child elements of the
            &lt;resData&gt; element are object-specific.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;delete&gt; response without &lt;resData&gt;:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54322-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

            <t>The EPP &lt;delete&gt; command is used to remove an instance of an existing
            object.  This action SHOULD be limited to authorized clients;
            restricting this action to the sponsoring client is RECOMMENDED.</t>
          </section>

          <section title="EPP &lt;renew&gt; Command">
            <t>The EPP &lt;renew&gt; command is used to extend the validity period of an
            existing object.  The elements needed to identify and extend the
            validity period of an object are object-specific, so the child
            elements of the &lt;renew&gt; command are specified using the EPP extension
            framework.  In addition to the standard EPP command elements, the
            &lt;renew&gt; command contains the following child elements:</t>

            <t><list style="hanging">
              <t hangText="-">An object-specific &lt;obj:renew&gt; element that identifies the object
              to be renewed and the elements that are required to extend the
              validity period of the object.</t>
            </list>
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;renew&gt; command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;renew&gt;
C:      &lt;obj:renew xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
C:        &lt;!-- Object-specific elements. --&gt;
C:      &lt;/obj:renew&gt;
C:    &lt;/renew&gt;
C:    &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>When a &lt;renew&gt; command has been processed successfully, a server MAY
            respond with an EPP &lt;resData&gt; element that MUST contain a child
            element that identifies the object namespace.  The child elements of the
            &lt;resData&gt; element are object-specific.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;renew&gt; response with &lt;resData&gt;:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;resData&gt;
S:      &lt;obj:renData xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
S:        &lt;!-- Object-specific elements. --&gt;
S:      &lt;/obj:renData&gt;
S:    &lt;/resData&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54322-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

            <t>The EPP &lt;renew&gt; command is used to extend the validity period of an
            existing object.  This action SHOULD be limited to authorized
            clients; restricting this action to the sponsoring client is
            RECOMMENDED.  Object renewal MAY be unavailable or limited by
            object-specific policies.</t>
          </section>

          <section title="EPP &lt;transfer&gt; Command">
            <t>The EPP &lt;transfer&gt; command is used to manage changes in client
            sponsorship of an existing object.  Clients can initiate a transfer
            request, cancel a transfer request, approve a transfer request, and
            reject a transfer request using the "op" command attribute.</t>

            <t>A client who wishes to assume sponsorship of a known object from
            another client uses the &lt;transfer&gt; command with the value of the "op"
            attribute set to "request".  Once a transfer has been requested, the
            same client can cancel the request using a &lt;transfer&gt; command with
            the value of the "op" attribute set to "cancel".  A request to cancel
            the transfer MUST be sent to the server before the current sponsoring
            client either approves or rejects the transfer request and before the
            server automatically processes the request due to responding client
            inactivity.</t>

            <t>Once a transfer request has been received by the server, the server
            MUST notify the current sponsoring client of the requested transfer
            either by queuing a service message for retrieval via the &lt;poll&gt; command
            or by using an out-of-band mechanism to inform the client of the request.
            The current status of a pending &lt;transfer&gt; command for any object can
            be found using the &lt;transfer&gt; query command.  Transfer service
            messages MUST include the object-specific elements specified for
            &lt;transfer&gt; command responses.</t>

            <t>The current sponsoring client MAY explicitly approve or reject the
            transfer request.  The client can approve the request using a
            &lt;transfer&gt; command with the value of the "op" attribute set to
            "approve".  The client can reject the request using a &lt;transfer&gt;
            command with the value of the "op" attribute set to "reject".</t>

            <t>A server MAY automatically approve or reject all transfer requests
            that are not explicitly approved or rejected by the current
            sponsoring client within a fixed amount of time.  The amount of time
            to wait for explicit action and the default server behavior are local
            matters not specified by EPP, but they SHOULD be documented in a
            server-specific profile document that describes default server
            behavior for client information.</t>

            <t>Objects eligible for transfer MUST have associated authorization
            information that MUST be provided to complete a &lt;transfer&gt; command.
            The type of authorization information required is object-specific;
            passwords or more complex mechanisms based on public key cryptography
            are typical.</t>

            <t>The elements needed to identify and complete the transfer of an
            object are object-specific, so the child elements of the &lt;transfer&gt;
            command are specified using the EPP extension framework.  In addition
            to the standard EPP command elements, the &lt;transfer&gt; command contains
            the following child elements:</t>

            <t><list style="hanging">
              <t hangText="-">An object-specific &lt;obj:transfer&gt; element that identifies the
              object to be transferred and the elements that are required to
              process the transfer command.</t>
            </list>
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;transfer&gt; command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;transfer op="request"&gt;
C:      &lt;obj:transfer xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
C:        &lt;!-- Object-specific elements. --&gt;
C:      &lt;/obj:transfer&gt;
C:    &lt;/transfer&gt;
C:    &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>When a &lt;transfer&gt; command has been processed successfully, a server
            MUST respond with an EPP &lt;resData&gt; element that MUST contain a child
            element that identifies the object namespace.  The child elements of the
            &lt;resData&gt; element are object-specific, but they MUST include elements
            that identify the object, the status of the transfer, the identifier of the
            client that requested the transfer, the date and time that the request was made,
            the identifier of the client that is authorized to act on the
            request, the date and time by which an action is expected, and an
            OPTIONAL date and time noting changes in the object's validity period
            (if applicable) that occur as a result of the transfer.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;transfer&gt; response with &lt;resData&gt;:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1001"&gt;
S:      &lt;msg&gt;Command completed successfully; action pending&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;resData&gt;
S:      &lt;obj:trnData xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
S:        &lt;obj:name&gt;example&lt;/obj:name&gt;
S:        &lt;obj:trStatus&gt;pending&lt;/obj:trStatus&gt;
S:        &lt;obj:reID&gt;ClientX&lt;/obj:reID&gt;
S:        &lt;obj:reDate&gt;2000-06-08T22:00:00.0Z&lt;/obj:reDate&gt;
S:        &lt;obj:acID&gt;ClientY&lt;/obj:acID&gt;
S:        &lt;obj:acDate&gt;2000-06-13T22:00:00.0Z&lt;/obj:acDate&gt;
S:        &lt;obj:exDate&gt;2002-09-08T22:00:00.0Z&lt;/obj:exDate&gt;
S:      &lt;/obj:trnData&gt;
S:    &lt;/resData&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54322-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

            <t>The EPP &lt;transfer&gt; command is used to manage changes in client
            sponsorship of an existing object.  This action SHOULD be limited to
            authorized clients; restricting &lt;transfer&gt; requests to a client other
            than the current sponsoring client, &lt;transfer&gt; approval requests to
            the current sponsoring client, and &lt;transfer&gt; cancellation requests
            to the original requesting client is RECOMMENDED.  Object transfer
            MAY be unavailable or limited by object-specific policies.</t>
          </section>

          <section title="EPP &lt;update&gt; Command">
            <t>The EPP &lt;update&gt; command is used to change information associated
            with an existing object.  The elements needed to identify and modify
            an object are object-specific, so the child elements of the &lt;update&gt;
            command are specified using the EPP extension framework.  In addition
            to the standard EPP command elements, the &lt;update&gt; command contains
            the following child elements:</t>

            <t><list style="hanging">
              <t hangText="-">An object-specific &lt;obj:update&gt; element that identifies the object
              to be updated and the elements that are required to modify the
              object.  Object-specific elements MUST identify values to be
              added, values to be removed, or values to be changed.</t>
            </list>
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;update&gt; command:

C:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
C:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
C:  &lt;command&gt;
C:    &lt;update&gt;
C:      &lt;obj:update xmlns:obj="urn:ietf:params:xml:ns:obj"&gt;
C:        &lt;!-- Object-specific elements. --&gt;
C:      &lt;/obj:update&gt;
C:    &lt;/update&gt;
C:    &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
C:  &lt;/command&gt;
C:&lt;/epp&gt;</artwork>
            </figure>

            <t>When an &lt;update&gt; command has been processed successfully, a server
            MAY respond with an EPP &lt;resData&gt; element that MUST contain a child
            element that identifies the object namespace.  The child elements of the
            &lt;resData&gt; element are object-specific.
            <vspace blankLines="1"/></t>

            <figure>
              <artwork>Example &lt;update&gt; response without &lt;resData&gt;:

S:&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
S:&lt;epp xmlns="urn:ietf:params:xml:ns:epp-1.0"&gt;
S:  &lt;response&gt;
S:    &lt;result code="1000"&gt;
S:      &lt;msg&gt;Command completed successfully&lt;/msg&gt;
S:    &lt;/result&gt;
S:    &lt;trID&gt;
S:      &lt;clTRID&gt;ABC-12346&lt;/clTRID&gt;
S:      &lt;svTRID&gt;54322-XYZ&lt;/svTRID&gt;
S:    &lt;/trID&gt;
S:  &lt;/response&gt;
S:&lt;/epp&gt;</artwork>
            </figure>

            <t>The EPP &lt;update&gt; command is used to change information associated
            with an existing object.  This action SHOULD be limited to authorized
            clients; restricting this action to the sponsoring client is
            RECOMMENDED.</t>
          </section>
        </section>
      </section>
    </section>

    <section title="Result Codes">
      <t>EPP result codes are based on the theory of reply codes described in
      section 4.2.1 of <xref target="RFC2821"/>.  EPP uses four decimal digits to describe
      the success or failure of each EPP command.  Each of the digits of
      the reply have special significance.</t>

<?rfc needLines="4"?>
      <t>The first digit denotes command success or failure.  The second digit
      denotes the response category, such as command syntax or security.
      The third and fourth digits provide explicit response detail within
      each response category.</t>

      <t>There are two values for the first digit of the reply code:<vspace blankLines="1"/>
        <list style="hanging" hangIndent="8">
          <t hangText="1yzz">Positive completion reply.  The command was accepted and
          processed by the system without error.<vspace blankLines="1"/></t>
          <t hangText="2yzz">Negative completion reply.  The command was not accepted, and
          the requested action did not occur.</t>
        </list></t>

      <t>The second digit groups responses into one of six specific categories:<vspace blankLines="1"/>
        <list style="hanging" hangIndent="8">
          <t hangText="x0zz">Protocol Syntax</t>
          <t hangText="x1zz">Implementation-specific Rules</t>
          <t hangText="x2zz">Security</t>
          <t hangText="x3zz">Data Management</t>
          <t hangText="x4zz">Server System</t>
          <t hangText="x5zz">Connection Management</t>
        </list></t>

      <t>The third and fourth digits provide response detail within the
      categories defined by the first and second digits.  Specific result
      codes are listed in the table below.</t>

      <t>Every EPP response MUST include a result code and a human-readable
      description of the result code.  The language used to represent the
      description MAY be identified using an instance of the "lang"
      attribute within the &lt;msg&gt; element.  If not specified, the default
      language is English, identified as "en".  A description of the
      structure of valid values for the "lang" attribute is described in
      <xref target="RFC3066"/>.</t>

      <t>Response text MAY be translated into other languages, though the
      translation MUST preserve the meaning of the code as described here.
      Response code values MUST NOT be changed when translating text.</t>

      <t>Response text in the table below is enclosed in quotes to clearly
      mark the beginning and ending of each response string.  Quotes MUST
      NOT be used to delimit these strings when returning response text via
      the protocol.</t>

      <t>Successful command completion responses:<vspace blankLines="1"/>
        <list style="hanging" hangIndent="8">
          <t hangText="Code">Response text in English</t>
          <t hangText="____">________________________</t>
        </list>
      </t>

      <t><list style="hanging" hangIndent="8">
        <t hangText="1000">"Command completed successfully"</t>
        <t>This is the usual response code for a successfully completed command
        that is not addressed by any other 1xxx-series response code.<vspace blankLines="1"/></t>

        <t hangText="1001">"Command completed successfully; action pending"</t>
        <t>This response code MUST be returned when responding to a command that
        requires offline activity before the requested action can be
        completed.  See <xref target="protDesc"/> for a description of other processing
        requirements.<vspace blankLines="1"/></t>

        <t hangText="1300">"Command completed successfully; no messages"</t>
        <t>This response code MUST be returned when responding to a &lt;poll&gt;
        request command and the server message queue is empty.<vspace blankLines="1"/></t>

        <t hangText="1301">"Command completed successfully; ack to dequeue"</t>
        <t>This response code MUST be returned when responding to a &lt;poll&gt;
        request command and a message has been retrieved from the server
        message queue.<vspace blankLines="1"/></t>

        <t hangText="1500">"Command completed successfully; ending session"</t>
        <t>This response code MUST be returned when responding to a successful
        &lt;logout&gt; command.</t>
        </list>
      </t>

      <t>Command error responses:<vspace blankLines="1"/>
        <list style="hanging" hangIndent="8">
          <t hangText="Code">Response text in English</t>
          <t hangText="____">________________________</t>
        </list>
      </t>

      <t><list style="hanging" hangIndent="8">
        <t hangText="2000">"Unknown command"</t>
        <t>This response code MUST be returned when a server receives a command
        element that is not defined by EPP.<vspace blankLines="1"/></t>

        <t hangText="2001">"Command syntax error"</t>
        <t>This response code MUST be returned when a server receives an
        improperly formed command element.<vspace blankLines="1"/></t>

        <t hangText="2002">"Command use error"</t>
        <t>This response code MUST be returned when a server receives a properly
        formed command element, but the command cannot be executed due to a
        sequencing or context error.  For example, a &lt;logout&gt; command cannot
        be executed without having first completed a &lt;login&gt; command.<vspace blankLines="1"/></t>

        <t hangText="2003">"Required parameter missing"</t>
        <t>This response code MUST be returned when a server receives a command
        for which a required parameter value has not been provided.<vspace blankLines="1"/></t>

        <t hangText="2004">"Parameter value range error"</t>
        <t>This response code MUST be returned when a server receives a command
        parameter whose value is outside the range of values specified by the
        protocol.  The error value SHOULD be returned via a &lt;value&gt; element
        in the EPP response.<vspace blankLines="1"/></t>

        <t hangText="2005">"Parameter value syntax error"</t>
        <t>This response code MUST be returned when a server receives a command
        containing a parameter whose value is improperly formed.  The error
        value SHOULD be returned via a &lt;value&gt; element in the EPP response.<vspace blankLines="1"/></t>

        <t hangText="2100">"Unimplemented protocol version"</t>
        <t>This response code MUST be returned when a server receives a command
        element specifying a protocol version that is not implemented by the
        server.<vspace blankLines="1"/></t>

        <t hangText="2101">"Unimplemented command"</t>
        <t>This response code MUST be returned when a server receives a valid
        EPP command element that is not implemented by the server.  For
        example, a &lt;transfer&gt; command can be unimplemented for certain object
        types.<vspace blankLines="1"/></t>

        <t hangText="2102">"Unimplemented option"</t>
        <t>This response code MUST be returned when a server receives a valid
        EPP command element that contains a protocol option that is not
        implemented by the server.<vspace blankLines="1"/></t>

        <t hangText="2103">"Unimplemented extension"</t>
        <t>This response code MUST be returned when a server receives a valid
        EPP command element that contains a protocol command extension that
        is not implemented by the server.<vspace blankLines="1"/></t>

        <t hangText="2104">"Billing failure"</t>
        <t>This response code MUST be returned when a server attempts to execute
        a billable operation and the command cannot be completed due to a
        client billing failure.<vspace blankLines="1"/></t>

<?rfc needLines="5"?>
        <t hangText="2105">"Object is not eligible for renewal"</t>
        <t>This response code MUST be returned when a client attempts to &lt;renew&gt;
        an object that is not eligible for renewal in accordance with server
        policy.<vspace blankLines="1"/></t>

        <t hangText="2106">"Object is not eligible for transfer"</t>
        <t>This response code MUST be returned when a client attempts to
        &lt;transfer&gt; an object that is not eligible for transfer in accordance
        with server policy.<vspace blankLines="1"/></t>

        <t hangText="2200">"Authentication error"</t>
        <t>This response code MUST be returned when a server notes an error when
        validating client credentials.<vspace blankLines="1"/></t>

        <t hangText="2201">"Authorization error"</t>
        <t>This response code MUST be returned when a server notes a client
        authorization error when executing a command.  This error is used to
        note that a client lacks privileges to execute the requested command.<vspace blankLines="1"/></t>

        <t hangText="2202">"Invalid authorization information"</t>
        <t>This response code MUST be returned when a server receives invalid
        command authorization information required to confirm authorization
        to execute a command.  This error is used to note that a client has
        the privileges required to execute the requested command, but the
        authorization information provided by the client does not match the
        authorization information archived by the server.<vspace blankLines="1"/></t>

        <t hangText="2300">"Object pending transfer"</t>
        <t>This response code MUST be returned when a server receives a command
        to transfer of an object that is pending transfer due to an earlier
        transfer request.<vspace blankLines="1"/></t>

        <t hangText="2301">"Object not pending transfer"</t>
        <t>This response code MUST be returned when a server receives a command
        to confirm, reject, or cancel the transfer an object when no command
        has been made to transfer the object.<vspace blankLines="1"/></t>

        <t hangText="2302">"Object exists"</t>
        <t>This response code MUST be returned when a server receives a command
        to create an object that already exists in the repository.<vspace blankLines="1"/></t>

<?rfc needLines="5"?>
        <t hangText="2303">"Object does not exist"</t>
        <t>This response code MUST be returned when a server receives a command
        to query or transform an object that does not exist in the
        repository.<vspace blankLines="1"/></t>

        <t hangText="2304">"Object status prohibits operation"</t>
        <t>This response code MUST be returned when a server receives a command
        to transform an object that cannot be completed due to server policy
        or business practices.  For example, a server can disallow &lt;transfer&gt;
        commands under terms and conditions that are matters of local policy,
        or the server might have received a &lt;delete&gt; command for an object
        whose status prohibits deletion.<vspace blankLines="1"/></t>

        <t hangText="2305">"Object association prohibits operation"</t>
        <t>This response code MUST be returned when a server receives a command
        to transform an object that cannot be completed due to dependencies
        on other objects that are associated with the target object.  For
        example, a server can disallow &lt;delete&gt; commands while an object has
        active associations with other objects.<vspace blankLines="1"/></t>

        <t hangText="2306">"Parameter value policy error"</t>
        <t>This response code MUST be returned when a server receives a command
        containing a parameter value that is syntactically valid, but
        semantically invalid due to local policy.  For example, the server
        can support a subset of a range of valid protocol parameter values.
        The error value SHOULD be returned via a &lt;value&gt; element in the EPP
        response.<vspace blankLines="1"/></t>

        <t hangText="2307">"Unimplemented object service"</t>
        <t>This response code MUST be returned when a server receives a command
        to operate on an object service that is not supported by the server.<vspace blankLines="1"/></t>

        <t hangText="2308">"Data management policy violation"</t>
        <t>This response code MUST be returned when a server receives a command
        whose execution results in a violation of server data management
        policies.  For example, removing all attribute values or object
        associations from an object might be a violation of a server's data
        management policies.<vspace blankLines="1"/></t>

        <t hangText="2400">"Command failed"</t>
        <t>This response code MUST be returned when a server is unable to
        execute a command due to an internal server error that is not related
        to the protocol.  The failure can be transient.  The server MUST keep
        any ongoing session active.<vspace blankLines="1"/></t>

        <t hangText="2500">"Command failed; server closing connection"</t>
        <t>This response code MUST be returned when a server receives a command
        that cannot be completed due to an internal server error that is not
        related to the protocol.  The failure is not transient and will
        cause other commands to fail as well.  The server MUST end the active
        session and close the existing connection.<vspace blankLines="1"/></t>

        <t hangText="2501">"Authentication error; server closing connection"</t>
        <t>This response code MUST be returned when a server notes an error when
        validating client credentials and a server-defined limit on the
        number of allowable failures has been exceeded.  The server MUST
        close the existing connection.<vspace blankLines="1"/></t>

        <t hangText="2502">"Session limit exceeded; server closing connection"</t>
        <t>This response code MUST be returned when a server receives a &lt;login&gt;
        command, and the command cannot be completed because the client has
        exceeded a system-defined limit on the number of sessions that the
        client can establish.  It might be possible to establish a session by
        ending existing unused sessions and closing inactive connections.</t>
        </list>
      </t>
    </section>

    <section title="Formal Syntax">
      <t>EPP is specified in XML Schema notation.  The formal syntax presented
      here is a complete schema representation of EPP suitable for
      automated validation of EPP XML instances.</t>

      <t>Two schemas are presented here.  The first schema is the base EPP
      schema.  The second schema defines elements and structures that can
      be used by both the base EPP schema and object mapping schemas.  The
      BEGIN and END tags are not part of the schema; they are used to note
      the beginning and ending of the schema for URI registration purposes.</t>

      <section title="Base Schema">
        <t>
        <figure>
          <artwork>BEGIN
&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;schema targetNamespace="urn:ietf:params:xml:ns:epp-1.0"
        xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
        xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
        xmlns="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified"&gt;

&lt;!--
Import common element types.
--&gt;
  &lt;import namespace="urn:ietf:params:xml:ns:eppcom-1.0"/&gt;

  &lt;annotation&gt;
    &lt;documentation&gt;
      Extensible Provisioning Protocol v1.0 schema.
    &lt;/documentation&gt;
  &lt;/annotation&gt;

&lt;!--
Every EPP XML instance must begin with this element.
--&gt;
  &lt;element name="epp" type="epp:eppType"/&gt;

&lt;!--
An EPP XML instance must contain a greeting, hello, command,
response, or extension.
--&gt;
  &lt;complexType name="eppType"&gt;
    &lt;choice&gt;
      &lt;element name="greeting" type="epp:greetingType"/&gt;
      &lt;element name="hello"/&gt;
      &lt;element name="command" type="epp:commandType"/&gt;
      &lt;element name="response" type="epp:responseType"/&gt;
      &lt;element name="extension" type="epp:extAnyType"/&gt;
    &lt;/choice&gt;
  &lt;/complexType&gt;

&lt;!--
A greeting is sent by a server in response to a client connection
or &lt;hello&gt;.
--&gt;
  &lt;complexType name="greetingType"&gt;
    &lt;sequence&gt;
      &lt;element name="svID" type="epp:sIDType"/&gt;
      &lt;element name="svDate" type="dateTime"/&gt;
      &lt;element name="svcMenu" type="epp:svcMenuType"/&gt;
      &lt;element name="dcp" type="epp:dcpType"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

&lt;!--
Server IDs are strings with minimum and maximum length restrictions.
--&gt;
  &lt;simpleType name="sIDType"&gt;
    &lt;restriction base="normalizedString"&gt;
      &lt;minLength value="3"/&gt;
      &lt;maxLength value="64"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
A server greeting identifies available object services.
--&gt;
  &lt;complexType name="svcMenuType"&gt;
    &lt;sequence&gt;
      &lt;element name="version" type="epp:versionType"
       maxOccurs="unbounded"/&gt;
      &lt;element name="lang" type="language"
       maxOccurs="unbounded"/&gt;
      &lt;element name="objURI" type="anyURI"
       maxOccurs="unbounded"/&gt;
      &lt;element name="svcExtension" type="epp:extURIType"
       minOccurs="0"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

&lt;!--
Data Collection Policy types.
--&gt;
  &lt;complexType name="dcpType"&gt;
    &lt;sequence&gt;
      &lt;element name="access" type="epp:dcpAccessType"/&gt;
      &lt;element name="statement" type="epp:dcpStatementType"
       maxOccurs="unbounded"/&gt;
      &lt;element name="expiry" type="epp:dcpExpiryType"
       minOccurs="0"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;complexType name="dcpAccessType"&gt;
    &lt;choice&gt;
      &lt;element name="all"/&gt;
      &lt;element name="none"/&gt;
      &lt;element name="null"/&gt;
      &lt;element name="other"/&gt;
      &lt;element name="personal"/&gt;
      &lt;element name="personalAndOther"/&gt;
    &lt;/choice&gt;
  &lt;/complexType&gt;

  &lt;complexType name="dcpStatementType"&gt;
    &lt;sequence&gt;
      &lt;element name="purpose" type="epp:dcpPurposeType"/&gt;
      &lt;element name="recipient" type="epp:dcpRecipientType"/&gt;
      &lt;element name="retention" type="epp:dcpRetentionType"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;complexType name="dcpPurposeType"&gt;
    &lt;sequence&gt;
      &lt;element name="admin"
       minOccurs="0"/&gt;
      &lt;element name="contact"
       minOccurs="0"/&gt;
      &lt;element name="other"
       minOccurs="0"/&gt;
      &lt;element name="prov"
       minOccurs="0"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;complexType name="dcpRecipientType"&gt;
    &lt;sequence&gt;
      &lt;element name="other"
       minOccurs="0"/&gt;
      &lt;element name="ours" type="epp:dcpOursType"
       minOccurs="0" maxOccurs="unbounded"/&gt;
      &lt;element name="public"
       minOccurs="0"/&gt;
      &lt;element name="same"
       minOccurs="0"/&gt;
      &lt;element name="unrelated"
       minOccurs="0"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;complexType name="dcpOursType"&gt;
    &lt;sequence&gt;
      &lt;element name="recDesc" type="epp:dcpRecDescType"
       minOccurs="0"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;simpleType name="dcpRecDescType"&gt;
    &lt;restriction base="token"&gt;
      &lt;minLength value="1"/&gt;
      &lt;maxLength value="255"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

  &lt;complexType name="dcpRetentionType"&gt;
    &lt;choice&gt;
      &lt;element name="business"/&gt;
      &lt;element name="indefinite"/&gt;
      &lt;element name="legal"/&gt;
      &lt;element name="none"/&gt;
      &lt;element name="stated"/&gt;
    &lt;/choice&gt;
  &lt;/complexType&gt;

  &lt;complexType name="dcpExpiryType"&gt;
    &lt;choice&gt;
      &lt;element name="absolute" type="dateTime"/&gt;
      &lt;element name="relative" type="duration"/&gt;
    &lt;/choice&gt;
  &lt;/complexType&gt;

&lt;!--
Extension framework types.
--&gt;
  &lt;complexType name="extAnyType"&gt;
    &lt;sequence&gt;
      &lt;any namespace="##other"
       maxOccurs="unbounded"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;complexType name="extURIType"&gt;
    &lt;sequence&gt;
      &lt;element name="extURI" type="anyURI"
       maxOccurs="unbounded"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

&lt;!--
An EPP version number is a dotted pair of decimal numbers.
--&gt;
  &lt;simpleType name="versionType"&gt;
    &lt;restriction base="token"&gt;
      &lt;pattern value="[1-9]+\.[0-9]+"/&gt;
      &lt;enumeration value="1.0"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
Command types.
--&gt;
  &lt;complexType name="commandType"&gt;
    &lt;sequence&gt;
      &lt;choice&gt;
        &lt;element name="check" type="epp:readWriteType"/&gt;
        &lt;element name="create" type="epp:readWriteType"/&gt;
        &lt;element name="delete" type="epp:readWriteType"/&gt;
        &lt;element name="info" type="epp:readWriteType"/&gt;
        &lt;element name="login" type="epp:loginType"/&gt;
        &lt;element name="logout"/&gt;
        &lt;element name="poll" type="epp:pollType"/&gt;
        &lt;element name="renew" type="epp:readWriteType"/&gt;
        &lt;element name="transfer" type="epp:transferType"/&gt;
        &lt;element name="update" type="epp:readWriteType"/&gt;
      &lt;/choice&gt;
      &lt;element name="extension" type="epp:extAnyType"
       minOccurs="0"/&gt;
      &lt;element name="clTRID" type="epp:trIDStringType"
       minOccurs="0"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

&lt;!--
The &lt;login&gt; command.
--&gt;
  &lt;complexType name="loginType"&gt;
    &lt;sequence&gt;
      &lt;element name="clID" type="eppcom:clIDType"/&gt;
      &lt;element name="pw" type="epp:pwType"/&gt;
      &lt;element name="newPW" type="epp:pwType"
       minOccurs="0"/&gt;
      &lt;element name="options" type="epp:credsOptionsType"/&gt;
      &lt;element name="svcs" type="epp:loginSvcType"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;complexType name="credsOptionsType"&gt;
    &lt;sequence&gt;
      &lt;element name="version" type="epp:versionType"/&gt;
      &lt;element name="lang" type="language"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;simpleType name="pwType"&gt;
    &lt;restriction base="token"&gt;
      &lt;minLength value="6"/&gt;
      &lt;maxLength value="16"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

  &lt;complexType name="loginSvcType"&gt;
    &lt;sequence&gt;
      &lt;element name="objURI" type="anyURI"
       maxOccurs="unbounded"/&gt;
      &lt;element name="svcExtension" type="epp:extURIType"
       minOccurs="0"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

&lt;!--
The &lt;poll&gt; command.
--&gt;
  &lt;complexType name="pollType"&gt;
    &lt;attribute name="op" type="epp:pollOpType"
     use="required"/&gt;
    &lt;attribute name="msgID" type="token"/&gt;
  &lt;/complexType&gt;

  &lt;simpleType name="pollOpType"&gt;
    &lt;restriction base="token"&gt;
      &lt;enumeration value="ack"/&gt;
      &lt;enumeration value="req"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
The &lt;transfer&gt; command.  This is object-specific, and uses attributes
to identify the requested operation.
--&gt;
  &lt;complexType name="transferType"&gt;
    &lt;sequence&gt;
      &lt;any namespace="##other"/&gt;
    &lt;/sequence&gt;
    &lt;attribute name="op" type="epp:transferOpType"
     use="required"/&gt;
  &lt;/complexType&gt;

  &lt;simpleType name="transferOpType"&gt;
    &lt;restriction base="token"&gt;
      &lt;enumeration value="approve"/&gt;
      &lt;enumeration value="cancel"/&gt;
      &lt;enumeration value="query"/&gt;
      &lt;enumeration value="reject"/&gt;
      &lt;enumeration value="request"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
All other object-centric commands.  EPP doesn't specify the syntax or
semantics of object-centric command elements.  The elements MUST be
described in detail in another schema specific to the object.
--&gt;
  &lt;complexType name="readWriteType"&gt;
    &lt;sequence&gt;
      &lt;any namespace="##other"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;complexType name="trIDType"&gt;
    &lt;sequence&gt;
      &lt;element name="clTRID" type="epp:trIDStringType"
       minOccurs="0"/&gt;
      &lt;element name="svTRID" type="epp:trIDStringType"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;simpleType name="trIDStringType"&gt;
    &lt;restriction base="token"&gt;
      &lt;minLength value="3"/&gt;
      &lt;maxLength value="64"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
Response types.
--&gt;
  &lt;complexType name="responseType"&gt;
    &lt;sequence&gt;
      &lt;element name="result" type="epp:resultType"
       maxOccurs="unbounded"/&gt;
      &lt;element name="msgQ" type="epp:msgQType"
       minOccurs="0"/&gt;
      &lt;element name="resData" type="epp:extAnyType"
       minOccurs="0"/&gt;
      &lt;element name="extension" type="epp:extAnyType"
       minOccurs="0"/&gt;
      &lt;element name="trID" type="epp:trIDType"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;complexType name="resultType"&gt;
    &lt;sequence&gt;
      &lt;element name="msg" type="epp:msgType"/&gt;
      &lt;choice minOccurs="0" maxOccurs="unbounded"&gt;
        &lt;element name="value" type="epp:errValueType"/&gt;
        &lt;element name="extValue" type="epp:extErrValueType"/&gt;
      &lt;/choice&gt;
    &lt;/sequence&gt;
    &lt;attribute name="code" type="epp:resultCodeType"
     use="required"/&gt;
  &lt;/complexType&gt;

  &lt;complexType name="errValueType" mixed="true"&gt;
    &lt;sequence&gt;
      &lt;any namespace="##any" processContents="skip"/&gt;
    &lt;/sequence&gt;
    &lt;anyAttribute namespace="##any" processContents="skip"/&gt;
  &lt;/complexType&gt;

  &lt;complexType name="extErrValueType"&gt;
    &lt;sequence&gt;
      &lt;element name="value" type="epp:errValueType"/&gt;
      &lt;element name="reason" type="epp:msgType"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

  &lt;complexType name="msgQType"&gt;
    &lt;sequence&gt;
      &lt;element name="qDate" type="dateTime"
       minOccurs="0"/&gt;
      &lt;element name="msg" type="epp:mixedMsgType"
       minOccurs="0"/&gt;
    &lt;/sequence&gt;
    &lt;attribute name="count" type="unsignedLong"
     use="required"/&gt;
    &lt;attribute name="id" type="eppcom:minTokenType"
     use="required"/&gt;
  &lt;/complexType&gt;

  &lt;complexType name="mixedMsgType" mixed="true"&gt;
    &lt;sequence&gt;
      &lt;any processContents="skip"
       minOccurs="0" maxOccurs="unbounded"/&gt;
    &lt;/sequence&gt;
    &lt;attribute name="lang" type="language"
     default="en"/&gt;
  &lt;/complexType&gt;

&lt;!--
Human-readable text may be expressed in languages other than English.
--&gt;
  &lt;complexType name="msgType"&gt;
    &lt;simpleContent&gt;
      &lt;extension base="normalizedString"&gt;
        &lt;attribute name="lang" type="language"
         default="en"/&gt;
      &lt;/extension&gt;
    &lt;/simpleContent&gt;
  &lt;/complexType&gt;

&lt;!--
EPP result codes.
--&gt;
  &lt;simpleType name="resultCodeType"&gt;
    &lt;restriction base="unsignedShort"&gt;
      &lt;enumeration value="1000"/&gt;
      &lt;enumeration value="1001"/&gt;
      &lt;enumeration value="1300"/&gt;
      &lt;enumeration value="1301"/&gt;
      &lt;enumeration value="1500"/&gt;
      &lt;enumeration value="2000"/&gt;
      &lt;enumeration value="2001"/&gt;
      &lt;enumeration value="2002"/&gt;
      &lt;enumeration value="2003"/&gt;
      &lt;enumeration value="2004"/&gt;
      &lt;enumeration value="2005"/&gt;
      &lt;enumeration value="2100"/&gt;
      &lt;enumeration value="2101"/&gt;
      &lt;enumeration value="2102"/&gt;
      &lt;enumeration value="2103"/&gt;
      &lt;enumeration value="2104"/&gt;
      &lt;enumeration value="2105"/&gt;
      &lt;enumeration value="2106"/&gt;
      &lt;enumeration value="2200"/&gt;
      &lt;enumeration value="2201"/&gt;
      &lt;enumeration value="2202"/&gt;
      &lt;enumeration value="2300"/&gt;
      &lt;enumeration value="2301"/&gt;
      &lt;enumeration value="2302"/&gt;
      &lt;enumeration value="2303"/&gt;
      &lt;enumeration value="2304"/&gt;
      &lt;enumeration value="2305"/&gt;
      &lt;enumeration value="2306"/&gt;
      &lt;enumeration value="2307"/&gt;
      &lt;enumeration value="2308"/&gt;
      &lt;enumeration value="2400"/&gt;
      &lt;enumeration value="2500"/&gt;
      &lt;enumeration value="2501"/&gt;
      &lt;enumeration value="2502"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
End of schema.
--&gt;
&lt;/schema&gt;
END</artwork>
        </figure></t>
      </section>

      <section title="Shared Structure Schema">
        <t>
        <figure>
          <artwork>BEGIN
&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;schema targetNamespace="urn:ietf:params:xml:ns:eppcom-1.0"
        xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
        xmlns="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified"&gt;

  &lt;annotation&gt;
    &lt;documentation&gt;
      Extensible Provisioning Protocol v1.0
      shared structures schema.
    &lt;/documentation&gt;
  &lt;/annotation&gt;

&lt;!--
Object authorization information types.
--&gt;
  &lt;complexType name="pwAuthInfoType"&gt;
    &lt;simpleContent&gt;
      &lt;extension base="normalizedString"&gt;
        &lt;attribute name="roid" type="eppcom:roidType"/&gt;
      &lt;/extension&gt;
    &lt;/simpleContent&gt;
  &lt;/complexType&gt;

  &lt;complexType name="extAuthInfoType"&gt;
    &lt;sequence&gt;
      &lt;any namespace="##other"/&gt;
    &lt;/sequence&gt;
  &lt;/complexType&gt;

&lt;!--
&lt;check&gt; response types.
--&gt;
  &lt;complexType name="reasonType"&gt;
    &lt;simpleContent&gt;
      &lt;extension base="eppcom:reasonBaseType"&gt;
        &lt;attribute name="lang" type="language"/&gt;
      &lt;/extension&gt;
    &lt;/simpleContent&gt;
  &lt;/complexType&gt;

  &lt;simpleType name="reasonBaseType"&gt;
    &lt;restriction base="token"&gt;
      &lt;minLength value="1"/&gt;
      &lt;maxLength value="32"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
Abstract client and object identifier type.
--&gt;
  &lt;simpleType name="clIDType"&gt;
    &lt;restriction base="token"&gt;
      &lt;minLength value="3"/&gt;
      &lt;maxLength value="16"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
DNS label type.
--&gt;
  &lt;simpleType name="labelType"&gt;
    &lt;restriction base="token"&gt;
      &lt;minLength value="1"/&gt;
      &lt;maxLength value="255"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
Non-empty token type.
--&gt;
  &lt;simpleType name="minTokenType"&gt;
    &lt;restriction base="token"&gt;
      &lt;minLength value="1"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
Repository Object IDentifier type.
--&gt;
  &lt;simpleType name="roidType"&gt;
    &lt;restriction base="token"&gt;
      &lt;pattern value="(\w|_){1,80}-\w{1,8}"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
Transfer status identifiers.
--&gt;
  &lt;simpleType name="trStatusType"&gt;
    &lt;restriction base="token"&gt;
      &lt;enumeration value="clientApproved"/&gt;
      &lt;enumeration value="clientCancelled"/&gt;
      &lt;enumeration value="clientRejected"/&gt;
      &lt;enumeration value="pending"/&gt;
      &lt;enumeration value="serverApproved"/&gt;
      &lt;enumeration value="serverCancelled"/&gt;
    &lt;/restriction&gt;
  &lt;/simpleType&gt;

&lt;!--
End of schema.
--&gt;
&lt;/schema&gt;
END</artwork>
        </figure></t>
      </section>
    </section>

    <section title="Internationalization Considerations">
      <t>EPP is represented in XML, which provides native support for encoding
      information using the Unicode character set and its more compact
      representations including UTF-8.  Conformant XML processors recognize
      both UTF-8 and UTF-16.  Though XML includes provisions to identify
      and use other character encodings through use of an "encoding"
      attribute in an &lt;?xml?&gt; declaration, use of UTF-8 is RECOMMENDED in
      environments where parser encoding support incompatibility exists.</t>

      <t>EPP includes a provision for returning a human-readable message with
      every result code.  This document describes result codes in English,
      but the actual text returned with a result MAY be provided in a
      language negotiated when a session is established.  Languages other
      than English MUST be noted through specification of a "lang"
      attribute for each message.  Valid values for the "lang" attribute
      and "lang" negotiation elements are described in <xref target="RFC3066"/>.</t>

      <t>All date-time values presented via EPP MUST be expressed in Universal
      Coordinated Time using the Gregorian calendar.  XML Schema allows use
      of time zone identifiers to indicate offsets from the zero meridian,
      but this option MUST NOT be used with EPP.  The extended date-time
      form using upper case "T" and "Z" characters defined in <xref target="W3C.REC-xmlschema-2-20041028"/>
      MUST be used to represent date-time values as XML Schema does not
      support truncated date-time forms or lower case "T" and "Z"
      characters.</t>
    </section>

    <section title="IANA Considerations">
      <t>This document uses URNs to describe XML namespaces and XML schemas
      conforming to a registry mechanism described in <xref target="RFC3688"/>.
      Four URI assignments have been registered by the IANA.</t>

      <t>Registration request for the EPP namespace:</t>

      <t>URI: urn:ietf:params:xml:ns:epp-1.0</t>

      <t>Registrant Contact: See the "Author's Address" section of this document.</t>

      <t>XML: None.  Namespace URIs do not represent an XML specification.</t>

      <t>Registration request for the EPP XML schema:</t>

      <t>URI: urn:ietf:params:xml:schema:epp-1.0</t>

      <t>Registrant Contact: See the "Author's Address" section of this document.</t>

      <t>XML: See the "Base Schema" section of this document.</t>

      <t>Registration request for the EPP shared structure namespace:</t>

      <t>URI: urn:ietf:params:xml:ns:eppcom-1.0</t>

      <t>Registrant Contact: See the "Author's Address" section of this document.</t>

      <t>XML: None.  Namespace URIs do not represent an XML specification.</t>

      <t>Registration request for the EPP shared structure XML schema:</t>

      <t>URI: urn:ietf:params:xml:schema:eppcom-1.0</t>

      <t>Registrant Contact: See the "Author's Address" section of this document.</t>

      <t>XML: See the "Shared Structure Schema" section of this document.</t>
    </section>

    <section title="Security Considerations">
      <t>EPP provides only simple client authentication services.  A passive
      attack is sufficient to recover client identifiers and passwords,
      allowing trivial command forgery.  Protection against most common
      attacks and more robust security services MUST be provided by other
      protocol layers.  Specifically, EPP instances MUST be protected using
      a transport mechanism or application protocol that provides integrity,
      confidentiality, and mutual strong client-server authentication.</t>

<?rfc needLines="3"?>
      <t>EPP uses a variant of the PLAIN SASL mechanism described in <xref target="RFC2595"/>
      to provide a simple application-layer authentication service that
      augments or supplements authentication and identification services
      that might be available at other protocol layers.  Where the PLAIN
      SASL mechanism specifies provision of an authorization identifier,
      authentication identifier, and password as a single string separated
      by ASCII NUL characters, EPP specifies use of a combined
      authorization and authentication identifier and a password provided
      as distinct XML elements.</t>

      <t>Repeated password guessing attempts can be discouraged by limiting
      the number of &lt;login&gt; attempts that can be attempted on an open
      connection.  A server MAY close an open connection if multiple
      &lt;login&gt; attempts are made with either an invalid client identifier,
      an invalid password, or both an invalid client identifier and an
      invalid password.</t>

      <t>EPP uses authentication information associated with objects to
      confirm object transfer authority.  Authentication information
      exchanged between EPP clients and third-party entities MUST be
      exchanged using a facility that provides privacy and integrity
      services to protect against unintended disclosure and modification
      while in transit.</t>

      <t>EPP instances SHOULD be protected using a transport mechanism or
      application protocol that provides anti-replay protection.  EPP provides
      some protection against replay attacks through command idempotency and
      client-initiated transaction identification.  Consecutive command replays
      will not change the state of an object in any way.  There is, however, a
      chance of unintended or malicious consequence if a command is replayed
      after intervening commands have changed the object state and client
      identifiers are not used to detect replays.  For example, a replayed
      &lt;create&gt; command that follows a &lt;delete&gt; command might
      succeed without additional facilities to prevent or detect the replay.</t>
    </section>

    <section title="Acknowledgements">
      <t>This document was originally written as an individual submission
      Internet-Draft.  The PROVREG working group later adopted it as a
      working group document and provided many invaluable comments and
      suggested improvements.  The author wishes to acknowledge the efforts
      of WG chairs Edward Lewis and Jaap Akkerhuis for their process and
      editorial contributions.</t>

      <t>Specific suggestions that have been incorporated into this document
      were provided by Chris Bason, Eric Brunner-Williams, Jordyn Buchanan,
      Roger Castillo Cortazar, Dave Crocker, Ayesha Damaraju, Sheer El-
      Showk, Patrik Faltstrom, James Gould, John Immordino, Dan Kohn, Hong
      Liu, Klaus Malorny, Dan Manley, Michael Mealling, Patrick Mevzek,
      Andrew Newton, Budi Rahardjo, Asbjorn Steira, Rick Wesson, and Jay
      Westerdal.</t>
    </section>
  </middle>

  <back>

<?rfc rfcedstyle="no"?>
    <references title="Normative References">
      &rfc2119;
      &rfc2277;
      &rfc2914;
      &rfc3066;
      &rfc3629;
      &rfc3688;
      &W3C.xml;
      &W3C.xmlschema-1;
      &W3C.xmlschema-2;
    </references>

    <references title="Informative References">
      &rfc0793;
      &rfc2595;
      &rfc2781;
      &rfc2821;
      &rfc2960;
      &rfc3023;
      &rfc3080;
      &rfc3375;
      &rfc3730;
      &W3C.p3p;
    </references>

<?rfc rfcedstyle="yes"?>

<?rfc needLines="100"?>
    <section title="Object Mapping Template">
      <t>This appendix describes a recommended outline for documenting the EPP
      mapping of an object.  Documents that describe EPP object mappings
      SHOULD describe the mapping in a format similar to the one used here.
      Additional sections are required if the object mapping is written in
      Internet-Draft or RFC format.</t>

      <t>
        <list style="hanging">
          <t hangText="1.">Introduction<vspace blankLines="1"/>
          Provide an introduction that describes the object and an overview of
          the mapping to EPP.<vspace blankLines="1"/></t>

          <t hangText="2.">Object Attributes<vspace blankLines="1"/>
          Describe the attributes associated with the object, including
          references to syntax specifications as appropriate.  Examples of
          object attributes include a name or identifier and dates associated
          with modification events.<vspace blankLines="1"/></t>

          <t hangText="3.">EPP Command Mapping<vspace blankLines="1"/></t>

          <t hangText="3.1.">EPP Query Commands<vspace blankLines="1"/></t>

          <t hangText="3.1.1.">EPP &lt;check&gt; Command<vspace blankLines="1"/>
          Describe the object-specific mappings required to implement the EPP
          &lt;check&gt; command.  Include both sample commands and sample responses.
          <vspace blankLines="1"/></t>

          <t hangText="3.1.2.">EPP &lt;info&gt; Command<vspace blankLines="1"/>
          Describe the object-specific mappings required to implement the EPP
          &lt;info&gt; command.  Include both sample commands and sample responses.
          <vspace blankLines="1"/></t>

          <t hangText="3.1.3.">EPP &lt;poll&gt; Command<vspace blankLines="1"/>
          Describe the object-specific mappings required to implement the EPP
          &lt;poll&gt; command.  Include both sample commands and sample responses.
          <vspace blankLines="1"/></t>

          <t hangText="3.1.4.">EPP &lt;transfer&gt; Command<vspace blankLines="1"/>
          Describe the object-specific mappings required to implement the EPP
          &lt;transfer&gt; query command.  Include both sample commands and sample responses.
          <vspace blankLines="1"/></t>

          <t hangText="3.2.">EPP Transform Commands<vspace blankLines="1"/></t>

          <t hangText="3.2.1.">EPP &lt;create&gt; Command<vspace blankLines="1"/>
          Describe the object-specific mappings required to implement the EPP
	  &lt;create&gt; command.  Include both sample commands and sample responses.
	  Describe the status of the object with respect to time, including
          expected client and server behavior if a validity period is used.
          <vspace blankLines="1"/></t>

          <t hangText="3.2.2.">EPP &lt;delete&gt; Command<vspace blankLines="1"/>
          Describe the object-specific mappings required to implement the EPP
          &lt;delete&gt; command.  Include both sample commands and sample responses.
          <vspace blankLines="1"/></t>

          <t hangText="3.2.3.">EPP &lt;renew&gt; Command<vspace blankLines="1"/>
          Describe the object-specific mappings required to implement the EPP
          &lt;renew&gt; command.  Include both sample commands and sample responses.
          <vspace blankLines="1"/></t>

          <t hangText="3.2.4.">EPP &lt;transfer&gt; Command<vspace blankLines="1"/>
          Describe the object-specific mappings required to implement the EPP
	  &lt;transfer&gt; command.  Include both sample commands and sample
          responses.
          <vspace blankLines="1"/></t>

          <t hangText="3.2.4.">EPP &lt;update&gt; Command<vspace blankLines="1"/>
          Describe the object-specific mappings required to implement the EPP
          &lt;update&gt; command.  Include both sample commands and sample responses.
          <vspace blankLines="1"/></t>

          <t hangText="4.">Formal Syntax<vspace blankLines="1"/>
          Provide the XML schema for the object mapping.  An XML DTD MUST NOT
          be used as DTDs do not provide sufficient support for XML namespaces
          and strong data typing.</t>
        </list>
      </t>
    </section>

    <section title="Media Type Registration: application/epp+xml">
      <t>MIME media type name: application</t>

      <t>MIME subtype name: epp+xml</t>

      <t>Required parameters: none</t>

      <t>Optional parameters: Same as the charset parameter of application/xml
      as specified in <xref target="RFC3023"/>.</t>

      <t>Encoding considerations: Same as the encoding considerations of
      application/xml as specified in <xref target="RFC3023"/>.</t>

      <t>Security considerations: This type has all of the security
      considerations described in <xref target="RFC3023"/> plus the considerations
      specified in the Security Considerations section of this document.</t>

      <t>Interoperability considerations: XML has proven to be interoperable
      across WWW Distributed Authoring and Versioning (WebDAV) clients and servers, and for import and export from
      multiple XML authoring tools.  For maximum interoperability,
      validating processors are recommended.  Although non-validating
      processors can be more efficient, they are not required to handle all
      features of XML.  For further information, see Section 2.9,
      "Standalone Document Declaration", and Section 5, "Conformance", of
      <xref target="W3C.REC-xml-20040204"/>.</t>

      <t>Published specification: This document.</t>

      <t>Applications that use this media type: EPP is device-, platform-,
      and vendor-neutral and is supported by multiple service providers.</t>

      <t>Additional information: If used, magic numbers, fragment identifiers,
      base URIs, and use of the BOM should be as specified in <xref target="RFC3023"/>.</t>

      <t>Magic number(s): None.</t>
      <t>File extension(s): .xml</t>
      <t>Macintosh file type code(s): "TEXT"</t>

      <t>Person &amp; email address for further information: See the "Author's
      Address" section of this document.</t>

      <t>Intended usage: COMMON</t>

      <t>Author/Change controller: IETF</t>
    </section>

    <section title="Changes from RFC 3730">
      <t><list style="numbers">
        <t>Minor reformatting as a result of converting I-D source format from nroff to XML.
        <vspace blankLines="1"/>
        </t>

        <t>Updated the state diagram in Section 2 to note that a &lt;hello&gt; can be
        received and processed at any time that a server is waiting for a command.  The
        text correctly describes how this works, but the state diagram was inconsistent
        with the text.
        <vspace blankLines="1"/>
        </t>

        <t>In Section 2, changed "The specific strings used to associate URIs and namespaces
        (such as the string "foo" in "xmlns:foo") in EPP are illustrative and are not needed
        for interoperability" to "The XML namespace prefixes used in examples (such as the
        string "foo" in "xmlns:foo") are solely for illustrative purposes.  A conforming
        implementation MUST NOT require the use of these or any other specific namespace prefixes".
        <vspace blankLines="1"/>
        </t>

        <t>Removed the last paragraph from Section 2 that described an error in
        the W3C XML reference specification.  This was corrected in a later edition.  References
        in this specification have been updated to cite the most current version.
        Preserved the last sentence by appending it to the end of the previous
        paragraph.
        <vspace blankLines="1"/>
        </t>

        <t>Updated the description of the &lt;value&gt; element in Section 2.6 to add
        "or other information" to "a client-provided element (including XML tag and value)".
        <vspace blankLines="1"/>
        </t>

        <t>Changed text in Section 2.9.2.3 from this:
        <vspace blankLines="1"/>
        "Service messages MUST be created for all clients affected by an action on an object.  For
        example, &lt;transfer&gt; actions MUST be reported to both the client that
        requests an object transfer and the client that has the authority to
        approve or reject the transfer request."
        <vspace blankLines="1"/>
        to this:
        <vspace blankLines="1"/>
        "Service messages SHOULD be created for passive clients affected by an
	action on an object.  Service messages MAY also be created for active
	clients that request an action on an object, though such messages MUST
	NOT replace the normal protocol response to the request.  For example,
	&lt;transfer&gt; actions SHOULD be reported to the client that has the
	authority to approve or reject a transfer request.  Other methods of
	server-client action notification, such as offline reporting, are also
	possible and are beyond the scope of this specification."
        <vspace blankLines="1"/>
        </t>

        <t>Changed text in Section 2.9.2.3 from this:
        <vspace blankLines="1"/>
        "A &lt;poll&gt; acknowledgement response notes the number of messages remaining in
        the queue and the ID of the next message available for retrieval."
        <vspace blankLines="1"/>
        to this:
        <vspace blankLines="1"/>
        "A &lt;poll&gt; acknowledgement response notes the ID of the message that has been
        acknowledged and the number of messages remaining in the queue."
        <vspace blankLines="1"/>
        Fixed the example to note the correct message ID.  This was done because the msgID
        isn't needed to retrieve a message, only to ack and dequeue it, so it doesn't need
        to be returned in the response.  Implementations are known to implement this
        feature as updated.
        <vspace blankLines="1"/>
        </t>

        <t>Changed text in Section 2.9.3.4 from this:
        <vspace blankLines="1"/>
        "Once a transfer request has been received by the server, the server
        MUST notify the current sponsoring client of the requested transfer
        by queuing a service message for retrieval via the &lt;poll&gt; command."
        <vspace blankLines="1"/>
        to this:
        <vspace blankLines="1"/>
        "Once a transfer request has been received by the server, the server
        MUST notify the current sponsoring client of the requested transfer
        either by queuing a service message for retrieval via the &lt;poll&gt; command
        or by using an out-of-band mechanism to inform the client of the request."
        <vspace blankLines="1"/>
        </t>

        <t>Updated Security Considerations to note implemented required practices for
        authentication and replay protection.
        <vspace blankLines="1"/>
        </t>

        <t>Updated XML references.  Updated reference from RFC 2279 to RFC 3629.
        <vspace blankLines="1"/>
        </t>

        <t>Removed text describing use of the XML Schema schemaLocation attribute.
        This is an optional attribute that doesn't need to be mandated for use in
        EPP.
        <vspace blankLines="1"/>
        </t>

        <t>Moved RFCs 2781 and 3375 (Informational RFCs) from the normative reference section
        to the informative reference section.
        <vspace blankLines="1"/>
        </t>

        <t>Moved RFC 3023 from the normative reference section to the informative reference section.
        This reference is used only in an informative appendix.
        <vspace blankLines="1"/>
        </t>

        <t>Removed references to RFC 3339 and replaced them with references to the W3C XML
        Schema specification.</t>
      </list></t>
    </section>
  </back>
</rfc>
