[glib-networking/mcatanzaro/glib-#2393: 36/36] tls: implement get_negotiated_protocol vfunc




commit 972751cc994bd85c8688d1f2fb33be09c9df10d2
Author: Michael Catanzaro <mcatanzaro gnome org>
Date:   Thu Apr 29 13:59:03 2021 -0500

    tls: implement get_negotiated_protocol vfunc
    
    This allows GLib to remove some API-level caching that is not
    threadsafe.
    
    Because this bumps GLIB_VERSION_MIN_REQUIRED, we need to ignore deprecations for
    for GTlsRehandshakeMode.
    
    Fixes glib#2393

 tls/base/gtlsconnection-base.c | 38 +++++++++++++++++++++++++-------------
 1 file changed, 25 insertions(+), 13 deletions(-)
---
diff --git a/tls/base/gtlsconnection-base.c b/tls/base/gtlsconnection-base.c
index 72551dc..f185fdf 100644
--- a/tls/base/gtlsconnection-base.c
+++ b/tls/base/gtlsconnection-base.c
@@ -99,6 +99,7 @@ typedef struct
   gboolean               peer_certificate_examined;
 
   gboolean               require_close_notify;
+
   GTlsRehandshakeMode    rehandshake_mode;
 
   /* need_handshake means the next claim_op() will get diverted into
@@ -1447,6 +1448,23 @@ 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;
+}
+
+static const gchar *
+g_tls_connection_base_dtls_get_negotiated_protocol (GDtlsConnection *conn)
+{
+  return g_tls_connection_base_get_negotiated_protocol (G_TLS_CONNECTION (conn));
+}
+#endif
+
 static void
 handshake_thread (GTask        *task,
                   gpointer      object,
@@ -2542,15 +2560,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 +2742,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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]