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
600 changes: 205 additions & 395 deletions Cargo.lock

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions crates/ironrdp-acceptor/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ 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.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-acceptor-v0.9.0...ironrdp-acceptor-v0.9.1)] - 2026-06-26

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

- Negotiate the MCS message channel ([#1347](https://github.com/Devolutions/IronRDP/issues/1347)) ([efa5732805](https://github.com/Devolutions/IronRDP/commit/efa573280572f3c0f0270a40ae51a154562706cc))

Updates the handshake to properly negotiate the MCS message channel by advertising Extended Client Data Blocks support and, when requested by the client, allocating/joining the message channel and surfacing its ID in AcceptorResult. This enables server-initiated PDUs that must use the message channel (e.g., network auto-detect) to have a valid transport.



## [[0.9.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-acceptor-v0.8.0...ironrdp-acceptor-v0.9.0)] - 2026-05-27

### <!-- 4 -->Bug Fixes
Expand Down
2 changes: 1 addition & 1 deletion 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.9.0"
version = "0.9.1"
readme = "README.md"
description = "State machines to drive an RDP connection acceptance sequence"
edition.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion crates/ironrdp-client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ ironrdp = { path = "../ironrdp", version = "0.16", features = [
"echo",
] }
ironrdp-core = { path = "../ironrdp-core", version = "0.2", features = ["alloc"] }
ironrdp-rdpsnd-native = { path = "../ironrdp-rdpsnd-native", version = "0.6" }
ironrdp-rdpsnd-native = { path = "../ironrdp-rdpsnd-native", version = "0.7" }
ironrdp-tls = { path = "../ironrdp-tls", version = "0.2" }
ironrdp-mstsgu = { path = "../ironrdp-mstsgu" }
ironrdp-tokio = { path = "../ironrdp-tokio", version = "0.9", features = ["reqwest"] }
Expand Down
16 changes: 16 additions & 0 deletions crates/ironrdp-cliprdr/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,22 @@ 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.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-cliprdr-v0.6.0...ironrdp-cliprdr-v0.6.1)] - 2026-06-26

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

- Release outgoing locks before initiating a file copy ([#1375](https://github.com/Devolutions/IronRDP/issues/1375)) ([5d534f10a6](https://github.com/Devolutions/IronRDP/commit/5d534f10a6f62ac7a860521b4e95c8c47b754612))

- Lower verbosity of routine logs in library crates ([c36032f91b](https://github.com/Devolutions/IronRDP/commit/c36032f91b27390a2cd34bfb300cfbe099d847a9))

Library crates should not emit info! for routine, repeating operations;
that floods the default logs of the final consumer, which owns the
verbosity decision. Reserve info! for rare connection/session lifecycle
milestones, debug! for significant one-off events, and trace! for the
fine-grained detail only needed when nothing else explains a problem.



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

### <!-- 1 -->Features
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.6.0"
version = "0.6.1"
readme = "README.md"
description = "CLIPRDR static channel for clipboard implemented as described in MS-RDPECLIP"
edition.workspace = true
Expand Down
12 changes: 12 additions & 0 deletions crates/ironrdp-connector/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@ 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.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-connector-v0.9.0...ironrdp-connector-v0.9.1)] - 2026-06-26

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

- Stay in CapabilitiesExchange when activation handles DeactivateAll ([#1371](https://github.com/Devolutions/IronRDP/issues/1371)) ([a4fde9fc50](https://github.com/Devolutions/IronRDP/commit/a4fde9fc50f41d1534f32e619bbe0bbbddc64f25))

### <!-- 7 -->Build

- Align sspi and picky dependencies ([#1385](https://github.com/Devolutions/IronRDP/issues/1385)) ([0a461b5d36](https://github.com/Devolutions/IronRDP/commit/0a461b5d366677fd2f0f664a4f0074e4ab697c42))



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

### <!-- 1 -->Features
Expand Down
2 changes: 1 addition & 1 deletion 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.9.0"
version = "0.9.1"
readme = "README.md"
description = "State machines to drive an RDP connection sequence"
edition.workspace = true
Expand Down
64 changes: 64 additions & 0 deletions crates/ironrdp-core/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,70 @@ 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.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-core-v0.2.0...ironrdp-core-v0.2.1)] - 2026-06-26

### <!-- 5 -->Performance

- Replace softbuffer with direct put_image_data canvas present ([#1374](https://github.com/Devolutions/IronRDP/issues/1374)) ([d3705af18c](https://github.com/Devolutions/IronRDP/commit/d3705af18cff1851f4d48017affcb85aaa678d57))

## Summary

The web client presented frames through `softbuffer`, whose web backend
repacks
the **whole surface** (RGBA β†’ u32 β†’ RGBA into a fresh buffer) on every
present.
This replaces it with a direct `put_image_data` that uploads only the
dirty
region, and drops the `softbuffer` dependency.

Same idea as the IronVNC change.

## What changed

- Remove the `softbuffer` dependency; present each dirty region with
`put_image_data` at its origin.
- No full-surface buffer and no per-region scratch.
`extract_partial_image` fills
a single `WriteBuf` reused across frames, so steady-state draws don't
allocate.
- Force opaque alpha before upload (kept β€” see Correctness).
- Add `WriteBuf::filled_mut` to `ironrdp-core` (mutable counterpart of
`filled`).
- `web-sys`: add `CanvasRenderingContext2d` + `ImageData`, drop the
softbuffer-only
features.

## Performance

Draw-stage time on a 1080p replay (595 frames / 110 dirty regions),
headless
Chromium, 8 measured passes Γ— 3 runs, median. Both rows are reproducible
branches
off the replay-bench harness; the only difference is the render path.

| Render path | draw (ms) | vs softbuffer | branch |
|---|--:|--:|---|
| softbuffer `present_with_damage` | ~1031 | β€” | `bench/draw-softbuffer`
|
| this PR (direct upload, reused `WriteBuf`) | ~97 | **~10.6Γ—** |
`bench/draw-zerocopy` |

- The win is structural: upload the dirty region instead of repacking
the whole
surface every present.
- Reusing one `WriteBuf` (vs a per-frame allocation) keeps the
steady-state draw
allocation-free; the remaining cost is the unavoidable `ImageData` JS
copy.
- Output is **byte-identical**: framebuffer CRC32 `2d8e1b79` matches the
recorded
ground truth and the rendered-canvas FNV-1a is unchanged.
- Absolute ms carry ~Β±15% noise from machine load (decode drifted
1.5–1.9 s); the
ratio held across runs.



## [[0.2.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-core-v0.1.5...ironrdp-core-v0.2.0)] - 2026-05-27

### <!-- 7 -->Build
Expand Down
2 changes: 1 addition & 1 deletion 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.2.0"
version = "0.2.1"
readme = "README.md"
description = "IronRDP common traits and types"
edition.workspace = true
Expand Down
14 changes: 14 additions & 0 deletions crates/ironrdp-dvc-com-plugin/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,20 @@ 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.3](https://github.com/Devolutions/IronRDP/compare/ironrdp-dvc-com-plugin-v0.1.2...ironrdp-dvc-com-plugin-v0.1.3)] - 2026-06-26

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

- Lower verbosity of routine logs in library crates ([c36032f91b](https://github.com/Devolutions/IronRDP/commit/c36032f91b27390a2cd34bfb300cfbe099d847a9))

Library crates should not emit info! for routine, repeating operations;
that floods the default logs of the final consumer, which owns the
verbosity decision. Reserve info! for rare connection/session lifecycle
milestones, debug! for significant one-off events, and trace! for the
fine-grained detail only needed when nothing else explains a problem.



## [[0.1.2](https://github.com/Devolutions/IronRDP/compare/ironrdp-dvc-com-plugin-v0.1.1...ironrdp-dvc-com-plugin-v0.1.2)] - 2026-06-05


Expand Down
2 changes: 1 addition & 1 deletion crates/ironrdp-dvc-com-plugin/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-dvc-com-plugin"
version = "0.1.2"
version = "0.1.3"
readme = "README.md"
description = "DVC COM client plugin loader for IronRDP (Windows)"
edition.workspace = true
Expand Down
16 changes: 16 additions & 0 deletions crates/ironrdp-dvc-pipe-proxy/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,22 @@ 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.4.2](https://github.com/Devolutions/IronRDP/compare/ironrdp-dvc-pipe-proxy-v0.4.1...ironrdp-dvc-pipe-proxy-v0.4.2)] - 2026-06-26

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

- Lower verbosity of routine logs in library crates ([c36032f91b](https://github.com/Devolutions/IronRDP/commit/c36032f91b27390a2cd34bfb300cfbe099d847a9))

Library crates should not emit info! for routine, repeating operations;
that floods the default logs of the final consumer, which owns the
verbosity decision. Reserve info! for rare connection/session lifecycle
milestones, debug! for significant one-off events, and trace! for the
fine-grained detail only needed when nothing else explains a problem.

- Remove trailing punctuation from log messages ([#1380](https://github.com/Devolutions/IronRDP/issues/1380)) ([f38554277a](https://github.com/Devolutions/IronRDP/commit/f38554277a1af3085c1fa5739cda515939d09abf))



## [[0.4.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-dvc-pipe-proxy-v0.4.0...ironrdp-dvc-pipe-proxy-v0.4.1)] - 2026-06-05


Expand Down
2 changes: 1 addition & 1 deletion crates/ironrdp-dvc-pipe-proxy/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-dvc-pipe-proxy"
version = "0.4.1"
version = "0.4.2"
readme = "README.md"
description = "DVC named pipe proxy for IronRDP"
edition.workspace = true
Expand Down
8 changes: 8 additions & 0 deletions crates/ironrdp-dvc/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.7.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-dvc-v0.7.0...ironrdp-dvc-v0.7.1)] - 2026-06-26

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

- Expose dynamic channel accessors ([#1368](https://github.com/Devolutions/IronRDP/issues/1368)) ([985d353543](https://github.com/Devolutions/IronRDP/commit/985d353543cf45eacfe0cc57aca86502665a3a44))



## [[0.7.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-dvc-v0.6.0...ironrdp-dvc-v0.7.0)] - 2026-06-05

### <!-- 4 -->Bug Fixes
Expand Down
2 changes: 1 addition & 1 deletion crates/ironrdp-dvc/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-dvc"
version = "0.7.0"
version = "0.7.1"
readme = "README.md"
description = "DRDYNVC static channel implementation and traits to implement dynamic virtual channels"
edition.workspace = true
Expand Down
8 changes: 8 additions & 0 deletions crates/ironrdp-pdu/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.8.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-pdu-v0.8.0...ironrdp-pdu-v0.8.1)] - 2026-06-26

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

- Set COMPRESSION_USED on the FastPath update header when compressed ([#1382](https://github.com/Devolutions/IronRDP/issues/1382)) ([3f96d0029d](https://github.com/Devolutions/IronRDP/commit/3f96d0029d37d3cee84b419bbf4d53b5519e385d))



## [[0.8.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-pdu-v0.7.0...ironrdp-pdu-v0.8.0)] - 2026-05-27

### <!-- 1 -->Features
Expand Down
2 changes: 1 addition & 1 deletion crates/ironrdp-pdu/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-pdu"
version = "0.8.0"
version = "0.8.1"
readme = "README.md"
description = "RDP PDU encoding and decoding"
edition.workspace = true
Expand Down
16 changes: 16 additions & 0 deletions crates/ironrdp-rdpsnd-native/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,22 @@ 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.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-rdpsnd-native-v0.6.0...ironrdp-rdpsnd-native-v0.7.0)] - 2026-06-26

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

- Lower verbosity of routine logs in library crates ([c36032f91b](https://github.com/Devolutions/IronRDP/commit/c36032f91b27390a2cd34bfb300cfbe099d847a9))

Library crates should not emit info! for routine, repeating operations;
that floods the default logs of the final consumer, which owns the
verbosity decision. Reserve info! for rare connection/session lifecycle
milestones, debug! for significant one-off events, and trace! for the
fine-grained detail only needed when nothing else explains a problem.

- [**breaking**] Replace anyhow with typed RdpsndNativeError ([#1277](https://github.com/Devolutions/IronRDP/issues/1277)) ([37483ebd9b](https://github.com/Devolutions/IronRDP/commit/37483ebd9b7628325666f434e1679e7f885fb289))



## [[0.6.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-rdpsnd-native-v0.5.0...ironrdp-rdpsnd-native-v0.6.0)] - 2026-05-27

### <!-- 4 -->Bug Fixes
Expand Down
2 changes: 1 addition & 1 deletion crates/ironrdp-rdpsnd-native/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-rdpsnd-native"
version = "0.6.0"
version = "0.7.0"
description = "Native RDPSND static channel backend implementations for IronRDP"
edition.workspace = true
rust-version = "1.89"
Expand Down
10 changes: 10 additions & 0 deletions crates/ironrdp-server/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ 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.12.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-server-v0.12.0...ironrdp-server-v0.12.1)] - 2026-06-26

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

- Expose NetworkAutoDetect RTT via a shared handle ([#1346](https://github.com/Devolutions/IronRDP/issues/1346)) ([481ea5d161](https://github.com/Devolutions/IronRDP/commit/481ea5d161964b06a08f0b1ace0a1efd11773b4a))

Exposes the server’s NetworkAutoDetect RTT measurement via a shared Arc<AtomicU32> handle so display backends can read a fresh RTT value even after run() takes ownership of the server.



## [[0.12.0](https://github.com/Devolutions/IronRDP/compare/ironrdp-server-v0.11.0...ironrdp-server-v0.12.0)] - 2026-06-05

### <!-- 1 -->Features
Expand Down
2 changes: 1 addition & 1 deletion crates/ironrdp-server/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-server"
version = "0.12.0"
version = "0.12.1"
readme = "README.md"
description = "Extendable skeleton for implementing custom RDP servers"
edition.workspace = true
Expand Down
12 changes: 12 additions & 0 deletions crates/ironrdp-tls/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@ 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.2](https://github.com/Devolutions/IronRDP/compare/ironrdp-tls-v0.2.1...ironrdp-tls-v0.2.2)] - 2026-06-26

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

- Expose negotiated TLS version and cipher suite ([#1384](https://github.com/Devolutions/IronRDP/issues/1384)) ([8f76260ea7](https://github.com/Devolutions/IronRDP/commit/8f76260ea753f546a577ad7a1176a5740adc94cf))

Adds a backend-neutral way to query the TLS parameters negotiated for an established
ironrdp-tls::TlsStream, enabling downstream diagnostic tooling to report the negotiated
protocol version and cipher suite alongside the existing certificate information.



## [[0.2.1](https://github.com/Devolutions/IronRDP/compare/ironrdp-tls-v0.2.0...ironrdp-tls-v0.2.1)] - 2026-05-27

### <!-- 7 -->Build
Expand Down
2 changes: 1 addition & 1 deletion crates/ironrdp-tls/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ironrdp-tls"
version = "0.2.1"
version = "0.2.2"
readme = "README.md"
description = "TLS boilerplate common with most IronRDP clients"
edition.workspace = true
Expand Down
Loading