AllKnowingDNS

 view release on metacpan or  search on metacpan

lib/App/AllKnowingDNS/Config.pm  view on Meta::CPAN

# vim:ts=4:sw=4:expandtab
package App::AllKnowingDNS::Config;

use Mouse;
use App::AllKnowingDNS::Zone;
use App::AllKnowingDNS::Util;
use Data::Dumper;

=head1 NAME

App::AllKnowingDNS::Config - configuration object

=head1 DESCRIPTION

Note: User documentation is in L<all-knowing-dns>(1).

This module defines an object which holds the parsed version of the
AllKnowingDNS configuration file.

=head1 FUNCTIONS

=cut

has 'listen_addresses' => (
    traits => [ 'Array' ],
    is => 'ro',
    isa => 'ArrayRef[Str]',
    default => sub { [] },
    handles => {
        add_listen_address => 'push',
        all_listen_addresses => 'elements',
        count_listen_addresses => 'count',
    },
);

has 'zones' => (
    traits => [ 'Array' ],
    is => 'ro',
    isa => 'ArrayRef[App::AllKnowingDNS::Zone]',
    default => sub { [] },
    handles => {
        all_zones => 'elements',
        has_zones => 'count',
        count_zones => 'count',
    },
);

sub add_zone {
    my ($self, $zone) = @_;

    my $aaaazone = quotemeta($zone->resolves_to);
    $aaaazone =~ s/\\%DIGITS\\%/([a-z0-9]+)/i;
    $zone->aaaazone(qr/^$aaaazone$/);

    $zone->ptrzone(App::AllKnowingDNS::Util::netmask_to_ptrzone($zone->network));

    push @{$self->zones}, $zone;
}

=head2 zone_for_ptr($zone)

Returns the appropriate zone for the given PTR query or undef if there is no
appropriate zone.

Example:

    my $query = '7.c.e.2.3.4.e.f.f.f.b.d.9.1.2.0.' .

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 0.564 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )