--- EV-ADNS/ADNS.pm 2007/12/01 13:53:10 1.1
+++ EV-ADNS/ADNS.pm 2007/12/03 19:04:48 1.6
@@ -1,13 +1,142 @@
=head1 NAME
-EV::ADNS -
+EV::ADNS - lightweight asynchronous dns queries using EV and libadns
=head1 SYNOPSIS
+ use EV;
use EV::ADNS;
+ EV::ADNS::submit "example.com", EV::ADNS::r_a, 0, sub {
+ my ($status, $expires, @a) = @_;
+ warn $a[0]; # "127.13.166.3" etc.
+ };
+
+ EV::loop;
+
=head1 DESCRIPTION
+This is a simple interface to libadns (asynchronous dns) that
+integrates well and automatically into the EV event loop. The
+documentation for libadns is vital to understand this module, see
+L.
+
+You can use it only with EV (directly or indirectly, e.g. via
+L). Apart from loading and using the C function you need
+not do anything (except run an EV event loop).
+
+=head1 OVERVIEW
+
+All the constants/enums from F are available in the EV::ADNS
+namespace, without the C prefix, e.g. C becomes
+C, C becomes C and
+so on.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item $query = EV::ADNS::submit "domain", $rrtype, $flags, $cb
+
+Submits a new request to be handled. See the C C function
+description for more details. The function optionally returns a query
+object which can be used to cancel an in-progress request. You do not need
+to store the query object, even if you ignore it the query will proceed.
+
+The callback will be invoked with a result status, the time the resource
+record validity expires and zero or more resource records, one scalar per
+result record. Example:
+
+ sub adns_cb {
+ my ($status, $expires, @rr) = @_;
+ if ($status == EV::ADNS::s_ok) {
+ use JSON::XS;
+ warn to_json \@rr;
+ }
+ }
+
+The format of result records varies considerably, here is some cursory
+documentation of how each record will look like, depending on the query
+type:
+
+=over 4
+
+=item EV::ADNS::rr_a
+
+An IPv4 address in dotted quad (string) form.
+
+=item EV::ADNS::r_ns_raw, EV::ADNS::r_cname, EV::ADNS::r_ptr, EV::ADNS::r_ptr_raw
+
+The resource record as a simple string.
+
+=item EV::ADNS::r_txt
+
+An arrayref of strings.
+
+=item EV::ADNS::r_ns
+
+A "host address", a hostname with any number of addresses (hint records).
+
+Currently only the hostname will be stored, so this is alway an arrayref
+with a single element of the hostname. Future versions might add
+additional address entries.
+
+=item EV::ADNS::r_hinfo
+
+An arrayref consisting of the two strings.
+
+=item EV::ADNS::r_rp, EV::ADNS::r_rp_raw
+
+An arrayref with two strings.
+
+=item EV::ADNS::r_mx
+
+An arrayref consisting of the priority and a "host address" (see
+C). Example:
+
+ [10, "mail10.example.com"]
+
+=item EV::ADNS::r_mx_raw
+
+An arrayref consisting of the priority and the hostname, e.g. C<[10,
+"mail.example.com"]>.
+
+=item EV::ADNS::r_soa, EV::ADNS::r_soa_raw
+
+An arrayref consisting of the primary nameserver, admin name, serial,
+refresh, retry expire and minimum times, e.g.:
+
+ ["ns.example.net", "hostmaster@example.net", 2000001102, 86400, 21600, 2592000, 172800]
+
+The "raw" form doesn't mangle the e-mail address.
+
+=item EV::ADNS::r_srv_raw
+
+An arrayref consisting of the priority, weight, port and hostname, e.g.:
+
+ [10, 10, 5060, "sip1.example.net"]
+
+=item EV::ADNS::r_srv
+
+The same as C, but the hostname is replaced by a "host
+address" (see C).
+
+=item EV::ADNS::r_unknown
+
+A single octet string with the raw contents.
+
+=item anything else
+
+Currently C.
+
+=back
+
+=item $query->cancel
+
+Cancels a request that is in progress.
+
+=back
+
=cut
package EV::ADNS;
@@ -16,17 +145,16 @@
use EV ();
BEGIN {
- $VERSION = '1.0';
+ $VERSION = '0.3';
require XSLoader;
XSLoader::load (EV::ADNS, $VERSION);
}
-=cut
-
=head1 SEE ALSO
-L.
+L, L another interface to adns, maybe better, but without
+real support to integrate it into other event loops.
=head1 AUTHOR