package Net::DNS::RR::NAPTR;
#
# $Id: NAPTR.pm 1326 2015-02-18 10:51:24Z willem $
#
use vars qw($VERSION);
$VERSION = (qw$LastChangedRevision: 1326 $)[1];
use strict;
use base qw(Net::DNS::RR);
=head1 NAME
Net::DNS::RR::NAPTR - DNS NAPTR resource record
=cut
use integer;
use Net::DNS::DomainName;
use Net::DNS::Text;
sub decode_rdata { ## decode rdata from wire-format octet string
my $self = shift;
my ( $data, $offset, @opaque ) = @_;
@{$self}{qw(order preference)} = unpack "\@$offset n2", $$data;
( $self->{flags}, $offset ) = decode Net::DNS::Text( $data, $offset + 4 );
( $self->{service}, $offset ) = decode Net::DNS::Text( $data, $offset );
( $self->{regexp}, $offset ) = decode Net::DNS::Text( $data, $offset );
$self->{replacement} = decode Net::DNS::DomainName2535( $data, $offset, @opaque );
}
sub encode_rdata { ## encode rdata as wire-format octet string
my $self = shift;
my ( $offset, @opaque ) = @_;
return '' unless $self->{replacement};
my $rdata = pack 'n2', @{$self}{qw(order preference)};
$rdata .= $self->{flags}->encode;
$rdata .= $self->{service}->encode;
$rdata .= $self->{regexp}->encode;
$rdata .= $self->{replacement}->encode( $offset + length($rdata), @opaque );
}
sub format_rdata { ## format rdata portion of RR string.
my $self = shift;
return '' unless $self->{replacement};
my @number = @{$self}{qw(order preference)};
my @string = map { $_->string } @{$self}{qw(flags service regexp replacement)};
join ' ', @number, @string;
}
sub parse_rdata { ## populate RR from rdata in argument list
my $self = shift;
map { $self->$_(shift) } qw(order preference flags service regexp replacement);
}
sub order {
my $self = shift;
$self->{order} = 0 + shift if scalar @_;
return $self->{order} || 0;
}
sub preference {
my $self = shift;
$self->{preference} = 0 + shift if scalar @_;
return $self->{preference} || 0;
}
sub flags {
my $self = shift;
$self->{flags} = new Net::DNS::Text(shift) if scalar @_;
$self->{flags}->value if defined wantarray && $self->{flags};
}
sub service {
my $self = shift;
$self->{service} = new Net::DNS::Text(shift) if scalar @_;
$self->{service}->value if defined wantarray && $self->{service};
}
sub regexp {
my $self = shift;
$self->{regexp} = new Net::DNS::Text(shift) if scalar @_;
$self->{regexp}->value if defined wantarray && $self->{regexp};
}
sub replacement {
my $self = shift;
$self->{replacement} = new Net::DNS::DomainName2535(shift) if scalar @_;
$self->{replacement}->name if defined wantarray && $self->{replacement};
}
__PACKAGE__->set_rrsort_func(
'order',
sub {
my ( $a, $b ) = ( $Net::DNS::a, $Net::DNS::b );
$a->{order} <=> $b->{order}
|| $a->{preference} <=> $b->{preference};
} );
__PACKAGE__->set_rrsort_func(
'preference',
sub {
my ( $a, $b ) = ( $Net::DNS::a, $Net::DNS::b );
$a->{preference} <=> $b->{preference}
|| $a->{order} <=> $b->{order};
} );
__PACKAGE__->set_rrsort_func( 'default_sort', __PACKAGE__->get_rrsort_func('order') );
1;
__END__
=head1 SYNOPSIS
use Net::DNS;
$rr = new Net::DNS::RR('name NAPTR order preference flags service regexp replacement');
=head1 DESCRIPTION
DNS Naming Authority Pointer (NAPTR) resource records.
=head1 METHODS
The available methods are those inherited from the base class augmented
by the type-specific methods defined in this package.
Use of undocumented package features or direct access to internal data
structures is discouraged and could result in program termination or
other unpredictable behaviour.
=head2 order
$order = $rr->order;
$rr->order( $order );
A 16-bit unsigned integer specifying the order in which the NAPTR
records must be processed to ensure the correct ordering of rules.
Low numbers are processed before high numbers.
=head2 preference
$preference = $rr->preference;
$rr->preference( $preference );
A 16-bit unsigned integer that specifies the order in which NAPTR
records with equal "order" values should be processed, low numbers
being processed before high numbers.
=head2 flags
$flags = $rr->flags;
$rr->flags( $flags );
A string containing flags to control aspects of the rewriting and
interpretation of the fields in the record. Flags are single
characters from the set [A-Z0-9].
=head2 service
$service = $rr->service;
$rr->service( $service );
Specifies the service(s) available down this rewrite path. It may
also specify the protocol used to communicate with the service.
=head2 regexp
$regexp = $rr->regexp;
$rr->regexp;
A string containing a substitution expression that is applied to
the original string held by the client in order to construct the
next domain name to lookup.
=head2 replacement
$replacement = $rr->replacement;
$rr->replacement( $replacement );
The next NAME to query for NAPTR, SRV, or address records
depending on the value of the flags field.
=head1 COPYRIGHT
Copyright (c)2005 Olaf Kolkman, NLnet Labs.
Based on code contributed by Ryan Moats.
All rights reserved.
This program is free software; you may redistribute it and/or
modify it under the same terms as Perl itself.
Package template (c)2009,2012 O.M.Kolkman and R.W.Franks.
=head1 SEE ALSO
L<perl>, L<Net::DNS>, L<Net::DNS::RR>, RFC2915, RFC2168, RFC3403
=cut