=head1 NAME

APR::IpSubnet - Perl API for accessing APRs ip_subnet structures

=head1 Synopsis

  use APR::IpSubnet ();
  my $ipsub = APR::IpSubnet->new($pool, "");
  $ok = $ipsub->test($sock_addr);

=head1 Description

C<APR::IpSubnet> object represents a range of IP addresses
(IPv4/IPv6). A socket connection can be matched against this range to
test whether the IP it's coming from is inside or outside of this

=head1 API

C<APR::IpSubnet> provides the following functions and/or methods:

=head2 C<new>

Create an IP subnet represenation object

  $ipsubnet = APR::IpSubnet->new($pool, $ip);
  $ipsubnet = APR::IpSubnet->new($pool, $ip, $mask_or_numbits);

=over 4

=item obj: C<APR::IpSubnet> (class name)

=item arg1: C<$pool>
( C<L<APR::Pool object|docs::2.0::api::APR::Pool>> )

=item arg2: C<$ip> ( string )

IP address in one of the two formats: IPv4 (e.g. I<"">) or
IPv6 (e.g. I<"::1">). IPv6 addresses are accepted only if APR has the
IPv6 support enabled.

=item opt arg3: C<$mask_or_numbits> ( string )

An optional IP mask (e.g. I<"">) or number of bits
(e.g. I<"15">).

If none provided, the default is not to mask off.

=item ret: C<$ret>
( C<L<APR::IpSubnet object|docs::2.0::api::APR::IpSubnet>> )

The IP-subnet object

=item excpt: C<L<APR::Error|docs::2.0::api::APR::Error>>

=item since: 2.0.00


=head2 C<test>

Test the IP address in the socket address object against a pre-built
ip-subnet representation.

  $ret = $ipsub->test($sockaddr);

=over 4

=item obj: C<$ipsub>
( C<L<APR::IpSubnet object|docs::2.0::api::APR::IpSubnet>> )

The ip-subnet representation

=item arg1: C<$sockaddr>
( C<L<APR::SockAddr object|docs::2.0::api::APR::SockAddr>> )

The socket address to test

=item ret: C<$ret> ( boolean )

true if the socket address is within the subnet, false otherwise

=item since: 2.0.00


This method is used for testing whether or not an address is within a
subnet. It's used by module C<mod_access> to check whether the client
IP fits into the IP range, supplied by C<Allow>/C<Deny> directives.


Allow accesses only from the localhost (IPv4):

  use APR::IpSubnet ();
  use Apache2::Connection ();
  use Apache2::RequestRec ();
  my $ipsub = APR::IpSubnet->new($r->pool, "");
  ok $ipsub->test($r->connection->remote_addr);

=head1 See Also

L<mod_perl 2.0 documentation|docs::2.0::index>.

=head1 Copyright

mod_perl 2.0 and its core modules are copyrighted under
The Apache Software License, Version 2.0.

=head1 Authors

L<The mod_perl development team and numerous