]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
HUGE cleanup of the resolver
authorMiek Gieben <miekg@NLnetLabs.nl>
Tue, 25 Jan 2005 14:06:16 +0000 (14:06 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Tue, 25 Jan 2005 14:06:16 +0000 (14:06 +0000)
ldns/rdata.h
ldns/resolver.h
rdata.c
resolver.c
run-test4.c

index fcec5c4522abfa8d796bed019f65c528469ac826..a1db9a85011280d4014dc288cb3269dc22d9e605 100644 (file)
@@ -112,5 +112,7 @@ ldns_rdf    *ldns_rdf_new_frm_data(uint16_t, ldns_rdf_type, void *);
 uint8_t         *ldns_rdf_data(ldns_rdf *);
 void            ldns_rdf_free(ldns_rdf *);
 void            ldns_rdf_free_data(ldns_rdf *);
+ldns_dname     *ldns_dname_new_frm_str(const char *);
+ldns_rdf       *ldns_rdf_new_frm_str(const char *, ldns_rdf_type);
 
 #endif /* !_LDNS_RDATA_H */
index 550dedd4c32ac8346bcc8a0741f1c6df5cdc3570..7db64ef2f57c440627eac921f21864aaed9160ad 100644 (file)
@@ -29,8 +29,9 @@ struct ldns_struct_resolver
        /** \brief On which port to run */
        uint16_t _port;
 
-       /** \brief List of nameservers to query */
-       ldns_rr_list *_nameservers; 
+       /** \brief List of nameservers to query (IP addresses or dname) */
+       ldns_rdf **_nameservers; 
+       uint8_t _nameserver_count; /* how many do we have */
 
        /** \brief Wether or not to be recursive */
        uint8_t _recursive;
@@ -38,12 +39,12 @@ struct ldns_struct_resolver
        /** \brief Print debug information */
        uint8_t _debug;
        
-       /* XXX both types below could be done better, mabye rr_list? */
        /** \brief Default domain to add */
-       ldns_rdf *_domain; /* LDNS_RDF_TYPE_DNAME */
+       ldns_dname *_domain; /* LDNS_RDF_TYPE_DNAME */
 
-       /** \brief Searchlist */
-       ldns_rdf *_searchlist; /* LDNS_RFD_TYPE_DNAME */
+       /** \brief Searchlist array */
+       ldns_dname **_searchlist; /* LDNS_RFD_TYPE_DNAME */
+       uint8_t _searchlist_count;
 
        /** \brief How many retries */
        uint8_t _retry;
@@ -64,22 +65,26 @@ typedef struct ldns_struct_resolver ldns_resolver;
 
 /* prototypes */
 uint16_t ldns_resolver_port(ldns_resolver *);
-ldns_rr_list * ldns_resolver_nameservers(ldns_resolver *);
+/* ldns_rr_list * ldns_resolver_nameservers(ldns_resolver *) pop>? */
 uint8_t ldns_resolver_recursive(ldns_resolver *);
 uint8_t ldns_resolver_debug(ldns_resolver *);
-ldns_rdf * ldns_resolver_domain(ldns_resolver *);
-ldns_rdf * ldns_resolver_searchlist(ldns_resolver *);
+ldns_dname * ldns_resolver_domain(ldns_resolver *);
+ldns_dname ** ldns_resolver_searchlist(ldns_resolver *);
+ldns_dname ** ldns_resolver_nameservers(ldns_resolver *);
 
 void ldns_resolver_set_port(ldns_resolver *, uint16_t);
-void ldns_resolver_set_nameservers(ldns_resolver *, ldns_rr_list *);
 void ldns_resolver_set_recursive(ldns_resolver *, uint8_t);
 void ldns_resolver_set_debug(ldns_resolver *, uint8_t);
-void ldns_resolver_set_domain(ldns_resolver *, ldns_rdf *);
-void ldns_resolver_set_searchlist(ldns_resolver *, ldns_rdf *);
+void ldns_resolver_set_domain(ldns_resolver *, ldns_dname *);
+
+ldns_status ldns_resolver_push_searchlist(ldns_resolver *, ldns_dname *);
+ldns_status ldns_resolver_push_nameserver(ldns_resolver *, ldns_rdf *);
 
 ldns_pkt * ldns_search();
 ldns_pkt * ldns_query();
 ldns_pkt * ldns_bgsend();
 ldns_pkt * ldns_send(ldns_resolver *, ldns_dname*, ldns_rr_type *, ldns_rr_class*);
 
+ldns_resolver ldns_resolver_new(void);
+
 #endif  /* !_LDNS_RESOLVER_H */
diff --git a/rdata.c b/rdata.c
index 2d7712f7b4e8f74b54248b7676c40fda492e66a3..0b5bf4429cf8df618c3e7119a04250a9e4a0f195 100644 (file)
--- a/rdata.c
+++ b/rdata.c
@@ -133,6 +133,22 @@ ldns_rdf_free(ldns_rdf *rd)
        FREE(rd);
 }
 
+/**
+ * Create a new ldns_dname from a string
+ * \param[in] str string to use
+ * \return ldns_dname*
+ */
+ldns_dname *
+ldns_dname_new_frm_str(const char *str)
+{
+       ldns_rdf *rd;
+       if (ldns_str2rdf_dname(&rd, (const uint8_t*) str) != LDNS_STATUS_OK) {
+               return NULL ;
+       }
+       return rd;
+}
+       
+
 /**
  * Create a new rdf from a string
  * \param[in] str string to use
index 1c26bab815304b830564e889baf70c8cafd66665..533b7ab4ed8cbff1feff80cab3004f865e709c0c 100644 (file)
@@ -31,12 +31,6 @@ ldns_resolver_port(ldns_resolver *r)
        return r->_port;
 }
 
-ldns_rr_list *
-ldns_resolver_nameservers(ldns_resolver *r)
-{
-       return r->_nameservers;
-}
-
 uint8_t
 ldns_resolver_recursive(ldns_resolver *r)
 {
@@ -49,13 +43,13 @@ ldns_resolver_debug(ldns_resolver *r)
        return r->_debug;
 }
 
-ldns_rdf *
+ldns_dname *
 ldns_resolver_domain(ldns_resolver *r)
 {
        return r->_domain;
 }
 
-ldns_rdf *
+ldns_dname **
 ldns_resolver_searchlist(ldns_resolver *r)
 {
        return r->_searchlist;
@@ -68,10 +62,12 @@ ldns_resolver_set_port(ldns_resolver *r, uint16_t p)
        r->_port = p;
 }
 
-void 
-ldns_resolver_set_nameservers(ldns_resolver *r, ldns_rr_list *n)
+ldns_status
+ldns_resolver_push_nameserver(ldns_resolver *r, ldns_rdf *n)
 {
-       r->_nameservers = n;
+       /* LDNS_RDF_TYPE_A | LDNS_RDF_TYPE_AAAA | LDNS_RDF_TYPE_DNAME */
+       r->_nameservers[++r->_nameserver_count] = n;
+       return LDNS_STATUS_OK;
 }
 
 void
@@ -105,22 +101,17 @@ ldns_resolver_set_debug(ldns_resolver *r, uint8_t d)
 }
 
 void 
-ldns_resolver_set_domain(ldns_resolver *r, ldns_rdf *d)
+ldns_resolver_set_domain(ldns_resolver *r, ldns_dname *d)
 {
-       if (ldns_rdf_get_type(d) != LDNS_RDF_TYPE_DNAME) {
-               return;
-       } 
        r->_domain = d;
 }
 
 /* this is not the way to go for the search list XXX */
-void 
-ldns_resolver_set_searchlist(ldns_resolver *r, ldns_rdf *s)
+ldns_status
+ldns_resolver_push_searchlist(ldns_resolver *r, ldns_dname *d)
 {
-       if (ldns_rdf_get_type(s) != LDNS_RDF_TYPE_DNAME) {
-               return;
-       } 
-       r->_searchlist = s;
+       r->_searchlist[++r->_searchlist_count] = d;
+       return LDNS_STATUS_OK;
 }
 
 uint8_t
@@ -156,6 +147,7 @@ ldns_resover_new(void)
        r = MALLOC(ldns_resolver);
 
        r->_configured = 0; /* no config has happened yet */
+       r->_searchlist_count = 0; /* no searchlist */
 
        /* no defaults are filled out (yet) */
        return r;
index f77ca083c1b1cbfc478741a7b4c30a19b54be6f9..febd1e719a6d50bc20265f899d712e0015c2e608 100644 (file)
@@ -13,7 +13,7 @@ int
 main(void)
 {       
         ldns_resolver *res;
-        ldns_rdf *default_dom;
+        ldns_dname *default_dom;
         ldns_rdf *nameserver;
         ldns_rdf *qname;
         ldns_pkt *pkt;
@@ -24,12 +24,12 @@ main(void)
                 return 1;
 
         /* create a default domain and add it */
-        default_dom = ldns_rdf_new_frm_str("miek.nl.", LDNS_RDF_TYPE_DNAME);
+        default_dom = ldns_dname_new_frm_str("miek.nl.");
         nameserver  = ldns_rdf_new_frm_str("127.0.0.1", LDNS_RDF_TYPE_A);
                 
-        if (ldns_resolver_domain(res, default_dom) != LDNS_STATUS_OK)
+        if (ldns_resolver_set_domain(res, default_dom) != LDNS_STATUS_OK)
                 return 1;
-        if (ldns_resolver_nameserver_push(res, nameserver) != LDNS_STATUS_OK)
+        if (ldns_resolver_push_nameserver(res, nameserver) != LDNS_STATUS_OK)
                 return 1;
         
         /* setup the question */