Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions crates/ironrdp-client/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -749,6 +749,7 @@ impl PartialConfig {
request_data: None,
pointer_software_rendering: false,
multitransport_flags: None,
support_dyn_vc_gfx_protocol: false,
compression_type,
performance_flags: PerformanceFlags::default(),
timezone_info: TimezoneInfo::default(),
Expand Down
5 changes: 5 additions & 0 deletions crates/ironrdp-connector/src/connection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -706,6 +706,11 @@ fn create_gcc_blocks<'a>(
early_capability_flags |= ClientEarlyCapabilityFlags::WANT_32_BPP_SESSION;
}

if config.support_dyn_vc_gfx_protocol {
early_capability_flags |=
ClientEarlyCapabilityFlags::SUPPORT_DYN_VC_GFX_PROTOCOL;
}

Some(early_capability_flags)
},
dig_product_id: Some(config.dig_product_id.clone()),
Expand Down
28 changes: 28 additions & 0 deletions crates/ironrdp-connector/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,34 @@ pub struct Config {
/// [\[MS-RDPBCGR\] 2.2.1.3.7]: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/861f2bbb-6ca2-4c5a-8c44-0714fa901e70
/// [`MultiTransportChannelData`]: ironrdp_pdu::gcc::MultiTransportChannelData
pub multitransport_flags: Option<gcc::MultiTransportFlags>,

/// Advertise client support for the Graphics Pipeline Extension
/// (MS-RDPEGFX) over the Dynamic Virtual Channel.
///
/// When `true`, the `SUPPORT_DYN_VC_GFX_PROTOCOL` flag is set in
/// [`ClientEarlyCapabilityFlags`], telling the server it may
/// negotiate the `Microsoft::Windows::RDS::Graphics` channel for
/// surface-based graphics updates instead of (or in addition to)
/// the legacy slow-path bitmap protocol.
///
/// Setting this **without** wiring an EGFX-capable
/// [`DvcClientProcessor`] for that channel will cause modern
/// Windows servers to stop sending legacy bitmap updates and
/// route everything over EGFX — which the connector consumer
/// can't decode, leaving the desktop blank. To enable EGFX:
///
/// 1. Set this field to `true`.
/// 2. Attach a [`DvcClientProcessor`] for
/// `Microsoft::Windows::RDS::Graphics` via
/// [`ClientConnector::with_static_channel`] +
/// [`ironrdp_dvc::DrdynvcClient::with_dynamic_channel`].
/// 3. Decode `ironrdp_pdu::rdp::vc::dvc::gfx::ServerPdu` and
/// paint the surfaces.
///
/// Default: `false` (legacy slow-path bitmap only).
///
/// [`DvcClientProcessor`]: https://docs.rs/ironrdp-dvc/latest/ironrdp_dvc/trait.DvcClientProcessor.html
pub support_dyn_vc_gfx_protocol: bool,
}

ironrdp_core::assert_impl!(Config: Send, Sync);
Expand Down
1 change: 1 addition & 0 deletions crates/ironrdp-testsuite-core/tests/session/autodetect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ fn test_config() -> ironrdp_connector::Config {
enable_server_pointer: false,
pointer_software_rendering: false,
multitransport_flags: None,
support_dyn_vc_gfx_protocol: false,
performance_flags: Default::default(),
timezone_info: Default::default(),
alternate_shell: String::new(),
Expand Down
1 change: 1 addition & 0 deletions crates/ironrdp-testsuite-extra/tests/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,7 @@ fn default_client_config() -> connector::Config {
enable_server_pointer: true,
pointer_software_rendering: true,
multitransport_flags: None,
support_dyn_vc_gfx_protocol: false,
performance_flags: Default::default(),
timezone_info: Default::default(),
alternate_shell: String::new(),
Expand Down
1 change: 1 addition & 0 deletions crates/ironrdp-web/src/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1286,6 +1286,7 @@ fn build_config(
request_data: None,
pointer_software_rendering: false,
multitransport_flags: None,
support_dyn_vc_gfx_protocol: false,
performance_flags: PerformanceFlags::default(),
desktop_scale_factor: 0,
hardware_id: None,
Expand Down
1 change: 1 addition & 0 deletions crates/ironrdp/examples/screenshot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ fn build_config(
compression_type,
pointer_software_rendering: true,
multitransport_flags: None,
support_dyn_vc_gfx_protocol: false,
performance_flags: PerformanceFlags::default(),
desktop_scale_factor: 0,
hardware_id: None,
Expand Down
1 change: 1 addition & 0 deletions ffi/src/connector/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ pub mod ffi {
compression_type: None,
pointer_software_rendering: self.pointer_software_rendering.unwrap_or(false),
multitransport_flags: None,
support_dyn_vc_gfx_protocol: false,
performance_flags: self.performance_flags.ok_or("performance flag is missing")?,
desktop_scale_factor: 0,
hardware_id: None,
Expand Down
Loading