static void kms_webrtc_sctp_connection_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { KmsWebRtcSctpConnection *self = KMS_WEBRTC_SCTP_CONNECTION (object); switch (prop_id) { case PROP_ADDED: g_value_set_boolean (value, self->priv->added); break; case PROP_CONNECTED: g_value_set_boolean (value, self->priv->connected); break; case PROP_IS_CLIENT:{ gboolean is_client; g_object_get (G_OBJECT (self->priv->tr->sink->dtlssrtpenc), "is-client", &is_client, NULL); g_value_set_boolean (value, is_client); break; } case PROP_MIN_PORT: g_value_set_uint (value, self->parent.min_port); break; case PROP_MAX_PORT: g_value_set_uint (value, self->parent.max_port); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static GstPad * kms_webrtc_sctp_connection_request_data_sink (KmsIRtpConnection * base_conn) { KmsWebRtcSctpConnection *self = KMS_WEBRTC_SCTP_CONNECTION (base_conn); return gst_element_get_request_pad (self->priv->tr->sink->dtlssrtpenc, "data_sink"); }
static void kms_webrtc_sctp_connection_sink_sync_state_with_parent (KmsIRtpConnection * base_conn) { KmsWebRtcSctpConnection *self = KMS_WEBRTC_SCTP_CONNECTION (base_conn); GstElement *element = GST_ELEMENT (self->priv->tr->sink); gst_element_sync_state_with_parent_target_state (element); }
static gchar * kms_webrtc_sctp_connection_get_certificate_pem (KmsWebRtcBaseConnection * base_conn) { KmsWebRtcSctpConnection *self = KMS_WEBRTC_SCTP_CONNECTION (base_conn); gchar *pem; g_object_get (G_OBJECT (self->priv->tr->src->dtlssrtpdec), "pem", &pem, NULL); return pem; }
static void kms_webrtc_sctp_connection_add (KmsIRtpConnection * base_conn, GstBin * bin, gboolean active) { KmsWebRtcSctpConnection *self = KMS_WEBRTC_SCTP_CONNECTION (base_conn); KmsWebRtcSctpConnectionPrivate *priv = self->priv; KmsWebRtcTransport *tr = priv->tr; g_object_set (G_OBJECT (tr->sink->dtlssrtpenc), "is-client", active, NULL); gst_bin_add (bin, g_object_ref (self->priv->tr->src)); gst_bin_add (bin, g_object_ref (self->priv->tr->sink)); }
static void kms_webrtc_sctp_connection_finalize (GObject * object) { KmsWebRtcSctpConnection *self = KMS_WEBRTC_SCTP_CONNECTION (object); KmsWebRtcSctpConnectionPrivate *priv = self->priv; GST_DEBUG_OBJECT (self, "finalize"); kms_webrtc_transport_destroy (priv->tr); /* chain up */ G_OBJECT_CLASS (kms_webrtc_sctp_connection_parent_class)->finalize (object); }
KmsWebRtcSctpConnection * kms_webrtc_sctp_connection_new (KmsIceBaseAgent * agent, GMainContext * context, const gchar * name, guint16 min_port, guint16 max_port, gchar * pem_certificate) { GObject *obj; KmsWebRtcBaseConnection *base_conn; KmsWebRtcSctpConnection *conn; KmsWebRtcSctpConnectionPrivate *priv; obj = g_object_new (KMS_TYPE_WEBRTC_SCTP_CONNECTION, "min-port", min_port, "max-port", max_port, NULL); base_conn = KMS_WEBRTC_BASE_CONNECTION (obj); conn = KMS_WEBRTC_SCTP_CONNECTION (obj); priv = conn->priv; if (!kms_webrtc_base_connection_configure (base_conn, agent, name)) { g_object_unref (obj); return NULL; } priv->tr = kms_webrtc_transport_new (agent, base_conn->stream_id, NICE_COMPONENT_TYPE_SCTP, pem_certificate); if (priv->tr == NULL) { GST_ERROR_OBJECT (obj, "Cannot create KmsWebRtcSctpConnection."); g_object_unref (obj); return NULL; } g_signal_connect (priv->tr->sink->dtlssrtpenc, "on-key-set", G_CALLBACK (dtls_connected_cb), conn); return conn; }
static void kms_webrtc_sctp_connection_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { KmsWebRtcSctpConnection *self = KMS_WEBRTC_SCTP_CONNECTION (object); switch (prop_id) { case PROP_ADDED: self->priv->added = g_value_get_boolean (value); break; case PROP_CONNECTED: self->priv->connected = g_value_get_boolean (value); break; case PROP_MIN_PORT: self->parent.min_port = g_value_get_uint (value); break; case PROP_MAX_PORT: self->parent.max_port = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }