mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-24 19:22:11 +01:00
GTlsConnection: add ALPN support
Add functions and properties to support TLS Application-Layer Protocol Negotiation (which is needed for HTTP/2 support).
This commit is contained in:
parent
af88962c23
commit
7ac2ef9d35
@ -81,7 +81,9 @@ enum {
|
||||
PROP_INTERACTION,
|
||||
PROP_CERTIFICATE,
|
||||
PROP_PEER_CERTIFICATE,
|
||||
PROP_PEER_CERTIFICATE_ERRORS
|
||||
PROP_PEER_CERTIFICATE_ERRORS,
|
||||
PROP_ADVERTISED_PROTOCOLS,
|
||||
PROP_NEGOTIATED_PROTOCOL
|
||||
};
|
||||
|
||||
static void
|
||||
@ -244,6 +246,37 @@ g_tls_connection_class_init (GTlsConnectionClass *klass)
|
||||
0,
|
||||
G_PARAM_READABLE |
|
||||
G_PARAM_STATIC_STRINGS));
|
||||
/**
|
||||
* GTlsConnection:advertised-protocols:
|
||||
*
|
||||
* The list of application-layer protocols that the connection
|
||||
* advertises that it is willing to speak. See
|
||||
* g_tls_connection_set_advertised_protocols().
|
||||
*
|
||||
* Since: 2.46
|
||||
*/
|
||||
g_object_class_install_property (gobject_class, PROP_ADVERTISED_PROTOCOLS,
|
||||
g_param_spec_boxed ("advertised-protocols",
|
||||
P_("Advertised Protocols"),
|
||||
P_("Application-layer protocols available on this connection"),
|
||||
G_TYPE_STRV,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_STATIC_STRINGS));
|
||||
/**
|
||||
* GTlsConnection:negotiated-protocol:
|
||||
*
|
||||
* The application-layer protocol negotiated during the TLS
|
||||
* handshake. See g_tls_connection_get_negotiated_protocol().
|
||||
*
|
||||
* Since: 2.46
|
||||
*/
|
||||
g_object_class_install_property (gobject_class, PROP_NEGOTIATED_PROTOCOL,
|
||||
g_param_spec_string ("negotiated-protocol",
|
||||
P_("Negotiated Protocol"),
|
||||
P_("Application-layer protocol negotiated for this connection"),
|
||||
NULL,
|
||||
G_PARAM_READABLE |
|
||||
G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* GTlsConnection::accept-certificate:
|
||||
@ -725,6 +758,62 @@ g_tls_connection_get_rehandshake_mode (GTlsConnection *conn)
|
||||
return mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_tls_connection_set_advertised_protocols:
|
||||
* @conn: a #GTlsConnection
|
||||
* @protocols: (array null-terminated=1): a %NULL-terminated array
|
||||
* of ALPN protocol names (eg, "http/1.1", "h2")
|
||||
*
|
||||
* Sets the list of application-layer protocols to advertise that the
|
||||
* caller is willing to speak on this connection. The
|
||||
* Application-Layer Protocol Negotiation (ALPN) extension will be
|
||||
* used to negotiate a compatible protocol with the peer; use
|
||||
* g_tls_connection_get_negotiated_protocol() to find the negotiated
|
||||
* protocol after the handshake.
|
||||
*
|
||||
* Since: 2.46
|
||||
*/
|
||||
void
|
||||
g_tls_connection_set_advertised_protocols (GTlsConnection *conn,
|
||||
const char * const *protocols)
|
||||
{
|
||||
g_return_if_fail (G_IS_TLS_CONNECTION (conn));
|
||||
g_return_if_fail (protocols != NULL);
|
||||
|
||||
g_object_set (G_OBJECT (conn),
|
||||
"advertised-protocols", protocols,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* g_tls_connection_get_negotiated_protocol:
|
||||
* @conn: a #GTlsConnection
|
||||
*
|
||||
* Gets the name of the application-layer protocol negotiated during
|
||||
* the handshake.
|
||||
*
|
||||
* If the peer did not use the ALPN extension, or did not advertise a
|
||||
* protocol that matched one of @conn's protocols, or the TLS backend
|
||||
* does not support ALPN, then this will be %NULL.
|
||||
*
|
||||
* Since: 2.46
|
||||
*/
|
||||
const char *
|
||||
g_tls_connection_get_negotiated_protocol (GTlsConnection *conn)
|
||||
{
|
||||
char *protocol;
|
||||
const char *interned_protocol;
|
||||
|
||||
g_return_val_if_fail (G_IS_TLS_CONNECTION (conn), NULL);
|
||||
|
||||
g_object_get (G_OBJECT (conn),
|
||||
"negotiated-protocol", &protocol,
|
||||
NULL);
|
||||
interned_protocol = protocol ? g_intern_string (protocol) : NULL;
|
||||
g_free (protocol);
|
||||
return interned_protocol;
|
||||
}
|
||||
|
||||
/**
|
||||
* g_tls_connection_handshake:
|
||||
* @conn: a #GTlsConnection
|
||||
|
@ -115,6 +115,13 @@ void g_tls_connection_set_rehandshake_mode (GTlsConnecti
|
||||
GLIB_AVAILABLE_IN_ALL
|
||||
GTlsRehandshakeMode g_tls_connection_get_rehandshake_mode (GTlsConnection *conn);
|
||||
|
||||
GLIB_AVAILABLE_IN_2_46
|
||||
void g_tls_connection_set_advertised_protocols (GTlsConnection *conn,
|
||||
const char * const *protocols);
|
||||
|
||||
GLIB_AVAILABLE_IN_2_46
|
||||
const char * g_tls_connection_get_negotiated_protocol (GTlsConnection *conn);
|
||||
|
||||
GLIB_AVAILABLE_IN_ALL
|
||||
gboolean g_tls_connection_handshake (GTlsConnection *conn,
|
||||
GCancellable *cancellable,
|
||||
|
Loading…
x
Reference in New Issue
Block a user