Commit graph

155 commits

Author SHA1 Message Date
Marc-Andre Lureau
806f1d7694
fix(server): use desktop size for RFX channel size (#756) 2025-04-17 08:01:58 +02:00
Alex Yusiuk
fe676eeac5
refactor(web): follow-up to #722 (#747) 2025-04-14 14:05:19 +00:00
Marc-André Lureau
184cfd24ae test(server): run the fast_path tests from testsuite-core
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-04-10 10:21:54 +02:00
Marc-André Lureau
2c7556ba1e refactor(server): make UpdateEncoder::update() an iterator
A single display update can now result in multiple commands / update
code (FastPathUpdate).

The update dispatching and bitmap encoding is now done by the
UpdateEncoder itself.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-04-10 10:21:54 +02:00
Marc-André Lureau
fde18ad01a refactor(server): make UpdateFragmenter own its data
Trying to share a common buffer creates all sort of complicated lifetime
issues when trying to move the encoding to a 'static handler, or when
implementing iterators. It's not worth it.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-04-10 10:21:54 +02:00
Marc-André Lureau
f21a6bf7d0 test(server): add fragment test
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-04-10 10:21:54 +02:00
Marc-André Lureau
5ffeeea3ae refactor(server): move fast-path fragmenter to own unit
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-04-10 10:21:54 +02:00
Marc-André Lureau
aeb1193674 feat(server): keep last full-frame/desktop update
It should reflect client drawing state.

In following changes, we will fix it to draw bitmap updates on it, to
keep it up to date.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 18:11:03 +02:00
Marc-André Lureau
9d86c28865 refactor(server): pass bitmapUpdate by ref
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 18:11:03 +02:00
Marc-André Lureau
137d91ae7a feat(server): implement some Encoder Debug
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 18:11:03 +02:00
Marc-André Lureau
c2164716c3 refactor(server): split UpdateEncoder
The bitmap encoder dispatching code was becoming convoluted and the same
struct was handling PduEncoding and various bitmap encoding handling.
Instead, split UpdateEncoder in different types and concerns.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 18:11:03 +02:00
Marc-André Lureau
a76e84d459 feat(server): add BitmapUpdate::sub()
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 18:11:03 +02:00
Marc-André Lureau
229070a435 refactor(server)!: rename left/top -> x/y
This is more idiomatic, and thus less confusing.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 18:11:03 +02:00
Marc-André Lureau
1e87961d16 feat(server): add Framebuffer helper struct
This will hold the updated bitmap data for the whole framebuffer.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 18:11:03 +02:00
Marc-André Lureau
3c43fdda76 refactor(server)!: use bytes, allowing shareable bitmap data
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 18:11:03 +02:00
Marc-André Lureau
7f57817805 feat(server): add stride debug info
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 18:11:03 +02:00
Marc-André Lureau
db6f4cdb7f refactor(server)!: drop support for pixelOrder
Dealing with multiple formats is sufficiently annoying, there isn't much
need for awkward image layout. This was done for efficiency reason for
bitmap encoding, but bitmap is really inefficient anyway and very few
servers will actually provide bottom to top images (except with GL/GPU
textures, but this is not in scope yet).

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 18:11:03 +02:00
Marc-André Lureau
d47c1e6415 debug(server): trace ServerEvent dispatching
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-31 00:36:26 +02:00
Benoît CORTIER
19d6b1ea83 refactor: fix new clippy warnings 2025-03-13 11:03:10 +01:00
devolutionsbot
b19008c029
chore(release): prepare for publishing (#699) 2025-03-13 09:06:30 +00:00
devolutionsbot
f2c8482ba6
build: bump ironrdp-pdu (#698) 2025-03-12 20:59:54 +00:00
Marc-André Lureau
7cb1ac99d1 refactor(pdu)!: remove RfxChannelWidth and RfxChannelHeight structs
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-12 21:34:47 +01:00
devolutionsbot
92dd927ec2
chore(release): prepare for publishing (#696) 2025-03-12 16:40:47 +00:00
Benoît Cortier
c21fa44fd6
build: do not use workspace dependencies (#695)
As written in the workspace Cargo.toml:

> Note that for better cross-tooling interactions, do not use workspace
dependencies for anything that is not "workspace internal" (e.g.: mostly
dev-dependencies). E.g.: release-plz can’t detect that a dependency has
been
updated in a way warranting a version bump in the dependant if no commit
is
touching a file associated to the crate. It is technically okay to use
that
for "private" (i.e.: not used in the public API) dependencies too, but
we
still want to make follow-up releases to stay up to date with the
community,
even for private dependencies.

Expectation is that release-plz will be able to auto-detect when bumping
dependents is necessary.

Closes #689
2025-03-12 09:25:01 -04:00
Marc-André Lureau
81984f9377 refactor(pdu): move rfx to Encode/Decode traits
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-03-04 16:08:55 +01:00
devolutionsbot
e6d6e9d8a7
chore(release): prepare for publishing (#628) 2025-01-28 23:24:35 +00:00
Marc-Andre Lureau
a6c36511f6
feat(server): add volume support (#641)
Add server messages and API to support setting client volume.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-01-27 08:10:15 -05:00
Marc-André Lureau
0f9877ad39 fix(server): check client size
It's problematic when the client didn't resize, as we send bitmap
updates that don't fit. The client will likely drop the connection.
Let's have a warning for this case in the server.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-01-27 07:35:36 -05:00
Marc-André Lureau
e21c5568a4 refactor(server): factor out deactivate_reactivate()
This makes code slightly nicer and allow further code reuse.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-01-27 07:35:36 -05:00
Marc-André Lureau
a0fccf8d1a feat(server): advertize Bitmap::desktopResizeFlag
This makes freerdp keep the flag up and handle desktop
resize/deactivation-reactivation. It should be okay to advertize,
if the server doesn't resize anyway, I guess.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-01-27 07:35:36 -05:00
Marc-André Lureau
82c7c2f5b0 fix(server): do not restart static channels on reactivation
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-01-27 07:35:36 -05:00
Marc-André Lureau
c4587b537c fix(server): reattach existing channels
I couldn't find any explicit behaviour described in the specification,
but apparently, we must just keep the channel state as they were during
reactivation. This fixes various state issues during client resize.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-01-27 07:35:36 -05:00
Marc-André Lureau
63963182b5 fix(server): drop unexpected PDUs during deactivation-reactivation
The current behaviour of handling unmatched PDUs in fn read_by_hint()
isn't good enough. An unexpected PDUs may be received and fail to be
decoded during Acceptor::step().

Change the code to simply drop unexpected PDUs (as opposed to attempting
to replay the unmatched leftover, which isn't clearly needed)

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2025-01-27 07:35:36 -05:00
Sébastien Duquette
dd249909a8
docs: use CDN URLs instead of the blob storage URLs for Devolutions logo (#631) 2025-01-09 10:06:10 -05:00
Marc-Andre Lureau
a0d32d7245
fix: fix commit 9198284263 (#626)
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Changelog: ignore
2025-01-06 09:29:30 -05:00
devolutionsbot
9292988a88
chore(release): prepare for publishing (#624)
Co-authored-by: Benoît Cortier <3809077+CBenoit@users.noreply.github.com>
2024-12-17 18:18:10 +00:00
Marc-Andre Lureau
9198284263
feat(server): make TlsIdentityCtx accept PEM files (#623)
This is in general more convenient than DER files.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2024-12-17 10:50:39 -05:00
devolutionsbot
97ef9f0acb
chore(release): prepare for publishing (#611) 2024-12-14 14:32:28 +00:00
Benoît Cortier
0c10367ebc
chore: symlinks to license files in packages (#604)
Add symlinks to the license files in crates that we are publishing on
crates.io.
2024-12-11 08:13:26 -05:00
Benoît Cortier
755738ff9c
chore: prepare release (#598)
Crates to release:

- ironrdp-acceptor -> 0.2.0
- ironrdp-async -> 0.2.0
- ironrdp-blocking -> 0.2.0
- ironrdp-session -> 0.2.0
- ironrdp-server -> 0.3.0
- ironrdp -> 0.7.0
2024-12-06 09:51:14 +00:00
Benoît Cortier
fc23992dea
chore: prepare release (#585)
Crates to release:

- ironrdp-core -> 0.1.1
- ironrdp-pdu -> 0.1.1
- ironrdp-svc -> 0.1.1
- ironrdp-connector -> 0.2.0
- ironrdp-server -> 0.2.0
- ironrdp -> 0.6.0
2024-11-21 10:14:01 -05:00
Marc-Andre Lureau
2e59014c97
feat(server): add GetLocalAddr (#581)
Add a server event to lookup the actual server listen address.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2024-11-20 10:06:57 -05:00
Benoît CORTIER
294af1cc5c style: cargo +nightly fmt 2024-11-20 01:28:31 +09:00
Benoît CORTIER
807eb59b07 refactor: enable clippy::std_instead_of_core lint 2024-11-20 01:28:31 +09:00
Benoît CORTIER
d26e64e4c2 refactor: enable clippy::similar_names lint 2024-11-20 01:28:31 +09:00
Marc-André Lureau
de67e58dd5 perf(server): make tiles encoding parallel with rayon
This can help a lot wall-clock time, but depends on CPU.

rfx_enc                 time:   [9.7885 ms 10.123 ms 10.439 ms]
                        change: [-80.484% -79.847% -79.208%] (p = 0.00 < 0.05)
                        Performance has improved.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2024-11-05 20:16:43 +09:00
Marc-André Lureau
6e567d401f feat(bench): benchmark the remotefx encoder
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2024-11-05 20:16:43 +09:00
Marc-André Lureau
ff81e7502c refactor(server): factor out remotefx tile encoding
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2024-11-05 20:16:43 +09:00
Marc-André Lureau
631964d615 feat(server): warn if encoding takes >10ms
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2024-11-05 20:16:43 +09:00
Marc-Andre Lureau
3e738a96ed
feat(server): add builder option to set remotefx (#569)
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2024-10-31 14:16:03 +00:00