summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/libs/gst-plugins-base-libs-sections.txt4
-rw-r--r--gst-libs/gst/rtsp/gstrtspconnection.c62
-rw-r--r--gst-libs/gst/rtsp/gstrtspconnection.h2
3 files changed, 67 insertions, 1 deletions
diff --git a/docs/libs/gst-plugins-base-libs-sections.txt b/docs/libs/gst-plugins-base-libs-sections.txt
index 26e1c1cb7..06f2ad641 100644
--- a/docs/libs/gst-plugins-base-libs-sections.txt
+++ b/docs/libs/gst-plugins-base-libs-sections.txt
@@ -1523,6 +1523,10 @@ gst_rtsp_connection_get_write_socket
gst_rtsp_connection_get_tls
gst_rtsp_connection_set_tls_validation_flags
gst_rtsp_connection_get_tls_validation_flags
+gst_rtsp_connection_set_tls_database
+gst_rtsp_connection_get_tls_database
+gst_rtsp_connection_set_tls_interaction
+gst_rtsp_connection_get_tls_interaction
GstRTSPWatch
GstRTSPWatchFuncs
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,