resolver.h
Go to the documentation of this file.
1 /*
2  * resolver.h
3  *
4  * DNS Resolver definitions
5  *
6  * a Net::DNS like library for C
7  *
8  * (c) NLnet Labs, 2005-2006
9  *
10  * See the file LICENSE for the license
11  */
12 
20 #ifndef LDNS_RESOLVER_H
21 #define LDNS_RESOLVER_H
22 
23 #include <ldns/error.h>
24 #include <ldns/common.h>
25 #include <ldns/rr.h>
26 #include <ldns/tsig.h>
27 #include <ldns/rdata.h>
28 #include <ldns/packet.h>
29 #include <sys/time.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
36 #define LDNS_RESOLV_CONF "/etc/resolv.conf"
37 
38 #define LDNS_RESOLV_HOSTS "/etc/hosts"
39 
40 #define LDNS_RESOLV_KEYWORD -1
41 #define LDNS_RESOLV_DEFDOMAIN 0
42 #define LDNS_RESOLV_NAMESERVER 1
43 #define LDNS_RESOLV_SEARCH 2
44 #define LDNS_RESOLV_SORTLIST 3
45 #define LDNS_RESOLV_OPTIONS 4
46 #define LDNS_RESOLV_ANCHOR 5
47 #define LDNS_RESOLV_KEYWORDS 6
48 
49 #define LDNS_RESOLV_INETANY 0
50 #define LDNS_RESOLV_INET 1
51 #define LDNS_RESOLV_INET6 2
52 
53 #define LDNS_RESOLV_RTT_INF 0 /* infinity */
54 #define LDNS_RESOLV_RTT_MIN 1 /* reachable */
55 
60 {
62  uint16_t _port;
63 
67  size_t _nameserver_count; /* how many do we have */
68 
70  size_t *_rtt;
71 
73  bool _recursive;
74 
76  bool _debug;
77 
80 
83 
86 
88  uint8_t _retry;
90  uint8_t _retrans;
92  bool _fallback;
93 
95  bool _dnssec;
97  bool _dnssec_cd;
101  bool _usevc;
103  bool _igntc;
105  uint8_t _ip6;
107  bool _defnames;
109  bool _dnsrch;
111  struct timeval _timeout;
113  bool _fail;
115  bool _random;
117  int _socket;
122  /* when axfring we get complete packets from the server
123  but we want to give the caller 1 rr at a time, so
124  keep the current pkt */
128  uint16_t _axfr_i;
129  /* EDNS0 available buffer size */
130  uint16_t _edns_udp_size;
131 
132  /* Optional tsig key for signing queries,
133  outgoing messages are signed if and only if both are set
134  */
141 };
143 
144 /* prototypes */
145 /* read access functions */
146 
152 uint16_t ldns_resolver_port(const ldns_resolver *r);
153 
160 
166 bool ldns_resolver_debug(const ldns_resolver *r);
167 
173 uint8_t ldns_resolver_retry(const ldns_resolver *r);
174 
180 uint8_t ldns_resolver_retrans(const ldns_resolver *r);
181 
188 
194 uint8_t ldns_resolver_ip6(const ldns_resolver *r);
195 
201 uint16_t ldns_resolver_edns_udp_size(const ldns_resolver *r);
207 bool ldns_resolver_usevc(const ldns_resolver *r);
213 bool ldns_resolver_fail(const ldns_resolver *r);
225 bool ldns_resolver_dnsrch(const ldns_resolver *r);
231 bool ldns_resolver_dnssec(const ldns_resolver *r);
249 bool ldns_resolver_igntc(const ldns_resolver *r);
255 bool ldns_resolver_random(const ldns_resolver *r);
273 struct timeval ldns_resolver_timeout(const ldns_resolver *r);
292 size_t * ldns_resolver_rtt(const ldns_resolver *r);
299 size_t ldns_resolver_nameserver_rtt(const ldns_resolver *r, size_t pos);
324 
331 
332 /* write access function */
338 void ldns_resolver_set_port(ldns_resolver *r, uint16_t p);
339 
346 
352 void ldns_resolver_set_debug(ldns_resolver *r, bool b);
353 
359 
365 
372 
379 
387 
393 void ldns_resolver_set_timeout(ldns_resolver *r, struct timeval timeout);
394 
401 
408 
414 void ldns_resolver_set_usevc(ldns_resolver *r, bool b);
415 
421 void ldns_resolver_set_dnsrch(ldns_resolver *r, bool b);
422 
428 void ldns_resolver_set_dnssec(ldns_resolver *r, bool b);
429 
442 
450 
456 void ldns_resolver_set_retrans(ldns_resolver *r, uint8_t re);
457 
464 void ldns_resolver_set_fallback(ldns_resolver *r, bool fallback);
465 
471 void ldns_resolver_set_retry(ldns_resolver *r, uint8_t re);
472 
478 void ldns_resolver_set_ip6(ldns_resolver *r, uint8_t i);
479 
485 void ldns_resolver_set_fail(ldns_resolver *r, bool b);
486 
492 void ldns_resolver_set_igntc(ldns_resolver *r, bool b);
493 
500 
506 void ldns_resolver_set_tsig_keyname(ldns_resolver *r, char *tsig_keyname);
507 
513 void ldns_resolver_set_tsig_algorithm(ldns_resolver *r, char *tsig_algorithm);
514 
520 void ldns_resolver_set_tsig_keydata(ldns_resolver *r, char *tsig_keydata);
521 
528 void ldns_resolver_set_rtt(ldns_resolver *r, size_t *rtt);
529 
537 void ldns_resolver_set_nameserver_rtt(ldns_resolver *r, size_t pos, size_t value);
538 
544 void ldns_resolver_set_random(ldns_resolver *r, bool b);
545 
554 
563 
571 
584 ldns_pkt* ldns_resolver_search(const ldns_resolver *r, const ldns_rdf *rdf, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
585 
598 
610 ldns_status ldns_resolver_send(ldns_pkt **answer, ldns_resolver *r, const ldns_rdf *name, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
611 
619 
631 ldns_pkt* ldns_resolver_query(const ldns_resolver *r, const ldns_rdf *name, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
632 
633 
639 
648 
657 ldns_status ldns_resolver_new_frm_fp_l(ldns_resolver **r, FILE *fp, int *line_nr);
658 
667 ldns_status ldns_resolver_new_frm_file(ldns_resolver **r, const char *filename);
668 
674 
680 
690 
696 bool ldns_axfr_complete(const ldns_resolver *resolver);
697 
705 
711 
719 bool ldns_resolver_trusted_key(const ldns_resolver *r, ldns_rr_list * keys, ldns_rr_list * trusted_keys);
720 
721 #ifdef __cplusplus
722 }
723 #endif
724 
725 #endif /* LDNS_RESOLVER_H */