File: Host.pm

package info (click to toggle)
libnet-epp-perl 0.28-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 384 kB
  • sloc: perl: 2,540; sh: 3; makefile: 2
file content (139 lines) | stat: -rw-r--r-- 3,209 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package Net::EPP::Frame::Command::Create::Host;
use List::Util qw(any);
use base       qw(Net::EPP::Frame::Command::Create);
use Net::EPP::Frame::ObjectSpec;
use strict;

=pod

=head1 NAME

Net::EPP::Frame::Command::Create::Host - an instance of L<Net::EPP::Frame::Command::Create>
for host objects.

=head1 SYNOPSIS

	use Net::EPP::Frame::Command::Create::Host;
	use strict;

	my $create = Net::EPP::Frame::Command::Create::Host->new;
	$create->setHost('ns1.example.uk.com);

	print $create->toString(1);

This results in an XML document like this:

	<?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>
	      <create>
	        <host:create
	          xmlns:contact="urn:ietf:params:xml:ns:host-1.0"
	          xsi:schemaLocation="urn:ietf:params:xml:ns:host-1.0
	          host-1.0.xsd">
	            <host:name>ns1.example.uk.com</host:name>
	        </domain:create>
	      </create>
	      <clTRID>0cf1b8f7e14547d26f03b7641660c641d9e79f45</clTRIDE>
	    </command>
	</epp>


=head1 OBJECT HIERARCHY

    L<XML::LibXML::Node>
    +----L<XML::LibXML::Document>
        +----L<Net::EPP::Frame>
            +----L<Net::EPP::Frame::Command>
                +----L<Net::EPP::Frame::Command::Create>
                    +----L<Net::EPP::Frame::Command::Create::Host>

=cut

sub new {
    my $package = shift;
    my $self    = bless($package->SUPER::new('create'), $package);

    $self->addObject(Net::EPP::Frame::ObjectSpec->spec('host'));

    return $self;
}

=pod

=head1 METHODS

	my $element = $frame->setHost($host_name);

This sets the name of the object to be created. Returns the
<E<lt>host:nameE<gt>> element.

=cut

sub setHost {
    my ($self, $host) = @_;

    my $name = $self->createElement('host:name');
    $name->appendText($host);

    $self->getNode('create')->getChildNodes->shift->appendChild($name);

    return 1;
}

=pod

	$frame->setAddr({ 'ip' => '10.0.0.1', 'version' => 'v4' });

This adds an IP address to the host object. EPP supports multiple 
addresses of different versions.

=cut

sub setAddr {
    my ($self, @addr) = @_;

    foreach my $ip (@addr) {
        my $hostAttr = $self->createElement('host:addr');
        $hostAttr->appendText($ip->{ip});
        $hostAttr->setAttribute('ip', $ip->{version});
        $self->getNode('create')->getChildNodes->shift->appendChild($hostAttr);
    }
    return 1;
}

=pod

=head2 TTL Extension

    $frame->setTTLs({
        A => 3600,
        AAAA => 900,
    });

Specify TTLs for glue records. The server must support the
TTL extension.

=cut

sub setTTLs {
    my ($self, $ttls) = @_;

    foreach my $type (keys(%{$ttls})) {
        my $ttl = $self->createExtensionElementFor(Net::EPP::Frame::ObjectSpec->xmlns('ttl'))->appendChild($self->createElement('ttl'));
        $ttl->appendText($ttls->{$type});
        if (any { $type eq $_ } qw(NS DS DNAME A AAAA)) {
            $ttl->setAttribute('for', $type);

        } else {
            $ttl->setAttribute('for',    'custom');
            $ttl->setAttribute('custom', $type);

        }
    }
}

1;