From 7af248362680ad4823808798aa563b67aee26610 Mon Sep 17 00:00:00 2001 From: Kobi Mizrachi Date: Tue, 10 Dec 2019 12:03:30 +0200 Subject: [PATCH] rail: keep extendedSpiSupported flag synced --- channels/rail/client/rail_main.c | 6 +++--- channels/rail/client/rail_orders.c | 4 +++- channels/rail/rail_common.c | 5 +++++ channels/rail/rail_common.h | 1 + channels/rail/server/rail_main.c | 7 ++++--- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/channels/rail/client/rail_main.c b/channels/rail/client/rail_main.c index 0c0786c..010bf31 100644 --- a/channels/rail/client/rail_main.c +++ b/channels/rail/client/rail_main.c @@ -172,6 +172,7 @@ static UINT rail_send_client_sysparam(RailClientContext* context, RAIL_SYSPARAM_ size_t length = RAIL_SYSPARAM_ORDER_LENGTH; railPlugin* rail; UINT error; + BOOL extendedSpiSupported; if (!context || !sysparam) return ERROR_INVALID_PARAMETER; @@ -219,9 +220,8 @@ static UINT rail_send_client_sysparam(RailClientContext* context, RAIL_SYSPARAM_ return CHANNEL_RC_NO_MEMORY; } - if ((error = rail_write_sysparam_order( - s, sysparam, - (rail->channelFlags & TS_RAIL_ORDER_HANDSHAKE_EX_FLAGS_EXTENDED_SPI_SUPPORTED) != 0))) + extendedSpiSupported = rail_is_extended_spi_supported(rail->channelFlags); + if ((error = rail_write_sysparam_order(s, sysparam, extendedSpiSupported))) { WLog_ERR(TAG, "rail_write_client_sysparam_order failed with error %" PRIu32 "!", error); Stream_Free(s, TRUE); diff --git a/channels/rail/client/rail_orders.c b/channels/rail/client/rail_orders.c index 903c533..86a3456 100644 --- a/channels/rail/client/rail_orders.c +++ b/channels/rail/client/rail_orders.c @@ -498,11 +498,13 @@ static UINT rail_recv_server_sysparam_order(railPlugin* rail, wStream* s) RailClientContext* context = rail_get_client_interface(rail); RAIL_SYSPARAM_ORDER sysparam; UINT error; + BOOL extendedSpiSupported; if (!context || !s) return ERROR_INVALID_PARAMETER; - if ((error = rail_read_sysparam_order(s, &sysparam, FALSE))) + extendedSpiSupported = rail_is_extended_spi_supported(rail->channelFlags); + if ((error = rail_read_sysparam_order(s, &sysparam, extendedSpiSupported))) { WLog_ERR(TAG, "rail_read_sysparam_order failed with error %" PRIu32 "!", error); return error; diff --git a/channels/rail/rail_common.c b/channels/rail/rail_common.c index 229029b..4e1a81d 100644 --- a/channels/rail/rail_common.c +++ b/channels/rail/rail_common.c @@ -567,3 +567,8 @@ UINT rail_write_sysparam_order(wStream* s, const RAIL_SYSPARAM_ORDER* sysparam, return error; } + +BOOL rail_is_extended_spi_supported(UINT32 channelFlags) +{ + return channelFlags & TS_RAIL_ORDER_HANDSHAKE_EX_FLAGS_EXTENDED_SPI_SUPPORTED; +} diff --git a/channels/rail/rail_common.h b/channels/rail/rail_common.h index ee88e79..aa83b8a 100644 --- a/channels/rail/rail_common.h +++ b/channels/rail/rail_common.h @@ -71,5 +71,6 @@ UINT rail_write_unicode_string_value(wStream* s, const RAIL_UNICODE_STRING* unic UINT rail_read_sysparam_order(wStream* s, RAIL_SYSPARAM_ORDER* sysparam, BOOL extendedSpiSupported); UINT rail_write_sysparam_order(wStream* s, const RAIL_SYSPARAM_ORDER* sysparam, BOOL extendedSpiSupported); +BOOL rail_is_extended_spi_supported(UINT32 channelsFlags); #endif /* FREERDP_CHANNEL_RAIL_COMMON_H */ diff --git a/channels/rail/server/rail_main.c b/channels/rail/server/rail_main.c index 5bdfd23..2e4dad4 100644 --- a/channels/rail/server/rail_main.c +++ b/channels/rail/server/rail_main.c @@ -334,8 +334,7 @@ static UINT rail_send_server_sysparam(RailServerContext* context, if (!priv) return ERROR_INVALID_PARAMETER; - extendedSpiSupported = - !((priv->channelFlags & TS_RAIL_ORDER_HANDSHAKE_EX_FLAGS_EXTENDED_SPI_SUPPORTED) == 0); + extendedSpiSupported = rail_is_extended_spi_supported(context->priv->channelFlags); s = rail_pdu_init(RAIL_SYSPARAM_ORDER_LENGTH); if (!s) @@ -986,11 +985,13 @@ static UINT rail_recv_client_sysparam_order(RailServerContext* context, RAIL_SYSPARAM_ORDER* sysparam, wStream* s) { UINT error; + BOOL extendedSpiSupported; if (!context || !sysparam || !s) return ERROR_INVALID_PARAMETER; - if ((error = rail_read_sysparam_order(s, sysparam, FALSE))) + extendedSpiSupported = rail_is_extended_spi_supported(context->priv->channelFlags); + if ((error = rail_read_sysparam_order(s, sysparam, extendedSpiSupported))) { WLog_ERR(TAG, "rail_read_sysparam_order failed with error %" PRIu32 "!", error); return error; -- 2.7.4