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, 2004, 2005
00009  *
00010  * See the file LICENSE for the license
00011  */
00012 
00013 #ifndef _LDNS_RESOLVER_H
00014 #define _LDNS_RESOLVER_H
00015 
00016 #include <ldns/error.h>
00017 #include <ldns/common.h>
00018 #include <ldns/rr.h>
00019 #include <ldns/rdata.h>
00020 #include <ldns/packet.h>
00021 #include <sys/time.h>
00022 
00024 #define LDNS_RESOLV_CONF        "/etc/resolv.conf"
00025 #define LDNS_RESOLV_HOSTS       "/etc/hosts"
00026 
00027 #define LDNS_RESOLV_KEYWORD     -1      
00028 #define LDNS_RESOLV_DEFDOMAIN   0
00029 #define LDNS_RESOLV_NAMESERVER  1
00030 #define LDNS_RESOLV_SEARCH      2
00031 
00032 #define LDNS_RESOLV_KEYWORDS    3
00033 
00034 #define LDNS_RESOLV_INETANY             0
00035 #define LDNS_RESOLV_INET                1
00036 #define LDNS_RESOLV_INET6               2
00037 
00043 struct ldns_struct_resolver
00044 {
00046         uint16_t _port;
00047 
00049         ldns_rdf **_nameservers; 
00050         size_t _nameserver_count; /* how many do we have */
00051 
00053         bool _recursive;
00054 
00056         bool _debug;
00057         
00059         ldns_rdf *_domain; 
00060 
00062         ldns_rdf **_searchlist;
00063         size_t _searchlist_count;
00064 
00066         uint8_t _retry;
00068         uint8_t _retrans;
00070         bool _dnssec;
00072         bool _dnssec_cd;
00074         bool _usevc;
00076         bool _igntc;
00078         uint8_t _ip6;
00080         bool _defnames;
00082         bool _dnsrch;
00084         struct timeval _timeout;
00086         bool _fail;
00088         bool _random;
00090         int _socket;
00091         int _axfr_soa_count;
00092         /* when axfring we get complete packets from the server
00093            but we want to give the caller 1 rr at a time, so
00094            keep the current pkt */
00095         ldns_pkt *_cur_axfr_pkt;
00096         uint16_t _axfr_i;
00097         /* EDNS0 stuff only bufsize atm */
00098         uint16_t _edns_udp_size;
00099         
00100         /* Optional tsig key for signing queries,
00101         outgoing messages are signed if and only if both are set
00102         */
00103         char *_tsig_keyname;
00104         char *_tsig_keydata;
00105         char *_tsig_algorithm;
00106 };
00107 typedef struct ldns_struct_resolver ldns_resolver;
00108 
00109 /* prototypes */
00110 /* read access functions */
00111 uint16_t ldns_resolver_port(ldns_resolver *r);
00112 uint8_t ldns_resolver_retry(ldns_resolver *r);
00113 uint8_t ldns_resolver_retrans(ldns_resolver *r);
00114 uint8_t ldns_resolver_ip6(ldns_resolver *r);
00115 uint16_t ldns_resolver_edns_udp_size(ldns_resolver *r);
00116 bool ldns_resolver_recursive(ldns_resolver *r);
00117 bool ldns_resolver_debug(ldns_resolver *r);
00118 bool ldns_resolver_usevc(ldns_resolver *r);
00119 bool ldns_resolver_fail(ldns_resolver *r);
00120 bool ldns_resolver_dnssec(ldns_resolver *r);
00121 bool ldns_resolver_dnssec_cd(ldns_resolver *r);
00122 bool ldns_resolver_igntc(ldns_resolver *r);
00123 bool ldns_resolver_random(ldns_resolver *r);
00124 size_t ldns_resolver_nameserver_count(ldns_resolver *r);
00125 ldns_rdf *ldns_resolver_domain(ldns_resolver *r);
00126 struct timeval ldns_resolver_timeout(ldns_resolver *r);
00127 ldns_rdf** ldns_resolver_searchlist(ldns_resolver *r);
00128 ldns_rdf** ldns_resolver_nameservers(ldns_resolver *r);
00129 char *ldns_resolver_tsig_keyname(ldns_resolver *r);
00130 char *ldns_resolver_tsig_algorithm(ldns_resolver *r);
00131 char *ldns_resolver_tsig_keydata(ldns_resolver *r);
00137 ldns_rdf* ldns_resolver_pop_nameserver(ldns_resolver *r);
00138 
00139 /* write access function */
00140 void ldns_resolver_set_port(ldns_resolver *r, uint16_t);
00141 void ldns_resolver_set_recursive(ldns_resolver *r, bool b);
00142 void ldns_resolver_set_debug(ldns_resolver *r, bool b);
00143 void ldns_resolver_incr_nameserver_count(ldns_resolver *r);
00144 void ldns_resolver_dec_nameserver_count(ldns_resolver *r);
00145 void ldns_resolver_set_nameserver_count(ldns_resolver *r, size_t c);
00146 void ldns_resolver_set_nameservers(ldns_resolver *r, ldns_rdf **rd);
00147 void ldns_resolver_set_domain(ldns_resolver *r, ldns_rdf *rd);
00148 void ldns_resolver_set_timeout(ldns_resolver *r, struct timeval timeout);
00149 void ldns_resolver_push_searchlist(ldns_resolver *r, ldns_rdf *rd);
00150 void ldns_resolver_set_defnames(ldns_resolver *r, bool b);
00151 void ldns_resolver_set_usevc(ldns_resolver *r, bool b);
00152 void ldns_resolver_set_dnsrch(ldns_resolver *r, bool b);
00153 void ldns_resolver_set_dnssec(ldns_resolver *r, bool b);
00154 void ldns_resolver_set_dnssec_cd(ldns_resolver *r, bool b);
00155 void ldns_resolver_set_retrans(ldns_resolver *r, uint8_t re);
00156 void ldns_resolver_set_retry(ldns_resolver *r, uint8_t re);
00157 void ldns_resolver_set_ip6(ldns_resolver *r, uint8_t i);
00158 void ldns_resolver_set_fail(ldns_resolver *r, bool b);
00159 void ldns_resolver_set_igntc(ldns_resolver *r, bool b);
00160 void ldns_resolver_set_edns_udp_size(ldns_resolver *r, uint16_t s);
00161 void ldns_resolver_set_tsig_keyname(ldns_resolver *r, char *tsig_keyname);
00162 void ldns_resolver_set_tsig_algorithm(ldns_resolver *r, char *tsig_algorithm);
00163 void ldns_resolver_set_tsig_keydata(ldns_resolver *r, char *tsig_keydata);
00164 void ldns_resolver_set_random(ldns_resolver *r, bool b);
00165 
00173 ldns_status ldns_resolver_push_nameserver(ldns_resolver *r, ldns_rdf *n);
00174 
00182 ldns_status ldns_resolver_push_nameserver_rr(ldns_resolver *r, ldns_rr *rr);
00183 
00190 ldns_status ldns_resolver_push_nameserver_rr_list(ldns_resolver *r, ldns_rr_list *rrlist);
00191 
00196 int ldns_resolver_bgsend();
00197 
00198 /* no comment found */
00199 ldns_pkt* ldns_resolver_search(ldns_resolver *r, ldns_rdf *rdf, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
00200 
00211 ldns_status ldns_resolver_send(ldns_pkt **answer, ldns_resolver *r, ldns_rdf *name, ldns_rr_type t, ldns_rr_class c, uint16_t flags);
00212 
00219 ldns_status ldns_resolver_send_pkt(ldns_pkt **answer, ldns_resolver *r, ldns_pkt *query_pkt);
00220 
00231 ldns_pkt* ldns_resolver_query(ldns_resolver *r, ldns_rdf *name, ldns_rr_type type, ldns_rr_class class, uint16_t flags);
00232 
00233 
00238 ldns_resolver* ldns_resolver_new(void);
00239 
00246 ldns_resolver* ldns_resolver_new_frm_fp(FILE *fp);
00247 
00255 ldns_resolver* ldns_resolver_new_frm_fp_l(FILE *fp, int *line_nr);
00256 
00264 /* keyword recognized:                          
00265  * nameserver                   
00266  * domain                       
00267  */                     
00268 ldns_resolver* ldns_resolver_new_frm_file(const char *filename);
00269 
00274 void ldns_resolver_free(ldns_resolver *res);
00275 
00280 void ldns_resolver_deep_free(ldns_resolver *res);
00281 
00290 ldns_status ldns_axfr_start(ldns_resolver *resolver, ldns_rdf *domain, ldns_rr_class c);
00291 
00298 ldns_rr* ldns_axfr_next(ldns_resolver *resolver);
00299 
00305 bool ldns_axfr_complete(ldns_resolver *resolver);
00306 
00313 ldns_pkt *ldns_axfr_last_pkt(ldns_resolver *res);
00314 
00315 #endif  /* !_LDNS_RESOLVER_H */

Generated on Fri Sep 14 20:08:42 2007 for ldns by  doxygen 1.5.1