File Coverage

blib/lib/Net/DNS/RR/SRV.pm
Criterion Covered Total %
statement 48 48 100.0
branch 2 2 100.0
condition 6 6 100.0
subroutine 13 13 100.0
pod 4 4 100.0
total 73 73 100.0


line stmt bran cond sub pod time code
1             package Net::DNS::RR::SRV;
2              
3 2     2   13 use strict;
  2         5  
  2         76  
4 2     2   10 use warnings;
  2         3  
  2         189  
5             our $VERSION = (qw$Id: SRV.pm 2003 2025-01-21 12:06:06Z willem $)[2];
6              
7 2     2   12 use base qw(Net::DNS::RR);
  2         4  
  2         225  
8              
9              
10             =head1 NAME
11              
12             Net::DNS::RR::SRV - DNS SRV resource record
13              
14             =cut
15              
16 2     2   13 use integer;
  2         15  
  2         13  
17              
18 2     2   60 use Net::DNS::DomainName;
  2         5  
  2         1393  
19              
20              
21             sub _decode_rdata { ## decode rdata from wire-format octet string
22 1     1   4 my ( $self, $data, $offset, @opaque ) = @_;
23              
24 1         4 @{$self}{qw(priority weight port)} = unpack( "\@$offset n3", $$data );
  1         4  
25              
26 1         9 $self->{target} = Net::DNS::DomainName2535->decode( $data, $offset + 6, @opaque );
27 1         4 return;
28             }
29              
30              
31             sub _encode_rdata { ## encode rdata as wire-format octet string
32 61     61   86 my ( $self, $offset, @opaque ) = @_;
33              
34 61         59 my $target = $self->{target};
35 61         82 my @nums = ( $self->priority, $self->weight, $self->port );
36 61         99 return pack 'n3 a*', @nums, $target->encode( $offset + 6, @opaque );
37             }
38              
39              
40             sub _format_rdata { ## format rdata portion of RR string.
41 2     2   4 my $self = shift;
42              
43 2         4 my $target = $self->{target};
44 2         5 my @rdata = ( $self->priority, $self->weight, $self->port, $target->string );
45 2         8 return @rdata;
46             }
47              
48              
49             sub _parse_rdata { ## populate RR from rdata in argument list
50 9     9   43 my ( $self, @argument ) = @_;
51              
52 9         18 foreach my $attr (qw(priority weight port target)) {
53 36         88 $self->$attr( shift @argument );
54             }
55 9         21 return;
56             }
57              
58              
59             sub priority {
60 75     75 1 94 my ( $self, @value ) = @_;
61 75         98 for (@value) { $self->{priority} = 0 + $_ }
  10         28  
62 75   100     188 return $self->{priority} || 0;
63             }
64              
65              
66             sub weight {
67 75     75 1 1402 my ( $self, @value ) = @_;
68 75         88 for (@value) { $self->{weight} = 0 + $_ }
  10         33  
69 75   100     215 return $self->{weight} || 0;
70             }
71              
72              
73             sub port {
74 75     75 1 1354 my ( $self, @value ) = @_;
75 75         88 for (@value) { $self->{port} = 0 + $_ }
  10         38  
76 75   100     147 return $self->{port} || 0;
77             }
78              
79              
80             sub target {
81 12     12 1 1391 my ( $self, @value ) = @_;
82 12         28 for (@value) { $self->{target} = Net::DNS::DomainName2535->new($_) }
  10         43  
83 12 100       55 return $self->{target} ? $self->{target}->name : undef;
84             }
85              
86              
87             # order RRs by numerically increasing priority, decreasing weight
88             my $function = sub {
89             my ( $a, $b ) = ( $Net::DNS::a, $Net::DNS::b );
90             return $a->{priority} <=> $b->{priority}
91             || $b->{weight} <=> $a->{weight};
92             };
93              
94             __PACKAGE__->set_rrsort_func( 'priority', $function );
95              
96             __PACKAGE__->set_rrsort_func( 'default_sort', $function );
97              
98              
99             1;
100             __END__