From: Miek Gieben Date: Mon, 14 Mar 2005 12:51:01 +0000 (+0000) Subject: implemented retry. Next: retrans X-Git-Tag: release-0.50~258 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dde2c92cd25aa9f66a10ffc84a8bb39eb0835fde;p=thirdparty%2Fldns.git implemented retry. Next: retrans does anybody know how to sleep inside a library? --- diff --git a/ldns/resolver.h b/ldns/resolver.h index 99166180..b5ae041b 100644 --- a/ldns/resolver.h +++ b/ldns/resolver.h @@ -64,13 +64,12 @@ struct ldns_struct_resolver bool _usevc; /** \brief Wether to ignore the tc bit */ bool _igntc; - /** \brief Wether to use ip6, 0->ip4, 1->ip6 */ - bool _ip6; + /** \brief Wether to use ip6, 0->does not matter, 1 ipv4, 2->ip6 */ + uint8_t _ip6; /** \brief if true append the default domain */ bool _defnames; /** \brief if true apply the search list */ bool _dnsrch; - /** timeout for socket connections */ struct timeval _timeout; @@ -117,6 +116,7 @@ ldns_status ldns_resolver_push_nameserver_rr_list(ldns_resolver *, ldns_rr_list uint8_t ldns_resolver_retry(ldns_resolver *); uint8_t ldns_resolver_retrans(ldns_resolver *); +uint8_t ldns_resolver_ip6(ldns_resolver *); ldns_pkt * ldns_resolver_bgsend(); ldns_pkt * ldns_resolver_send(ldns_resolver *, ldns_rdf*, ldns_rr_type, ldns_rr_class, uint16_t); @@ -132,6 +132,7 @@ void ldns_resolver_set_dnsrch(ldns_resolver *, bool); void ldns_resolver_set_dnssec(ldns_resolver *, bool); void ldns_resolver_set_retrans(ldns_resolver *, uint8_t); void ldns_resolver_set_retry(ldns_resolver *, uint8_t); +void ldns_resolver_set_ip6(ldns_resolver *, uint8_t); /** * Prepares the resolver for an axfr query diff --git a/resolver.c b/resolver.c index db225262..33474526 100644 --- a/resolver.c +++ b/resolver.c @@ -50,7 +50,7 @@ ldns_resolver_retrans(ldns_resolver *r) return r->_retrans; } -bool +uint8_t ldns_resolver_ip6(ldns_resolver *r) { return r->_ip6; @@ -279,6 +279,12 @@ ldns_resolver_set_debug(ldns_resolver *r, bool d) r->_debug = d; } +void +ldns_resolver_set_ip6(ldns_resolver *r, uint8_t ip6) +{ + r->_ip6 = ip6; +} + void ldns_resolver_set_searchlist_count(ldns_resolver *r, size_t c) { @@ -394,6 +400,8 @@ ldns_resolver_new(void) ldns_resolver_set_port(r, LDNS_PORT); ldns_resolver_set_domain(r, NULL); ldns_resolver_set_defnames(r, false); + ldns_resolver_set_retry(r, 4); + ldns_resolver_set_retrans(r, 5); r->_timeout.tv_sec = LDNS_DEFAULT_TIMEOUT_SEC; r->_timeout.tv_usec = LDNS_DEFAULT_TIMEOUT_USEC; @@ -594,9 +602,12 @@ ldns_resolver_send(ldns_resolver *r, ldns_rdf *name, ldns_rr_type type, ldns_rr_ ldns_pkt *query_pkt; ldns_pkt *answer_pkt; uint16_t id; + uint8_t retries; assert(r != NULL); assert(name != NULL); + + answer_pkt = NULL; /* do all the preprocessing here, then fire of an query to * the network */ @@ -633,7 +644,12 @@ ldns_resolver_send(ldns_resolver *r, ldns_rdf *name, ldns_rr_type type, ldns_rr_ ldns_pkt_set_id(query_pkt, id); /* return NULL on error */ - answer_pkt = ldns_send(r, query_pkt); + for (retries = ldns_resolver_retry(r); retries > 0; retries--) { + answer_pkt = ldns_send(r, query_pkt); + if (answer_pkt) { + break; + } + } ldns_pkt_free(query_pkt); diff --git a/util.c b/util.c index 555d6ae6..0a053e1e 100644 --- a/util.c +++ b/util.c @@ -160,11 +160,11 @@ int_to_hexdigit(int i) * It defaults to '\n\t ' (newline, tab, space); */ int -readword(char *word, FILE *from, char *del, size_t lim) +readword(char *word, FILE *from, const char *del, size_t lim) { int c; char *l; - char *d; + const char *d; const char *delim; int i; diff --git a/util.h b/util.h index 11aa71ea..fae021f3 100644 --- a/util.h +++ b/util.h @@ -165,6 +165,6 @@ char int_to_hexdigit(int ch); /** * return a word from a stream */ -int readword(char *, FILE *, char *, size_t); +int readword(char *, FILE *, const char *, size_t); #endif /* !_UTIL_H */