]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
implement fail for the resolver
authorMiek Gieben <miekg@NLnetLabs.nl>
Mon, 14 Mar 2005 13:09:40 +0000 (13:09 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Mon, 14 Mar 2005 13:09:40 +0000 (13:09 +0000)
ldns/resolver.h
net.c
resolver.c

index b5ae041b367a87927101a2c53271e79241fd8b29..eab8836308ca25a07f4a369d99c5076a27f619d2 100644 (file)
@@ -72,7 +72,8 @@ struct ldns_struct_resolver
        bool _dnsrch;
        /** timeout for socket connections */
        struct timeval _timeout;
-
+       /** \brief only try the first nameserver */
+       bool _fail;
        /** keep some things for axfr */
        int _socket;
        int _axfr_soa_count;
@@ -90,6 +91,7 @@ uint16_t ldns_resolver_port(ldns_resolver *);
 bool ldns_resolver_recursive(ldns_resolver *);
 bool ldns_resolver_debug(ldns_resolver *);
 bool ldns_resolver_usevc(ldns_resolver *);
+bool ldns_resolver_fail(ldns_resolver *);
 
 size_t ldns_resolver_nameserver_count(ldns_resolver *);
 
@@ -133,6 +135,7 @@ 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);
+void ldns_resolver_set_fail(ldns_resolver *, bool);
 
 /**
  * Prepares the resolver for an axfr query
diff --git a/net.c b/net.c
index e9f7aab5549620ad318d83e520a35dbd9be06aa4..69cbba416870242d7bb8ac8585c03051ab617a8d 100644 (file)
--- a/net.c
+++ b/net.c
@@ -103,7 +103,14 @@ ldns_send(ldns_resolver *r, ldns_pkt *query_pkt)
                        ldns_pkt_set_answerfrom(reply, ns_array[i]);
                        ldns_pkt_set_when(reply,  ctime((time_t*)&tv_s.tv_sec));
                        break;
+               } else {
+                       if (ldns_resolver_fail(r)) {
+                               /* if fail is set bail out, after the first
+                                * one */
+                               break;
+                       }
                }
+
        }
        ldns_buffer_free(qb);
        return reply;
index 33474526e17837aebc8aabd12521cf360e59b977..8fafcdafc21c2f3bc1682b7d52cb679cc66045b8 100644 (file)
@@ -74,6 +74,12 @@ ldns_resolver_dnsrch(ldns_resolver *r)
        return r->_dnsrch;
 }
 
+bool
+ldns_resolver_fail(ldns_resolver *r)
+{
+       return r->_fail;
+}
+
 bool
 ldns_resolver_defnames(ldns_resolver *r)
 {
@@ -285,6 +291,12 @@ ldns_resolver_set_ip6(ldns_resolver *r, uint8_t ip6)
        r->_ip6 = ip6;
 }
 
+void
+ldns_resolver_set_fail(ldns_resolver *r, bool f)
+{
+       r->_fail =f;
+}
+
 void
 ldns_resolver_set_searchlist_count(ldns_resolver *r, size_t c)
 {
@@ -402,6 +414,7 @@ ldns_resolver_new(void)
        ldns_resolver_set_defnames(r, false);
        ldns_resolver_set_retry(r, 4);
        ldns_resolver_set_retrans(r, 5);
+       ldns_resolver_set_fail(r, false);
 
        r->_timeout.tv_sec = LDNS_DEFAULT_TIMEOUT_SEC;
        r->_timeout.tv_usec = LDNS_DEFAULT_TIMEOUT_USEC;