From 18a0362dab12160fa9e564904c07bc4f4e1e82bc Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 1 Mar 2021 17:39:41 -0800 Subject: [PATCH] GUACAMOLE-1302: Add RDP support for forcing lossless compression. --- src/protocols/rdp/rdp.c | 4 ++++ src/protocols/rdp/settings.c | 13 +++++++++++++ src/protocols/rdp/settings.h | 6 ++++++ 3 files changed, 23 insertions(+) diff --git a/src/protocols/rdp/rdp.c b/src/protocols/rdp/rdp.c index db62bc4b..485e132b 100644 --- a/src/protocols/rdp/rdp.c +++ b/src/protocols/rdp/rdp.c @@ -435,6 +435,10 @@ static int guac_rdp_handle_connection(guac_client* client) { rdp_client->settings->width, rdp_client->settings->height); + /* Use lossless compression only if requested (otherwise, use default + * heuristics) */ + guac_common_display_set_lossless(rdp_client->display, settings->lossless); + rdp_client->current_surface = rdp_client->display->default_surface; rdp_client->available_svc = guac_common_list_alloc(); diff --git a/src/protocols/rdp/settings.c b/src/protocols/rdp/settings.c index f834a7fa..5a1d48e9 100644 --- a/src/protocols/rdp/settings.c +++ b/src/protocols/rdp/settings.c @@ -128,6 +128,8 @@ const char* GUAC_RDP_CLIENT_ARGS[] = { "wol-broadcast-addr", "wol-udp-port", "wol-wait-time", + + "force-lossless", NULL }; @@ -639,6 +641,12 @@ enum RDP_ARGS_IDX { */ IDX_WOL_WAIT_TIME, + /** + * "true" if all graphical updates for this connection should use lossless + * compresion only, "false" or blank otherwise. + */ + IDX_FORCE_LOSSLESS, + RDP_ARGS_COUNT }; @@ -779,6 +787,11 @@ guac_rdp_settings* guac_rdp_parse_args(guac_user* user, settings->height, settings->resolution); + /* Lossless compression */ + settings->lossless = + guac_user_parse_args_boolean(user, GUAC_RDP_CLIENT_ARGS, argv, + IDX_FORCE_LOSSLESS, 0); + /* Domain */ settings->domain = guac_user_parse_args_string(user, GUAC_RDP_CLIENT_ARGS, argv, diff --git a/src/protocols/rdp/settings.h b/src/protocols/rdp/settings.h index c540fcc8..f80cde48 100644 --- a/src/protocols/rdp/settings.h +++ b/src/protocols/rdp/settings.h @@ -192,6 +192,12 @@ typedef struct guac_rdp_settings { */ int resolution; + /** + * Whether all graphical updates for this connection should use lossless + * compression only. + */ + int lossless; + /** * Whether audio is enabled. */