ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV-ADNS/ADNS.pm
Revision: 1.17
Committed: Sat Oct 17 02:38:45 2015 UTC (8 years, 8 months ago) by root
Branch: MAIN
CVS Tags: HEAD
Changes since 1.16: +6 -5 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.5 EV::ADNS - lightweight asynchronous dns queries using EV and libadns
4 root 1.1
5     =head1 SYNOPSIS
6    
7 root 1.3 use EV;
8 root 1.1 use EV::ADNS;
9    
10 root 1.14 EV::ADNS::submit "example.com", EV::ADNS::r_addr, EV::ADNS::qf_cname_loose, sub {
11 root 1.2 my ($status, $expires, @a) = @_;
12     warn $a[0]; # "127.13.166.3" etc.
13     };
14    
15 root 1.14 EV::run;
16 root 1.3
17 root 1.1 =head1 DESCRIPTION
18    
19 root 1.2 This is a simple interface to libadns (asynchronous dns) that
20     integrates well and automatically into the EV event loop. The
21     documentation for libadns is vital to understand this module, see
22     L<http://www.chiark.greenend.org.uk/~ian/adns/>.
23    
24     You can use it only with EV (directly or indirectly, e.g. via
25     L<Glib::EV>). Apart from loading and using the C<submit> function you need
26     not do anything (except run an EV event loop).
27    
28     =head1 OVERVIEW
29    
30     All the constants/enums from F<adns.h> are available in the EV::ADNS
31 root 1.14 namespace, without the C<adns_> prefix, i.e. C<adns_r_a> becomes
32     C<EV::ADNS::r_a> and so on.
33 root 1.2
34     =head1 FUNCTIONS
35    
36     =over 4
37    
38     =item $query = EV::ADNS::submit "domain", $rrtype, $flags, $cb
39    
40     Submits a new request to be handled. See the C<adns_submit> C function
41     description for more details. The function optionally returns a query
42     object which can be used to cancel an in-progress request. You do not need
43 root 1.14 to store the query object, even if you ignore it, the query will proceed.
44 root 1.2
45     The callback will be invoked with a result status, the time the resource
46     record validity expires and zero or more resource records, one scalar per
47     result record. Example:
48    
49     sub adns_cb {
50     my ($status, $expires, @rr) = @_;
51     if ($status == EV::ADNS::s_ok) {
52     use JSON::XS;
53 root 1.7 warn encode_json \@rr;
54 root 1.2 }
55     }
56    
57     The format of result records varies considerably, here is some cursory
58     documentation of how each record will look like, depending on the query
59     type:
60    
61     =over 4
62    
63 root 1.15 =item EV::ADNS::r_addr
64 root 1.2
65 root 1.17 An IPv4 and/or IPV6 address in string form.
66 root 1.15
67     =item EV::ADNS::r_a
68    
69 root 1.17 An IPv4 address in dotted quad (string) form.
70 root 1.15
71     =item EV::ADNS::r_aaaa
72    
73 root 1.17 An IPv6 address in string form.
74 root 1.2
75 root 1.5 =item EV::ADNS::r_ns_raw, EV::ADNS::r_cname, EV::ADNS::r_ptr, EV::ADNS::r_ptr_raw
76 root 1.2
77     The resource record as a simple string.
78    
79 root 1.5 =item EV::ADNS::r_txt
80 root 1.2
81 root 1.17 An arrayref of strings (usually one string per record).
82 root 1.2
83 root 1.5 =item EV::ADNS::r_ns
84 root 1.2
85 root 1.17 A "host address", a hostname with any number of pre-resolved addresses
86     (hint records).
87 root 1.2
88 root 1.14 The record will be an arrayref with domainname, adns status and any number
89     of associated addresses: C<< ["domain", adns_status, addr...] >>.
90 root 1.2
91 root 1.5 =item EV::ADNS::r_hinfo
92 root 1.2
93     An arrayref consisting of the two strings.
94    
95 root 1.5 =item EV::ADNS::r_rp, EV::ADNS::r_rp_raw
96 root 1.2
97     An arrayref with two strings.
98    
99 root 1.5 =item EV::ADNS::r_mx
100 root 1.2
101     An arrayref consisting of the priority and a "host address" (see
102 root 1.5 C<EV::ADNS::r_ns>). Example:
103 root 1.2
104 root 1.14 [10, [["alt3.aspmx.l.google.com", 0, "64.233.189.27", "2404:6800:4008:c07::1a"]]]
105 root 1.2
106 root 1.5 =item EV::ADNS::r_mx_raw
107 root 1.2
108     An arrayref consisting of the priority and the hostname, e.g. C<[10,
109     "mail.example.com"]>.
110    
111 root 1.5 =item EV::ADNS::r_soa, EV::ADNS::r_soa_raw
112 root 1.2
113     An arrayref consisting of the primary nameserver, admin name, serial,
114     refresh, retry expire and minimum times, e.g.:
115    
116 root 1.5 ["ns.example.net", "hostmaster@example.net", 2000001102, 86400, 21600, 2592000, 172800]
117 root 1.2
118     The "raw" form doesn't mangle the e-mail address.
119    
120 root 1.5 =item EV::ADNS::r_srv_raw
121 root 1.2
122     An arrayref consisting of the priority, weight, port and hostname, e.g.:
123    
124 root 1.5 [10, 10, 5060, "sip1.example.net"]
125 root 1.2
126 root 1.5 =item EV::ADNS::r_srv
127 root 1.2
128 root 1.5 The same as C<EV::ADNS::r_srv_raw>, but the hostname is replaced by a "host
129     address" (see C<EV::ADNS::r_ns>).
130 root 1.2
131 root 1.5 =item EV::ADNS::r_unknown
132 root 1.2
133     A single octet string with the raw contents.
134    
135     =item anything else
136    
137     Currently C<undef>.
138    
139     =back
140    
141     =item $query->cancel
142    
143     Cancels a request that is in progress.
144    
145 root 1.16 =item EV::ADNS::reinit $flags_or_undef, $resolvdata_or_undef
146 root 1.14
147     Cancels all outstanding queries, frees all adns state and reinitialises
148     it. It is highly recommended to only call this when there are no
149     outstanding requests.
150    
151 root 1.16 The first argument is the set of init flags to use, or C<undef>, in which
152     case EV::ADNS uses it's default flag set.
153 root 1.14
154     The second argument can be missing or C<undef>; in which case the normal
155     initialisation is done (such as reading the F<resolv.conf>), or it might
156     be a stirng, in which case no config files or environment variables will
157     be read and the given string will be interpreted as the F<resolv.conf>
158     contents.
159    
160 root 1.2 =back
161    
162 root 1.1 =cut
163    
164     package EV::ADNS;
165    
166     use Carp ();
167     use EV ();
168    
169     BEGIN {
170 root 1.14 $VERSION = '3.0';
171 root 1.1
172     require XSLoader;
173     XSLoader::load (EV::ADNS, $VERSION);
174     }
175    
176     =head1 SEE ALSO
177    
178 root 1.2 L<EV>, L<Net::ADNS> another interface to adns, maybe better, but without
179     real support to integrate it into other event loops.
180 root 1.1
181     =head1 AUTHOR
182    
183     Marc Lehmann <schmorp@schmorp.de>
184     http://home.schmorp.de/
185    
186     =cut
187    
188     1
189