diff --git a/benches/src/perfenc.rs b/benches/src/perfenc.rs index 00e1427b1..30ce2248a 100644 --- a/benches/src/perfenc.rs +++ b/benches/src/perfenc.rs @@ -3,15 +3,16 @@ #![allow(clippy::print_stdout)] use core::time::Duration; -use std::{io::Write, time::Instant}; +use std::io::Write; +use std::time::Instant; use anyhow::Context; use ironrdp::pdu::rdp::capability_sets::{CmdFlags, EntropyBits}; -use ironrdp::server::{ - bench::encoder::{UpdateEncoder, UpdateEncoderCodecs}, - BitmapUpdate, DesktopSize, DisplayUpdate, PixelFormat, RdpServerDisplayUpdates, -}; -use tokio::{fs::File, io::AsyncReadExt, time::sleep}; +use ironrdp::server::bench::encoder::{UpdateEncoder, UpdateEncoderCodecs}; +use ironrdp::server::{BitmapUpdate, DesktopSize, DisplayUpdate, PixelFormat, RdpServerDisplayUpdates}; +use tokio::fs::File; +use tokio::io::AsyncReadExt; +use tokio::time::sleep; #[tokio::main(flavor = "current_thread")] async fn main() -> Result<(), anyhow::Error> { diff --git a/crates/iron-remote-desktop/src/lib.rs b/crates/iron-remote-desktop/src/lib.rs index 430ed5cb8..016a4cd31 100644 --- a/crates/iron-remote-desktop/src/lib.rs +++ b/crates/iron-remote-desktop/src/lib.rs @@ -190,9 +190,11 @@ macro_rules! make_bridge { #[wasm_bindgen(js_name = extensionCall)] pub fn extension_call( + &self, ext: $crate::Extension, ) -> Result<$crate::internal::wasm_bindgen::JsValue, IronError> { - <<$api as $crate::RemoteDesktopApi>::Session as $crate::Session>::extension_call(ext).map_err(IronError) + <<$api as $crate::RemoteDesktopApi>::Session as $crate::Session>::extension_call(&self.0, ext) + .map_err(IronError) } } @@ -439,11 +441,10 @@ macro_rules! make_bridge { #[doc(hidden)] pub mod internal { - #[doc(hidden)] - pub use web_sys; - #[doc(hidden)] pub use wasm_bindgen; + #[doc(hidden)] + pub use web_sys; #[doc(hidden)] pub fn setup(log_level: &str) { diff --git a/crates/iron-remote-desktop/src/session.rs b/crates/iron-remote-desktop/src/session.rs index efcda5006..d7cb256af 100644 --- a/crates/iron-remote-desktop/src/session.rs +++ b/crates/iron-remote-desktop/src/session.rs @@ -98,7 +98,7 @@ pub trait Session { fn supports_unicode_keyboard_shortcuts(&self) -> bool; - fn extension_call(ext: Extension) -> Result; + fn extension_call(&self, ext: Extension) -> Result; } pub trait SessionTerminationInfo { diff --git a/crates/ironrdp-graphics/src/diff.rs b/crates/ironrdp-graphics/src/diff.rs index d1e523753..5de90728c 100644 --- a/crates/ironrdp-graphics/src/diff.rs +++ b/crates/ironrdp-graphics/src/diff.rs @@ -209,9 +209,10 @@ pub fn find_different_rects_sub( #[cfg(test)] mod tests { - use super::*; use bytemuck::cast_slice; + use super::*; + #[test] fn test_intersect() { let r1 = Rect::new(0, 0, 640, 480); diff --git a/crates/ironrdp-server/src/display.rs b/crates/ironrdp-server/src/display.rs index 3f97fd451..d422dde6c 100644 --- a/crates/ironrdp-server/src/display.rs +++ b/crates/ironrdp-server/src/display.rs @@ -296,9 +296,12 @@ pub trait RdpServerDisplay: Send { #[cfg(test)] mod tests { - use super::{BitmapUpdate, Framebuffer}; use core::num::NonZeroU16; - use ironrdp_graphics::{diff::Rect, image_processing::PixelFormat}; + + use ironrdp_graphics::diff::Rect; + use ironrdp_graphics::image_processing::PixelFormat; + + use super::{BitmapUpdate, Framebuffer}; #[test] fn framebuffer_update() { diff --git a/crates/ironrdp-web/src/session.rs b/crates/ironrdp-web/src/session.rs index 78fd331ba..cce93e737 100644 --- a/crates/ironrdp-web/src/session.rs +++ b/crates/ironrdp-web/src/session.rs @@ -805,7 +805,7 @@ impl iron_remote_desktop::Session for Session { false } - fn extension_call(ext: Extension) -> Result { + fn extension_call(&self, ext: Extension) -> Result { Err( IronError::from(anyhow::Error::msg(format!("unknown extension: {}", ext.ident()))) .with_kind(IronErrorKind::General), diff --git a/web-client/iron-remote-desktop/src/interfaces/UserInteraction.ts b/web-client/iron-remote-desktop/src/interfaces/UserInteraction.ts index 7810347f4..fb9d36994 100644 --- a/web-client/iron-remote-desktop/src/interfaces/UserInteraction.ts +++ b/web-client/iron-remote-desktop/src/interfaces/UserInteraction.ts @@ -4,6 +4,7 @@ import type { SessionEvent } from './session-event'; import { ConfigBuilder } from '../services/ConfigBuilder'; import type { Config } from '../services/Config'; import type { PartialObserver } from 'rxjs'; +import type { Extension } from './Extension'; export interface UserInteraction { setVisibility(state: boolean): void; @@ -29,4 +30,6 @@ export interface UserInteraction { resize(width: number, height: number, scale?: number): void; setEnableClipboard(enable: boolean): void; + + callExtension(ext: Extension): void; } diff --git a/web-client/iron-remote-desktop/src/services/PublicAPI.ts b/web-client/iron-remote-desktop/src/services/PublicAPI.ts index d58e5c793..dc50b5ec8 100644 --- a/web-client/iron-remote-desktop/src/services/PublicAPI.ts +++ b/web-client/iron-remote-desktop/src/services/PublicAPI.ts @@ -6,6 +6,7 @@ import type { UserInteraction } from '../interfaces/UserInteraction'; import type { ScreenScale } from '../enums/ScreenScale'; import { ConfigBuilder } from './ConfigBuilder'; import { Config } from './Config'; +import type { Extension } from '../interfaces/Extension'; export class PublicAPI { private remoteDesktopService: RemoteDesktopService; @@ -62,6 +63,10 @@ export class PublicAPI { this.remoteDesktopService.setEnableClipboard(enable); } + private callExtension(ext: Extension) { + this.remoteDesktopService.callExtension(ext); + } + getExposedFunctions(): UserInteraction { return { setVisibility: this.setVisibility.bind(this), @@ -78,6 +83,7 @@ export class PublicAPI { setCursorStyleOverride: this.setCursorStyleOverride.bind(this), resize: this.resize.bind(this), setEnableClipboard: this.setEnableClipboard.bind(this), + callExtension: this.callExtension.bind(this), }; } } diff --git a/web-client/iron-remote-desktop/src/services/remote-desktop.service.ts b/web-client/iron-remote-desktop/src/services/remote-desktop.service.ts index 1c8fcc8a1..9eeca875a 100644 --- a/web-client/iron-remote-desktop/src/services/remote-desktop.service.ts +++ b/web-client/iron-remote-desktop/src/services/remote-desktop.service.ts @@ -19,6 +19,7 @@ import type { SessionTerminationInfo } from '../interfaces/SessionTerminationInf import type { RemoteDesktopModule } from '../interfaces/RemoteDesktopModule'; import { ConfigBuilder } from './ConfigBuilder'; import type { Config } from './Config'; +import type { Extension } from '../interfaces/Extension'; type OnRemoteClipboardChanged = (data: ClipboardData) => void; type OnRemoteReceivedFormatsList = () => void; @@ -280,6 +281,10 @@ export class RemoteDesktopService { } } + callExtension(ext: Extension) { + this.session?.extensionCall(ext); + } + private releaseAllInputs() { this.session?.releaseAllInputs(); }