diff --git a/include/freerdp/settings_types.h b/include/freerdp/settings_types.h index 0f6d98d72..ef489e3b9 100644 --- a/include/freerdp/settings_types.h +++ b/include/freerdp/settings_types.h @@ -160,6 +160,7 @@ extern "C" #define RNS_UD_CS_WANT_32BPP_SESSION 0x0002 #define RNS_UD_CS_SUPPORT_STATUSINFO_PDU 0x0004 #define RNS_UD_CS_STRONG_ASYMMETRIC_KEYS 0x0008 +#define RNS_UD_CS_RELATIVE_MOUSE_INPUT 0x0010 #define RNS_UD_CS_VALID_CONNECTION_TYPE 0x0020 #define RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU 0x0040 #define RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT 0x0080 diff --git a/libfreerdp/core/gcc.c b/libfreerdp/core/gcc.c index 4b07a37ea..c53543298 100644 --- a/libfreerdp/core/gcc.c +++ b/libfreerdp/core/gcc.c @@ -170,7 +170,8 @@ static const char* rdp_early_client_caps_string(UINT32 flags, char* buffer, size char msg[32] = { 0 }; const UINT32 mask = RNS_UD_CS_SUPPORT_ERRINFO_PDU | RNS_UD_CS_WANT_32BPP_SESSION | RNS_UD_CS_SUPPORT_STATUSINFO_PDU | RNS_UD_CS_STRONG_ASYMMETRIC_KEYS | - RNS_UD_CS_VALID_CONNECTION_TYPE | RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU | + RNS_UD_CS_RELATIVE_MOUSE_INPUT | RNS_UD_CS_VALID_CONNECTION_TYPE | + RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU | RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT | RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL | RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE | RNS_UD_CS_SUPPORT_HEARTBEAT_PDU | RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN; @@ -184,6 +185,8 @@ static const char* rdp_early_client_caps_string(UINT32 flags, char* buffer, size winpr_str_append("RNS_UD_CS_SUPPORT_STATUSINFO_PDU", buffer, size, "|"); if (flags & RNS_UD_CS_STRONG_ASYMMETRIC_KEYS) winpr_str_append("RNS_UD_CS_STRONG_ASYMMETRIC_KEYS", buffer, size, "|"); + if (flags & RNS_UD_CS_RELATIVE_MOUSE_INPUT) + winpr_str_append("RNS_UD_CS_RELATIVE_MOUSE_INPUT", buffer, size, "|"); if (flags & RNS_UD_CS_VALID_CONNECTION_TYPE) winpr_str_append("RNS_UD_CS_VALID_CONNECTION_TYPE", buffer, size, "|"); if (flags & RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU) @@ -971,10 +974,10 @@ static UINT16 filterAndLogEarlyClientCapabilityFlags(UINT32 flags) const UINT32 mask = (RNS_UD_CS_SUPPORT_ERRINFO_PDU | RNS_UD_CS_WANT_32BPP_SESSION | RNS_UD_CS_SUPPORT_STATUSINFO_PDU | RNS_UD_CS_STRONG_ASYMMETRIC_KEYS | - RNS_UD_CS_VALID_CONNECTION_TYPE | RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU | - RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT | RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL | - RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE | RNS_UD_CS_SUPPORT_HEARTBEAT_PDU | - RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN); + RNS_UD_CS_RELATIVE_MOUSE_INPUT | RNS_UD_CS_VALID_CONNECTION_TYPE | + RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU | RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT | + RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL | RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE | + RNS_UD_CS_SUPPORT_HEARTBEAT_PDU | RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN); const UINT32 filtered = flags & mask; const UINT32 unknown = flags & ~mask; if (unknown != 0) @@ -1024,6 +1027,9 @@ static UINT16 earlyClientCapsFromSettings(const rdpSettings* settings) if (settings->SupportAsymetricKeys) earlyCapabilityFlags |= RNS_UD_CS_STRONG_ASYMMETRIC_KEYS; + if (settings->HasRelativeMouseEvent) + earlyCapabilityFlags |= RNS_UD_CS_RELATIVE_MOUSE_INPUT; + if (settings->SupportSkipChannelJoin) earlyCapabilityFlags |= RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN; @@ -1053,6 +1059,10 @@ static BOOL updateEarlyClientCaps(rdpSettings* settings, UINT32 earlyCapabilityF settings->SupportAsymetricKeys = (earlyCapabilityFlags & RNS_UD_CS_STRONG_ASYMMETRIC_KEYS) ? TRUE : FALSE; + if (settings->HasRelativeMouseEvent) + settings->HasRelativeMouseEvent = + (earlyCapabilityFlags & RNS_UD_CS_RELATIVE_MOUSE_INPUT) ? TRUE : FALSE; + if (settings->NetworkAutoDetect) settings->NetworkAutoDetect = (earlyCapabilityFlags & RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT) ? TRUE : FALSE;