diff options
author | Xavier Claessens <xavier.claessens@collabora.com> | 2015-06-05 22:04:24 -0400 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.com> | 2015-06-09 19:47:51 -0400 |
commit | 74a434761403fbc491af7b564dcb102c81815888 (patch) | |
tree | 3c7bf73fceaef9a17490f795bd14d57bfdbcaac1 /gst-libs/gst/rtsp | |
parent | 0aacd7f393607f95710f608549213fe5c6b879d0 (diff) |
GstRTSPConnection: Add GTlsInteraction support
https://bugzilla.gnome.org/show_bug.cgi?id=750471
Diffstat (limited to 'gst-libs/gst/rtsp')
-rw-r--r-- | gst-libs/gst/rtsp/gstrtspconnection.c | 62 | ||||
-rw-r--r-- | gst-libs/gst/rtsp/gstrtspconnection.h | 2 |
2 files changed, 63 insertions, 1 deletions
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c index 08120d206..98342dd1f 100644 --- a/gst-libs/gst/rtsp/gstrtspconnection.c +++ b/gst-libs/gst/rtsp/gstrtspconnection.c @@ -159,6 +159,7 @@ struct _GstRTSPConnection /* TLS */ GTlsDatabase *tls_database; + GTlsInteraction *tls_interaction; DecodeCtx ctx; DecodeCtx *ctxp; @@ -253,7 +254,7 @@ verify_error: static void socket_client_event (GSocketClient * client, GSocketClientEvent event, - GSocketConnectable * connectable, GIOStream * connection, + GSocketConnectable * connectable, GTlsConnection * connection, GstRTSPConnection * rtspconn) { if (event == G_SOCKET_CLIENT_TLS_HANDSHAKING) { @@ -261,6 +262,8 @@ socket_client_event (GSocketClient * client, GSocketClientEvent event, g_signal_connect (connection, "accept-certificate", (GCallback) tls_accept_certificate, rtspconn); + + g_tls_connection_set_interaction (connection, rtspconn->tls_interaction); } } @@ -622,6 +625,61 @@ gst_rtsp_connection_get_tls_database (GstRTSPConnection * conn) return result; } +/** + * gst_rtsp_connection_set_tls_interaction: + * @conn: a #GstRTSPConnection + * @interaction: a #GTlsInteraction + * + * Sets a #GTlsInteraction object to be used when the connection or certificate + * database need to interact with the user. This will be used to prompt the + * user for passwords where necessary. + * + * Since: 1.6 + */ +void +gst_rtsp_connection_set_tls_interaction (GstRTSPConnection * conn, + GTlsInteraction * interaction) +{ + GTlsInteraction *old_interaction; + + g_return_if_fail (conn != NULL); + + if (interaction) + g_object_ref (interaction); + + old_interaction = conn->tls_interaction; + conn->tls_interaction = interaction; + + if (old_interaction) + g_object_unref (old_interaction); +} + +/** + * gst_rtsp_connection_get_tls_interaction: + * @conn: a #GstRTSPConnection + * + * Gets a #GTlsInteraction object to be used when the connection or certificate + * database need to interact with the user. This will be used to prompt the + * user for passwords where necessary. + * + * Returns: (transfer full): a reference on the #GTlsInteraction. Use + * g_object_unref() to release. + * + * Since: 1.6 + */ +GTlsInteraction * +gst_rtsp_connection_get_tls_interaction (GstRTSPConnection * conn) +{ + GTlsInteraction *result; + + g_return_val_if_fail (conn != NULL, NULL); + + if ((result = conn->tls_interaction)) + g_object_ref (result); + + return result; +} + static GstRTSPResult setup_tunneling (GstRTSPConnection * conn, GTimeVal * timeout, gchar * uri) { @@ -2298,6 +2356,8 @@ gst_rtsp_connection_free (GstRTSPConnection * conn) g_object_unref (conn->client); if (conn->tls_database) g_object_unref (conn->tls_database); + if (conn->tls_interaction) + g_object_unref (conn->tls_interaction); g_timer_destroy (conn->timer); gst_rtsp_url_free (conn->url); diff --git a/gst-libs/gst/rtsp/gstrtspconnection.h b/gst-libs/gst/rtsp/gstrtspconnection.h index bc2dc6268..464764b89 100644 --- a/gst-libs/gst/rtsp/gstrtspconnection.h +++ b/gst-libs/gst/rtsp/gstrtspconnection.h @@ -78,6 +78,8 @@ gboolean gst_rtsp_connection_set_tls_validation_flags (GstRTSPConnec GTlsCertificateFlags gst_rtsp_connection_get_tls_validation_flags (GstRTSPConnection * conn); void gst_rtsp_connection_set_tls_database (GstRTSPConnection * conn, GTlsDatabase * database); GTlsDatabase * gst_rtsp_connection_get_tls_database (GstRTSPConnection * conn); +void gst_rtsp_connection_set_tls_interaction (GstRTSPConnection * conn, GTlsInteraction * interaction); +GTlsInteraction * gst_rtsp_connection_get_tls_interaction (GstRTSPConnection * conn); /* sending/receiving raw bytes */ GstRTSPResult gst_rtsp_connection_read (GstRTSPConnection * conn, guint8 * data, |