Repository navigation
fix(dvc): drop data for a channel that is not open instead of failing - #2005
meanaverage (meanaverage) wants to merge 2 commits into
Conversation
|
Automated review will not run because this contributor is not yet eligible under the automation policy. Contributors become eligible after one qualifying IronRDP pull request is merged into |
A server can send data on a dynamic channel before it sees the client decline that channel in its Create Response. GNOME Remote Desktop does this for AUDIO_PLAYBACK_DVC right after the Create Request, so a client without an audio channel failed `process` with "access to non existing DVC channel" and the session ended about a second after connecting. Such data has nowhere to go: log it and drop it.
As with a declined channel on the server side, this is not a fault, and a server may keep sending such data, so a warning per PDU would flood the log.
067114b to
6407c22
Compare
|
Update: no rebase needed anymore. picky-krb 0.12.5 was yanked from crates.io (re-released as 0.13.0), so the API check builds again without changes to this branch. PR automation has been re-run here and passes. |
|
Please re-run automated review. Failure likely due to GitHub known incident. Github reported degraded Pull Requests service at 15:25 UTC and mitigation at 15:31 UTC—the same minute our request failed. This is strong evidence of an outage-related empty or incomplete response. Official incident timeline (https://www.githubstatus.com/incidents/djlmxz2zd0j7) |
Problem
A server can send data on a dynamic channel before it has seen the client decline that channel in its Create Response. GNOME Remote Desktop (46.3, headless mode) does this for
AUDIO_PLAYBACK_DVC: a client without an audio channel answers the Create Request with a failure status, but the server's first data PDU is already on the wire.DrdynvcClient::process_datatreated that as an error (access to non existing DVC channel). The error ends the active session, so the connection drops about a second after it is established.Change
Log the data (
debug!, with the channel id, asDrdynvcServerdoes for a declined channel) and drop it. Data for open channels is routed exactly as before; the tunnel / Soft-Sync checks are untouched.Testing
dvc::client::data_for_a_channel_that_is_not_open_is_droppedinironrdp-testsuite-core. It fails onmasterwith the error above and passes with this change; the other DVC tests pass.cargo xtask check fmt,lints,locks,typospass.ironrdp-webconnects to GNOME Remote Desktop 46.3 (headless, Ubuntu 24.04) and stays connected. Without it, the session ends right after the audio channel is refused.Related: #1446
Prepared with AI assistance; I reviewed the change and ran the tests above.