NAME
IO::EPP::Base
SYNOPSIS
use Data::Dumper;
use IO::EPP::Base;
sub make_request {
my ( $action, $params ) = @_;
unless ( $params->{conn} ) {
# need to connect
my %sock_params = (
PeerHost => 'epp.example.com',
PeerPort => 700,
SSL_key_file => 'key.pem',
SSL_cert_file => 'cert.pem',
Timeout => 30,
);
$params->{user} = 'login';
$params->{pass} = 'xxxxx';
$params->{sock_params} = \%sock_params;
$params->{test_mode} = 1; # use emulator
# $params->{no_log} = 1; # 1 if no logging
# enter a name if you need to specify a file for the log
# $params->{log_name} = '/var/log/comm_epp_example.log';
# use our function for logging
$params->{log_fn} = sub { print "epp.example.com logger:\n$_[0]\n" };
}
return IO::EPP::Base::make_request( $action, $params );
}
my ( $answ, $msg, $conn_obj ) = make_request( 'check_domains', { domains => [ 'xyz.com', 'com.xyz', 'reged.xyz' ] } );
print Dumper $answ;
Result:
$VAR1 = {
'msg' => 'Command completed successfully.',
'xyz.com' => {
'avail' => '1'
},
'reged.xyz' => {
'reason' => 'in use',
'avail' => '0'
},
'code' => '1000',
'com.xyz' => {
'avail' => '1'
}
};
}
DESCRIPTION
Module for common EPP-functions, without extension (dnssec only).
The module can be used to work with any provider, if the requests do not use extensions and the provider does not have its own features
It has two options: using a separate function call or working as an object
FUNCTIONS
make_request
See IO:EPP for description
An example of working with functions is presented in the synopsis
Work checked on CentralNic server
INPUT:
action name;
parameters of query
OUTPUT:
io::epp object
or, in list context:
( full answer with code and message, string with code and message, io::epp object )
An Example:
my ( $answer, $message, $conn_object ) = make_request( 'hello', \%login_params );
A more complete example is found in IO::EPP
gen_id
Gereration ID for contacts
INPUT:
no params
OUTPUT:
new id
gen_pw
Authinfo Generation
INPUT:
length of authInfo, default 16 symbols
OUTPUT:
new authInfo
METHODS
new
Create new IO::EPP object, аutomatically connects to the provider and logins.
Example of a call
# Parameters for IO::Socket::SSL
my %sock_params = (
PeerHost => 'epp.example.com',
PeerPort => 700,
SSL_key_file => $path_to_ssl_key_file,
SSL_cert_file => $path_to_ssl_cert_file,
Timeout => 30,
);
# initialization of an object, during which login is called
my $o = IO::EPP::Base->new( {
sock_params => \%sock_params,
user => $login_name,
pass => $login_password,
log_name => '/var/log/comm_epp_registry_name',
} );
# call check of domains
my ( $answ, $code, $msg ) = $o->check_domains( { domains => [ 'kalinka.realty' ] } );
undef $o; # call logout() и DESTROY() of object
INPUT:
package name, parameters.
Connection parameters:
user
– login;
pass
– password;
tld
– zone for providers that have a binding in it, for example, verisign;
server
– server name if the registry has different servers with different extensions, for example, pir/afilias for afilias;
sock_params
– hashref with IO::Socket::SSL parameters;
test_mode
– use a real connection or registry emulator.
Parameters for logging:
no_log
– do not write anything to the log;
log_name
– write log in this file, not in STDOUT;
log_fn
– ref on functions to write to the log.
OUTPUT:
io::epp object or array ( object, login code, login message )
If the connection or authorization failed, the response will contain zero instead of an object
epp_log
Writes data to the log or calls the function specified when creating the object
By default, the log is written: date and time, pid of the process, name and body of the request:
Thu Jan 1 01:00:00 1111
pid: 12345
check_domains request:
<?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>
<check>
<domain:check 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>xyz.com</domain:name><domain:name>com.xyz</domain:name><domain:name>reged.xyz</domain:name>
</domain:check>
</check>
<clTRID>50df482a1e928a00fa0e7fce3fe68f0f</clTRID>
</command>
</epp>
Thu Feb 2 02:02:22 2222
pid: 12345
check_domains answer:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1000">
<msg>Command completed successfully.</msg>
</result>
<resData><domain:chkData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:cd><domain:name avail="1">xyz.com</domain:name></domain:cd>
<domain:cd><domain:name avail="1">com.xyz</domain:name></domain:cd>
<domain:cd><domain:name avail="0">reged.xyz</domain:name><domain:reason>in use</domain:reason></domain:cd>
</domain:chkData></resData><trID>
<clTRID>50df482a1e928a00fa0e7fce3fe68f0f</clTRID><svTRID>TEST-2979E52890117206AAA1639725F4E862</svTRID>
</trID>
</response>
</epp>
req_test
Used instead of "req" in test mode
req
Request to registry
INPUT:
out_data
– body of request;
info
– name of request for log.
OUTPUT:
answer from registry.
simple_request
Universal handler for simple answer
INPUT:
request body;
request name;
check or not epp poll, default is 0
OUTPUT:
answer, may contain the object's name, id, creation and/or expiration date, client-side transaction id, and registry id;
answer code;
answer message, if there is an error in the response, an additional reason for the error may be passed along with the message.
An Example:
# answer for create_contact:
{
'msg' => 'Command completed successfully.',
'cont_id' => 'sxsup8ehs000',
'cre_date' => '2020-01-01 01:01:01',
'cltrid' => 'd0a528a4816ea4e16c3f56e25bf11111',
'code' => 1000,
'svtrid' => 'CNIC-22E5B2CBBD6C04169AEC9228FB0677FA173D76487AF8BA8734AF3C11111'
};
# answer with error, "1.2.3.4 addr not found" is reason:
{
'msg' => 'Parameter value policy error; 1.2.3.4 addr not found',
'cltrid' => 'd0e2a9c2af427264847b0a6e59b60000',
'code' => 2306,
'svtrid' => '4586654601-1579115463111'
};
login
Authorization on the server. The function is automatically called from new. A separate call is only needed to change the password.
INPUT:
password;
addition standard parameters (<objURI>xxxxx-1.0</objURI>);
extensions (<extURI>yyyyyy-1.0</extURI>);
new password if need.
OUTPUT: see "simple_request".
hello
Get greeting, ping analog.
No input parameters.
Sample response:
{
'msg' => '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"><greeting>
<svID>CentralNic EPP server EPP.CENTRALNIC.COM</svID>
<svDate>2020-20-20T20:20:20.0Z</svDate>
<svcMenu>
<version>1.0</version><lang>en</lang>
<objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:host-1.0</objURI>
<svcExtension>
<extURI>urn:ietf:params:xml:ns:rgp-1.0</extURI>
<extURI>urn:ietf:params:xml:ns:secDNS-1.1</extURI>
<extURI>urn:ietf:params:xml:ns:idn-1.0</extURI>
<extURI>urn:ietf:params:xml:ns:fee-0.4</extURI>
<extURI>urn:ietf:params:xml:ns:fee-0.5</extURI>
<extURI>urn:ietf:params:xml:ns:launch-1.0</extURI>
<extURI>urn:ietf:params:xml:ns:regtype-0.1</extURI>
<extURI>urn:ietf:params:xml:ns:auxcontact-0.1</extURI>
<extURI>urn:ietf:params:xml:ns:artRecord-0.2</extURI>
<extURI>http://www.nic.coop/contactCoopExt-1.0</extURI>
</svcExtension>
</svcMenu>
<dcp>
<access><all></all></access>
<statement>
<purpose><admin></admin><prov></prov></purpose>
<recipient><ours></ours><public></public></recipient>
<retention><stated></stated></retention>
</statement>
</dcp></greeting></epp>',
'code' => 1000
};
check_contacts
Check whether there are contacts with such IDs
INPUT: params with key: contacts
-- arrayref on contact id list.
Request:
my ( $answ, $msg ) = make_request( 'check_contacts', { contacts => [ 'H1234567', 'nfjkrek-fre8fm' ] } );
print Dumper $answ;
Answer:
$VAR1 = {
'msg' => 'Command completed successfully.',
'nfjkrek-fre8fm' => {
'avail' => '1'
},
'H1234567' => {
'avail' => '0'
},
'code' => '1000'
};
cont_to_xml
Covertor contact user date to epp xml
for create/update_contact functions
create_contact_ext
Create contact extensions, for overwriting in child classes
create_contact
Register a contact
INPUT:
Hash with parameters:
cont_id
– some providers create contact ID automatically;
name
or first_name
, last_name
, patronymic
, family_name
– full name in one field or first, last, patronymic, family names separately;
org
– organization if necessary, some registries require a zero-length string, while others require undef
;
addr
– street, house, building, apartment;
city
– city, town;
state
– state, region, province, republic, optional field;
postcode
– zip code;
country_code
– two-character country code;
phone
– the phone number in international format;
fax
– usually only required for legal entities;
email
;
authinfo
– the key is to transfer your contacts, but usually the contacts are transferred automatically together with a domain.
If only the int
type of contacts is passed, it can be omitted.
OUTPUT: see "simple_request".
An Example, one type (by default this is int
):
( $answ, $code, $msg ) = $conn->create_contact(
{
cont_id => '123qwerty',
first_name => 'Test',
last_name => 'Testov',
org => 'Private Person',
addr => 'Vagnera 11-22',
city => 'Donetsk',
state => 'Donetskaya',
postcode => '83061',
country_code => 'DN',
phone => '+380.501234567',
fax => '',
email => 'reg1010@yandex.com',
authinfo => 'Q2+qqqqqqqqqqqqqqqqqqqqqqqqqq',
},
);
Contact with two types
( $answ, $code, $msg ) = $conn->create_contact(
{
cont_id => '123qwerty',
int => {
first_name => 'Test',
last_name => 'Testov',
org => 'Private Person',
addr => 'Vagnera 11-22',
city => 'Donetsk',
state => 'Donetskaya',
postcode => '83061',
country_code => 'DN',
},
loc => {
first_name => 'Тест',
last_name => 'Тестов',
org => 'Частное лицо',
addr => 'Вагнера 11/22',
city => 'Донецк',
state => 'Донецкая обл.',
postcode => '83061',
country_code => 'DN',
},
phone => '+380.501234567',
fax => '',
email => 'reg1010@yandex.com',
authinfo => 'Q2+qqqqqqqqqqqqqqqqqqqqqqqqqq',
}
);
cont_from_xml
Covertor contact epp xml data to hash
for get_contact_info, overwritten in some child modules
get_contact_ext
Providers extension, replaced in provider modules
Returns an empty hashref here
get_contact_info
Get information on the specified contact
INPUT:
cont_id
– contact id
extension
– epp extensions in xml
An Example:
my ( $answer, $code, $msg ) = $conn->get_contact_info( { cont_id => 'H12345' } );
# $answer:
{
'owner' => 'H2220222',
'int' => {
'city' => 'Moscow',
'org' => 'My Ltd',
'country_code' => 'RU',
'name' => 'Igor Igorev',
'postcode' => '123456',
'addr' => 'Igoreva str, 3',
'state' => 'Igorevskya obl.'
},
'roid' => 'C2222888-CNIC',
'cre_date' => '2012-12-12 12:12:12',
'phone' => [
'+7.4952334455'
],
'pp_flag' => 1,
'email' => [
'mail@igor.ru'
],
'upd_date' => '2012-12-12 12:12:12',
'cont_id' => 'H12345',
'fax' => [
'+7.4952334455'
],
'creater' => 'H2220222',
'statuses' => {
'serverDeleteProhibited' => '+',
'serverTransferProhibited' => '+',
'linked' => '+'
}
};
update_statuses_add
Part of update_* functions
update_statuses_rem
Part of update_* functions
update_contact
To update contact information
INPUT:
params with keys:
cont_id
– contact id
add
, rem
– only contact statuses can be added or deleted, , such as clientUpdateProhibited
chg
– modify data, see fields in "create_contact"
OUTPUT: see "simple_request".
An Example, change data, one type (by default this is int
):
( $answ, $code, $msg ) = $conn->update_contact(
{
cont_id => '123qwerty',
chg => {
first_name => 'Test',
last_name => 'Testov',
org => 'Private Person',
addr => 'Vagnera 11-22',
city => 'Donetsk',
state => 'Donetskaya',
postcode => '83061',
country_code => 'DN',
phone => '+380.501234567',
fax => '',
email => 'reg1010@yandex.com',
authinfo => 'Q2+qqqqqqqqqqqqqqqqqqqqqqqqqq',
}
},
);
delete_contact
Delete the specified contact. Usually this function is not needed because the registry itself deletes unused contacts.
INPUT:
params with keys:
cont_id
– contact id.
extension
– extensions for some providers, empty by default
OUTPUT: see "simple_request".
An Example:
my ( $answ, $msg ) = make_request( 'delete_contact', { cont_id => 'H12345', %conn_params } );
check_nss
Check that the nameserver is registered
INPUT:
params with keys:
nss
– list with nameservers
extension
– extensions for some providers, empty by default
OUTPUT: see "simple_request".
An Example:
my ( $a, $m, $o ) = make_request( 'check_nss', { nss => [ 'ns99.cnic.com', 'ns1.godaddy.com' ] } );
# answer:
{
'msg' => 'Command completed successfully.',
'ns1.godaddy.com' => {
'reason' => 'in use',
'avail' => '0'
},
'ns99.cnic.com' => {
'avail' => '1'
},
'code' => '1000'
};
create_ns
Registering a nameserver
INPUT:
params with keys:
ns
– name server
ips
– array with IP, IPv4 and IPv6, IP must be specified only we register nameserver based on the domain of the same registry
extension
– extensions for some providers, empty by default
OUTPUT: see "simple_request"
An Example:
my ( $h, $m, $o ) = make_request( 'create_ns', { ns => 'ns111.sssllll.info', %conn_params } );
# check answer
( $a, $m ) = make_request( 'create_ns', { ns => 'ns222.ssslll.com', ips => ['1.2.3.4', 'fe80::aa00:bb11' ], conn => $o } );
# check answer
get_ns_info_rdata
Covertor NS xml resData data to hash.
Can be overwritten in a child module.
get_ns_info
Get information about the specified nameserver
INPUT:
params with keys:
ns
– name server;
extension
– extensions for some providers, empty by default.
OUTPUT:
hash with ns data: statuses, dates, ips and other
owner
– the account where the name server is located;
create
– the account where the name server was registered;
cre_date
– name server registration date;
roid
– name server id in the registry;
ips
– list of IP addresses, IPv4 and IPv6;
linked
– this status indicates that the name server is being used by some domain.
An Example:
my ( $answer, $msg, $conn ) = make_request( 'get_ns_info', { ns => 'ns1.sss.ru.com', %conn_params } );
# answer:
{
'msg' => 'Command completed successfully.',
'owner' => 'H2220222',
'roid' => 'H370000-CNIC',
'cre_date' => '2013-09-05 18:42:49',
'name' => 'ns1.sss.ru.com',
'ips' => [
'2A00:3B00:0:0:0:0:0:25'
],
'creater' => 'H2220222',
'statuses' => {
'ok' => '+',
'linked' => '+'
},
'code' => '1000'
};
update_ns
Change the data of the specified name server
INPUT
params with keys:
ns
– name server
add
, rem
– adding or removing the name server parameters listed below:
ips
– IPv4 and IPv6 addresses;
statuses
– clientUpdateProhibited and other client*;
chg
– change the server name, this is used to move the name server to a different domain.
no_empty_chg
– some registries prohibit passing an empty chg parameter – <host:chg/>
extension
– extensions for some providers, empty by default
OUTPUT: see "simple_request".
An Example
my ( $answ, $msg, $conn ) = make_request( 'update_ns', {
ns => 'ns1.sss.ru.com',
rem => { ips => [ '2A00:3B00:0:0:0:0:0:25' ] },
add => { ips => [ '176.99.13.11' ] },
%conn_params,
} );
( $answ, $msg ) = make_request( 'update_ns', {
ns => 'ns1.sss.ru.com',
chg => { new_name => 'ns1.sss.xyz' },
conn => $conn,
} );
delete_ns
Remove nameserver from the registry.
It is usually forbidden to delete a name server that has the linked
status.
INPUT:
params with keys:
ns
– name server;
extension
– extensions for some providers, empty by default.
OUTPUT: see "simple_request".
An Example:
my ( $answ, $msg ) = make_request( 'delete_ns', { ns => 'ns1.sss.ru.com', %conn_params } );
check_domains_rdata
Parses resData in the registry response
Can be overwritten in a child module.
check_domains
Check that the domain is available for registration
INPUT:
params with keys:
domains
– list of domains to check;
extension
– extensions for some providers, empty by default.
OUTPUT:
hash with domains, each domain has an avail
parameter, if avail == 0, the reason
parameter is usually added
An Example
my ( $answer, $code, $msg ) = $conn->check_domains( {
tld => 'com',
domains => [ 'qwerty.com', 'bjdwferbkre3jd0hf.net', 'xn--xx.com', 'hiebw.info' ],
} );
# answer:
{
'qwerty.com' => {
'reason' => 'Domain exists',
'avail' => '0'
},
'bjdwferbkre3jd0hf.net' => {
'avail' => '1'
},
'hiebw.info' => {
'reason' => 'Not an authoritative TLD',
'avail' => '0'
},
'xn--xx.com' => {
'reason' => 'Invalid punycode encoding',
'avail' => '0'
}
};
create_domain_nss
Generating a list of ns-s for domain registration.
Can be overwritten in a child module.
create_domain_authinfo
authinfo block for domain registration.
Can be overwritten in a child module.
create_domain_ext
Block with the DNSSEC extension for domain registration
Can be overwritten in a child module.
create_domain
Domain registration.
INPUT:
params with keys:
dname
– domain name;
period
– domain registration period, usually the default value is 1 year, registration for several months is not implemented – this is a very rare case;
reg_id
, admin_id
, tech_id
, billing_id
– id of registrant, administrator, technical and billing contacts, at least one contact is required, usually the registrant;
dnssec
-- hash for DNSSEC params: keytag
, alg
, digtype
, digest
, for details see https://tools.ietf.org/html/rfc5910;
nss
– array with nameservers;
extension
– extensions for some providers, empty by default.
OUTPUT: see "simple_request".
An Example:
my ( $answ, $msg ) = make_request(
'create_domain',
{
dname => "sss.ru.com",
reg_id => 'jp1g8fcv30fq',
admin_id => 'jp1g8fcv31fq',
tech_id => 'jp1g8fcv32fq',
billing_id => 'jp1g8fcv33fq',
authinfo => 'jp1g8fcv30fq+jp1g8fcv31fq',
nss => [ 'dns1.yandex.net','dns2.yandex.net' ],
period => 1,
},
);
get_domain_info_rdata
Covertor domains xml resData data to hash.
Can be overwritten in a child module.
get_domain_spec_rdata
Parse special data in resData from provider.
For overwritten in a child module.
In this module, the function does nothing
get_domain_spec_ext
Parse special data in extension from provider.
For overwritten in a child module.
In this module, the function does nothing
get_domain_info
The main information on the domain
INPUT:
params with keys:
dname
– domain name;
extension
– extensions for some providers, empty by default.
OUTPUT:
dname
;
roid
– domain id if registry;
owner
– the account where the domain is located now;
create
– the account where the domain was registered;
cre_date
– domain registration date;
trans_date
– domain last transfer date;
upd_date
– domain last update date;
exp_date
– domain expiration date;
reg_id
, admin_id
, tech_id
, billing_id
– domain contact IDs;
nss
– list of domain name servers;
statuses
– hash where keys is status flags, values is status expiration date, if any, or other information;
hosts
– list with name servers based on this domain.
There can also be extension parameters.
An Example:
my ( $answer, $msg, $conn ) = make_request( 'get_domain_info', { dname => 'sss.ru.com', %conn_params } );
# answer:
{
'hosts' => [
'ns1.sss.ru.com',
'ns2.sss.ru.com'
],
'roid' => 'D888888-CNIC',
'cre_date' => '1212-12-12 12:12:12',
'upd_date' => '2020-02-02 20:02:20',
'trans_date' => '2012-12-12 12:12:12',
'creater' => 'H12345',
'tech_id' => '1iuhajppwsjp',
'reg_id' => 'H12346',
'owner' => 'H2220222',
'exp_date' => '2022-12-12 23:59:59',
'billing_id' => 'H12347',
'nss' => [
'ns1.sss.ru.com'
'ns1.mmm.ru.com'
],
'dname' => 'sss.ru.com',
'admin_id' => 'H12348',
'statuses' => {
'renewPeriod' => '+',
'clientTransferProhibited' => '+'
}
};
renew_domain
Domain registration renewal for N years.
INPUT:
params with keys:
dname
– domain name;
period
– the domain renewal period in years, by default, will be prologed for 1 year;
exp_date
– current expiration date, without specifying the time;
extension
– extensions for some providers, empty by default.
OUTPUT: see "simple_request".
An Example:
my ( $a, $m ) = make_request( 'renew_domain', { dname => 'datada.net', period => 1, exp_date => '2022-22-22' } );
update_domain_add_nss
Part of the update_domain function.
Can be overwritten in a child module, example, in IO::EPP::DrsUa
update_domain_rem_nss
Part of the update_domain function.
Can be overwritten in a child module.
update_domain_ext
Part of the update_domain function.
Can be overwritten in a child module.
In this function this module contains the DNSSEC extension
update_domain
To update domain data: contact ids, authinfo, nss, statuses.
INPUT:
params with keys:
dname
– domain name
add
, rem
– hashes for adding and deleting data:
admin_id
, tech_id
, billing_id
– contact IDs;
nss
– list with name servers;
statuses
– various client* statuses;
dnssec
– DNSSEC extension parameters.
chg
– hash for changeable data:
reg_id
– registrant contact id;
authinfo
– new key for domain;
OUTPUT: see "simple_request".
Examples:
my ( $a, $m, $c ) = make_request( 'update_domain', {
dname => 'example.com',
chg => { authinfo => 'fnjkfrekrejkfrenkfrenjkfren' },
rem => { nss => [ 'ns1.qqfklnqq.com', 'ns2.qqfklnqq.com' ] },
add => { nss => [ 'ns1.web.name', 'ns2.web.name' ] },
%conn_params,
} );
( $a, $m ) = make_request( 'update_domain', {
dname => 'example.com',
rem => { statuses => [ 'clientUpdateProhibited','clientDeleteProhibited' ] },
add => { statuses => [ 'clientHold' ] },
conn => $c,
} );
transfer
Domain transfers: to us, from us, reject transfers.
INPUT:
params with keys:
op
– operation, possible variants: request
, query
, accept
, cancel
, reject
;
authinfo
– key for alien domain;
period
– if the transfer with renew, you can specify the extension period for some registries, undef and zero have different values;
extension
– extensions for some registries in xml format;
addition
– special parameters for very original providers.
OUTPUT:
It depends very much on the operation and on the registry
Examples:
my ( $answ, $code, $msg ) = $conn->transfer( { op => 'request', dname => 'reclick.realty', authinfo => '123qweRTY{*}', period => 1 } );
( $answ, $code, $msg ) = $conn->transfer( { op => 'query', dname => 'reclick.realty', authinfo => '123qweRTY{*}' } );
# answer from the CentralNic
{
'exp_date' => '2021-01-18 23:59:59',
'cltrid' => '9d7e6ec767ec7d9d9d40fc518a5',
'trstatus' => 'pending', # transfer status
'requestors_id' => 'H2220222', # this we
'dname' => 'reclick.realty',
'senders_id' => 'H3105376', # godaddy
'send_date' => '2020-01-15 21:14:26',
'svtrid' => 'CNIC-82A2E9B355020697D1B3EF6FDE9D822D4CCE1D1616412EF53',
'request_date' => '2020-01-10 21:14:26'
};
( $answ, $code, $msg ) = $conn->transfer( { op => 'approve', dname => 'reclick.realty' } );
( $answ, $code, $msg ) = $conn->transfer( { op => 'reject', dname => 'reclick.realty', authinfo => '123qweRTY{*}' } );
( $answ, $code, $msg ) = $conn->transfer( { op => 'cancel', dname => 'reclick.realty', authinfo => '123qweRTY{*}' } );
delete_domain
Deleting a domain.
params with keys:
dname
– domain name
extension
– extensions for some registries in xml format
OUTPUT: see "simple_request".
An Example:
my ( $a, $m ) = make_request( 'delete_domain', { dname => 'ssslll.ru.com', %conn_params } );
req_poll_rdata
Parse resData from req poll
Can be overwritten in a child module
req_poll_ext
Parse req poll extension
Empty, for overwriting in children modules
req_poll
Get and parse top message from poll
No input params.
OUTPUT:
Еach provider has a lot of different types of messages. Only domain transfer messages are similar. They have something like this format:
{
'code' => '1301',
'msg' => 'Command completed successfully; ack to dequeue',
'count' => '1',
'id' => '456789',
'date' => '2020-02-02 20:02:02',
'qmsg' => 'Transfer Requested.',
'transfer' => {
'dname' => 'example.com',
'status' => 'pending',
'senders_id' => '1111'.
'requestors_id' => '999',
'request_date' => '2001-01-01 01:01:01',
'send_date' => '2001-01-06 01:01:01'
},
'svtrid' => '4569552848-1578703988000',
'cltrid' => '1f80c34195a936dfb0d2bd0c414141414'
};
requestors_id
– the registrar who made the transfer request;
senders_id
– the registrar from which the domain is transferred;
request_date
– the start date of the transfer
send_date
– date when the transfer is completed, unless it is canceled or the domain is released;
status
– the status of the transfer, the most common meaning: pending
, serverApproved
, clientRejected
, clientApproved
.
ask_poll
Delete message from poll by id
INPUT:
msg_id
– id of the message to be removed from the queue.
logout
Close session, disconnect
No input parameters.
AUTHORS
Vadim Likhota <vadiml@cpan.org>, some edits were made by Andrey Voyshko, Victor Efimov
COPYRIGHT
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.