From: Miek Gieben Date: Thu, 8 Dec 2005 10:17:03 +0000 (+0000) Subject: all network code should be in net.c/net.h X-Git-Tag: release-1.1.0~542 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ef0bcc32ec6e7fcf9e2dbab9aca076cbef6be35;p=thirdparty%2Fldns.git all network code should be in net.c/net.h --- diff --git a/ldns/net.h b/ldns/net.h index 43faa085..c0961876 100644 --- a/ldns/net.h +++ b/ldns/net.h @@ -147,4 +147,14 @@ struct sockaddr_storage * ldns_rdf2native_sockaddr_storage(const ldns_rdf *rd, u */ ldns_rdf * ldns_sockaddr_storage2rdf(struct sockaddr_storage *sock, uint16_t *port); +/** + * Prepares the resolver for an axfr query + * The query is sent and the answers can be read with ldns_axfr_next + * \param[in] resolver the resolver to use + * \param[in] domain the domain to exfr + * \param[in] c the class to use + * \return ldns_status the status of the transfer + */ +ldns_status ldns_axfr_start(ldns_resolver *resolver, ldns_rdf *domain, ldns_rr_class c); + #endif /* !_LDNS_NET_H */ diff --git a/ldns/resolver.h b/ldns/resolver.h index be84c79c..f599c721 100644 --- a/ldns/resolver.h +++ b/ldns/resolver.h @@ -288,16 +288,6 @@ void ldns_resolver_free(ldns_resolver *res); */ void ldns_resolver_deep_free(ldns_resolver *res); -/** - * Prepares the resolver for an axfr query - * The query is sent and the answers can be read with ldns_axfr_next - * \param[in] resolver the resolver to use - * \param[in] domain the domain to exfr - * \param[in] c the class to use - * \return ldns_status the status of the transfer - */ -ldns_status ldns_axfr_start(ldns_resolver *resolver, ldns_rdf *domain, ldns_rr_class c); - /** * get the next stream of RRs in a AXFR * \param[in] resolver the resolver to use. First ldns_axfr_start() must be diff --git a/net.c b/net.c index e7371e65..8583765f 100644 --- a/net.c +++ b/net.c @@ -454,6 +454,7 @@ ldns_tcp_send(uint8_t **result, ldns_buffer *qbin, const struct sockaddr_storag * all networking code is contained in one file */ +/* code from rdata.c */ struct sockaddr_storage * ldns_rdf2native_sockaddr_storage(const ldns_rdf *rd, uint16_t port, size_t *size) { @@ -490,6 +491,7 @@ ldns_rdf2native_sockaddr_storage(const ldns_rdf *rd, uint16_t port, size_t *size } } +/* code from rdata.c */ /* the other way around - for lua-ldns */ ldns_rdf * ldns_sockaddr_storage2rdf(struct sockaddr_storage *sock, uint16_t *port) @@ -525,3 +527,67 @@ ldns_sockaddr_storage2rdf(struct sockaddr_storage *sock, uint16_t *port) } return addr; } + +/* code from resolver.c */ +ldns_status +ldns_axfr_start(ldns_resolver *resolver, + ldns_rdf *domain, + ldns_rr_class class) +{ + ldns_pkt *query; + ldns_buffer *query_wire; + + struct sockaddr_storage *ns; + size_t ns_len = 0; + ldns_status status; + + if (!resolver || ldns_resolver_nameserver_count(resolver) < 1) { + return LDNS_STATUS_ERR; + } + + query = ldns_pkt_query_new(ldns_rdf_clone(domain), + LDNS_RR_TYPE_AXFR, + class, + 0); + + if (!query) { + return LDNS_STATUS_ADDRESS_ERR; + } + /* For AXFR, we have to make the connection ourselves */ + ns = ldns_rdf2native_sockaddr_storage(resolver->_nameservers[0], + ldns_resolver_port(resolver), &ns_len); + + resolver->_socket = ldns_tcp_connect(ns, (socklen_t)ns_len, ldns_resolver_timeout(resolver)); + if (resolver->_socket == 0) { + ldns_pkt_free(query); + LDNS_FREE(ns); + return LDNS_STATUS_NETWORK_ERR; + } + + /* Convert the query to a buffer * Is this necessary? + */ + query_wire = ldns_buffer_new(LDNS_MAX_PACKETLEN); + status = ldns_pkt2buffer_wire(query_wire, query); + if (status != LDNS_STATUS_OK) { + ldns_pkt_free(query); + LDNS_FREE(ns); + return status; + } + /* Send the query */ + if (ldns_tcp_send_query(query_wire, resolver->_socket, ns, (socklen_t)ns_len) == 0) { + ldns_pkt_free(query); + ldns_buffer_free(query_wire); + LDNS_FREE(ns); + return LDNS_STATUS_NETWORK_ERR; + } + + ldns_pkt_free(query); + ldns_buffer_free(query_wire); + LDNS_FREE(ns); + + /* + * The AXFR is done once the second SOA record is sent + */ + resolver->_axfr_soa_count = 0; + return LDNS_STATUS_OK; +} diff --git a/resolver.c b/resolver.c index 026eb3a2..03ce00a7 100644 --- a/resolver.c +++ b/resolver.c @@ -13,13 +13,11 @@ #include #include - #include /* Access function for reading * and setting the different Resolver - * options - */ + * options */ /* read */ uint16_t @@ -837,73 +835,6 @@ ldns_resolver_bgsend() return 0; } -ldns_status -ldns_axfr_start(ldns_resolver *resolver, - ldns_rdf *domain, - ldns_rr_class class) -{ - ldns_pkt *query; - ldns_buffer *query_wire; - - struct sockaddr_storage *ns; - size_t ns_len = 0; - ldns_status status; - - if (!resolver || ldns_resolver_nameserver_count(resolver) < 1) { - return LDNS_STATUS_ERR; - } - - /* Create the query */ - query = ldns_pkt_query_new(ldns_rdf_clone(domain), - LDNS_RR_TYPE_AXFR, - class, - 0); - - - if (!query) { - return LDNS_STATUS_ADDRESS_ERR; - } - /* For AXFR, we have to make the connection ourselves */ - ns = ldns_rdf2native_sockaddr_storage(resolver->_nameservers[0], - ldns_resolver_port(resolver), &ns_len); - - resolver->_socket = ldns_tcp_connect(ns, (socklen_t)ns_len, ldns_resolver_timeout(resolver)); - if (resolver->_socket == 0) { - ldns_pkt_free(query); - LDNS_FREE(ns); - return LDNS_STATUS_NETWORK_ERR; - } - - /* Convert the query to a buffer - * Is this necessary? - */ - query_wire = ldns_buffer_new(LDNS_MAX_PACKETLEN); - status = ldns_pkt2buffer_wire(query_wire, query); - if (status != LDNS_STATUS_OK) { - ldns_pkt_free(query); - LDNS_FREE(ns); - return status; - } - - /* Send the query */ - if (ldns_tcp_send_query(query_wire, resolver->_socket, ns, (socklen_t)ns_len) == 0) { - ldns_pkt_free(query); - ldns_buffer_free(query_wire); - LDNS_FREE(ns); - return LDNS_STATUS_NETWORK_ERR; - } - - ldns_pkt_free(query); - ldns_buffer_free(query_wire); - LDNS_FREE(ns); - - /* - * The AXFR is done once the second SOA record is sent - */ - resolver->_axfr_soa_count = 0; - return LDNS_STATUS_OK; -} - ldns_rr * ldns_axfr_next(ldns_resolver *resolver) {