]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
TLS: expose the ability to (re)start and stop underlying read timer
authorArtem Boldariev <artem@boldariev.com>
Wed, 27 Jul 2022 13:26:55 +0000 (16:26 +0300)
committerArtem Boldariev <artem@boldariev.com>
Tue, 20 Dec 2022 19:24:44 +0000 (21:24 +0200)
This commit adds implementation of isc__nmsocket_timer_restart() and
isc__nmsocket_timer_stop() for generic TLS code in order to make its
interface more compatible with that of TCP.

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

index 6e8a78c6888f4398c0e6d43107854b2e8211a47e..c23a53731aeffbb7ca6f402eb71f55b9b6c5cbdd 100644 (file)
@@ -1586,6 +1586,12 @@ isc__nmhandle_tls_setwritetimeout(isc_nmhandle_t *handle,
 bool
 isc__nmsocket_tls_timer_running(isc_nmsocket_t *sock);
 
+void
+isc__nmsocket_tls_timer_restart(isc_nmsocket_t *sock);
+
+void
+isc__nmsocket_tls_timer_stop(isc_nmsocket_t *sock);
+
 void
 isc__nm_tls_failed_read_cb(isc_nmsocket_t *sock, isc_result_t result,
                           bool async);
index ba97f97d0bbbeb6636124e1c23ec74a459ec6158..fa9f60ec18afad5d45a7c53d964d128b370457af 100644 (file)
@@ -1511,6 +1511,16 @@ void
 isc__nmsocket_timer_restart(isc_nmsocket_t *sock) {
        REQUIRE(VALID_NMSOCK(sock));
 
+       switch (sock->type) {
+#ifdef HAVE_LIBNGHTTP2
+       case isc_nm_tlssocket:
+               isc__nmsocket_tls_timer_restart(sock);
+               return;
+#endif /* HAVE_LIBNGHTTP2 */
+       default:
+               break;
+       }
+
        if (uv_is_closing((uv_handle_t *)&sock->read_timer)) {
                return;
        }
@@ -1574,6 +1584,16 @@ isc__nmsocket_timer_stop(isc_nmsocket_t *sock) {
 
        REQUIRE(VALID_NMSOCK(sock));
 
+       switch (sock->type) {
+#ifdef HAVE_LIBNGHTTP2
+       case isc_nm_tlssocket:
+               isc__nmsocket_tls_timer_stop(sock);
+               return;
+#endif /* HAVE_LIBNGHTTP2 */
+       default:
+               break;
+       }
+
        /* uv_timer_stop() is idempotent, no need to check if running */
 
        r = uv_timer_stop(&sock->read_timer);
index 5aae50419b6ef2fce74f8b89278ac20236f4941d..485c70410ae9256788f94ce19be27f14d0820abc 100644 (file)
@@ -1229,6 +1229,30 @@ isc__nmsocket_tls_timer_running(isc_nmsocket_t *sock) {
        return (false);
 }
 
+void
+isc__nmsocket_tls_timer_restart(isc_nmsocket_t *sock) {
+       REQUIRE(VALID_NMSOCK(sock));
+       REQUIRE(sock->type == isc_nm_tlssocket);
+
+       if (sock->outerhandle != NULL) {
+               INSIST(VALID_NMHANDLE(sock->outerhandle));
+               REQUIRE(VALID_NMSOCK(sock->outerhandle->sock));
+               isc__nmsocket_timer_restart(sock->outerhandle->sock);
+       }
+}
+
+void
+isc__nmsocket_tls_timer_stop(isc_nmsocket_t *sock) {
+       REQUIRE(VALID_NMSOCK(sock));
+       REQUIRE(sock->type == isc_nm_tlssocket);
+
+       if (sock->outerhandle != NULL) {
+               INSIST(VALID_NMHANDLE(sock->outerhandle));
+               REQUIRE(VALID_NMSOCK(sock->outerhandle->sock));
+               isc__nmsocket_timer_stop(sock->outerhandle->sock);
+       }
+}
+
 const char *
 isc__nm_tls_verify_tls_peer_result_string(const isc_nmhandle_t *handle) {
        isc_nmsocket_t *sock = NULL;