From e07302e9183e20c999ad924334527795728ab016 Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Thu, 29 Apr 2021 13:59:03 -0500 Subject: [PATCH 41/74] tls: implement get_negotiated_protocol vfunc This allows GLib to remove some API-level caching that is not threadsafe. Fixes glib#2393 Conflict: NA Reference:https://gitlab.gnome.org/GNOME/glib-networking/-/commit/e07302e9183e20c999ad924334527795728ab016 --- tls/base/gtlsconnection-base.c | 40 +++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/tls/base/gtlsconnection-base.c b/tls/base/gtlsconnection-base.c index 72551dc..f6b2460 100644 --- a/tls/base/gtlsconnection-base.c +++ b/tls/base/gtlsconnection-base.c @@ -1447,6 +1447,26 @@ g_tls_connection_base_dtls_get_binding_data (GDtlsConnection *conn, type, data, error); } +#if GLIB_CHECK_VERSION(2, 69, 0) +static const gchar * +g_tls_connection_base_get_negotiated_protocol (GTlsConnection *conn) +{ + GTlsConnectionBase *tls = G_TLS_CONNECTION_BASE (conn); + GTlsConnectionBasePrivate *priv = g_tls_connection_base_get_instance_private (tls); + + return priv->negotiated_protocol; +} +#endif + +static const gchar * +g_tls_connection_base_dtls_get_negotiated_protocol (GDtlsConnection *conn) +{ + GTlsConnectionBase *tls = G_TLS_CONNECTION_BASE (conn); + GTlsConnectionBasePrivate *priv = g_tls_connection_base_get_instance_private (tls); + + return priv->negotiated_protocol; +} + static void handshake_thread (GTask *task, gpointer object, @@ -2542,15 +2562,6 @@ g_tls_connection_base_dtls_set_advertised_protocols (GDtlsConnection *conn, g_object_set (conn, "advertised-protocols", protocols, NULL); } -const gchar * -g_tls_connection_base_dtls_get_negotiated_protocol (GDtlsConnection *conn) -{ - GTlsConnectionBase *tls = G_TLS_CONNECTION_BASE (conn); - GTlsConnectionBasePrivate *priv = g_tls_connection_base_get_instance_private (tls); - - return priv->negotiated_protocol; -} - GDatagramBased * g_tls_connection_base_get_base_socket (GTlsConnectionBase *tls) { @@ -2733,10 +2744,13 @@ g_tls_connection_base_class_init (GTlsConnectionBaseClass *klass) gobject_class->set_property = g_tls_connection_base_set_property; gobject_class->finalize = g_tls_connection_base_finalize; - connection_class->handshake = g_tls_connection_base_handshake; - connection_class->handshake_async = g_tls_connection_base_handshake_async; - connection_class->handshake_finish = g_tls_connection_base_handshake_finish; - connection_class->get_binding_data = g_tls_connection_base_get_binding_data; + connection_class->handshake = g_tls_connection_base_handshake; + connection_class->handshake_async = g_tls_connection_base_handshake_async; + connection_class->handshake_finish = g_tls_connection_base_handshake_finish; + connection_class->get_binding_data = g_tls_connection_base_get_binding_data; +#if GLIB_CHECK_VERSION(2, 69, 0) + connection_class->get_negotiated_protocol = g_tls_connection_base_get_negotiated_protocol; +#endif iostream_class->get_input_stream = g_tls_connection_base_get_input_stream; iostream_class->get_output_stream = g_tls_connection_base_get_output_stream; -- 2.33.0