Skip to content

Commit

Permalink
[GStreamer][WebRTC] Improve error checking in DataChannel backend
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=273932

Reviewed by Xabier Rodriguez-Calvar.

Use the new gst_webrtc_data_channel_send_{string,data}_full APIs when available. Also fix
GST_CHECK_VERSION ifdefs, those should use stable release numbering unless the needed check is for a
development version not shipped yet.

* Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:
(WebCore::GStreamerDataChannelHandler::sendStringData):
(WebCore::GStreamerDataChannelHandler::sendRawData):
(WebCore::GStreamerDataChannelHandler::checkState):

Canonical link: https://commits.webkit.org/278611@main
  • Loading branch information
philn committed May 10, 2024
1 parent 6e05058 commit b023c54
Showing 1 changed file with 19 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -193,17 +193,35 @@ bool GStreamerDataChannelHandler::sendStringData(const CString& text)
{
DC_DEBUG("Sending string of length: %zu", text.length());
DC_TRACE("Sending string %s", text.data());
#if GST_CHECK_VERSION(1, 22, 0)
GUniqueOutPtr<GError> error;
// https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1958
gst_webrtc_data_channel_send_string_full(GST_WEBRTC_DATA_CHANNEL(m_channel.get()), text.data(), &error.outPtr());
if (error)
DC_WARNING("Unable to send string, error: %s", error->message);
return !error;
#else
g_signal_emit_by_name(m_channel.get(), "send-string", text.data());
return true;
#endif
}

bool GStreamerDataChannelHandler::sendRawData(std::span<const uint8_t> data)
{
DC_DEBUG("Sending raw data of length: %zu", data.size());
DC_MEMDUMP("Sending raw data", data.data(), data.size());
auto bytes = adoptGRef(g_bytes_new(data.data(), data.size()));
#if GST_CHECK_VERSION(1, 22, 0)
GUniqueOutPtr<GError> error;
// https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1958
gst_webrtc_data_channel_send_data_full(GST_WEBRTC_DATA_CHANNEL(m_channel.get()), bytes.get(), &error.outPtr());
if (error)
DC_WARNING("Unable to send raw data, error: %s", error->message);
return !error;
#else
g_signal_emit_by_name(m_channel.get(), "send-data", bytes.get());
return true;
#endif
}

void GStreamerDataChannelHandler::close()
Expand Down Expand Up @@ -240,7 +258,7 @@ bool GStreamerDataChannelHandler::checkState()

RTCDataChannelState state;
switch (channelState) {
#if !GST_CHECK_VERSION(1, 21, 1)
#if !GST_CHECK_VERSION(1, 22, 0)
// Removed in https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2099.
case GST_WEBRTC_DATA_CHANNEL_STATE_NEW:
#endif
Expand Down

0 comments on commit b023c54

Please sign in to comment.