diff --git a/crates/ironrdp-client/src/config.rs b/crates/ironrdp-client/src/config.rs index f0df86f8..21a10d9f 100644 --- a/crates/ironrdp-client/src/config.rs +++ b/crates/ironrdp-client/src/config.rs @@ -320,6 +320,7 @@ impl Config { license_cache: None, no_server_pointer: args.no_server_pointer, autologon: args.autologon, + no_audio_playback: false, request_data: None, pointer_software_rendering: true, performance_flags: PerformanceFlags::default(), diff --git a/crates/ironrdp-connector/src/connection.rs b/crates/ironrdp-connector/src/connection.rs index 355673b2..cd3ef692 100644 --- a/crates/ironrdp-connector/src/connection.rs +++ b/crates/ironrdp-connector/src/connection.rs @@ -729,7 +729,6 @@ fn create_client_info_pdu(config: &Config, routing_addr: &SocketAddr) -> rdp::Cl | ClientInfoFlags::DISABLE_CTRL_ALT_DEL | ClientInfoFlags::LOGON_NOTIFY | ClientInfoFlags::LOGON_ERRORS - | ClientInfoFlags::NO_AUDIO_PLAYBACK | ClientInfoFlags::VIDEO_DISABLE | ClientInfoFlags::ENABLE_WINDOWS_KEY | ClientInfoFlags::MAXIMIZE_SHELL; @@ -742,6 +741,10 @@ fn create_client_info_pdu(config: &Config, routing_addr: &SocketAddr) -> rdp::Cl flags |= ClientInfoFlags::PASSWORD_IS_SC_PIN; } + if config.no_audio_playback { + flags |= ClientInfoFlags::NO_AUDIO_PLAYBACK; + } + let client_info = ClientInfo { credentials: Credentials { username: config.credentials.username().unwrap_or("").to_owned(), diff --git a/crates/ironrdp-connector/src/lib.rs b/crates/ironrdp-connector/src/lib.rs index 93c3cf0a..66679be8 100644 --- a/crates/ironrdp-connector/src/lib.rs +++ b/crates/ironrdp-connector/src/lib.rs @@ -177,6 +177,9 @@ pub struct Config { pub request_data: Option, /// If true, the INFO_AUTOLOGON flag is set in the [`ClientInfoPdu`](ironrdp_pdu::rdp::ClientInfoPdu) pub autologon: bool, + /// If true, the INFO_NOAUDIOPLAYBACK flag is set in the [`ClientInfoPdu`](ironrdp_pdu::rdp::ClientInfoPdu) + pub no_audio_playback: bool, + pub license_cache: Option>, // FIXME(@CBenoit): these are client-only options, not part of the connector. diff --git a/crates/ironrdp-testsuite-extra/tests/tests.rs b/crates/ironrdp-testsuite-extra/tests/tests.rs index d041b6f6..32b33c54 100644 --- a/crates/ironrdp-testsuite-extra/tests/tests.rs +++ b/crates/ironrdp-testsuite-extra/tests/tests.rs @@ -296,6 +296,7 @@ fn default_client_config() -> connector::Config { hardware_id: None, request_data: None, autologon: false, + no_audio_playback: false, license_cache: None, no_server_pointer: true, pointer_software_rendering: true, diff --git a/crates/ironrdp-web/src/session.rs b/crates/ironrdp-web/src/session.rs index 65251817..aaa82f70 100644 --- a/crates/ironrdp-web/src/session.rs +++ b/crates/ironrdp-web/src/session.rs @@ -860,6 +860,7 @@ fn build_config( platform: ironrdp::pdu::rdp::capability_sets::MajorPlatformType::UNSPECIFIED, no_server_pointer: false, autologon: false, + no_audio_playback: true, request_data: None, pointer_software_rendering: false, performance_flags: PerformanceFlags::default(), diff --git a/crates/ironrdp/examples/screenshot.rs b/crates/ironrdp/examples/screenshot.rs index 3852dd89..8c0c7e99 100644 --- a/crates/ironrdp/examples/screenshot.rs +++ b/crates/ironrdp/examples/screenshot.rs @@ -209,6 +209,7 @@ fn build_config(username: String, password: String, domain: Option) -> c no_server_pointer: true, request_data: None, autologon: false, + no_audio_playback: true, pointer_software_rendering: true, performance_flags: PerformanceFlags::default(), desktop_scale_factor: 0, diff --git a/ffi/src/connector/config.rs b/ffi/src/connector/config.rs index 6888339b..3c2113a1 100644 --- a/ffi/src/connector/config.rs +++ b/ffi/src/connector/config.rs @@ -39,6 +39,7 @@ pub mod ffi { pub platform: Option, pub no_server_pointer: Option, pub autologon: Option, + pub no_audio_playback: Option, pub pointer_software_rendering: Option, pub performance_flags: Option, } @@ -192,6 +193,7 @@ pub mod ffi { no_server_pointer: self.no_server_pointer.unwrap_or(false), autologon: self.autologon.unwrap_or(false), + no_audio_playback: self.no_audio_playback.unwrap_or(false), request_data: None, pointer_software_rendering: self.pointer_software_rendering.unwrap_or(false), performance_flags: self.performance_flags.ok_or("performance flag is missing")?,