resolver.h

Go to the documentation of this file.
00001 /*
00002  * resolver.h
00003  *
00004  * DNS Resolver definitions
00005  *
00006  * a Net::DNS like library for C
00007  *
00008  * (c) NLnet Labs, 2005-2006
00009  *
00010  * See the file LICENSE for the license
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 
00032 #define LDNS_RESOLV_CONF        "/etc/resolv.conf"
00033 
00034 #define LDNS_RESOLV_HOSTS       "/etc/hosts"
00035 
00036 #define LDNS_RESOLV_KEYWORD     -1      
00037 #define LDNS_RESOLV_DEFDOMAIN   0
00038 #define LDNS_RESOLV_NAMESERVER  1
00039 #define LDNS_RESOLV_SEARCH      2
00040 #define LDNS_RESOLV_SORTLIST    3
00041 #define LDNS_RESOLV_OPTIONS     4
00042 
00043 #define LDNS_RESOLV_KEYWORDS    5
00044 
00045 #define LDNS_RESOLV_INETANY             0
00046 #define LDNS_RESOLV_INET                1
00047 #define LDNS_RESOLV_INET6               2
00048 
00049 #define LDNS_RESOLV_RTT_INF             0       /* infinity */
00050 #define LDNS_RESOLV_RTT_MIN             1       /* reacheable */
00051 
00055 struct ldns_struct_resolver
00056 {
00058         uint16_t _port;
00059 
00061         ldns_rdf **_nameservers; 
00063         size_t _nameserver_count; /* how many do we have */
00064 
00066         size_t *_rtt;
00067 
00069         bool _recursive;
00070 
00072         bool _debug;
00073         
00075         ldns_rdf *_domain; 
00076 
00078         ldns_rdf **_searchlist;
00079 
00081         size_t _searchlist_count;
00082 
00084         uint8_t _retry;
00086         uint8_t _retrans;
00087 
00089         bool _dnssec;
00091         bool _dnssec_cd;
00093         bool _usevc;
00095         bool _igntc;
00097         uint8_t _ip6;
00099         bool _defnames;
00101         bool _dnsrch;
00103         struct timeval _timeout;
00105         bool _fail;
00107         bool _random;
00109         int _socket;
00113         int _axfr_soa_count;
00114         /* when axfring we get complete packets from the server
00115            but we want to give the caller 1 rr at a time, so
00116            keep the current pkt */
00118         ldns_pkt *_cur_axfr_pkt;
00120         uint16_t _axfr_i;
00121         /* EDNS0 available buffer size */
00122         uint16_t _edns_udp_size;
00123         
00124         /* Optional tsig key for signing queries,
00125         outgoing messages are signed if and only if both are set
00126         */
00128         char *_tsig_keyname;
00130         char *_tsig_keydata;
00132         char *_tsig_algorithm;
00133 };
00134 typedef struct ldns_struct_resolver ldns_resolver;
00135 
00136 /* prototypes */
00137 /* read access functions */
00138 
00144 uint16_t ldns_resolver_port(const ldns_resolver *r);
00145 
00151 bool ldns_resolver_recursive(const ldns_resolver *r);
00152 
00158 bool ldns_resolver_debug(const ldns_resolver *r);
00159 
00165 uint8_t ldns_resolver_retry(const ldns_resolver *r);
00166 
00172 uint8_t ldns_resolver_retrans(const ldns_resolver *r);
00173 
00179 uint8_t ldns_resolver_ip6(const ldns_resolver *r);
00180 
00186 uint16_t ldns_resolver_edns_udp_size(const ldns_resolver *r);
00192 bool ldns_resolver_usevc(const ldns_resolver *r);
00198 bool ldns_resolver_fail(const ldns_resolver *r);
00204 bool ldns_resolver_dnssec(const ldns_resolver *r);
00210 bool ldns_resolver_dnssec_cd(const ldns_resolver *r);
00216 bool ldns_resolver_igntc(const ldns_resolver *r);
00222 bool ldns_resolver_random(const ldns_resolver *r);
00228 size_t ldns_resolver_nameserver_count(const ldns_resolver *r);
00234 ldns_rdf *ldns_resolver_domain(const ldns_resolver *r);
00240 struct timeval ldns_resolver_timeout(const ldns_resolver *r);
00246 ldns_rdf** ldns_resolver_searchlist(const ldns_resolver *r);
00252 ldns_rdf** ldns_resolver_nameservers(const ldns_resolver *r);
00259 size_t * ldns_resolver_rtt(const ldns_resolver *r);
00266 size_t ldns_resolver_nameserver_rtt(const ldns_resolver *r, size_t pos);
00272 char *ldns_resolver_tsig_keyname(const ldns_resolver *r);
00278 char *ldns_resolver_tsig_algorithm(const ldns_resolver *r);
00284 char *ldns_resolver_tsig_keydata(const ldns_resolver *r);
00290 ldns_rdf* ldns_resolver_pop_nameserver(ldns_resolver *r);
00291 
00297 size_t ldns_resolver_searchlist_count(const ldns_resolver *r);
00298 
00299 /* write access function */
00305 void ldns_resolver_set_port(ldns_resolver *r, uint16_t p);
00306 
00312 void ldns_resolver_set_recursive(ldns_resolver *r, bool b);
00313 
00319 void ldns_resolver_set_debug(ldns_resolver *r, bool b);
00320 
00325 void ldns_resolver_incr_nameserver_count(ldns_resolver *r);
00326 
00331 void ldns_resolver_dec_nameserver_count(ldns_resolver *r);
00332 
00339 void ldns_resolver_set_nameserver_rrlist(ldns_resolver *r, ldns_rr_list *ns);
00340 
00346 void ldns_resolver_set_nameserver_count(ldns_resolver *r, size_t c);
00347 
00353 void ldns_resolver_set_nameservers(ldns_resolver *r, ldns_rdf **rd);
00354 
00361 void ldns_resolver_set_domain(ldns_resolver *r, ldns_rdf *rd);
00362 
00368 void ldns_resolver_set_timeout(ldns_resolver *r, struct timeval timeout);
00369 
00375 void ldns_resolver_push_searchlist(ldns_resolver *r, ldns_rdf *rd);
00376 
00382 void ldns_resolver_set_defnames(ldns_resolver *r, bool b);
00383 
00389 void ldns_resolver_set_usevc(ldns_resolver *r, bool b);
00390 
00396 void ldns_resolver_set_dnsrch(ldns_resolver *r, bool b);
00397 
00403 void ldns_resolver_set_dnssec(ldns_resolver *r, bool b);
00404 
00410 void ldns_resolver_set_dnssec_cd(ldns_resolver *r, bool b);
00416 void ldns_resolver_set_retrans(ldns_resolver *r, uint8_t re);
00417 
00423 void ldns_resolver_set_retry(ldns_resolver *r, uint8_t re);
00424 
00430 void ldns_resolver_set_ip6(ldns_resolver *r, uint8_t i);
00431 
00437 void ldns_resolver_set_fail(ldns_resolver *r, bool b);
00438 
00444 void ldns_resolver_set_igntc(ldns_resolver *r, bool b);
00445 
00451 void ldns_resolver_set_edns_udp_size(ldns_resolver *r, uint16_t s);
00452 
00458 void ldns_resolver_set_tsig_keyname(ldns_resolver *r, char *tsig_keyname);
00459 
00465 void ldns_resolver_set_tsig_algorithm(ldns_resolver *r, char *tsig_algorithm);
00466 
00472 void ldns_resolver_set_tsig_keydata(ldns_resolver *r, char *tsig_keydata);
00473 
00480 void ldns_resolver_set_rtt(ldns_resolver *r, size_t *rtt);
00481 
00489 void ldns_resolver_set_nameserver_rtt(ldns_resolver *r, size_t pos, size_t value);
00490 
00496 void ldns_resolver_set_random(ldns_resolver *r, bool b);
00497 
00505 ldns_status ldns_resolver_push_nameserver(ldns_resolver *r, ldns_rdf *n);
00506 
00514 ldns_status ldns_resolver_push_nameserver_rr(ldns_resolver *r, ldns_rr *rr);
00515 
00522 ldns_status ldns_resolver_push_nameserver_rr_list(ldns_resolver *r, ldns_rr_list *rrlist);
00523 
00535 ldns_pkt* ldns_resolver_search(const ldns_resolver *r, const ldns_rdf *rdf, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
00536 
00547 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);
00548 
00559 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);
00560 
00567 ldns_status ldns_resolver_send_pkt(ldns_pkt **answer, const ldns_resolver *r, const ldns_pkt *query_pkt);
00568 
00579 ldns_pkt* ldns_resolver_query(const ldns_resolver *r, const ldns_rdf *name, ldns_rr_type type, ldns_rr_class class, uint16_t flags);
00580 
00581 
00586 ldns_resolver* ldns_resolver_new(void);
00587 
00595 ldns_status ldns_resolver_new_frm_fp(ldns_resolver **r, FILE *fp);
00596 
00605 ldns_status ldns_resolver_new_frm_fp_l(ldns_resolver **r, FILE *fp, int *line_nr);
00606 
00615 ldns_status ldns_resolver_new_frm_file(ldns_resolver **r, const char *filename);
00616 
00621 void ldns_resolver_free(ldns_resolver *res);
00622 
00627 void ldns_resolver_deep_free(ldns_resolver *res);
00628 
00635 ldns_rr* ldns_axfr_next(ldns_resolver *resolver);
00636 
00642 bool ldns_axfr_complete(const ldns_resolver *resolver);
00643 
00650 ldns_pkt *ldns_axfr_last_pkt(const ldns_resolver *res);
00651 
00656 void ldns_resolver_nameservers_randomize(ldns_resolver *r);
00657 
00658 #endif  /* LDNS_RESOLVER_H */

Generated on Wed Feb 20 20:24:22 2008 for ldns by  doxygen 1.5.5