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
779 changes: 481 additions & 298 deletions Cargo.lock

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions crates/ironrdp-acceptor/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.8.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-acceptor-v0.8.0...ironrdp-acceptor-v0.8.1)] - 2026-02-17



## [[0.8.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-acceptor-v0.7.0...ironrdp-acceptor-v0.8.0)] - 2025-12-18

### <!-- 4 -->Bug Fixes
Expand Down
4 changes: 2 additions & 2 deletions crates/ironrdp-acceptor/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-acceptor"
version = "0.8.0"
version = "0.8.1"
readme = "README.md"
description = "State machines to drive an RDP connection acceptance sequence"
edition.workspace = true
Expand All @@ -19,7 +19,7 @@ test = false
ironrdp-core = { path = "../ironrdp-core", version = "0.1", features = ["alloc"] } # public
ironrdp-pdu = { path = "../ironrdp-pdu", version = "0.7" } # public
ironrdp-svc = { path = "../ironrdp-svc", version = "0.6" } # public
ironrdp-connector = { path = "../ironrdp-connector", version = "0.8" } # public
ironrdp-connector = { path = "../ironrdp-connector", version = "0.9" } # public
ironrdp-async = { path = "../ironrdp-async", version = "0.8" } # public
tracing = { version = "0.1", features = ["log"] }

Expand Down
4 changes: 4 additions & 0 deletions crates/ironrdp-async/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.8.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-async-v0.8.0...ironrdp-async-v0.8.1)] - 2026-02-17



## [[0.8.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-async-v0.7.0...ironrdp-async-v0.8.0)] - 2025-12-18

### <!-- 4 -->Bug Fixes
Expand Down
4 changes: 2 additions & 2 deletions crates/ironrdp-async/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-async"
version = "0.8.0"
version = "0.8.1"
readme = "README.md"
description = "Provides `Future`s wrapping the IronRDP state machines conveniently"
edition.workspace = true
Expand All @@ -16,7 +16,7 @@ doctest = false
test = false

[dependencies]
ironrdp-connector = { path = "../ironrdp-connector", version = "0.8" } # public
ironrdp-connector = { path = "../ironrdp-connector", version = "0.9" } # public
ironrdp-core = { path = "../ironrdp-core", version = "0.1", features = ["alloc"] } # public
ironrdp-pdu = { path = "../ironrdp-pdu", version = "0.7" } # public
tracing = { version = "0.1", features = ["log"] }
Expand Down
4 changes: 4 additions & 0 deletions crates/ironrdp-blocking/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.8.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-blocking-v0.8.0...ironrdp-blocking-v0.8.1)] - 2026-02-17



## [[0.8.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-blocking-v0.7.0...ironrdp-blocking-v0.8.0)] - 2025-12-18

### <!-- 4 -->Bug Fixes
Expand Down
4 changes: 2 additions & 2 deletions crates/ironrdp-blocking/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-blocking"
version = "0.8.0"
version = "0.8.1"
readme = "README.md"
description = "Blocking I/O abstraction wrapping the IronRDP state machines conveniently"
edition.workspace = true
Expand All @@ -16,7 +16,7 @@ doctest = false
test = false

[dependencies]
ironrdp-connector = { path = "../ironrdp-connector", version = "0.8" } # public
ironrdp-connector = { path = "../ironrdp-connector", version = "0.9" } # public
ironrdp-core = { path = "../ironrdp-core", version = "0.1", features = ["alloc"] } # public
ironrdp-pdu = { path = "../ironrdp-pdu", version = "0.7" } # public
tracing = { version = "0.1", features = ["log"] }
Expand Down
22 changes: 22 additions & 0 deletions crates/ironrdp-bulk/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.1.0](https://github.com/Devolutions/IronRDP/releases/tag/ironrdp-bulk-v0.1.0)] - 2026-02-17

### <!-- 1 -->Features

- Add bulk compression and wire negotiation ([ebf5da5f33](https://github.com/Devolutions/IronRDP/commit/ebf5da5f3380a3355f6c95814d669f8190425ded))

- add ironrdp-bulk crate with MPPC/NCRUSH/XCRUSH, bitstream, benches, and metrics
- advertise compression in Client Info and plumb compression_type through connector
- decode compressed FastPath/ShareData updates using BulkCompressor
- update CLI to numeric compression flags (enabled by default, level 0-3)
- extend screenshot example with compression options and negotiated logging
- refresh tests, FFI/web configs, typos, and Cargo.lock


4 changes: 4 additions & 0 deletions crates/ironrdp-cliprdr-native/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.5.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-cliprdr-native-v0.5.0...ironrdp-cliprdr-native-v0.5.1)] - 2026-02-17



## [[0.5.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-cliprdr-native-v0.4.0...ironrdp-cliprdr-native-v0.5.0)] - 2025-12-18

### <!-- 4 -->Bug Fixes
Expand Down
4 changes: 2 additions & 2 deletions crates/ironrdp-cliprdr-native/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-cliprdr-native"
version = "0.5.0"
version = "0.5.1"
readme = "README.md"
description = "Native CLIPRDR static channel backend implementations for IronRDP"
edition.workspace = true
Expand All @@ -16,7 +16,7 @@ doctest = false
test = false

[dependencies]
ironrdp-cliprdr = { path = "../ironrdp-cliprdr", version = "0.5" } # public
ironrdp-cliprdr = { path = "../ironrdp-cliprdr", version = "0.6" } # public
ironrdp-core = { path = "../ironrdp-core", version = "0.1" }
tracing = { version = "0.1", features = ["log"] }

Expand Down
43 changes: 43 additions & 0 deletions crates/ironrdp-cliprdr/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,49 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.6.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-cliprdr-v0.5.0...ironrdp-cliprdr-v0.6.0)] - 2026-02-17

### <!-- 1 -->Features

- Add clipboard data locking methods ([#1064](https://github.com/Devolutions/IronRDP/issues/1064)) ([58c3df84bb](https://github.com/Devolutions/IronRDP/commit/58c3df84bb9cafc8669315834cead35a71483c34))

Per [MS-RDPECLIP sections 2.2.4.6 and 2.2.4.7][lock-spec], the Local
Clipboard
Owner may lock the Shared Clipboard Owner's clipboard data before
requesting
file contents to ensure data stability during multi-request transfers.

This enables server implementations to safely request file data from
clients
when handling clipboard paste operations.

---------

- Add request_file_contents method ([#1065](https://github.com/Devolutions/IronRDP/issues/1065)) ([c30fc35a28](https://github.com/Devolutions/IronRDP/commit/c30fc35a28d6218603c1662e98e8b3053bea3aa5))

Per [MS-RDPECLIP section 2.2.5.3][file-contents-spec], the Local
Clipboard Owner
sends File Contents Request PDU to retrieve file data from the Shared
Clipboard
Owner during paste operations.

This enables server implementations to request file contents from
clients,
completing the bidirectional file transfer capability.

- Add SendFileContentsResponse message variant ([#1066](https://github.com/Devolutions/IronRDP/issues/1066)) ([25f81337aa](https://github.com/Devolutions/IronRDP/commit/25f81337aa494af9a21f55f12ec27fd946465cbe))

Adds `SendFileContentsResponse` to `ClipboardMessage` enum, enabling
clipboard
backends to signal when file data is ready to send via
`submit_file_contents()`.

This provides the message-based interface pattern used consistently by
server
implementations for clipboard operations.



## [[0.5.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-cliprdr-v0.4.0...ironrdp-cliprdr-v0.5.0)] - 2025-12-18

### <!-- 4 -->Bug Fixes
Expand Down
2 changes: 1 addition & 1 deletion crates/ironrdp-cliprdr/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-cliprdr"
version = "0.5.0"
version = "0.6.0"
readme = "README.md"
description = "CLIPRDR static channel for clipboard implemented as described in MS-RDPECLIP"
edition.workspace = true
Expand Down
51 changes: 51 additions & 0 deletions crates/ironrdp-connector/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,57 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.9.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-connector-v0.8.0...ironrdp-connector-v0.9.0)] - 2026-02-17

### <!-- 0 -->Security

- Add alternate_shell and work_dir configuration support ([#1095](https://github.com/Devolutions/IronRDP/issues/1095)) ([a33d27fe67](https://github.com/Devolutions/IronRDP/commit/a33d27fe6771a5a155161ef40a04de88803dd84c))

Add support for configuring `alternate_shell` and `work_dir` fields in
ClientInfoPdu, which are used by:
- CyberArk PSM (Privileged Session Manager) for session tokens
- Remote application scenarios (RemoteApp)
- Custom shell configurations

- Dispatch multitransport PDUs on IO channel ([#1096](https://github.com/Devolutions/IronRDP/issues/1096)) ([7853e3cc6f](https://github.com/Devolutions/IronRDP/commit/7853e3cc6f26acaf3da000c6177ca3cef6ef85fd))

`decode_io_channel()` assumes all IO channel PDUs begin with
a`ShareControlHeader`. Multitransport Request PDUs use a
`BasicSecurityHeader` with `SEC_TRANSPORT_REQ` instead ([MS-RDPBCGR]
2.2.15.1).

This adds a peek-based dispatch: check the first `u16`
for`TRANSPORT_REQ`, decode as `MultitransportRequestPdu` if set,
otherwise fall through to the existing `decode_share_control()` path
unchanged.

The new variant is propagated through `ProcessorOutput` and
'ActiveStageOutput` so applications can handle multitransport requests.
Client and web consumers log the request (no UDP transport yet).

### <!-- 1 -->Features

- Add bulk compression and wire negotiation ([ebf5da5f33](https://github.com/Devolutions/IronRDP/commit/ebf5da5f3380a3355f6c95814d669f8190425ded))

- add ironrdp-bulk crate with MPPC/NCRUSH/XCRUSH, bitstream, benches, and metrics
- advertise compression in Client Info and plumb compression_type through connector
- decode compressed FastPath/ShareData updates using BulkCompressor
- update CLI to numeric compression flags (enabled by default, level 0-3)
- extend screenshot example with compression options and negotiated logging
- refresh tests, FFI/web configs, typos, and Cargo.lock

- Advertise multitransport channel in GCC blocks ([#1092](https://github.com/Devolutions/IronRDP/issues/1092)) ([4f5fdd3628](https://github.com/Devolutions/IronRDP/commit/4f5fdd3628f4d0d2c2a4116e4e45269d802740f1))

Add multitransport_flags config option to populate the
MultiTransportChannelData GCC block during connection negotiation.
When None (the default), behavior is unchanged.

### <!-- 4 -->Bug Fixes

- Make fields of Error private ([#1074](https://github.com/Devolutions/IronRDP/issues/1074)) ([e51ed236ce](https://github.com/Devolutions/IronRDP/commit/e51ed236ce5d55dc1a4bc5f5809fd106bdd2e834))



## [[0.8.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-connector-v0.7.1...ironrdp-connector-v0.8.0)] - 2025-12-18

### <!-- 7 -->Build
Expand Down
4 changes: 2 additions & 2 deletions crates/ironrdp-connector/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-connector"
version = "0.8.0"
version = "0.9.0"
readme = "README.md"
description = "State machines to drive an RDP connection sequence"
edition.workspace = true
Expand All @@ -24,7 +24,7 @@ qoiz = ["ironrdp-pdu/qoiz"]
[dependencies]
ironrdp-svc = { path = "../ironrdp-svc", version = "0.6" } # public
ironrdp-core = { path = "../ironrdp-core", version = "0.1" } # public
ironrdp-error = { path = "../ironrdp-error", version = "0.1" } # public
ironrdp-error = { path = "../ironrdp-error", version = "0.2" } # public
ironrdp-pdu = { path = "../ironrdp-pdu", version = "0.7", features = ["std"] } # public
arbitrary = { version = "1", features = ["derive"], optional = true } # public
sspi = { version = "0.18", features = ["scard"] }
Expand Down
4 changes: 4 additions & 0 deletions crates/ironrdp-core/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.1.6](https://github.com/Devolutions/IronRDP/compare/ironrdp-core-v0.1.5...ironrdp-core-v0.1.6)] - 2026-02-17



## [[0.1.5](https://github.com/Devolutions/IronRDP/compare/ironrdp-core-v0.1.4...ironrdp-core-v0.1.5)] - 2025-05-28

### Features
Expand Down
4 changes: 2 additions & 2 deletions crates/ironrdp-core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-core"
version = "0.1.5"
version = "0.1.6"
readme = "README.md"
description = "IronRDP common traits and types"
edition.workspace = true
Expand All @@ -21,4 +21,4 @@ std = ["alloc", "ironrdp-error/std"]
alloc = ["ironrdp-error/alloc"]

[dependencies]
ironrdp-error = { path = "../ironrdp-error", version = "0.1" } # public
ironrdp-error = { path = "../ironrdp-error", version = "0.2" } # public
39 changes: 39 additions & 0 deletions crates/ironrdp-dvc-com-plugin/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.1.0](https://github.com/Devolutions/IronRDP/releases/tag/ironrdp-dvc-com-plugin-v0.1.0)] - 2026-02-17

### <!-- 0 -->Security

- Add DVC COM plugin loader for native Windows DVC client plugins ([9c987bcb40](https://github.com/Devolutions/IronRDP/commit/9c987bcb40a12712fa649e1087f6cb922f9bb75c))

Implements support for loading and using native Windows Dynamic Virtual
Channel (DVC) client plugin DLLs through the COM-based IWTSPlugin API.
This enables IronRDP to leverage existing Windows DVC plugins such as
webauthn.dll for hardware security key support via RDP.

New crate: ironrdp-dvc-com-plugin
- Implements IWTSVirtualChannelManager and IWTSVirtualChannel COM interfaces
- Manages plugin lifecycle on dedicated COM worker thread
- Handles channel open/close/reopen cycles with per-instance write callbacks
- Properly bridges between COM synchronous calls and IronRDP's async runtime

Client integration:
- Add --dvc-plugin CLI argument to ironrdp-client
- Load plugins in both TCP and WebSocket connection paths
- Windows-only conditional compilation for cross-platform builds

Additional fixes:
- Fix pre-existing crash in ironrdp-tokio KDC handler on 64-bit Windows
(usize to u32 conversion in reqwest.rs)
- Add proper error handling using try_from instead of unsafe as casts
- All changes pass cargo fmt and cargo clippy with strict pedantic lints

Tested with: C:\Windows\System32\webauthn.dll


10 changes: 10 additions & 0 deletions crates/ironrdp-egfx/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [[0.1.0](https://github.com/Devolutions/IronRDP/releases/tag/ironrdp-egfx-v0.1.0)] - 2026-02-17

### <!-- 1 -->Features

- Add MS-RDPEGFX Graphics Pipeline Extension ([#1057](https://github.com/Devolutions/IronRDP/issues/1057)) ([300f9a3ea5](https://github.com/Devolutions/IronRDP/commit/300f9a3ea55d0bcaf5ce5b0a8ebf4a06897109e0))

- Add EGFX server integration with DVC bridge ([#1099](https://github.com/Devolutions/IronRDP/issues/1099)) ([4ba696c266](https://github.com/Devolutions/IronRDP/commit/4ba696c266c7065c93a691b9f818644fd471429b))



### Added

- Initial release
Expand Down
8 changes: 8 additions & 0 deletions crates/ironrdp-error/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.2.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-error-v0.1.3...ironrdp-error-v0.2.0)] - 2026-02-17

### <!-- 4 -->Bug Fixes

- Make fields of Error private ([#1074](https://github.com/Devolutions/IronRDP/issues/1074)) ([e51ed236ce](https://github.com/Devolutions/IronRDP/commit/e51ed236ce5d55dc1a4bc5f5809fd106bdd2e834))



## [[0.1.2](https://github.com/Devolutions/IronRDP/compare/ironrdp-error-v0.1.1...ironrdp-error-v0.1.2)] - 2025-01-28

### <!-- 6 -->Documentation
Expand Down
2 changes: 1 addition & 1 deletion crates/ironrdp-error/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-error"
version = "0.1.3"
version = "0.2.0"
readme = "README.md"
description = "IronPDU generic error definition"
edition.workspace = true
Expand Down
20 changes: 20 additions & 0 deletions crates/ironrdp-graphics/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,26 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [[0.7.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-graphics-v0.7.0...ironrdp-graphics-v0.7.1)] - 2026-02-17

### <!-- 1 -->Features

- Add segment wrapping utilities ([#1076](https://github.com/Devolutions/IronRDP/issues/1076)) ([5fa4964807](https://github.com/Devolutions/IronRDP/commit/5fa4964807fa15bbf1a5e3c23b365344758961aa))

Adds ZGFX segment wrapping utilities for encoding data in RDP8 format.

- Add LZ77 compression support ([#1097](https://github.com/Devolutions/IronRDP/issues/1097)) ([48715483a3](https://github.com/Devolutions/IronRDP/commit/48715483a36c824af034a51f4db0580c34825d63))

Adds ZGFX (RDP8) LZ77 compression to complement the existing
decompressor, plus a high-level API for EGFX PDU preparation with
auto/always/never mode selection.

The compressor uses a hash table mapping 3-byte prefixes to history
positions for O(1) match candidate lookup against the 2.5 MB sliding
window.



## [[0.7.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-graphics-v0.6.0...ironrdp-graphics-v0.7.0)] - 2025-12-18

### Added
Expand Down
Loading