feat(client): enable reliable UDP transport - #1777
feat(client): enable reliable UDP transport#1777Marc-André Moreau (mamoreau-devolutions) wants to merge 7 commits into
Conversation
There was a problem hiding this comment.
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. |
aad8335 to
a3979c7
Compare
a3979c7 to
f142765
Compare
f142765 to
343718c
Compare
343718c to
24e1d80
Compare
24e1d80 to
ebee7fa
Compare
|
This pull request is 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 |
6fe2038 to
de3c648
Compare
fb9404a to
fadc12b
Compare
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.
fadc12b to
c656380
Compare
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.