diff --git a/apps/desktop/src/gui/runtime/peer_data_callbacks.cpp b/apps/desktop/src/gui/runtime/peer_data_callbacks.cpp index fdeb8910..0b42db98 100644 --- a/apps/desktop/src/gui/runtime/peer_data_callbacks.cpp +++ b/apps/desktop/src/gui/runtime/peer_data_callbacks.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -233,7 +234,10 @@ void PeerEventHandler::OnReceiveDataBuffer( return; } if (remote_action.type == ControlType::video_settings) { - if (source_id != runtime->control_data_label_ || + // Web multiplexes its reliable control actions on a single DataChannel. + // Accept that transport's source alias while retaining controller admission. + if ((source_id != runtime->control_data_label_ && + source_id != kWebControlStream) || !runtime->IsAuthorizedController(remote_id)) return; const auto& settings = remote_action.vs; @@ -242,6 +246,10 @@ void PeerEventHandler::OnReceiveDataBuffer( runtime->peer_, remote_id.data(), remote_id.size(), static_cast(settings.quality), settings.frame_rate, static_cast(settings.preference)) == 0; + LOG_INFO("Video settings: peer={} source={} request={} quality={} fps={} " + "preference={} accepted={}", + remote_id, source_id, settings.request_id, settings.quality, + settings.frame_rate, settings.preference, remote_action.vs.accepted); remote_action.type = ControlType::video_settings_status; const auto message = remote_action.to_json(); SendReliableDataFrameToPeer(runtime->peer_, message.data(), message.size(), diff --git a/deps/submodules/minirtc b/deps/submodules/minirtc index 81cc3d7d..c6d44909 160000 --- a/deps/submodules/minirtc +++ b/deps/submodules/minirtc @@ -1 +1 @@ -Subproject commit 81cc3d7dc57a2197c7f2c3e5c1416b4f62fa0df2 +Subproject commit c6d44909b05fd6720d97418973ab9a6b50722bc4 diff --git a/libs/wire/include/stream_names.h b/libs/wire/include/stream_names.h index b25cde74..9a1aae4f 100644 --- a/libs/wire/include/stream_names.h +++ b/libs/wire/include/stream_names.h @@ -16,6 +16,8 @@ inline constexpr char kDataStream[] = "data"; inline constexpr char kMouseStream[] = "mouse"; inline constexpr char kKeyboardStream[] = "keyboard"; inline constexpr char kControlStream[] = "control_data"; +// MiniRTC's reliable WebRTC control channel uses this legacy callback source. +inline constexpr char kWebControlStream[] = "data-stream"; inline constexpr char kFileStream[] = "file"; inline constexpr char kFileFeedbackStream[] = "file_feedback"; inline constexpr char kClipboardStream[] = "clipboard";