Skip to content

feat(client): enable reliable UDP transport - #1777

Draft
Marc-André Moreau (mamoreau-devolutions) wants to merge 7 commits into
masterfrom
copilot/activex-udp-transport
Draft

feat(client): enable reliable UDP transport#1777
Marc-André Moreau (mamoreau-devolutions) wants to merge 7 commits into
masterfrom
copilot/activex-udp-transport

Conversation

@mamoreau-devolutions

@mamoreau-devolutions Marc-André Moreau (mamoreau-devolutions) commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Integrate the merged RDPEUDP2 and RDPEMT stack with direct client connections and route Soft-Sync-selected DVC traffic over the sideband.

Keep unsupported carriers on TCP, fall back when bootstrap fails, and renew transport security and correlation state during reconnects. Map the ActiveX compatibility property to the working transport.

Consume the complete MS-RDPEFS QueryInformation request body so valid Length, Padding, and QueryBuffer fields do not disconnect native ActiveX sessions. Add value-free failure categories for diagnosing transport and protocol fallback without exposing packet contents.

Copilot AI balanced review requested due to automatic review settings August 23, 2026 16:20
@github-actions github-actions Bot added maintainer-required Maintainer review or intervention is required risk/unknown Risk could not be determined automatically; needs maintainer-level scrutiny scope/ffi Affects native or .NET bindings size/L Size: up to 899 counted lines and 20 files; exceeds M in either measure labels Aug 23, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Prepares reliable RDP-UDP2 sidebands to reuse primary TLS certificate policy while retaining ActiveX’s truthful UDP-disabled behavior.

Changes:

  • Extracts reusable rustls certificate configuration.
  • Adds UDP TLS policy forwarding and current-thread tests.
  • Makes ActiveX UDP settings immutable after connection setup.

Reviewed changes

Copilot reviewed 13 out of 14 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
crates/ironrdp-tls/src/rustls.rs Reuses shared rustls configuration.
crates/ironrdp-tls/src/rustls_verifier.rs Adds shared certificate verifier construction.
crates/ironrdp-tls/src/lib.rs Exposes verifier support conditionally.
crates/ironrdp-tls/Cargo.toml Adds the verifier-only feature.
crates/ironrdp-testsuite-extra/tests/rdpeudp_tokio.rs Tests callback forwarding and current-thread operation.
crates/ironrdp-rdpeudp-tokio/src/transport.rs Adds sideband TLS settings.
crates/ironrdp-rdpeudp-tokio/src/tls.rs Uses shared TLS configuration.
crates/ironrdp-rdpeudp-tokio/src/multitransport.rs Forwards sideband TLS settings.
crates/ironrdp-rdpeudp-tokio/src/lib.rs Exports UdpTlsConfig.
crates/ironrdp-rdpeudp-tokio/README.md Documents transport scope and strict validation.
crates/ironrdp-rdpeudp-tokio/Cargo.toml Adds the public TLS dependency.
crates/ironrdp-activex/src/control.rs Seals the UDP policy with connection settings.
crates/ironrdp-activex/README.md Documents current UDP limitations.
Cargo.lock Records the new dependency edge.

Comment thread crates/ironrdp-rdpeudp-tokio/src/transport.rs Outdated
Comment thread crates/ironrdp-rdpeudp-tokio/src/multitransport.rs
@mamoreau-devolutions Marc-André Moreau (mamoreau-devolutions) changed the title fix: prepare ActiveX UDP transport integration feat(client): enable reliable UDP transport Aug 27, 2026
@github-actions github-actions Bot added scope/core Touches the core architectural tier size/XXL Size: 1300 or more counted lines or 50 or more files and removed size/L Size: up to 899 counted lines and 20 files; exceeds M in either measure labels Aug 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

This pull request is size/XXL, so automated review is disabled for it: a change this large is hard to review well in one piece, whether by a human or a model.

Please split it into focused pull requests that can each be reviewed on their own. When the parts build on each other, stacked pull requests let you open each one on top of the last without waiting for the one below to merge. Stacks require every branch to live in this repository, so from a fork, please open separate pull requests instead.

Automated review resumes once the change is below the size/XXL threshold.

Expose rustls client configuration independently of the selected stream backend, then apply it to RDP-UDP bootstrapping. This keeps strict validation and callbacks aligned with TCP without preventing native-TLS callers from using the UDP verifier.

Document reliable-only support and cover failure, reconnect, packet bounds, and the current-thread runtime used by ActiveX.
Keep DisableUdpTransport truthful while client-side UDP routing remains incomplete. The setting now follows connection-setting mutability, reports its effective disabled value, and rejects enablement with E_NOTIMPL.

Document the reliable-only lower stack and unsupported carrier paths.
Run synchronous certificate validation callbacks on an isolated Tokio thread so ActiveX UI prompts cannot starve the RDPEUDP driver on a current-thread runtime.

Cover delayed callbacks, update the bootstrap example, and fix the workspace atomic import lint.
Integrate the merged RDPEUDP2 and RDPEMT stack with direct client
connections and route Soft-Sync-selected DVC traffic over the sideband.

Keep unsupported carriers on TCP, fall back when bootstrap fails, and
renew transport security and correlation state during reconnects. Map
the ActiveX compatibility property to the working transport.
Share multitransport response policy between connection phases and keep
the post-activation handler exhaustive when UDP support is disabled.
Wake TLS and tunnel tasks when cancellation drops the UDP driver so
blocking certificate callbacks cannot leave parked runtime threads behind.
Decode and encode the Length, Padding, and QueryBuffer fields required
by MS-RDPEFS instead of rejecting them as trailing channel data.

Add value-free failure categories so native ActiveX diagnostics identify
the rejecting protocol layer without exposing packet contents.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintainer-required Maintainer review or intervention is required risk/unknown Risk could not be determined automatically; needs maintainer-level scrutiny scope/core Touches the core architectural tier scope/ffi Affects native or .NET bindings size/XXL Size: 1300 or more counted lines or 50 or more files

Development

Successfully merging this pull request may close these issues.

2 participants