feat(dvc): route channels over Soft-Sync tunnels - #1826
Open
Marc-André Moreau (mamoreau-devolutions) wants to merge 2 commits into
Open
feat(dvc): route channels over Soft-Sync tunnels#1826Marc-André Moreau (mamoreau-devolutions) wants to merge 2 commits into
Marc-André Moreau (mamoreau-devolutions) wants to merge 2 commits into
Conversation
Marc-André Moreau (mamoreau-devolutions)
deployed
to
llm-providers
August 29, 2026 00:03 — with
GitHub Actions
Active
Copilot started reviewing on behalf of
Marc-André Moreau (mamoreau-devolutions)
August 29, 2026 00:03
View session
Contributor
There was a problem hiding this comment.
Pull request overview
Adds Soft-Sync tunnel-aware routing for client DVC messages.
Changes:
- Introduces
DvcMessageBatch. - Validates channel-to-tunnel routing.
- Adds tunnel lifecycle APIs and tests.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
crates/ironrdp-dvc/src/lib.rs |
Defines routed DVC message batches. |
crates/ironrdp-dvc/src/client.rs |
Implements Soft-Sync routing and tunnel handling. |
crates/ironrdp-testsuite-core/tests/dvc/client.rs |
Tests unavailable tunnels and batch validation. |
Marc-André Moreau (mamoreau-devolutions)
force-pushed
the
copilot/dvc-soft-sync-routing
branch
from
August 29, 2026 00:17
309cb43 to
2bce753
Compare
Marc-André Moreau (mamoreau-devolutions)
deployed
to
llm-providers
August 29, 2026 00:17 — with
GitHub Actions
Active
Add DvcMessageBatch to carry a dynamic channel ID alongside its encoded SVC messages, and validate that a Soft-Sync-selected tunnel matches the channel before forwarding tunneled DRDYNVC data. DrdynvcClient::process_tunnel now takes the tunnel type it was called for and returns a DvcMessageBatch instead of a bare message list, so a caller juggling several tunnels can route responses back onto the correct one. disable_soft_sync_tunnel and has_channels_on_tunnel let a caller retire a tunnel and check whether Soft-Sync ever routed a channel onto it. A Soft-Sync request that selects a tunnel the client does not have available is still rejected outright: MS-RDPEDYC has the server start sending tunneled data for those channels as soon as it sends the request, before it sees our response, so there is no way to drop the tunnel from the response and keep the channel usable on the main connection instead.
Marc-André Moreau (mamoreau-devolutions)
force-pushed
the
copilot/dvc-soft-sync-routing
branch
from
August 29, 2026 00:33
2bce753 to
8b7eda8
Compare
Marc-André Moreau (mamoreau-devolutions)
deployed
to
llm-providers
August 29, 2026 00:33 — with
GitHub Actions
Active
…ests Two tests added in #1822 constructed a raw tokio::sync::mpsc::channel instead of the OutputEventReceiver wrapper introduced by #1815, breaking 'cargo test --workspace --locked --no-run' on master for every PR. Use the existing output_channel() constructor, matching every other test in this module. Fixes #1830
Marc-André Moreau (mamoreau-devolutions)
had a problem deploying
to
llm-providers
August 29, 2026 02:03 — with
GitHub Actions
Error
Marc-André Moreau (mamoreau-devolutions)
deployed
to
llm-providers
August 29, 2026 02:04 — with
GitHub Actions
Active
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add DvcMessageBatch to carry a dynamic channel ID alongside its
encoded SVC messages, and validate that a Soft-Sync-selected tunnel
matches the channel before forwarding tunneled DRDYNVC data.
DrdynvcClient::process_tunnel now takes the tunnel type it was
called for and returns a DvcMessageBatch instead of a bare message
list, so a caller juggling several tunnels can route responses back
onto the correct one. disable_soft_sync_tunnel and
has_channels_on_tunnel let a caller retire a tunnel and check
whether Soft-Sync ever routed a channel onto it.
When a Soft-Sync request selects a tunnel the client does not have
available, the request is rejected outright: per MS-RDPEDYC
3.2.5.3.1 the server manager starts sending data for the selected
channels on that tunnel as soon as it sends the request, before it
sees our response, so silently omitting an unavailable tunnel from
the response would lose that inbound data.
Also includes an unrelated one-line fix in
crates/ironrdp-daemon/src/daemon.rs (separate commit): two tests
added in #1822 constructed a raw tokio::sync::mpsc::channel instead
of the OutputEventReceiver wrapper from #1815, which breaks
cargo test --workspace --locked --no-runon master for every PRregardless of what it changes. Bundled here to unblock this PR's CI;
tracked upstream as #1830.