File Coverage

blib/lib/Net/DNS/RR/MX.pm
Criterion Covered Total %
statement 42 42 100.0
branch 2 2 100.0
condition 2 2 100.0
subroutine 12 12 100.0
pod 2 2 100.0
total 60 60 100.0


line stmt bran cond sub pod time code
1             package Net::DNS::RR::MX;
2              
3 6     6   50 use strict;
  6         13  
  6         237  
4 6     6   35 use warnings;
  6         15  
  6         387  
5             our $VERSION = (qw$Id: MX.pm 1896 2023-01-30 12:59:25Z willem $)[2];
6              
7 6     6   42 use base qw(Net::DNS::RR);
  6         13  
  6         632  
8              
9              
10             =head1 NAME
11              
12             Net::DNS::RR::MX - DNS MX resource record
13              
14             =cut
15              
16 6     6   85 use integer;
  6         12  
  6         38  
17              
18 6     6   269 use Net::DNS::DomainName;
  6         16  
  6         3621  
19              
20              
21             sub _decode_rdata { ## decode rdata from wire-format octet string
22 31     31   85 my ( $self, @argument ) = @_;
23 31         65 my ( $data, $offset, @opaque ) = @argument;
24              
25 31         143 $self->{preference} = unpack( "\@$offset n", $$data );
26 31         126 $self->{exchange} = Net::DNS::DomainName1035->decode( $data, $offset + 2, @opaque );
27 31         118 return;
28             }
29              
30              
31             sub _encode_rdata { ## encode rdata as wire-format octet string
32 5     5   12 my ( $self, @argument ) = @_;
33 5         8 my ( $offset, @opaque ) = @argument;
34              
35 5         7 my $exchange = $self->{exchange};
36 5         9 return pack 'n a*', $self->preference, $exchange->encode( $offset + 2, @opaque );
37             }
38              
39              
40             sub _format_rdata { ## format rdata portion of RR string.
41 2     2   3 my $self = shift;
42              
43 2         2 my $exchange = $self->{exchange};
44 2         5 return join ' ', $self->preference, $exchange->string;
45             }
46              
47              
48             sub _parse_rdata { ## populate RR from rdata in argument list
49 5     5   21 my ( $self, @argument ) = @_;
50              
51 5         11 for (qw(preference exchange)) { $self->$_( shift @argument ) }
  10         25  
52 5         10 return;
53             }
54              
55              
56             sub _defaults { ## specify RR attribute default values
57 6     6   15 my $self = shift;
58              
59 6         53 $self->preference(10);
60 6         14 return;
61             }
62              
63              
64             sub preference {
65 29     29 1 73 my ( $self, @value ) = @_;
66 29         66 for (@value) { $self->{preference} = 0 + $_ }
  13         62  
67 29   100     147 return $self->{preference} || 0;
68             }
69              
70              
71             sub exchange {
72 10     10 1 652 my ( $self, @value ) = @_;
73 10         20 for (@value) { $self->{exchange} = Net::DNS::DomainName1035->new($_) }
  7         19  
74 10 100       60 return $self->{exchange} ? $self->{exchange}->name : undef;
75             }
76              
77              
78             my $function = sub { ## sort RRs in numerically ascending order.
79             return $Net::DNS::a->{'preference'} <=> $Net::DNS::b->{'preference'};
80             };
81              
82             __PACKAGE__->set_rrsort_func( 'preference', $function );
83              
84             __PACKAGE__->set_rrsort_func( 'default_sort', $function );
85              
86              
87             1;
88             __END__