]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
TLS: Implement isc_nmhandle_setwritetimeout()
authorArtem Boldariev <artem@boldariev.com>
Thu, 23 Jun 2022 17:18:58 +0000 (20:18 +0300)
committerArtem Boldariev <artem@boldariev.com>
Tue, 12 Jul 2022 11:40:22 +0000 (14:40 +0300)
This commit adds a proper implementation of
isc_nmhandle_setwritetimeout() for TLS connections. Now it passes the
value to the underlying TCP handle.

lib/isc/netmgr/netmgr-int.h
lib/isc/netmgr/netmgr.c
lib/isc/netmgr/tlsstream.c

index 8ea7155223d5ea45a02237679ff72fbaf796ff3d..ebb57a339065673fd421878306e2fa65269c2825 100644 (file)
@@ -1771,6 +1771,10 @@ void
 isc__nm_async_tls_set_tlsctx(isc_nmsocket_t *listener, isc_tlsctx_t *tlsctx,
                             const int tid);
 
+void
+isc__nmhandle_tls_setwritetimeout(isc_nmhandle_t *handle,
+                                 uint64_t write_timeout);
+
 void
 isc__nm_http_stoplistening(isc_nmsocket_t *sock);
 
index 68aabecfaf97095a2d7af5cbd19a21d05738c7b1..4b416fae0676532fbe88ed89a90a7e5b2eec9453 100644 (file)
@@ -569,8 +569,24 @@ void
 isc_nmhandle_setwritetimeout(isc_nmhandle_t *handle, uint64_t write_timeout) {
        REQUIRE(VALID_NMHANDLE(handle));
        REQUIRE(VALID_NMSOCK(handle->sock));
+       REQUIRE(handle->sock->tid == isc_nm_tid());
 
-       handle->sock->write_timeout = write_timeout;
+       switch (handle->sock->type) {
+       case isc_nm_tcpsocket:
+       case isc_nm_udpsocket:
+       case isc_nm_tcpdnssocket:
+       case isc_nm_tlsdnssocket:
+               handle->sock->write_timeout = write_timeout;
+               break;
+#ifdef HAVE_LIBNGHTTP2
+       case isc_nm_tlssocket:
+               isc__nmhandle_tls_setwritetimeout(handle, write_timeout);
+               break;
+#endif /* HAVE_LIBNGHTTP2 */
+       default:
+               UNREACHABLE();
+               break;
+       }
 }
 
 void
index 547c518b023743744bd09110ac5504be5a903668..867267ea111110ea5cd0281ddd892b9a503669ba 100644 (file)
@@ -1119,6 +1119,23 @@ isc__nmhandle_tls_keepalive(isc_nmhandle_t *handle, bool value) {
        }
 }
 
+void
+isc__nmhandle_tls_setwritetimeout(isc_nmhandle_t *handle,
+                                 uint64_t write_timeout) {
+       isc_nmsocket_t *sock = NULL;
+
+       REQUIRE(VALID_NMHANDLE(handle));
+       REQUIRE(VALID_NMSOCK(handle->sock));
+       REQUIRE(handle->sock->type == isc_nm_tlssocket);
+
+       sock = handle->sock;
+       if (sock->outerhandle != NULL) {
+               INSIST(VALID_NMHANDLE(sock->outerhandle));
+
+               isc_nmhandle_setwritetimeout(sock->outerhandle, write_timeout);
+       }
+}
+
 const char *
 isc__nm_tls_verify_tls_peer_result_string(const isc_nmhandle_t *handle) {
        isc_nmsocket_t *sock = NULL;