date : 0.71: ldns-team
* License change: ldns is now BSD licensed
+ * Networking code cleanup, added server udp/tcp support
+ * Zonefile parsing was added
+ * Lua binding were created
28 Jul 2005: 0.70: ldns-team
* [func] ldns_pkt_get_section now returns copies from the rrlists
* returns the native sockaddr representation from the rdf.
* \param[in] rd the ldns_rdf to operate on
* \param[in] port what port to use. 0 means; use default (53)
+ * \param[out] size what is the size of the sockaddr_storage
* \return struct sockaddr* the address in the format so other
* functions can use it (sendto)
*/
-struct sockaddr_storage * ldns_rdf2native_sockaddr_storage(ldns_rdf *rd, uint16_t port);
+struct sockaddr_storage * ldns_rdf2native_sockaddr_storage(ldns_rdf *rd, uint16_t port, size_t *size);
/* misc */
/**
{
int sockfd = (int)lua_tonumber(L, 1);
ldns_buffer *pktbuf = (ldns_buffer*) lua_touserdata(L, 2);
+ struct sockaddr_storage *sock = (struct sockaddr_storge*) lua_touserdata(L, 2);
size_t bytes;
ldns_rdf *temp;
struct sockaddr_storage *ns;
- socklen_t ns_len;
+ size_t ns_len;
struct timeval tv_s;
struct timeval tv_e;
for (i = 0; i < ldns_resolver_nameserver_count(r); i++) {
ns = ldns_rdf2native_sockaddr_storage(ns_rand_array[i],
- ldns_resolver_port(r));
+ ldns_resolver_port(r), &ns_len);
if ((ns->ss_family == AF_INET &&
ldns_resolver_ip6(r) == LDNS_RESOLV_INET6)
continue;
}
- /* setup some family specific stuff */
- switch(ns->ss_family) {
- case AF_INET:
- ns_len = (socklen_t)sizeof(struct sockaddr_in);
- break;
- case AF_INET6:
- ns_len = (socklen_t)sizeof(struct sockaddr_in6);
- break;
- default:
- LDNS_FREE(ns);
- ldns_buffer_free(qb);
- return LDNS_STATUS_ERR;
- }
-
gettimeofday(&tv_s, NULL);
/* query */
if (1 == ldns_resolver_usevc(r)) {
/* do err handling here ? */
- (void)ldns_send_tcp(&reply_bytes, qb, ns, ns_len, ldns_resolver_timeout(r), &reply_size);
+ (void)ldns_send_tcp(&reply_bytes, qb, ns, (socklen_t)ns_len, ldns_resolver_timeout(r), &reply_size);
} else {
/* udp here, please */
- (void)ldns_send_udp(&reply_bytes, qb, ns, ns_len, ldns_resolver_timeout(r), &reply_size);
+ (void)ldns_send_udp(&reply_bytes, qb, ns, (socklen_t)ns_len, ldns_resolver_timeout(r), &reply_size);
}
/* obey the fail directive */
}
struct sockaddr_storage *
-ldns_rdf2native_sockaddr_storage(ldns_rdf *rd, uint16_t port)
+ldns_rdf2native_sockaddr_storage(ldns_rdf *rd, uint16_t port, size_t *size)
{
struct sockaddr_storage *data;
struct sockaddr_in *data_in;
data_in = (struct sockaddr_in*) data;
data_in->sin_port = htons(port);
memcpy(&(data_in->sin_addr), ldns_rdf_data(rd), ldns_rdf_size(rd));
+ *size = sizeof(struct sockaddr_in);
return data;
case LDNS_RDF_TYPE_AAAA:
data->ss_family = AF_INET6;
data_in6 = (struct sockaddr_in6*) data;
data_in6->sin6_port = htons(port);
-
memcpy(&data_in6->sin6_addr, ldns_rdf_data(rd), ldns_rdf_size(rd));
+ *size = sizeof(struct sockaddr_in6);
return data;
default:
LDNS_FREE(data);
ldns_buffer *query_wire;
struct sockaddr_storage *ns;
- socklen_t ns_len = 0;
+ size_t ns_len = 0;
ldns_status status;
if (!resolver || ldns_resolver_nameserver_count(resolver) < 1) {
}
/* For AXFR, we have to make the connection ourselves */
ns = ldns_rdf2native_sockaddr_storage(resolver->_nameservers[0],
- ldns_resolver_port(resolver));
+ ldns_resolver_port(resolver), &ns_len);
- /* Determine the address size.
- */
- switch(ns->ss_family) {
- case AF_INET:
- ns_len = (socklen_t)sizeof(struct sockaddr_in);
- break;
- case AF_INET6:
- ns_len = (socklen_t)sizeof(struct sockaddr_in6);
- break;
- default:
- dprintf("%s", "unkown inet family\n");
- LDNS_FREE(ns);
- return LDNS_STATUS_UNKNOWN_INET;
- }
-
- resolver->_socket = ldns_tcp_connect(ns, ns_len, ldns_resolver_timeout(resolver));
+ 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);