]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
implemented retry. Next: retrans
authorMiek Gieben <miekg@NLnetLabs.nl>
Mon, 14 Mar 2005 12:51:01 +0000 (12:51 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Mon, 14 Mar 2005 12:51:01 +0000 (12:51 +0000)
does anybody know how to sleep inside a library?

ldns/resolver.h
resolver.c
util.c
util.h

index 991661802290c74450b36416893b3c2b0bec9f09..b5ae041b367a87927101a2c53271e79241fd8b29 100644 (file)
@@ -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
index db2252628a96878fccf722a165832548d664c6fd..33474526e17837aebc8aabd12521cf360e59b977 100644 (file)
@@ -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 555d6ae6fcd24ebc69176ead5b61c060bac28db3..0a053e1eef98d91e67b45609043619bfeffb0792 100644 (file)
--- 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 11aa71ea555d41c5834d33f4d62cd9f1fc4d9f09..fae021f3467c972ddc8f101b7c414340b5bb5c6d 100644 (file)
--- 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 */