]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
KTLS: set write alert callback
authorFrantisek Krenzelok <krenzelok.frantisek@gmail.com>
Fri, 5 Aug 2022 14:38:02 +0000 (16:38 +0200)
committerFrantisek Krenzelok <krenzelok.frantisek@gmail.com>
Wed, 5 Oct 2022 12:19:46 +0000 (14:19 +0200)
Use callback for sending alerts.

Signed-off-by: Frantisek Krenzelok <krenzelok.frantisek@gmail.com>
lib/alert.c
lib/system/ktls.c
lib/system/ktls.h

index 50bd1d3de7cd25dfe72dcfeb6cc2b7f633953ced..fda8cd79f04f74d93179584ee37d4545cf25d7eb 100644 (file)
@@ -182,15 +182,10 @@ gnutls_alert_send(gnutls_session_t session, gnutls_alert_level_t level,
                return ret;
        }
 
-       if (IS_KTLS_ENABLED(session, GNUTLS_KTLS_SEND)) {
-               ret =
-                       _gnutls_ktls_send_control_msg(session, GNUTLS_ALERT, data, 2);
-       } else {
-               ret =
-                       _gnutls_send_int(session, GNUTLS_ALERT, -1,
-                               EPOCH_WRITE_CURRENT, data, 2,
-                               MBUFFER_FLUSH);
-       }
+       ret = _gnutls_send_int(session, GNUTLS_ALERT, -1,
+                             EPOCH_WRITE_CURRENT, data, 2,
+                             MBUFFER_FLUSH);
+
        return (ret < 0) ? ret : 0;
 }
 
index f3cb343ae58417442abef78b8a30a012c4ecac5d..703775960883d3f36bc58d90f5c2bc53a61a0bcb 100644 (file)
@@ -269,9 +269,13 @@ int _gnutls_ktls_set_keys(gnutls_session_t session, gnutls_transport_ktls_enable
                        default:
                                assert(0);
                }
+
                // set callback for sending handshake messages
                gnutls_handshake_set_read_function(session,
                                                   _gnutls_ktls_send_handshake_msg);
+
+               // set callback for sending alert messages
+               gnutls_alert_set_read_function(session, _gnutls_ktls_send_alert_msg);
        }
 
        return in;
@@ -367,6 +371,17 @@ int _gnutls_ktls_send_handshake_msg(gnutls_session_t session,
                                             data, data_size);
 }
 
+int _gnutls_ktls_send_alert_msg(gnutls_session_t session,
+                               gnutls_record_encryption_level_t level,
+                               gnutls_alert_level_t alert_level,
+                               gnutls_alert_description_t alert_desc)
+{
+       uint8_t data[2];
+       data[0] = (uint8_t) alert_level;
+       data[1] = (uint8_t) alert_desc;
+       return _gnutls_ktls_send_control_msg(session, GNUTLS_ALERT, data, 2);
+}
+
 int _gnutls_ktls_recv_control_msg(gnutls_session_t session,
                        unsigned char *record_type, void *data, size_t data_size)
 {
index 8d61a49dfb25b3797e2f48d1282bfc5abf137ff8..64e1c9c1cafda53652ceb7e3e15fdcc1a6bfb099 100644 (file)
@@ -15,6 +15,11 @@ int _gnutls_ktls_send_handshake_msg(gnutls_session_t session,
                                    gnutls_handshake_description_t htype,
                                    const void *data, size_t data_size);
 
+int _gnutls_ktls_send_alert_msg(gnutls_session_t session,
+                               gnutls_record_encryption_level_t level,
+                               gnutls_alert_level_t alert_level,
+                               gnutls_alert_description_t alert_desc);
+
 int _gnutls_ktls_send_control_msg(gnutls_session_t session, unsigned char record_type,
                const void *data, size_t data_size);
 #define _gnutls_ktls_send(x, y, z) _gnutls_ktls_send_control_msg(x, GNUTLS_APPLICATION_DATA, y, z);