1 (** Simple DNS stub resolver. *)
4 All domains must be punycoded.
11 (** Type of a DNS server result code. *)
13 | DNS
of Dns.rcode
(** rcode of DNS query answer *)
14 | TIMEOUT
(** query performed, but no answer received *)
15 | ADDR
(** no query was needed, address converted from string *)
16 | INVALID
(** no query was needed, domain name invalid *)
17 | BLACKDOMAIN
(** no query was needed, domain name is blacklisted *)
18 | BLACKIP
(** all domain ips are blacklisted *)
20 val show_dres
: dres
-> string
22 (** Type for the result of a DNS query. *)
23 type ttl
= Forever
| Seconds
of int
24 type ip
= { ip
: Network.ipv4
; ttl
: ttl
; }
25 type result
= { domain
: string; dres
: dres
; cname
: string option; ips
: ip list
; txt
: string list list
}
27 (** Type of a handle to perform DNS queries. Contains the sockaddr where to send queries packet on, amongst other info. *)
30 (** [upstream ?port ?edns ?timeout endpoint] creates a handle to send DNS queries to hostname [endpoint].
31 NB this function creates a socket which is never closed. I.e. call it once per upstream in the process lifetime,
32 e.g. at toplevel (as a lazy value).
33 API should be improved to allow destroying values of type [t] *)
34 val upstream
: ?port
:int -> ?edns
:int -> ?timeout
:float -> string -> t
Lwt.t
36 (** [status t] display status such as the number of queries running and number of queries done for the handler [t]. *)
37 val status
: t
-> string
39 (** [query_exn t domain] performs a synchronous query with [t] on [domain].
40 @param qtype query type A (default) or TXT
42 val query_exn
: t
-> ?qtype
:Dns.qtype
-> string -> result
44 (** [query_exn t domain] performs an asynchronous query ([qtype] A or TXT) with [t] on [domain].
45 @param qtype query type A (default) or TXT
47 val do_query
: t
-> ?qtype
:Dns.qtype
-> string -> result
Lwt.t
49 val send_query_forget
: t
-> ?qtype
:Dns.qtype
-> string -> unit Lwt.t