]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
libdns refactoring: get rid of multiple versions of dns_dispatch_createtcp and dns_di...
authorWitold Kręcicki <wpk@isc.org>
Tue, 3 Apr 2018 12:35:07 +0000 (14:35 +0200)
committerWitold Kręcicki <wpk@isc.org>
Fri, 6 Apr 2018 06:04:41 +0000 (08:04 +0200)
lib/dns/dispatch.c
lib/dns/include/dns/dispatch.h
lib/dns/request.c
lib/dns/resolver.c
lib/dns/tests/dispatch_test.c
lib/dns/win32/libdns.def.in

index 68055c0f0870d85a702ebf5fce18a386bc69d99e..f66533154d3ae8b36a3c6677bcc39c819098bf77 100644 (file)
@@ -2496,28 +2496,12 @@ dispatch_free(dns_dispatch_t **dispp) {
 
 isc_result_t
 dns_dispatch_createtcp(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
-                      isc_taskmgr_t *taskmgr, unsigned int buffersize,
+                      isc_taskmgr_t *taskmgr, const isc_sockaddr_t *localaddr,
+                      const isc_sockaddr_t *destaddr, unsigned int buffersize,
                       unsigned int maxbuffers, unsigned int maxrequests,
                       unsigned int buckets, unsigned int increment,
                       unsigned int attributes, dns_dispatch_t **dispp)
 {
-
-       attributes |= DNS_DISPATCHATTR_PRIVATE;  /* XXXMLG */
-
-       return (dns_dispatch_createtcp2(mgr, sock, taskmgr, NULL, NULL,
-                                       buffersize, maxbuffers, maxrequests,
-                                       buckets, increment, attributes,
-                                       dispp));
-}
-
-isc_result_t
-dns_dispatch_createtcp2(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
-                       isc_taskmgr_t *taskmgr, const isc_sockaddr_t *localaddr,
-                       const isc_sockaddr_t *destaddr, unsigned int buffersize,
-                       unsigned int maxbuffers, unsigned int maxrequests,
-                       unsigned int buckets, unsigned int increment,
-                       unsigned int attributes, dns_dispatch_t **dispp)
-{
        isc_result_t result;
        dns_dispatch_t *disp;
 
@@ -2623,57 +2607,8 @@ dns_dispatch_createtcp2(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
 
 isc_result_t
 dns_dispatch_gettcp(dns_dispatchmgr_t *mgr, const isc_sockaddr_t *destaddr,
-                   const isc_sockaddr_t *localaddr, dns_dispatch_t **dispp)
-{
-       dns_dispatch_t *disp;
-       isc_result_t result;
-       isc_sockaddr_t peeraddr;
-       isc_sockaddr_t sockname;
-       unsigned int attributes, mask;
-       isc_boolean_t match = ISC_FALSE;
-
-       REQUIRE(VALID_DISPATCHMGR(mgr));
-       REQUIRE(destaddr != NULL);
-       REQUIRE(dispp != NULL && *dispp == NULL);
-
-       attributes = DNS_DISPATCHATTR_TCP | DNS_DISPATCHATTR_CONNECTED;
-       mask = DNS_DISPATCHATTR_TCP | DNS_DISPATCHATTR_PRIVATE |
-              DNS_DISPATCHATTR_EXCLUSIVE | DNS_DISPATCHATTR_CONNECTED;
-
-       LOCK(&mgr->lock);
-       disp = ISC_LIST_HEAD(mgr->list);
-       while (disp != NULL && !match) {
-               LOCK(&disp->lock);
-               if ((disp->shutting_down == 0) &&
-                   ATTRMATCH(disp->attributes, attributes, mask) &&
-                   (localaddr == NULL ||
-                    isc_sockaddr_eqaddr(localaddr, &disp->local))) {
-                       result = isc_socket_getsockname(disp->socket,
-                                                       &sockname);
-                       if (result == ISC_R_SUCCESS)
-                               result = isc_socket_getpeername(disp->socket,
-                                                               &peeraddr);
-                       if (result == ISC_R_SUCCESS &&
-                           isc_sockaddr_equal(destaddr, &peeraddr) &&
-                           (localaddr == NULL ||
-                            isc_sockaddr_eqaddr(localaddr, &sockname))) {
-                               /* attach */
-                               disp->refcount++;
-                               *dispp = disp;
-                               match = ISC_TRUE;
-                       }
-               }
-               UNLOCK(&disp->lock);
-               disp = ISC_LIST_NEXT(disp, link);
-       }
-       UNLOCK(&mgr->lock);
-       return (match ? ISC_R_SUCCESS : ISC_R_NOTFOUND);
-}
-
-isc_result_t
-dns_dispatch_gettcp2(dns_dispatchmgr_t *mgr, const isc_sockaddr_t *destaddr,
-                    const isc_sockaddr_t *localaddr, isc_boolean_t *connected,
-                    dns_dispatch_t **dispp)
+                   const isc_sockaddr_t *localaddr, isc_boolean_t *connected,
+                   dns_dispatch_t **dispp)
 {
        dns_dispatch_t *disp;
        isc_result_t result;
@@ -2685,9 +2620,8 @@ dns_dispatch_gettcp2(dns_dispatchmgr_t *mgr, const isc_sockaddr_t *destaddr,
        REQUIRE(VALID_DISPATCHMGR(mgr));
        REQUIRE(destaddr != NULL);
        REQUIRE(dispp != NULL && *dispp == NULL);
-       REQUIRE(connected != NULL);
 
-       /* First pass (same as dns_dispatch_gettcp()) */
+       /* First pass  */
        attributes = DNS_DISPATCHATTR_TCP | DNS_DISPATCHATTR_CONNECTED;
        mask = DNS_DISPATCHATTR_TCP | DNS_DISPATCHATTR_PRIVATE |
               DNS_DISPATCHATTR_EXCLUSIVE | DNS_DISPATCHATTR_CONNECTED;
@@ -2713,18 +2647,20 @@ dns_dispatch_gettcp2(dns_dispatchmgr_t *mgr, const isc_sockaddr_t *destaddr,
                                disp->refcount++;
                                *dispp = disp;
                                match = ISC_TRUE;
-                               *connected = ISC_TRUE;
+                               if (connected != NULL) {
+                                       *connected = ISC_TRUE;
+                               }
                        }
                }
                UNLOCK(&disp->lock);
                disp = ISC_LIST_NEXT(disp, link);
        }
-       if (match) {
+       if (match || connected == NULL) {
                UNLOCK(&mgr->lock);
-               return (ISC_R_SUCCESS);
+               return (match ? ISC_R_SUCCESS : ISC_R_NOTFOUND);
        }
 
-       /* Second pass */
+       /* Second pass, only if connected != NULL */
        attributes = DNS_DISPATCHATTR_TCP;
 
        disp = ISC_LIST_HEAD(mgr->list);
@@ -3175,21 +3111,11 @@ dns_dispatch_detach(dns_dispatch_t **dispp) {
 }
 
 isc_result_t
-dns_dispatch_addresponse2(dns_dispatch_t *disp, const isc_sockaddr_t *dest,
-                         isc_task_t *task, isc_taskaction_t action, void *arg,
-                         dns_messageid_t *idp, dns_dispentry_t **resp,
-                         isc_socketmgr_t *sockmgr)
-{
-       return (dns_dispatch_addresponse3(disp, 0, dest, task, action, arg,
-                                         idp, resp, sockmgr));
-}
-
-isc_result_t
-dns_dispatch_addresponse3(dns_dispatch_t *disp, unsigned int options,
-                         const isc_sockaddr_t *dest, isc_task_t *task,
-                         isc_taskaction_t action, void *arg,
-                         dns_messageid_t *idp, dns_dispentry_t **resp,
-                         isc_socketmgr_t *sockmgr)
+dns_dispatch_addresponse(dns_dispatch_t *disp, unsigned int options,
+                        const isc_sockaddr_t *dest, isc_task_t *task,
+                        isc_taskaction_t action, void *arg,
+                        dns_messageid_t *idp, dns_dispentry_t **resp,
+                        isc_socketmgr_t *sockmgr)
 {
        dns_dispentry_t *res;
        unsigned int bucket;
@@ -3383,18 +3309,6 @@ dns_dispatch_addresponse3(dns_dispatch_t *disp, unsigned int options,
        return (ISC_R_SUCCESS);
 }
 
-isc_result_t
-dns_dispatch_addresponse(dns_dispatch_t *disp, const isc_sockaddr_t *dest,
-                        isc_task_t *task, isc_taskaction_t action, void *arg,
-                        dns_messageid_t *idp, dns_dispentry_t **resp)
-{
-       REQUIRE(VALID_DISPATCH(disp));
-       REQUIRE((disp->attributes & DNS_DISPATCHATTR_EXCLUSIVE) == 0);
-
-       return (dns_dispatch_addresponse3(disp, 0, dest, task, action, arg,
-                                         idp, resp, NULL));
-}
-
 void
 dns_dispatch_starttcp(dns_dispatch_t *disp) {
 
index d3caf9cfac625ce36ccb49402cb480ff53308d88..44ade7e905e8a1fd88feadc7c2039d06977d9b7c 100644 (file)
@@ -290,17 +290,11 @@ dns_dispatch_getudp_dup(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
 
 isc_result_t
 dns_dispatch_createtcp(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
-                      isc_taskmgr_t *taskmgr, unsigned int buffersize,
+                      isc_taskmgr_t *taskmgr, const isc_sockaddr_t *localaddr,
+                      const isc_sockaddr_t *destaddr, unsigned int buffersize,
                       unsigned int maxbuffers, unsigned int maxrequests,
                       unsigned int buckets, unsigned int increment,
                       unsigned int attributes, dns_dispatch_t **dispp);
-isc_result_t
-dns_dispatch_createtcp2(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
-                       isc_taskmgr_t *taskmgr, const isc_sockaddr_t *localaddr,
-                       const isc_sockaddr_t *destaddr, unsigned int buffersize,
-                       unsigned int maxbuffers, unsigned int maxrequests,
-                       unsigned int buckets, unsigned int increment,
-                       unsigned int attributes, dns_dispatch_t **dispp);
 /*%<
  * Create a new dns_dispatch and attach it to the provided isc_socket_t.
  *
@@ -374,34 +368,20 @@ dns_dispatch_starttcp(dns_dispatch_t *disp);
 
 isc_result_t
 dns_dispatch_gettcp(dns_dispatchmgr_t *mgr, const isc_sockaddr_t *destaddr,
-                   const isc_sockaddr_t *localaddr, dns_dispatch_t **dispp);
-isc_result_t
-dns_dispatch_gettcp2(dns_dispatchmgr_t *mgr, const isc_sockaddr_t *destaddr,
                     const isc_sockaddr_t *localaddr, isc_boolean_t *connected,
                     dns_dispatch_t **dispp);
 /*
  * Attempt to connect to a existing TCP connection (connection completed
- * for dns_dispatch_gettcp()).
+ * if connected == NULL).
  */
 
 
 isc_result_t
-dns_dispatch_addresponse3(dns_dispatch_t *disp, unsigned int options,
-                         const isc_sockaddr_t *dest, isc_task_t *task,
-                         isc_taskaction_t action, void *arg,
-                         isc_uint16_t *idp, dns_dispentry_t **resp,
-                         isc_socketmgr_t *sockmgr);
-
-isc_result_t
-dns_dispatch_addresponse2(dns_dispatch_t *disp, const isc_sockaddr_t *dest,
-                         isc_task_t *task, isc_taskaction_t action, void *arg,
-                         isc_uint16_t *idp, dns_dispentry_t **resp,
-                         isc_socketmgr_t *sockmgr);
-
-isc_result_t
-dns_dispatch_addresponse(dns_dispatch_t *disp, const isc_sockaddr_t *dest,
-                        isc_task_t *task, isc_taskaction_t action, void *arg,
-                        isc_uint16_t *idp, dns_dispentry_t **resp);
+dns_dispatch_addresponse(dns_dispatch_t *disp, unsigned int options,
+                        const isc_sockaddr_t *dest, isc_task_t *task,
+                        isc_taskaction_t action, void *arg,
+                        isc_uint16_t *idp, dns_dispentry_t **resp,
+                        isc_socketmgr_t *sockmgr);
 /*%<
  * Add a response entry for this dispatch.
  *
index a5d522d575b0dd7aaf187b43356a7199b4b5ae74..cfc20eb68a8f8eb38a6e30d301fae88bebdaa465 100644 (file)
@@ -534,9 +534,9 @@ create_tcp_dispatch(isc_boolean_t newtcp, isc_boolean_t share,
        isc_sockaddr_t bind_any;
 
        if (!newtcp && share) {
-               result = dns_dispatch_gettcp2(requestmgr->dispatchmgr,
-                                             destaddr, srcaddr,
-                                             connected, dispatchp);
+               result = dns_dispatch_gettcp(requestmgr->dispatchmgr,
+                                            destaddr, srcaddr,
+                                            connected, dispatchp);
                if (result == ISC_R_SUCCESS) {
                        char peer[ISC_SOCKADDR_FORMATSIZE];
 
@@ -548,7 +548,7 @@ create_tcp_dispatch(isc_boolean_t newtcp, isc_boolean_t share,
                }
        } else if (!newtcp) {
                result = dns_dispatch_gettcp(requestmgr->dispatchmgr, destaddr,
-                                            srcaddr, dispatchp);
+                                           srcaddr, NULL, dispatchp);
                if (result == ISC_R_SUCCESS) {
                        char peer[ISC_SOCKADDR_FORMATSIZE];
 
@@ -588,11 +588,11 @@ create_tcp_dispatch(isc_boolean_t newtcp, isc_boolean_t share,
        attrs |= DNS_DISPATCHATTR_MAKEQUERY;
 
        isc_socket_dscp(sock, dscp);
-       result = dns_dispatch_createtcp2(requestmgr->dispatchmgr,
-                                        sock, requestmgr->taskmgr,
-                                        srcaddr, destaddr,
-                                        4096, 32768, 32768, 16411, 16433,
-                                        attrs, dispatchp);
+       result = dns_dispatch_createtcp(requestmgr->dispatchmgr,
+                                       sock, requestmgr->taskmgr,
+                                       srcaddr, destaddr,
+                                       4096, 32768, 32768, 16411, 16433,
+                                       attrs, dispatchp);
 cleanup:
        isc_socket_detach(&sock);
        return (result);
@@ -832,10 +832,10 @@ dns_request_createraw4(dns_requestmgr_t *requestmgr, isc_buffer_t *msgbuf,
                dispopt |= DNS_DISPATCHOPT_FIXEDID;
        }
 
-       result = dns_dispatch_addresponse3(request->dispatch, dispopt,
-                                          destaddr, task, req_response,
-                                          request, &id, &request->dispentry,
-                                          requestmgr->socketmgr);
+       result = dns_dispatch_addresponse(request->dispatch, dispopt,
+                                         destaddr, task, req_response,
+                                         request, &id, &request->dispentry,
+                                         requestmgr->socketmgr);
        if (result != ISC_R_SUCCESS) {
                if ((options & DNS_REQUESTOPT_FIXEDID) != 0 && !newtcp) {
                        newtcp = ISC_TRUE;
@@ -1060,10 +1060,10 @@ dns_request_createvia4(dns_requestmgr_t *requestmgr, dns_message_t *message,
        if (result != ISC_R_SUCCESS)
                goto cleanup;
 
-       result = dns_dispatch_addresponse2(request->dispatch, destaddr, task,
-                                          req_response, request, &id,
-                                          &request->dispentry,
-                                          requestmgr->socketmgr);
+       result = dns_dispatch_addresponse(request->dispatch, 0, destaddr,
+                                         task, req_response, request, &id,
+                                         &request->dispentry,
+                                         requestmgr->socketmgr);
        if (result != ISC_R_SUCCESS)
                goto cleanup;
        sock = req_getsocket(request);
index b7b46db2e060cd05b92eb756714d181ee60640d2..e6352458f120e040876194aac36d60ca174ef499 100644 (file)
@@ -2387,14 +2387,15 @@ resquery_send(resquery_t *query) {
        /*
         * Get a query id from the dispatch.
         */
-       result = dns_dispatch_addresponse2(query->dispatch,
-                                          &query->addrinfo->sockaddr,
-                                          task,
-                                          resquery_response,
-                                          query,
-                                          &query->id,
-                                          &query->dispentry,
-                                          res->socketmgr);
+       result = dns_dispatch_addresponse(query->dispatch,
+                                         0,
+                                         &query->addrinfo->sockaddr,
+                                         task,
+                                         resquery_response,
+                                         query,
+                                         &query->id,
+                                         &query->dispentry,
+                                         res->socketmgr);
        if (result != ISC_R_SUCCESS)
                goto cleanup_temps;
 
@@ -2932,10 +2933,12 @@ resquery_connected(isc_task_t *task, isc_event_t *event) {
                        attrs |= DNS_DISPATCHATTR_MAKEQUERY;
 
                        result = dns_dispatch_createtcp(query->dispatchmgr,
-                                                    query->tcpsocket,
-                                                    query->fctx->res->taskmgr,
-                                                    4096, 2, 1, 1, 3, attrs,
-                                                    &query->dispatch);
+                                                       query->tcpsocket,
+                                                       query->fctx->res->taskmgr,
+                                                       NULL, NULL,
+                                                       4096, 2, 1, 1, 3,
+                                                       attrs,
+                                                       &query->dispatch);
 
                        /*
                         * Regardless of whether dns_dispatch_create()
index d344c78d3663fc39da173c4600c8bea2bf9c464f..815241d2d665eb3c819d1c0dd3a9a5a1f80d38db 100644 (file)
@@ -294,8 +294,8 @@ ATF_TC_BODY(dispatch_getnext, tc) {
        result = isc_socket_recv(sock, &region, 1, task, nameserver, sock);
        ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
 
-       result = dns_dispatch_addresponse(dispatch, &local, task, response,
-                                         NULL, &id, &dispentry);
+       result = dns_dispatch_addresponse(dispatch, 0, &local, task, response,
+                                         NULL, &id, &dispentry, NULL);
        ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
 
        memset(message, 0, sizeof(message));
index 025808d1284ca82c8e749dcbe539921187cf890f..7dc0e2b6992a9ff92fa00af3462c811a1efd9ac1 100644 (file)
@@ -269,13 +269,10 @@ dns_difftuple_copy
 dns_difftuple_create
 dns_difftuple_free
 dns_dispatch_addresponse
-dns_dispatch_addresponse2
-dns_dispatch_addresponse3
 dns_dispatch_attach
 dns_dispatch_cancel
 dns_dispatch_changeattributes
 dns_dispatch_createtcp
-dns_dispatch_createtcp2
 dns_dispatch_detach
 dns_dispatch_getattributes
 dns_dispatch_getdscp
@@ -284,7 +281,6 @@ dns_dispatch_getlocaladdress
 dns_dispatch_getnext
 dns_dispatch_getsocket
 dns_dispatch_gettcp
-dns_dispatch_gettcp2
 dns_dispatch_getudp
 dns_dispatch_getudp_dup
 dns_dispatch_importrecv