}
//LCOV_EXCL_STOP
+static webrtc_data_channel_s *__prepare_data_channel(GObject *dc_obj)
+{
+ webrtc_data_channel_s *_channel;
+
+ RET_VAL_IF(dc_obj == NULL, NULL, "dc_obj is NULL");
+
+ _channel = g_new0(webrtc_data_channel_s, 1);
+ g_mutex_init(&_channel->mutex);
+ g_mutex_lock(&_channel->mutex);
+
+ _channel->channel = dc_obj;
+
+ _connect_and_append_signal(&_channel->signals, dc_obj, "on-open", G_CALLBACK(__data_channel_on_open_cb), _channel);
+ _connect_and_append_signal(&_channel->signals, dc_obj, "on-message-string", G_CALLBACK(__data_channel_on_message_string_cb), _channel);
+ _connect_and_append_signal(&_channel->signals, dc_obj, "on-message-data", G_CALLBACK(__data_channel_on_message_data_cb), _channel);
+ _connect_and_append_signal(&_channel->signals, dc_obj, "on-error", G_CALLBACK(__data_channel_on_error_cb), _channel);
+ _connect_and_append_signal(&_channel->signals, dc_obj, "on-close", G_CALLBACK(__data_channel_on_close_cb), _channel);
+ _connect_and_append_signal(&_channel->signals, dc_obj, "on-buffered-amount-low", G_CALLBACK(__data_channel_on_buffered_amount_low_cb), _channel);
+
+ g_mutex_unlock(&_channel->mutex);
+
+ return _channel;
+}
+
void _webrtcbin_on_data_channel_cb(GstElement *webrtcbin, GObject *data_channel, gpointer user_data)
{
webrtc_s *webrtc = (webrtc_s *)user_data;
RET_IF(webrtc == NULL, "webrtc is NULL");
- channel = g_new0(webrtc_data_channel_s, 1);
- g_mutex_init(&channel->mutex);
- g_mutex_lock(&channel->mutex);
-
- channel->channel = gst_object_ref(data_channel);
+ if (!(channel = __prepare_data_channel(gst_object_ref(data_channel))))
+ return;
LOG_INFO("channel[%p, %p, %s] user_data[%p]", channel, data_channel, GST_OBJECT_NAME(data_channel), user_data);
return;
}
- _connect_and_append_signal(&channel->signals, channel->channel, "on-open", G_CALLBACK(__data_channel_on_open_cb), channel);
- _connect_and_append_signal(&channel->signals, channel->channel, "on-message-string", G_CALLBACK(__data_channel_on_message_string_cb), channel);
- _connect_and_append_signal(&channel->signals, channel->channel, "on-message-data", G_CALLBACK(__data_channel_on_message_data_cb), channel);
- _connect_and_append_signal(&channel->signals, channel->channel, "on-error", G_CALLBACK(__data_channel_on_error_cb), channel);
- _connect_and_append_signal(&channel->signals, channel->channel, "on-close", G_CALLBACK(__data_channel_on_close_cb), channel);
-
- g_mutex_unlock(&channel->mutex);
-
g_mutex_lock(&webrtc->mutex);
if (webrtc->state == WEBRTC_STATE_NEGOTIATING)
_post_state_cb_in_idle(webrtc, WEBRTC_STATE_PLAYING);
return WEBRTC_ERROR_INVALID_OPERATION;
}
- _channel = g_new0(webrtc_data_channel_s, 1);
- g_mutex_init(&_channel->mutex);
- g_mutex_lock(&_channel->mutex);
-
- _channel->channel = data_channel;
+ if (!(_channel = __prepare_data_channel(data_channel)))
+ return WEBRTC_ERROR_INVALID_OPERATION;
LOG_INFO("channel[%p, %p, label:%s] is created", _channel, data_channel, label);
- _connect_and_append_signal(&_channel->signals, data_channel, "on-open", G_CALLBACK(__data_channel_on_open_cb), _channel);
- _connect_and_append_signal(&_channel->signals, data_channel, "on-message-string", G_CALLBACK(__data_channel_on_message_string_cb), _channel);
- _connect_and_append_signal(&_channel->signals, data_channel, "on-message-data", G_CALLBACK(__data_channel_on_message_data_cb), _channel);
- _connect_and_append_signal(&_channel->signals, data_channel, "on-error", G_CALLBACK(__data_channel_on_error_cb), _channel);
- _connect_and_append_signal(&_channel->signals, data_channel, "on-close", G_CALLBACK(__data_channel_on_close_cb), _channel);
- _connect_and_append_signal(&_channel->signals, data_channel, "on-buffered-amount-low", G_CALLBACK(__data_channel_on_buffered_amount_low_cb), _channel);
-
*channel = _channel;
- g_mutex_unlock(&_channel->mutex);
-
return WEBRTC_ERROR_NONE;
}