00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00020 #ifndef LDNS_RESOLVER_H
00021 #define LDNS_RESOLVER_H
00022
00023 #include <ldns/error.h>
00024 #include <ldns/common.h>
00025 #include <ldns/rr.h>
00026 #include <ldns/tsig.h>
00027 #include <ldns/rdata.h>
00028 #include <ldns/packet.h>
00029 #include <sys/time.h>
00030
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034
00036 #define LDNS_RESOLV_CONF "/etc/resolv.conf"
00037
00038 #define LDNS_RESOLV_HOSTS "/etc/hosts"
00039
00040 #define LDNS_RESOLV_KEYWORD -1
00041 #define LDNS_RESOLV_DEFDOMAIN 0
00042 #define LDNS_RESOLV_NAMESERVER 1
00043 #define LDNS_RESOLV_SEARCH 2
00044 #define LDNS_RESOLV_SORTLIST 3
00045 #define LDNS_RESOLV_OPTIONS 4
00046 #define LDNS_RESOLV_ANCHOR 5
00047 #define LDNS_RESOLV_KEYWORDS 6
00048
00049 #define LDNS_RESOLV_INETANY 0
00050 #define LDNS_RESOLV_INET 1
00051 #define LDNS_RESOLV_INET6 2
00052
00053 #define LDNS_RESOLV_RTT_INF 0
00054 #define LDNS_RESOLV_RTT_MIN 1
00055
00059 struct ldns_struct_resolver
00060 {
00062 uint16_t _port;
00063
00065 ldns_rdf **_nameservers;
00067 size_t _nameserver_count;
00068
00070 size_t *_rtt;
00071
00073 bool _recursive;
00074
00076 bool _debug;
00077
00079 ldns_rdf *_domain;
00080
00082 ldns_rdf **_searchlist;
00083
00085 size_t _searchlist_count;
00086
00088 uint8_t _retry;
00090 uint8_t _retrans;
00092 bool _fallback;
00093
00095 bool _dnssec;
00097 bool _dnssec_cd;
00099 ldns_rr_list * _dnssec_anchors;
00101 bool _usevc;
00103 bool _igntc;
00105 uint8_t _ip6;
00107 bool _defnames;
00109 bool _dnsrch;
00111 struct timeval _timeout;
00113 bool _fail;
00115 bool _random;
00117 int _socket;
00121 int _axfr_soa_count;
00122
00123
00124
00126 ldns_pkt *_cur_axfr_pkt;
00128 uint16_t _axfr_i;
00129
00130 uint16_t _edns_udp_size;
00131
00132
00133
00134
00136 char *_tsig_keyname;
00138 char *_tsig_keydata;
00140 char *_tsig_algorithm;
00141 };
00142 typedef struct ldns_struct_resolver ldns_resolver;
00143
00144
00145
00146
00152 uint16_t ldns_resolver_port(const ldns_resolver *r);
00153
00159 bool ldns_resolver_recursive(const ldns_resolver *r);
00160
00166 bool ldns_resolver_debug(const ldns_resolver *r);
00167
00173 uint8_t ldns_resolver_retry(const ldns_resolver *r);
00174
00180 uint8_t ldns_resolver_retrans(const ldns_resolver *r);
00181
00187 bool ldns_resolver_fallback(const ldns_resolver *r);
00188
00194 uint8_t ldns_resolver_ip6(const ldns_resolver *r);
00195
00201 uint16_t ldns_resolver_edns_udp_size(const ldns_resolver *r);
00207 bool ldns_resolver_usevc(const ldns_resolver *r);
00213 bool ldns_resolver_fail(const ldns_resolver *r);
00219 bool ldns_resolver_defnames(const ldns_resolver *r);
00225 bool ldns_resolver_dnsrch(const ldns_resolver *r);
00231 bool ldns_resolver_dnssec(const ldns_resolver *r);
00237 bool ldns_resolver_dnssec_cd(const ldns_resolver *r);
00243 ldns_rr_list * ldns_resolver_dnssec_anchors(const ldns_resolver *r);
00249 bool ldns_resolver_igntc(const ldns_resolver *r);
00255 bool ldns_resolver_random(const ldns_resolver *r);
00261 size_t ldns_resolver_nameserver_count(const ldns_resolver *r);
00267 ldns_rdf *ldns_resolver_domain(const ldns_resolver *r);
00273 struct timeval ldns_resolver_timeout(const ldns_resolver *r);
00279 ldns_rdf** ldns_resolver_searchlist(const ldns_resolver *r);
00285 ldns_rdf** ldns_resolver_nameservers(const ldns_resolver *r);
00292 size_t * ldns_resolver_rtt(const ldns_resolver *r);
00299 size_t ldns_resolver_nameserver_rtt(const ldns_resolver *r, size_t pos);
00305 char *ldns_resolver_tsig_keyname(const ldns_resolver *r);
00311 char *ldns_resolver_tsig_algorithm(const ldns_resolver *r);
00317 char *ldns_resolver_tsig_keydata(const ldns_resolver *r);
00323 ldns_rdf* ldns_resolver_pop_nameserver(ldns_resolver *r);
00324
00330 size_t ldns_resolver_searchlist_count(const ldns_resolver *r);
00331
00332
00338 void ldns_resolver_set_port(ldns_resolver *r, uint16_t p);
00339
00345 void ldns_resolver_set_recursive(ldns_resolver *r, bool b);
00346
00352 void ldns_resolver_set_debug(ldns_resolver *r, bool b);
00353
00358 void ldns_resolver_incr_nameserver_count(ldns_resolver *r);
00359
00364 void ldns_resolver_dec_nameserver_count(ldns_resolver *r);
00365
00371 void ldns_resolver_set_nameserver_count(ldns_resolver *r, size_t c);
00372
00378 void ldns_resolver_set_nameservers(ldns_resolver *r, ldns_rdf **rd);
00379
00386 void ldns_resolver_set_domain(ldns_resolver *r, ldns_rdf *rd);
00387
00393 void ldns_resolver_set_timeout(ldns_resolver *r, struct timeval timeout);
00394
00400 void ldns_resolver_push_searchlist(ldns_resolver *r, ldns_rdf *rd);
00401
00407 void ldns_resolver_set_defnames(ldns_resolver *r, bool b);
00408
00414 void ldns_resolver_set_usevc(ldns_resolver *r, bool b);
00415
00421 void ldns_resolver_set_dnsrch(ldns_resolver *r, bool b);
00422
00428 void ldns_resolver_set_dnssec(ldns_resolver *r, bool b);
00429
00435 void ldns_resolver_set_dnssec_cd(ldns_resolver *r, bool b);
00441 void ldns_resolver_set_dnssec_anchors(ldns_resolver *r, ldns_rr_list * l);
00442
00449 ldns_status ldns_resolver_push_dnssec_anchor(ldns_resolver *r, ldns_rr *rr);
00450
00456 void ldns_resolver_set_retrans(ldns_resolver *r, uint8_t re);
00457
00464 void ldns_resolver_set_fallback(ldns_resolver *r, bool fallback);
00465
00471 void ldns_resolver_set_retry(ldns_resolver *r, uint8_t re);
00472
00478 void ldns_resolver_set_ip6(ldns_resolver *r, uint8_t i);
00479
00485 void ldns_resolver_set_fail(ldns_resolver *r, bool b);
00486
00492 void ldns_resolver_set_igntc(ldns_resolver *r, bool b);
00493
00499 void ldns_resolver_set_edns_udp_size(ldns_resolver *r, uint16_t s);
00500
00506 void ldns_resolver_set_tsig_keyname(ldns_resolver *r, char *tsig_keyname);
00507
00513 void ldns_resolver_set_tsig_algorithm(ldns_resolver *r, char *tsig_algorithm);
00514
00520 void ldns_resolver_set_tsig_keydata(ldns_resolver *r, char *tsig_keydata);
00521
00528 void ldns_resolver_set_rtt(ldns_resolver *r, size_t *rtt);
00529
00537 void ldns_resolver_set_nameserver_rtt(ldns_resolver *r, size_t pos, size_t value);
00538
00544 void ldns_resolver_set_random(ldns_resolver *r, bool b);
00545
00553 ldns_status ldns_resolver_push_nameserver(ldns_resolver *r, ldns_rdf *n);
00554
00562 ldns_status ldns_resolver_push_nameserver_rr(ldns_resolver *r, ldns_rr *rr);
00563
00570 ldns_status ldns_resolver_push_nameserver_rr_list(ldns_resolver *r, ldns_rr_list *rrlist);
00571
00584 ldns_pkt* ldns_resolver_search(const ldns_resolver *r, const ldns_rdf *rdf, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
00585
00597 ldns_status ldns_resolver_prepare_query_pkt(ldns_pkt **q, ldns_resolver *r, const ldns_rdf *name, ldns_rr_type t, ldns_rr_class c, uint16_t f);
00598
00610 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);
00611
00618 ldns_status ldns_resolver_send_pkt(ldns_pkt **answer, ldns_resolver *r, ldns_pkt *query_pkt);
00619
00631 ldns_pkt* ldns_resolver_query(const ldns_resolver *r, const ldns_rdf *name, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
00632
00633
00638 ldns_resolver* ldns_resolver_new(void);
00639
00647 ldns_status ldns_resolver_new_frm_fp(ldns_resolver **r, FILE *fp);
00648
00657 ldns_status ldns_resolver_new_frm_fp_l(ldns_resolver **r, FILE *fp, int *line_nr);
00658
00667 ldns_status ldns_resolver_new_frm_file(ldns_resolver **r, const char *filename);
00668
00673 void ldns_resolver_free(ldns_resolver *res);
00674
00679 void ldns_resolver_deep_free(ldns_resolver *res);
00680
00689 ldns_rr* ldns_axfr_next(ldns_resolver *resolver);
00690
00696 bool ldns_axfr_complete(const ldns_resolver *resolver);
00697
00704 ldns_pkt *ldns_axfr_last_pkt(const ldns_resolver *res);
00705
00710 void ldns_resolver_nameservers_randomize(ldns_resolver *r);
00711
00719 bool ldns_resolver_trusted_key(const ldns_resolver *r, ldns_rr_list * keys, ldns_rr_list * trusted_keys);
00720
00721 #ifdef __cplusplus
00722 }
00723 #endif
00724
00725 #endif