File Coverage

blib/lib/Net/DNS/RR/CAA.pm
Criterion Covered Total %
statement 51 51 100.0
branch 8 8 100.0
path n/a
condition 2 2 100.0
subroutine 14 14 100.0
pod 4 4 100.0
total 79 79 100.0


line stmt bran path cond sub pod time code
1               package Net::DNS::RR::CAA;
2                
3 1       1   5 use strict;
  1           2  
  1           29  
4 1       1   3 use warnings;
  1           1  
  1           81  
5               our $VERSION = (qw$Id: CAA.pm 2003 2025-01-21 12:06:06Z willem $)[2];
6                
7 1       1   4 use base qw(Net::DNS::RR);
  1           2  
  1           78  
8                
9                
10               =head1 NAME
11                
12               Net::DNS::RR::CAA - DNS CAA resource record
13                
14               =cut
15                
16 1       1   5 use integer;
  1           1  
  1           11  
17                
18 1       1   448 use Net::DNS::Text;
  1           2  
  1           443  
19                
20                
21               sub _decode_rdata { ## decode rdata from wire-format octet string
22 1       1   7 my ( $self, $data, $offset ) = @_;
23                
24 1           2 my $limit = $offset + $self->{rdlength};
25 1           2 $self->{flags} = unpack "\@$offset C", $$data;
26 1           3 ( $self->{tag}, $offset ) = Net::DNS::Text->decode( $data, $offset + 1 );
27 1           3 $self->{value} = Net::DNS::Text->decode( $data, $offset, $limit - $offset );
28 1           2 return;
29               }
30                
31                
32               sub _encode_rdata { ## encode rdata as wire-format octet string
33 5       5   6 my $self = shift;
34                
35 5           6 return pack 'C a* a*', $self->flags, $self->{tag}->encode, $self->{value}->raw;
36               }
37                
38                
39               sub _format_rdata { ## format rdata portion of RR string.
40 3       3   3 my $self = shift;
41                
42 3           5 my @rdata = ( $self->flags, $self->{tag}->string, $self->{value}->string );
43 3           9 return @rdata;
44               }
45                
46                
47               sub _parse_rdata { ## populate RR from rdata in argument list
48 1       1   2 my ( $self, @argument ) = @_;
49                
50 1           3 $self->flags( shift @argument );
51 1           6 $self->tag( lc shift @argument );
52 1           2 $self->value( shift @argument );
53 1           2 return;
54               }
55                
56                
57               sub _defaults { ## specify RR attribute default values
58 1       1   3 my $self = shift;
59                
60 1           2 $self->flags(0);
61 1           1 return;
62               }
63                
64                
65               sub flags {
66 15       15 1 26 my ( $self, @value ) = @_;
67 15           20 for (@value) { $self->{flags} = 0 + $_ }
  4           11  
68 15     100     68 return $self->{flags} || 0;
69               }
70                
71                
72               sub critical {
73 4       4 1 745 my ( $self, @value ) = @_;
74 4 100         9 if ( scalar @value ) {
75 2           4 for ( $self->{flags} |= 0x80 ) {
76 2 100         6 $_ ^= 0x80 unless shift @value;
77               }
78               }
79 4           21 return $self->{flags} & 0x80;
80               }
81                
82                
83               sub tag {
84 5       5 1 771 my ( $self, @value ) = @_;
85 5           7 for (@value) { $self->{tag} = Net::DNS::Text->new($_) }
  3           5  
86 5 100         14 return $self->{tag} ? $self->{tag}->value : undef;
87               }
88                
89                
90               sub value {
91 5       5 1 777 my ( $self, @value ) = @_;
92 5           7 for (@value) { $self->{value} = Net::DNS::Text->new($_) }
  3           6  
93 5 100         15 return $self->{value} ? $self->{value}->value : undef;
94               }
95                
96                
97               1;
98               __END__