File Coverage

blib/lib/Net/DNS/RR/MX.pm
Criterion Covered Total %
statement 41 41 100.0
branch 2 2 100.0
condition 2 2 100.0
subroutine 12 12 100.0
pod 2 2 100.0
total 59 59 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         278  
4 6     6   31 use warnings;
  6         10  
  6         626  
5             our $VERSION = (qw$Id: MX.pm 2002 2025-01-07 09:57:46Z willem $)[2];
6              
7 6     6   34 use base qw(Net::DNS::RR);
  6         12  
  6         657  
8              
9              
10             =head1 NAME
11              
12             Net::DNS::RR::MX - DNS MX resource record
13              
14             =cut
15              
16 6     6   36 use integer;
  6         11  
  6         38  
17              
18 6     6   261 use Net::DNS::DomainName;
  6         10  
  6         3538  
19              
20              
21             sub _decode_rdata { ## decode rdata from wire-format octet string
22 31     31   82 my ( $self, $data, $offset, @opaque ) = @_;
23              
24 31         118 $self->{preference} = unpack( "\@$offset n", $$data );
25 31         128 $self->{exchange} = Net::DNS::DomainName1035->decode( $data, $offset + 2, @opaque );
26 31         89 return;
27             }
28              
29              
30             sub _encode_rdata { ## encode rdata as wire-format octet string
31 5     5   12 my ( $self, @argument ) = @_;
32 5         10 my ( $offset, @opaque ) = @argument;
33              
34 5         6 my $exchange = $self->{exchange};
35 5         12 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         5 my $exchange = $self->{exchange};
43 2         5 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         10 for (qw(preference exchange)) { $self->$_( shift @argument ) }
  10         25  
51 5         11 return;
52             }
53              
54              
55             sub _defaults { ## specify RR attribute default values
56 6     6   12 my $self = shift;
57              
58 6         60 $self->preference(10);
59 6         12 return;
60             }
61              
62              
63             sub preference {
64 29     29 1 74 my ( $self, @value ) = @_;
65 29         60 for (@value) { $self->{preference} = 0 + $_ }
  13         56  
66 29   100     164 return $self->{preference} || 0;
67             }
68              
69              
70             sub exchange {
71 10     10 1 1408 my ( $self, @value ) = @_;
72 10         18 for (@value) { $self->{exchange} = Net::DNS::DomainName1035->new($_) }
  7         47  
73 10 100       50 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__