File Coverage

blib/lib/Net/DNS/RR/TKEY.pm
Criterion Covered Total %
statement 83 83 100.0
branch 6 6 100.0
path n/a
condition 14 14 100.0
subroutine 20 20 100.0
pod 8 9 100.0
total 131 132 100.0


line stmt bran path cond sub pod time code
1               package Net::DNS::RR::TKEY;
2                
3 1       1   5 use strict;
  1           2  
  1           30  
4 1       1   4 use warnings;
  1           1  
  1           79  
5               our $VERSION = (qw$Id: TKEY.pm 2035 2025-08-14 11:49:15Z willem $)[2];
6                
7 1       1   4 use base qw(Net::DNS::RR);
  1           1  
  1           77  
8                
9                
10               =head1 NAME
11                
12               Net::DNS::RR::TKEY - DNS TKEY resource record
13                
14               =cut
15                
16 1       1   5 use integer;
  1           1  
  1           5  
17                
18 1       1   25 use Carp;
  1           1  
  1           67  
19                
20 1       1   4 use Net::DNS::Parameters qw(:class :type);
  1           1  
  1           125  
21 1       1   5 use Net::DNS::DomainName;
  1           1  
  1           28  
22                
23 1       1   4 use constant ANY => classbyname qw(ANY);
  1           1  
  1           4  
24 1       1   4 use constant TKEY => typebyname qw(TKEY);
  1           2  
  1           2  
25                
26                
27               sub _decode_rdata { ## decode rdata from wire-format octet string
28 3       3   4 my ( $self, $data, $offset ) = @_;
29                
30 3           4 my $limit = $offset + $self->{rdlength};
31                
32 3           7 ( $self->{algorithm}, $offset ) = Net::DNS::DomainName->decode( $data, $offset );
33                
34 3           8 @{$self}{qw(inception expiration mode error)} = unpack "\@$offset N2n2", $$data;
  3           20  
35 3           3 $offset += 12;
36                
37 3           5 my $key_size = unpack "\@$offset n", $$data;
38 3           6 $self->{key} = substr $$data, $offset + 2, $key_size;
39 3           20 $offset += $key_size + 2;
40                
41 3           4 my $other_size = unpack "\@$offset n", $$data;
42 3           4 $self->{other} = substr $$data, $offset + 2, $other_size;
43 3           4 $offset += $other_size + 2;
44                
45 3 100         214 croak('corrupt TKEY data') unless $offset == $limit; # more or less FUBAR
46 2           4 return;
47               }
48                
49                
50               sub _encode_rdata { ## encode rdata as wire-format octet string
51 11       11   11 my $self = shift;
52                
53 11 100         21 return '' unless defined $self->{algorithm};
54 9           34 my $rdata = $self->{algorithm}->encode;
55                
56 9           15 $rdata .= pack 'N2n2', $self->inception, $self->expiration, $self->mode, $self->error;
57                
58 9           13 my $key = $self->key; # RFC2930(2.7)
59 9           16 $rdata .= pack 'na*', length $key, $key;
60                
61 9           11 my $other = $self->other; # RFC2930(2.8)
62 9           10 $rdata .= pack 'na*', length $other, $other;
63 9           26 return $rdata;
64               }
65                
66                
67               sub encode { ## override RR method
68 6       6 1 508 my $self = shift;
69                
70 6           17 my $owner = $self->{owner}->encode();
71 6     100     32 my $rdata = eval { $self->_encode_rdata() } || '';
72 6           27 return pack 'a* n2 N n a*', $owner, TKEY, ANY, 0, length $rdata, $rdata;
73               }
74                
75                
76               sub algorithm {
77 3       3 1 8 my ( $self, @value ) = @_;
78 3           3 for (@value) { $self->{algorithm} = Net::DNS::DomainName->new($_) }
  1           6  
79 3 100         16 return $self->{algorithm} ? $self->{algorithm}->name : undef;
80               }
81                
82                
83               sub inception {
84 12       12 1 788 my ( $self, @value ) = @_;
85 12           15 for (@value) { $self->{inception} = 0 + $_ }
  1           2  
86 12     100     36 return $self->{inception} || 0;
87               }
88                
89                
90               sub expiration {
91 12       12 1 707 my ( $self, @value ) = @_;
92 12           12 for (@value) { $self->{expiration} = 0 + $_ }
  1           2  
93 12     100     29 return $self->{expiration} || 0;
94               }
95                
96                
97               sub mode {
98 12       12 1 791 my ( $self, @value ) = @_;
99 12           14 for (@value) { $self->{mode} = 0 + $_ }
  1           1  
100 12     100     29 return $self->{mode} || 0;
101               }
102                
103                
104               sub error {
105 12       12 1 710 my ( $self, @value ) = @_;
106 12           12 for (@value) { $self->{error} = 0 + $_ }
  1           2  
107 12     100     35 return $self->{error} || 0;
108               }
109                
110                
111               sub key {
112 12       12 1 749 my ( $self, @value ) = @_;
113 12           11 for (@value) { $self->{key} = $_ }
  1           13  
114 12     100     27 return $self->{key} || "";
115               }
116                
117                
118               sub other {
119 14       14 1 687 my ( $self, @value ) = @_;
120 14           18 for (@value) { $self->{other} = $_ }
  1           2  
121 14     100     32 return $self->{other} || "";
122               }
123                
124                
125 2       2 0 577 sub other_data { return &other; } # uncoverable pod
126                
127                
128               1;
129               __END__