From a931e31141df9b7b3acac6fb0e0c2c1f3698a0bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= Date: Wed, 21 Apr 2021 16:24:00 -0400 Subject: [PATCH] webrtc lib: Make the datachannel struct private This will prevent any unsafe access. Part-of: --- ext/webrtc/webrtcdatachannel.h | 2 + gst-libs/gst/webrtc/datachannel.c | 1 + gst-libs/gst/webrtc/datachannel.h | 63 ------------------------------- gst-libs/gst/webrtc/webrtc-priv.h | 63 +++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 63 deletions(-) diff --git a/ext/webrtc/webrtcdatachannel.h b/ext/webrtc/webrtcdatachannel.h index 53c11f2f57..463e6ce12f 100644 --- a/ext/webrtc/webrtcdatachannel.h +++ b/ext/webrtc/webrtcdatachannel.h @@ -26,6 +26,8 @@ #include #include "sctptransport.h" +#include "gst/webrtc/webrtc-priv.h" + G_BEGIN_DECLS GType webrtc_data_channel_get_type(void); diff --git a/gst-libs/gst/webrtc/datachannel.c b/gst-libs/gst/webrtc/datachannel.c index ee0be60304..4c0d2f2863 100644 --- a/gst-libs/gst/webrtc/datachannel.c +++ b/gst-libs/gst/webrtc/datachannel.c @@ -33,6 +33,7 @@ #endif #include "datachannel.h" +#include "webrtc-priv.h" #define GST_CAT_DEFAULT gst_webrtc_data_channel_debug GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); diff --git a/gst-libs/gst/webrtc/datachannel.h b/gst-libs/gst/webrtc/datachannel.h index 79b536f5b5..8146c65981 100644 --- a/gst-libs/gst/webrtc/datachannel.h +++ b/gst-libs/gst/webrtc/datachannel.h @@ -36,69 +36,6 @@ GType gst_webrtc_data_channel_get_type(void); #define GST_IS_WEBRTC_DATA_CHANNEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_WEBRTC_DATA_CHANNEL)) #define GST_WEBRTC_DATA_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_WEBRTC_DATA_CHANNEL,GstWebRTCDataChannelClass)) -#define GST_WEBRTC_DATA_CHANNEL_LOCK(channel) g_mutex_lock(&((GstWebRTCDataChannel *)(channel))->lock) -#define GST_WEBRTC_DATA_CHANNEL_UNLOCK(channel) g_mutex_unlock(&((GstWebRTCDataChannel *)(channel))->lock) - -/** - * GstWebRTCDataChannel: - * - * Since: 1.18 - */ -struct _GstWebRTCDataChannel -{ - GObject parent; - - GMutex lock; - - gchar *label; - gboolean ordered; - guint max_packet_lifetime; - guint max_retransmits; - gchar *protocol; - gboolean negotiated; - gint id; - GstWebRTCPriorityType priority; - GstWebRTCDataChannelState ready_state; - guint64 buffered_amount; - guint64 buffered_amount_low_threshold; - - gpointer _padding[GST_PADDING]; -}; - -/** - * GstWebRTCDataChannelClass: - * - * Since: 1.18 - */ -struct _GstWebRTCDataChannelClass -{ - GObjectClass parent_class; - - void (*send_data) (GstWebRTCDataChannel * channel, GBytes *data); - void (*send_string) (GstWebRTCDataChannel * channel, const gchar *str); - void (*close) (GstWebRTCDataChannel * channel); - - gpointer _padding[GST_PADDING]; -}; - -GST_WEBRTC_API -void gst_webrtc_data_channel_on_open (GstWebRTCDataChannel * channel); - -GST_WEBRTC_API -void gst_webrtc_data_channel_on_close (GstWebRTCDataChannel * channel); - -GST_WEBRTC_API -void gst_webrtc_data_channel_on_error (GstWebRTCDataChannel * channel, GError * error); - -GST_WEBRTC_API -void gst_webrtc_data_channel_on_message_data (GstWebRTCDataChannel * channel, GBytes * data); - -GST_WEBRTC_API -void gst_webrtc_data_channel_on_message_string (GstWebRTCDataChannel * channel, const gchar * str); - -GST_WEBRTC_API -void gst_webrtc_data_channel_on_buffered_amount_low (GstWebRTCDataChannel * channel); - GST_WEBRTC_API void gst_webrtc_data_channel_send_data (GstWebRTCDataChannel * channel, GBytes * data); diff --git a/gst-libs/gst/webrtc/webrtc-priv.h b/gst-libs/gst/webrtc/webrtc-priv.h index 3e9bf38160..203f852fa1 100644 --- a/gst-libs/gst/webrtc/webrtc-priv.h +++ b/gst-libs/gst/webrtc/webrtc-priv.h @@ -231,6 +231,69 @@ GST_WEBRTC_API void gst_webrtc_dtls_transport_set_transport (GstWebRTCDTLSTransport * transport, GstWebRTCICETransport * ice); +#define GST_WEBRTC_DATA_CHANNEL_LOCK(channel) g_mutex_lock(&((GstWebRTCDataChannel *)(channel))->lock) +#define GST_WEBRTC_DATA_CHANNEL_UNLOCK(channel) g_mutex_unlock(&((GstWebRTCDataChannel *)(channel))->lock) + +/** + * GstWebRTCDataChannel: + * + * Since: 1.18 + */ +struct _GstWebRTCDataChannel +{ + GObject parent; + + GMutex lock; + + gchar *label; + gboolean ordered; + guint max_packet_lifetime; + guint max_retransmits; + gchar *protocol; + gboolean negotiated; + gint id; + GstWebRTCPriorityType priority; + GstWebRTCDataChannelState ready_state; + guint64 buffered_amount; + guint64 buffered_amount_low_threshold; + + gpointer _padding[GST_PADDING]; +}; + +/** + * GstWebRTCDataChannelClass: + * + * Since: 1.18 + */ +struct _GstWebRTCDataChannelClass +{ + GObjectClass parent_class; + + void (*send_data) (GstWebRTCDataChannel * channel, GBytes *data); + void (*send_string) (GstWebRTCDataChannel * channel, const gchar *str); + void (*close) (GstWebRTCDataChannel * channel); + + gpointer _padding[GST_PADDING]; +}; + +GST_WEBRTC_API +void gst_webrtc_data_channel_on_open (GstWebRTCDataChannel * channel); + +GST_WEBRTC_API +void gst_webrtc_data_channel_on_close (GstWebRTCDataChannel * channel); + +GST_WEBRTC_API +void gst_webrtc_data_channel_on_error (GstWebRTCDataChannel * channel, GError * error); + +GST_WEBRTC_API +void gst_webrtc_data_channel_on_message_data (GstWebRTCDataChannel * channel, GBytes * data); + +GST_WEBRTC_API +void gst_webrtc_data_channel_on_message_string (GstWebRTCDataChannel * channel, const gchar * str); + +GST_WEBRTC_API +void gst_webrtc_data_channel_on_buffered_amount_low (GstWebRTCDataChannel * channel); + G_END_DECLS