diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index b4c5e86d6..d23f1106b 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -689,6 +689,7 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL; #define FreeRDP_RemoteFxCodecId 3650 #define FreeRDP_RemoteFxCodecMode 3651 #define FreeRDP_RemoteFxImageCodec 3652 +#define FreeRDP_RemoteFxCaptureFlags 3653 #define FreeRDP_NSCodec 3712 #define FreeRDP_NSCodecId 3713 #define FreeRDP_FrameAcknowledge 3714 @@ -1155,7 +1156,8 @@ struct rdp_settings ALIGN64 UINT32 RemoteFxCodecId; /* 3650 */ ALIGN64 UINT32 RemoteFxCodecMode; /* 3651 */ ALIGN64 BOOL RemoteFxImageCodec; /* 3652 */ - UINT64 padding3712[3712 - 3653]; /* 3653 */ + ALIGN64 UINT32 RemoteFxCaptureFlags; /* 3653 */ + UINT64 padding3712[3712 - 3654]; /* 3654 */ /* NSCodec */ ALIGN64 BOOL NSCodec; /* 3712 */ diff --git a/libfreerdp/core/capabilities.c b/libfreerdp/core/capabilities.c index 297cfb433..66e07ac59 100644 --- a/libfreerdp/core/capabilities.c +++ b/libfreerdp/core/capabilities.c @@ -2487,6 +2487,21 @@ BOOL rdp_read_bitmap_codecs_capability_set(wStream* s, UINT16 length, rdpSetting if (remainingLength < codecPropertiesLength) return FALSE; + if (settings->ServerMode) + { + if (UuidEqual(&codecGuid, &CODEC_GUID_REMOTEFX, &rpc_status)) + { + stream_seek_UINT32(s); /* length */ + stream_read_UINT32(s, settings->RemoteFxCaptureFlags); /* captureFlags */ + stream_rewind(s, 8); + + if (settings->RemoteFxCaptureFlags & CARDP_CAPS_CAPTURE_NON_CAC) + { + settings->RemoteFxOnly = TRUE; + } + } + } + stream_seek(s, codecPropertiesLength); /* codecProperties */ remainingLength -= codecPropertiesLength;