From 55176ff99b8c72076c49ec4a2333ba9324798bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Cortier?= Date: Tue, 15 Aug 2023 14:36:53 -0400 Subject: [PATCH] refactor: write_padding! and read_padding! macros (#177) Macros ensuring optimal handling of padding at compile time. --- Cargo.lock | 2 +- crates/ironrdp-client/src/gui.rs | 2 +- .../ironrdp-cliprdr/src/pdu/capabilities.rs | 11 +++--- .../src/pdu/client_temporary_directory.rs | 6 ++-- .../ironrdp-cliprdr/src/pdu/file_contents.rs | 6 ++-- .../src/pdu/format_data/metafile.rs | 3 +- .../src/pdu/format_data/mod.rs | 13 ++++--- crates/ironrdp-cliprdr/src/pdu/format_list.rs | 6 ++-- crates/ironrdp-cliprdr/src/pdu/lock.rs | 3 +- crates/ironrdp-cliprdr/src/pdu/mod.rs | 15 ++++---- crates/ironrdp-connector/src/legacy.rs | 4 ++- crates/ironrdp-graphics/src/pointer.rs | 9 +++-- .../src/basic_output/fast_path/tests.rs | 3 +- .../ironrdp-pdu/src/basic_output/pointer.rs | 6 ++-- crates/ironrdp-pdu/src/geometry.rs | 6 ++-- crates/ironrdp-pdu/src/macros.rs | 35 +++++++++++++++++++ crates/ironrdp-pdu/src/mcs.rs | 4 +-- crates/ironrdp-pdu/src/nego.rs | 10 ++++-- crates/ironrdp-pdu/src/pcb.rs | 4 +-- crates/ironrdp-pdu/src/tpdu.rs | 4 +-- crates/ironrdp-pdu/src/tpkt.rs | 4 +-- crates/ironrdp-pdu/src/utils.rs | 7 ++-- crates/ironrdp-rdcleanpath/src/lib.rs | 7 ++-- crates/ironrdp-session/src/active_stage.rs | 2 +- crates/ironrdp-session/src/fast_path.rs | 7 ++-- crates/ironrdp-session/src/image.rs | 7 ++-- crates/ironrdp-session/src/pointer.rs | 2 +- .../tests/rdcleanpath.rs | 10 ++++-- crates/ironrdp-web/src/network_client.rs | 6 ++-- crates/ironrdp-web/src/session.rs | 5 ++- 30 files changed, 135 insertions(+), 74 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c85ee42cf..effd914a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1750,7 +1750,7 @@ dependencies = [ name = "ironrdp-cliprdr" version = "0.1.0" dependencies = [ - "bitflags 2.0.2", + "bitflags 2.3.3", "ironrdp-pdu", ] diff --git a/crates/ironrdp-client/src/gui.rs b/crates/ironrdp-client/src/gui.rs index 51b51af42..be6e8f593 100644 --- a/crates/ironrdp-client/src/gui.rs +++ b/crates/ironrdp-client/src/gui.rs @@ -1,12 +1,12 @@ use anyhow::Context as _; use softbuffer::GraphicsContext; use tokio::sync::mpsc; +use winit::dpi::LogicalPosition; use winit::event::{self, Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop, EventLoopBuilder}; use winit::window::{Window, WindowBuilder}; use crate::rdp::{RdpInputEvent, RdpOutputEvent}; -use winit::dpi::LogicalPosition; pub struct GuiContext { pub window: Window, diff --git a/crates/ironrdp-cliprdr/src/pdu/capabilities.rs b/crates/ironrdp-cliprdr/src/pdu/capabilities.rs index acc501085..daf873e2c 100644 --- a/crates/ironrdp-cliprdr/src/pdu/capabilities.rs +++ b/crates/ironrdp-cliprdr/src/pdu/capabilities.rs @@ -1,11 +1,12 @@ -use crate::pdu::PartialHeader; use bitflags::bitflags; use ironrdp_pdu::cursor::{ReadCursor, WriteCursor}; use ironrdp_pdu::{ - cast_int, cast_length, ensure_fixed_part_size, ensure_size, invalid_message_err, padding, PduDecode, PduEncode, - PduResult, + cast_int, cast_length, ensure_fixed_part_size, ensure_size, invalid_message_err, read_padding, write_padding, + PduDecode, PduEncode, PduResult, }; +use crate::pdu::PartialHeader; + /// Represents `CLIPRDR_CAPS` #[derive(Debug, Clone, PartialEq, Eq)] pub struct Capabilities { @@ -29,7 +30,7 @@ impl PduEncode for Capabilities { ensure_size!(in: dst, size: self.inner_size()); dst.write_u16(cast_length!(Self::NAME, "cCapabilitiesSets", self.capabilities.len())?); - padding::write(dst, 2); + write_padding!(dst, 2); for capability in &self.capabilities { capability.encode(dst)?; @@ -53,7 +54,7 @@ impl<'de> PduDecode<'de> for Capabilities { ensure_fixed_part_size!(in: src); let capabilities_count = src.read_u16(); - padding::read(src, 2); + read_padding!(src, 2); let mut capabilities = Vec::with_capacity(usize::from(capabilities_count)); diff --git a/crates/ironrdp-cliprdr/src/pdu/client_temporary_directory.rs b/crates/ironrdp-cliprdr/src/pdu/client_temporary_directory.rs index f373e0190..90f7c674b 100644 --- a/crates/ironrdp-cliprdr/src/pdu/client_temporary_directory.rs +++ b/crates/ironrdp-cliprdr/src/pdu/client_temporary_directory.rs @@ -1,10 +1,12 @@ -use crate::pdu::PartialHeader; +use std::borrow::Cow; + use ironrdp_pdu::cursor::{ReadCursor, WriteCursor}; use ironrdp_pdu::utils::{read_string_from_cursor, write_string_to_cursor, CharacterSet}; use ironrdp_pdu::{ cast_int, ensure_fixed_part_size, ensure_size, invalid_message_err, PduDecode, PduEncode, PduResult, }; -use std::borrow::Cow; + +use crate::pdu::PartialHeader; /// Represents `CLIPRDR_TEMP_DIRECTORY` #[derive(Debug, Clone, PartialEq, Eq)] diff --git a/crates/ironrdp-cliprdr/src/pdu/file_contents.rs b/crates/ironrdp-cliprdr/src/pdu/file_contents.rs index 51568afaa..b570f1b5a 100644 --- a/crates/ironrdp-cliprdr/src/pdu/file_contents.rs +++ b/crates/ironrdp-cliprdr/src/pdu/file_contents.rs @@ -1,9 +1,11 @@ -use crate::pdu::{ClipboardPduFlags, PartialHeader}; +use std::borrow::Cow; + use bitflags::bitflags; use ironrdp_pdu::cursor::{ReadCursor, WriteCursor}; use ironrdp_pdu::utils::{combine_u64, split_u64}; use ironrdp_pdu::{cast_int, ensure_size, invalid_message_err, PduDecode, PduEncode, PduResult}; -use std::borrow::Cow; + +use crate::pdu::{ClipboardPduFlags, PartialHeader}; bitflags! { /// Represents `dwFlags` field of `CLIPRDR_FILECONTENTS_REQUEST` structure. diff --git a/crates/ironrdp-cliprdr/src/pdu/format_data/metafile.rs b/crates/ironrdp-cliprdr/src/pdu/format_data/metafile.rs index 0ba3f0280..8d74f0275 100644 --- a/crates/ironrdp-cliprdr/src/pdu/format_data/metafile.rs +++ b/crates/ironrdp-cliprdr/src/pdu/format_data/metafile.rs @@ -1,7 +1,8 @@ +use std::borrow::Cow; + use bitflags::bitflags; use ironrdp_pdu::cursor::{ReadCursor, WriteCursor}; use ironrdp_pdu::{ensure_fixed_part_size, ensure_size, PduDecode, PduEncode, PduResult}; -use std::borrow::Cow; bitflags! { /// Represents `mappingMode` fields of `CLIPRDR_MFPICT` strucutre. diff --git a/crates/ironrdp-cliprdr/src/pdu/format_data/mod.rs b/crates/ironrdp-cliprdr/src/pdu/format_data/mod.rs index 9bfacfa51..562f4ff8c 100644 --- a/crates/ironrdp-cliprdr/src/pdu/format_data/mod.rs +++ b/crates/ironrdp-cliprdr/src/pdu/format_data/mod.rs @@ -2,15 +2,18 @@ mod file_list; mod metafile; mod palette; -pub use file_list::*; -pub use metafile::*; -pub use palette::*; +pub use self::file_list::*; +pub use self::metafile::*; +pub use self::palette::*; + +#[rustfmt::skip] +use std::borrow::Cow; -use crate::pdu::{ClipboardPduFlags, PartialHeader}; use ironrdp_pdu::cursor::{ReadCursor, WriteCursor}; use ironrdp_pdu::utils::{read_string_from_cursor, to_utf16_bytes, CharacterSet}; use ironrdp_pdu::{cast_int, ensure_fixed_part_size, ensure_size, PduDecode, PduEncode, PduResult}; -use std::borrow::Cow; + +use crate::pdu::{ClipboardPduFlags, PartialHeader}; /// Represents `CLIPRDR_FORMAT_DATA_RESPONSE` #[derive(Debug, Clone, PartialEq, Eq)] diff --git a/crates/ironrdp-cliprdr/src/pdu/format_list.rs b/crates/ironrdp-cliprdr/src/pdu/format_list.rs index 8547305b9..4d588f3d9 100644 --- a/crates/ironrdp-cliprdr/src/pdu/format_list.rs +++ b/crates/ironrdp-cliprdr/src/pdu/format_list.rs @@ -1,8 +1,10 @@ -use crate::pdu::{ClipboardPduFlags, PartialHeader}; +use std::borrow::Cow; + use ironrdp_pdu::cursor::{ReadCursor, WriteCursor}; use ironrdp_pdu::utils::{read_string_from_cursor, to_utf16_bytes, write_string_to_cursor, CharacterSet}; use ironrdp_pdu::{cast_int, ensure_size, invalid_message_err, PduDecode, PduEncode, PduResult}; -use std::borrow::Cow; + +use crate::pdu::{ClipboardPduFlags, PartialHeader}; /// Represents `CLIPRDR_SHORT_FORMAT_NAME` and `CLIPRDR_LONG_FORMAT_NAME` #[derive(Debug, Clone, PartialEq, Eq)] diff --git a/crates/ironrdp-cliprdr/src/pdu/lock.rs b/crates/ironrdp-cliprdr/src/pdu/lock.rs index 38ef2d642..f8feb37b4 100644 --- a/crates/ironrdp-cliprdr/src/pdu/lock.rs +++ b/crates/ironrdp-cliprdr/src/pdu/lock.rs @@ -1,7 +1,8 @@ -use crate::pdu::PartialHeader; use ironrdp_pdu::cursor::{ReadCursor, WriteCursor}; use ironrdp_pdu::{cast_int, ensure_fixed_part_size, PduDecode, PduEncode, PduResult}; +use crate::pdu::PartialHeader; + /// Represents `CLIPRDR_LOCK_CLIPDATA`/`CLIPRDR_UNLOCK_CLIPDATA` #[derive(Debug, Clone, PartialEq, Eq)] pub struct LockDataId(pub u32); diff --git a/crates/ironrdp-cliprdr/src/pdu/mod.rs b/crates/ironrdp-cliprdr/src/pdu/mod.rs index c161c8a83..e1bd597c9 100644 --- a/crates/ironrdp-cliprdr/src/pdu/mod.rs +++ b/crates/ironrdp-cliprdr/src/pdu/mod.rs @@ -8,13 +8,14 @@ mod format_data; mod format_list; mod lock; -pub use capabilities::*; -pub use client_temporary_directory::*; -pub use file_contents::*; -pub use format_data::*; -pub use format_list::*; -pub use lock::*; - +pub use self::capabilities::*; +pub use self::client_temporary_directory::*; +pub use self::file_contents::*; +pub use self::format_data::*; +pub use self::format_list::*; +pub use self::lock::*; + +#[rustfmt::skip] use bitflags::bitflags; use ironrdp_pdu::cursor::{ReadCursor, WriteCursor}; use ironrdp_pdu::{ensure_fixed_part_size, invalid_message_err, PduDecode, PduEncode, PduResult}; diff --git a/crates/ironrdp-connector/src/legacy.rs b/crates/ironrdp-connector/src/legacy.rs index b1b0ccc20..69afc487f 100644 --- a/crates/ironrdp-connector/src/legacy.rs +++ b/crates/ironrdp-connector/src/legacy.rs @@ -180,7 +180,9 @@ pub fn decode_share_data(ctx: SendDataIndicationCtx<'_>) -> ConnectorResult Transparent pixel //! - andMask == 1, xorMask == 1(white color) -> Pixel is inverted -use crate::color_conversion::rdp_16bit_to_rgb; -use ironrdp_pdu::{ - cursor::ReadCursor, - pointer::{ColorPointerAttribute, LargePointerAttribute, PointerAttribute}, -}; +use ironrdp_pdu::cursor::ReadCursor; +use ironrdp_pdu::pointer::{ColorPointerAttribute, LargePointerAttribute, PointerAttribute}; use thiserror::Error; +use crate::color_conversion::rdp_16bit_to_rgb; + #[derive(Debug, Error)] pub enum PointerError { #[error("Invalid pointer xorMask size. Expected: {expected}, actual: {actual}")] diff --git a/crates/ironrdp-pdu/src/basic_output/fast_path/tests.rs b/crates/ironrdp-pdu/src/basic_output/fast_path/tests.rs index 9ba398c2b..4874dafe1 100644 --- a/crates/ironrdp-pdu/src/basic_output/fast_path/tests.rs +++ b/crates/ironrdp-pdu/src/basic_output/fast_path/tests.rs @@ -1,6 +1,7 @@ +use lazy_static::lazy_static; + use super::*; use crate::{decode, encode}; -use lazy_static::lazy_static; const FAST_PATH_HEADER_WITH_SHORT_LEN_BUFFER: [u8; 2] = [0x80, 0x08]; const FAST_PATH_HEADER_WITH_LONG_LEN_BUFFER: [u8; 3] = [0x80, 0x81, 0xE7]; diff --git a/crates/ironrdp-pdu/src/basic_output/pointer.rs b/crates/ironrdp-pdu/src/basic_output/pointer.rs index 08f3237c2..a64a6a4b4 100644 --- a/crates/ironrdp-pdu/src/basic_output/pointer.rs +++ b/crates/ironrdp-pdu/src/basic_output/pointer.rs @@ -1,7 +1,5 @@ -use crate::{ - cursor::{ReadCursor, WriteCursor}, - PduDecode, PduEncode, PduResult, -}; +use crate::cursor::{ReadCursor, WriteCursor}; +use crate::{PduDecode, PduEncode, PduResult}; // Represents `TS_POINT16` described in [MS-RDPBCGR] 2.2.9.1.1.4.1 #[derive(Debug, Clone, Copy, PartialEq, Eq)] diff --git a/crates/ironrdp-pdu/src/geometry.rs b/crates/ironrdp-pdu/src/geometry.rs index a1060c063..c29feee5f 100644 --- a/crates/ironrdp-pdu/src/geometry.rs +++ b/crates/ironrdp-pdu/src/geometry.rs @@ -263,10 +263,12 @@ impl<'de> PduDecode<'de> for ExclusiveRectangle { // Legacy code for serializing/deserializing exclusive rectangles as inclusive rectangles structure // TODO(@pacmancoder) this should be removed later mod legacy { - use super::*; - use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use std::io; + use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; + + use super::*; + impl InclusiveRectangle { // TODO: clarify code related to rectangles (inclusive vs exclusive bounds, …) // See for instance: diff --git a/crates/ironrdp-pdu/src/macros.rs b/crates/ironrdp-pdu/src/macros.rs index 60e09b8a0..65a7e97a5 100644 --- a/crates/ironrdp-pdu/src/macros.rs +++ b/crates/ironrdp-pdu/src/macros.rs @@ -217,6 +217,41 @@ macro_rules! impl_pdu_borrowing { }; } +/// Writes zeroes using as few `write_u*` calls as possible. +/// +/// This is similar to `ironrdp_pdu::padding::write`, but the loop is optimized out when a single +/// operation is enough. +#[macro_export] +macro_rules! write_padding { + ($dst:expr, 1) => { + $dst.write_u8(0) + }; + ($dst:expr, 2) => { + $dst.write_u16(0) + }; + ($dst:expr, 4) => { + $dst.write_u32(0) + }; + ($dst:expr, 8) => { + $dst.write_u64(0) + }; + ($dst:expr, $n:expr) => { + $crate::padding::write($dst, $n) + }; +} + +/// Moves read cursor, ignoring padding bytes. +/// +/// This is similar to `ironrdp_pdu::padding::read`, only exists for consistancy with `write_padding!`. +#[macro_export] +macro_rules! read_padding { + ($src:expr, $n:expr) => { + $crate::padding::read($src, $n) + }; +} + +// FIXME: legacy macros below + #[macro_export] macro_rules! try_read_optional { ($e:expr, $ret:expr) => { diff --git a/crates/ironrdp-pdu/src/mcs.rs b/crates/ironrdp-pdu/src/mcs.rs index 177161195..0c8ae08e0 100644 --- a/crates/ironrdp-pdu/src/mcs.rs +++ b/crates/ironrdp-pdu/src/mcs.rs @@ -601,7 +601,7 @@ impl<'de> McsPdu<'de> for SendDataRequest<'de> { // dataPriority + segmentation ensure_size!(ctx: Self::MCS_NAME, in: src, size: 1); - crate::padding::read(src, 1); + read_padding!(src, 1); let (length, _) = per::read_length(src).map_err(per_field_err!("userDataLength"))?; let length = usize::from(length); @@ -682,7 +682,7 @@ impl<'de> McsPdu<'de> for SendDataIndication<'de> { // dataPriority + segmentation ensure_size!(ctx: Self::MCS_NAME, in: src, size: 1); - crate::padding::read(src, 1); + read_padding!(src, 1); let (length, _) = per::read_length(src).map_err(per_field_err!("userDataLength"))?; let length = usize::from(length); diff --git a/crates/ironrdp-pdu/src/nego.rs b/crates/ironrdp-pdu/src/nego.rs index 146a64aa5..dcdcb6bf2 100644 --- a/crates/ironrdp-pdu/src/nego.rs +++ b/crates/ironrdp-pdu/src/nego.rs @@ -225,8 +225,14 @@ impl<'de> X224Pdu<'de> for ConnectionRequest { let nego_data = NegoRequestData::read(src)?; - let Some(variable_part_rest_size) = variable_part_size.checked_sub(nego_data.as_ref().map(|data| data.size()).unwrap_or(0)) else { - return Err(PduError::invalid_message(Self::NAME, "TPDU header variable part", "advertised size too small")); + let Some(variable_part_rest_size) = + variable_part_size.checked_sub(nego_data.as_ref().map(|data| data.size()).unwrap_or(0)) + else { + return Err(PduError::invalid_message( + Self::NAME, + "TPDU header variable part", + "advertised size too small", + )); }; if variable_part_rest_size >= usize::from(Self::RDP_NEG_REQ_SIZE) { diff --git a/crates/ironrdp-pdu/src/pcb.rs b/crates/ironrdp-pdu/src/pcb.rs index 113f7e070..8eca39980 100644 --- a/crates/ironrdp-pdu/src/pcb.rs +++ b/crates/ironrdp-pdu/src/pcb.rs @@ -55,7 +55,7 @@ impl<'de> PduDecode<'de> for PreconnectionBlob { )); } - crate::padding::read(src, 4); // flags + read_padding!(src, 4); // flags // The version field SHOULD be initialized by the client and SHOULD be ignored by the server, // as specified in sections 3.1.5.1 and 3.2.5.1. @@ -118,7 +118,7 @@ impl PduEncode for PreconnectionBlob { ensure_size!(in: dst, size: pcb_size); dst.write_u32(cast_length!("cbSize", pcb_size)?); // cbSize - crate::padding::write(dst, 4); // flags + write_padding!(dst, 4); // flags dst.write_u32(self.version.0); // version dst.write_u32(self.id); // id diff --git a/crates/ironrdp-pdu/src/tpdu.rs b/crates/ironrdp-pdu/src/tpdu.rs index 83878a2a4..02b50dd3f 100644 --- a/crates/ironrdp-pdu/src/tpdu.rs +++ b/crates/ironrdp-pdu/src/tpdu.rs @@ -138,10 +138,10 @@ impl TpduHeader { } if code == TpduCode::DATA { - crate::padding::read(src, 1); // EOT + read_padding!(src, 1); // EOT } else { ensure_size!(in: src, size: 5); - crate::padding::read(src, 5); // DST-REF, SRC-REF, Class 0 + read_padding!(src, 5); // DST-REF, SRC-REF, Class 0 } Ok(Self { li, code }) diff --git a/crates/ironrdp-pdu/src/tpkt.rs b/crates/ironrdp-pdu/src/tpkt.rs index 64e013a4e..9cedfbc72 100644 --- a/crates/ironrdp-pdu/src/tpkt.rs +++ b/crates/ironrdp-pdu/src/tpkt.rs @@ -56,7 +56,7 @@ impl TpktHeader { return Err(PduError::unsupported_version("TPKT version", version)); } - crate::padding::read(src, 1); + read_padding!(src, 1); let packet_length = src.read_u16_be(); @@ -68,7 +68,7 @@ impl TpktHeader { dst.write_u8(Self::VERSION); - crate::padding::write(dst, 1); + write_padding!(dst, 1); dst.write_u16_be(self.packet_length); diff --git a/crates/ironrdp-pdu/src/utils.rs b/crates/ironrdp-pdu/src/utils.rs index 71ebee878..70baa9a79 100644 --- a/crates/ironrdp-pdu/src/utils.rs +++ b/crates/ironrdp-pdu/src/utils.rs @@ -1,13 +1,12 @@ use std::io; -use crate::{ - cursor::{ReadCursor, WriteCursor}, - PduResult, -}; use byteorder::{LittleEndian, ReadBytesExt as _, WriteBytesExt as _}; use num_derive::{FromPrimitive, ToPrimitive}; use num_traits::ToPrimitive as _; +use crate::cursor::{ReadCursor, WriteCursor}; +use crate::PduResult; + pub fn split_u64(value: u64) -> (u32, u32) { let bytes = value.to_le_bytes(); let (low, high) = bytes.split_at(std::mem::size_of::()); diff --git a/crates/ironrdp-rdcleanpath/src/lib.rs b/crates/ironrdp-rdcleanpath/src/lib.rs index 89fe23f72..257b83591 100644 --- a/crates/ironrdp-rdcleanpath/src/lib.rs +++ b/crates/ironrdp-rdcleanpath/src/lib.rs @@ -128,7 +128,7 @@ impl RDCleanPathPdu { use der::{Decode as _, Encode as _}; let Ok(mut reader) = der::SliceReader::new(src) else { - return DetectionResult::Failed + return DetectionResult::Failed; }; let header = match der::Header::decode(&mut reader) { @@ -139,7 +139,10 @@ impl RDCleanPathPdu { }, }; - let (Ok(header_encoded_len), Ok(body_length)) = (header.encoded_len().and_then(usize::try_from), usize::try_from(header.length)) else { + let (Ok(header_encoded_len), Ok(body_length)) = ( + header.encoded_len().and_then(usize::try_from), + usize::try_from(header.length), + ) else { return DetectionResult::Failed; }; diff --git a/crates/ironrdp-session/src/active_stage.rs b/crates/ironrdp-session/src/active_stage.rs index ea74b2da8..62d513e1f 100644 --- a/crates/ironrdp-session/src/active_stage.rs +++ b/crates/ironrdp-session/src/active_stage.rs @@ -1,12 +1,12 @@ use ironrdp_connector::ConnectionResult; use ironrdp_pdu::geometry::InclusiveRectangle; +use ironrdp_pdu::input::fast_path::{FastPathInput, FastPathInputEvent}; use ironrdp_pdu::{Action, PduParsing}; use crate::fast_path::UpdateKind; use crate::image::DecodedImage; use crate::x224::GfxHandler; use crate::{fast_path, utils, x224, SessionResult}; -use ironrdp_pdu::input::fast_path::{FastPathInput, FastPathInputEvent}; pub struct ActiveStage { x224_processor: x224::Processor, diff --git a/crates/ironrdp-session/src/fast_path.rs b/crates/ironrdp-session/src/fast_path.rs index 94a00865b..36ae90759 100644 --- a/crates/ironrdp-session/src/fast_path.rs +++ b/crates/ironrdp-session/src/fast_path.rs @@ -1,6 +1,10 @@ +use std::rc::Rc; + +use ironrdp_graphics::pointer::DecodedPointer; use ironrdp_graphics::rdp6::BitmapStreamDecoder; use ironrdp_graphics::rle::RlePixelFormat; use ironrdp_pdu::codecs::rfx::FrameAcknowledgePdu; +use ironrdp_pdu::cursor::ReadCursor; use ironrdp_pdu::fast_path::{FastPathHeader, FastPathUpdate, FastPathUpdatePdu, Fragmentation}; use ironrdp_pdu::geometry::{InclusiveRectangle, Rectangle as _}; use ironrdp_pdu::pointer::PointerUpdateData; @@ -12,9 +16,6 @@ use crate::image::DecodedImage; use crate::pointer::PointerCache; use crate::utils::CodecId; use crate::{rfx, SessionError, SessionErrorExt, SessionResult}; -use ironrdp_graphics::pointer::DecodedPointer; -use ironrdp_pdu::cursor::ReadCursor; -use std::rc::Rc; pub enum UpdateKind { None, diff --git a/crates/ironrdp-session/src/image.rs b/crates/ironrdp-session/src/image.rs index 1d9dc3690..fbbeb3d7b 100644 --- a/crates/ironrdp-session/src/image.rs +++ b/crates/ironrdp-session/src/image.rs @@ -1,11 +1,12 @@ +use std::rc::Rc; + +use ironrdp_graphics::color_conversion::rdp_16bit_to_rgb; use ironrdp_graphics::image_processing::{ImageRegion, ImageRegionMut, PixelFormat}; +use ironrdp_graphics::pointer::DecodedPointer; use ironrdp_graphics::rectangle_processing::Region; use ironrdp_pdu::geometry::{InclusiveRectangle, Rectangle as _}; use crate::SessionResult; -use ironrdp_graphics::color_conversion::rdp_16bit_to_rgb; -use ironrdp_graphics::pointer::DecodedPointer; -use std::rc::Rc; const TILE_SIZE: u16 = 64; const SOURCE_PIXEL_FORMAT: PixelFormat = PixelFormat::BgrX32; diff --git a/crates/ironrdp-session/src/pointer.rs b/crates/ironrdp-session/src/pointer.rs index 7ef34eef4..8266aafc5 100644 --- a/crates/ironrdp-session/src/pointer.rs +++ b/crates/ironrdp-session/src/pointer.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; +use std::rc::Rc; use ironrdp_graphics::pointer::DecodedPointer; -use std::rc::Rc; #[derive(Debug, Clone, Default)] pub struct PointerCache { diff --git a/crates/ironrdp-testsuite-core/tests/rdcleanpath.rs b/crates/ironrdp-testsuite-core/tests/rdcleanpath.rs index d91cf923f..4c91f3b34 100644 --- a/crates/ironrdp-testsuite-core/tests/rdcleanpath.rs +++ b/crates/ironrdp-testsuite-core/tests/rdcleanpath.rs @@ -98,9 +98,13 @@ fn serialization(#[case] message: RDCleanPathPdu, #[case] expected_der: &[u8]) { fn detect(#[case] der: &[u8]) { let result = RDCleanPathPdu::detect(der); - let DetectionResult::Detected { version: detected_version, total_length: detected_length } = result else { - panic!("unexpected result: {result:?}"); - }; + let DetectionResult::Detected { + version: detected_version, + total_length: detected_length, + } = result + else { + panic!("unexpected result: {result:?}"); + }; assert_eq!(detected_version, VERSION_1); assert_eq!(detected_length, der.len()); diff --git a/crates/ironrdp-web/src/network_client.rs b/crates/ironrdp-web/src/network_client.rs index e7d070772..cd12f7ed3 100644 --- a/crates/ironrdp-web/src/network_client.rs +++ b/crates/ironrdp-web/src/network_client.rs @@ -1,10 +1,8 @@ use std::time::Duration; use gloo_net::http::Request; -use ironrdp::connector::sspi::{ - self, - network_client::{NetworkClient, NetworkClientFactory, NetworkProtocol}, -}; +use ironrdp::connector::sspi::network_client::{NetworkClient, NetworkClientFactory, NetworkProtocol}; +use ironrdp::connector::sspi::{self}; use url::Url; use wasm_bindgen::JsValue; diff --git a/crates/ironrdp-web/src/session.rs b/crates/ironrdp-web/src/session.rs index e3e0d223c..3484828f6 100644 --- a/crates/ironrdp-web/src/session.rs +++ b/crates/ironrdp-web/src/session.rs @@ -5,13 +5,13 @@ use std::time::Duration; use anyhow::Context as _; use futures_channel::mpsc; use futures_util::io::{ReadHalf, WriteHalf}; -use futures_util::select; -use futures_util::{AsyncReadExt as _, AsyncWriteExt as _, FutureExt, StreamExt as _}; +use futures_util::{select, AsyncReadExt as _, AsyncWriteExt as _, FutureExt, StreamExt as _}; use gloo_net::websocket; use gloo_net::websocket::futures::WebSocket; use ironrdp::connector::{self, ClientConnector}; use ironrdp::graphics::image_processing::PixelFormat; use ironrdp::pdu::geometry::{InclusiveRectangle, Rectangle as _}; +use ironrdp::pdu::input::fast_path::FastPathInputEvent; use ironrdp::session::image::DecodedImage; use ironrdp::session::{ActiveStage, ActiveStageOutput}; use tap::prelude::*; @@ -24,7 +24,6 @@ use crate::input::InputTransaction; use crate::network_client::WasmNetworkClientFactory; use crate::websocket::WebSocketCompat; use crate::DesktopSize; -use ironrdp::pdu::input::fast_path::FastPathInputEvent; const DEFAULT_WIDTH: u16 = 1280; const DEFAULT_HEIGHT: u16 = 720;