Shared Registry Systemfor gTLDs
* secured by SSL/TLS
|
V
+-----------------+ +-----------------+
| Waiting for | Connected | Prepare |
| Client |----------------->| Greeting |
+-----------------+ or <hello> +-----------------+
^ |
| Close Connection Send |
| or Idle Greeting |
+-----------------+ V
| End | Timeout +-----------------+
| Session |<-----------------| Waiting for |
+-----------------+ | Client |
^ ^ ^ Send +-------->| Authentication |
| | | Response | +-----------------+
| | | +--------------+ |
| | | | Prepare Fail | | <login>
| | +-----| Response | | Received
| | Send +--------------+ V
| | 2501 ^ +-----------------+
| | Response | | Processing |
| | +---------| <login> |
| | Auth Fail +-----------------+
| | |
| | | Auth OK
| | V
| | Timeout +-----------------+
| +----------------------------| Waiting for |
| | Command |
| Send x5xx +-----------------+
| Response +-----------------+ Send ^ |
+-----------| Prepare | Response | | Command
| Response |----------+ | Received
+-----------------+ V
^ +-----------------+
Command | | Processing |
Processed +----------| Command |
+-----------------+
$frame = pack('N', length($xml) + 4).$xml<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<command>
<cmdName>
<objectType:cmdName
xmlns:contact="objectTypeNameSpace"
xsi:schemaLocation="objectTypeSchema">
<objectType:parameter name="foo">bar</objectType:parameter>
</objectType:check>
</cmdName>
<clTRID>ABC-12345</clTRID>
</command>
</epp>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<response>
<result code="200">Command completed successfully.</result>
<resData>
<objectType:cmdNameData>
<objectType:parameter name="foo">bar</objectType:parameter>
</objectType:cmdNameData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>XYZ-54321</svTRID>
</trID>
</response>
</epp>
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<command>
<info>
<domain:info xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
<domain:name>example.uk.com</domain:name>
</domain:info>
</info>
<clTRID>ABC-12345</clTRID>
</command>
</epp>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<response>
<result code="1000">
<msg>Command completed successfully.</msg>
</result>
<resData>
<domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
<domain:name>example.uk.com</domain:name>
<domain:roid>CNIC-DO302520</domain:roid>
<domain:status r="ok"/>
<domain:registrant>C11480</domain:registrant>
<domain:contact type="admin">C11480</domain:contact>
<domain:contact type="tech">H12345</domain:contact>
<domain:contact type="billing">C27228</domain:contact>
<domain:clID>C11480</domain:clID>
<domain:crDate>1995-01-01T00:00:00.0Z</domain:crDate>
<domain:exDate>2037-01-01T23:59:59.0Z</domain:exDate>
<domain:upDate>2006-09-06T15:43:19.0Z</domain:upDate>
<domain:ns>
<domain:hostObj>ns0.centralnic.net</domain:hostObj>
<domain:hostObj>ns1.centralnic.net</domain:hostObj>
</domain:ns>
<domain:authInfo>
<domain:pw>a893cd40c2bfa7d0</domain:pw>
</domain:authInfo>
</domain:infData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>XYZ-54321</svTRID>
</trID>
</response>
</epp>
Not many off-the-shelf client implementations
Plenty of libraries:
Listen 700
LoadModule epp_module modules/mod_epp.so
<VirtualHost *:700>
ServerName epp.centralnic.com
EPPEngine On
EPPCommandRoot /epp/command # <create> maps to /epp/command/create
EPPSessionRoot /epp/session # <login> maps to /epp/session/login
EPPErrorRoot /epp/error
EPPAuthURI /epp/auth
Alias /epp /var/lib/epp
<Location "/epp/auth">
AuthType Digest
AuthName "EPP"
AuthUserFile /var/lib/epp/etc/epp.passwd
require valid-user
</Location>
</VirtualHost>
<Location /epp> ProxyPass http://pool.epp.registry.tld/epp </Location>