epp-client 0.0.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +24 -0
  3. data/.simplecov +16 -0
  4. data/.travis.yml +11 -0
  5. data/.yardopts +4 -0
  6. data/Gemfile +20 -0
  7. data/Gemfile.lock +51 -0
  8. data/LICENSE +1 -1
  9. data/README.md +75 -0
  10. data/Rakefile +2 -37
  11. data/epp-client.gemspec +15 -58
  12. data/gemfiles/Gemfile.ruby18 +13 -0
  13. data/lib/epp-client.rb +94 -7
  14. data/lib/epp-client/client.rb +117 -20
  15. data/lib/epp-client/commands/check.rb +11 -0
  16. data/lib/epp-client/commands/command.rb +24 -0
  17. data/lib/epp-client/commands/create.rb +11 -0
  18. data/lib/epp-client/commands/delete.rb +11 -0
  19. data/lib/epp-client/commands/info.rb +11 -0
  20. data/lib/epp-client/commands/login.rb +40 -0
  21. data/lib/epp-client/commands/logout.rb +11 -0
  22. data/lib/epp-client/commands/poll.rb +28 -0
  23. data/lib/epp-client/commands/read_write_command.rb +18 -0
  24. data/lib/epp-client/commands/renew.rb +11 -0
  25. data/lib/epp-client/commands/transfer.rb +25 -0
  26. data/lib/epp-client/commands/update.rb +11 -0
  27. data/lib/epp-client/contact/check.rb +23 -0
  28. data/lib/epp-client/contact/check_response.rb +22 -0
  29. data/lib/epp-client/contact/command.rb +87 -0
  30. data/lib/epp-client/contact/create.rb +34 -0
  31. data/lib/epp-client/contact/create_response.rb +14 -0
  32. data/lib/epp-client/contact/delete.rb +21 -0
  33. data/lib/epp-client/contact/delete_response.rb +9 -0
  34. data/lib/epp-client/contact/info.rb +21 -0
  35. data/lib/epp-client/contact/info_response.rb +74 -0
  36. data/lib/epp-client/contact/response.rb +34 -0
  37. data/lib/epp-client/contact/transfer.rb +21 -0
  38. data/lib/epp-client/contact/transfer_response.rb +26 -0
  39. data/lib/epp-client/contact/update.rb +80 -0
  40. data/lib/epp-client/contact/update_response.rb +9 -0
  41. data/lib/epp-client/domain/check.rb +23 -0
  42. data/lib/epp-client/domain/check_response.rb +22 -0
  43. data/lib/epp-client/domain/command.rb +92 -0
  44. data/lib/epp-client/domain/create.rb +49 -0
  45. data/lib/epp-client/domain/create_response.rb +17 -0
  46. data/lib/epp-client/domain/delete.rb +21 -0
  47. data/lib/epp-client/domain/delete_response.rb +9 -0
  48. data/lib/epp-client/domain/info.rb +21 -0
  49. data/lib/epp-client/domain/info_response.rb +66 -0
  50. data/lib/epp-client/domain/renew.rb +34 -0
  51. data/lib/epp-client/domain/renew_response.rb +14 -0
  52. data/lib/epp-client/domain/response.rb +34 -0
  53. data/lib/epp-client/domain/transfer.rb +27 -0
  54. data/lib/epp-client/domain/transfer_response.rb +29 -0
  55. data/lib/epp-client/domain/update.rb +81 -0
  56. data/lib/epp-client/domain/update_response.rb +9 -0
  57. data/lib/epp-client/host/check.rb +23 -0
  58. data/lib/epp-client/host/check_response.rb +22 -0
  59. data/lib/epp-client/host/command.rb +47 -0
  60. data/lib/epp-client/host/create.rb +24 -0
  61. data/lib/epp-client/host/create_response.rb +14 -0
  62. data/lib/epp-client/host/delete.rb +21 -0
  63. data/lib/epp-client/host/delete_response.rb +9 -0
  64. data/lib/epp-client/host/info.rb +21 -0
  65. data/lib/epp-client/host/info_response.rb +42 -0
  66. data/lib/epp-client/host/response.rb +34 -0
  67. data/lib/epp-client/host/update.rb +76 -0
  68. data/lib/epp-client/host/update_response.rb +9 -0
  69. data/lib/epp-client/request.rb +29 -74
  70. data/lib/epp-client/requests/abstract.rb +30 -0
  71. data/lib/epp-client/requests/command.rb +28 -0
  72. data/lib/epp-client/requests/extension.rb +28 -0
  73. data/lib/epp-client/requests/hello.rb +12 -0
  74. data/lib/epp-client/response.rb +45 -8
  75. data/lib/epp-client/response_helper.rb +25 -0
  76. data/lib/epp-client/server.rb +167 -63
  77. data/lib/epp-client/testing.rb +59 -0
  78. data/lib/epp-client/version.rb +3 -0
  79. data/lib/epp-client/xml_helper.rb +71 -0
  80. data/test/commands/test_check_command.rb +33 -0
  81. data/test/commands/test_create_command.rb +53 -0
  82. data/test/commands/test_delete_command.rb +28 -0
  83. data/test/commands/test_info_command.rb +28 -0
  84. data/test/commands/test_login_command.rb +56 -0
  85. data/test/commands/test_logout_command.rb +22 -0
  86. data/test/commands/test_poll_command.rb +54 -0
  87. data/test/commands/test_renew_command.rb +39 -0
  88. data/test/commands/test_transfer_command.rb +37 -0
  89. data/test/commands/test_update_command.rb +60 -0
  90. data/test/contact/test_contact_check.rb +33 -0
  91. data/test/contact/test_contact_check_response.rb +38 -0
  92. data/test/contact/test_contact_create.rb +70 -0
  93. data/test/contact/test_contact_create_response.rb +33 -0
  94. data/test/contact/test_contact_delete.rb +28 -0
  95. data/test/contact/test_contact_delete_response.rb +23 -0
  96. data/test/contact/test_contact_info.rb +28 -0
  97. data/test/contact/test_contact_info_response.rb +100 -0
  98. data/test/contact/test_contact_transfer.rb +28 -0
  99. data/test/contact/test_contact_transfer_response.rb +100 -0
  100. data/test/contact/test_contact_update.rb +83 -0
  101. data/test/contact/test_contact_update_response.rb +23 -0
  102. data/test/domain/test_domain_check.rb +33 -0
  103. data/test/domain/test_domain_check_response.rb +38 -0
  104. data/test/domain/test_domain_create.rb +53 -0
  105. data/test/domain/test_domain_create_response.rb +39 -0
  106. data/test/domain/test_domain_delete.rb +28 -0
  107. data/test/domain/test_domain_delete_response.rb +23 -0
  108. data/test/domain/test_domain_info.rb +28 -0
  109. data/test/domain/test_domain_info_response.rb +107 -0
  110. data/test/domain/test_domain_renew.rb +39 -0
  111. data/test/domain/test_domain_renew_response.rb +32 -0
  112. data/test/domain/test_domain_transfer.rb +37 -0
  113. data/test/domain/test_domain_transfer_response.rb +112 -0
  114. data/test/domain/test_domain_update.rb +73 -0
  115. data/test/domain/test_domain_update_response.rb +23 -0
  116. data/test/fixtures/responses/contact/check.xml +27 -0
  117. data/test/fixtures/responses/contact/create.xml +19 -0
  118. data/test/fixtures/responses/contact/delete.xml +12 -0
  119. data/test/fixtures/responses/contact/info.xml +49 -0
  120. data/test/fixtures/responses/contact/transfer-query.xml +23 -0
  121. data/test/fixtures/responses/contact/transfer-request.xml +23 -0
  122. data/test/fixtures/responses/contact/update.xml +12 -0
  123. data/test/fixtures/responses/domain/check.xml +27 -0
  124. data/test/fixtures/responses/domain/create.xml +20 -0
  125. data/test/fixtures/responses/domain/delete.xml +12 -0
  126. data/test/fixtures/responses/domain/info-no-exDate.xml +38 -0
  127. data/test/fixtures/responses/domain/info.xml +39 -0
  128. data/test/fixtures/responses/domain/renew.xml +19 -0
  129. data/test/fixtures/responses/domain/transfer-query.xml +24 -0
  130. data/test/fixtures/responses/domain/transfer-request.xml +24 -0
  131. data/test/fixtures/responses/domain/update.xml +12 -0
  132. data/test/fixtures/responses/greeting.xml +25 -0
  133. data/test/fixtures/responses/host/check.xml +27 -0
  134. data/test/fixtures/responses/host/create.xml +19 -0
  135. data/test/fixtures/responses/host/delete.xml +12 -0
  136. data/test/fixtures/responses/host/info.xml +30 -0
  137. data/test/fixtures/responses/host/update.xml +12 -0
  138. data/test/helper.rb +89 -0
  139. data/test/host/test_host_check.rb +33 -0
  140. data/test/host/test_host_check_response.rb +38 -0
  141. data/test/host/test_host_create.rb +37 -0
  142. data/test/host/test_host_create_response.rb +33 -0
  143. data/test/host/test_host_delete.rb +28 -0
  144. data/test/host/test_host_delete_response.rb +23 -0
  145. data/test/host/test_host_info.rb +28 -0
  146. data/test/host/test_host_info_response.rb +72 -0
  147. data/test/host/test_host_update.rb +68 -0
  148. data/test/host/test_host_update_response.rb +23 -0
  149. data/test/requests/test_command_request.rb +16 -0
  150. data/test/requests/test_extension_request.rb +55 -0
  151. data/test/requests/test_hello_request.rb +15 -0
  152. data/test/support/schemas/all.xsd +21 -0
  153. data/test/support/schemas/contact-1.0.xsd +387 -0
  154. data/test/support/schemas/domain-1.0.xsd +432 -0
  155. data/test/support/schemas/epp-1.0.xsd +403 -0
  156. data/test/support/schemas/eppcom-1.0.xsd +93 -0
  157. data/test/support/schemas/host-1.0.xsd +240 -0
  158. data/test/test_client.rb +54 -0
  159. data/test/test_request.rb +15 -0
  160. data/test/test_server.rb +57 -0
  161. metadata +270 -91
  162. data/.document +0 -5
  163. data/README.rdoc +0 -17
  164. data/VERSION +0 -1
  165. data/lib/epp-client/hello_request.rb +0 -9
  166. data/test/test_epp-client.rb +0 -7
@@ -0,0 +1,68 @@
1
+ require 'helper'
2
+
3
+ class TestEppHostUpdateCommand < Test::Unit::TestCase
4
+ context 'EPP::Host::Update' do
5
+ setup do
6
+ @host_update = EPP::Host::Update.new('ns1.example.com',
7
+ :add => {
8
+ :addr => {:ipv4 => "198.51.100.53", :ipv6 => "2001:db8::53:1"},
9
+ :status => {:ok => "Okie Dokie"}},
10
+ :rem => {
11
+ :addr => {:ipv4 => "198.51.100.54", :ipv6 => "2001:db8::53:2"},
12
+ :status => {:ok => ["Okie Dokie", "en"]}},
13
+ :chg => {
14
+ :name => "ns2.example.com"
15
+ })
16
+
17
+ @update = EPP::Commands::Update.new(@host_update)
18
+ @command = EPP::Requests::Command.new('ABC-123', @update)
19
+ @request = EPP::Request.new(@command)
20
+ @xml = @request.to_xml
21
+
22
+ namespaces_from_request
23
+ end
24
+
25
+ should 'validate against schema' do
26
+ assert @xml.validate_schema(schema)
27
+ end
28
+
29
+ should 'set clTRID' do
30
+ assert_equal 'ABC-123', xpath_find('//epp:clTRID')
31
+ end
32
+
33
+ should 'set ns1.example.com as name' do
34
+ assert_equal 'ns1.example.com', xpath_find('//host:name')
35
+ end
36
+
37
+ should 'add IPv4 address' do
38
+ assert_equal "198.51.100.53", xpath_find('//host:add/host:addr[@ip="v4"]')
39
+ end
40
+
41
+ should 'add IPv6 address' do
42
+ assert_equal "2001:db8::53:1", xpath_find('//host:add/host:addr[@ip="v6"]')
43
+ end
44
+
45
+ should 'add status' do
46
+ assert_equal "Okie Dokie", xpath_find('//host:add/host:status')
47
+ assert_equal "ok", xpath_find('//host:add/host:status/@s')
48
+ end
49
+
50
+ should 'remove IPv4 address' do
51
+ assert_equal "198.51.100.54", xpath_find('//host:rem/host:addr[@ip="v4"]')
52
+ end
53
+
54
+ should 'remove IPv6 address' do
55
+ assert_equal "2001:db8::53:2", xpath_find('//host:rem/host:addr[@ip="v6"]')
56
+ end
57
+
58
+ should 'remove status' do
59
+ assert_equal "Okie Dokie", xpath_find('//host:rem/host:status')
60
+ assert_equal "en", xpath_find('//host:rem/host:status/@lang')
61
+ assert_equal "ok", xpath_find('//host:rem/host:status/@s')
62
+ end
63
+
64
+ should 'change name' do
65
+ assert_equal 'ns2.example.com', xpath_find('//host:chg/host:name')
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,23 @@
1
+ require 'helper'
2
+
3
+ class TestEppHostUpdateResponse < Test::Unit::TestCase
4
+ context 'EPP::Host::UpdateResponse' do
5
+ setup do
6
+ @response = EPP::Response.new(load_xml('host/update'))
7
+ @update_response = EPP::Host::UpdateResponse.new(@response)
8
+ end
9
+
10
+ should 'proxy methods to @response' do
11
+ assert_equal @response.message, @update_response.message
12
+ end
13
+
14
+ should 'be successful' do
15
+ assert @update_response.success?
16
+ assert_equal 1000, @update_response.code
17
+ end
18
+
19
+ should 'have message' do
20
+ assert_equal 'Command completed successfully', @update_response.message
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ require 'helper'
2
+
3
+ class TestEppCommandRequest < Test::Unit::TestCase
4
+ context 'EPP::Requests::Command' do
5
+ setup do
6
+ @logout = EPP::Commands::Logout.new
7
+ @command = EPP::Requests::Command.new('ABC-123', @logout)
8
+ @request = EPP::Request.new(@command)
9
+ end
10
+
11
+ should 'validate against schema' do
12
+ xml = @request.to_xml
13
+ assert xml.validate_schema(schema)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,55 @@
1
+ require 'helper'
2
+
3
+ class TestEppExtensionRequest < Test::Unit::TestCase
4
+ context 'EPP::Requests::Extension' do
5
+ context 'single extension' do
6
+ setup do
7
+ @domain_info = XML::Node.new('info')
8
+ @domain_info.namespaces.namespace = ns =
9
+ XML::Namespace.new(@domain_info, 'domain', "urn:ietf:params:xml:ns:domain-1.0")
10
+
11
+ xattr = XML::Attr.new(@domain_info, "schemaLocation", "urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd")
12
+ xattr.namespaces.namespace = XML::Namespace.new(@domain_info, 'xsi', 'http://www.w3.org/2001/XMLSchema-instance')
13
+
14
+ @domain_info << XML::Node.new('name', 'example.com', ns)
15
+
16
+ @extension = EPP::Requests::Extension.new(@domain_info)
17
+ @request = EPP::Request.new(@extension)
18
+ end
19
+
20
+ should 'validate against schema' do
21
+ xml = @request.to_xml
22
+ assert xml.validate_schema(schema), xml.to_s(:indent => 2)
23
+ end
24
+ end
25
+ context 'mutltiple extensions' do
26
+ setup do
27
+ @domain_info = XML::Node.new('info')
28
+ @domain_info.namespaces.namespace = ns =
29
+ XML::Namespace.new(@domain_info, 'domain', "urn:ietf:params:xml:ns:domain-1.0")
30
+
31
+ xattr = XML::Attr.new(@domain_info, "schemaLocation", "urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd")
32
+ xattr.namespaces.namespace = XML::Namespace.new(@domain_info, 'xsi', 'http://www.w3.org/2001/XMLSchema-instance')
33
+
34
+ @domain_info << XML::Node.new('name', 'example.com', ns)
35
+
36
+ @domain_check = XML::Node.new('check')
37
+ @domain_check.namespaces.namespace = ns =
38
+ XML::Namespace.new(@domain_check, 'domain', "urn:ietf:params:xml:ns:domain-1.0")
39
+
40
+ xattr = XML::Attr.new(@domain_check, "schemaLocation", "urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd")
41
+ xattr.namespaces.namespace = XML::Namespace.new(@domain_check, 'xsi', 'http://www.w3.org/2001/XMLSchema-instance')
42
+
43
+ @domain_check << XML::Node.new('name', 'example.com', ns)
44
+
45
+ @extension = EPP::Requests::Extension.new(@domain_info, @domain_check)
46
+ @request = EPP::Request.new(@extension)
47
+ end
48
+
49
+ should 'validate against schema' do
50
+ xml = @request.to_xml
51
+ assert xml.validate_schema(schema), xml.to_s(:indent => 2)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+
3
+ class TestEppHelloRequest < Test::Unit::TestCase
4
+ context 'EPP::Requests::Hello' do
5
+ setup do
6
+ @hello = EPP::Requests::Hello.new
7
+ @request = EPP::Request.new(@hello)
8
+ end
9
+
10
+ should 'validate against schema' do
11
+ xml = @request.to_xml
12
+ assert xml.validate_schema(schema)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <schema targetNamespace="epp:client:test:schema"
4
+ xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"
5
+ xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
6
+ xmlns:host="urn:ietf:params:xml:ns:host-1.0"
7
+ xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
8
+ xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
9
+ xmlns="http://www.w3.org/2001/XMLSchema"
10
+ elementFormDefault="qualified">
11
+
12
+ <!--
13
+ Import common element types.
14
+ -->
15
+ <import namespace="urn:ietf:params:xml:ns:eppcom-1.0" schemaLocation="eppcom-1.0.xsd"/>
16
+ <import namespace="urn:ietf:params:xml:ns:epp-1.0" schemaLocation="epp-1.0.xsd"/>
17
+ <import namespace="urn:ietf:params:xml:ns:host-1.0" schemaLocation="host-1.0.xsd"/>
18
+ <import namespace="urn:ietf:params:xml:ns:domain-1.0" schemaLocation="domain-1.0.xsd"/>
19
+ <import namespace="urn:ietf:params:xml:ns:contact-1.0" schemaLocation="contact-1.0.xsd"/>
20
+
21
+ </schema>
@@ -0,0 +1,387 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <schema targetNamespace="urn:ietf:params:xml:ns:contact-1.0"
4
+ xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"
5
+ xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
6
+ xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
7
+ xmlns="http://www.w3.org/2001/XMLSchema"
8
+ elementFormDefault="qualified">
9
+ <!--
10
+ Import common element types.
11
+ -->
12
+ <import namespace="urn:ietf:params:xml:ns:eppcom-1.0" schemaLocation="eppcom-1.0.xsd"/>
13
+ <import namespace="urn:ietf:params:xml:ns:epp-1.0" schemaLocation="epp-1.0.xsd"/>
14
+
15
+ <annotation>
16
+ <documentation>
17
+ Extensible Provisioning Protocol v1.0
18
+ contact provisioning schema.
19
+ </documentation>
20
+ </annotation>
21
+
22
+ <!--
23
+ Child elements found in EPP commands.
24
+ -->
25
+ <element name="check" type="contact:mIDType"/>
26
+ <element name="create" type="contact:createType"/>
27
+ <element name="delete" type="contact:sIDType"/>
28
+ <element name="info" type="contact:authIDType"/>
29
+ <element name="transfer" type="contact:authIDType"/>
30
+ <element name="update" type="contact:updateType"/>
31
+
32
+ <!--
33
+ Utility types.
34
+ -->
35
+ <simpleType name="ccType">
36
+ <restriction base="token">
37
+ <length value="2"/>
38
+ </restriction>
39
+ </simpleType>
40
+
41
+ <complexType name="e164Type">
42
+ <simpleContent>
43
+ <extension base="contact:e164StringType">
44
+ <attribute name="x" type="token"/>
45
+ </extension>
46
+ </simpleContent>
47
+ </complexType>
48
+
49
+ <simpleType name="e164StringType">
50
+ <restriction base="token">
51
+ <pattern value="(\+[0-9]{1,3}\.[0-9]{1,14})?"/>
52
+ <maxLength value="17"/>
53
+ </restriction>
54
+ </simpleType>
55
+
56
+ <simpleType name="pcType">
57
+ <restriction base="token">
58
+ <maxLength value="16"/>
59
+ </restriction>
60
+ </simpleType>
61
+
62
+ <simpleType name="postalLineType">
63
+ <restriction base="normalizedString">
64
+ <minLength value="1"/>
65
+ <maxLength value="255"/>
66
+ </restriction>
67
+ </simpleType>
68
+
69
+ <simpleType name="optPostalLineType">
70
+ <restriction base="normalizedString">
71
+ <maxLength value="255"/>
72
+ </restriction>
73
+ </simpleType>
74
+
75
+ <!--
76
+ Child elements of the <create> command.
77
+ -->
78
+ <complexType name="createType">
79
+ <sequence>
80
+ <element name="id" type="eppcom:clIDType"/>
81
+ <element name="postalInfo" type="contact:postalInfoType"
82
+ maxOccurs="2"/>
83
+ <element name="voice" type="contact:e164Type"
84
+ minOccurs="0"/>
85
+ <element name="fax" type="contact:e164Type"
86
+ minOccurs="0"/>
87
+ <element name="email" type="eppcom:minTokenType"/>
88
+ <element name="authInfo" type="contact:authInfoType"/>
89
+ <element name="disclose" type="contact:discloseType"
90
+ minOccurs="0"/>
91
+ </sequence>
92
+ </complexType>
93
+
94
+ <complexType name="postalInfoType">
95
+ <sequence>
96
+ <element name="name" type="contact:postalLineType"/>
97
+ <element name="org" type="contact:optPostalLineType"
98
+ minOccurs="0"/>
99
+ <element name="addr" type="contact:addrType"/>
100
+ </sequence>
101
+ <attribute name="type" type="contact:postalInfoEnumType"
102
+ use="required"/>
103
+ </complexType>
104
+
105
+ <simpleType name="postalInfoEnumType">
106
+ <restriction base="token">
107
+ <enumeration value="loc"/>
108
+ <enumeration value="int"/>
109
+ </restriction>
110
+ </simpleType>
111
+
112
+ <complexType name="addrType">
113
+ <sequence>
114
+ <element name="street" type="contact:optPostalLineType"
115
+ minOccurs="0" maxOccurs="3"/>
116
+ <element name="city" type="contact:postalLineType"/>
117
+ <element name="sp" type="contact:optPostalLineType"
118
+ minOccurs="0"/>
119
+ <element name="pc" type="contact:pcType"
120
+ minOccurs="0"/>
121
+ <element name="cc" type="contact:ccType"/>
122
+ </sequence>
123
+ </complexType>
124
+
125
+ <complexType name="authInfoType">
126
+ <choice>
127
+ <element name="pw" type="eppcom:pwAuthInfoType"/>
128
+ <element name="ext" type="eppcom:extAuthInfoType"/>
129
+ </choice>
130
+ </complexType>
131
+
132
+ <complexType name="discloseType">
133
+ <sequence>
134
+ <element name="name" type="contact:intLocType"
135
+ minOccurs="0" maxOccurs="2"/>
136
+ <element name="org" type="contact:intLocType"
137
+ minOccurs="0" maxOccurs="2"/>
138
+ <element name="addr" type="contact:intLocType"
139
+ minOccurs="0" maxOccurs="2"/>
140
+ <element name="voice" minOccurs="0"/>
141
+ <element name="fax" minOccurs="0"/>
142
+ <element name="email" minOccurs="0"/>
143
+ </sequence>
144
+ <attribute name="flag" type="boolean" use="required"/>
145
+ </complexType>
146
+
147
+ <complexType name="intLocType">
148
+ <attribute name="type" type="contact:postalInfoEnumType"
149
+ use="required"/>
150
+ </complexType>
151
+
152
+
153
+ <!--
154
+ Child element of commands that require only an identifier.
155
+ -->
156
+ <complexType name="sIDType">
157
+ <sequence>
158
+ <element name="id" type="eppcom:clIDType"/>
159
+ </sequence>
160
+ </complexType>
161
+
162
+ <!--
163
+ Child element of commands that accept multiple identifiers.
164
+ -->
165
+ <complexType name="mIDType">
166
+ <sequence>
167
+ <element name="id" type="eppcom:clIDType"
168
+ maxOccurs="unbounded"/>
169
+ </sequence>
170
+ </complexType>
171
+
172
+ <!--
173
+ Child elements of the <info> and <transfer> commands.
174
+ -->
175
+ <complexType name="authIDType">
176
+ <sequence>
177
+ <element name="id" type="eppcom:clIDType"/>
178
+ <element name="authInfo" type="contact:authInfoType"
179
+ minOccurs="0"/>
180
+ </sequence>
181
+ </complexType>
182
+
183
+ <!--
184
+ Child elements of the <update> command.
185
+ -->
186
+ <complexType name="updateType">
187
+ <sequence>
188
+ <element name="id" type="eppcom:clIDType"/>
189
+ <element name="add" type="contact:addRemType"
190
+ minOccurs="0"/>
191
+ <element name="rem" type="contact:addRemType"
192
+ minOccurs="0"/>
193
+ <element name="chg" type="contact:chgType"
194
+ minOccurs="0"/>
195
+ </sequence>
196
+ </complexType>
197
+
198
+ <!--
199
+ Data elements that can be added or removed.
200
+ -->
201
+ <complexType name="addRemType">
202
+ <sequence>
203
+ <element name="status" type="contact:statusType"
204
+ maxOccurs="7"/>
205
+ </sequence>
206
+ </complexType>
207
+
208
+ <!--
209
+ Data elements that can be changed.
210
+ -->
211
+ <complexType name="chgType">
212
+ <sequence>
213
+ <element name="postalInfo" type="contact:chgPostalInfoType"
214
+ minOccurs="0" maxOccurs="2"/>
215
+ <element name="voice" type="contact:e164Type"
216
+ minOccurs="0"/>
217
+ <element name="fax" type="contact:e164Type"
218
+ minOccurs="0"/>
219
+ <element name="email" type="eppcom:minTokenType"
220
+ minOccurs="0"/>
221
+ <element name="authInfo" type="contact:authInfoType"
222
+ minOccurs="0"/>
223
+ <element name="disclose" type="contact:discloseType"
224
+ minOccurs="0"/>
225
+ </sequence>
226
+ </complexType>
227
+
228
+ <complexType name="chgPostalInfoType">
229
+ <sequence>
230
+ <element name="name" type="contact:postalLineType"
231
+ minOccurs="0"/>
232
+ <element name="org" type="contact:optPostalLineType"
233
+ minOccurs="0"/>
234
+ <element name="addr" type="contact:addrType"
235
+ minOccurs="0"/>
236
+ </sequence>
237
+ <attribute name="type" type="contact:postalInfoEnumType"
238
+ use="required"/>
239
+ </complexType>
240
+
241
+ <!--
242
+ Child response elements.
243
+ -->
244
+ <element name="chkData" type="contact:chkDataType"/>
245
+ <element name="creData" type="contact:creDataType"/>
246
+ <element name="infData" type="contact:infDataType"/>
247
+ <element name="panData" type="contact:panDataType"/>
248
+ <element name="trnData" type="contact:trnDataType"/>
249
+ <!--
250
+ <check> response elements.
251
+ -->
252
+ <complexType name="chkDataType">
253
+ <sequence>
254
+ <element name="cd" type="contact:checkType"
255
+ maxOccurs="unbounded"/>
256
+ </sequence>
257
+ </complexType>
258
+
259
+ <complexType name="checkType">
260
+ <sequence>
261
+ <element name="id" type="contact:checkIDType"/>
262
+ <element name="reason" type="eppcom:reasonType"
263
+ minOccurs="0"/>
264
+ </sequence>
265
+ </complexType>
266
+
267
+ <complexType name="checkIDType">
268
+ <simpleContent>
269
+ <extension base="eppcom:clIDType">
270
+ <attribute name="avail" type="boolean"
271
+ use="required"/>
272
+ </extension>
273
+ </simpleContent>
274
+ </complexType>
275
+
276
+ <!--
277
+ <create> response elements.
278
+ -->
279
+ <complexType name="creDataType">
280
+ <sequence>
281
+ <element name="id" type="eppcom:clIDType"/>
282
+ <element name="crDate" type="dateTime"/>
283
+ </sequence>
284
+ </complexType>
285
+
286
+ <!--
287
+ <info> response elements.
288
+ -->
289
+ <complexType name="infDataType">
290
+ <sequence>
291
+ <element name="id" type="eppcom:clIDType"/>
292
+ <element name="roid" type="eppcom:roidType"/>
293
+ <element name="status" type="contact:statusType"
294
+ maxOccurs="7"/>
295
+ <element name="postalInfo" type="contact:postalInfoType"
296
+ maxOccurs="2"/>
297
+ <element name="voice" type="contact:e164Type"
298
+ minOccurs="0"/>
299
+ <element name="fax" type="contact:e164Type"
300
+ minOccurs="0"/>
301
+ <element name="email" type="eppcom:minTokenType"/>
302
+ <element name="clID" type="eppcom:clIDType"/>
303
+ <element name="crID" type="eppcom:clIDType"/>
304
+ <element name="crDate" type="dateTime"/>
305
+ <element name="upID" type="eppcom:clIDType"
306
+ minOccurs="0"/>
307
+ <element name="upDate" type="dateTime"
308
+ minOccurs="0"/>
309
+ <element name="trDate" type="dateTime"
310
+ minOccurs="0"/>
311
+ <element name="authInfo" type="contact:authInfoType"
312
+ minOccurs="0"/>
313
+ <element name="disclose" type="contact:discloseType"
314
+ minOccurs="0"/>
315
+ </sequence>
316
+ </complexType>
317
+
318
+ <!--
319
+ Status is a combination of attributes and an optional human-readable
320
+ message that may be expressed in languages other than English.
321
+ -->
322
+ <complexType name="statusType">
323
+ <simpleContent>
324
+ <extension base="normalizedString">
325
+ <attribute name="s" type="contact:statusValueType"
326
+ use="required"/>
327
+ <attribute name="lang" type="language"
328
+ default="en"/>
329
+ </extension>
330
+ </simpleContent>
331
+ </complexType>
332
+
333
+ <simpleType name="statusValueType">
334
+ <restriction base="token">
335
+ <enumeration value="clientDeleteProhibited"/>
336
+ <enumeration value="clientTransferProhibited"/>
337
+ <enumeration value="clientUpdateProhibited"/>
338
+ <enumeration value="linked"/>
339
+ <enumeration value="ok"/>
340
+ <enumeration value="pendingCreate"/>
341
+ <enumeration value="pendingDelete"/>
342
+ <enumeration value="pendingTransfer"/>
343
+ <enumeration value="pendingUpdate"/>
344
+ <enumeration value="serverDeleteProhibited"/>
345
+ <enumeration value="serverTransferProhibited"/>
346
+ <enumeration value="serverUpdateProhibited"/>
347
+ </restriction>
348
+ </simpleType>
349
+
350
+ <!--
351
+ Pending action notification response elements.
352
+ -->
353
+ <complexType name="panDataType">
354
+ <sequence>
355
+ <element name="id" type="contact:paCLIDType"/>
356
+ <element name="paTRID" type="epp:trIDType"/>
357
+ <element name="paDate" type="dateTime"/>
358
+ </sequence>
359
+ </complexType>
360
+
361
+ <complexType name="paCLIDType">
362
+ <simpleContent>
363
+ <extension base="eppcom:clIDType">
364
+ <attribute name="paResult" type="boolean"
365
+ use="required"/>
366
+ </extension>
367
+ </simpleContent>
368
+ </complexType>
369
+
370
+ <!--
371
+ <transfer> response elements.
372
+ -->
373
+ <complexType name="trnDataType">
374
+ <sequence>
375
+ <element name="id" type="eppcom:clIDType"/>
376
+ <element name="trStatus" type="eppcom:trStatusType"/>
377
+ <element name="reID" type="eppcom:clIDType"/>
378
+ <element name="reDate" type="dateTime"/>
379
+ <element name="acID" type="eppcom:clIDType"/>
380
+ <element name="acDate" type="dateTime"/>
381
+ </sequence>
382
+ </complexType>
383
+
384
+ <!--
385
+ End of schema.
386
+ -->
387
+ </schema>