]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
rdf2sockaddr changes; give back the size. This leads to more code deletion :-)
authorMiek Gieben <miekg@NLnetLabs.nl>
Thu, 11 Aug 2005 10:46:50 +0000 (10:46 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Thu, 11 Aug 2005 10:46:50 +0000 (10:46 +0000)
Changelog
ldns/rdata.h
lua/lua-rns.c
net.c
rdata.c
resolver.c

index d116d3510160198ae12e572463a419beb19af448..2f567bdce86d9d60393c61dc7b803a4bb7834259 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -1,5 +1,8 @@
 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
index 10451cac13fa31d4218ce611be86d21f912e1e5b..956f9df1f5fae56b071d94dcf52afb7572332d9e 100644 (file)
@@ -284,10 +284,11 @@ uint32_t  ldns_str2period(const char *nptr, const char **endptr);
  * 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 */
 /**
index 05138589fd87f25d1cbf215e98e549a99c771be1..6fd1aa2ee7a74a40ecf4c943d9696f41a54808a0 100644 (file)
@@ -281,6 +281,7 @@ l_write_wire_udp(lua_State *L)
 {
        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;
        
 
diff --git a/net.c b/net.c
index f8fd59ff67cb7caa37a4883d7f0d2740dae5f685..e656e90d03a0785547f1309a4d69d31b9ccc916b 100644 (file)
--- a/net.c
+++ b/net.c
@@ -29,7 +29,7 @@ ldns_send(ldns_pkt **result, ldns_resolver *r, ldns_pkt *query_pkt)
        ldns_rdf *temp;
        
        struct sockaddr_storage *ns;
-       socklen_t ns_len;
+       size_t ns_len;
        struct timeval tv_s;
         struct timeval tv_e;
 
@@ -86,7 +86,7 @@ ldns_send(ldns_pkt **result, ldns_resolver *r, ldns_pkt *query_pkt)
        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)
@@ -98,28 +98,14 @@ ldns_send(ldns_pkt **result, ldns_resolver *r, ldns_pkt *query_pkt)
                        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 */
diff --git a/rdata.c b/rdata.c
index 3714ee1216defb4a3f271370b1aeb8ba55f4a874..e567420d90bed5e0c50433e97619654da7c81c87 100644 (file)
--- a/rdata.c
+++ b/rdata.c
@@ -115,7 +115,7 @@ ldns_rdf2native_int32(ldns_rdf *rd)
 }
 
 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;
@@ -139,13 +139,14 @@ ldns_rdf2native_sockaddr_storage(ldns_rdf *rd, uint16_t port)
                        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);
index 8a7bb0af4e9af4bb68bec2bd1a668be4d9eabbc3..9c7dfaf726bd96c9c6cf7f39ba2c4417f05ff1f5 100644 (file)
@@ -792,7 +792,7 @@ ldns_axfr_start(ldns_resolver *resolver,
         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) {
@@ -811,24 +811,9 @@ ldns_axfr_start(ldns_resolver *resolver,
        }
        /* 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);