From 7f9bb150555606230f00b2caa0894243859f19d8 Mon Sep 17 00:00:00 2001 From: Johan Sternerup Date: Mon, 3 May 2021 10:45:42 +0200 Subject: [PATCH] webrtcbin: Expose SCTP Transport Being able to access the SCTP Transport object from the application means the application can access the associated DTLS Transport object and its ICE Transport object. This means we can observe the ICE state also for a data-channel-only session. The collated ice-connection-state on webrtcbin only includes the ICE Transport objects that resides on the RTP transceivers (which is exactly how it is specified in https://w3c.github.io/webrtc-pc/#rtciceconnectionstate-enum). For the consent freshness functionality (RFC 7675) to work the ICE state must be accessible and consequently the SCTP transport must be accessible for enabling consent freshness checking for a data-channel-only session. Part-of: --- docs/plugins/gst_plugins_cache.json | 11 +++++++++++ ext/webrtc/gstwebrtcbin.c | 19 ++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/docs/plugins/gst_plugins_cache.json b/docs/plugins/gst_plugins_cache.json index dd166e4..86dd1c5 100644 --- a/docs/plugins/gst_plugins_cache.json +++ b/docs/plugins/gst_plugins_cache.json @@ -227981,6 +227981,17 @@ "type": "GstWebRTCSessionDescription", "writable": false }, + "sctp-transport": { + "blurb": "The WebRTC SCTP Transport", + "conditionally-available": false, + "construct": false, + "construct-only": false, + "controllable": false, + "mutable": "null", + "readable": true, + "type": "GstObject", + "writable": false + }, "signaling-state": { "blurb": "The signaling state of this element", "conditionally-available": false, diff --git a/ext/webrtc/gstwebrtcbin.c b/ext/webrtc/gstwebrtcbin.c index fdc53f5..c6855fc 100644 --- a/ext/webrtc/gstwebrtcbin.c +++ b/ext/webrtc/gstwebrtcbin.c @@ -467,7 +467,8 @@ enum PROP_BUNDLE_POLICY, PROP_ICE_TRANSPORT_POLICY, PROP_ICE_AGENT, - PROP_LATENCY + PROP_LATENCY, + PROP_SCTP_TRANSPORT, }; static guint gst_webrtc_bin_signals[LAST_SIGNAL] = { 0 }; @@ -6914,6 +6915,9 @@ gst_webrtc_bin_get_property (GObject * object, guint prop_id, case PROP_LATENCY: g_value_set_uint (value, webrtc->priv->jb_latency); break; + case PROP_SCTP_TRANSPORT: + g_value_set_object (value, webrtc->priv->sctp_transport); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -7192,6 +7196,19 @@ gst_webrtc_bin_class_init (GstWebRTCBinClass * klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** + * GstWebRTCBin:sctp-transport: + * + * The WebRTC SCTP Transport + * + * Since: 1.20 + */ + g_object_class_install_property (gobject_class, + PROP_SCTP_TRANSPORT, + g_param_spec_object ("sctp-transport", "WebRTC SCTP Transport", + "The WebRTC SCTP Transport", + GST_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + /** * GstWebRTCBin::create-offer: * @object: the #webrtcbin * @options: (nullable): create-offer options -- 2.7.4