GUACAMOLE-448: Merge support for configuring the level of caching used by RDP.

This commit is contained in:
Michael Jumper 2018-02-22 00:39:31 -08:00
commit bc5b01d4d8
2 changed files with 58 additions and 3 deletions

View File

@ -72,6 +72,9 @@ const char* GUAC_RDP_CLIENT_ARGS[] = {
"enable-full-window-drag",
"enable-desktop-composition",
"enable-menu-animations",
"disable-bitmap-caching",
"disable-offscreen-caching",
"disable-glyph-caching",
"preconnection-id",
"preconnection-blob",
@ -308,6 +311,24 @@ enum RDP_ARGS_IDX {
*/
IDX_ENABLE_MENU_ANIMATIONS,
/**
* "true" if bitmap caching should be disabled, "false" if bitmap caching
* should remain enabled.
*/
IDX_DISABLE_BITMAP_CACHING,
/**
* "true" if the offscreen caching should be disabled, false if offscren
* caching should remain enabled.
*/
IDX_DISABLE_OFFSCREEN_CACHING,
/**
* "true" if glyph caching should be disabled, false if glyph caching should
* remain enabled.
*/
IDX_DISABLE_GLYPH_CACHING,
/**
* The preconnection ID to send within the preconnection PDU when
* initiating an RDP connection, if any.
@ -701,6 +722,18 @@ guac_rdp_settings* guac_rdp_parse_args(guac_user* user,
guac_user_parse_args_boolean(user, GUAC_RDP_CLIENT_ARGS, argv,
IDX_ENABLE_MENU_ANIMATIONS, 0);
settings->disable_bitmap_caching =
guac_user_parse_args_boolean(user, GUAC_RDP_CLIENT_ARGS, argv,
IDX_DISABLE_BITMAP_CACHING, 0);
settings->disable_offscreen_caching =
guac_user_parse_args_boolean(user, GUAC_RDP_CLIENT_ARGS, argv,
IDX_DISABLE_OFFSCREEN_CACHING, 0);
settings->disable_glyph_caching =
guac_user_parse_args_boolean(user, GUAC_RDP_CLIENT_ARGS, argv,
IDX_DISABLE_GLYPH_CACHING, 0);
/* Session color depth */
settings->color_depth =
guac_user_parse_args_int(user, GUAC_RDP_CLIENT_ARGS, argv,
@ -1085,7 +1118,7 @@ static char* guac_rdp_strdup(const char* str) {
void guac_rdp_push_settings(guac_rdp_settings* guac_settings, freerdp* rdp) {
BOOL bitmap_cache;
BOOL bitmap_cache = !guac_settings->disable_bitmap_caching;
rdpSettings* rdp_settings = rdp->settings;
/* Authentication */
@ -1349,7 +1382,9 @@ void guac_rdp_push_settings(guac_rdp_settings* guac_settings, freerdp* rdp) {
/* Order support */
#ifdef LEGACY_RDPSETTINGS
bitmap_cache = rdp_settings->bitmap_cache;
rdp_settings->bitmap_cache = bitmap_cache;
rdp_settings->offscreen_bitmap_cache = !guac_settings->disable_offscreen_caching;
rdp_settings->glyph_cache = !guac_settings->disable_glyph_caching;
rdp_settings->os_major_type = OSMAJORTYPE_UNSPECIFIED;
rdp_settings->os_minor_type = OSMINORTYPE_UNSPECIFIED;
rdp_settings->desktop_resize = TRUE;
@ -1378,7 +1413,9 @@ void guac_rdp_push_settings(guac_rdp_settings* guac_settings, freerdp* rdp) {
rdp_settings->order_support[NEG_ELLIPSE_SC_INDEX] = FALSE;
rdp_settings->order_support[NEG_ELLIPSE_CB_INDEX] = FALSE;
#else
bitmap_cache = rdp_settings->BitmapCacheEnabled;
rdp_settings->BitmapCacheEnabled = bitmap_cache;
rdp_settings->OffscreenSupportLevel = !guac_settings->disable_offscreen_caching;
rdp_settings->GlyphSupportLevel = !guac_settings->disable_glyph_caching ? GLYPH_SUPPORT_FULL : GLYPH_SUPPORT_NONE;
rdp_settings->OsMajorType = OSMAJORTYPE_UNSPECIFIED;
rdp_settings->OsMinorType = OSMINORTYPE_UNSPECIFIED;
rdp_settings->DesktopResize = TRUE;

View File

@ -299,6 +299,24 @@ typedef struct guac_rdp_settings {
*/
int menu_animations_enabled;
/**
* Whether bitmap caching should be disabled. By default it is
* enabled - this allows users to explicitly disable it.
*/
int disable_bitmap_caching;
/**
* Whether offscreen caching should be disabled. By default it is
* enabled - this allows users to explicitly disable it.
*/
int disable_offscreen_caching;
/**
* Whether glyph caching should be disabled. By default it is enabled
* - this allows users to explicitly disable it.
*/
int disable_glyph_caching;
/**
* The preconnection ID to send within the preconnection PDU when
* initiating an RDP connection, if any. If no preconnection ID is