File Coverage

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


line stmt bran cond sub pod time code
1             package Net::DNS::RR::CAA;
2              
3 1     1   6 use strict;
  1         2  
  1         30  
4 1     1   4 use warnings;
  1         1  
  1         88  
5             our $VERSION = (qw$Id: CAA.pm 2003 2025-01-21 12:06:06Z willem $)[2];
6              
7 1     1   19 use base qw(Net::DNS::RR);
  1         1  
  1         83  
8              
9              
10             =head1 NAME
11              
12             Net::DNS::RR::CAA - DNS CAA resource record
13              
14             =cut
15              
16 1     1   3 use integer;
  1         1  
  1         6  
17              
18 1     1   419 use Net::DNS::Text;
  1         3  
  1         472  
19              
20              
21             sub _decode_rdata { ## decode rdata from wire-format octet string
22 1     1   2 my ( $self, $data, $offset ) = @_;
23              
24 1         2 my $limit = $offset + $self->{rdlength};
25 1         3 $self->{flags} = unpack "\@$offset C", $$data;
26 1         3 ( $self->{tag}, $offset ) = Net::DNS::Text->decode( $data, $offset + 1 );
27 1         42 $self->{value} = Net::DNS::Text->decode( $data, $offset, $limit - $offset );
28 1         3 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         8 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   4 my $self = shift;
41              
42 3         6 my @rdata = ( $self->flags, $self->{tag}->string, $self->{value}->string );
43 3         8 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         3 $self->tag( lc shift @argument );
52 1         2 $self->value( shift @argument );
53 1         3 return;
54             }
55              
56              
57             sub _defaults { ## specify RR attribute default values
58 1     1   2 my $self = shift;
59              
60 1         3 $self->flags(0);
61 1         2 return;
62             }
63              
64              
65             sub flags {
66 15     15 1 50 my ( $self, @value ) = @_;
67 15         19 for (@value) { $self->{flags} = 0 + $_ }
  4         13  
68 15   100     59 return $self->{flags} || 0;
69             }
70              
71              
72             sub critical {
73 4     4 1 780 my ( $self, @value ) = @_;
74 4 100       10 if ( scalar @value ) {
75 2         4 for ( $self->{flags} |= 0x80 ) {
76 2 100       7 $_ ^= 0x80 unless shift @value;
77             }
78             }
79 4         11 return $self->{flags} & 0x80;
80             }
81              
82              
83             sub tag {
84 5     5 1 801 my ( $self, @value ) = @_;
85 5         8 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 769 my ( $self, @value ) = @_;
92 5         7 for (@value) { $self->{value} = Net::DNS::Text->new($_) }
  3         8  
93 5 100       16 return $self->{value} ? $self->{value}->value : undef;
94             }
95              
96              
97             1;
98             __END__