File Coverage

blib/lib/Net/DNS/RR/MX.pm
Criterion Covered Total %
statement 41 41 100.0
branch 2 2 100.0
path n/a
condition 2 2 100.0
subroutine 12 12 100.0
pod 2 2 100.0
total 59 59 100.0


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