mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
rtspsrc: Add a GTlsInteraction property
It can be used for TLS client authentication. https://bugzilla.gnome.org/show_bug.cgi?id=750471
This commit is contained in:
parent
3067a60d8e
commit
b0b3e8e2cc
2 changed files with 32 additions and 0 deletions
|
@ -197,6 +197,7 @@ gst_rtsp_src_buffer_mode_get_type (void)
|
||||||
#define DEFAULT_USE_PIPELINE_CLOCK FALSE
|
#define DEFAULT_USE_PIPELINE_CLOCK FALSE
|
||||||
#define DEFAULT_TLS_VALIDATION_FLAGS G_TLS_CERTIFICATE_VALIDATE_ALL
|
#define DEFAULT_TLS_VALIDATION_FLAGS G_TLS_CERTIFICATE_VALIDATE_ALL
|
||||||
#define DEFAULT_TLS_DATABASE NULL
|
#define DEFAULT_TLS_DATABASE NULL
|
||||||
|
#define DEFAULT_TLS_INTERACTION NULL
|
||||||
#define DEFAULT_DO_RETRANSMISSION TRUE
|
#define DEFAULT_DO_RETRANSMISSION TRUE
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -232,6 +233,7 @@ enum
|
||||||
PROP_SDES,
|
PROP_SDES,
|
||||||
PROP_TLS_VALIDATION_FLAGS,
|
PROP_TLS_VALIDATION_FLAGS,
|
||||||
PROP_TLS_DATABASE,
|
PROP_TLS_DATABASE,
|
||||||
|
PROP_TLS_INTERACTION,
|
||||||
PROP_DO_RETRANSMISSION
|
PROP_DO_RETRANSMISSION
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -639,6 +641,20 @@ gst_rtspsrc_class_init (GstRTSPSrcClass * klass)
|
||||||
"TLS database with anchor certificate authorities used to validate the server certificate",
|
"TLS database with anchor certificate authorities used to validate the server certificate",
|
||||||
G_TYPE_TLS_DATABASE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_TYPE_TLS_DATABASE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstRTSPSrc::tls-interaction:
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
g_object_class_install_property (gobject_class, PROP_TLS_INTERACTION,
|
||||||
|
g_param_spec_object ("tls-interaction", "TLS interaction",
|
||||||
|
"A GTlsInteraction object to promt the user for password or certificate",
|
||||||
|
G_TYPE_TLS_INTERACTION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstRTSPSrc::do-retransmission:
|
* GstRTSPSrc::do-retransmission:
|
||||||
*
|
*
|
||||||
|
@ -797,6 +813,7 @@ gst_rtspsrc_init (GstRTSPSrc * src)
|
||||||
src->sdes = NULL;
|
src->sdes = NULL;
|
||||||
src->tls_validation_flags = DEFAULT_TLS_VALIDATION_FLAGS;
|
src->tls_validation_flags = DEFAULT_TLS_VALIDATION_FLAGS;
|
||||||
src->tls_database = DEFAULT_TLS_DATABASE;
|
src->tls_database = DEFAULT_TLS_DATABASE;
|
||||||
|
src->tls_interaction = DEFAULT_TLS_INTERACTION;
|
||||||
src->do_retransmission = DEFAULT_DO_RETRANSMISSION;
|
src->do_retransmission = DEFAULT_DO_RETRANSMISSION;
|
||||||
|
|
||||||
/* get a list of all extensions */
|
/* get a list of all extensions */
|
||||||
|
@ -846,6 +863,9 @@ gst_rtspsrc_finalize (GObject * object)
|
||||||
if (rtspsrc->tls_database)
|
if (rtspsrc->tls_database)
|
||||||
g_object_unref (rtspsrc->tls_database);
|
g_object_unref (rtspsrc->tls_database);
|
||||||
|
|
||||||
|
if (rtspsrc->tls_interaction)
|
||||||
|
g_object_unref (rtspsrc->tls_interaction);
|
||||||
|
|
||||||
/* free locks */
|
/* free locks */
|
||||||
g_rec_mutex_clear (&rtspsrc->stream_rec_lock);
|
g_rec_mutex_clear (&rtspsrc->stream_rec_lock);
|
||||||
g_rec_mutex_clear (&rtspsrc->state_rec_lock);
|
g_rec_mutex_clear (&rtspsrc->state_rec_lock);
|
||||||
|
@ -1062,6 +1082,10 @@ gst_rtspsrc_set_property (GObject * object, guint prop_id, const GValue * value,
|
||||||
g_clear_object (&rtspsrc->tls_database);
|
g_clear_object (&rtspsrc->tls_database);
|
||||||
rtspsrc->tls_database = g_value_dup_object (value);
|
rtspsrc->tls_database = g_value_dup_object (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_TLS_INTERACTION:
|
||||||
|
g_clear_object (&rtspsrc->tls_interaction);
|
||||||
|
rtspsrc->tls_interaction = g_value_dup_object (value);
|
||||||
|
break;
|
||||||
case PROP_DO_RETRANSMISSION:
|
case PROP_DO_RETRANSMISSION:
|
||||||
rtspsrc->do_retransmission = g_value_get_boolean (value);
|
rtspsrc->do_retransmission = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
|
@ -1196,6 +1220,9 @@ gst_rtspsrc_get_property (GObject * object, guint prop_id, GValue * value,
|
||||||
case PROP_TLS_DATABASE:
|
case PROP_TLS_DATABASE:
|
||||||
g_value_set_object (value, rtspsrc->tls_database);
|
g_value_set_object (value, rtspsrc->tls_database);
|
||||||
break;
|
break;
|
||||||
|
case PROP_TLS_INTERACTION:
|
||||||
|
g_value_set_object (value, rtspsrc->tls_interaction);
|
||||||
|
break;
|
||||||
case PROP_DO_RETRANSMISSION:
|
case PROP_DO_RETRANSMISSION:
|
||||||
g_value_set_boolean (value, rtspsrc->do_retransmission);
|
g_value_set_boolean (value, rtspsrc->do_retransmission);
|
||||||
break;
|
break;
|
||||||
|
@ -4351,6 +4378,10 @@ gst_rtsp_conninfo_connect (GstRTSPSrc * src, GstRTSPConnInfo * info,
|
||||||
if (src->tls_database)
|
if (src->tls_database)
|
||||||
gst_rtsp_connection_set_tls_database (info->connection,
|
gst_rtsp_connection_set_tls_database (info->connection,
|
||||||
src->tls_database);
|
src->tls_database);
|
||||||
|
|
||||||
|
if (src->tls_interaction)
|
||||||
|
gst_rtsp_connection_set_tls_interaction (info->connection,
|
||||||
|
src->tls_interaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->url->transports & GST_RTSP_LOWER_TRANS_HTTP)
|
if (info->url->transports & GST_RTSP_LOWER_TRANS_HTTP)
|
||||||
|
|
|
@ -234,6 +234,7 @@ struct _GstRTSPSrc {
|
||||||
GstStructure *sdes;
|
GstStructure *sdes;
|
||||||
GTlsCertificateFlags tls_validation_flags;
|
GTlsCertificateFlags tls_validation_flags;
|
||||||
GTlsDatabase *tls_database;
|
GTlsDatabase *tls_database;
|
||||||
|
GTlsInteraction *tls_interaction;
|
||||||
gboolean do_retransmission;
|
gboolean do_retransmission;
|
||||||
|
|
||||||
/* state */
|
/* state */
|
||||||
|
|
Loading…
Reference in a new issue