From: Miek Gieben Date: Tue, 25 Jan 2005 14:06:16 +0000 (+0000) Subject: HUGE cleanup of the resolver X-Git-Tag: release-0.50~530 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6ccf86c32d02113c2b28c137eb51fa71fffff507;p=thirdparty%2Fldns.git HUGE cleanup of the resolver --- diff --git a/ldns/rdata.h b/ldns/rdata.h index fcec5c45..a1db9a85 100644 --- a/ldns/rdata.h +++ b/ldns/rdata.h @@ -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 */ diff --git a/ldns/resolver.h b/ldns/resolver.h index 550dedd4..7db64ef2 100644 --- a/ldns/resolver.h +++ b/ldns/resolver.h @@ -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 2d7712f7..0b5bf442 100644 --- 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 diff --git a/resolver.c b/resolver.c index 1c26bab8..533b7ab4 100644 --- a/resolver.c +++ b/resolver.c @@ -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; diff --git a/run-test4.c b/run-test4.c index f77ca083..febd1e71 100644 --- a/run-test4.c +++ b/run-test4.c @@ -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 */