Add a new QOIZ codec (UUID 229cc6dc-a860-4b52-b4d8-053a22b3892b) for
SetSurface command. The PDU data contains the same data as the QOI
codec, with zstd compression.
Some benchmarks showing interesting results (using ironrdp/perfenc)
QOI: 10s user CPU, 96.20% compression
QOIZ: 11s user CPU, 99.76% compression
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
The Quite OK Image format ([1]) losslessly compresses images to a
similar size of PNG, while offering 20x-50x faster encoding and 3x-4x
faster decoding.
Add a new QOI codec (UUID 4dae9af8-b399-4df6-b43a-662fd9c0f5d6) for
SetSurface command. The PDU data contains the QOI header (14 bytes) +
data "chunks" and the end marker (8 bytes).
Some benchmarks showing interesting results (using ironrdp/perfenc)
Bitmap: 74s user CPU, 92.5% compression
RemoteFx (lossy): 201s user CPU, 96.72% compression
QOI: 10s user CPU, 96.20% compression
Note: the "qoicoubeh" crate is my own fork of "qoi-rust" project. The
plan is to switch back to it as soon as the maintainer resume its
activites (https://github.com/aldanor/qoi-rust/issues/14).
[1]: https://qoiformat.org/
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Teach the server to support customizable codecs set. Use the same
logic/parsing as the client codecs configuration.
Replace "with_remote_fx" with "codecs".
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
No need to special-case codec_properties_len == 0, defer to the decoding
of the properties instead.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
"session" has a fixed set of supported codecs with associated IDs.
"connector" must expose the set of codecs during capabilities exchange.
It currently uses hard-codes codec IDs in different places.
Move the BitmapCodecs set to ironrdp-pdu. Shared code will be used by
the server, so this is a suitable common place.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
According to the specification, the value does not need to be in the range:
4060f07e-9d73-454d-841e-131a93aca675
(the ironrdp-server can send larger values)
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
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
The minimal_size() logic didn't properly take into account the overall
PDU size.
This fixes random error/disconnect in client.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Adds support for license caching by storing the license obtained
from SERVER_UPGRADE_LICENSE message and sending
CLIENT_LICENSE_INFO if a license requested by the server is already
stored in the cache.
Co-authored-by: Benoît Cortier <3809077+CBenoit@users.noreply.github.com>
Teleport is generating many errors when using the latest IronRDP crates.
This patch is re-exporting a few items from ironrdp_core so it’s
easier for them to incrementally migrate to the newer versions.
ironrdp-pdu contains lots of code that we don’t actually need in other crates such as the virtual channels.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>