Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FreeRDP/FreeRDP.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Miklautz <bmiklautz@users.noreply.github.com>2020-05-08 12:40:17 +0300
committerGitHub <noreply@github.com>2020-05-08 12:40:17 +0300
commit11b9b1ca6be433f1da5bbf5e152d554d3eb67ac6 (patch)
treeb19505402c23ce27dffe9c996449b1a495bfadca
parent973731824bddfd52cda24344f93f9da6f79ea6d4 (diff)
parent2d5ce618bf1db4bae83fd17fbb7e4eccbd715d9c (diff)
Merge pull request #6152 from akallabeth/stable-backports2.1.0
Stable backports
-rw-r--r--CMakeLists.txt2
-rw-r--r--ChangeLog25
-rw-r--r--channels/cliprdr/client/cliprdr_format.c4
-rw-r--r--channels/cliprdr/client/cliprdr_main.c28
-rw-r--r--channels/cliprdr/cliprdr_common.c89
-rw-r--r--channels/cliprdr/server/cliprdr_main.c26
-rw-r--r--channels/drdynvc/client/drdynvc_main.c2
-rw-r--r--channels/drive/client/drive_main.c6
-rw-r--r--channels/parallel/client/parallel_main.c26
-rw-r--r--channels/printer/client/printer_main.c12
-rw-r--r--channels/rdpdr/client/rdpdr_main.c2
-rw-r--r--channels/rdpei/client/rdpei_main.c3
-rw-r--r--channels/rdpsnd/client/rdpsnd_main.c126
-rw-r--r--channels/serial/client/serial_main.c13
-rw-r--r--channels/smartcard/client/smartcard_operations.c18
-rw-r--r--channels/smartcard/client/smartcard_pack.c9
-rw-r--r--channels/urbdrc/client/data_transfer.c62
-rw-r--r--channels/urbdrc/client/libusb/libusb_udevman.c195
-rw-r--r--channels/urbdrc/client/urbdrc_main.c34
-rw-r--r--channels/urbdrc/client/urbdrc_main.h1
-rw-r--r--channels/urbdrc/common/msusb.c4
-rw-r--r--channels/video/client/video_main.c10
-rw-r--r--client/Android/Studio/aFreeRDP/build.gradle2
-rw-r--r--client/Android/Studio/build.gradle2
-rw-r--r--client/Android/Studio/freeRDPCore/build.gradle2
-rw-r--r--client/Android/android_cliprdr.c1
-rw-r--r--client/Android/android_freerdp.c2
-rw-r--r--client/Mac/Clipboard.m3
-rw-r--r--client/Wayland/wlf_cliprdr.c2
-rw-r--r--client/Wayland/wlf_input.c16
-rw-r--r--client/Wayland/wlfreerdp.c4
-rw-r--r--client/Windows/wf_cliprdr.c3
-rw-r--r--client/Windows/wf_graphics.c2
-rw-r--r--client/X11/xf_cliprdr.c2
-rw-r--r--client/common/cmdline.c85
-rw-r--r--client/common/cmdline.h9
-rw-r--r--client/common/file.c30
-rw-r--r--client/iOS/Resources/en.lproj/Localizable.stringsbin16548 -> 8272 bytes
-rw-r--r--include/freerdp/api.h7
-rw-r--r--include/freerdp/settings.h22
-rw-r--r--libfreerdp/cache/glyph.c27
-rw-r--r--libfreerdp/codec/clear.c9
-rw-r--r--libfreerdp/codec/dsp_ffmpeg.c8
-rw-r--r--libfreerdp/codec/progressive.c22
-rw-r--r--libfreerdp/codec/rfx.c60
-rw-r--r--libfreerdp/codec/xcrush.c24
-rw-r--r--libfreerdp/common/CMakeLists.txt1
-rw-r--r--libfreerdp/common/settings.c121
-rw-r--r--libfreerdp/common/settings_getters.c2944
-rw-r--r--libfreerdp/common/settings_str.c434
-rw-r--r--libfreerdp/core/gateway/rdg.c3
-rw-r--r--libfreerdp/core/listener.c2
-rw-r--r--libfreerdp/core/nego.c31
-rw-r--r--libfreerdp/core/orders.c26
-rw-r--r--libfreerdp/core/rdp.c1
-rw-r--r--libfreerdp/core/server.c2
-rw-r--r--libfreerdp/core/test/settings_property_lists.h584
-rw-r--r--libfreerdp/core/update.c2
-rw-r--r--libfreerdp/crypto/crypto.c2
-rwxr-xr-xscripts/update-settings-tests83
-rw-r--r--server/proxy/pf_cliprdr.c2
-rw-r--r--server/shadow/shadow_client.c4
-rw-r--r--server/shadow/shadow_server.c112
-rw-r--r--uwac/CMakeLists.txt2
-rw-r--r--uwac/libuwac/uwac-display.c9
-rw-r--r--uwac/libuwac/uwac-input.c5
-rw-r--r--uwac/libuwac/uwac-priv.h1
-rw-r--r--uwac/libuwac/uwac-window.c6
-rw-r--r--winpr/CMakeLists.txt2
-rw-r--r--winpr/libwinpr/crt/unicode.c10
-rw-r--r--winpr/libwinpr/sspi/NTLM/ntlm_compute.c25
-rw-r--r--winpr/libwinpr/sspi/NTLM/ntlm_message.c147
-rw-r--r--winpr/libwinpr/utils/collections/MessagePipe.c2
-rw-r--r--winpr/libwinpr/utils/image.c7
-rw-r--r--winpr/libwinpr/utils/ntlm.c25
75 files changed, 3416 insertions, 2220 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7392b351b..a4d22b31e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -81,7 +81,7 @@ if ($ENV{BUILD_NUMBER})
endif()
set(WITH_LIBRARY_VERSIONING "ON")
-set(RAW_VERSION_STRING "2.1.0-dev")
+set(RAW_VERSION_STRING "2.1.0")
if(EXISTS "${CMAKE_SOURCE_DIR}/.source_tag")
file(READ ${CMAKE_SOURCE_DIR}/.source_tag RAW_VERSION_STRING)
elseif(USE_VERSION_FROM_GIT_TAG)
diff --git a/ChangeLog b/ChangeLog
index 027141458..a61d04822 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+# 2020-05-05 Version 2.1.0
+
+Important notes:
+
+* fix multiple CVEs: CVE-2020-11039, CVE-2020-11038, CVE-2020-11043, CVE-2020-11040, CVE-2020-11041,
+ CVE-2020-11019, CVE-2020-11017, CVE-2020-11018
+* fix multiple leak and crash issues (#6129, #6128, #6127, #6110, #6081, #6077)
+
+Noteworthy features and improvements:
+* Fixed sound issues (#6043)
+* New expert command line options /tune and /tune-list to modify all client
+ settings in a generic way.
+* Fixes for smartcard cache, this improves compatibility of smartcard devices
+ with newer smartcard channel.
+* Shadow server can now be instructed to listen to multiple interfaces.
+* Improved server certificate support (#6052)
+* Various fixes for wayland client (fullscreen, mouse wheel, ...)
+* Fixed large mouse pointer support, now mouse pointers > 96x96 pixel are visible.
+* USB redirection command line improvements (filter options)
+* Various translation improvements for android and ios clients
+
+For a complete and detailed change log since the last release candidate run:
+git log 2.0.0..2.1.0
+
+
# 2020-04-09 Version 2.0.0
Important notes:
diff --git a/channels/cliprdr/client/cliprdr_format.c b/channels/cliprdr/client/cliprdr_format.c
index e2ab39ad8..43b967e1a 100644
--- a/channels/cliprdr/client/cliprdr_format.c
+++ b/channels/cliprdr/client/cliprdr_format.c
@@ -43,7 +43,7 @@
UINT cliprdr_process_format_list(cliprdrPlugin* cliprdr, wStream* s, UINT32 dataLen,
UINT16 msgFlags)
{
- CLIPRDR_FORMAT_LIST formatList;
+ CLIPRDR_FORMAT_LIST formatList = { 0 };
CliprdrClientContext* context = cliprdr_get_client_interface(cliprdr);
UINT error = CHANNEL_RC_OK;
@@ -82,7 +82,7 @@ error_out:
UINT cliprdr_process_format_list_response(cliprdrPlugin* cliprdr, wStream* s, UINT32 dataLen,
UINT16 msgFlags)
{
- CLIPRDR_FORMAT_LIST_RESPONSE formatListResponse;
+ CLIPRDR_FORMAT_LIST_RESPONSE formatListResponse = { 0 };
CliprdrClientContext* context = cliprdr_get_client_interface(cliprdr);
UINT error = CHANNEL_RC_OK;
diff --git a/channels/cliprdr/client/cliprdr_main.c b/channels/cliprdr/client/cliprdr_main.c
index 4509591c5..8541cabcc 100644
--- a/channels/cliprdr/client/cliprdr_main.c
+++ b/channels/cliprdr/client/cliprdr_main.c
@@ -539,8 +539,10 @@ static UINT cliprdr_client_capabilities(CliprdrClientContext* context,
const CLIPRDR_CAPABILITIES* capabilities)
{
wStream* s;
+ UINT32 flags;
const CLIPRDR_GENERAL_CAPABILITY_SET* generalCapabilitySet;
cliprdrPlugin* cliprdr = (cliprdrPlugin*)context->handle;
+
s = cliprdr_packet_new(CB_CLIP_CAPS, 0, 4 + CB_CAPSTYPE_GENERAL_LEN);
if (!s)
@@ -555,7 +557,27 @@ static UINT cliprdr_client_capabilities(CliprdrClientContext* context,
Stream_Write_UINT16(s, generalCapabilitySet->capabilitySetType); /* capabilitySetType */
Stream_Write_UINT16(s, generalCapabilitySet->capabilitySetLength); /* lengthCapability */
Stream_Write_UINT32(s, generalCapabilitySet->version); /* version */
- Stream_Write_UINT32(s, generalCapabilitySet->generalFlags); /* generalFlags */
+ flags = generalCapabilitySet->generalFlags;
+
+ /* Client capabilities are sent in response to server capabilities.
+ * -> Do not request features the server does not support.
+ * -> Update clipboard context feature state to what was agreed upon.
+ */
+ if (!cliprdr->useLongFormatNames)
+ flags &= ~CB_USE_LONG_FORMAT_NAMES;
+ if (!cliprdr->streamFileClipEnabled)
+ flags &= ~CB_STREAM_FILECLIP_ENABLED;
+ if (!cliprdr->fileClipNoFilePaths)
+ flags &= ~CB_FILECLIP_NO_FILE_PATHS;
+ if (!cliprdr->canLockClipData)
+ flags &= CB_CAN_LOCK_CLIPDATA;
+
+ cliprdr->useLongFormatNames = flags & CB_USE_LONG_FORMAT_NAMES;
+ cliprdr->streamFileClipEnabled = flags & CB_STREAM_FILECLIP_ENABLED;
+ cliprdr->fileClipNoFilePaths = flags & CB_FILECLIP_NO_FILE_PATHS;
+ cliprdr->canLockClipData = flags & CB_CAN_LOCK_CLIPDATA;
+
+ Stream_Write_UINT32(s, flags); /* generalFlags */
WLog_Print(cliprdr->log, WLOG_DEBUG, "ClientCapabilities");
return cliprdr_packet_send(cliprdr, s);
}
@@ -1139,10 +1161,6 @@ BOOL VCAPITYPE VirtualChannelEntryEx(PCHANNEL_ENTRY_POINTS pEntryPoints, PVOID p
}
cliprdr->log = WLog_Get("com.freerdp.channels.cliprdr.client");
- cliprdr->useLongFormatNames = TRUE;
- cliprdr->streamFileClipEnabled = FALSE;
- cliprdr->fileClipNoFilePaths = TRUE;
- cliprdr->canLockClipData = FALSE;
WLog_Print(cliprdr->log, WLOG_DEBUG, "VirtualChannelEntryEx");
CopyMemory(&(cliprdr->channelEntryPoints), pEntryPoints,
sizeof(CHANNEL_ENTRY_POINTS_FREERDP_EX));
diff --git a/channels/cliprdr/cliprdr_common.c b/channels/cliprdr/cliprdr_common.c
index ebe0d6aad..a699852b6 100644
--- a/channels/cliprdr/cliprdr_common.c
+++ b/channels/cliprdr/cliprdr_common.c
@@ -400,29 +400,32 @@ UINT cliprdr_read_format_list(wStream* s, CLIPRDR_FORMAT_LIST* formatList, BOOL
int formatNameLength;
char* szFormatName;
WCHAR* wszFormatName;
- UINT32 dataLen = formatList->dataLen;
+ wStream sub1, sub2;
CLIPRDR_FORMAT* formats = NULL;
- UINT error = CHANNEL_RC_OK;
+ UINT error = ERROR_INTERNAL_ERROR;
asciiNames = (formatList->msgFlags & CB_ASCII_NAMES) ? TRUE : FALSE;
index = 0;
+ /* empty format list */
+ formatList->formats = NULL;
formatList->numFormats = 0;
- position = Stream_GetPosition(s);
+
+ Stream_StaticInit(&sub1, Stream_Pointer(s), formatList->dataLen);
+ if (!Stream_SafeSeek(s, formatList->dataLen))
+ return ERROR_INVALID_DATA;
if (!formatList->dataLen)
{
- /* empty format list */
- formatList->formats = NULL;
- formatList->numFormats = 0;
}
else if (!useLongFormatNames)
{
- formatList->numFormats = (dataLen / 36);
+ const size_t cap = Stream_Capacity(&sub1);
+ formatList->numFormats = (cap / 36);
- if ((formatList->numFormats * 36) != dataLen)
+ if ((formatList->numFormats * 36) != cap)
{
- WLog_ERR(TAG, "Invalid short format list length: %" PRIu32 "", dataLen);
+ WLog_ERR(TAG, "Invalid short format list length: %" PRIuz "", cap);
return ERROR_INTERNAL_ERROR;
}
@@ -437,10 +440,9 @@ UINT cliprdr_read_format_list(wStream* s, CLIPRDR_FORMAT_LIST* formatList, BOOL
formatList->formats = formats;
- while (dataLen)
+ while (Stream_GetRemainingLength(&sub1) >= 4)
{
- Stream_Read_UINT32(s, formats[index].formatId); /* formatId (4 bytes) */
- dataLen -= 4;
+ Stream_Read_UINT32(&sub1, formats[index].formatId); /* formatId (4 bytes) */
formats[index].formatName = NULL;
@@ -452,10 +454,12 @@ UINT cliprdr_read_format_list(wStream* s, CLIPRDR_FORMAT_LIST* formatList, BOOL
* These are 16 unicode charaters - *without* terminating null !
*/
+ szFormatName = (char*)Stream_Pointer(&sub1);
+ wszFormatName = (WCHAR*)Stream_Pointer(&sub1);
+ if (!Stream_SafeSeek(&sub1, 32))
+ goto error_out;
if (asciiNames)
{
- szFormatName = (char*)Stream_Pointer(s);
-
if (szFormatName[0])
{
/* ensure null termination */
@@ -472,8 +476,6 @@ UINT cliprdr_read_format_list(wStream* s, CLIPRDR_FORMAT_LIST* formatList, BOOL
}
else
{
- wszFormatName = (WCHAR*)Stream_Pointer(s);
-
if (wszFormatName[0])
{
/* ConvertFromUnicode always returns a null-terminated
@@ -489,34 +491,27 @@ UINT cliprdr_read_format_list(wStream* s, CLIPRDR_FORMAT_LIST* formatList, BOOL
}
}
- Stream_Seek(s, 32);
- dataLen -= 32;
index++;
}
}
else
{
- while (dataLen)
+ sub2 = sub1;
+ while (Stream_GetRemainingLength(&sub1) > 0)
{
- Stream_Seek(s, 4); /* formatId (4 bytes) */
- dataLen -= 4;
-
- wszFormatName = (WCHAR*)Stream_Pointer(s);
-
- if (!wszFormatName[0])
- formatNameLength = 0;
- else
- formatNameLength = _wcslen(wszFormatName);
+ size_t rest;
+ if (!Stream_SafeSeek(&sub1, 4)) /* formatId (4 bytes) */
+ goto error_out;
- Stream_Seek(s, (formatNameLength + 1) * 2);
- dataLen -= ((formatNameLength + 1) * 2);
+ wszFormatName = (WCHAR*)Stream_Pointer(&sub1);
+ rest = Stream_GetRemainingLength(&sub1);
+ formatNameLength = _wcsnlen(wszFormatName, rest / sizeof(WCHAR));
+ if (!Stream_SafeSeek(&sub1, (formatNameLength + 1) * sizeof(WCHAR)))
+ goto error_out;
formatList->numFormats++;
}
- dataLen = formatList->dataLen;
- Stream_SetPosition(s, position);
-
if (formatList->numFormats)
formats = (CLIPRDR_FORMAT*)calloc(formatList->numFormats, sizeof(CLIPRDR_FORMAT));
@@ -528,24 +523,23 @@ UINT cliprdr_read_format_list(wStream* s, CLIPRDR_FORMAT_LIST* formatList, BOOL
formatList->formats = formats;
- while (dataLen)
+ while (Stream_GetRemainingLength(&sub2) >= 4)
{
- Stream_Read_UINT32(s, formats[index].formatId); /* formatId (4 bytes) */
- dataLen -= 4;
+ size_t rest;
+ Stream_Read_UINT32(&sub2, formats[index].formatId); /* formatId (4 bytes) */
formats[index].formatName = NULL;
- wszFormatName = (WCHAR*)Stream_Pointer(s);
-
- if (!wszFormatName[0])
- formatNameLength = 0;
- else
- formatNameLength = _wcslen(wszFormatName);
+ wszFormatName = (WCHAR*)Stream_Pointer(&sub2);
+ rest = Stream_GetRemainingLength(&sub2);
+ formatNameLength = _wcsnlen(wszFormatName, rest / sizeof(WCHAR));
+ if (!Stream_SafeSeek(&sub2, (formatNameLength + 1) * sizeof(WCHAR)))
+ goto error_out;
if (formatNameLength)
{
- if (ConvertFromUnicode(CP_UTF8, 0, wszFormatName, -1, &(formats[index].formatName),
- 0, NULL, NULL) < 1)
+ if (ConvertFromUnicode(CP_UTF8, 0, wszFormatName, formatNameLength,
+ &(formats[index].formatName), 0, NULL, NULL) < 1)
{
WLog_ERR(TAG, "failed to convert long clipboard format name");
error = ERROR_INTERNAL_ERROR;
@@ -553,14 +547,11 @@ UINT cliprdr_read_format_list(wStream* s, CLIPRDR_FORMAT_LIST* formatList, BOOL
}
}
- Stream_Seek(s, (formatNameLength + 1) * 2);
- dataLen -= ((formatNameLength + 1) * 2);
-
index++;
}
}
- return error;
+ return CHANNEL_RC_OK;
error_out:
cliprdr_free_format_list(formatList);
@@ -582,5 +573,7 @@ void cliprdr_free_format_list(CLIPRDR_FORMAT_LIST* formatList)
}
free(formatList->formats);
+ formatList->formats = NULL;
+ formatList->numFormats = 0;
}
}
diff --git a/channels/cliprdr/server/cliprdr_main.c b/channels/cliprdr/server/cliprdr_main.c
index 34ff4d74d..8854a0fb7 100644
--- a/channels/cliprdr/server/cliprdr_main.c
+++ b/channels/cliprdr/server/cliprdr_main.c
@@ -432,6 +432,9 @@ cliprdr_server_file_contents_response(CliprdrServerContext* context,
static UINT cliprdr_server_receive_general_capability(CliprdrServerContext* context, wStream* s,
CLIPRDR_GENERAL_CAPABILITY_SET* cap_set)
{
+ if (Stream_GetRemainingLength(s) < 8)
+ return ERROR_INVALID_DATA;
+
Stream_Read_UINT32(s, cap_set->version); /* version (4 bytes) */
Stream_Read_UINT32(s, cap_set->generalFlags); /* generalFlags (4 bytes) */
@@ -464,29 +467,33 @@ static UINT cliprdr_server_receive_capabilities(CliprdrServerContext* context, w
UINT16 index;
UINT16 capabilitySetType;
UINT16 capabilitySetLength;
- UINT error = CHANNEL_RC_OK;
+ UINT error = ERROR_INVALID_DATA;
size_t cap_sets_size = 0;
- CLIPRDR_CAPABILITIES capabilities;
+ CLIPRDR_CAPABILITIES capabilities = { 0 };
CLIPRDR_CAPABILITY_SET* capSet;
- void* tmp;
WINPR_UNUSED(header);
- /* set `capabilitySets` to NULL so `realloc` will know to alloc the first block */
- capabilities.capabilitySets = NULL;
WLog_DBG(TAG, "CliprdrClientCapabilities");
+ if (Stream_GetRemainingLength(s) < 4)
+ return ERROR_INVALID_DATA;
+
Stream_Read_UINT16(s, capabilities.cCapabilitiesSets); /* cCapabilitiesSets (2 bytes) */
Stream_Seek_UINT16(s); /* pad1 (2 bytes) */
for (index = 0; index < capabilities.cCapabilitiesSets; index++)
{
+ void* tmp = NULL;
+ if (Stream_GetRemainingLength(s) < 4)
+ goto out;
Stream_Read_UINT16(s, capabilitySetType); /* capabilitySetType (2 bytes) */
Stream_Read_UINT16(s, capabilitySetLength); /* capabilitySetLength (2 bytes) */
cap_sets_size += capabilitySetLength;
- tmp = realloc(capabilities.capabilitySets, cap_sets_size);
+ if (cap_sets_size > 0)
+ tmp = realloc(capabilities.capabilitySets, cap_sets_size);
if (tmp == NULL)
{
WLog_ERR(TAG, "capabilities.capabilitySets realloc failed!");
@@ -504,8 +511,9 @@ static UINT cliprdr_server_receive_capabilities(CliprdrServerContext* context, w
switch (capSet->capabilitySetType)
{
case CB_CAPSTYPE_GENERAL:
- if ((error = cliprdr_server_receive_general_capability(
- context, s, (CLIPRDR_GENERAL_CAPABILITY_SET*)capSet)))
+ error = cliprdr_server_receive_general_capability(
+ context, s, (CLIPRDR_GENERAL_CAPABILITY_SET*)capSet);
+ if (error)
{
WLog_ERR(TAG,
"cliprdr_server_receive_general_capability failed with error %" PRIu32
@@ -518,11 +526,11 @@ static UINT cliprdr_server_receive_capabilities(CliprdrServerContext* context, w
default:
WLog_ERR(TAG, "unknown cliprdr capability set: %" PRIu16 "",
capSet->capabilitySetType);
- error = ERROR_INVALID_DATA;
goto out;
}
}
+ error = CHANNEL_RC_OK;
IFCALLRET(context->ClientCapabilities, error, context, &capabilities);
out:
free(capabilities.capabilitySets);
diff --git a/channels/drdynvc/client/drdynvc_main.c b/channels/drdynvc/client/drdynvc_main.c
index f19ac6fd7..fa09cd08f 100644
--- a/channels/drdynvc/client/drdynvc_main.c
+++ b/channels/drdynvc/client/drdynvc_main.c
@@ -815,7 +815,7 @@ static UINT drdynvc_write_data(drdynvcPlugin* drdynvc, UINT32 ChannelId, const B
if (dataSize == 0)
{
- dvcman_close_channel(drdynvc->channel_mgr, ChannelId, TRUE);
+ status = dvcman_close_channel(drdynvc->channel_mgr, ChannelId, TRUE);
}
else if (dataSize <= CHANNEL_CHUNK_LENGTH - pos)
{
diff --git a/channels/drive/client/drive_main.c b/channels/drive/client/drive_main.c
index 861fad507..1b5422522 100644
--- a/channels/drive/client/drive_main.c
+++ b/channels/drive/client/drive_main.c
@@ -331,6 +331,7 @@ static UINT drive_process_irp_write(DRIVE_DEVICE* drive, IRP* irp)
DRIVE_FILE* file;
UINT32 Length;
UINT64 Offset;
+ void* ptr;
if (!drive || !irp || !irp->input || !irp->output || !irp->Complete)
return ERROR_INVALID_PARAMETER;
@@ -341,6 +342,9 @@ static UINT drive_process_irp_write(DRIVE_DEVICE* drive, IRP* irp)
Stream_Read_UINT32(irp->input, Length);
Stream_Read_UINT64(irp->input, Offset);
Stream_Seek(irp->input, 20); /* Padding */
+ ptr = Stream_Pointer(irp->input);
+ if (!Stream_SafeSeek(irp->input, Length))
+ return ERROR_INVALID_DATA;
file = drive_get_file_by_id(drive, irp->FileId);
if (!file)
@@ -353,7 +357,7 @@ static UINT drive_process_irp_write(DRIVE_DEVICE* drive, IRP* irp)
irp->IoStatus = drive_map_windows_err(GetLastError());
Length = 0;
}
- else if (!drive_file_write(file, Stream_Pointer(irp->input), Length))
+ else if (!drive_file_write(file, ptr, Length))
{
irp->IoStatus = drive_map_windows_err(GetLastError());
Length = 0;
diff --git a/channels/parallel/client/parallel_main.c b/channels/parallel/client/parallel_main.c
index 3fc6c4158..af3e82703 100644
--- a/channels/parallel/client/parallel_main.c
+++ b/channels/parallel/client/parallel_main.c
@@ -83,13 +83,19 @@ static UINT parallel_process_irp_create(PARALLEL_DEVICE* parallel, IRP* irp)
{
char* path = NULL;
int status;
+ WCHAR* ptr;
UINT32 PathLength;
- Stream_Seek(irp->input, 28);
+ if (!Stream_SafeSeek(irp->input, 28))
+ return ERROR_INVALID_DATA;
/* DesiredAccess(4) AllocationSize(8), FileAttributes(4) */
/* SharedAccess(4) CreateDisposition(4), CreateOptions(4) */
+ if (Stream_GetRemainingLength(irp->input) < 4)
+ return ERROR_INVALID_DATA;
Stream_Read_UINT32(irp->input, PathLength);
- status = ConvertFromUnicode(CP_UTF8, 0, (WCHAR*)Stream_Pointer(irp->input), PathLength / 2,
- &path, 0, NULL, NULL);
+ ptr = (WCHAR*)Stream_Pointer(irp->input);
+ if (!Stream_SafeSeek(irp->input, PathLength))
+ return ERROR_INVALID_DATA;
+ status = ConvertFromUnicode(CP_UTF8, 0, ptr, PathLength / 2, &path, 0, NULL, NULL);
if (status < 1)
if (!(path = (char*)calloc(1, 1)))
@@ -149,6 +155,8 @@ static UINT parallel_process_irp_read(PARALLEL_DEVICE* parallel, IRP* irp)
UINT64 Offset;
ssize_t status;
BYTE* buffer = NULL;
+ if (Stream_GetRemainingLength(irp->input) < 12)
+ return ERROR_INVALID_DATA;
Stream_Read_UINT32(irp->input, Length);
Stream_Read_UINT64(irp->input, Offset);
buffer = (BYTE*)malloc(Length);
@@ -201,14 +209,22 @@ static UINT parallel_process_irp_write(PARALLEL_DEVICE* parallel, IRP* irp)
UINT32 Length;
UINT64 Offset;
ssize_t status;
+ void* ptr;
+ if (Stream_GetRemainingLength(irp->input) > 12)
+ return ERROR_INVALID_DATA;
+
Stream_Read_UINT32(irp->input, Length);
Stream_Read_UINT64(irp->input, Offset);
- Stream_Seek(irp->input, 20); /* Padding */
+ if (!Stream_SafeSeek(irp->input, 20)) /* Padding */
+ return ERROR_INVALID_DATA;
+ ptr = Stream_Pointer(irp->input);
+ if (!Stream_SafeSeek(irp->input, Length))
+ return ERROR_INVALID_DATA;
len = Length;
while (len > 0)
{
- status = write(parallel->file, Stream_Pointer(irp->input), len);
+ status = write(parallel->file, ptr, len);
if (status < 0)
{
diff --git a/channels/printer/client/printer_main.c b/channels/printer/client/printer_main.c
index 42bcd3fbf..dbcc07dc5 100644
--- a/channels/printer/client/printer_main.c
+++ b/channels/printer/client/printer_main.c
@@ -107,7 +107,7 @@ static BOOL printer_write_setting(const char* path, prn_conf_t type, const void*
const char* name = filemap[type];
char* abs = GetCombinedPath(path, name);
- if (!abs)
+ if (!abs || (length > INT32_MAX))
return FALSE;
file = CreateFileA(abs, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
@@ -478,10 +478,16 @@ static UINT printer_process_irp_write(PRINTER_DEVICE* printer_dev, IRP* irp)
UINT64 Offset;
rdpPrintJob* printjob = NULL;
UINT error = CHANNEL_RC_OK;
+ void* ptr;
+
+ if (Stream_GetRemainingLength(irp->input) < 32)
+ return ERROR_INVALID_DATA;
Stream_Read_UINT32(irp->input, Length);
Stream_Read_UINT64(irp->input, Offset);
Stream_Seek(irp->input, 20); /* Padding */
-
+ ptr = Stream_Pointer(irp->input);
+ if (!Stream_SafeSeek(irp->input, Length))
+ return ERROR_INVALID_DATA;
if (printer_dev->printer)
printjob = printer_dev->printer->FindPrintJob(printer_dev->printer, irp->FileId);
@@ -492,7 +498,7 @@ static UINT printer_process_irp_write(PRINTER_DEVICE* printer_dev, IRP* irp)
}
else
{
- error = printjob->Write(printjob, Stream_Pointer(irp->input), Length);
+ error = printjob->Write(printjob, ptr, Length);
}
if (error)
diff --git a/channels/rdpdr/client/rdpdr_main.c b/channels/rdpdr/client/rdpdr_main.c
index 8f7eda847..7f6dc9451 100644
--- a/channels/rdpdr/client/rdpdr_main.c
+++ b/channels/rdpdr/client/rdpdr_main.c
@@ -670,7 +670,7 @@ static UINT handle_hotplug(rdpdrPlugin* rdpdr)
if (!path)
continue;
/* copy hotpluged device mount point to the dev_array */
- if (isAutomountLocation(path) && (size <= MAX_USB_DEVICES))
+ if (isAutomountLocation(path) && (size < MAX_USB_DEVICES))
{
dev_array[size].path = _strdup(path);
dev_array[size++].to_add = TRUE;
diff --git a/channels/rdpei/client/rdpei_main.c b/channels/rdpei/client/rdpei_main.c
index 2e72bd449..7dd65211d 100644
--- a/channels/rdpei/client/rdpei_main.c
+++ b/channels/rdpei/client/rdpei_main.c
@@ -445,6 +445,9 @@ static UINT rdpei_recv_pdu(RDPEI_CHANNEL_CALLBACK* callback, wStream* s)
UINT16 eventId;
UINT32 pduLength;
UINT error;
+ if (Stream_GetRemainingLength(s) < 6)
+ return ERROR_INVALID_DATA;
+
Stream_Read_UINT16(s, eventId); /* eventId (2 bytes) */
Stream_Read_UINT32(s, pduLength); /* pduLength (4 bytes) */
#ifdef WITH_DEBUG_RDPEI
diff --git a/channels/rdpsnd/client/rdpsnd_main.c b/channels/rdpsnd/client/rdpsnd_main.c
index 9644afadb..2526ec55d 100644
--- a/channels/rdpsnd/client/rdpsnd_main.c
+++ b/channels/rdpsnd/client/rdpsnd_main.c
@@ -122,6 +122,9 @@ struct rdpsnd_plugin
rdpContext* rdpcontext;
FREERDP_DSP_CONTEXT* dsp_context;
+
+ HANDLE thread;
+ wMessageQueue* queue;
};
static const char* rdpsnd_is_dyn_str(BOOL dynamic)
@@ -546,6 +549,9 @@ static UINT rdpsnd_treat_wave(rdpsndPlugin* rdpsnd, wStream* s, size_t size)
if (Stream_GetRemainingLength(s) < size)
return ERROR_BAD_LENGTH;
+ if (rdpsnd->wCurrentFormatNo >= rdpsnd->NumberOfClientFormats)
+ return ERROR_INTERNAL_ERROR;
+
data = Stream_Pointer(s);
format = &rdpsnd->ClientFormats[rdpsnd->wCurrentFormatNo];
WLog_Print(rdpsnd->log, WLOG_DEBUG,
@@ -621,8 +627,10 @@ static UINT rdpsnd_recv_wave2_pdu(rdpsndPlugin* rdpsnd, wStream* s, UINT16 BodyS
Stream_Read_UINT8(s, rdpsnd->cBlockNo);
Stream_Seek(s, 3); /* bPad */
Stream_Read_UINT32(s, dwAudioTimeStamp);
- rdpsnd->waveDataSize = BodySize - 12;
+ if (wFormatNo >= rdpsnd->NumberOfClientFormats)
+ return ERROR_INVALID_DATA;
format = &rdpsnd->ClientFormats[wFormatNo];
+ rdpsnd->waveDataSize = BodySize - 12;
rdpsnd->wArrivalTime = GetTickCount64();
WLog_Print(rdpsnd->log, WLOG_DEBUG,
"%s Wave2PDU: cBlockNo: %" PRIu8 " wFormatNo: %" PRIu16 ", align=%hu",
@@ -1070,14 +1078,11 @@ static UINT rdpsnd_virtual_channel_event_data_received(rdpsndPlugin* plugin, voi
if (dataFlags & CHANNEL_FLAG_LAST)
{
- UINT error;
-
Stream_SealLength(plugin->data_in);
Stream_SetPosition(plugin->data_in, 0);
- error = rdpsnd_recv_pdu(plugin, plugin->data_in);
- if (error)
- return error;
+ if (!MessageQueue_Post(plugin->queue, NULL, 0, plugin->data_in, NULL))
+ return ERROR_INTERNAL_ERROR;
plugin->data_in = NULL;
}
@@ -1222,10 +1227,75 @@ static UINT rdpsnd_virtual_channel_event_disconnected(rdpsndPlugin* rdpsnd)
return CHANNEL_RC_OK;
}
+static void _queue_free(void* obj)
+{
+ wStream* s = obj;
+ Stream_Release(s);
+}
+
+static DWORD WINAPI play_thread(LPVOID arg)
+{
+ UINT error = CHANNEL_RC_OK;
+ rdpsndPlugin* rdpsnd = arg;
+
+ if (!rdpsnd || !rdpsnd->queue)
+ return ERROR_INVALID_PARAMETER;
+
+ while (TRUE)
+ {
+ int rc;
+ wMessage message;
+ wStream* s;
+ HANDLE handle = MessageQueue_Event(rdpsnd->queue);
+ WaitForSingleObject(handle, INFINITE);
+
+ rc = MessageQueue_Peek(rdpsnd->queue, &message, TRUE);
+ if (rc < 1)
+ continue;
+
+ if (message.id == WMQ_QUIT)
+ break;
+
+ s = message.wParam;
+ error = rdpsnd_recv_pdu(rdpsnd, s);
+
+ if (error)
+ return error;
+ }
+
+ return CHANNEL_RC_OK;
+}
+
+static UINT rdpsnd_virtual_channel_event_initialized(rdpsndPlugin* rdpsnd)
+{
+ wObject obj = { 0 };
+
+ if (!rdpsnd)
+ return ERROR_INVALID_PARAMETER;
+
+ obj.fnObjectFree = _queue_free;
+ rdpsnd->queue = MessageQueue_New(&obj);
+ if (!rdpsnd->queue)
+ return CHANNEL_RC_NO_MEMORY;
+
+ rdpsnd->thread = CreateThread(NULL, 0, play_thread, rdpsnd, 0, NULL);
+ if (!rdpsnd->thread)
+ return CHANNEL_RC_INITIALIZATION_ERROR;
+ return CHANNEL_RC_OK;
+}
+
static void rdpsnd_virtual_channel_event_terminated(rdpsndPlugin* rdpsnd)
{
if (rdpsnd)
{
+ MessageQueue_PostQuit(rdpsnd->queue, 0);
+ if (rdpsnd->thread)
+ {
+ WaitForSingleObject(rdpsnd->thread, INFINITE);
+ CloseHandle(rdpsnd->thread);
+ }
+ MessageQueue_Free(rdpsnd->queue);
+
audio_formats_free(rdpsnd->fixed_format, 1);
free(rdpsnd->subsystem);
free(rdpsnd->device_name);
@@ -1254,6 +1324,7 @@ static VOID VCAPITYPE rdpsnd_virtual_channel_init_event_ex(LPVOID lpUserParam, L
switch (event)
{
case CHANNEL_EVENT_INITIALIZED:
+ error = rdpsnd_virtual_channel_event_initialized(plugin);
break;
case CHANNEL_EVENT_CONNECTED:
@@ -1373,7 +1444,28 @@ fail:
static UINT rdpsnd_on_data_received(IWTSVirtualChannelCallback* pChannelCallback, wStream* data)
{
RDPSND_CHANNEL_CALLBACK* callback = (RDPSND_CHANNEL_CALLBACK*)pChannelCallback;
- return rdpsnd_recv_pdu((rdpsndPlugin*)callback->plugin, data);
+ rdpsndPlugin* plugin;
+ wStream* copy;
+ size_t len = Stream_GetRemainingLength(data);
+
+ if (!callback || !callback->plugin)
+ return ERROR_INVALID_PARAMETER;
+ plugin = (rdpsndPlugin*)callback->plugin;
+
+ copy = StreamPool_Take(plugin->pool, len);
+ if (!copy)
+ return ERROR_OUTOFMEMORY;
+ Stream_Copy(data, copy, len);
+ Stream_SealLength(copy);
+ Stream_SetPosition(copy, 0);
+
+ if (!MessageQueue_Post(plugin->queue, NULL, 0, copy, NULL))
+ {
+ Stream_Release(copy);
+ return ERROR_INTERNAL_ERROR;
+ }
+
+ return CHANNEL_RC_OK;
}
static UINT rdpsnd_on_close(IWTSVirtualChannelCallback* pChannelCallback)
@@ -1452,7 +1544,7 @@ static UINT rdpsnd_plugin_initialize(IWTSPlugin* pPlugin, IWTSVirtualChannelMana
(IWTSListenerCallback*)rdpsnd->listener_callback,
&(rdpsnd->listener));
rdpsnd->listener->pInterface = rdpsnd->iface.pInterface;
- return status;
+ return rdpsnd_virtual_channel_event_initialized(rdpsnd);
}
/**
@@ -1463,8 +1555,11 @@ static UINT rdpsnd_plugin_initialize(IWTSPlugin* pPlugin, IWTSVirtualChannelMana
static UINT rdpsnd_plugin_terminated(IWTSPlugin* pPlugin)
{
rdpsndPlugin* rdpsnd = (rdpsndPlugin*)pPlugin;
- free(rdpsnd->listener_callback);
- free(rdpsnd->iface.pInterface);
+ if (rdpsnd)
+ {
+ free(rdpsnd->listener_callback);
+ free(rdpsnd->iface.pInterface);
+ }
rdpsnd_virtual_channel_event_terminated(rdpsnd);
return CHANNEL_RC_OK;
}
@@ -1496,10 +1591,8 @@ UINT rdpsnd_DVCPluginEntry(IDRDYNVC_ENTRY_POINTS* pEntryPoints)
rdpsnd->dynamic = TRUE;
rdpsnd->fixed_format = audio_format_new();
if (!rdpsnd->fixed_format)
- {
- free(rdpsnd);
- return FALSE;
- }
+ goto fail;
+
rdpsnd->log = WLog_Get("com.freerdp.channels.rdpsnd.client");
rdpsnd->channelEntryPoints.pExtendedData = pEntryPoints->GetPluginData(pEntryPoints);
@@ -1507,9 +1600,12 @@ UINT rdpsnd_DVCPluginEntry(IDRDYNVC_ENTRY_POINTS* pEntryPoints)
}
else
{
- WLog_ERR(TAG, "%s could not get disp Plugin.", rdpsnd_is_dyn_str(TRUE));
+ WLog_ERR(TAG, "%s could not get rdpsnd Plugin.", rdpsnd_is_dyn_str(TRUE));
return CHANNEL_RC_BAD_CHANNEL;
}
return error;
+fail:
+ rdpsnd_plugin_terminated(&rdpsnd->iface);
+ return error;
}
diff --git a/channels/serial/client/serial_main.c b/channels/serial/client/serial_main.c
index cac534c8d..afe67b4d3 100644
--- a/channels/serial/client/serial_main.c
+++ b/channels/serial/client/serial_main.c
@@ -142,10 +142,9 @@ static UINT serial_process_irp_create(SERIAL_DEVICE* serial, IRP* irp)
Stream_Seek_UINT32(irp->input); /* CreateOptions (4 bytes) */
Stream_Read_UINT32(irp->input, PathLength); /* PathLength (4 bytes) */
- if (Stream_GetRemainingLength(irp->input) < PathLength)
+ if (!Stream_SafeSeek(irp->input, PathLength)) /* Path (variable) */
return ERROR_INVALID_DATA;
- Stream_Seek(irp->input, PathLength); /* Path (variable) */
assert(PathLength == 0); /* MS-RDPESP 2.2.2.2 */
#ifndef _WIN32
/* Windows 2012 server sends on a first call :
@@ -300,6 +299,7 @@ static UINT serial_process_irp_write(SERIAL_DEVICE* serial, IRP* irp)
{
UINT32 Length;
UINT64 Offset;
+ void* ptr;
DWORD nbWritten = 0;
if (Stream_GetRemainingLength(irp->input) < 32)
@@ -307,7 +307,9 @@ static UINT serial_process_irp_write(SERIAL_DEVICE* serial, IRP* irp)
Stream_Read_UINT32(irp->input, Length); /* Length (4 bytes) */
Stream_Read_UINT64(irp->input, Offset); /* Offset (8 bytes) */
- Stream_Seek(irp->input, 20); /* Padding (20 bytes) */
+ if (!Stream_SafeSeek(irp->input, 20)) /* Padding (20 bytes) */
+ return ERROR_INVALID_DATA;
+
/* MS-RDPESP 3.2.5.1.5: The Offset field is ignored
* assert(Offset == 0);
*
@@ -317,8 +319,11 @@ static UINT serial_process_irp_write(SERIAL_DEVICE* serial, IRP* irp)
WLog_Print(serial->log, WLOG_DEBUG, "writing %" PRIu32 " bytes to %s", Length,
serial->device.name);
+ ptr = Stream_Pointer(irp->input);
+ if (!Stream_SafeSeek(irp->input, Length))
+ return ERROR_INVALID_DATA;
/* FIXME: CommWriteFile to be replaced by WriteFile */
- if (CommWriteFile(serial->hComm, Stream_Pointer(irp->input), Length, &nbWritten, NULL))
+ if (CommWriteFile(serial->hComm, ptr, Length, &nbWritten, NULL))
{
irp->IoStatus = STATUS_SUCCESS;
}
diff --git a/channels/smartcard/client/smartcard_operations.c b/channels/smartcard/client/smartcard_operations.c
index d1562b91e..b20f2e4df 100644
--- a/channels/smartcard/client/smartcard_operations.c
+++ b/channels/smartcard/client/smartcard_operations.c
@@ -42,8 +42,22 @@
static LONG log_status_error(const char* tag, const char* what, LONG status)
{
if (status != SCARD_S_SUCCESS)
- WLog_ERR(tag, "%s failed with error %s [%" PRId32 "]", what, SCardGetErrorString(status),
- status);
+ {
+ DWORD level = WLOG_ERROR;
+ switch (status)
+ {
+ case SCARD_E_TIMEOUT:
+ level = WLOG_DEBUG;
+ break;
+ case SCARD_E_NO_READERS_AVAILABLE:
+ level = WLOG_INFO;
+ break;
+ default:
+ break;
+ }
+ WLog_Print(WLog_Get(tag), level, "%s failed with error %s [%" PRId32 "]", what,
+ SCardGetErrorString(status), status);
+ }
return status;
}
diff --git a/channels/smartcard/client/smartcard_pack.c b/channels/smartcard/client/smartcard_pack.c
index 64a0c946e..de0e1cec5 100644
--- a/channels/smartcard/client/smartcard_pack.c
+++ b/channels/smartcard/client/smartcard_pack.c
@@ -101,7 +101,7 @@ static BOOL smartcard_ndr_pointer_read_(wStream* s, UINT32* index, UINT32* ptr,
static LONG smartcard_ndr_read(wStream* s, BYTE** data, size_t min, size_t elementSize,
ndr_ptr_t type)
{
- UINT32 len, offset, len2;
+ size_t len, offset, len2;
void* r;
size_t required;
@@ -163,9 +163,11 @@ static LONG smartcard_ndr_read(wStream* s, BYTE** data, size_t min, size_t eleme
min, len);
return STATUS_DATA_ERROR;
}
- len *= elementSize;
- if (Stream_GetRemainingLength(s) < len)
+ if (len > SIZE_MAX / 2)
+ return STATUS_BUFFER_TOO_SMALL;
+
+ if (Stream_GetRemainingLength(s) / elementSize < len)
{
WLog_ERR(TAG,
"Short data while trying to read data from NDR pointer, expected %" PRIu32
@@ -173,6 +175,7 @@ static LONG smartcard_ndr_read(wStream* s, BYTE** data, size_t min, size_t eleme
len, Stream_GetRemainingLength(s));
return STATUS_BUFFER_TOO_SMALL;
}
+ len *= elementSize;
r = calloc(len + 1, sizeof(CHAR));
if (!r)
diff --git a/channels/urbdrc/client/data_transfer.c b/channels/urbdrc/client/data_transfer.c
index 25918b8a6..30def2298 100644
--- a/channels/urbdrc/client/data_transfer.c
+++ b/channels/urbdrc/client/data_transfer.c
@@ -234,10 +234,11 @@ static UINT urbdrc_process_io_control(IUDEVICE* pdev, URBDRC_CHANNEL_CALLBACK* c
Stream_Read_UINT32(s, IoControlCode);
Stream_Read_UINT32(s, InputBufferSize);
- if (Stream_GetRemainingLength(s) < InputBufferSize + 8)
+ if (!Stream_SafeSeek(s, InputBufferSize))
+ return ERROR_INVALID_DATA;
+ if (Stream_GetRemainingLength(s) < 8ULL)
return ERROR_INVALID_DATA;
- Stream_Seek(s, InputBufferSize);
Stream_Read_UINT32(s, OutputBufferSize);
Stream_Read_UINT32(s, RequestId);
InterfaceId = ((STREAM_ID_PROXY << 30) | pdev->get_ReqCompletion(pdev));
@@ -315,10 +316,10 @@ static UINT urbdrc_process_internal_io_control(IUDEVICE* pdev, URBDRC_CHANNEL_CA
Stream_Read_UINT32(s, IoControlCode);
Stream_Read_UINT32(s, InputBufferSize);
- if (Stream_GetRemainingLength(s) < InputBufferSize + 8)
+ if (!Stream_SafeSeek(s, InputBufferSize))
+ return ERROR_INVALID_DATA;
+ if (Stream_GetRemainingLength(s) < 8ULL)
return ERROR_INVALID_DATA;
-
- Stream_Seek(s, InputBufferSize);
Stream_Read_UINT32(s, OutputBufferSize);
Stream_Read_UINT32(s, RequestId);
InterfaceId = ((STREAM_ID_PROXY << 30) | pdev->get_ReqCompletion(pdev));
@@ -398,7 +399,8 @@ static UINT urb_select_configuration(IUDEVICE* pdev, URBDRC_CHANNEL_CALLBACK* ca
int transferDir)
{
MSUSB_CONFIG_DESCRIPTOR* MsConfig = NULL;
- UINT32 out_size, InterfaceId, NumInterfaces, usbd_status = 0;
+ size_t out_size;
+ UINT32 InterfaceId, NumInterfaces, usbd_status = 0;
BYTE ConfigurationDescriptorIsValid;
wStream* out;
int MsOutSize = 0;
@@ -452,6 +454,9 @@ static UINT urb_select_configuration(IUDEVICE* pdev, URBDRC_CHANNEL_CALLBACK* ca
if (MsConfig)
MsOutSize = MsConfig->MsOutSize;
+ if (MsOutSize > SIZE_MAX - 36)
+ return ERROR_INVALID_DATA;
+
if (MsOutSize > 0)
out_size = 36 + MsOutSize;
else
@@ -807,7 +812,8 @@ static UINT urb_control_descriptor_request(IUDEVICE* pdev, URBDRC_CHANNEL_CALLBA
wStream* s, UINT32 RequestField, UINT32 MessageId,
IUDEVMAN* udevman, BYTE func_recipient, int transferDir)
{
- UINT32 out_size, InterfaceId, OutputBufferSize, usbd_status;
+ size_t out_size;
+ UINT32 InterfaceId, OutputBufferSize, usbd_status;
BYTE bmRequestType, desc_index, desc_type;
UINT16 langId;
wStream* out;
@@ -831,14 +837,15 @@ static UINT urb_control_descriptor_request(IUDEVICE* pdev, URBDRC_CHANNEL_CALLBA
Stream_Read_UINT8(s, desc_type);
Stream_Read_UINT16(s, langId);
Stream_Read_UINT32(s, OutputBufferSize);
-
+ if (OutputBufferSize > UINT32_MAX - 36)
+ return ERROR_INVALID_DATA;
if (transferDir == USBD_TRANSFER_DIRECTION_OUT)
{
if (Stream_GetRemainingLength(s) < OutputBufferSize)
return ERROR_INVALID_DATA;
}
- out_size = 36 + OutputBufferSize;
+ out_size = 36ULL + OutputBufferSize;
out = Stream_New(NULL, out_size);
if (!out)
@@ -885,7 +892,8 @@ static UINT urb_control_get_status_request(IUDEVICE* pdev, URBDRC_CHANNEL_CALLBA
wStream* s, UINT32 RequestField, UINT32 MessageId,
IUDEVMAN* udevman, BYTE func_recipient, int transferDir)
{
- UINT32 out_size, InterfaceId, OutputBufferSize, usbd_status;
+ size_t out_size;
+ UINT32 InterfaceId, OutputBufferSize, usbd_status;
UINT16 Index;
BYTE bmRequestType;
wStream* out;
@@ -915,7 +923,9 @@ static UINT urb_control_get_status_request(IUDEVICE* pdev, URBDRC_CHANNEL_CALLBA
Stream_Read_UINT16(s, Index); /** Index */
Stream_Seek(s, 2);
Stream_Read_UINT32(s, OutputBufferSize);
- out_size = 36 + OutputBufferSize;
+ if (OutputBufferSize > UINT32_MAX - 36)
+ return ERROR_INVALID_DATA;
+ out_size = 36ULL + OutputBufferSize;
out = Stream_New(NULL, out_size);
if (!out)
@@ -970,6 +980,8 @@ static UINT urb_control_vendor_or_class_request(IUDEVICE* pdev, URBDRC_CHANNEL_C
Stream_Read_UINT16(s, Index); /** index */
Stream_Read_UINT16(s, Padding); /** Padding */
Stream_Read_UINT32(s, OutputBufferSize);
+ if (OutputBufferSize > UINT32_MAX - 36)
+ return ERROR_INVALID_DATA;
if (transferDir == USBD_TRANSFER_DIRECTION_OUT)
{
@@ -977,7 +989,7 @@ static UINT urb_control_vendor_or_class_request(IUDEVICE* pdev, URBDRC_CHANNEL_C
return ERROR_INVALID_DATA;
}
- out_size = 36 + OutputBufferSize;
+ out_size = 36ULL + OutputBufferSize;
out = Stream_New(NULL, out_size);
if (!out)
@@ -1022,7 +1034,8 @@ static UINT urb_os_feature_descriptor_request(IUDEVICE* pdev, URBDRC_CHANNEL_CAL
wStream* s, UINT32 RequestField, UINT32 MessageId,
IUDEVMAN* udevman, int transferDir)
{
- UINT32 out_size, InterfaceId, OutputBufferSize, usbd_status;
+ size_t out_size;
+ UINT32 InterfaceId, OutputBufferSize, usbd_status;
BYTE Recipient, InterfaceNumber, Ms_PageIndex;
UINT16 Ms_featureDescIndex;
wStream* out;
@@ -1050,6 +1063,8 @@ static UINT urb_os_feature_descriptor_request(IUDEVICE* pdev, URBDRC_CHANNEL_CAL
Stream_Read_UINT16(s, Ms_featureDescIndex); /** Ms_featureDescIndex */
Stream_Seek(s, 3); /* Padding 2 */
Stream_Read_UINT32(s, OutputBufferSize);
+ if (OutputBufferSize > UINT32_MAX - 36)
+ return ERROR_INVALID_DATA;
switch (transferDir)
{
@@ -1064,7 +1079,7 @@ static UINT urb_os_feature_descriptor_request(IUDEVICE* pdev, URBDRC_CHANNEL_CAL
}
InterfaceId = ((STREAM_ID_PROXY << 30) | pdev->get_ReqCompletion(pdev));
- out_size = 36 + OutputBufferSize;
+ out_size = 36ULL + OutputBufferSize;
out = Stream_New(NULL, out_size);
if (!out)
@@ -1245,7 +1260,8 @@ static UINT urb_control_get_configuration_request(IUDEVICE* pdev, URBDRC_CHANNEL
wStream* s, UINT32 RequestField, UINT32 MessageId,
IUDEVMAN* udevman, int transferDir)
{
- UINT32 out_size, InterfaceId, OutputBufferSize, usbd_status;
+ size_t out_size;
+ UINT32 InterfaceId, OutputBufferSize, usbd_status;
wStream* out;
URBDRC_PLUGIN* urbdrc;
const BOOL noAck = (RequestField & 0x80000000U) != 0;
@@ -1271,7 +1287,9 @@ static UINT urb_control_get_configuration_request(IUDEVICE* pdev, URBDRC_CHANNEL
return ERROR_INVALID_DATA;
Stream_Read_UINT32(s, OutputBufferSize);
- out_size = 36 + OutputBufferSize;
+ if (OutputBufferSize > UINT32_MAX - 36)
+ return ERROR_INVALID_DATA;
+ out_size = 36ULL + OutputBufferSize;
out = Stream_New(NULL, out_size);
if (!out)
@@ -1298,7 +1316,8 @@ static UINT urb_control_get_interface_request(IUDEVICE* pdev, URBDRC_CHANNEL_CAL
wStream* s, UINT32 RequestField, UINT32 MessageId,
IUDEVMAN* udevman, int transferDir)
{
- UINT32 out_size, InterfaceId, OutputBufferSize, usbd_status;
+ size_t out_size;
+ UINT32 InterfaceId, OutputBufferSize, usbd_status;
UINT16 interface;
wStream* out;
URBDRC_PLUGIN* urbdrc;
@@ -1327,7 +1346,9 @@ static UINT urb_control_get_interface_request(IUDEVICE* pdev, URBDRC_CHANNEL_CAL
Stream_Read_UINT16(s, interface);
Stream_Seek(s, 2);
Stream_Read_UINT32(s, OutputBufferSize);
- out_size = 36 + OutputBufferSize;
+ if (OutputBufferSize > UINT32_MAX - 36)
+ return ERROR_INVALID_DATA;
+ out_size = 36ULL + OutputBufferSize;
out = Stream_New(NULL, out_size);
if (!out)
@@ -1376,7 +1397,8 @@ static UINT urb_control_feature_request(IUDEVICE* pdev, URBDRC_CHANNEL_CALLBACK*
Stream_Read_UINT16(s, FeatureSelector);
Stream_Read_UINT16(s, Index);
Stream_Read_UINT32(s, OutputBufferSize);
-
+ if (OutputBufferSize > UINT32_MAX - 36)
+ return ERROR_INVALID_DATA;
switch (transferDir)
{
case USBD_TRANSFER_DIRECTION_OUT:
@@ -1389,7 +1411,7 @@ static UINT urb_control_feature_request(IUDEVICE* pdev, URBDRC_CHANNEL_CALLBACK*
break;
}
- out = Stream_New(NULL, 36 + OutputBufferSize);
+ out = Stream_New(NULL, 36ULL + OutputBufferSize);
if (!out)
return ERROR_OUTOFMEMORY;
diff --git a/channels/urbdrc/client/libusb/libusb_udevman.c b/channels/urbdrc/client/libusb/libusb_udevman.c
index 01eda4a31..973d9c193 100644
--- a/channels/urbdrc/client/libusb/libusb_udevman.c
+++ b/channels/urbdrc/client/libusb/libusb_udevman.c
@@ -25,6 +25,7 @@
#include <winpr/crt.h>
#include <winpr/cmdline.h>
+#include <winpr/collections.h>
#include <freerdp/addin.h>
@@ -55,6 +56,14 @@
_man->iface.get_##_arg = udevman_get_##_arg; \
_man->iface.set_##_arg = udevman_set_##_arg
+typedef struct _VID_PID_PAIR VID_PID_PAIR;
+
+struct _VID_PID_PAIR
+{
+ UINT16 vid;
+ UINT16 pid;
+};
+
typedef struct _UDEVMAN UDEVMAN;
struct _UDEVMAN
@@ -65,6 +74,9 @@ struct _UDEVMAN
IUDEVICE* head; /* head device in linked list */
IUDEVICE* tail; /* tail device in linked list */
+ LPSTR devices_vid_pid;
+ LPSTR devices_addr;
+ wArrayList* hotplug_vid_pids;
UINT16 flags;
UINT32 device_num;
UINT32 next_device_id;
@@ -301,6 +313,9 @@ static BOOL udevman_unregister_all_udevices(IUDEVMAN* idevman)
if (!idevman)
return FALSE;
+ if (!udevman->head)
+ return TRUE;
+
idevman->loading_lock(idevman);
idevman->rewind(idevman);
@@ -418,13 +433,20 @@ static void udevman_free(IUDEVMAN* idevman)
return;
udevman->running = FALSE;
- WaitForSingleObject(udevman->thread, INFINITE);
+ if (udevman->thread)
+ {
+ WaitForSingleObject(udevman->thread, INFINITE);
+ CloseHandle(udevman->thread);
+ }
udevman_unregister_all_udevices(idevman);
- CloseHandle(udevman->devman_loading);
- CloseHandle(udevman->thread);
+
+ if (udevman->devman_loading)
+ CloseHandle(udevman->devman_loading);
+
libusb_exit(udevman->context);
+ ArrayList_Free(udevman->hotplug_vid_pids);
free(udevman);
}
@@ -531,8 +553,9 @@ static BOOL device_is_filtered(struct libusb_device* dev,
static int hotplug_callback(struct libusb_context* ctx, struct libusb_device* dev,
libusb_hotplug_event event, void* user_data)
{
+ VID_PID_PAIR pair;
struct libusb_device_descriptor desc;
- IUDEVMAN* idevman = (IUDEVMAN*)user_data;
+ UDEVMAN* udevman = (UDEVMAN*)user_data;
const uint8_t bus = libusb_get_bus_number(dev);
const uint8_t addr = libusb_get_device_address(dev);
int rc = libusb_get_device_descriptor(dev, &desc);
@@ -542,18 +565,23 @@ static int hotplug_callback(struct libusb_context* ctx, struct libusb_device* de
if (rc != LIBUSB_SUCCESS)
return rc;
- if (device_is_filtered(dev, &desc, event))
- return 0;
-
switch (event)
{
case LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED:
- if (idevman->isAutoAdd(idevman))
- add_device(idevman, DEVICE_ADD_FLAG_ALL, bus, addr, desc.idVendor, desc.idProduct);
+ pair.vid = desc.idVendor;
+ pair.pid = desc.idProduct;
+ if ((ArrayList_Contains(udevman->hotplug_vid_pids, &pair)) ||
+ (udevman->iface.isAutoAdd(&udevman->iface) &&
+ !device_is_filtered(dev, &desc, event)))
+ {
+ add_device(&udevman->iface, DEVICE_ADD_FLAG_ALL, bus, addr, desc.idVendor,
+ desc.idProduct);
+ }
break;
case LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT:
- del_device(idevman, DEVICE_ADD_FLAG_ALL, bus, addr, desc.idVendor, desc.idProduct);
+ del_device(&udevman->iface, DEVICE_ADD_FLAG_ALL, bus, addr, desc.idVendor,
+ desc.idProduct);
break;
default:
@@ -575,27 +603,12 @@ static BOOL udevman_initialize(IUDEVMAN* idevman, UINT32 channelId)
return TRUE;
}
-static void udevman_load_interface(UDEVMAN* udevman)
+static BOOL udevman_vid_pid_pair_equals(const void* objA, const void* objB)
{
- /* standard */
- udevman->iface.free = udevman_free;
- /* manage devices */
- udevman->iface.rewind = udevman_rewind;
- udevman->iface.get_next = udevman_get_next;
- udevman->iface.has_next = udevman_has_next;
- udevman->iface.register_udevice = udevman_register_udevice;
- udevman->iface.unregister_udevice = udevman_unregister_udevice;
- udevman->iface.get_udevice_by_UsbDevice = udevman_get_udevice_by_UsbDevice;
- /* Extension */
- udevman->iface.isAutoAdd = udevman_is_auto_add;
- /* Basic state */
- BASIC_STATE_FUNC_REGISTER(device_num, udevman);
- BASIC_STATE_FUNC_REGISTER(next_device_id, udevman);
+ const VID_PID_PAIR* a = objA;
+ const VID_PID_PAIR* b = objB;
- /* control semaphore or mutex lock */
- udevman->iface.loading_lock = udevman_loading_lock;
- udevman->iface.loading_unlock = udevman_loading_unlock;
- udevman->iface.initialize = udevman_initialize;
+ return (a->vid == b->vid) && (a->pid == b->pid);
}
static BOOL udevman_parse_device_id_addr(const char** str, UINT16* id1, UINT16* id2, UINT16 max,
@@ -606,7 +619,6 @@ static BOOL udevman_parse_device_id_addr(const char** str, UINT16* id1, UINT16*
unsigned long rc;
rc = strtoul(*str, &mid, 16);
- /* These casts are safe, because strtoul only uses it to return a pointer */
if ((mid == *str) || (*mid != split_sign) || (rc > max))
return FALSE;
@@ -631,54 +643,66 @@ static BOOL udevman_parse_device_id_addr(const char** str, UINT16* id1, UINT16*
return FALSE;
}
-static BOOL urbdrc_udevman_register_devices(UDEVMAN* udevman, const char* devices)
+static BOOL urbdrc_udevman_register_devices(UDEVMAN* udevman, const char* devices, BOOL add_by_addr)
{
const char* pos = devices;
+ VID_PID_PAIR* idpair;
UINT16 id1, id2;
while (*pos != '\0')
{
- if (udevman->flags & UDEVMAN_FLAG_ADD_BY_VID_PID)
+ if (!udevman_parse_device_id_addr(&pos, &id1, &id2, (add_by_addr) ? UINT8_MAX : UINT16_MAX,
+ ':', '#'))
{
- if (!udevman_parse_device_id_addr(&pos, &id1, &id2, UINT16_MAX, ':', '#'))
- return FALSE;
-
- add_device(&udevman->iface, DEVICE_ADD_FLAG_VENDOR | DEVICE_ADD_FLAG_PRODUCT, 0, 0, id1,
- id2);
+ WLog_ERR(TAG, "Invalid device argument: \"%s\"", devices);
+ return COMMAND_LINE_ERROR_UNEXPECTED_VALUE;
}
- else if (udevman->flags & UDEVMAN_FLAG_ADD_BY_ADDR)
- {
- if (!udevman_parse_device_id_addr(&pos, &id1, &id2, UINT8_MAX, ':', '#'))
- return FALSE;
+ if (add_by_addr)
+ {
add_device(&udevman->iface, DEVICE_ADD_FLAG_BUS | DEVICE_ADD_FLAG_DEV, (UINT8)id1,
(UINT8)id2, 0, 0);
}
+ else
+ {
+ idpair = malloc(sizeof(VID_PID_PAIR));
+ if (!idpair)
+ return CHANNEL_RC_NO_MEMORY;
+ idpair->vid = id1;
+ idpair->pid = id2;
+ if (ArrayList_Add(udevman->hotplug_vid_pids, idpair) == -1)
+ {
+ free(idpair);
+ return CHANNEL_RC_NO_MEMORY;
+ }
+
+ add_device(&udevman->iface, DEVICE_ADD_FLAG_VENDOR | DEVICE_ADD_FLAG_PRODUCT, 0, 0, id1,
+ id2);
+ }
}
- return TRUE;
+ return CHANNEL_RC_OK;
}
static UINT urbdrc_udevman_parse_addin_args(UDEVMAN* udevman, ADDIN_ARGV* args)
{
int status;
- DWORD flags;
LPSTR devices = NULL;
- const UINT16 mask = UDEVMAN_FLAG_ADD_BY_VID_PID | UDEVMAN_FLAG_ADD_BY_ADDR;
COMMAND_LINE_ARGUMENT_A* arg;
COMMAND_LINE_ARGUMENT_A urbdrc_udevman_args[] = {
{ "dbg", COMMAND_LINE_VALUE_FLAG, "", NULL, BoolValueFalse, -1, NULL, "debug" },
{ "dev", COMMAND_LINE_VALUE_REQUIRED, "<devices>", NULL, NULL, -1, NULL, "device list" },
- { "id", COMMAND_LINE_VALUE_FLAG, "", NULL, BoolValueFalse, -1, NULL,
+ { "id", COMMAND_LINE_VALUE_OPTIONAL, "", NULL, BoolValueFalse, -1, NULL,
"FLAG_ADD_BY_VID_PID" },
- { "addr", COMMAND_LINE_VALUE_FLAG, "", NULL, BoolValueFalse, -1, NULL, "FLAG_ADD_BY_ADDR" },
+ { "addr", COMMAND_LINE_VALUE_OPTIONAL, "", NULL, BoolValueFalse, -1, NULL,
+ "FLAG_ADD_BY_ADDR" },
{ "auto", COMMAND_LINE_VALUE_FLAG, "", NULL, BoolValueFalse, -1, NULL, "FLAG_ADD_BY_AUTO" },
{ NULL, 0, NULL, NULL, NULL, -1, NULL, NULL }
};
- flags = COMMAND_LINE_SIGIL_NONE | COMMAND_LINE_SEPARATOR_COLON;
- status = CommandLineParseArgumentsA(args->argc, args->argv, urbdrc_udevman_args, flags, udevman,
- NULL, NULL);
+ status = CommandLineParseArgumentsA(args->argc, args->argv, urbdrc_udevman_args,
+ COMMAND_LINE_SIGIL_NONE | COMMAND_LINE_SEPARATOR_COLON,
+ udevman, NULL, NULL);
if (status != CHANNEL_RC_OK)
return status;
@@ -687,7 +711,7 @@ static UINT urbdrc_udevman_parse_addin_args(UDEVMAN* udevman, ADDIN_ARGV* args)
do
{
- if (!(arg->Flags & COMMAND_LINE_VALUE_PRESENT))
+ if (!(arg->Flags & COMMAND_LINE_ARGUMENT_PRESENT))
continue;
CommandLineSwitchStart(arg) CommandLineSwitchCase(arg, "dbg")
@@ -700,11 +724,17 @@ static UINT urbdrc_udevman_parse_addin_args(UDEVMAN* udevman, ADDIN_ARGV* args)
}
CommandLineSwitchCase(arg, "id")
{
- udevman->flags = UDEVMAN_FLAG_ADD_BY_VID_PID;
+ if (arg->Value)
+ udevman->devices_vid_pid = arg->Value;
+ else
+ udevman->flags = UDEVMAN_FLAG_ADD_BY_VID_PID;
}
CommandLineSwitchCase(arg, "addr")
{
- udevman->flags = UDEVMAN_FLAG_ADD_BY_ADDR;
+ if (arg->Value)
+ udevman->devices_addr = arg->Value;
+ else
+ udevman->flags = UDEVMAN_FLAG_ADD_BY_ADDR;
}
CommandLineSwitchCase(arg, "auto")
{
@@ -716,20 +746,59 @@ static UINT urbdrc_udevman_parse_addin_args(UDEVMAN* udevman, ADDIN_ARGV* args)
CommandLineSwitchEnd(arg)
} while ((arg = CommandLineFindNextArgumentA(arg)) != NULL);
- /* Can not add devices by address and VID/PID */
- if ((udevman->flags & mask) == mask)
- return COMMAND_LINE_ERROR_UNEXPECTED_VALUE;
-
- /* Add listed devices after we know the format of addressing */
if (devices)
{
- if (!urbdrc_udevman_register_devices(udevman, devices))
- return COMMAND_LINE_ERROR_UNEXPECTED_VALUE;
+ if (udevman->flags & UDEVMAN_FLAG_ADD_BY_VID_PID)
+ udevman->devices_vid_pid = devices;
+ else if (udevman->flags & UDEVMAN_FLAG_ADD_BY_ADDR)
+ udevman->devices_addr = devices;
}
return CHANNEL_RC_OK;
}
+static UINT udevman_listener_created_callback(IUDEVMAN* iudevman)
+{
+ UINT status;
+ UDEVMAN* udevman = (UDEVMAN*)iudevman;
+
+ if (udevman->devices_vid_pid)
+ {
+ status = urbdrc_udevman_register_devices(udevman, udevman->devices_vid_pid, FALSE);
+ if (status != CHANNEL_RC_OK)
+ return status;
+ }
+
+ if (udevman->devices_addr)
+ return urbdrc_udevman_register_devices(udevman, udevman->devices_addr, TRUE);
+
+ return CHANNEL_RC_OK;
+}
+
+static void udevman_load_interface(UDEVMAN* udevman)
+{
+ /* standard */
+ udevman->iface.free = udevman_free;
+ /* manage devices */
+ udevman->iface.rewind = udevman_rewind;
+ udevman->iface.get_next = udevman_get_next;
+ udevman->iface.has_next = udevman_has_next;
+ udevman->iface.register_udevice = udevman_register_udevice;
+ udevman->iface.unregister_udevice = udevman_unregister_udevice;
+ udevman->iface.get_udevice_by_UsbDevice = udevman_get_udevice_by_UsbDevice;
+ /* Extension */
+ udevman->iface.isAutoAdd = udevman_is_auto_add;
+ /* Basic state */
+ BASIC_STATE_FUNC_REGISTER(device_num, udevman);
+ BASIC_STATE_FUNC_REGISTER(next_device_id, udevman);
+
+ /* control semaphore or mutex lock */
+ udevman->iface.loading_lock = udevman_loading_lock;
+ udevman->iface.loading_unlock = udevman_loading_unlock;
+ udevman->iface.initialize = udevman_initialize;
+ udevman->iface.listener_created_callback = udevman_listener_created_callback;
+}
+
static BOOL poll_libusb_events(UDEVMAN* udevman)
{
int rc = LIBUSB_SUCCESS;
@@ -812,6 +881,12 @@ UINT freerdp_urbdrc_client_subsystem_entry(PFREERDP_URBDRC_SERVICE_ENTRY_POINTS
if (!udevman)
goto fail;
+ udevman->hotplug_vid_pids = ArrayList_New(TRUE);
+ if (!udevman->hotplug_vid_pids)
+ goto fail;
+ ArrayList_Object(udevman->hotplug_vid_pids)->fnObjectFree = free;
+ ArrayList_Object(udevman->hotplug_vid_pids)->fnObjectEquals = udevman_vid_pid_pair_equals;
+
udevman->next_device_id = BASE_USBDEVICE_NUM;
udevman->iface.plugin = pEntryPoints->plugin;
rc = libusb_init(&udevman->context);
@@ -821,7 +896,7 @@ UINT freerdp_urbdrc_client_subsystem_entry(PFREERDP_URBDRC_SERVICE_ENTRY_POINTS
#ifdef _WIN32
#if LIBUSB_API_VERSION >= 0x01000106
- /* Prefer usbDK backend on windows. Not uspported on other platforms. */
+ /* Prefer usbDK backend on windows. Not supported on other platforms. */
rc = libusb_set_option(udevman->context, LIBUSB_OPTION_USE_USBDK);
switch (rc)
{
diff --git a/channels/urbdrc/client/urbdrc_main.c b/channels/urbdrc/client/urbdrc_main.c
index cf5673473..6dbdc5a41 100644
--- a/channels/urbdrc/client/urbdrc_main.c
+++ b/channels/urbdrc/client/urbdrc_main.c
@@ -265,7 +265,8 @@ static UINT urdbrc_send_usb_device_add(URBDRC_CHANNEL_CALLBACK* callback, IUDEVI
const UINT16 bcdDevice = (UINT16)pdev->query_device_descriptor(pdev, BCD_DEVICE);
sprintf_s(HardwareIds[1], DEVICE_HARDWARE_ID_SIZE,
"USB\\VID_%04" PRIX16 "&PID_%04" PRIX16 "", idVendor, idProduct);
- sprintf_s(HardwareIds[0], DEVICE_HARDWARE_ID_SIZE, "%s&REV_%04" PRIX16 "", HardwareIds[1],
+ sprintf_s(HardwareIds[0], DEVICE_HARDWARE_ID_SIZE,
+ "USB\\VID_%04" PRIX16 "&PID_%04" PRIX16 "&REV_%04" PRIX16 "", idVendor, idProduct,
bcdDevice);
}
{
@@ -277,18 +278,20 @@ static UINT urdbrc_send_usb_device_add(URBDRC_CHANNEL_CALLBACK* callback, IUDEVI
{
sprintf_s(CompatibilityIds[2], DEVICE_COMPATIBILITY_ID_SIZE, "USB\\Class_%02" PRIX8 "",
bDeviceClass);
- sprintf_s(CompatibilityIds[1], DEVICE_COMPATIBILITY_ID_SIZE, "%s&SubClass_%02" PRIX8 "",
- CompatibilityIds[2], bDeviceSubClass);
- sprintf_s(CompatibilityIds[0], DEVICE_COMPATIBILITY_ID_SIZE, "%s&Prot_%02" PRIX8 "",
- CompatibilityIds[1], bDeviceProtocol);
+ sprintf_s(CompatibilityIds[1], DEVICE_COMPATIBILITY_ID_SIZE,
+ "USB\\Class_%02" PRIX8 "&SubClass_%02" PRIX8 "", bDeviceClass,
+ bDeviceSubClass);
+ sprintf_s(CompatibilityIds[0], DEVICE_COMPATIBILITY_ID_SIZE,
+ "USB\\Class_%02" PRIX8 "&SubClass_%02" PRIX8 "&Prot_%02" PRIX8 "",
+ bDeviceClass, bDeviceSubClass, bDeviceProtocol);
}
else
{
sprintf_s(CompatibilityIds[2], DEVICE_COMPATIBILITY_ID_SIZE, "USB\\DevClass_00");
- sprintf_s(CompatibilityIds[1], DEVICE_COMPATIBILITY_ID_SIZE, "%s&SubClass_00",
- CompatibilityIds[2]);
- sprintf_s(CompatibilityIds[0], DEVICE_COMPATIBILITY_ID_SIZE, "%s&Prot_00",
- CompatibilityIds[1]);
+ sprintf_s(CompatibilityIds[1], DEVICE_COMPATIBILITY_ID_SIZE,
+ "USB\\DevClass_00&SubClass_00");
+ sprintf_s(CompatibilityIds[0], DEVICE_COMPATIBILITY_ID_SIZE,
+ "USB\\DevClass_00&SubClass_00&Prot_00");
}
}
func_instance_id_generate(pdev, strInstanceId, DEVICE_INSTANCE_STR_SIZE);
@@ -663,7 +666,9 @@ static UINT urbdrc_on_new_channel_connection(IWTSListenerCallback* pListenerCall
*/
static UINT urbdrc_plugin_initialize(IWTSPlugin* pPlugin, IWTSVirtualChannelManager* pChannelMgr)
{
+ UINT status;
URBDRC_PLUGIN* urbdrc = (URBDRC_PLUGIN*)pPlugin;
+ IUDEVMAN* udevman = urbdrc->udevman;
char channelName[sizeof(URBDRC_CHANNEL_NAME)] = { URBDRC_CHANNEL_NAME };
if (!urbdrc)
@@ -681,8 +686,15 @@ static UINT urbdrc_plugin_initialize(IWTSPlugin* pPlugin, IWTSVirtualChannelMana
/* [MS-RDPEUSB] 2.1 Transport defines the channel name in uppercase letters */
CharUpperA(channelName);
- return pChannelMgr->CreateListener(pChannelMgr, channelName, 0,
- &urbdrc->listener_callback->iface, NULL);
+ status = pChannelMgr->CreateListener(pChannelMgr, channelName, 0,
+ &urbdrc->listener_callback->iface, NULL);
+ if (status != CHANNEL_RC_OK)
+ return status;
+
+ if (udevman->listener_created_callback)
+ return udevman->listener_created_callback(udevman);
+
+ return CHANNEL_RC_OK;
}
/**
diff --git a/channels/urbdrc/client/urbdrc_main.h b/channels/urbdrc/client/urbdrc_main.h
index 749aaf872..2a750d64d 100644
--- a/channels/urbdrc/client/urbdrc_main.h
+++ b/channels/urbdrc/client/urbdrc_main.h
@@ -216,6 +216,7 @@ struct _IUDEVMAN
void (*loading_lock)(IUDEVMAN* idevman);
void (*loading_unlock)(IUDEVMAN* idevman);
BOOL (*initialize)(IUDEVMAN* idevman, UINT32 channelId);
+ UINT (*listener_created_callback)(IUDEVMAN* idevman);
IWTSPlugin* plugin;
UINT32 controlChannelId;
diff --git a/channels/urbdrc/common/msusb.c b/channels/urbdrc/common/msusb.c
index 45c677370..bb517ce5d 100644
--- a/channels/urbdrc/common/msusb.c
+++ b/channels/urbdrc/common/msusb.c
@@ -64,7 +64,7 @@ static MSUSB_PIPE_DESCRIPTOR** msusb_mspipes_read(wStream* s, UINT32 NumberOfPip
UINT32 pnum;
MSUSB_PIPE_DESCRIPTOR** MsPipes;
- if (Stream_GetRemainingCapacity(s) < 12 * NumberOfPipes)
+ if (Stream_GetRemainingCapacity(s) / 12 < NumberOfPipes)
return NULL;
MsPipes = (MSUSB_PIPE_DESCRIPTOR**)calloc(NumberOfPipes, sizeof(MSUSB_PIPE_DESCRIPTOR*));
@@ -317,7 +317,7 @@ MSUSB_CONFIG_DESCRIPTOR* msusb_msconfig_read(wStream* s, UINT32 NumInterfaces)
MSUSB_CONFIG_DESCRIPTOR* MsConfig;
BYTE lenConfiguration, typeConfiguration;
- if (Stream_GetRemainingCapacity(s) < 6 + NumInterfaces * 2)
+ if (Stream_GetRemainingCapacity(s) < 6ULL + NumInterfaces * 2ULL)
return NULL;
MsConfig = msusb_msconfig_new();
diff --git a/channels/video/client/video_main.c b/channels/video/client/video_main.c
index a161a1143..1efadb399 100644
--- a/channels/video/client/video_main.c
+++ b/channels/video/client/video_main.c
@@ -220,8 +220,14 @@ error_frames:
static PresentationContext* PresentationContext_new(VideoClientContext* video, BYTE PresentationId,
UINT32 x, UINT32 y, UINT32 width, UINT32 height)
{
+ size_t s;
VideoClientContextPriv* priv = video->priv;
- PresentationContext* ret = calloc(1, sizeof(*ret));
+ PresentationContext* ret;
+ s = width * height * 4ULL;
+ if (s > INT32_MAX)
+ return NULL;
+
+ ret = calloc(1, sizeof(*ret));
if (!ret)
return NULL;
@@ -243,7 +249,7 @@ static PresentationContext* PresentationContext_new(VideoClientContext* video, B
goto error_currentSample;
}
- ret->surfaceData = BufferPool_Take(priv->surfacePool, width * height * 4);
+ ret->surfaceData = BufferPool_Take(priv->surfacePool, s);
if (!ret->surfaceData)
{
WLog_ERR(TAG, "unable to allocate surfaceData");
diff --git a/client/Android/Studio/aFreeRDP/build.gradle b/client/Android/Studio/aFreeRDP/build.gradle
index f5facf9d2..fc3dba21a 100644
--- a/client/Android/Studio/aFreeRDP/build.gradle
+++ b/client/Android/Studio/aFreeRDP/build.gradle
@@ -9,7 +9,7 @@ android {
minSdkVersion 21
targetSdkVersion 28
vectorDrawables.useSupportLibrary = true
- versionCode = 15
+ versionCode = rootProject.ext.versionCode
versionName = rootProject.ext.versionName
}
diff --git a/client/Android/Studio/build.gradle b/client/Android/Studio/build.gradle
index 694fa38cc..e944b11d3 100644
--- a/client/Android/Studio/build.gradle
+++ b/client/Android/Studio/build.gradle
@@ -29,9 +29,11 @@ def getVersionName = { ->
ext {
versionName = properties.get('VERSION_NAME', getVersionName())
+ versionCode = properties.get('VERSION_CODE', 16)
println '----------------- Project configuration -------------------'
println 'VERSION_NAME: ' + versionName
+ println 'VERSION_CODE: ' + versionCode
println 'RELEASE_STORE_FILE: '+ RELEASE_STORE_FILE
println 'RELEASE_KEY_ALIAS: '+ RELEASE_KEY_ALIAS
println '-----------------------------------------------------------'
diff --git a/client/Android/Studio/freeRDPCore/build.gradle b/client/Android/Studio/freeRDPCore/build.gradle
index 7b641a0db..c275b398c 100644
--- a/client/Android/Studio/freeRDPCore/build.gradle
+++ b/client/Android/Studio/freeRDPCore/build.gradle
@@ -8,7 +8,7 @@ android {
minSdkVersion 21
targetSdkVersion 28
vectorDrawables.useSupportLibrary = true
- versionCode = 15
+ versionCode = rootProject.ext.versionCode
versionName = rootProject.ext.versionName
}
diff --git a/client/Android/android_cliprdr.c b/client/Android/android_cliprdr.c
index 5e9f79182..414a25d81 100644
--- a/client/Android/android_cliprdr.c
+++ b/client/Android/android_cliprdr.c
@@ -81,6 +81,7 @@ UINT android_cliprdr_send_client_format_list(CliprdrClientContext* cliprdr)
formatList.msgFlags = CB_RESPONSE_OK;
formatList.numFormats = numFormats;
formatList.formats = formats;
+ formatList.msgType = CB_FORMAT_LIST;
if (!afc->cliprdr->ClientFormatList)
goto fail;
diff --git a/client/Android/android_freerdp.c b/client/Android/android_freerdp.c
index 942ead16c..7d332c731 100644
--- a/client/Android/android_freerdp.c
+++ b/client/Android/android_freerdp.c
@@ -56,7 +56,7 @@
#define TAG CLIENT_TAG("android")
/* Defines the JNI version supported by this library. */
-#define FREERDP_JNI_VERSION "2.1.0-dev"
+#define FREERDP_JNI_VERSION "2.1.0"
static void android_OnChannelConnectedEventHandler(void* context, ChannelConnectedEventArgs* e)
{
diff --git a/client/Mac/Clipboard.m b/client/Mac/Clipboard.m
index a34e5a85d..a57725f8b 100644
--- a/client/Mac/Clipboard.m
+++ b/client/Mac/Clipboard.m
@@ -28,7 +28,7 @@ int mac_cliprdr_send_client_format_list(CliprdrClientContext *cliprdr)
UINT32 *pFormatIds;
const char *formatName;
CLIPRDR_FORMAT *formats;
- CLIPRDR_FORMAT_LIST formatList;
+ CLIPRDR_FORMAT_LIST formatList = { 0 };
mfContext *mfc = (mfContext *)cliprdr->custom;
ZeroMemory(&formatList, sizeof(CLIPRDR_FORMAT_LIST));
@@ -56,6 +56,7 @@ int mac_cliprdr_send_client_format_list(CliprdrClientContext *cliprdr)
formatList.msgFlags = CB_RESPONSE_OK;
formatList.numFormats = numFormats;
formatList.formats = formats;
+ formatList.msgType = CB_FORMAT_LIST;
mfc->cliprdr->ClientFormatList(mfc->cliprdr, &formatList);
diff --git a/client/Wayland/wlf_cliprdr.c b/client/Wayland/wlf_cliprdr.c
index c88b32a22..dff599844 100644
--- a/client/Wayland/wlf_cliprdr.c
+++ b/client/Wayland/wlf_cliprdr.c
@@ -174,6 +174,7 @@ static UINT wlf_cliprdr_send_client_format_list(wfClipboard* clipboard)
formatList.msgFlags = CB_RESPONSE_OK;
formatList.numFormats = (UINT32)clipboard->numClientFormats;
formatList.formats = clipboard->clientFormats;
+ formatList.msgType = CB_FORMAT_LIST;
return clipboard->context->ClientFormatList(clipboard->context, &formatList);
}
@@ -624,6 +625,7 @@ wlf_cliprdr_server_format_data_request(CliprdrClientContext* context,
rc = ERROR_INTERNAL_ERROR;
else
{
+ cdata = NULL;
cnv = ConvertToUnicode(CP_UTF8, 0, (LPCSTR)data, (int)size, &cdata, 0);
free(data);
data = NULL;
diff --git a/client/Wayland/wlf_input.c b/client/Wayland/wlf_input.c
index e2c555e7c..afa8d4b51 100644
--- a/client/Wayland/wlf_input.c
+++ b/client/Wayland/wlf_input.c
@@ -171,9 +171,19 @@ BOOL wlf_handle_pointer_axis(freerdp* instance, const UwacPointerAxisEvent* ev)
return FALSE;
}
- step = (uint32_t)abs(direction);
- if (step > WheelRotationMask)
- step = WheelRotationMask;
+ /* Wheel rotation steps:
+ *
+ * positive: 0 ... 0xFF -> slow ... fast
+ * negative: 0 ... 0xFF -> fast ... slow
+ */
+ step = abs(direction);
+ if (step > 0xFF)
+ step = 0xFF;
+
+ /* Negative rotation, so count down steps from top */
+ if (flags & PTR_FLAGS_WHEEL_NEGATIVE)
+ step = 0xFF - step;
+
flags |= step;
return freerdp_input_send_mouse_event(input, flags, (UINT16)x, (UINT16)y);
diff --git a/client/Wayland/wlfreerdp.c b/client/Wayland/wlfreerdp.c
index c7d63c90e..5086220d2 100644
--- a/client/Wayland/wlfreerdp.c
+++ b/client/Wayland/wlfreerdp.c
@@ -191,9 +191,9 @@ static BOOL wl_pre_connect(freerdp* instance)
if (settings->Fullscreen)
{
// Use the resolution of the first display output
- output = UwacDisplayGetOutput(context->display, 1);
+ output = UwacDisplayGetOutput(context->display, 0);
- if (output != NULL && UwacOutputGetResolution(output, &resolution) == UWAC_SUCCESS)
+ if ((output != NULL) && (UwacOutputGetResolution(output, &resolution) == UWAC_SUCCESS))
{
settings->DesktopWidth = (UINT32)resolution.width;
settings->DesktopHeight = (UINT32)resolution.height;
diff --git a/client/Windows/wf_cliprdr.c b/client/Windows/wf_cliprdr.c
index b930f084b..18a5cd254 100644
--- a/client/Windows/wf_cliprdr.c
+++ b/client/Windows/wf_cliprdr.c
@@ -1235,7 +1235,7 @@ static UINT cliprdr_send_format_list(wfClipboard* clipboard)
UINT32 formatId = 0;
char formatName[1024];
CLIPRDR_FORMAT* formats = NULL;
- CLIPRDR_FORMAT_LIST formatList;
+ CLIPRDR_FORMAT_LIST formatList = { 0 };
if (!clipboard)
return ERROR_INTERNAL_ERROR;
@@ -1287,6 +1287,7 @@ static UINT cliprdr_send_format_list(wfClipboard* clipboard)
formatList.numFormats = numFormats;
formatList.formats = formats;
+ formatList.msgType = CB_FORMAT_LIST;
rc = clipboard->context->ClientFormatList(clipboard->context, &formatList);
for (index = 0; index < numFormats; index++)
diff --git a/client/Windows/wf_graphics.c b/client/Windows/wf_graphics.c
index da1afcf48..8a146f3f8 100644
--- a/client/Windows/wf_graphics.c
+++ b/client/Windows/wf_graphics.c
@@ -238,7 +238,7 @@ static BOOL wf_Pointer_New(rdpContext* context, const rdpPointer* pointer)
goto fail;
info.hbmColor = wf_create_dib((wfContext*)context, pointer->width, pointer->height,
- srcFormat, NULL, &pdata);
+ gdi->dstFormat, NULL, &pdata);
if (!info.hbmColor)
goto fail;
diff --git a/client/X11/xf_cliprdr.c b/client/X11/xf_cliprdr.c
index abcae72c8..21017db00 100644
--- a/client/X11/xf_cliprdr.c
+++ b/client/X11/xf_cliprdr.c
@@ -533,6 +533,7 @@ static void xf_cliprdr_get_requested_targets(xfClipboard* clipboard)
formatList.msgFlags = CB_RESPONSE_OK;
formatList.numFormats = numFormats;
formatList.formats = formats;
+ formatList.msgType = CB_FORMAT_LIST;
clipboard->context->ClientFormatList(clipboard->context, &formatList);
xf_cliprdr_free_formats(formats, numFormats);
}
@@ -1100,6 +1101,7 @@ static UINT xf_cliprdr_send_client_format_list(xfClipboard* clipboard)
formatList.msgFlags = CB_RESPONSE_OK;
formatList.numFormats = numFormats;
formatList.formats = formats;
+ formatList.msgType = CB_FORMAT_LIST;
ret = clipboard->context->ClientFormatList(clipboard->context, &formatList);
free(formats);
diff --git a/client/common/cmdline.c b/client/common/cmdline.c
index a1d46da7f..cdea23de0 100644
--- a/client/common/cmdline.c
+++ b/client/common/cmdline.c
@@ -454,7 +454,7 @@ BOOL freerdp_client_print_command_line_help_ex(int argc, char** argv,
printf("\n");
printf("Multimedia Redirection: /video\n");
#ifdef CHANNEL_URBDRC_CLIENT
- printf("USB Device Redirection: /usb:id,dev:054c:0268\n");
+ printf("USB Device Redirection: /usb:id:054c:0268#4669:6e6b,addr:04:0c\n");
#endif
printf("\n");
printf("For Gateways, the https_proxy environment variable is respected:\n");
@@ -3186,6 +3186,89 @@ int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings,
if (!settings->SmartcardLogon)
activate_smartcard_logon_rdp(settings);
}
+
+ CommandLineSwitchCase(arg, "tune")
+ {
+ size_t x, count;
+ char** p = CommandLineParseCommaSeparatedValuesEx("tune", arg->Value, &count);
+ if (!p)
+ return COMMAND_LINE_ERROR;
+ for (x = 1; x < count; x++)
+ {
+ char* cur = p[x];
+ char* sep = strchr(cur, ':');
+ if (!sep)
+ {
+ free(p);
+ return COMMAND_LINE_ERROR;
+ }
+ *sep++ = '\0';
+ if (!freerdp_settings_set_value_for_name(settings, cur, sep))
+ {
+ free(p);
+ return COMMAND_LINE_ERROR;
+ }
+ }
+
+ free(p);
+ }
+ CommandLineSwitchCase(arg, "tune-list")
+ {
+ size_t x;
+ SSIZE_T type = 0;
+
+ printf("%s\t%50s\t%s\t%s", "<index>", "<key>", "<type>", "<default value>\n");
+ for (x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
+ {
+ const char* name = freerdp_settings_get_name_for_key(x);
+ type = freerdp_settings_get_type_for_key(x);
+
+ switch (type)
+ {
+ case RDP_SETTINGS_TYPE_BOOL:
+ printf("%" PRIuz "\t%50s\tBOOL\t%s\n", x, name,
+ freerdp_settings_get_bool(settings, x) ? "TRUE" : "FALSE");
+ break;
+ case RDP_SETTINGS_TYPE_UINT16:
+ printf("%" PRIuz "\t%50s\tUINT16\t%" PRIu16 "\n", x, name,
+ freerdp_settings_get_uint16(settings, x));
+ break;
+ case RDP_SETTINGS_TYPE_INT16:
+ printf("%" PRIuz "\t%50s\tINT16\t%" PRId16 "\n", x, name,
+ freerdp_settings_get_int16(settings, x));
+ break;
+ case RDP_SETTINGS_TYPE_UINT32:
+ printf("%" PRIuz "\t%50s\tUINT32\t%" PRIu32 "\n", x, name,
+ freerdp_settings_get_uint32(settings, x));
+ break;
+ case RDP_SETTINGS_TYPE_INT32:
+ printf("%" PRIuz "\t%50s\tINT32\t%" PRId32 "\n", x, name,
+ freerdp_settings_get_int32(settings, x));
+ break;
+ case RDP_SETTINGS_TYPE_UINT64:
+ printf("%" PRIuz "\t%50s\tUINT64\t%" PRIu64 "\n", x, name,
+ freerdp_settings_get_uint64(settings, x));
+ break;
+ case RDP_SETTINGS_TYPE_INT64:
+ printf("%" PRIuz "\t%50s\tINT64\t%" PRId64 "\n", x, name,
+ freerdp_settings_get_int64(settings, x));
+ break;
+ case RDP_SETTINGS_TYPE_STRING:
+ printf("%" PRIuz "\t%50s\tSTRING\t%s"
+ "\n",
+ x, name, freerdp_settings_get_string(settings, x));
+ break;
+ case RDP_SETTINGS_TYPE_POINTER:
+ printf("%" PRIuz "\t%50s\tPOINTER\t%p"
+ "\n",
+ x, name, freerdp_settings_get_pointer(settings, x));
+ break;
+ default:
+ break;
+ }
+ }
+ return COMMAND_LINE_STATUS_PRINT;
+ }
CommandLineSwitchDefault(arg)
{
}
diff --git a/client/common/cmdline.h b/client/common/cmdline.h
index b2a6a22dc..3ae8af1f4 100644
--- a/client/common/cmdline.h
+++ b/client/common/cmdline.h
@@ -344,13 +344,18 @@ static const COMMAND_LINE_ARGUMENT_A args[] = {
"TLS security level - defaults to 1" },
{ "toggle-fullscreen", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueTrue, NULL, -1, NULL,
"Alt+Ctrl+Enter to toggle fullscreen" },
+ { "tune", COMMAND_LINE_VALUE_REQUIRED, "<setting:value>,<setting:value>", "", NULL, -1, NULL,
+ "[experimental] directly manipulate freerdp settings, use with extreme caution!" },
+ { "tune-list", COMMAND_LINE_VALUE_FLAG, NULL, NULL, NULL, -1, NULL,
+ "Print options allowed for /tune" },
{ "u", COMMAND_LINE_VALUE_REQUIRED, "[[<domain>\\]<user>|<user>[@<domain>]]", NULL, NULL, -1,
NULL, "Username" },
{ "unmap-buttons", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL,
"Let server see real physical pointer button" },
#ifdef CHANNEL_URBDRC_CLIENT
- { "usb", COMMAND_LINE_VALUE_REQUIRED, "[dbg,][dev:<dev>,][id|addr,][auto]", NULL, NULL, -1,
- NULL, "Redirect USB device" },
+ { "usb", COMMAND_LINE_VALUE_REQUIRED,
+ "[dbg,][id:<vid>:<pid>#...,][addr:<bus>:<addr>#...,][auto]", NULL, NULL, -1, NULL,
+ "Redirect USB device" },
#endif
{ "v", COMMAND_LINE_VALUE_REQUIRED, "<server>[:port]", NULL, NULL, -1, NULL,
"Server hostname" },
diff --git a/client/common/file.c b/client/common/file.c
index 401f5ac3d..7cac1acab 100644
--- a/client/common/file.c
+++ b/client/common/file.c
@@ -1614,12 +1614,23 @@ BOOL freerdp_client_populate_settings_from_rdp_file(rdpFile* file, rdpSettings*
{
if (file->BandwidthAutoDetect != 0)
{
+ if ((~file->NetworkAutoDetect) && (file->NetworkAutoDetect != 0))
+ {
+ WLog_WARN(TAG,
+ "Got networkautodetect:i:%" PRIu32 " and bandwidthautodetect:i:%" PRIu32
+ ". Correcting to networkautodetect:i:0",
+ file->NetworkAutoDetect, file->BandwidthAutoDetect);
+ WLog_WARN(TAG,
+ "Add networkautodetect:i:0 to your RDP file to eliminate this warning.");
+ }
+
if (!freerdp_set_connection_type(settings, CONNECTION_TYPE_AUTODETECT))
return FALSE;
setDefaultConnectionType = FALSE;
}
if (!freerdp_settings_set_bool(settings, FreeRDP_NetworkAutoDetect,
- file->BandwidthAutoDetect != 0))
+ (file->BandwidthAutoDetect != 0) ||
+ (file->NetworkAutoDetect == 0)))
return FALSE;
}
@@ -1627,25 +1638,24 @@ BOOL freerdp_client_populate_settings_from_rdp_file(rdpFile* file, rdpSettings*
{
if (file->NetworkAutoDetect == 0)
{
- if (file->BandwidthAutoDetect != CONNECTION_TYPE_AUTODETECT)
+ if ((~file->BandwidthAutoDetect) && (file->BandwidthAutoDetect == 0))
{
WLog_WARN(TAG,
"Got networkautodetect:i:%" PRIu32 " and bandwidthautodetect:i:%" PRIu32
- ". Correcting to bandwidthautodetect:i:%" PRIu32,
- file->NetworkAutoDetect, file->BandwidthAutoDetect,
- CONNECTION_TYPE_AUTODETECT);
- WLog_WARN(TAG,
- "Add bandwidthautodetect:i:%" PRIu32
- " to your RDP file to eliminate this warning.",
- CONNECTION_TYPE_AUTODETECT);
+ ". Correcting to bandwidthautodetect:i:1",
+ file->NetworkAutoDetect, file->BandwidthAutoDetect);
+ WLog_WARN(
+ TAG, "Add bandwidthautodetect:i:1 to your RDP file to eliminate this warning.");
}
if (!freerdp_set_connection_type(settings, CONNECTION_TYPE_AUTODETECT))
return FALSE;
+
setDefaultConnectionType = FALSE;
}
if (!freerdp_settings_set_bool(settings, FreeRDP_NetworkAutoDetect,
- file->NetworkAutoDetect == 0))
+ (file->BandwidthAutoDetect != 0) ||
+ (file->NetworkAutoDetect == 0)))
return FALSE;
}
diff --git a/client/iOS/Resources/en.lproj/Localizable.strings b/client/iOS/Resources/en.lproj/Localizable.strings
index 3c0f66365..b4951facc 100644
--- a/client/iOS/Resources/en.lproj/Localizable.strings
+++ b/client/iOS/Resources/en.lproj/Localizable.strings
Binary files differ
diff --git a/include/freerdp/api.h b/include/freerdp/api.h
index c6cecf875..65cf98c6e 100644
--- a/include/freerdp/api.h
+++ b/include/freerdp/api.h
@@ -20,6 +20,7 @@
#ifndef FREERDP_API_H
#define FREERDP_API_H
+#include <winpr/winpr.h>
#include <winpr/platform.h>
#ifdef _WIN32
@@ -29,12 +30,6 @@
#endif
#ifdef _WIN32
-#define INLINE __inline
-#else
-#define INLINE inline
-#endif
-
-#ifdef _WIN32
#define __func__ __FUNCTION__
#endif
diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h
index b913f7bfc..99bc0d2dd 100644
--- a/include/freerdp/settings.h
+++ b/include/freerdp/settings.h
@@ -894,6 +894,7 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL;
* FreeRDP Settings Data Structure
*/
+#define FreeRDP_Settings_StableAPI_MAX 5312
struct rdp_settings
{
/**
@@ -1561,6 +1562,19 @@ struct rdp_settings
};
typedef struct rdp_settings rdpSettings;
+enum rdp_settings_type
+{
+ RDP_SETTINGS_TYPE_BOOL,
+ RDP_SETTINGS_TYPE_UINT16,
+ RDP_SETTINGS_TYPE_INT16,
+ RDP_SETTINGS_TYPE_UINT32,
+ RDP_SETTINGS_TYPE_INT32,
+ RDP_SETTINGS_TYPE_UINT64,
+ RDP_SETTINGS_TYPE_INT64,
+ RDP_SETTINGS_TYPE_STRING,
+ RDP_SETTINGS_TYPE_POINTER
+};
+
#ifdef __cplusplus
extern "C"
{
@@ -1670,6 +1684,14 @@ extern "C"
FREERDP_API const void* freerdp_settings_get_pointer(const rdpSettings* settings, size_t id);
+ FREERDP_API BOOL freerdp_settings_set_value_for_name(rdpSettings* settings, const char* name,
+ const char* value);
+
+ FREERDP_API SSIZE_T freerdp_settings_get_key_for_name(const char* value);
+ FREERDP_API SSIZE_T freerdp_settings_get_type_for_name(const char* value);
+ FREERDP_API SSIZE_T freerdp_settings_get_type_for_key(size_t key);
+ FREERDP_API const char* freerdp_settings_get_name_for_key(size_t key);
+
#ifdef __cplusplus
}
#endif
diff --git a/libfreerdp/cache/glyph.c b/libfreerdp/cache/glyph.c
index 1c17f7eb6..9f5e4a301 100644
--- a/libfreerdp/cache/glyph.c
+++ b/libfreerdp/cache/glyph.c
@@ -42,7 +42,7 @@ static const void* glyph_cache_fragment_get(rdpGlyphCache* glyph, UINT32 index,
static BOOL glyph_cache_fragment_put(rdpGlyphCache* glyph, UINT32 index, UINT32 count,
const void* entry);
-static UINT32 update_glyph_offset(const BYTE* data, UINT32 index, INT32* x, INT32* y,
+static UINT32 update_glyph_offset(const BYTE* data, size_t length, UINT32 index, INT32* x, INT32* y,
UINT32 ulCharInc, UINT32 flAccel)
{
if ((ulCharInc == 0) && (!(flAccel & SO_CHAR_INC_EQUAL_BM_BASE)))
@@ -51,8 +51,15 @@ static UINT32 update_glyph_offset(const BYTE* data, UINT32 index, INT32* x, INT3
if (offset & 0x80)
{
- offset = data[index++];
- offset |= ((UINT32)data[index++]) << 8;
+
+ if (index + 1 < length)
+ {
+ offset = data[index++];
+ offset |= ((UINT32)data[index++]) << 8;
+ }
+ else
+ WLog_WARN(TAG, "[%s] glyph index out of bound %" PRIu32 " [max %" PRIuz "]", index,
+ length);
}
if (flAccel & SO_VERTICAL)
@@ -234,7 +241,7 @@ static BOOL update_process_glyph_fragments(rdpContext* context, const BYTE* data
switch (op)
{
case GLYPH_FRAGMENT_USE:
- if (index + 1 > length)
+ if (index + 1 >= length)
return FALSE;
id = data[index++];
@@ -246,7 +253,7 @@ static BOOL update_process_glyph_fragments(rdpContext* context, const BYTE* data
for (n = 0; n < size;)
{
const UINT32 fop = fragments[n++];
- n = update_glyph_offset(fragments, n, &x, &y, ulCharInc, flAccel);
+ n = update_glyph_offset(fragments, size, n, &x, &y, ulCharInc, flAccel);
if (!update_process_glyph(context, fragments, fop, &x, &y, cacheId, flAccel,
fOpRedundant, &bound))
@@ -265,7 +272,7 @@ static BOOL update_process_glyph_fragments(rdpContext* context, const BYTE* data
break;
default:
- index = update_glyph_offset(data, index, &x, &y, ulCharInc, flAccel);
+ index = update_glyph_offset(data, length, index, &x, &y, ulCharInc, flAccel);
if (!update_process_glyph(context, data, op, &x, &y, cacheId, flAccel, fOpRedundant,
&bound))
@@ -378,7 +385,7 @@ static BOOL update_gdi_fast_index(rdpContext* context, const FAST_INDEX_ORDER* f
static BOOL update_gdi_fast_glyph(rdpContext* context, const FAST_GLYPH_ORDER* fastGlyph)
{
INT32 x, y;
- BYTE text_data[2];
+ BYTE text_data[4] = { 0 };
INT32 opLeft, opTop;
INT32 opRight, opBottom;
INT32 opWidth = 0, opHeight = 0;
@@ -464,9 +471,9 @@ static BOOL update_gdi_fast_glyph(rdpContext* context, const FAST_GLYPH_ORDER* f
opHeight = opBottom - opTop + 1;
return update_process_glyph_fragments(
- context, text_data, 1, fastGlyph->cacheId, fastGlyph->ulCharInc, fastGlyph->flAccel,
- fastGlyph->backColor, fastGlyph->foreColor, x, y, fastGlyph->bkLeft, fastGlyph->bkTop,
- bkWidth, bkHeight, opLeft, opTop, opWidth, opHeight, FALSE);
+ context, text_data, sizeof(text_data), fastGlyph->cacheId, fastGlyph->ulCharInc,
+ fastGlyph->flAccel, fastGlyph->backColor, fastGlyph->foreColor, x, y, fastGlyph->bkLeft,
+ fastGlyph->bkTop, bkWidth, bkHeight, opLeft, opTop, opWidth, opHeight, FALSE);
}
static BOOL update_gdi_cache_glyph(rdpContext* context, const CACHE_GLYPH_ORDER* cacheGlyph)
diff --git a/libfreerdp/codec/clear.c b/libfreerdp/codec/clear.c
index 5be6cb12f..118e09b35 100644
--- a/libfreerdp/codec/clear.c
+++ b/libfreerdp/codec/clear.c
@@ -130,7 +130,7 @@ static BOOL clear_decompress_subcode_rlex(wStream* s, UINT32 bitmapDataByteCount
UINT32 i;
UINT32 pixelCount;
UINT32 bitmapDataOffset;
- UINT32 pixelIndex;
+ size_t pixelIndex;
UINT32 numBits;
BYTE startIndex;
BYTE stopIndex;
@@ -146,6 +146,8 @@ static BOOL clear_decompress_subcode_rlex(wStream* s, UINT32 bitmapDataByteCount
return FALSE;
}
+ if (Stream_GetRemainingLength(s) < 1)
+ return FALSE;
Stream_Read_UINT8(s, paletteCount);
bitmapDataOffset = 1 + (paletteCount * 3);
@@ -155,6 +157,9 @@ static BOOL clear_decompress_subcode_rlex(wStream* s, UINT32 bitmapDataByteCount
return FALSE;
}
+ if (Stream_GetRemainingLength(s) < 3ULL * paletteCount)
+ return FALSE;
+
for (i = 0; i < paletteCount; i++)
{
BYTE r, g, b;
@@ -299,7 +304,7 @@ static BOOL clear_decompress_subcode_rlex(wStream* s, UINT32 bitmapDataByteCount
if (pixelIndex != pixelCount)
{
- WLog_ERR(TAG, "pixelIndex %" PRIu32 " != pixelCount %" PRIu32 "", pixelIndex, pixelCount);
+ WLog_ERR(TAG, "pixelIndex %" PRIdz " != pixelCount %" PRIu32 "", pixelIndex, pixelCount);
return FALSE;
}
diff --git a/libfreerdp/codec/dsp_ffmpeg.c b/libfreerdp/codec/dsp_ffmpeg.c
index 222ffa717..4e4a07c7a 100644
--- a/libfreerdp/codec/dsp_ffmpeg.c
+++ b/libfreerdp/codec/dsp_ffmpeg.c
@@ -79,6 +79,14 @@ static BOOL ffmpeg_codec_is_filtered(enum AVCodecID id, BOOL encoder)
case AV_CODEC_ID_NONE:
return TRUE;
+ case AV_CODEC_ID_AAC:
+ case AV_CODEC_ID_AAC_LATM:
+#if !defined(WITH_DSP_EXPERIMENTAL)
+ if (encoder)
+ return TRUE;
+#endif
+ return FALSE;
+
default:
return FALSE;
}
diff --git a/libfreerdp/codec/progressive.c b/libfreerdp/codec/progressive.c
index bb58ed1a8..bfa2dc5da 100644
--- a/libfreerdp/codec/progressive.c
+++ b/libfreerdp/codec/progressive.c
@@ -1920,7 +1920,7 @@ static INLINE INT32 progressive_wb_read_region_header(PROGRESSIVE_CONTEXT* progr
UINT16 blockType, UINT32 blockLen,
PROGRESSIVE_BLOCK_REGION* region)
{
- size_t offset, len;
+ size_t len;
memset(region, 0, sizeof(PROGRESSIVE_BLOCK_REGION));
if (Stream_GetRemainingLength(s) < 12)
@@ -1965,35 +1965,37 @@ static INLINE INT32 progressive_wb_read_region_header(PROGRESSIVE_CONTEXT* progr
}
len = Stream_GetRemainingLength(s);
- offset = (region->numRects * 8);
- if (len < offset)
+ if (len / 8 < region->numRects)
{
WLog_Print(progressive->log, WLOG_ERROR, "ProgressiveRegion data short for region->rects");
return -1015;
}
+ len -= region->numRects * 8ULL;
- offset += (region->numQuant * 5);
- if (len < offset)
+ if (len / 5 < region->numQuant)
{
WLog_Print(progressive->log, WLOG_ERROR, "ProgressiveRegion data short for region->cQuant");
return -1018;
}
+ len -= region->numQuant * 5ULL;
- offset += (region->numProgQuant * 16);
- if (len < offset)
+ if (len / 16 < region->numProgQuant)
{
WLog_Print(progressive->log, WLOG_ERROR,
"ProgressiveRegion data short for region->cProgQuant");
return -1021;
}
+ len -= region->numProgQuant * 16ULL;
- offset += region->tileDataSize;
- if (len < offset)
+ if (len < region->tileDataSize)
{
WLog_Print(progressive->log, WLOG_ERROR, "ProgressiveRegion data short for region->tiles");
return -1024;
}
-
+ len -= region->tileDataSize;
+ if (len > 0)
+ WLog_Print(progressive->log, WLOG_DEBUG,
+ "Unused byes detected, %" PRIuz " bytes not processed", len);
return 0;
}
diff --git a/libfreerdp/codec/rfx.c b/libfreerdp/codec/rfx.c
index 77d295fd6..b7db992ee 100644
--- a/libfreerdp/codec/rfx.c
+++ b/libfreerdp/codec/rfx.c
@@ -752,7 +752,6 @@ static BOOL rfx_process_message_tileset(RFX_CONTEXT* context, RFX_MESSAGE* messa
{
BOOL rc;
int i, close_cnt;
- size_t pos;
BYTE quant;
RFX_TILE* tile;
RFX_TILE** tmpTiles;
@@ -885,6 +884,7 @@ static BOOL rfx_process_message_tileset(RFX_CONTEXT* context, RFX_MESSAGE* messa
for (i = 0; i < message->numTiles; i++)
{
+ wStream sub;
if (!(tile = (RFX_TILE*)ObjectPool_Take(context->priv->TilePool)))
{
WLog_ERR(TAG, "RfxMessageTileSet failed to get tile from object pool");
@@ -903,11 +903,17 @@ static BOOL rfx_process_message_tileset(RFX_CONTEXT* context, RFX_MESSAGE* messa
break;
}
- Stream_Read_UINT16(s,
- blockType); /* blockType (2 bytes), must be set to CBT_TILE (0xCAC3) */
- Stream_Read_UINT32(s, blockLen); /* blockLen (4 bytes) */
+ Stream_StaticInit(&sub, Stream_Pointer(s), Stream_GetRemainingLength(s));
+ Stream_Read_UINT16(&sub,
+ blockType); /* blockType (2 bytes), must be set to CBT_TILE (0xCAC3) */
+ Stream_Read_UINT32(&sub, blockLen); /* blockLen (4 bytes) */
- if (Stream_GetRemainingLength(s) < blockLen - 6)
+ if (!Stream_SafeSeek(s, blockLen))
+ {
+ rc = FALSE;
+ break;
+ }
+ if ((blockLen < 6 + 13) || (Stream_GetRemainingLength(&sub) < blockLen - 6))
{
WLog_ERR(TAG,
"RfxMessageTileSet not enough bytes to read tile %d/%" PRIu16
@@ -917,8 +923,6 @@ static BOOL rfx_process_message_tileset(RFX_CONTEXT* context, RFX_MESSAGE* messa
break;
}
- pos = Stream_GetPosition(s) - 6 + blockLen;
-
if (blockType != CBT_TILE)
{
WLog_ERR(TAG, "unknown block type 0x%" PRIX32 ", expected CBT_TILE (0xCAC3).",
@@ -927,20 +931,32 @@ static BOOL rfx_process_message_tileset(RFX_CONTEXT* context, RFX_MESSAGE* messa
break;
}
- Stream_Read_UINT8(s, tile->quantIdxY); /* quantIdxY (1 byte) */
- Stream_Read_UINT8(s, tile->quantIdxCb); /* quantIdxCb (1 byte) */
- Stream_Read_UINT8(s, tile->quantIdxCr); /* quantIdxCr (1 byte) */
- Stream_Read_UINT16(s, tile->xIdx); /* xIdx (2 bytes) */
- Stream_Read_UINT16(s, tile->yIdx); /* yIdx (2 bytes) */
- Stream_Read_UINT16(s, tile->YLen); /* YLen (2 bytes) */
- Stream_Read_UINT16(s, tile->CbLen); /* CbLen (2 bytes) */
- Stream_Read_UINT16(s, tile->CrLen); /* CrLen (2 bytes) */
- Stream_GetPointer(s, tile->YData);
- Stream_Seek(s, tile->YLen);
- Stream_GetPointer(s, tile->CbData);
- Stream_Seek(s, tile->CbLen);
- Stream_GetPointer(s, tile->CrData);
- Stream_Seek(s, tile->CrLen);
+ Stream_Read_UINT8(&sub, tile->quantIdxY); /* quantIdxY (1 byte) */
+ Stream_Read_UINT8(&sub, tile->quantIdxCb); /* quantIdxCb (1 byte) */
+ Stream_Read_UINT8(&sub, tile->quantIdxCr); /* quantIdxCr (1 byte) */
+ Stream_Read_UINT16(&sub, tile->xIdx); /* xIdx (2 bytes) */
+ Stream_Read_UINT16(&sub, tile->yIdx); /* yIdx (2 bytes) */
+ Stream_Read_UINT16(&sub, tile->YLen); /* YLen (2 bytes) */
+ Stream_Read_UINT16(&sub, tile->CbLen); /* CbLen (2 bytes) */
+ Stream_Read_UINT16(&sub, tile->CrLen); /* CrLen (2 bytes) */
+ Stream_GetPointer(&sub, tile->YData);
+ if (!Stream_SafeSeek(&sub, tile->YLen))
+ {
+ rc = FALSE;
+ break;
+ }
+ Stream_GetPointer(&sub, tile->CbData);
+ if (!Stream_SafeSeek(&sub, tile->CbLen))
+ {
+ rc = FALSE;
+ break;
+ }
+ Stream_GetPointer(&sub, tile->CrData);
+ if (!Stream_SafeSeek(&sub, tile->CrLen))
+ {
+ rc = FALSE;
+ break;
+ }
tile->x = tile->xIdx * 64;
tile->y = tile->yIdx * 64;
@@ -971,8 +987,6 @@ static BOOL rfx_process_message_tileset(RFX_CONTEXT* context, RFX_MESSAGE* messa
{
rfx_decode_rgb(context, tile, tile->data, 64 * 4);
}
-
- Stream_SetPosition(s, pos);
}
if (context->priv->UseThreads)
diff --git a/libfreerdp/codec/xcrush.c b/libfreerdp/codec/xcrush.c
index 87a74a2a4..350801df3 100644
--- a/libfreerdp/codec/xcrush.c
+++ b/libfreerdp/codec/xcrush.c
@@ -732,13 +732,27 @@ static int xcrush_generate_output(XCRUSH_CONTEXT* xcrush, BYTE* OutputBuffer, UI
return 1;
}
-static size_t xcrush_copy_bytes(BYTE* dst, const BYTE* src, size_t num)
+static INLINE size_t xcrush_copy_bytes(BYTE* dst, const BYTE* src, size_t num)
{
- size_t index;
-
- for (index = 0; index < num; index++)
+ size_t diff, rest, end, a;
+ if (src + num < dst || src > dst + num)
+ {
+ memcpy(dst, src, num);
+ }
+ else
{
- dst[index] = src[index];
+ // src and dst overlaps
+ // we should copy the area that doesn't overlap repeatly
+ diff = (dst > src) ? dst - src : src - dst;
+ rest = num % diff;
+ end = num - rest;
+ for (a = 0; a < end; a += diff)
+ {
+ memcpy(&dst[a], &src[a], diff);
+ }
+
+ if (rest != 0)
+ memcpy(&dst[end], &src[end], rest);
}
return num;
diff --git a/libfreerdp/common/CMakeLists.txt b/libfreerdp/common/CMakeLists.txt
index fa8b81773..c0274bfe0 100644
--- a/libfreerdp/common/CMakeLists.txt
+++ b/libfreerdp/common/CMakeLists.txt
@@ -22,6 +22,7 @@ set(${MODULE_PREFIX}_SRCS
addin.c
settings.c
settings_getters.c
+ settings_str.c
assistance.c)
freerdp_module_add(${${MODULE_PREFIX}_SRCS})
diff --git a/libfreerdp/common/settings.c b/libfreerdp/common/settings.c
index 6ca65f28e..b639778b0 100644
--- a/libfreerdp/common/settings.c
+++ b/libfreerdp/common/settings.c
@@ -25,6 +25,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <errno.h>
#include <winpr/crt.h>
@@ -804,3 +805,123 @@ int freerdp_set_param_string(rdpSettings* settings, int id, const char* param)
{
return freerdp_settings_set_string(settings, (size_t)id, param) ? 0 : -1;
}
+
+static BOOL value_to_uint(const char* value, ULONGLONG* result, ULONGLONG min, ULONGLONG max)
+{
+ unsigned long long rc;
+
+ if (!value || !result)
+ return FALSE;
+
+ errno = 0;
+ rc = _strtoui64(value, NULL, 0);
+
+ if (errno != 0)
+ return FALSE;
+
+ if ((rc < min) || (rc > max))
+ return FALSE;
+
+ *result = rc;
+ return TRUE;
+}
+
+static BOOL value_to_int(const char* value, LONGLONG* result, LONGLONG min, LONGLONG max)
+{
+ long long rc;
+
+ if (!value || !result)
+ return FALSE;
+
+ errno = 0;
+ rc = _strtoi64(value, NULL, 0);
+
+ if (errno != 0)
+ return FALSE;
+
+ if ((rc < min) || (rc > max))
+ return FALSE;
+
+ *result = rc;
+ return TRUE;
+}
+
+static BOOL parsing_fail(const char* key, const char* type, const char* value)
+{
+ WLog_ERR(TAG, "Failed to parse key [%s] of type [%s]: value [%s]", key, type, value);
+ return FALSE;
+}
+
+BOOL freerdp_settings_set_value_for_name(rdpSettings* settings, const char* name, const char* value)
+{
+ ULONGLONG uval;
+ LONGLONG ival;
+ SSIZE_T index, type;
+ if (!settings || !name)
+ return FALSE;
+
+ index = freerdp_settings_get_key_for_name(name);
+ if (index < 0)
+ {
+ WLog_ERR(TAG, "Invalid settings key [%s]", name);
+ return FALSE;
+ }
+
+ type = freerdp_settings_get_type_for_key((size_t)index);
+ switch (type)
+ {
+
+ case RDP_SETTINGS_TYPE_BOOL:
+ {
+ BOOL val = _strnicmp(value, "TRUE", 5) == 0;
+ if (!val && _strnicmp(value, "FALSE", 5) != 0)
+ return parsing_fail(name, "BOOL", value);
+ return freerdp_settings_set_bool(settings, index, val);
+ }
+ case RDP_SETTINGS_TYPE_UINT16:
+ if (!value_to_uint(value, &uval, 0, UINT16_MAX))
+ return parsing_fail(name, "UINT16", value);
+ if (!freerdp_settings_set_uint16(settings, index, uval))
+ return parsing_fail(name, "UINT16", value);
+ return TRUE;
+
+ case RDP_SETTINGS_TYPE_INT16:
+ if (!value_to_int(value, &ival, INT16_MIN, INT16_MAX))
+ return parsing_fail(name, "INT16", value);
+ if (!freerdp_settings_set_int16(settings, index, ival))
+ return parsing_fail(name, "INT16", value);
+ return TRUE;
+ case RDP_SETTINGS_TYPE_UINT32:
+ if (!value_to_uint(value, &uval, 0, UINT32_MAX))
+ return parsing_fail(name, "UINT32", value);
+ if (!freerdp_settings_set_uint32(settings, index, uval))
+ return parsing_fail(name, "UINT32", value);
+ return TRUE;
+ case RDP_SETTINGS_TYPE_INT32:
+ if (!value_to_int(value, &ival, INT32_MIN, INT32_MAX))
+ return parsing_fail(name, "INT32", value);
+ if (!freerdp_settings_set_int32(settings, index, ival))
+ return parsing_fail(name, "INT32", value);
+ return TRUE;
+ case RDP_SETTINGS_TYPE_UINT64:
+ if (!value_to_uint(value, &uval, 0, UINT64_MAX))
+ return parsing_fail(name, "UINT64", value);
+ if (!freerdp_settings_set_uint64(settings, index, uval))
+ return parsing_fail(name, "UINT64", value);
+ return TRUE;
+ case RDP_SETTINGS_TYPE_INT64:
+ if (!value_to_int(value, &ival, INT64_MIN, INT64_MAX))
+ return parsing_fail(name, "INT64", value);
+ if (!freerdp_settings_set_int64(settings, index, ival))
+ return parsing_fail(name, "INT64", value);
+ return TRUE;
+
+ case RDP_SETTINGS_TYPE_STRING:
+ return freerdp_settings_set_string(settings, index, value);
+ case RDP_SETTINGS_TYPE_POINTER:
+ return parsing_fail(name, "POINTER", value);
+ default:
+ return FALSE;
+ }
+ return FALSE;
+}
diff --git a/libfreerdp/common/settings_getters.c b/libfreerdp/common/settings_getters.c
index 2938ef126..9ea65070b 100644
--- a/libfreerdp/common/settings_getters.c
+++ b/libfreerdp/common/settings_getters.c
@@ -12,128 +12,98 @@ BOOL freerdp_settings_get_bool(const rdpSettings* settings, size_t id)
switch (id)
{
- case FreeRDP_ServerMode:
- return settings->ServerMode;
-
- case FreeRDP_WaitForOutputBufferFlush:
- return settings->WaitForOutputBufferFlush;
-
- case FreeRDP_NetworkAutoDetect:
- return settings->NetworkAutoDetect;
-
- case FreeRDP_SupportAsymetricKeys:
- return settings->SupportAsymetricKeys;
-
- case FreeRDP_SupportErrorInfoPdu:
- return settings->SupportErrorInfoPdu;
+ case FreeRDP_AllowCacheWaitingList:
+ return settings->AllowCacheWaitingList;
- case FreeRDP_SupportStatusInfoPdu:
- return settings->SupportStatusInfoPdu;
+ case FreeRDP_AllowDesktopComposition:
+ return settings->AllowDesktopComposition;
- case FreeRDP_SupportMonitorLayoutPdu:
- return settings->SupportMonitorLayoutPdu;
+ case FreeRDP_AllowFontSmoothing:
+ return settings->AllowFontSmoothing;
- case FreeRDP_SupportGraphicsPipeline:
- return settings->SupportGraphicsPipeline;
+ case FreeRDP_AllowUnanouncedOrdersFromServer:
+ return settings->AllowUnanouncedOrdersFromServer;
- case FreeRDP_SupportDynamicTimeZone:
- return settings->SupportDynamicTimeZone;
+ case FreeRDP_AltSecFrameMarkerSupport:
+ return settings->AltSecFrameMarkerSupport;
- case FreeRDP_SupportHeartbeatPdu:
- return settings->SupportHeartbeatPdu;
+ case FreeRDP_AsyncChannels:
+ return settings->AsyncChannels;
- case FreeRDP_UseRdpSecurityLayer:
- return settings->UseRdpSecurityLayer;
+ case FreeRDP_AsyncInput:
+ return settings->AsyncInput;
- case FreeRDP_ConsoleSession:
- return settings->ConsoleSession;
+ case FreeRDP_AsyncUpdate:
+ return settings->AsyncUpdate;
- case FreeRDP_SpanMonitors:
- return settings->SpanMonitors;
+ case FreeRDP_AudioCapture:
+ return settings->AudioCapture;
- case FreeRDP_UseMultimon:
- return settings->UseMultimon;
+ case FreeRDP_AudioPlayback:
+ return settings->AudioPlayback;
- case FreeRDP_ForceMultimon:
- return settings->ForceMultimon;
+ case FreeRDP_Authentication:
+ return settings->Authentication;
- case FreeRDP_ListMonitors:
- return settings->ListMonitors;
+ case FreeRDP_AuthenticationOnly:
+ return settings->AuthenticationOnly;
- case FreeRDP_HasMonitorAttributes:
- return settings->HasMonitorAttributes;
+ case FreeRDP_AutoAcceptCertificate:
+ return settings->AutoAcceptCertificate;
- case FreeRDP_SupportMultitransport:
- return settings->SupportMultitransport;
+ case FreeRDP_AutoDenyCertificate:
+ return settings->AutoDenyCertificate;
case FreeRDP_AutoLogonEnabled:
return settings->AutoLogonEnabled;
- case FreeRDP_CompressionEnabled:
- return settings->CompressionEnabled;
-
- case FreeRDP_DisableCtrlAltDel:
- return settings->DisableCtrlAltDel;
-
- case FreeRDP_EnableWindowsKey:
- return settings->EnableWindowsKey;
-
- case FreeRDP_MaximizeShell:
- return settings->MaximizeShell;
-
- case FreeRDP_LogonNotify:
- return settings->LogonNotify;
-
- case FreeRDP_LogonErrors:
- return settings->LogonErrors;
-
- case FreeRDP_MouseAttached:
- return settings->MouseAttached;
+ case FreeRDP_AutoReconnectionEnabled:
+ return settings->AutoReconnectionEnabled;
- case FreeRDP_MouseHasWheel:
- return settings->MouseHasWheel;
+ case FreeRDP_BitmapCacheEnabled:
+ return settings->BitmapCacheEnabled;
- case FreeRDP_RemoteConsoleAudio:
- return settings->RemoteConsoleAudio;
+ case FreeRDP_BitmapCachePersistEnabled:
+ return settings->BitmapCachePersistEnabled;
- case FreeRDP_AudioPlayback:
- return settings->AudioPlayback;
+ case FreeRDP_BitmapCacheV3Enabled:
+ return settings->BitmapCacheV3Enabled;
- case FreeRDP_AudioCapture:
- return settings->AudioCapture;
+ case FreeRDP_BitmapCompressionDisabled:
+ return settings->BitmapCompressionDisabled;
- case FreeRDP_VideoDisable:
- return settings->VideoDisable;
+ case FreeRDP_ColorPointerFlag:
+ return settings->ColorPointerFlag;
- case FreeRDP_PasswordIsSmartcardPin:
- return settings->PasswordIsSmartcardPin;
+ case FreeRDP_CompressionEnabled:
+ return settings->CompressionEnabled;
- case FreeRDP_UsingSavedCredentials:
- return settings->UsingSavedCredentials;
+ case FreeRDP_ConsoleSession:
+ return settings->ConsoleSession;
- case FreeRDP_ForceEncryptedCsPdu:
- return settings->ForceEncryptedCsPdu;
+ case FreeRDP_CredentialsFromStdin:
+ return settings->CredentialsFromStdin;
- case FreeRDP_HiDefRemoteApp:
- return settings->HiDefRemoteApp;
+ case FreeRDP_Decorations:
+ return settings->Decorations;
- case FreeRDP_IPv6Enabled:
- return settings->IPv6Enabled;
+ case FreeRDP_DesktopResize:
+ return settings->DesktopResize;
- case FreeRDP_AutoReconnectionEnabled:
- return settings->AutoReconnectionEnabled;
+ case FreeRDP_DeviceRedirection:
+ return settings->DeviceRedirection;
- case FreeRDP_PrintReconnectCookie:
- return settings->PrintReconnectCookie;
+ case FreeRDP_DisableCredentialsDelegation:
+ return settings->DisableCredentialsDelegation;
- case FreeRDP_DynamicDaylightTimeDisabled:
- return settings->DynamicDaylightTimeDisabled;
+ case FreeRDP_DisableCtrlAltDel:
+ return settings->DisableCtrlAltDel;
- case FreeRDP_AllowFontSmoothing:
- return settings->AllowFontSmoothing;
+ case FreeRDP_DisableCursorBlinking:
+ return settings->DisableCursorBlinking;
- case FreeRDP_DisableWallpaper:
- return settings->DisableWallpaper;
+ case FreeRDP_DisableCursorShadow:
+ return settings->DisableCursorShadow;
case FreeRDP_DisableFullWindowDrag:
return settings->DisableFullWindowDrag;
@@ -141,266 +111,272 @@ BOOL freerdp_settings_get_bool(const rdpSettings* settings, size_t id)
case FreeRDP_DisableMenuAnims:
return settings->DisableMenuAnims;
+ case FreeRDP_DisableRemoteAppCapsCheck:
+ return settings->DisableRemoteAppCapsCheck;
+
case FreeRDP_DisableThemes:
return settings->DisableThemes;
- case FreeRDP_DisableCursorShadow:
- return settings->DisableCursorShadow;
+ case FreeRDP_DisableWallpaper:
+ return settings->DisableWallpaper;
- case FreeRDP_DisableCursorBlinking:
- return settings->DisableCursorBlinking;
+ case FreeRDP_DrawAllowColorSubsampling:
+ return settings->DrawAllowColorSubsampling;
- case FreeRDP_AllowDesktopComposition:
- return settings->AllowDesktopComposition;
+ case FreeRDP_DrawAllowDynamicColorFidelity:
+ return settings->DrawAllowDynamicColorFidelity;
- case FreeRDP_RemoteAssistanceMode:
- return settings->RemoteAssistanceMode;
+ case FreeRDP_DrawAllowSkipAlpha:
+ return settings->DrawAllowSkipAlpha;
- case FreeRDP_EncomspVirtualChannel:
- return settings->EncomspVirtualChannel;
+ case FreeRDP_DrawGdiPlusCacheEnabled:
+ return settings->DrawGdiPlusCacheEnabled;
- case FreeRDP_RemdeskVirtualChannel:
- return settings->RemdeskVirtualChannel;
+ case FreeRDP_DrawGdiPlusEnabled:
+ return settings->DrawGdiPlusEnabled;
- case FreeRDP_LyncRdpMode:
- return settings->LyncRdpMode;
+ case FreeRDP_DrawNineGridEnabled:
+ return settings->DrawNineGridEnabled;
- case FreeRDP_RemoteAssistanceRequestControl:
- return settings->RemoteAssistanceRequestControl;
+ case FreeRDP_DumpRemoteFx:
+ return settings->DumpRemoteFx;
- case FreeRDP_TlsSecurity:
- return settings->TlsSecurity;
+ case FreeRDP_DynamicDaylightTimeDisabled:
+ return settings->DynamicDaylightTimeDisabled;
- case FreeRDP_NlaSecurity:
- return settings->NlaSecurity;
+ case FreeRDP_DynamicResolutionUpdate:
+ return settings->DynamicResolutionUpdate;
- case FreeRDP_RdpSecurity:
- return settings->RdpSecurity;
+ case FreeRDP_EmbeddedWindow:
+ return settings->EmbeddedWindow;
+
+ case FreeRDP_EnableWindowsKey:
+ return settings->EnableWindowsKey;
+
+ case FreeRDP_EncomspVirtualChannel:
+ return settings->EncomspVirtualChannel;
case FreeRDP_ExtSecurity:
return settings->ExtSecurity;
- case FreeRDP_Authentication:
- return settings->Authentication;
-
- case FreeRDP_NegotiateSecurityLayer:
- return settings->NegotiateSecurityLayer;
+ case FreeRDP_ExternalCertificateManagement:
+ return settings->ExternalCertificateManagement;
- case FreeRDP_RestrictedAdminModeRequired:
- return settings->RestrictedAdminModeRequired;
+ case FreeRDP_FIPSMode:
+ return settings->FIPSMode;
- case FreeRDP_DisableCredentialsDelegation:
- return settings->DisableCredentialsDelegation;
+ case FreeRDP_FastPathInput:
+ return settings->FastPathInput;
- case FreeRDP_VmConnectMode:
- return settings->VmConnectMode;
+ case FreeRDP_FastPathOutput:
+ return settings->FastPathOutput;
- case FreeRDP_FIPSMode:
- return settings->FIPSMode;
+ case FreeRDP_ForceEncryptedCsPdu:
+ return settings->ForceEncryptedCsPdu;
- case FreeRDP_MstscCookieMode:
- return settings->MstscCookieMode;
+ case FreeRDP_ForceMultimon:
+ return settings->ForceMultimon;
- case FreeRDP_SendPreconnectionPdu:
- return settings->SendPreconnectionPdu;
+ case FreeRDP_FrameMarkerCommandEnabled:
+ return settings->FrameMarkerCommandEnabled;
- case FreeRDP_SmartcardLogon:
- return settings->SmartcardLogon;
+ case FreeRDP_Fullscreen:
+ return settings->Fullscreen;
- case FreeRDP_PromptForCredentials:
- return settings->PromptForCredentials;
+ case FreeRDP_GatewayBypassLocal:
+ return settings->GatewayBypassLocal;
- case FreeRDP_IgnoreCertificate:
- return settings->IgnoreCertificate;
+ case FreeRDP_GatewayEnabled:
+ return settings->GatewayEnabled;
- case FreeRDP_ExternalCertificateManagement:
- return settings->ExternalCertificateManagement;
+ case FreeRDP_GatewayHttpTransport:
+ return settings->GatewayHttpTransport;
- case FreeRDP_AutoAcceptCertificate:
- return settings->AutoAcceptCertificate;
+ case FreeRDP_GatewayRpcTransport:
+ return settings->GatewayRpcTransport;
- case FreeRDP_AutoDenyCertificate:
- return settings->AutoDenyCertificate;
+ case FreeRDP_GatewayUdpTransport:
+ return settings->GatewayUdpTransport;
- case FreeRDP_Workarea:
- return settings->Workarea;
+ case FreeRDP_GatewayUseSameCredentials:
+ return settings->GatewayUseSameCredentials;
- case FreeRDP_Fullscreen:
- return settings->Fullscreen;
+ case FreeRDP_GfxAVC444:
+ return settings->GfxAVC444;
- case FreeRDP_GrabKeyboard:
- return settings->GrabKeyboard;
+ case FreeRDP_GfxAVC444v2:
+ return settings->GfxAVC444v2;
- case FreeRDP_Decorations:
- return settings->Decorations;
+ case FreeRDP_GfxH264:
+ return settings->GfxH264;
- case FreeRDP_MouseMotion:
- return settings->MouseMotion;
+ case FreeRDP_GfxProgressive:
+ return settings->GfxProgressive;
- case FreeRDP_AsyncInput:
- return settings->AsyncInput;
+ case FreeRDP_GfxProgressiveV2:
+ return settings->GfxProgressiveV2;
- case FreeRDP_AsyncUpdate:
- return settings->AsyncUpdate;
+ case FreeRDP_GfxSendQoeAck:
+ return settings->GfxSendQoeAck;
- case FreeRDP_AsyncChannels:
- return settings->AsyncChannels;
+ case FreeRDP_GfxSmallCache:
+ return settings->GfxSmallCache;
- case FreeRDP_ToggleFullscreen:
- return settings->ToggleFullscreen;
+ case FreeRDP_GfxThinClient:
+ return settings->GfxThinClient;
- case FreeRDP_EmbeddedWindow:
- return settings->EmbeddedWindow;
+ case FreeRDP_GrabKeyboard:
+ return settings->GrabKeyboard;
- case FreeRDP_SmartSizing:
- return settings->SmartSizing;
+ case FreeRDP_HasExtendedMouseEvent:
+ return settings->HasExtendedMouseEvent;
- case FreeRDP_PercentScreenUseWidth:
- return settings->PercentScreenUseWidth;
+ case FreeRDP_HasHorizontalWheel:
+ return settings->HasHorizontalWheel;
- case FreeRDP_PercentScreenUseHeight:
- return settings->PercentScreenUseHeight;
+ case FreeRDP_HasMonitorAttributes:
+ return settings->HasMonitorAttributes;
- case FreeRDP_DynamicResolutionUpdate:
- return settings->DynamicResolutionUpdate;
+ case FreeRDP_HiDefRemoteApp:
+ return settings->HiDefRemoteApp;
- case FreeRDP_SoftwareGdi:
- return settings->SoftwareGdi;
+ case FreeRDP_IPv6Enabled:
+ return settings->IPv6Enabled;
- case FreeRDP_LocalConnection:
- return settings->LocalConnection;
+ case FreeRDP_IgnoreCertificate:
+ return settings->IgnoreCertificate;
- case FreeRDP_AuthenticationOnly:
- return settings->AuthenticationOnly;
+ case FreeRDP_JpegCodec:
+ return settings->JpegCodec;
- case FreeRDP_CredentialsFromStdin:
- return settings->CredentialsFromStdin;
+ case FreeRDP_ListMonitors:
+ return settings->ListMonitors;
- case FreeRDP_UnmapButtons:
- return settings->UnmapButtons;
+ case FreeRDP_LocalConnection:
+ return settings->LocalConnection;
- case FreeRDP_OldLicenseBehaviour:
- return settings->OldLicenseBehaviour;
+ case FreeRDP_LogonErrors:
+ return settings->LogonErrors;
- case FreeRDP_DumpRemoteFx:
- return settings->DumpRemoteFx;
+ case FreeRDP_LogonNotify:
+ return settings->LogonNotify;
- case FreeRDP_PlayRemoteFx:
- return settings->PlayRemoteFx;
+ case FreeRDP_LongCredentialsSupported:
+ return settings->LongCredentialsSupported;
- case FreeRDP_GatewayUseSameCredentials:
- return settings->GatewayUseSameCredentials;
+ case FreeRDP_LyncRdpMode:
+ return settings->LyncRdpMode;
- case FreeRDP_GatewayEnabled:
- return settings->GatewayEnabled;
+ case FreeRDP_MaximizeShell:
+ return settings->MaximizeShell;
- case FreeRDP_GatewayBypassLocal:
- return settings->GatewayBypassLocal;
+ case FreeRDP_MouseAttached:
+ return settings->MouseAttached;
- case FreeRDP_GatewayRpcTransport:
- return settings->GatewayRpcTransport;
+ case FreeRDP_MouseHasWheel:
+ return settings->MouseHasWheel;
- case FreeRDP_GatewayHttpTransport:
- return settings->GatewayHttpTransport;
+ case FreeRDP_MouseMotion:
+ return settings->MouseMotion;
- case FreeRDP_GatewayUdpTransport:
- return settings->GatewayUdpTransport;
+ case FreeRDP_MstscCookieMode:
+ return settings->MstscCookieMode;
- case FreeRDP_RemoteApplicationMode:
- return settings->RemoteApplicationMode;
+ case FreeRDP_MultiTouchGestures:
+ return settings->MultiTouchGestures;
- case FreeRDP_DisableRemoteAppCapsCheck:
- return settings->DisableRemoteAppCapsCheck;
+ case FreeRDP_MultiTouchInput:
+ return settings->MultiTouchInput;
- case FreeRDP_RemoteAppLanguageBarSupported:
- return settings->RemoteAppLanguageBarSupported;
+ case FreeRDP_NSCodec:
+ return settings->NSCodec;
- case FreeRDP_RefreshRect:
- return settings->RefreshRect;
+ case FreeRDP_NSCodecAllowDynamicColorFidelity:
+ return settings->NSCodecAllowDynamicColorFidelity;
- case FreeRDP_SuppressOutput:
- return settings->SuppressOutput;
+ case FreeRDP_NSCodecAllowSubsampling:
+ return settings->NSCodecAllowSubsampling;
- case FreeRDP_FastPathOutput:
- return settings->FastPathOutput;
+ case FreeRDP_NegotiateSecurityLayer:
+ return settings->NegotiateSecurityLayer;
- case FreeRDP_SaltedChecksum:
- return settings->SaltedChecksum;
+ case FreeRDP_NetworkAutoDetect:
+ return settings->NetworkAutoDetect;
- case FreeRDP_LongCredentialsSupported:
- return settings->LongCredentialsSupported;
+ case FreeRDP_NlaSecurity:
+ return settings->NlaSecurity;
case FreeRDP_NoBitmapCompressionHeader:
return settings->NoBitmapCompressionHeader;
- case FreeRDP_BitmapCompressionDisabled:
- return settings->BitmapCompressionDisabled;
+ case FreeRDP_OldLicenseBehaviour:
+ return settings->OldLicenseBehaviour;
- case FreeRDP_DesktopResize:
- return settings->DesktopResize;
+ case FreeRDP_PasswordIsSmartcardPin:
+ return settings->PasswordIsSmartcardPin;
- case FreeRDP_DrawAllowDynamicColorFidelity:
- return settings->DrawAllowDynamicColorFidelity;
+ case FreeRDP_PercentScreenUseHeight:
+ return settings->PercentScreenUseHeight;
- case FreeRDP_DrawAllowColorSubsampling:
- return settings->DrawAllowColorSubsampling;
+ case FreeRDP_PercentScreenUseWidth:
+ return settings->PercentScreenUseWidth;
- case FreeRDP_DrawAllowSkipAlpha:
- return settings->DrawAllowSkipAlpha;
+ case FreeRDP_PlayRemoteFx:
+ return settings->PlayRemoteFx;
- case FreeRDP_BitmapCacheV3Enabled:
- return settings->BitmapCacheV3Enabled;
+ case FreeRDP_PreferIPv6OverIPv4:
+ return settings->PreferIPv6OverIPv4;
- case FreeRDP_AltSecFrameMarkerSupport:
- return settings->AltSecFrameMarkerSupport;
+ case FreeRDP_PrintReconnectCookie:
+ return settings->PrintReconnectCookie;
- case FreeRDP_AllowUnanouncedOrdersFromServer:
- return settings->AllowUnanouncedOrdersFromServer;
+ case FreeRDP_PromptForCredentials:
+ return settings->PromptForCredentials;
- case FreeRDP_BitmapCacheEnabled:
- return settings->BitmapCacheEnabled;
+ case FreeRDP_RdpSecurity:
+ return settings->RdpSecurity;
- case FreeRDP_AllowCacheWaitingList:
- return settings->AllowCacheWaitingList;
+ case FreeRDP_RedirectClipboard:
+ return settings->RedirectClipboard;
- case FreeRDP_BitmapCachePersistEnabled:
- return settings->BitmapCachePersistEnabled;
+ case FreeRDP_RedirectDrives:
+ return settings->RedirectDrives;
- case FreeRDP_ColorPointerFlag:
- return settings->ColorPointerFlag;
+ case FreeRDP_RedirectHomeDrive:
+ return settings->RedirectHomeDrive;
- case FreeRDP_UnicodeInput:
- return settings->UnicodeInput;
+ case FreeRDP_RedirectParallelPorts:
+ return settings->RedirectParallelPorts;
- case FreeRDP_FastPathInput:
- return settings->FastPathInput;
+ case FreeRDP_RedirectPrinters:
+ return settings->RedirectPrinters;
- case FreeRDP_MultiTouchInput:
- return settings->MultiTouchInput;
+ case FreeRDP_RedirectSerialPorts:
+ return settings->RedirectSerialPorts;
- case FreeRDP_MultiTouchGestures:
- return settings->MultiTouchGestures;
+ case FreeRDP_RedirectSmartCards:
+ return settings->RedirectSmartCards;
- case FreeRDP_HasHorizontalWheel:
- return settings->HasHorizontalWheel;
+ case FreeRDP_RefreshRect:
+ return settings->RefreshRect;
- case FreeRDP_HasExtendedMouseEvent:
- return settings->HasExtendedMouseEvent;
+ case FreeRDP_RemdeskVirtualChannel:
+ return settings->RemdeskVirtualChannel;
- case FreeRDP_SoundBeepsEnabled:
- return settings->SoundBeepsEnabled;
+ case FreeRDP_RemoteAppLanguageBarSupported:
+ return settings->RemoteAppLanguageBarSupported;
- case FreeRDP_SurfaceCommandsEnabled:
- return settings->SurfaceCommandsEnabled;
+ case FreeRDP_RemoteApplicationMode:
+ return settings->RemoteApplicationMode;
- case FreeRDP_FrameMarkerCommandEnabled:
- return settings->FrameMarkerCommandEnabled;
+ case FreeRDP_RemoteAssistanceMode:
+ return settings->RemoteAssistanceMode;
- case FreeRDP_SurfaceFrameMarkerEnabled:
- return settings->SurfaceFrameMarkerEnabled;
+ case FreeRDP_RemoteAssistanceRequestControl:
+ return settings->RemoteAssistanceRequestControl;
- case FreeRDP_RemoteFxOnly:
- return settings->RemoteFxOnly;
+ case FreeRDP_RemoteConsoleAudio:
+ return settings->RemoteConsoleAudio;
case FreeRDP_RemoteFxCodec:
return settings->RemoteFxCodec;
@@ -408,99 +384,123 @@ BOOL freerdp_settings_get_bool(const rdpSettings* settings, size_t id)
case FreeRDP_RemoteFxImageCodec:
return settings->RemoteFxImageCodec;
- case FreeRDP_NSCodec:
- return settings->NSCodec;
-
- case FreeRDP_NSCodecAllowSubsampling:
- return settings->NSCodecAllowSubsampling;
-
- case FreeRDP_NSCodecAllowDynamicColorFidelity:
- return settings->NSCodecAllowDynamicColorFidelity;
-
- case FreeRDP_JpegCodec:
- return settings->JpegCodec;
-
- case FreeRDP_GfxThinClient:
- return settings->GfxThinClient;
-
- case FreeRDP_GfxSmallCache:
- return settings->GfxSmallCache;
-
- case FreeRDP_GfxProgressive:
- return settings->GfxProgressive;
-
- case FreeRDP_GfxProgressiveV2:
- return settings->GfxProgressiveV2;
-
- case FreeRDP_GfxH264:
- return settings->GfxH264;
-
- case FreeRDP_GfxAVC444:
- return settings->GfxAVC444;
-
- case FreeRDP_GfxSendQoeAck:
- return settings->GfxSendQoeAck;
-
- case FreeRDP_GfxAVC444v2:
- return settings->GfxAVC444v2;
-
- case FreeRDP_DrawNineGridEnabled:
- return settings->DrawNineGridEnabled;
+ case FreeRDP_RemoteFxOnly:
+ return settings->RemoteFxOnly;
- case FreeRDP_DrawGdiPlusEnabled:
- return settings->DrawGdiPlusEnabled;
+ case FreeRDP_RestrictedAdminModeRequired:
+ return settings->RestrictedAdminModeRequired;
- case FreeRDP_DrawGdiPlusCacheEnabled:
- return settings->DrawGdiPlusCacheEnabled;
+ case FreeRDP_SaltedChecksum:
+ return settings->SaltedChecksum;
- case FreeRDP_DeviceRedirection:
- return settings->DeviceRedirection;
+ case FreeRDP_SendPreconnectionPdu:
+ return settings->SendPreconnectionPdu;
- case FreeRDP_RedirectDrives:
- return settings->RedirectDrives;
+ case FreeRDP_ServerMode:
+ return settings->ServerMode;
- case FreeRDP_RedirectHomeDrive:
- return settings->RedirectHomeDrive;
+ case FreeRDP_SmartSizing:
+ return settings->SmartSizing;
- case FreeRDP_RedirectSmartCards:
- return settings->RedirectSmartCards;
+ case FreeRDP_SmartcardLogon:
+ return settings->SmartcardLogon;
- case FreeRDP_RedirectPrinters:
- return settings->RedirectPrinters;
+ case FreeRDP_SoftwareGdi:
+ return settings->SoftwareGdi;
- case FreeRDP_RedirectSerialPorts:
- return settings->RedirectSerialPorts;
+ case FreeRDP_SoundBeepsEnabled:
+ return settings->SoundBeepsEnabled;
- case FreeRDP_RedirectParallelPorts:
- return settings->RedirectParallelPorts;
+ case FreeRDP_SpanMonitors:
+ return settings->SpanMonitors;
- case FreeRDP_PreferIPv6OverIPv4:
- return settings->PreferIPv6OverIPv4;
+ case FreeRDP_SupportAsymetricKeys:
+ return settings->SupportAsymetricKeys;
- case FreeRDP_RedirectClipboard:
- return settings->RedirectClipboard;
+ case FreeRDP_SupportDisplayControl:
+ return settings->SupportDisplayControl;
case FreeRDP_SupportDynamicChannels:
return settings->SupportDynamicChannels;
+ case FreeRDP_SupportDynamicTimeZone:
+ return settings->SupportDynamicTimeZone;
+
case FreeRDP_SupportEchoChannel:
return settings->SupportEchoChannel;
- case FreeRDP_SupportDisplayControl:
- return settings->SupportDisplayControl;
+ case FreeRDP_SupportErrorInfoPdu:
+ return settings->SupportErrorInfoPdu;
case FreeRDP_SupportGeometryTracking:
return settings->SupportGeometryTracking;
+ case FreeRDP_SupportGraphicsPipeline:
+ return settings->SupportGraphicsPipeline;
+
+ case FreeRDP_SupportHeartbeatPdu:
+ return settings->SupportHeartbeatPdu;
+
+ case FreeRDP_SupportMonitorLayoutPdu:
+ return settings->SupportMonitorLayoutPdu;
+
+ case FreeRDP_SupportMultitransport:
+ return settings->SupportMultitransport;
+
case FreeRDP_SupportSSHAgentChannel:
return settings->SupportSSHAgentChannel;
+ case FreeRDP_SupportStatusInfoPdu:
+ return settings->SupportStatusInfoPdu;
+
case FreeRDP_SupportVideoOptimized:
return settings->SupportVideoOptimized;
+ case FreeRDP_SuppressOutput:
+ return settings->SuppressOutput;
+
+ case FreeRDP_SurfaceCommandsEnabled:
+ return settings->SurfaceCommandsEnabled;
+
+ case FreeRDP_SurfaceFrameMarkerEnabled:
+ return settings->SurfaceFrameMarkerEnabled;
+
case FreeRDP_TcpKeepAlive:
return settings->TcpKeepAlive;
+ case FreeRDP_TlsSecurity:
+ return settings->TlsSecurity;
+
+ case FreeRDP_ToggleFullscreen:
+ return settings->ToggleFullscreen;
+
+ case FreeRDP_UnicodeInput:
+ return settings->UnicodeInput;
+
+ case FreeRDP_UnmapButtons:
+ return settings->UnmapButtons;
+
+ case FreeRDP_UseMultimon:
+ return settings->UseMultimon;
+
+ case FreeRDP_UseRdpSecurityLayer:
+ return settings->UseRdpSecurityLayer;
+
+ case FreeRDP_UsingSavedCredentials:
+ return settings->UsingSavedCredentials;
+
+ case FreeRDP_VideoDisable:
+ return settings->VideoDisable;
+
+ case FreeRDP_VmConnectMode:
+ return settings->VmConnectMode;
+
+ case FreeRDP_WaitForOutputBufferFlush:
+ return settings->WaitForOutputBufferFlush;
+
+ case FreeRDP_Workarea:
+ return settings->Workarea;
+
default:
WLog_ERR(TAG, "[%s] Invalid key index %" PRIuz, __FUNCTION__, id);
return FALSE;
@@ -514,656 +514,656 @@ BOOL freerdp_settings_set_bool(rdpSettings* settings, size_t id, BOOL val)
switch (id)
{
- case FreeRDP_ServerMode:
- settings->ServerMode = val;
- break;
-
- case FreeRDP_WaitForOutputBufferFlush:
- settings->WaitForOutputBufferFlush = val;
+ case FreeRDP_AllowCacheWaitingList:
+ settings->AllowCacheWaitingList = val;
break;
- case FreeRDP_NetworkAutoDetect:
- settings->NetworkAutoDetect = val;
+ case FreeRDP_AllowDesktopComposition:
+ settings->AllowDesktopComposition = val;
break;
- case FreeRDP_SupportAsymetricKeys:
- settings->SupportAsymetricKeys = val;
+ case FreeRDP_AllowFontSmoothing:
+ settings->AllowFontSmoothing = val;
break;
- case FreeRDP_SupportErrorInfoPdu:
- settings->SupportErrorInfoPdu = val;
+ case FreeRDP_AllowUnanouncedOrdersFromServer:
+ settings->AllowUnanouncedOrdersFromServer = val;
break;
- case FreeRDP_SupportStatusInfoPdu:
- settings->SupportStatusInfoPdu = val;
+ case FreeRDP_AltSecFrameMarkerSupport:
+ settings->AltSecFrameMarkerSupport = val;
break;
- case FreeRDP_SupportMonitorLayoutPdu:
- settings->SupportMonitorLayoutPdu = val;
+ case FreeRDP_AsyncChannels:
+ settings->AsyncChannels = val;
break;
- case FreeRDP_SupportGraphicsPipeline:
- settings->SupportGraphicsPipeline = val;
+ case FreeRDP_AsyncInput:
+ settings->AsyncInput = val;
break;
- case FreeRDP_SupportDynamicTimeZone:
- settings->SupportDynamicTimeZone = val;
+ case FreeRDP_AsyncUpdate:
+ settings->AsyncUpdate = val;
break;
- case FreeRDP_SupportHeartbeatPdu:
- settings->SupportHeartbeatPdu = val;
+ case FreeRDP_AudioCapture:
+ settings->AudioCapture = val;
break;
- case FreeRDP_UseRdpSecurityLayer:
- settings->UseRdpSecurityLayer = val;
+ case FreeRDP_AudioPlayback:
+ settings->AudioPlayback = val;
break;
- case FreeRDP_ConsoleSession:
- settings->ConsoleSession = val;
+ case FreeRDP_Authentication:
+ settings->Authentication = val;
break;
- case FreeRDP_SpanMonitors:
- settings->SpanMonitors = val;
+ case FreeRDP_AuthenticationOnly:
+ settings->AuthenticationOnly = val;
break;
- case FreeRDP_UseMultimon:
- settings->UseMultimon = val;
+ case FreeRDP_AutoAcceptCertificate:
+ settings->AutoAcceptCertificate = val;
break;
- case FreeRDP_ForceMultimon:
- settings->ForceMultimon = val;
+ case FreeRDP_AutoDenyCertificate:
+ settings->AutoDenyCertificate = val;
break;
- case FreeRDP_ListMonitors:
- settings->ListMonitors = val;
+ case FreeRDP_AutoLogonEnabled:
+ settings->AutoLogonEnabled = val;
break;
- case FreeRDP_HasMonitorAttributes:
- settings->HasMonitorAttributes = val;
+ case FreeRDP_AutoReconnectionEnabled:
+ settings->AutoReconnectionEnabled = val;
break;
- case FreeRDP_SupportMultitransport:
- settings->SupportMultitransport = val;
+ case FreeRDP_BitmapCacheEnabled:
+ settings->BitmapCacheEnabled = val;
break;
- case FreeRDP_AutoLogonEnabled:
- settings->AutoLogonEnabled = val;
+ case FreeRDP_BitmapCachePersistEnabled:
+ settings->BitmapCachePersistEnabled = val;
break;
- case FreeRDP_CompressionEnabled:
- settings->CompressionEnabled = val;
+ case FreeRDP_BitmapCacheV3Enabled:
+ settings->BitmapCacheV3Enabled = val;
break;
- case FreeRDP_DisableCtrlAltDel:
- settings->DisableCtrlAltDel = val;
+ case FreeRDP_BitmapCompressionDisabled:
+ settings->BitmapCompressionDisabled = val;
break;
- case FreeRDP_EnableWindowsKey:
- settings->EnableWindowsKey = val;
+ case FreeRDP_ColorPointerFlag:
+ settings->ColorPointerFlag = val;
break;
- case FreeRDP_MaximizeShell:
- settings->MaximizeShell = val;
+ case FreeRDP_CompressionEnabled:
+ settings->CompressionEnabled = val;
break;
- case FreeRDP_LogonNotify:
- settings->LogonNotify = val;
+ case FreeRDP_ConsoleSession:
+ settings->ConsoleSession = val;
break;
- case FreeRDP_LogonErrors:
- settings->LogonErrors = val;
+ case FreeRDP_CredentialsFromStdin:
+ settings->CredentialsFromStdin = val;
break;
- case FreeRDP_MouseAttached:
- settings->MouseAttached = val;
+ case FreeRDP_Decorations:
+ settings->Decorations = val;
break;
- case FreeRDP_MouseHasWheel:
- settings->MouseHasWheel = val;
+ case FreeRDP_DesktopResize:
+ settings->DesktopResize = val;
break;
- case FreeRDP_RemoteConsoleAudio:
- settings->RemoteConsoleAudio = val;
+ case FreeRDP_DeviceRedirection:
+ settings->DeviceRedirection = val;
break;
- case FreeRDP_AudioPlayback:
- settings->AudioPlayback = val;
+ case FreeRDP_DisableCredentialsDelegation:
+ settings->DisableCredentialsDelegation = val;
break;
- case FreeRDP_AudioCapture:
- settings->AudioCapture = val;
+ case FreeRDP_DisableCtrlAltDel:
+ settings->DisableCtrlAltDel = val;
break;
- case FreeRDP_VideoDisable:
- settings->VideoDisable = val;
+ case FreeRDP_DisableCursorBlinking:
+ settings->DisableCursorBlinking = val;
break;
- case FreeRDP_PasswordIsSmartcardPin:
- settings->PasswordIsSmartcardPin = val;
+ case FreeRDP_DisableCursorShadow:
+ settings->DisableCursorShadow = val;
break;
- case FreeRDP_UsingSavedCredentials:
- settings->UsingSavedCredentials = val;
+ case FreeRDP_DisableFullWindowDrag:
+ settings->DisableFullWindowDrag = val;
break;
- case FreeRDP_ForceEncryptedCsPdu:
- settings->ForceEncryptedCsPdu = val;
+ case FreeRDP_DisableMenuAnims:
+ settings->DisableMenuAnims = val;
break;
- case FreeRDP_HiDefRemoteApp:
- settings->HiDefRemoteApp = val;
+ case FreeRDP_DisableRemoteAppCapsCheck:
+ settings->DisableRemoteAppCapsCheck = val;
break;
- case FreeRDP_IPv6Enabled:
- settings->IPv6Enabled = val;
+ case FreeRDP_DisableThemes:
+ settings->DisableThemes = val;
break;
- case FreeRDP_AutoReconnectionEnabled:
- settings->AutoReconnectionEnabled = val;
+ case FreeRDP_DisableWallpaper:
+ settings->DisableWallpaper = val;
break;
- case FreeRDP_PrintReconnectCookie:
- settings->PrintReconnectCookie = val;
+ case FreeRDP_DrawAllowColorSubsampling:
+ settings->DrawAllowColorSubsampling = val;
break;
- case FreeRDP_DynamicDaylightTimeDisabled:
- settings->DynamicDaylightTimeDisabled = val;
+ case FreeRDP_DrawAllowDynamicColorFidelity:
+ settings->DrawAllowDynamicColorFidelity = val;
break;
- case FreeRDP_AllowFontSmoothing:
- settings->AllowFontSmoothing = val;
+ case FreeRDP_DrawAllowSkipAlpha:
+ settings->DrawAllowSkipAlpha = val;
break;
- case FreeRDP_DisableWallpaper:
- settings->DisableWallpaper = val;
+ case FreeRDP_DrawGdiPlusCacheEnabled:
+ settings->DrawGdiPlusCacheEnabled = val;
break;
- case FreeRDP_DisableFullWindowDrag:
- settings->DisableFullWindowDrag = val;
+ case FreeRDP_DrawGdiPlusEnabled:
+ settings->DrawGdiPlusEnabled = val;
break;
- case FreeRDP_DisableMenuAnims:
- settings->DisableMenuAnims = val;
+ case FreeRDP_DrawNineGridEnabled:
+ settings->DrawNineGridEnabled = val;
break;
- case FreeRDP_DisableThemes:
- settings->DisableThemes = val;
+ case FreeRDP_DumpRemoteFx:
+ settings->DumpRemoteFx = val;
break;
- case FreeRDP_DisableCursorShadow:
- settings->DisableCursorShadow = val;
+ case FreeRDP_DynamicDaylightTimeDisabled:
+ settings->DynamicDaylightTimeDisabled = val;
break;
- case FreeRDP_DisableCursorBlinking:
- settings->DisableCursorBlinking = val;
+ case FreeRDP_DynamicResolutionUpdate:
+ settings->DynamicResolutionUpdate = val;
break;
- case FreeRDP_AllowDesktopComposition:
- settings->AllowDesktopComposition = val;
+ case FreeRDP_EmbeddedWindow:
+ settings->EmbeddedWindow = val;
break;
- case FreeRDP_RemoteAssistanceMode:
- settings->RemoteAssistanceMode = val;
+ case FreeRDP_EnableWindowsKey:
+ settings->EnableWindowsKey = val;
break;
case FreeRDP_EncomspVirtualChannel:
settings->EncomspVirtualChannel = val;
break;
- case FreeRDP_RemdeskVirtualChannel:
- settings->RemdeskVirtualChannel = val;
+ case FreeRDP_ExtSecurity:
+ settings->ExtSecurity = val;
break;
- case FreeRDP_LyncRdpMode:
- settings->LyncRdpMode = val;
+ case FreeRDP_ExternalCertificateManagement:
+ settings->ExternalCertificateManagement = val;
break;
- case FreeRDP_RemoteAssistanceRequestControl:
- settings->RemoteAssistanceRequestControl = val;
+ case FreeRDP_FIPSMode:
+ settings->FIPSMode = val;
break;
- case FreeRDP_TlsSecurity:
- settings->TlsSecurity = val;
+ case FreeRDP_FastPathInput:
+ settings->FastPathInput = val;
break;
- case FreeRDP_NlaSecurity:
- settings->NlaSecurity = val;
+ case FreeRDP_FastPathOutput:
+ settings->FastPathOutput = val;
break;
- case FreeRDP_RdpSecurity:
- settings->RdpSecurity = val;
+ case FreeRDP_ForceEncryptedCsPdu:
+ settings->ForceEncryptedCsPdu = val;
break;
- case FreeRDP_ExtSecurity:
- settings->ExtSecurity = val;
+ case FreeRDP_ForceMultimon:
+ settings->ForceMultimon = val;
break;
- case FreeRDP_Authentication:
- settings->Authentication = val;
+ case FreeRDP_FrameMarkerCommandEnabled:
+ settings->FrameMarkerCommandEnabled = val;
break;
- case FreeRDP_NegotiateSecurityLayer:
- settings->NegotiateSecurityLayer = val;
+ case FreeRDP_Fullscreen:
+ settings->Fullscreen = val;
break;
- case FreeRDP_RestrictedAdminModeRequired:
- settings->RestrictedAdminModeRequired = val;
+ case FreeRDP_GatewayBypassLocal:
+ settings->GatewayBypassLocal = val;
break;
- case FreeRDP_DisableCredentialsDelegation:
- settings->DisableCredentialsDelegation = val;
+ case FreeRDP_GatewayEnabled:
+ settings->GatewayEnabled = val;
break;
- case FreeRDP_VmConnectMode:
- settings->VmConnectMode = val;
+ case FreeRDP_GatewayHttpTransport:
+ settings->GatewayHttpTransport = val;
break;
- case FreeRDP_FIPSMode:
- settings->FIPSMode = val;
+ case FreeRDP_GatewayRpcTransport:
+ settings->GatewayRpcTransport = val;
break;
- case FreeRDP_MstscCookieMode:
- settings->MstscCookieMode = val;
+ case FreeRDP_GatewayUdpTransport:
+ settings->GatewayUdpTransport = val;
break;
- case FreeRDP_SendPreconnectionPdu:
- settings->SendPreconnectionPdu = val;
+ case FreeRDP_GatewayUseSameCredentials:
+ settings->GatewayUseSameCredentials = val;
break;
- case FreeRDP_SmartcardLogon:
- settings->SmartcardLogon = val;
+ case FreeRDP_GfxAVC444:
+ settings->GfxAVC444 = val;
break;
- case FreeRDP_PromptForCredentials:
- settings->PromptForCredentials = val;
+ case FreeRDP_GfxAVC444v2:
+ settings->GfxAVC444v2 = val;
break;
- case FreeRDP_IgnoreCertificate:
- settings->IgnoreCertificate = val;
+ case FreeRDP_GfxH264:
+ settings->GfxH264 = val;
break;
- case FreeRDP_ExternalCertificateManagement:
- settings->ExternalCertificateManagement = val;
+ case FreeRDP_GfxProgressive:
+ settings->GfxProgressive = val;
break;
- case FreeRDP_AutoAcceptCertificate:
- settings->AutoAcceptCertificate = val;
+ case FreeRDP_GfxProgressiveV2:
+ settings->GfxProgressiveV2 = val;
break;
- case FreeRDP_AutoDenyCertificate:
- settings->AutoDenyCertificate = val;
+ case FreeRDP_GfxSendQoeAck:
+ settings->GfxSendQoeAck = val;
break;
- case FreeRDP_Workarea:
- settings->Workarea = val;
+ case FreeRDP_GfxSmallCache:
+ settings->GfxSmallCache = val;
break;
- case FreeRDP_Fullscreen:
- settings->Fullscreen = val;
+ case FreeRDP_GfxThinClient:
+ settings->GfxThinClient = val;
break;
case FreeRDP_GrabKeyboard:
settings->GrabKeyboard = val;
break;
- case FreeRDP_Decorations:
- settings->Decorations = val;
+ case FreeRDP_HasExtendedMouseEvent:
+ settings->HasExtendedMouseEvent = val;
break;
- case FreeRDP_MouseMotion:
- settings->MouseMotion = val;
+ case FreeRDP_HasHorizontalWheel:
+ settings->HasHorizontalWheel = val;
break;
- case FreeRDP_AsyncInput:
- settings->AsyncInput = val;
+ case FreeRDP_HasMonitorAttributes:
+ settings->HasMonitorAttributes = val;
break;
- case FreeRDP_AsyncUpdate:
- settings->AsyncUpdate = val;
+ case FreeRDP_HiDefRemoteApp:
+ settings->HiDefRemoteApp = val;
break;
- case FreeRDP_AsyncChannels:
- settings->AsyncChannels = val;
+ case FreeRDP_IPv6Enabled:
+ settings->IPv6Enabled = val;
break;
- case FreeRDP_ToggleFullscreen:
- settings->ToggleFullscreen = val;
+ case FreeRDP_IgnoreCertificate:
+ settings->IgnoreCertificate = val;
break;
- case FreeRDP_EmbeddedWindow:
- settings->EmbeddedWindow = val;
+ case FreeRDP_JpegCodec:
+ settings->JpegCodec = val;
break;
- case FreeRDP_SmartSizing:
- settings->SmartSizing = val;
+ case FreeRDP_ListMonitors:
+ settings->ListMonitors = val;
break;
- case FreeRDP_PercentScreenUseWidth:
- settings->PercentScreenUseWidth = val;
+ case FreeRDP_LocalConnection:
+ settings->LocalConnection = val;
break;
- case FreeRDP_PercentScreenUseHeight:
- settings->PercentScreenUseHeight = val;
+ case FreeRDP_LogonErrors:
+ settings->LogonErrors = val;
break;
- case FreeRDP_DynamicResolutionUpdate:
- settings->DynamicResolutionUpdate = val;
+ case FreeRDP_LogonNotify:
+ settings->LogonNotify = val;
break;
- case FreeRDP_SoftwareGdi:
- settings->SoftwareGdi = val;
+ case FreeRDP_LongCredentialsSupported:
+ settings->LongCredentialsSupported = val;
break;
- case FreeRDP_LocalConnection:
- settings->LocalConnection = val;
+ case FreeRDP_LyncRdpMode:
+ settings->LyncRdpMode = val;
break;
- case FreeRDP_AuthenticationOnly:
- settings->AuthenticationOnly = val;
+ case FreeRDP_MaximizeShell:
+ settings->MaximizeShell = val;
break;
- case FreeRDP_CredentialsFromStdin:
- settings->CredentialsFromStdin = val;
+ case FreeRDP_MouseAttached:
+ settings->MouseAttached = val;
break;
- case FreeRDP_UnmapButtons:
- settings->UnmapButtons = val;
+ case FreeRDP_MouseHasWheel:
+ settings->MouseHasWheel = val;
break;
- case FreeRDP_OldLicenseBehaviour:
- settings->OldLicenseBehaviour = val;
+ case FreeRDP_MouseMotion:
+ settings->MouseMotion = val;
break;
- case FreeRDP_DumpRemoteFx:
- settings->DumpRemoteFx = val;
+ case FreeRDP_MstscCookieMode:
+ settings->MstscCookieMode = val;
break;
- case FreeRDP_PlayRemoteFx:
- settings->PlayRemoteFx = val;
+ case FreeRDP_MultiTouchGestures:
+ settings->MultiTouchGestures = val;
break;
- case FreeRDP_GatewayUseSameCredentials:
- settings->GatewayUseSameCredentials = val;
+ case FreeRDP_MultiTouchInput:
+ settings->MultiTouchInput = val;
break;
- case FreeRDP_GatewayEnabled:
- settings->GatewayEnabled = val;
+ case FreeRDP_NSCodec:
+ settings->NSCodec = val;
break;
- case FreeRDP_GatewayBypassLocal:
- settings->GatewayBypassLocal = val;
+ case FreeRDP_NSCodecAllowDynamicColorFidelity:
+ settings->NSCodecAllowDynamicColorFidelity = val;
break;
- case FreeRDP_GatewayRpcTransport:
- settings->GatewayRpcTransport = val;
+ case FreeRDP_NSCodecAllowSubsampling:
+ settings->NSCodecAllowSubsampling = val;
break;
- case FreeRDP_GatewayHttpTransport:
- settings->GatewayHttpTransport = val;
+ case FreeRDP_NegotiateSecurityLayer:
+ settings->NegotiateSecurityLayer = val;
break;
- case FreeRDP_GatewayUdpTransport:
- settings->GatewayUdpTransport = val;
+ case FreeRDP_NetworkAutoDetect:
+ settings->NetworkAutoDetect = val;
break;
- case FreeRDP_RemoteApplicationMode:
- settings->RemoteApplicationMode = val;
+ case FreeRDP_NlaSecurity:
+ settings->NlaSecurity = val;
break;
- case FreeRDP_DisableRemoteAppCapsCheck:
- settings->DisableRemoteAppCapsCheck = val;
+ case FreeRDP_NoBitmapCompressionHeader:
+ settings->NoBitmapCompressionHeader = val;
break;
- case FreeRDP_RemoteAppLanguageBarSupported:
- settings->RemoteAppLanguageBarSupported = val;
+ case FreeRDP_OldLicenseBehaviour:
+ settings->OldLicenseBehaviour = val;
break;
- case FreeRDP_RefreshRect:
- settings->RefreshRect = val;
+ case FreeRDP_PasswordIsSmartcardPin:
+ settings->PasswordIsSmartcardPin = val;
break;
- case FreeRDP_SuppressOutput:
- settings->SuppressOutput = val;
+ case FreeRDP_PercentScreenUseHeight:
+ settings->PercentScreenUseHeight = val;
break;
- case FreeRDP_FastPathOutput:
- settings->FastPathOutput = val;
+ case FreeRDP_PercentScreenUseWidth:
+ settings->PercentScreenUseWidth = val;
break;
- case FreeRDP_SaltedChecksum:
- settings->SaltedChecksum = val;
+ case FreeRDP_PlayRemoteFx:
+ settings->PlayRemoteFx = val;
break;
- case FreeRDP_LongCredentialsSupported:
- settings->LongCredentialsSupported = val;
+ case FreeRDP_PreferIPv6OverIPv4:
+ settings->PreferIPv6OverIPv4 = val;
break;
- case FreeRDP_NoBitmapCompressionHeader:
- settings->NoBitmapCompressionHeader = val;
+ case FreeRDP_PrintReconnectCookie:
+ settings->PrintReconnectCookie = val;
break;
- case FreeRDP_BitmapCompressionDisabled:
- settings->BitmapCompressionDisabled = val;
+ case FreeRDP_PromptForCredentials:
+ settings->PromptForCredentials = val;
break;
- case FreeRDP_DesktopResize:
- settings->DesktopResize = val;
+ case FreeRDP_RdpSecurity:
+ settings->RdpSecurity = val;
break;
- case FreeRDP_DrawAllowDynamicColorFidelity:
- settings->DrawAllowDynamicColorFidelity = val;
+ case FreeRDP_RedirectClipboard:
+ settings->RedirectClipboard = val;
break;
- case FreeRDP_DrawAllowColorSubsampling:
- settings->DrawAllowColorSubsampling = val;
+ case FreeRDP_RedirectDrives:
+ settings->RedirectDrives = val;
break;
- case FreeRDP_DrawAllowSkipAlpha:
- settings->DrawAllowSkipAlpha = val;
+ case FreeRDP_RedirectHomeDrive:
+ settings->RedirectHomeDrive = val;
break;
- case FreeRDP_BitmapCacheV3Enabled:
- settings->BitmapCacheV3Enabled = val;
+ case FreeRDP_RedirectParallelPorts:
+ settings->RedirectParallelPorts = val;
break;
- case FreeRDP_AltSecFrameMarkerSupport:
- settings->AltSecFrameMarkerSupport = val;
+ case FreeRDP_RedirectPrinters:
+ settings->RedirectPrinters = val;
break;
- case FreeRDP_AllowUnanouncedOrdersFromServer:
- settings->AllowUnanouncedOrdersFromServer = val;
+ case FreeRDP_RedirectSerialPorts:
+ settings->RedirectSerialPorts = val;
break;
- case FreeRDP_BitmapCacheEnabled:
- settings->BitmapCacheEnabled = val;
+ case FreeRDP_RedirectSmartCards:
+ settings->RedirectSmartCards = val;
break;
- case FreeRDP_AllowCacheWaitingList:
- settings->AllowCacheWaitingList = val;
+ case FreeRDP_RefreshRect:
+ settings->RefreshRect = val;
break;
- case FreeRDP_BitmapCachePersistEnabled:
- settings->BitmapCachePersistEnabled = val;
+ case FreeRDP_RemdeskVirtualChannel:
+ settings->RemdeskVirtualChannel = val;
break;
- case FreeRDP_ColorPointerFlag:
- settings->ColorPointerFlag = val;
+ case FreeRDP_RemoteAppLanguageBarSupported:
+ settings->RemoteAppLanguageBarSupported = val;
break;
- case FreeRDP_UnicodeInput:
- settings->UnicodeInput = val;
+ case FreeRDP_RemoteApplicationMode:
+ settings->RemoteApplicationMode = val;
break;
- case FreeRDP_FastPathInput:
- settings->FastPathInput = val;
+ case FreeRDP_RemoteAssistanceMode:
+ settings->RemoteAssistanceMode = val;
break;
- case FreeRDP_MultiTouchInput:
- settings->MultiTouchInput = val;
+ case FreeRDP_RemoteAssistanceRequestControl:
+ settings->RemoteAssistanceRequestControl = val;
break;
- case FreeRDP_MultiTouchGestures:
- settings->MultiTouchGestures = val;
+ case FreeRDP_RemoteConsoleAudio:
+ settings->RemoteConsoleAudio = val;
break;
- case FreeRDP_HasHorizontalWheel:
- settings->HasHorizontalWheel = val;
+ case FreeRDP_RemoteFxCodec:
+ settings->RemoteFxCodec = val;
break;
- case FreeRDP_HasExtendedMouseEvent:
- settings->HasExtendedMouseEvent = val;
+ case FreeRDP_RemoteFxImageCodec:
+ settings->RemoteFxImageCodec = val;
break;
- case FreeRDP_SoundBeepsEnabled:
- settings->SoundBeepsEnabled = val;
+ case FreeRDP_RemoteFxOnly:
+ settings->RemoteFxOnly = val;
break;
- case FreeRDP_SurfaceCommandsEnabled:
- settings->SurfaceCommandsEnabled = val;
+ case FreeRDP_RestrictedAdminModeRequired:
+ settings->RestrictedAdminModeRequired = val;
break;
- case FreeRDP_FrameMarkerCommandEnabled:
- settings->FrameMarkerCommandEnabled = val;
+ case FreeRDP_SaltedChecksum:
+ settings->SaltedChecksum = val;
break;
- case FreeRDP_SurfaceFrameMarkerEnabled:
- settings->SurfaceFrameMarkerEnabled = val;
+ case FreeRDP_SendPreconnectionPdu:
+ settings->SendPreconnectionPdu = val;
break;
- case FreeRDP_RemoteFxOnly:
- settings->RemoteFxOnly = val;
+ case FreeRDP_ServerMode:
+ settings->ServerMode = val;
break;
- case FreeRDP_RemoteFxCodec:
- settings->RemoteFxCodec = val;
+ case FreeRDP_SmartSizing:
+ settings->SmartSizing = val;
break;
- case FreeRDP_RemoteFxImageCodec:
- settings->RemoteFxImageCodec = val;
+ case FreeRDP_SmartcardLogon:
+ settings->SmartcardLogon = val;
break;
- case FreeRDP_NSCodec:
- settings->NSCodec = val;
+ case FreeRDP_SoftwareGdi:
+ settings->SoftwareGdi = val;
break;
- case FreeRDP_NSCodecAllowSubsampling:
- settings->NSCodecAllowSubsampling = val;
+ case FreeRDP_SoundBeepsEnabled:
+ settings->SoundBeepsEnabled = val;
break;
- case FreeRDP_NSCodecAllowDynamicColorFidelity:
- settings->NSCodecAllowDynamicColorFidelity = val;
+ case FreeRDP_SpanMonitors:
+ settings->SpanMonitors = val;
break;
- case FreeRDP_JpegCodec:
- settings->JpegCodec = val;
+ case FreeRDP_SupportAsymetricKeys:
+ settings->SupportAsymetricKeys = val;
break;
- case FreeRDP_GfxThinClient:
- settings->GfxThinClient = val;
+ case FreeRDP_SupportDisplayControl:
+ settings->SupportDisplayControl = val;
break;
- case FreeRDP_GfxSmallCache:
- settings->GfxSmallCache = val;
+ case FreeRDP_SupportDynamicChannels:
+ settings->SupportDynamicChannels = val;
break;
- case FreeRDP_GfxProgressive:
- settings->GfxProgressive = val;
+ case FreeRDP_SupportDynamicTimeZone:
+ settings->SupportDynamicTimeZone = val;
break;
- case FreeRDP_GfxProgressiveV2:
- settings->GfxProgressiveV2 = val;
+ case FreeRDP_SupportEchoChannel:
+ settings->SupportEchoChannel = val;
break;
- case FreeRDP_GfxH264:
- settings->GfxH264 = val;
+ case FreeRDP_SupportErrorInfoPdu:
+ settings->SupportErrorInfoPdu = val;
break;
- case FreeRDP_GfxAVC444:
- settings->GfxAVC444 = val;
+ case FreeRDP_SupportGeometryTracking:
+ settings->SupportGeometryTracking = val;
break;
- case FreeRDP_GfxSendQoeAck:
- settings->GfxSendQoeAck = val;
+ case FreeRDP_SupportGraphicsPipeline:
+ settings->SupportGraphicsPipeline = val;
break;
- case FreeRDP_GfxAVC444v2:
- settings->GfxAVC444v2 = val;
+ case FreeRDP_SupportHeartbeatPdu:
+ settings->SupportHeartbeatPdu = val;
break;
- case FreeRDP_DrawNineGridEnabled:
- settings->DrawNineGridEnabled = val;
+ case FreeRDP_SupportMonitorLayoutPdu:
+ settings->SupportMonitorLayoutPdu = val;
break;
- case FreeRDP_DrawGdiPlusEnabled:
- settings->DrawGdiPlusEnabled = val;
+ case FreeRDP_SupportMultitransport:
+ settings->SupportMultitransport = val;
break;
- case FreeRDP_DrawGdiPlusCacheEnabled:
- settings->DrawGdiPlusCacheEnabled = val;
+ case FreeRDP_SupportSSHAgentChannel:
+ settings->SupportSSHAgentChannel = val;
break;
- case FreeRDP_DeviceRedirection:
- settings->DeviceRedirection = val;
+ case FreeRDP_SupportStatusInfoPdu:
+ settings->SupportStatusInfoPdu = val;
break;
- case FreeRDP_RedirectDrives:
- settings->RedirectDrives = val;
+ case FreeRDP_SupportVideoOptimized:
+ settings->SupportVideoOptimized = val;
break;
- case FreeRDP_RedirectHomeDrive:
- settings->RedirectHomeDrive = val;
+ case FreeRDP_SuppressOutput:
+ settings->SuppressOutput = val;
break;
- case FreeRDP_RedirectSmartCards:
- settings->RedirectSmartCards = val;
+ case FreeRDP_SurfaceCommandsEnabled:
+ settings->SurfaceCommandsEnabled = val;
break;
- case FreeRDP_RedirectPrinters:
- settings->RedirectPrinters = val;
+ case FreeRDP_SurfaceFrameMarkerEnabled:
+ settings->SurfaceFrameMarkerEnabled = val;
break;
- case FreeRDP_RedirectSerialPorts:
- settings->RedirectSerialPorts = val;
+ case FreeRDP_TcpKeepAlive:
+ settings->TcpKeepAlive = val;
break;
- case FreeRDP_RedirectParallelPorts:
- settings->RedirectParallelPorts = val;
+ case FreeRDP_TlsSecurity:
+ settings->TlsSecurity = val;
break;
- case FreeRDP_PreferIPv6OverIPv4:
- settings->PreferIPv6OverIPv4 = val;
+ case FreeRDP_ToggleFullscreen:
+ settings->ToggleFullscreen = val;
break;
- case FreeRDP_RedirectClipboard:
- settings->RedirectClipboard = val;
+ case FreeRDP_UnicodeInput:
+ settings->UnicodeInput = val;
break;
- case FreeRDP_SupportDynamicChannels:
- settings->SupportDynamicChannels = val;
+ case FreeRDP_UnmapButtons:
+ settings->UnmapButtons = val;
break;
- case FreeRDP_SupportEchoChannel:
- settings->SupportEchoChannel = val;
+ case FreeRDP_UseMultimon:
+ settings->UseMultimon = val;
break;
- case FreeRDP_SupportDisplayControl:
- settings->SupportDisplayControl = val;
+ case FreeRDP_UseRdpSecurityLayer:
+ settings->UseRdpSecurityLayer = val;
break;
- case FreeRDP_SupportGeometryTracking:
- settings->SupportGeometryTracking = val;
+ case FreeRDP_UsingSavedCredentials:
+ settings->UsingSavedCredentials = val;
break;
- case FreeRDP_SupportSSHAgentChannel:
- settings->SupportSSHAgentChannel = val;
+ case FreeRDP_VideoDisable:
+ settings->VideoDisable = val;
break;
- case FreeRDP_SupportVideoOptimized:
- settings->SupportVideoOptimized = val;
+ case FreeRDP_VmConnectMode:
+ settings->VmConnectMode = val;
break;
- case FreeRDP_TcpKeepAlive:
- settings->TcpKeepAlive = val;
+ case FreeRDP_WaitForOutputBufferFlush:
+ settings->WaitForOutputBufferFlush = val;
+ break;
+
+ case FreeRDP_Workarea:
+ settings->Workarea = val;
break;
default:
@@ -1248,209 +1248,203 @@ UINT32 freerdp_settings_get_uint32(const rdpSettings* settings, size_t id)
switch (id)
{
- case FreeRDP_ShareId:
- return settings->ShareId;
-
- case FreeRDP_PduSource:
- return settings->PduSource;
+ case FreeRDP_AcceptedCertLength:
+ return settings->AcceptedCertLength;
- case FreeRDP_ServerPort:
- return settings->ServerPort;
+ case FreeRDP_AuthenticationLevel:
+ return settings->AuthenticationLevel;
- case FreeRDP_MaxTimeInCheckLoop:
- return settings->MaxTimeInCheckLoop;
+ case FreeRDP_AutoReconnectMaxRetries:
+ return settings->AutoReconnectMaxRetries;
- case FreeRDP_AcceptedCertLength:
- return settings->AcceptedCertLength;
+ case FreeRDP_BitmapCacheV2NumCells:
+ return settings->BitmapCacheV2NumCells;
- case FreeRDP_RdpVersion:
- return settings->RdpVersion;
+ case FreeRDP_BitmapCacheV3CodecId:
+ return settings->BitmapCacheV3CodecId;
- case FreeRDP_DesktopWidth:
- return settings->DesktopWidth;
+ case FreeRDP_BitmapCacheVersion:
+ return settings->BitmapCacheVersion;
- case FreeRDP_DesktopHeight:
- return settings->DesktopHeight;
+ case FreeRDP_BrushSupportLevel:
+ return settings->BrushSupportLevel;
- case FreeRDP_ColorDepth:
- return settings->ColorDepth;
+ case FreeRDP_ChannelCount:
+ return settings->ChannelCount;
- case FreeRDP_ConnectionType:
- return settings->ConnectionType;
+ case FreeRDP_ChannelDefArraySize:
+ return settings->ChannelDefArraySize;
case FreeRDP_ClientBuild:
return settings->ClientBuild;
- case FreeRDP_EarlyCapabilityFlags:
- return settings->EarlyCapabilityFlags;
-
- case FreeRDP_DesktopPhysicalWidth:
- return settings->DesktopPhysicalWidth;
+ case FreeRDP_ClientRandomLength:
+ return settings->ClientRandomLength;
- case FreeRDP_DesktopPhysicalHeight:
- return settings->DesktopPhysicalHeight;
+ case FreeRDP_ClusterInfoFlags:
+ return settings->ClusterInfoFlags;
- case FreeRDP_DesktopScaleFactor:
- return settings->DesktopScaleFactor;
+ case FreeRDP_ColorDepth:
+ return settings->ColorDepth;
- case FreeRDP_DeviceScaleFactor:
- return settings->DeviceScaleFactor;
+ case FreeRDP_CompDeskSupportLevel:
+ return settings->CompDeskSupportLevel;
- case FreeRDP_EncryptionMethods:
- return settings->EncryptionMethods;
+ case FreeRDP_CompressionLevel:
+ return settings->CompressionLevel;
- case FreeRDP_ExtEncryptionMethods:
- return settings->ExtEncryptionMethods;
+ case FreeRDP_ConnectionType:
+ return settings->ConnectionType;
- case FreeRDP_EncryptionLevel:
- return settings->EncryptionLevel;
+ case FreeRDP_CookieMaxLength:
+ return settings->CookieMaxLength;
- case FreeRDP_ServerRandomLength:
- return settings->ServerRandomLength;
+ case FreeRDP_DesktopHeight:
+ return settings->DesktopHeight;
- case FreeRDP_ServerCertificateLength:
- return settings->ServerCertificateLength;
+ case FreeRDP_DesktopPhysicalHeight:
+ return settings->DesktopPhysicalHeight;
- case FreeRDP_ClientRandomLength:
- return settings->ClientRandomLength;
+ case FreeRDP_DesktopPhysicalWidth:
+ return settings->DesktopPhysicalWidth;
- case FreeRDP_ChannelCount:
- return settings->ChannelCount;
+ case FreeRDP_DesktopPosX:
+ return settings->DesktopPosX;
- case FreeRDP_ChannelDefArraySize:
- return settings->ChannelDefArraySize;
+ case FreeRDP_DesktopPosY:
+ return settings->DesktopPosY;
- case FreeRDP_ClusterInfoFlags:
- return settings->ClusterInfoFlags;
+ case FreeRDP_DesktopScaleFactor:
+ return settings->DesktopScaleFactor;
- case FreeRDP_RedirectedSessionId:
- return settings->RedirectedSessionId;
+ case FreeRDP_DesktopWidth:
+ return settings->DesktopWidth;
- case FreeRDP_MonitorCount:
- return settings->MonitorCount;
+ case FreeRDP_DeviceArraySize:
+ return settings->DeviceArraySize;
- case FreeRDP_MonitorDefArraySize:
- return settings->MonitorDefArraySize;
+ case FreeRDP_DeviceCount:
+ return settings->DeviceCount;
- case FreeRDP_DesktopPosX:
- return settings->DesktopPosX;
+ case FreeRDP_DeviceScaleFactor:
+ return settings->DeviceScaleFactor;
- case FreeRDP_DesktopPosY:
- return settings->DesktopPosY;
+ case FreeRDP_DrawNineGridCacheEntries:
+ return settings->DrawNineGridCacheEntries;
- case FreeRDP_NumMonitorIds:
- return settings->NumMonitorIds;
+ case FreeRDP_DrawNineGridCacheSize:
+ return settings->DrawNineGridCacheSize;
- case FreeRDP_MonitorLocalShiftX:
- return settings->MonitorLocalShiftX;
+ case FreeRDP_DynamicChannelArraySize:
+ return settings->DynamicChannelArraySize;
- case FreeRDP_MonitorLocalShiftY:
- return settings->MonitorLocalShiftY;
+ case FreeRDP_DynamicChannelCount:
+ return settings->DynamicChannelCount;
- case FreeRDP_MultitransportFlags:
- return settings->MultitransportFlags;
+ case FreeRDP_EarlyCapabilityFlags:
+ return settings->EarlyCapabilityFlags;
- case FreeRDP_CompressionLevel:
- return settings->CompressionLevel;
+ case FreeRDP_EncryptionLevel:
+ return settings->EncryptionLevel;
- case FreeRDP_AutoReconnectMaxRetries:
- return settings->AutoReconnectMaxRetries;
+ case FreeRDP_EncryptionMethods:
+ return settings->EncryptionMethods;
- case FreeRDP_PerformanceFlags:
- return settings->PerformanceFlags;
+ case FreeRDP_ExtEncryptionMethods:
+ return settings->ExtEncryptionMethods;
- case FreeRDP_RequestedProtocols:
- return settings->RequestedProtocols;
+ case FreeRDP_FrameAcknowledge:
+ return settings->FrameAcknowledge;
- case FreeRDP_SelectedProtocol:
- return settings->SelectedProtocol;
+ case FreeRDP_GatewayAcceptedCertLength:
+ return settings->GatewayAcceptedCertLength;
- case FreeRDP_NegotiationFlags:
- return settings->NegotiationFlags;
+ case FreeRDP_GatewayCredentialsSource:
+ return settings->GatewayCredentialsSource;
- case FreeRDP_AuthenticationLevel:
- return settings->AuthenticationLevel;
+ case FreeRDP_GatewayPort:
+ return settings->GatewayPort;
- case FreeRDP_TlsSecLevel:
- return settings->TlsSecLevel;
+ case FreeRDP_GatewayUsageMethod:
+ return settings->GatewayUsageMethod;
- case FreeRDP_CookieMaxLength:
- return settings->CookieMaxLength;
+ case FreeRDP_GfxCapsFilter:
+ return settings->GfxCapsFilter;
- case FreeRDP_PreconnectionId:
- return settings->PreconnectionId;
+ case FreeRDP_GlyphSupportLevel:
+ return settings->GlyphSupportLevel;
- case FreeRDP_RedirectionFlags:
- return settings->RedirectionFlags;
+ case FreeRDP_JpegCodecId:
+ return settings->JpegCodecId;
- case FreeRDP_LoadBalanceInfoLength:
- return settings->LoadBalanceInfoLength;
+ case FreeRDP_JpegQuality:
+ return settings->JpegQuality;
- case FreeRDP_RedirectionPasswordLength:
- return settings->RedirectionPasswordLength;
+ case FreeRDP_KeyboardCodePage:
+ return settings->KeyboardCodePage;
- case FreeRDP_RedirectionTsvUrlLength:
- return settings->RedirectionTsvUrlLength;
+ case FreeRDP_KeyboardFunctionKey:
+ return settings->KeyboardFunctionKey;
- case FreeRDP_TargetNetAddressCount:
- return settings->TargetNetAddressCount;
+ case FreeRDP_KeyboardHook:
+ return settings->KeyboardHook;
- case FreeRDP_RedirectionAcceptedCertLength:
- return settings->RedirectionAcceptedCertLength;
+ case FreeRDP_KeyboardLayout:
+ return settings->KeyboardLayout;
- case FreeRDP_RedirectionPreferType:
- return settings->RedirectionPreferType;
+ case FreeRDP_KeyboardSubType:
+ return settings->KeyboardSubType;
- case FreeRDP_Password51Length:
- return settings->Password51Length;
+ case FreeRDP_KeyboardType:
+ return settings->KeyboardType;
- case FreeRDP_PercentScreen:
- return settings->PercentScreen;
+ case FreeRDP_LargePointerFlag:
+ return settings->LargePointerFlag;
- case FreeRDP_SmartSizingWidth:
- return settings->SmartSizingWidth;
+ case FreeRDP_LoadBalanceInfoLength:
+ return settings->LoadBalanceInfoLength;
- case FreeRDP_SmartSizingHeight:
- return settings->SmartSizingHeight;
+ case FreeRDP_MaxTimeInCheckLoop:
+ return settings->MaxTimeInCheckLoop;
- case FreeRDP_GatewayUsageMethod:
- return settings->GatewayUsageMethod;
+ case FreeRDP_MonitorCount:
+ return settings->MonitorCount;
- case FreeRDP_GatewayPort:
- return settings->GatewayPort;
+ case FreeRDP_MonitorDefArraySize:
+ return settings->MonitorDefArraySize;
- case FreeRDP_GatewayCredentialsSource:
- return settings->GatewayCredentialsSource;
+ case FreeRDP_MonitorLocalShiftX:
+ return settings->MonitorLocalShiftX;
- case FreeRDP_GatewayAcceptedCertLength:
- return settings->GatewayAcceptedCertLength;
+ case FreeRDP_MonitorLocalShiftY:
+ return settings->MonitorLocalShiftY;
- case FreeRDP_ProxyType:
- return settings->ProxyType;
+ case FreeRDP_MultifragMaxRequestSize:
+ return settings->MultifragMaxRequestSize;
- case FreeRDP_RemoteApplicationExpandCmdLine:
- return settings->RemoteApplicationExpandCmdLine;
+ case FreeRDP_MultitransportFlags:
+ return settings->MultitransportFlags;
- case FreeRDP_RemoteApplicationExpandWorkingDir:
- return settings->RemoteApplicationExpandWorkingDir;
+ case FreeRDP_NSCodecColorLossLevel:
+ return settings->NSCodecColorLossLevel;
- case FreeRDP_RemoteAppNumIconCaches:
- return settings->RemoteAppNumIconCaches;
+ case FreeRDP_NSCodecId:
+ return settings->NSCodecId;
- case FreeRDP_RemoteAppNumIconCacheEntries:
- return settings->RemoteAppNumIconCacheEntries;
+ case FreeRDP_NegotiationFlags:
+ return settings->NegotiationFlags;
- case FreeRDP_RemoteWndSupportLevel:
- return settings->RemoteWndSupportLevel;
+ case FreeRDP_NumMonitorIds:
+ return settings->NumMonitorIds;
- case FreeRDP_RemoteApplicationSupportLevel:
- return settings->RemoteApplicationSupportLevel;
+ case FreeRDP_OffscreenCacheEntries:
+ return settings->OffscreenCacheEntries;
- case FreeRDP_RemoteApplicationSupportMask:
- return settings->RemoteApplicationSupportMask;
+ case FreeRDP_OffscreenCacheSize:
+ return settings->OffscreenCacheSize;
- case FreeRDP_ReceivedCapabilitiesSize:
- return settings->ReceivedCapabilitiesSize;
+ case FreeRDP_OffscreenSupportLevel:
+ return settings->OffscreenSupportLevel;
case FreeRDP_OsMajorType:
return settings->OsMajorType;
@@ -1458,62 +1452,71 @@ UINT32 freerdp_settings_get_uint32(const rdpSettings* settings, size_t id)
case FreeRDP_OsMinorType:
return settings->OsMinorType;
- case FreeRDP_BitmapCacheVersion:
- return settings->BitmapCacheVersion;
+ case FreeRDP_Password51Length:
+ return settings->Password51Length;
- case FreeRDP_BitmapCacheV2NumCells:
- return settings->BitmapCacheV2NumCells;
+ case FreeRDP_PduSource:
+ return settings->PduSource;
+
+ case FreeRDP_PercentScreen:
+ return settings->PercentScreen;
+
+ case FreeRDP_PerformanceFlags:
+ return settings->PerformanceFlags;
case FreeRDP_PointerCacheSize:
return settings->PointerCacheSize;
- case FreeRDP_KeyboardCodePage:
- return settings->KeyboardCodePage;
+ case FreeRDP_PreconnectionId:
+ return settings->PreconnectionId;
- case FreeRDP_KeyboardLayout:
- return settings->KeyboardLayout;
+ case FreeRDP_ProxyType:
+ return settings->ProxyType;
- case FreeRDP_KeyboardType:
- return settings->KeyboardType;
+ case FreeRDP_RdpVersion:
+ return settings->RdpVersion;
- case FreeRDP_KeyboardSubType:
- return settings->KeyboardSubType;
+ case FreeRDP_ReceivedCapabilitiesSize:
+ return settings->ReceivedCapabilitiesSize;
- case FreeRDP_KeyboardFunctionKey:
- return settings->KeyboardFunctionKey;
+ case FreeRDP_RedirectedSessionId:
+ return settings->RedirectedSessionId;
- case FreeRDP_KeyboardHook:
- return settings->KeyboardHook;
+ case FreeRDP_RedirectionAcceptedCertLength:
+ return settings->RedirectionAcceptedCertLength;
- case FreeRDP_BrushSupportLevel:
- return settings->BrushSupportLevel;
+ case FreeRDP_RedirectionFlags:
+ return settings->RedirectionFlags;
- case FreeRDP_GlyphSupportLevel:
- return settings->GlyphSupportLevel;
+ case FreeRDP_RedirectionPasswordLength:
+ return settings->RedirectionPasswordLength;
- case FreeRDP_OffscreenSupportLevel:
- return settings->OffscreenSupportLevel;
+ case FreeRDP_RedirectionPreferType:
+ return settings->RedirectionPreferType;
- case FreeRDP_OffscreenCacheSize:
- return settings->OffscreenCacheSize;
+ case FreeRDP_RedirectionTsvUrlLength:
+ return settings->RedirectionTsvUrlLength;
- case FreeRDP_OffscreenCacheEntries:
- return settings->OffscreenCacheEntries;
+ case FreeRDP_RemoteAppNumIconCacheEntries:
+ return settings->RemoteAppNumIconCacheEntries;
- case FreeRDP_VirtualChannelCompressionFlags:
- return settings->VirtualChannelCompressionFlags;
+ case FreeRDP_RemoteAppNumIconCaches:
+ return settings->RemoteAppNumIconCaches;
- case FreeRDP_VirtualChannelChunkSize:
- return settings->VirtualChannelChunkSize;
+ case FreeRDP_RemoteApplicationExpandCmdLine:
+ return settings->RemoteApplicationExpandCmdLine;
- case FreeRDP_MultifragMaxRequestSize:
- return settings->MultifragMaxRequestSize;
+ case FreeRDP_RemoteApplicationExpandWorkingDir:
+ return settings->RemoteApplicationExpandWorkingDir;
- case FreeRDP_LargePointerFlag:
- return settings->LargePointerFlag;
+ case FreeRDP_RemoteApplicationSupportLevel:
+ return settings->RemoteApplicationSupportLevel;
- case FreeRDP_CompDeskSupportLevel:
- return settings->CompDeskSupportLevel;
+ case FreeRDP_RemoteApplicationSupportMask:
+ return settings->RemoteApplicationSupportMask;
+
+ case FreeRDP_RemoteFxCaptureFlags:
+ return settings->RemoteFxCaptureFlags;
case FreeRDP_RemoteFxCodecId:
return settings->RemoteFxCodecId;
@@ -1521,56 +1524,44 @@ UINT32 freerdp_settings_get_uint32(const rdpSettings* settings, size_t id)
case FreeRDP_RemoteFxCodecMode:
return settings->RemoteFxCodecMode;
- case FreeRDP_RemoteFxCaptureFlags:
- return settings->RemoteFxCaptureFlags;
-
- case FreeRDP_NSCodecId:
- return settings->NSCodecId;
-
- case FreeRDP_FrameAcknowledge:
- return settings->FrameAcknowledge;
-
- case FreeRDP_NSCodecColorLossLevel:
- return settings->NSCodecColorLossLevel;
-
- case FreeRDP_JpegCodecId:
- return settings->JpegCodecId;
+ case FreeRDP_RemoteWndSupportLevel:
+ return settings->RemoteWndSupportLevel;
- case FreeRDP_JpegQuality:
- return settings->JpegQuality;
+ case FreeRDP_RequestedProtocols:
+ return settings->RequestedProtocols;
- case FreeRDP_GfxCapsFilter:
- return settings->GfxCapsFilter;
+ case FreeRDP_SelectedProtocol:
+ return settings->SelectedProtocol;
- case FreeRDP_BitmapCacheV3CodecId:
- return settings->BitmapCacheV3CodecId;
+ case FreeRDP_ServerCertificateLength:
+ return settings->ServerCertificateLength;
- case FreeRDP_DrawNineGridCacheSize:
- return settings->DrawNineGridCacheSize;
+ case FreeRDP_ServerPort:
+ return settings->ServerPort;
- case FreeRDP_DrawNineGridCacheEntries:
- return settings->DrawNineGridCacheEntries;
+ case FreeRDP_ServerRandomLength:
+ return settings->ServerRandomLength;
- case FreeRDP_DeviceCount:
- return settings->DeviceCount;
+ case FreeRDP_ShareId:
+ return settings->ShareId;
- case FreeRDP_DeviceArraySize:
- return settings->DeviceArraySize;
+ case FreeRDP_SmartSizingHeight:
+ return settings->SmartSizingHeight;
- case FreeRDP_StaticChannelCount:
- return settings->StaticChannelCount;
+ case FreeRDP_SmartSizingWidth:
+ return settings->SmartSizingWidth;
case FreeRDP_StaticChannelArraySize:
return settings->StaticChannelArraySize;
- case FreeRDP_DynamicChannelCount:
- return settings->DynamicChannelCount;
+ case FreeRDP_StaticChannelCount:
+ return settings->StaticChannelCount;
- case FreeRDP_DynamicChannelArraySize:
- return settings->DynamicChannelArraySize;
+ case FreeRDP_TargetNetAddressCount:
+ return settings->TargetNetAddressCount;
- case FreeRDP_TcpKeepAliveRetries:
- return settings->TcpKeepAliveRetries;
+ case FreeRDP_TcpAckTimeout:
+ return settings->TcpAckTimeout;
case FreeRDP_TcpKeepAliveDelay:
return settings->TcpKeepAliveDelay;
@@ -1578,8 +1569,17 @@ UINT32 freerdp_settings_get_uint32(const rdpSettings* settings, size_t id)
case FreeRDP_TcpKeepAliveInterval:
return settings->TcpKeepAliveInterval;
- case FreeRDP_TcpAckTimeout:
- return settings->TcpAckTimeout;
+ case FreeRDP_TcpKeepAliveRetries:
+ return settings->TcpKeepAliveRetries;
+
+ case FreeRDP_TlsSecLevel:
+ return settings->TlsSecLevel;
+
+ case FreeRDP_VirtualChannelChunkSize:
+ return settings->VirtualChannelChunkSize;
+
+ case FreeRDP_VirtualChannelCompressionFlags:
+ return settings->VirtualChannelCompressionFlags;
default:
WLog_ERR(TAG, "[%s] Invalid key index %" PRIuz, __FUNCTION__, id);
@@ -1594,276 +1594,268 @@ BOOL freerdp_settings_set_uint32(rdpSettings* settings, size_t id, UINT32 val)
switch (id)
{
- case FreeRDP_ShareId:
- settings->ShareId = val;
- break;
-
- case FreeRDP_PduSource:
- settings->PduSource = val;
+ case FreeRDP_AcceptedCertLength:
+ settings->AcceptedCertLength = val;
break;
- case FreeRDP_ServerPort:
- settings->ServerPort = val;
+ case FreeRDP_AuthenticationLevel:
+ settings->AuthenticationLevel = val;
break;
- case FreeRDP_MaxTimeInCheckLoop:
- settings->MaxTimeInCheckLoop = val;
+ case FreeRDP_AutoReconnectMaxRetries:
+ settings->AutoReconnectMaxRetries = val;
break;
- case FreeRDP_AcceptedCertLength:
- settings->AcceptedCertLength = val;
+ case FreeRDP_BitmapCacheV2NumCells:
+ settings->BitmapCacheV2NumCells = val;
break;
- case FreeRDP_RdpVersion:
- settings->RdpVersion = val;
+ case FreeRDP_BitmapCacheV3CodecId:
+ settings->BitmapCacheV3CodecId = val;
break;
- case FreeRDP_DesktopWidth:
- settings->DesktopWidth = val;
+ case FreeRDP_BitmapCacheVersion:
+ settings->BitmapCacheVersion = val;
break;
- case FreeRDP_DesktopHeight:
- settings->DesktopHeight = val;
+ case FreeRDP_BrushSupportLevel:
+ settings->BrushSupportLevel = val;
break;
- case FreeRDP_ColorDepth:
- settings->ColorDepth = val;
+ case FreeRDP_ChannelCount:
+ settings->ChannelCount = val;
break;
- case FreeRDP_ConnectionType:
- settings->ConnectionType = val;
+ case FreeRDP_ChannelDefArraySize:
+ settings->ChannelDefArraySize = val;
break;
case FreeRDP_ClientBuild:
settings->ClientBuild = val;
break;
- case FreeRDP_EarlyCapabilityFlags:
- settings->EarlyCapabilityFlags = val;
- break;
-
- case FreeRDP_DesktopPhysicalWidth:
- settings->DesktopPhysicalWidth = val;
+ case FreeRDP_ClientRandomLength:
+ settings->ClientRandomLength = val;
break;
- case FreeRDP_DesktopPhysicalHeight:
- settings->DesktopPhysicalHeight = val;
+ case FreeRDP_ClusterInfoFlags:
+ settings->ClusterInfoFlags = val;
break;
- case FreeRDP_DesktopScaleFactor:
- settings->DesktopScaleFactor = val;
+ case FreeRDP_ColorDepth:
+ settings->ColorDepth = val;
break;
- case FreeRDP_DeviceScaleFactor:
- settings->DeviceScaleFactor = val;
+ case FreeRDP_CompDeskSupportLevel:
+ settings->CompDeskSupportLevel = val;
break;
- case FreeRDP_EncryptionMethods:
- settings->EncryptionMethods = val;
+ case FreeRDP_CompressionLevel:
+ settings->CompressionLevel = val;
break;
- case FreeRDP_ExtEncryptionMethods:
- settings->ExtEncryptionMethods = val;
+ case FreeRDP_ConnectionType:
+ settings->ConnectionType = val;
break;
- case FreeRDP_EncryptionLevel:
- settings->EncryptionLevel = val;
+ case FreeRDP_CookieMaxLength:
+ settings->CookieMaxLength = val;
break;
- case FreeRDP_ServerRandomLength:
- settings->ServerRandomLength = val;
+ case FreeRDP_DesktopHeight:
+ settings->DesktopHeight = val;
break;
- case FreeRDP_ServerCertificateLength:
- settings->ServerCertificateLength = val;
+ case FreeRDP_DesktopPhysicalHeight:
+ settings->DesktopPhysicalHeight = val;
break;
- case FreeRDP_ClientRandomLength:
- settings->ClientRandomLength = val;
+ case FreeRDP_DesktopPhysicalWidth:
+ settings->DesktopPhysicalWidth = val;
break;
- case FreeRDP_ChannelCount:
- settings->ChannelCount = val;
+ case FreeRDP_DesktopPosX:
+ settings->DesktopPosX = val;
break;
- case FreeRDP_ChannelDefArraySize:
- settings->ChannelDefArraySize = val;
+ case FreeRDP_DesktopPosY:
+ settings->DesktopPosY = val;
break;
- case FreeRDP_ClusterInfoFlags:
- settings->ClusterInfoFlags = val;
+ case FreeRDP_DesktopScaleFactor:
+ settings->DesktopScaleFactor = val;
break;
- case FreeRDP_RedirectedSessionId:
- settings->RedirectedSessionId = val;
+ case FreeRDP_DesktopWidth:
+ settings->DesktopWidth = val;
break;
- case FreeRDP_MonitorCount:
- settings->MonitorCount = val;
+ case FreeRDP_DeviceArraySize:
+ settings->DeviceArraySize = val;
break;
- case FreeRDP_MonitorDefArraySize:
- settings->MonitorDefArraySize = val;
+ case FreeRDP_DeviceCount:
+ settings->DeviceCount = val;
break;
- case FreeRDP_DesktopPosX:
- settings->DesktopPosX = val;
+ case FreeRDP_DeviceScaleFactor:
+ settings->DeviceScaleFactor = val;
break;
- case FreeRDP_DesktopPosY:
- settings->DesktopPosY = val;
+ case FreeRDP_DrawNineGridCacheEntries:
+ settings->DrawNineGridCacheEntries = val;
break;
- case FreeRDP_NumMonitorIds:
- settings->NumMonitorIds = val;
+ case FreeRDP_DrawNineGridCacheSize:
+ settings->DrawNineGridCacheSize = val;
break;
- case FreeRDP_MonitorLocalShiftX:
- settings->MonitorLocalShiftX = val;
+ case FreeRDP_DynamicChannelArraySize:
+ settings->DynamicChannelArraySize = val;
break;
- case FreeRDP_MonitorLocalShiftY:
- settings->MonitorLocalShiftY = val;
+ case FreeRDP_DynamicChannelCount:
+ settings->DynamicChannelCount = val;
break;
- case FreeRDP_MultitransportFlags:
- settings->MultitransportFlags = val;
+ case FreeRDP_EarlyCapabilityFlags:
+ settings->EarlyCapabilityFlags = val;
break;
- case FreeRDP_CompressionLevel:
- settings->CompressionLevel = val;
+ case FreeRDP_EncryptionLevel:
+ settings->EncryptionLevel = val;
break;
- case FreeRDP_AutoReconnectMaxRetries:
- settings->AutoReconnectMaxRetries = val;
+ case FreeRDP_EncryptionMethods:
+ settings->EncryptionMethods = val;
break;
- case FreeRDP_PerformanceFlags:
- settings->PerformanceFlags = val;
+ case FreeRDP_ExtEncryptionMethods:
+ settings->ExtEncryptionMethods = val;
break;
- case FreeRDP_RequestedProtocols:
- settings->RequestedProtocols = val;
+ case FreeRDP_FrameAcknowledge:
+ settings->FrameAcknowledge = val;
break;
- case FreeRDP_SelectedProtocol:
- settings->SelectedProtocol = val;
+ case FreeRDP_GatewayAcceptedCertLength:
+ settings->GatewayAcceptedCertLength = val;
break;
- case FreeRDP_NegotiationFlags:
- settings->NegotiationFlags = val;
+ case FreeRDP_GatewayCredentialsSource:
+ settings->GatewayCredentialsSource = val;
break;
- case FreeRDP_AuthenticationLevel:
- settings->AuthenticationLevel = val;
+ case FreeRDP_GatewayPort:
+ settings->GatewayPort = val;
break;
- case FreeRDP_TlsSecLevel:
- settings->TlsSecLevel = val;
+ case FreeRDP_GatewayUsageMethod:
+ settings->GatewayUsageMethod = val;
break;
- case FreeRDP_CookieMaxLength:
- settings->CookieMaxLength = val;
+ case FreeRDP_GfxCapsFilter:
+ settings->GfxCapsFilter = val;
break;
- case FreeRDP_PreconnectionId:
- settings->PreconnectionId = val;
+ case FreeRDP_GlyphSupportLevel:
+ settings->GlyphSupportLevel = val;
break;
- case FreeRDP_RedirectionFlags:
- settings->RedirectionFlags = val;
+ case FreeRDP_JpegCodecId:
+ settings->JpegCodecId = val;
break;
- case FreeRDP_LoadBalanceInfoLength:
- settings->LoadBalanceInfoLength = val;
+ case FreeRDP_JpegQuality:
+ settings->JpegQuality = val;
break;
- case FreeRDP_RedirectionPasswordLength:
- settings->RedirectionPasswordLength = val;
+ case FreeRDP_KeyboardCodePage:
+ settings->KeyboardCodePage = val;
break;
- case FreeRDP_RedirectionTsvUrlLength:
- settings->RedirectionTsvUrlLength = val;
+ case FreeRDP_KeyboardFunctionKey:
+ settings->KeyboardFunctionKey = val;
break;
- case FreeRDP_TargetNetAddressCount:
- settings->TargetNetAddressCount = val;
+ case FreeRDP_KeyboardHook:
+ settings->KeyboardHook = val;
break;
- case FreeRDP_RedirectionAcceptedCertLength:
- settings->RedirectionAcceptedCertLength = val;
+ case FreeRDP_KeyboardLayout:
+ settings->KeyboardLayout = val;
break;
- case FreeRDP_RedirectionPreferType:
- settings->RedirectionPreferType = val;
+ case FreeRDP_KeyboardSubType:
+ settings->KeyboardSubType = val;
break;
- case FreeRDP_Password51Length:
- settings->Password51Length = val;
+ case FreeRDP_KeyboardType:
+ settings->KeyboardType = val;
break;
- case FreeRDP_PercentScreen:
- settings->PercentScreen = val;
+ case FreeRDP_LargePointerFlag:
+ settings->LargePointerFlag = val;
break;
- case FreeRDP_SmartSizingWidth:
- settings->SmartSizingWidth = val;
+ case FreeRDP_LoadBalanceInfoLength:
+ settings->LoadBalanceInfoLength = val;
break;
- case FreeRDP_SmartSizingHeight:
- settings->SmartSizingHeight = val;
+ case FreeRDP_MaxTimeInCheckLoop:
+ settings->MaxTimeInCheckLoop = val;
break;
- case FreeRDP_GatewayUsageMethod:
- settings->GatewayUsageMethod = val;
+ case FreeRDP_MonitorCount:
+ settings->MonitorCount = val;
break;
- case FreeRDP_GatewayPort:
- settings->GatewayPort = val;
+ case FreeRDP_MonitorDefArraySize:
+ settings->MonitorDefArraySize = val;
break;
- case FreeRDP_GatewayCredentialsSource:
- settings->GatewayCredentialsSource = val;
+ case FreeRDP_MonitorLocalShiftX:
+ settings->MonitorLocalShiftX = val;
break;
- case FreeRDP_GatewayAcceptedCertLength:
- settings->GatewayAcceptedCertLength = val;
+ case FreeRDP_MonitorLocalShiftY:
+ settings->MonitorLocalShiftY = val;
break;
- case FreeRDP_ProxyType:
- settings->ProxyType = val;
+ case FreeRDP_MultifragMaxRequestSize:
+ settings->MultifragMaxRequestSize = val;
break;
- case FreeRDP_RemoteApplicationExpandCmdLine:
- settings->RemoteApplicationExpandCmdLine = val;
+ case FreeRDP_MultitransportFlags:
+ settings->MultitransportFlags = val;
break;
- case FreeRDP_RemoteApplicationExpandWorkingDir:
- settings->RemoteApplicationExpandWorkingDir = val;
+ case FreeRDP_NSCodecColorLossLevel:
+ settings->NSCodecColorLossLevel = val;
break;
- case FreeRDP_RemoteAppNumIconCaches:
- settings->RemoteAppNumIconCaches = val;
+ case FreeRDP_NSCodecId:
+ settings->NSCodecId = val;
break;
- case FreeRDP_RemoteAppNumIconCacheEntries:
- settings->RemoteAppNumIconCacheEntries = val;
+ case FreeRDP_NegotiationFlags:
+ settings->NegotiationFlags = val;
break;
- case FreeRDP_RemoteWndSupportLevel:
- settings->RemoteWndSupportLevel = val;
+ case FreeRDP_NumMonitorIds:
+ settings->NumMonitorIds = val;
break;
- case FreeRDP_RemoteApplicationSupportLevel:
- settings->RemoteApplicationSupportLevel = val;
+ case FreeRDP_OffscreenCacheEntries:
+ settings->OffscreenCacheEntries = val;
break;
- case FreeRDP_RemoteApplicationSupportMask:
- settings->RemoteApplicationSupportMask = val;
+ case FreeRDP_OffscreenCacheSize:
+ settings->OffscreenCacheSize = val;
break;
- case FreeRDP_ReceivedCapabilitiesSize:
- settings->ReceivedCapabilitiesSize = val;
+ case FreeRDP_OffscreenSupportLevel:
+ settings->OffscreenSupportLevel = val;
break;
case FreeRDP_OsMajorType:
@@ -1874,156 +1866,152 @@ BOOL freerdp_settings_set_uint32(rdpSettings* settings, size_t id, UINT32 val)
settings->OsMinorType = val;
break;
- case FreeRDP_BitmapCacheVersion:
- settings->BitmapCacheVersion = val;
+ case FreeRDP_Password51Length:
+ settings->Password51Length = val;
break;
- case FreeRDP_BitmapCacheV2NumCells:
- settings->BitmapCacheV2NumCells = val;
+ case FreeRDP_PduSource:
+ settings->PduSource = val;
break;
- case FreeRDP_PointerCacheSize:
- settings->PointerCacheSize = val;
+ case FreeRDP_PercentScreen:
+ settings->PercentScreen = val;
break;
- case FreeRDP_KeyboardCodePage:
- settings->KeyboardCodePage = val;
+ case FreeRDP_PerformanceFlags:
+ settings->PerformanceFlags = val;
break;
- case FreeRDP_KeyboardLayout:
- settings->KeyboardLayout = val;
+ case FreeRDP_PointerCacheSize:
+ settings->PointerCacheSize = val;
break;
- case FreeRDP_KeyboardType:
- settings->KeyboardType = val;
+ case FreeRDP_PreconnectionId:
+ settings->PreconnectionId = val;
break;
- case FreeRDP_KeyboardSubType:
- settings->KeyboardSubType = val;
+ case FreeRDP_ProxyType:
+ settings->ProxyType = val;
break;
- case FreeRDP_KeyboardFunctionKey:
- settings->KeyboardFunctionKey = val;
+ case FreeRDP_RdpVersion:
+ settings->RdpVersion = val;
break;
- case FreeRDP_KeyboardHook:
- settings->KeyboardHook = val;
+ case FreeRDP_ReceivedCapabilitiesSize:
+ settings->ReceivedCapabilitiesSize = val;
break;
- case FreeRDP_BrushSupportLevel:
- settings->BrushSupportLevel = val;
+ case FreeRDP_RedirectedSessionId:
+ settings->RedirectedSessionId = val;
break;
- case FreeRDP_GlyphSupportLevel:
- settings->GlyphSupportLevel = val;
+ case FreeRDP_RedirectionAcceptedCertLength:
+ settings->RedirectionAcceptedCertLength = val;
break;
- case FreeRDP_OffscreenSupportLevel:
- settings->OffscreenSupportLevel = val;
+ case FreeRDP_RedirectionFlags:
+ settings->RedirectionFlags = val;
break;
- case FreeRDP_OffscreenCacheSize:
- settings->OffscreenCacheSize = val;
+ case FreeRDP_RedirectionPasswordLength:
+ settings->RedirectionPasswordLength = val;
break;
- case FreeRDP_OffscreenCacheEntries:
- settings->OffscreenCacheEntries = val;
+ case FreeRDP_RedirectionPreferType:
+ settings->RedirectionPreferType = val;
break;
- case FreeRDP_VirtualChannelCompressionFlags:
- settings->VirtualChannelCompressionFlags = val;
+ case FreeRDP_RedirectionTsvUrlLength:
+ settings->RedirectionTsvUrlLength = val;
break;
- case FreeRDP_VirtualChannelChunkSize:
- settings->VirtualChannelChunkSize = val;
+ case FreeRDP_RemoteAppNumIconCacheEntries:
+ settings->RemoteAppNumIconCacheEntries = val;
break;
- case FreeRDP_MultifragMaxRequestSize:
- settings->MultifragMaxRequestSize = val;
+ case FreeRDP_RemoteAppNumIconCaches:
+ settings->RemoteAppNumIconCaches = val;
break;
- case FreeRDP_LargePointerFlag:
- settings->LargePointerFlag = val;
+ case FreeRDP_RemoteApplicationExpandCmdLine:
+ settings->RemoteApplicationExpandCmdLine = val;
break;
- case FreeRDP_CompDeskSupportLevel:
- settings->CompDeskSupportLevel = val;
+ case FreeRDP_RemoteApplicationExpandWorkingDir:
+ settings->RemoteApplicationExpandWorkingDir = val;
break;
- case FreeRDP_RemoteFxCodecId:
- settings->RemoteFxCodecId = val;
+ case FreeRDP_RemoteApplicationSupportLevel:
+ settings->RemoteApplicationSupportLevel = val;
break;
- case FreeRDP_RemoteFxCodecMode:
- settings->RemoteFxCodecMode = val;
+ case FreeRDP_RemoteApplicationSupportMask:
+ settings->RemoteApplicationSupportMask = val;
break;
case FreeRDP_RemoteFxCaptureFlags:
settings->RemoteFxCaptureFlags = val;
break;
- case FreeRDP_NSCodecId:
- settings->NSCodecId = val;
- break;
-
- case FreeRDP_FrameAcknowledge:
- settings->FrameAcknowledge = val;
+ case FreeRDP_RemoteFxCodecId:
+ settings->RemoteFxCodecId = val;
break;
- case FreeRDP_NSCodecColorLossLevel:
- settings->NSCodecColorLossLevel = val;
+ case FreeRDP_RemoteFxCodecMode:
+ settings->RemoteFxCodecMode = val;
break;
- case FreeRDP_JpegCodecId:
- settings->JpegCodecId = val;
+ case FreeRDP_RemoteWndSupportLevel:
+ settings->RemoteWndSupportLevel = val;
break;
- case FreeRDP_JpegQuality:
- settings->JpegQuality = val;
+ case FreeRDP_RequestedProtocols:
+ settings->RequestedProtocols = val;
break;
- case FreeRDP_GfxCapsFilter:
- settings->GfxCapsFilter = val;
+ case FreeRDP_SelectedProtocol:
+ settings->SelectedProtocol = val;
break;
- case FreeRDP_BitmapCacheV3CodecId:
- settings->BitmapCacheV3CodecId = val;
+ case FreeRDP_ServerCertificateLength:
+ settings->ServerCertificateLength = val;
break;
- case FreeRDP_DrawNineGridCacheSize:
- settings->DrawNineGridCacheSize = val;
+ case FreeRDP_ServerPort:
+ settings->ServerPort = val;
break;
- case FreeRDP_DrawNineGridCacheEntries:
- settings->DrawNineGridCacheEntries = val;
+ case FreeRDP_ServerRandomLength:
+ settings->ServerRandomLength = val;
break;
- case FreeRDP_DeviceCount:
- settings->DeviceCount = val;
+ case FreeRDP_ShareId:
+ settings->ShareId = val;
break;
- case FreeRDP_DeviceArraySize:
- settings->DeviceArraySize = val;
+ case FreeRDP_SmartSizingHeight:
+ settings->SmartSizingHeight = val;
break;
- case FreeRDP_StaticChannelCount:
- settings->StaticChannelCount = val;
+ case FreeRDP_SmartSizingWidth:
+ settings->SmartSizingWidth = val;
break;
case FreeRDP_StaticChannelArraySize:
settings->StaticChannelArraySize = val;
break;
- case FreeRDP_DynamicChannelCount:
- settings->DynamicChannelCount = val;
+ case FreeRDP_StaticChannelCount:
+ settings->StaticChannelCount = val;
break;
- case FreeRDP_DynamicChannelArraySize:
- settings->DynamicChannelArraySize = val;
+ case FreeRDP_TargetNetAddressCount:
+ settings->TargetNetAddressCount = val;
break;
- case FreeRDP_TcpKeepAliveRetries:
- settings->TcpKeepAliveRetries = val;
+ case FreeRDP_TcpAckTimeout:
+ settings->TcpAckTimeout = val;
break;
case FreeRDP_TcpKeepAliveDelay:
@@ -2034,8 +2022,20 @@ BOOL freerdp_settings_set_uint32(rdpSettings* settings, size_t id, UINT32 val)
settings->TcpKeepAliveInterval = val;
break;
- case FreeRDP_TcpAckTimeout:
- settings->TcpAckTimeout = val;
+ case FreeRDP_TcpKeepAliveRetries:
+ settings->TcpKeepAliveRetries = val;
+ break;
+
+ case FreeRDP_TlsSecLevel:
+ settings->TlsSecLevel = val;
+ break;
+
+ case FreeRDP_VirtualChannelChunkSize:
+ settings->VirtualChannelChunkSize = val;
+ break;
+
+ case FreeRDP_VirtualChannelCompressionFlags:
+ settings->VirtualChannelCompressionFlags = val;
break;
default:
@@ -2154,35 +2154,32 @@ const char* freerdp_settings_get_string(const rdpSettings* settings, size_t id)
switch (id)
{
- case FreeRDP_ServerHostname:
- return settings->ServerHostname;
-
- case FreeRDP_Username:
- return settings->Username;
+ case FreeRDP_AcceptedCert:
+ return settings->AcceptedCert;
- case FreeRDP_Password:
- return settings->Password;
+ case FreeRDP_AllowedTlsCiphers:
+ return settings->AllowedTlsCiphers;
- case FreeRDP_Domain:
- return settings->Domain;
+ case FreeRDP_AlternateShell:
+ return settings->AlternateShell;
- case FreeRDP_PasswordHash:
- return settings->PasswordHash;
+ case FreeRDP_AssistanceFile:
+ return settings->AssistanceFile;
- case FreeRDP_AcceptedCert:
- return settings->AcceptedCert;
+ case FreeRDP_AuthenticationServiceClass:
+ return settings->AuthenticationServiceClass;
- case FreeRDP_ClientHostname:
- return settings->ClientHostname;
+ case FreeRDP_CertificateAcceptedFingerprints:
+ return settings->CertificateAcceptedFingerprints;
- case FreeRDP_ClientProductId:
- return settings->ClientProductId;
+ case FreeRDP_CertificateContent:
+ return settings->CertificateContent;
- case FreeRDP_AlternateShell:
- return settings->AlternateShell;
+ case FreeRDP_CertificateFile:
+ return settings->CertificateFile;
- case FreeRDP_ShellWorkingDirectory:
- return settings->ShellWorkingDirectory;
+ case FreeRDP_CertificateName:
+ return settings->CertificateName;
case FreeRDP_ClientAddress:
return settings->ClientAddress;
@@ -2190,50 +2187,59 @@ const char* freerdp_settings_get_string(const rdpSettings* settings, size_t id)
case FreeRDP_ClientDir:
return settings->ClientDir;
- case FreeRDP_DynamicDSTTimeZoneKeyName:
- return settings->DynamicDSTTimeZoneKeyName;
+ case FreeRDP_ClientHostname:
+ return settings->ClientHostname;
- case FreeRDP_RemoteAssistanceSessionId:
- return settings->RemoteAssistanceSessionId;
+ case FreeRDP_ClientProductId:
+ return settings->ClientProductId;
- case FreeRDP_RemoteAssistancePassStub:
- return settings->RemoteAssistancePassStub;
+ case FreeRDP_ComputerName:
+ return settings->ComputerName;
- case FreeRDP_RemoteAssistancePassword:
- return settings->RemoteAssistancePassword;
+ case FreeRDP_ConfigPath:
+ return settings->ConfigPath;
- case FreeRDP_RemoteAssistanceRCTicket:
- return settings->RemoteAssistanceRCTicket;
+ case FreeRDP_ConnectionFile:
+ return settings->ConnectionFile;
- case FreeRDP_AuthenticationServiceClass:
- return settings->AuthenticationServiceClass;
+ case FreeRDP_CurrentPath:
+ return settings->CurrentPath;
- case FreeRDP_AllowedTlsCiphers:
- return settings->AllowedTlsCiphers;
+ case FreeRDP_Domain:
+ return settings->Domain;
- case FreeRDP_NtlmSamFile:
- return settings->NtlmSamFile;
+ case FreeRDP_DrivesToRedirect:
+ return settings->DrivesToRedirect;
- case FreeRDP_PreconnectionBlob:
- return settings->PreconnectionBlob;
+ case FreeRDP_DumpRemoteFxFile:
+ return settings->DumpRemoteFxFile;
- case FreeRDP_TargetNetAddress:
- return settings->TargetNetAddress;
+ case FreeRDP_DynamicDSTTimeZoneKeyName:
+ return settings->DynamicDSTTimeZoneKeyName;
- case FreeRDP_RedirectionUsername:
- return settings->RedirectionUsername;
+ case FreeRDP_GatewayAcceptedCert:
+ return settings->GatewayAcceptedCert;
- case FreeRDP_RedirectionDomain:
- return settings->RedirectionDomain;
+ case FreeRDP_GatewayAccessToken:
+ return settings->GatewayAccessToken;
- case FreeRDP_RedirectionTargetFQDN:
- return settings->RedirectionTargetFQDN;
+ case FreeRDP_GatewayDomain:
+ return settings->GatewayDomain;
- case FreeRDP_RedirectionTargetNetBiosName:
- return settings->RedirectionTargetNetBiosName;
+ case FreeRDP_GatewayHostname:
+ return settings->GatewayHostname;
- case FreeRDP_RedirectionAcceptedCert:
- return settings->RedirectionAcceptedCert;
+ case FreeRDP_GatewayPassword:
+ return settings->GatewayPassword;
+
+ case FreeRDP_GatewayUsername:
+ return settings->GatewayUsername;
+
+ case FreeRDP_HomePath:
+ return settings->HomePath;
+
+ case FreeRDP_ImeFileName:
+ return settings->ImeFileName;
case FreeRDP_KerberosKdc:
return settings->KerberosKdc;
@@ -2241,116 +2247,110 @@ const char* freerdp_settings_get_string(const rdpSettings* settings, size_t id)
case FreeRDP_KerberosRealm:
return settings->KerberosRealm;
- case FreeRDP_CertificateName:
- return settings->CertificateName;
+ case FreeRDP_NtlmSamFile:
+ return settings->NtlmSamFile;
- case FreeRDP_CertificateFile:
- return settings->CertificateFile;
+ case FreeRDP_Password:
+ return settings->Password;
- case FreeRDP_PrivateKeyFile:
- return settings->PrivateKeyFile;
+ case FreeRDP_PasswordHash:
+ return settings->PasswordHash;
- case FreeRDP_RdpKeyFile:
- return settings->RdpKeyFile;
+ case FreeRDP_PlayRemoteFxFile:
+ return settings->PlayRemoteFxFile;
- case FreeRDP_CertificateContent:
- return settings->CertificateContent;
+ case FreeRDP_PreconnectionBlob:
+ return settings->PreconnectionBlob;
case FreeRDP_PrivateKeyContent:
return settings->PrivateKeyContent;
- case FreeRDP_RdpKeyContent:
- return settings->RdpKeyContent;
-
- case FreeRDP_CertificateAcceptedFingerprints:
- return settings->CertificateAcceptedFingerprints;
-
- case FreeRDP_WindowTitle:
- return settings->WindowTitle;
-
- case FreeRDP_WmClass:
- return settings->WmClass;
-
- case FreeRDP_ComputerName:
- return settings->ComputerName;
-
- case FreeRDP_ConnectionFile:
- return settings->ConnectionFile;
+ case FreeRDP_PrivateKeyFile:
+ return settings->PrivateKeyFile;
- case FreeRDP_AssistanceFile:
- return settings->AssistanceFile;
+ case FreeRDP_ProxyHostname:
+ return settings->ProxyHostname;
- case FreeRDP_HomePath:
- return settings->HomePath;
+ case FreeRDP_ProxyPassword:
+ return settings->ProxyPassword;
- case FreeRDP_ConfigPath:
- return settings->ConfigPath;
+ case FreeRDP_ProxyUsername:
+ return settings->ProxyUsername;
- case FreeRDP_CurrentPath:
- return settings->CurrentPath;
+ case FreeRDP_RDP2TCPArgs:
+ return settings->RDP2TCPArgs;
- case FreeRDP_DumpRemoteFxFile:
- return settings->DumpRemoteFxFile;
+ case FreeRDP_RdpKeyContent:
+ return settings->RdpKeyContent;
- case FreeRDP_PlayRemoteFxFile:
- return settings->PlayRemoteFxFile;
+ case FreeRDP_RdpKeyFile:
+ return settings->RdpKeyFile;
- case FreeRDP_GatewayHostname:
- return settings->GatewayHostname;
+ case FreeRDP_RedirectionAcceptedCert:
+ return settings->RedirectionAcceptedCert;
- case FreeRDP_GatewayUsername:
- return settings->GatewayUsername;
+ case FreeRDP_RedirectionDomain:
+ return settings->RedirectionDomain;
- case FreeRDP_GatewayPassword:
- return settings->GatewayPassword;
+ case FreeRDP_RedirectionTargetFQDN:
+ return settings->RedirectionTargetFQDN;
- case FreeRDP_GatewayDomain:
- return settings->GatewayDomain;
+ case FreeRDP_RedirectionTargetNetBiosName:
+ return settings->RedirectionTargetNetBiosName;
- case FreeRDP_GatewayAccessToken:
- return settings->GatewayAccessToken;
+ case FreeRDP_RedirectionUsername:
+ return settings->RedirectionUsername;
- case FreeRDP_GatewayAcceptedCert:
- return settings->GatewayAcceptedCert;
+ case FreeRDP_RemoteApplicationCmdLine:
+ return settings->RemoteApplicationCmdLine;
- case FreeRDP_ProxyHostname:
- return settings->ProxyHostname;
+ case FreeRDP_RemoteApplicationFile:
+ return settings->RemoteApplicationFile;
- case FreeRDP_ProxyUsername:
- return settings->ProxyUsername;
+ case FreeRDP_RemoteApplicationGuid:
+ return settings->RemoteApplicationGuid;
- case FreeRDP_ProxyPassword:
- return settings->ProxyPassword;
+ case FreeRDP_RemoteApplicationIcon:
+ return settings->RemoteApplicationIcon;
case FreeRDP_RemoteApplicationName:
return settings->RemoteApplicationName;
- case FreeRDP_RemoteApplicationIcon:
- return settings->RemoteApplicationIcon;
-
case FreeRDP_RemoteApplicationProgram:
return settings->RemoteApplicationProgram;
- case FreeRDP_RemoteApplicationFile:
- return settings->RemoteApplicationFile;
+ case FreeRDP_RemoteApplicationWorkingDir:
+ return settings->RemoteApplicationWorkingDir;
- case FreeRDP_RemoteApplicationGuid:
- return settings->RemoteApplicationGuid;
+ case FreeRDP_RemoteAssistancePassStub:
+ return settings->RemoteAssistancePassStub;
- case FreeRDP_RemoteApplicationCmdLine:
- return settings->RemoteApplicationCmdLine;
+ case FreeRDP_RemoteAssistancePassword:
+ return settings->RemoteAssistancePassword;
- case FreeRDP_RemoteApplicationWorkingDir:
- return settings->RemoteApplicationWorkingDir;
+ case FreeRDP_RemoteAssistanceRCTicket:
+ return settings->RemoteAssistanceRCTicket;
- case FreeRDP_ImeFileName:
- return settings->ImeFileName;
+ case FreeRDP_RemoteAssistanceSessionId:
+ return settings->RemoteAssistanceSessionId;
- case FreeRDP_DrivesToRedirect:
- return settings->DrivesToRedirect;
+ case FreeRDP_ServerHostname:
+ return settings->ServerHostname;
- case FreeRDP_RDP2TCPArgs:
- return settings->RDP2TCPArgs;
+ case FreeRDP_ShellWorkingDirectory:
+ return settings->ShellWorkingDirectory;
+
+ case FreeRDP_TargetNetAddress:
+ return settings->TargetNetAddress;
+
+ case FreeRDP_Username:
+ return settings->Username;
+
+ case FreeRDP_WindowTitle:
+ return settings->WindowTitle;
+
+ case FreeRDP_WmClass:
+ return settings->WmClass;
default:
WLog_ERR(TAG, "[%s] Invalid key index %" PRIuz, __FUNCTION__, id);
@@ -2365,300 +2365,255 @@ BOOL freerdp_settings_set_string(rdpSettings* settings, size_t id, const char* v
switch (id)
{
- case FreeRDP_ServerHostname:
- free(settings->ServerHostname);
- settings->ServerHostname = (val ? _strdup(val) : NULL);
- return (!val || settings->ServerHostname != NULL);
-
- case FreeRDP_Username:
- free(settings->Username);
- settings->Username = (val ? _strdup(val) : NULL);
- return (!val || settings->Username != NULL);
-
- case FreeRDP_Password:
- free(settings->Password);
- settings->Password = (val ? _strdup(val) : NULL);
- return (!val || settings->Password != NULL);
-
- case FreeRDP_Domain:
- free(settings->Domain);
- settings->Domain = (val ? _strdup(val) : NULL);
- return (!val || settings->Domain != NULL);
-
- case FreeRDP_PasswordHash:
- free(settings->PasswordHash);
- settings->PasswordHash = (val ? _strdup(val) : NULL);
- return (!val || settings->PasswordHash != NULL);
-
case FreeRDP_AcceptedCert:
free(settings->AcceptedCert);
settings->AcceptedCert = (val ? _strdup(val) : NULL);
return (!val || settings->AcceptedCert != NULL);
- case FreeRDP_ClientHostname:
- free(settings->ClientHostname);
- settings->ClientHostname = (val ? _strdup(val) : NULL);
- return (!val || settings->ClientHostname != NULL);
-
- case FreeRDP_ClientProductId:
- free(settings->ClientProductId);
- settings->ClientProductId = (val ? _strdup(val) : NULL);
- return (!val || settings->ClientProductId != NULL);
+ case FreeRDP_AllowedTlsCiphers:
+ free(settings->AllowedTlsCiphers);
+ settings->AllowedTlsCiphers = (val ? _strdup(val) : NULL);
+ return (!val || settings->AllowedTlsCiphers != NULL);
case FreeRDP_AlternateShell:
free(settings->AlternateShell);
settings->AlternateShell = (val ? _strdup(val) : NULL);
return (!val || settings->AlternateShell != NULL);
- case FreeRDP_ShellWorkingDirectory:
- free(settings->ShellWorkingDirectory);
- settings->ShellWorkingDirectory = (val ? _strdup(val) : NULL);
- return (!val || settings->ShellWorkingDirectory != NULL);
-
- case FreeRDP_ClientAddress:
- free(settings->ClientAddress);
- settings->ClientAddress = (val ? _strdup(val) : NULL);
- return (!val || settings->ClientAddress != NULL);
-
- case FreeRDP_ClientDir:
- free(settings->ClientDir);
- settings->ClientDir = (val ? _strdup(val) : NULL);
- return (!val || settings->ClientDir != NULL);
-
- case FreeRDP_DynamicDSTTimeZoneKeyName:
- free(settings->DynamicDSTTimeZoneKeyName);
- settings->DynamicDSTTimeZoneKeyName = (val ? _strdup(val) : NULL);
- return (!val || settings->DynamicDSTTimeZoneKeyName != NULL);
-
- case FreeRDP_RemoteAssistanceSessionId:
- free(settings->RemoteAssistanceSessionId);
- settings->RemoteAssistanceSessionId = (val ? _strdup(val) : NULL);
- return (!val || settings->RemoteAssistanceSessionId != NULL);
-
- case FreeRDP_RemoteAssistancePassStub:
- free(settings->RemoteAssistancePassStub);
- settings->RemoteAssistancePassStub = (val ? _strdup(val) : NULL);
- return (!val || settings->RemoteAssistancePassStub != NULL);
-
- case FreeRDP_RemoteAssistancePassword:
- free(settings->RemoteAssistancePassword);
- settings->RemoteAssistancePassword = (val ? _strdup(val) : NULL);
- return (!val || settings->RemoteAssistancePassword != NULL);
-
- case FreeRDP_RemoteAssistanceRCTicket:
- free(settings->RemoteAssistanceRCTicket);
- settings->RemoteAssistanceRCTicket = (val ? _strdup(val) : NULL);
- return (!val || settings->RemoteAssistanceRCTicket != NULL);
+ case FreeRDP_AssistanceFile:
+ free(settings->AssistanceFile);
+ settings->AssistanceFile = (val ? _strdup(val) : NULL);
+ return (!val || settings->AssistanceFile != NULL);
case FreeRDP_AuthenticationServiceClass:
free(settings->AuthenticationServiceClass);
settings->AuthenticationServiceClass = (val ? _strdup(val) : NULL);
return (!val || settings->AuthenticationServiceClass != NULL);
- case FreeRDP_AllowedTlsCiphers:
- free(settings->AllowedTlsCiphers);
- settings->AllowedTlsCiphers = (val ? _strdup(val) : NULL);
- return (!val || settings->AllowedTlsCiphers != NULL);
-
- case FreeRDP_NtlmSamFile:
- free(settings->NtlmSamFile);
- settings->NtlmSamFile = (val ? _strdup(val) : NULL);
- return (!val || settings->NtlmSamFile != NULL);
-
- case FreeRDP_PreconnectionBlob:
- free(settings->PreconnectionBlob);
- settings->PreconnectionBlob = (val ? _strdup(val) : NULL);
- return (!val || settings->PreconnectionBlob != NULL);
-
- case FreeRDP_TargetNetAddress:
- free(settings->TargetNetAddress);
- settings->TargetNetAddress = (val ? _strdup(val) : NULL);
- return (!val || settings->TargetNetAddress != NULL);
-
- case FreeRDP_RedirectionUsername:
- free(settings->RedirectionUsername);
- settings->RedirectionUsername = (val ? _strdup(val) : NULL);
- return (!val || settings->RedirectionUsername != NULL);
-
- case FreeRDP_RedirectionDomain:
- free(settings->RedirectionDomain);
- settings->RedirectionDomain = (val ? _strdup(val) : NULL);
- return (!val || settings->RedirectionDomain != NULL);
-
- case FreeRDP_RedirectionTargetFQDN:
- free(settings->RedirectionTargetFQDN);
- settings->RedirectionTargetFQDN = (val ? _strdup(val) : NULL);
- return (!val || settings->RedirectionTargetFQDN != NULL);
-
- case FreeRDP_RedirectionTargetNetBiosName:
- free(settings->RedirectionTargetNetBiosName);
- settings->RedirectionTargetNetBiosName = (val ? _strdup(val) : NULL);
- return (!val || settings->RedirectionTargetNetBiosName != NULL);
-
- case FreeRDP_RedirectionAcceptedCert:
- free(settings->RedirectionAcceptedCert);
- settings->RedirectionAcceptedCert = (val ? _strdup(val) : NULL);
- return (!val || settings->RedirectionAcceptedCert != NULL);
-
- case FreeRDP_KerberosKdc:
- free(settings->KerberosKdc);
- settings->KerberosKdc = (val ? _strdup(val) : NULL);
- return (!val || settings->KerberosKdc != NULL);
-
- case FreeRDP_KerberosRealm:
- free(settings->KerberosRealm);
- settings->KerberosRealm = (val ? _strdup(val) : NULL);
- return (!val || settings->KerberosRealm != NULL);
+ case FreeRDP_CertificateAcceptedFingerprints:
+ free(settings->CertificateAcceptedFingerprints);
+ settings->CertificateAcceptedFingerprints = (val ? _strdup(val) : NULL);
+ return (!val || settings->CertificateAcceptedFingerprints != NULL);
- case FreeRDP_CertificateName:
- free(settings->CertificateName);
- settings->CertificateName = (val ? _strdup(val) : NULL);
- return (!val || settings->CertificateName != NULL);
+ case FreeRDP_CertificateContent:
+ free(settings->CertificateContent);
+ settings->CertificateContent = (val ? _strdup(val) : NULL);
+ return (!val || settings->CertificateContent != NULL);
case FreeRDP_CertificateFile:
free(settings->CertificateFile);
settings->CertificateFile = (val ? _strdup(val) : NULL);
return (!val || settings->CertificateFile != NULL);
- case FreeRDP_PrivateKeyFile:
- free(settings->PrivateKeyFile);
- settings->PrivateKeyFile = (val ? _strdup(val) : NULL);
- return (!val || settings->PrivateKeyFile != NULL);
-
- case FreeRDP_RdpKeyFile:
- free(settings->RdpKeyFile);
- settings->RdpKeyFile = (val ? _strdup(val) : NULL);
- return (!val || settings->RdpKeyFile != NULL);
-
- case FreeRDP_CertificateContent:
- free(settings->CertificateContent);
- settings->CertificateContent = (val ? _strdup(val) : NULL);
- return (!val || settings->CertificateContent != NULL);
-
- case FreeRDP_PrivateKeyContent:
- free(settings->PrivateKeyContent);
- settings->PrivateKeyContent = (val ? _strdup(val) : NULL);
- return (!val || settings->PrivateKeyContent != NULL);
+ case FreeRDP_CertificateName:
+ free(settings->CertificateName);
+ settings->CertificateName = (val ? _strdup(val) : NULL);
+ return (!val || settings->CertificateName != NULL);
- case FreeRDP_RdpKeyContent:
- free(settings->RdpKeyContent);
- settings->RdpKeyContent = (val ? _strdup(val) : NULL);
- return (!val || settings->RdpKeyContent != NULL);
+ case FreeRDP_ClientAddress:
+ free(settings->ClientAddress);
+ settings->ClientAddress = (val ? _strdup(val) : NULL);
+ return (!val || settings->ClientAddress != NULL);
- case FreeRDP_CertificateAcceptedFingerprints:
- free(settings->CertificateAcceptedFingerprints);
- settings->CertificateAcceptedFingerprints = (val ? _strdup(val) : NULL);
- return (!val || settings->CertificateAcceptedFingerprints != NULL);
+ case FreeRDP_ClientDir:
+ free(settings->ClientDir);
+ settings->ClientDir = (val ? _strdup(val) : NULL);
+ return (!val || settings->ClientDir != NULL);
- case FreeRDP_WindowTitle:
- free(settings->WindowTitle);
- settings->WindowTitle = (val ? _strdup(val) : NULL);
- return (!val || settings->WindowTitle != NULL);
+ case FreeRDP_ClientHostname:
+ free(settings->ClientHostname);
+ settings->ClientHostname = (val ? _strdup(val) : NULL);
+ return (!val || settings->ClientHostname != NULL);
- case FreeRDP_WmClass:
- free(settings->WmClass);
- settings->WmClass = (val ? _strdup(val) : NULL);
- return (!val || settings->WmClass != NULL);
+ case FreeRDP_ClientProductId:
+ free(settings->ClientProductId);
+ settings->ClientProductId = (val ? _strdup(val) : NULL);
+ return (!val || settings->ClientProductId != NULL);
case FreeRDP_ComputerName:
free(settings->ComputerName);
settings->ComputerName = (val ? _strdup(val) : NULL);
return (!val || settings->ComputerName != NULL);
- case FreeRDP_ConnectionFile:
- free(settings->ConnectionFile);
- settings->ConnectionFile = (val ? _strdup(val) : NULL);
- return (!val || settings->ConnectionFile != NULL);
-
- case FreeRDP_AssistanceFile:
- free(settings->AssistanceFile);
- settings->AssistanceFile = (val ? _strdup(val) : NULL);
- return (!val || settings->AssistanceFile != NULL);
-
- case FreeRDP_HomePath:
- free(settings->HomePath);
- settings->HomePath = (val ? _strdup(val) : NULL);
- return (!val || settings->HomePath != NULL);
-
case FreeRDP_ConfigPath:
free(settings->ConfigPath);
settings->ConfigPath = (val ? _strdup(val) : NULL);
return (!val || settings->ConfigPath != NULL);
+ case FreeRDP_ConnectionFile:
+ free(settings->ConnectionFile);
+ settings->ConnectionFile = (val ? _strdup(val) : NULL);
+ return (!val || settings->ConnectionFile != NULL);
+
case FreeRDP_CurrentPath:
free(settings->CurrentPath);
settings->CurrentPath = (val ? _strdup(val) : NULL);
return (!val || settings->CurrentPath != NULL);
+ case FreeRDP_Domain:
+ free(settings->Domain);
+ settings->Domain = (val ? _strdup(val) : NULL);
+ return (!val || settings->Domain != NULL);
+
+ case FreeRDP_DrivesToRedirect:
+ free(settings->DrivesToRedirect);
+ settings->DrivesToRedirect = (val ? _strdup(val) : NULL);
+ return (!val || settings->DrivesToRedirect != NULL);
+
case FreeRDP_DumpRemoteFxFile:
free(settings->DumpRemoteFxFile);
settings->DumpRemoteFxFile = (val ? _strdup(val) : NULL);
return (!val || settings->DumpRemoteFxFile != NULL);
- case FreeRDP_PlayRemoteFxFile:
- free(settings->PlayRemoteFxFile);
- settings->PlayRemoteFxFile = (val ? _strdup(val) : NULL);
- return (!val || settings->PlayRemoteFxFile != NULL);
+ case FreeRDP_DynamicDSTTimeZoneKeyName:
+ free(settings->DynamicDSTTimeZoneKeyName);
+ settings->DynamicDSTTimeZoneKeyName = (val ? _strdup(val) : NULL);
+ return (!val || settings->DynamicDSTTimeZoneKeyName != NULL);
+
+ case FreeRDP_GatewayAcceptedCert:
+ free(settings->GatewayAcceptedCert);
+ settings->GatewayAcceptedCert = (val ? _strdup(val) : NULL);
+ return (!val || settings->GatewayAcceptedCert != NULL);
+
+ case FreeRDP_GatewayAccessToken:
+ free(settings->GatewayAccessToken);
+ settings->GatewayAccessToken = (val ? _strdup(val) : NULL);
+ return (!val || settings->GatewayAccessToken != NULL);
+
+ case FreeRDP_GatewayDomain:
+ free(settings->GatewayDomain);
+ settings->GatewayDomain = (val ? _strdup(val) : NULL);
+ return (!val || settings->GatewayDomain != NULL);
case FreeRDP_GatewayHostname:
free(settings->GatewayHostname);
settings->GatewayHostname = (val ? _strdup(val) : NULL);
return (!val || settings->GatewayHostname != NULL);
+ case FreeRDP_GatewayPassword:
+ free(settings->GatewayPassword);
+ settings->GatewayPassword = (val ? _strdup(val) : NULL);
+ return (!val || settings->GatewayPassword != NULL);
+
case FreeRDP_GatewayUsername:
free(settings->GatewayUsername);
settings->GatewayUsername = (val ? _strdup(val) : NULL);
return (!val || settings->GatewayUsername != NULL);
- case FreeRDP_GatewayPassword:
- free(settings->GatewayPassword);
- settings->GatewayPassword = (val ? _strdup(val) : NULL);
- return (!val || settings->GatewayPassword != NULL);
+ case FreeRDP_HomePath:
+ free(settings->HomePath);
+ settings->HomePath = (val ? _strdup(val) : NULL);
+ return (!val || settings->HomePath != NULL);
- case FreeRDP_GatewayDomain:
- free(settings->GatewayDomain);
- settings->GatewayDomain = (val ? _strdup(val) : NULL);
- return (!val || settings->GatewayDomain != NULL);
+ case FreeRDP_ImeFileName:
+ free(settings->ImeFileName);
+ settings->ImeFileName = (val ? _strdup(val) : NULL);
+ return (!val || settings->ImeFileName != NULL);
- case FreeRDP_GatewayAccessToken:
- free(settings->GatewayAccessToken);
- settings->GatewayAccessToken = (val ? _strdup(val) : NULL);
- return (!val || settings->GatewayAccessToken != NULL);
+ case FreeRDP_KerberosKdc:
+ free(settings->KerberosKdc);
+ settings->KerberosKdc = (val ? _strdup(val) : NULL);
+ return (!val || settings->KerberosKdc != NULL);
- case FreeRDP_GatewayAcceptedCert:
- free(settings->GatewayAcceptedCert);
- settings->GatewayAcceptedCert = (val ? _strdup(val) : NULL);
- return (!val || settings->GatewayAcceptedCert != NULL);
+ case FreeRDP_KerberosRealm:
+ free(settings->KerberosRealm);
+ settings->KerberosRealm = (val ? _strdup(val) : NULL);
+ return (!val || settings->KerberosRealm != NULL);
+
+ case FreeRDP_NtlmSamFile:
+ free(settings->NtlmSamFile);
+ settings->NtlmSamFile = (val ? _strdup(val) : NULL);
+ return (!val || settings->NtlmSamFile != NULL);
+
+ case FreeRDP_Password:
+ free(settings->Password);
+ settings->Password = (val ? _strdup(val) : NULL);
+ return (!val || settings->Password != NULL);
+
+ case FreeRDP_PasswordHash:
+ free(settings->PasswordHash);
+ settings->PasswordHash = (val ? _strdup(val) : NULL);
+ return (!val || settings->PasswordHash != NULL);
+
+ case FreeRDP_PlayRemoteFxFile:
+ free(settings->PlayRemoteFxFile);
+ settings->PlayRemoteFxFile = (val ? _strdup(val) : NULL);
+ return (!val || settings->PlayRemoteFxFile != NULL);
+
+ case FreeRDP_PreconnectionBlob:
+ free(settings->PreconnectionBlob);
+ settings->PreconnectionBlob = (val ? _strdup(val) : NULL);
+ return (!val || settings->PreconnectionBlob != NULL);
+
+ case FreeRDP_PrivateKeyContent:
+ free(settings->PrivateKeyContent);
+ settings->PrivateKeyContent = (val ? _strdup(val) : NULL);
+ return (!val || settings->PrivateKeyContent != NULL);
+
+ case FreeRDP_PrivateKeyFile:
+ free(settings->PrivateKeyFile);
+ settings->PrivateKeyFile = (val ? _strdup(val) : NULL);
+ return (!val || settings->PrivateKeyFile != NULL);
case FreeRDP_ProxyHostname:
free(settings->ProxyHostname);
settings->ProxyHostname = (val ? _strdup(val) : NULL);
return (!val || settings->ProxyHostname != NULL);
+ case FreeRDP_ProxyPassword:
+ free(settings->ProxyPassword);
+ settings->ProxyPassword = (val ? _strdup(val) : NULL);
+ return (!val || settings->ProxyPassword != NULL);
+
case FreeRDP_ProxyUsername:
free(settings->ProxyUsername);
settings->ProxyUsername = (val ? _strdup(val) : NULL);
return (!val || settings->ProxyUsername != NULL);
- case FreeRDP_ProxyPassword:
- free(settings->ProxyPassword);
- settings->ProxyPassword = (val ? _strdup(val) : NULL);
- return (!val || settings->ProxyPassword != NULL);
+ case FreeRDP_RDP2TCPArgs:
+ free(settings->RDP2TCPArgs);
+ settings->RDP2TCPArgs = (val ? _strdup(val) : NULL);
+ return (!val || settings->RDP2TCPArgs != NULL);
- case FreeRDP_RemoteApplicationName:
- free(settings->RemoteApplicationName);
- settings->RemoteApplicationName = (val ? _strdup(val) : NULL);
- return (!val || settings->RemoteApplicationName != NULL);
+ case FreeRDP_RdpKeyContent:
+ free(settings->RdpKeyContent);
+ settings->RdpKeyContent = (val ? _strdup(val) : NULL);
+ return (!val || settings->RdpKeyContent != NULL);
- case FreeRDP_RemoteApplicationIcon:
- free(settings->RemoteApplicationIcon);
- settings->RemoteApplicationIcon = (val ? _strdup(val) : NULL);
- return (!val || settings->RemoteApplicationIcon != NULL);
+ case FreeRDP_RdpKeyFile:
+ free(settings->RdpKeyFile);
+ settings->RdpKeyFile = (val ? _strdup(val) : NULL);
+ return (!val || settings->RdpKeyFile != NULL);
- case FreeRDP_RemoteApplicationProgram:
- free(settings->RemoteApplicationProgram);
- settings->RemoteApplicationProgram = (val ? _strdup(val) : NULL);
- return (!val || settings->RemoteApplicationProgram != NULL);
+ case FreeRDP_RedirectionAcceptedCert:
+ free(settings->RedirectionAcceptedCert);
+ settings->RedirectionAcceptedCert = (val ? _strdup(val) : NULL);
+ return (!val || settings->RedirectionAcceptedCert != NULL);
+
+ case FreeRDP_RedirectionDomain:
+ free(settings->RedirectionDomain);
+ settings->RedirectionDomain = (val ? _strdup(val) : NULL);
+ return (!val || settings->RedirectionDomain != NULL);
+
+ case FreeRDP_RedirectionTargetFQDN:
+ free(settings->RedirectionTargetFQDN);
+ settings->RedirectionTargetFQDN = (val ? _strdup(val) : NULL);
+ return (!val || settings->RedirectionTargetFQDN != NULL);
+
+ case FreeRDP_RedirectionTargetNetBiosName:
+ free(settings->RedirectionTargetNetBiosName);
+ settings->RedirectionTargetNetBiosName = (val ? _strdup(val) : NULL);
+ return (!val || settings->RedirectionTargetNetBiosName != NULL);
+
+ case FreeRDP_RedirectionUsername:
+ free(settings->RedirectionUsername);
+ settings->RedirectionUsername = (val ? _strdup(val) : NULL);
+ return (!val || settings->RedirectionUsername != NULL);
+
+ case FreeRDP_RemoteApplicationCmdLine:
+ free(settings->RemoteApplicationCmdLine);
+ settings->RemoteApplicationCmdLine = (val ? _strdup(val) : NULL);
+ return (!val || settings->RemoteApplicationCmdLine != NULL);
case FreeRDP_RemoteApplicationFile:
free(settings->RemoteApplicationFile);
@@ -2670,30 +2625,75 @@ BOOL freerdp_settings_set_string(rdpSettings* settings, size_t id, const char* v
settings->RemoteApplicationGuid = (val ? _strdup(val) : NULL);
return (!val || settings->RemoteApplicationGuid != NULL);
- case FreeRDP_RemoteApplicationCmdLine:
- free(settings->RemoteApplicationCmdLine);
- settings->RemoteApplicationCmdLine = (val ? _strdup(val) : NULL);
- return (!val || settings->RemoteApplicationCmdLine != NULL);
+ case FreeRDP_RemoteApplicationIcon:
+ free(settings->RemoteApplicationIcon);
+ settings->RemoteApplicationIcon = (val ? _strdup(val) : NULL);
+ return (!val || settings->RemoteApplicationIcon != NULL);
+
+ case FreeRDP_RemoteApplicationName:
+ free(settings->RemoteApplicationName);
+ settings->RemoteApplicationName = (val ? _strdup(val) : NULL);
+ return (!val || settings->RemoteApplicationName != NULL);
+
+ case FreeRDP_RemoteApplicationProgram:
+ free(settings->RemoteApplicationProgram);
+ settings->RemoteApplicationProgram = (val ? _strdup(val) : NULL);
+ return (!val || settings->RemoteApplicationProgram != NULL);
case FreeRDP_RemoteApplicationWorkingDir:
free(settings->RemoteApplicationWorkingDir);
settings->RemoteApplicationWorkingDir = (val ? _strdup(val) : NULL);
return (!val || settings->RemoteApplicationWorkingDir != NULL);
- case FreeRDP_ImeFileName:
- free(settings->ImeFileName);
- settings->ImeFileName = (val ? _strdup(val) : NULL);
- return (!val || settings->ImeFileName != NULL);
+ case FreeRDP_RemoteAssistancePassStub:
+ free(settings->RemoteAssistancePassStub);
+ settings->RemoteAssistancePassStub = (val ? _strdup(val) : NULL);
+ return (!val || settings->RemoteAssistancePassStub != NULL);
- case FreeRDP_DrivesToRedirect:
- free(settings->DrivesToRedirect);
- settings->DrivesToRedirect = (val ? _strdup(val) : NULL);
- return (!val || settings->DrivesToRedirect != NULL);
+ case FreeRDP_RemoteAssistancePassword:
+ free(settings->RemoteAssistancePassword);
+ settings->RemoteAssistancePassword = (val ? _strdup(val) : NULL);
+ return (!val || settings->RemoteAssistancePassword != NULL);
- case FreeRDP_RDP2TCPArgs:
- free(settings->RDP2TCPArgs);
- settings->RDP2TCPArgs = (val ? _strdup(val) : NULL);
- return (!val || settings->RDP2TCPArgs != NULL);
+ case FreeRDP_RemoteAssistanceRCTicket:
+ free(settings->RemoteAssistanceRCTicket);
+ settings->RemoteAssistanceRCTicket = (val ? _strdup(val) : NULL);
+ return (!val || settings->RemoteAssistanceRCTicket != NULL);
+
+ case FreeRDP_RemoteAssistanceSessionId:
+ free(settings->RemoteAssistanceSessionId);
+ settings->RemoteAssistanceSessionId = (val ? _strdup(val) : NULL);
+ return (!val || settings->RemoteAssistanceSessionId != NULL);
+
+ case FreeRDP_ServerHostname:
+ free(settings->ServerHostname);
+ settings->ServerHostname = (val ? _strdup(val) : NULL);
+ return (!val || settings->ServerHostname != NULL);
+
+ case FreeRDP_ShellWorkingDirectory:
+ free(settings->ShellWorkingDirectory);
+ settings->ShellWorkingDirectory = (val ? _strdup(val) : NULL);
+ return (!val || settings->ShellWorkingDirectory != NULL);
+
+ case FreeRDP_TargetNetAddress:
+ free(settings->TargetNetAddress);
+ settings->TargetNetAddress = (val ? _strdup(val) : NULL);
+ return (!val || settings->TargetNetAddress != NULL);
+
+ case FreeRDP_Username:
+ free(settings->Username);
+ settings->Username = (val ? _strdup(val) : NULL);
+ return (!val || settings->Username != NULL);
+
+ case FreeRDP_WindowTitle:
+ free(settings->WindowTitle);
+ settings->WindowTitle = (val ? _strdup(val) : NULL);
+ return (!val || settings->WindowTitle != NULL);
+
+ case FreeRDP_WmClass:
+ free(settings->WmClass);
+ settings->WmClass = (val ? _strdup(val) : NULL);
+ return (!val || settings->WmClass != NULL);
default:
WLog_ERR(TAG, "[%s] Invalid key index %" PRIuz, __FUNCTION__, id);
@@ -2709,68 +2709,56 @@ const void* freerdp_settings_get_pointer(const rdpSettings* settings, size_t id)
switch (id)
{
- case FreeRDP_instance:
- return settings->instance;
-
- case FreeRDP_RdpServerCertificate:
- return settings->RdpServerCertificate;
-
- case FreeRDP_ServerAutoReconnectCookie:
- return settings->ServerAutoReconnectCookie;
-
case FreeRDP_BitmapCacheV2CellInfo:
return settings->BitmapCacheV2CellInfo;
- case FreeRDP_RdpServerRsaKey:
- return settings->RdpServerRsaKey;
-
- case FreeRDP_MonitorIds:
- return settings->MonitorIds;
-
- case FreeRDP_TargetNetPorts:
- return settings->TargetNetPorts;
-
- case FreeRDP_MonitorDefArray:
- return settings->MonitorDefArray;
-
case FreeRDP_ChannelDefArray:
return settings->ChannelDefArray;
case FreeRDP_ClientAutoReconnectCookie:
return settings->ClientAutoReconnectCookie;
- case FreeRDP_TargetNetAddresses:
- return settings->TargetNetAddresses;
+ case FreeRDP_ClientRandom:
+ return settings->ClientRandom;
- case FreeRDP_StaticChannelArray:
- return settings->StaticChannelArray;
+ case FreeRDP_ClientTimeZone:
+ return settings->ClientTimeZone;
+
+ case FreeRDP_DeviceArray:
+ return settings->DeviceArray;
case FreeRDP_DynamicChannelArray:
return settings->DynamicChannelArray;
- case FreeRDP_DeviceArray:
- return settings->DeviceArray;
+ case FreeRDP_FragCache:
+ return settings->FragCache;
case FreeRDP_GlyphCache:
return settings->GlyphCache;
- case FreeRDP_FragCache:
- return settings->FragCache;
+ case FreeRDP_LoadBalanceInfo:
+ return settings->LoadBalanceInfo;
- case FreeRDP_ClientTimeZone:
- return settings->ClientTimeZone;
+ case FreeRDP_MonitorDefArray:
+ return settings->MonitorDefArray;
- case FreeRDP_ServerRandom:
- return settings->ServerRandom;
+ case FreeRDP_MonitorIds:
+ return settings->MonitorIds;
- case FreeRDP_ServerCertificate:
- return settings->ServerCertificate;
+ case FreeRDP_OrderSupport:
+ return settings->OrderSupport;
- case FreeRDP_ClientRandom:
- return settings->ClientRandom;
+ case FreeRDP_Password51:
+ return settings->Password51;
- case FreeRDP_LoadBalanceInfo:
- return settings->LoadBalanceInfo;
+ case FreeRDP_RdpServerCertificate:
+ return settings->RdpServerCertificate;
+
+ case FreeRDP_RdpServerRsaKey:
+ return settings->RdpServerRsaKey;
+
+ case FreeRDP_ReceivedCapabilities:
+ return settings->ReceivedCapabilities;
case FreeRDP_RedirectionPassword:
return settings->RedirectionPassword;
@@ -2778,14 +2766,26 @@ const void* freerdp_settings_get_pointer(const rdpSettings* settings, size_t id)
case FreeRDP_RedirectionTsvUrl:
return settings->RedirectionTsvUrl;
- case FreeRDP_Password51:
- return settings->Password51;
+ case FreeRDP_ServerAutoReconnectCookie:
+ return settings->ServerAutoReconnectCookie;
- case FreeRDP_ReceivedCapabilities:
- return settings->ReceivedCapabilities;
+ case FreeRDP_ServerCertificate:
+ return settings->ServerCertificate;
- case FreeRDP_OrderSupport:
- return settings->OrderSupport;
+ case FreeRDP_ServerRandom:
+ return settings->ServerRandom;
+
+ case FreeRDP_StaticChannelArray:
+ return settings->StaticChannelArray;
+
+ case FreeRDP_TargetNetAddresses:
+ return settings->TargetNetAddresses;
+
+ case FreeRDP_TargetNetPorts:
+ return settings->TargetNetPorts;
+
+ case FreeRDP_instance:
+ return settings->instance;
default:
WLog_ERR(TAG, "[%s] Invalid key index %" PRIuz, __FUNCTION__, id);
diff --git a/libfreerdp/common/settings_str.c b/libfreerdp/common/settings_str.c
new file mode 100644
index 000000000..8ba0b38ae
--- /dev/null
+++ b/libfreerdp/common/settings_str.c
@@ -0,0 +1,434 @@
+/* Generated by */
+
+#include <freerdp/settings.h>
+#include <freerdp/log.h>
+
+#define TAG FREERDP_TAG("common.settings")
+
+struct settings_str_entry
+{
+ size_t id;
+ size_t type;
+ const char* str;
+};
+static const struct settings_str_entry settings_map[] = {
+ { FreeRDP_AllowCacheWaitingList, 0, "FreeRDP_AllowCacheWaitingList" },
+ { FreeRDP_AllowDesktopComposition, 0, "FreeRDP_AllowDesktopComposition" },
+ { FreeRDP_AllowFontSmoothing, 0, "FreeRDP_AllowFontSmoothing" },
+ { FreeRDP_AllowUnanouncedOrdersFromServer, 0, "FreeRDP_AllowUnanouncedOrdersFromServer" },
+ { FreeRDP_AltSecFrameMarkerSupport, 0, "FreeRDP_AltSecFrameMarkerSupport" },
+ { FreeRDP_AsyncChannels, 0, "FreeRDP_AsyncChannels" },
+ { FreeRDP_AsyncInput, 0, "FreeRDP_AsyncInput" },
+ { FreeRDP_AsyncUpdate, 0, "FreeRDP_AsyncUpdate" },
+ { FreeRDP_AudioCapture, 0, "FreeRDP_AudioCapture" },
+ { FreeRDP_AudioPlayback, 0, "FreeRDP_AudioPlayback" },
+ { FreeRDP_Authentication, 0, "FreeRDP_Authentication" },
+ { FreeRDP_AuthenticationOnly, 0, "FreeRDP_AuthenticationOnly" },
+ { FreeRDP_AutoAcceptCertificate, 0, "FreeRDP_AutoAcceptCertificate" },
+ { FreeRDP_AutoDenyCertificate, 0, "FreeRDP_AutoDenyCertificate" },
+ { FreeRDP_AutoLogonEnabled, 0, "FreeRDP_AutoLogonEnabled" },
+ { FreeRDP_AutoReconnectionEnabled, 0, "FreeRDP_AutoReconnectionEnabled" },
+ { FreeRDP_BitmapCacheEnabled, 0, "FreeRDP_BitmapCacheEnabled" },
+ { FreeRDP_BitmapCachePersistEnabled, 0, "FreeRDP_BitmapCachePersistEnabled" },
+ { FreeRDP_BitmapCacheV3Enabled, 0, "FreeRDP_BitmapCacheV3Enabled" },
+ { FreeRDP_BitmapCompressionDisabled, 0, "FreeRDP_BitmapCompressionDisabled" },
+ { FreeRDP_ColorPointerFlag, 0, "FreeRDP_ColorPointerFlag" },
+ { FreeRDP_CompressionEnabled, 0, "FreeRDP_CompressionEnabled" },
+ { FreeRDP_ConsoleSession, 0, "FreeRDP_ConsoleSession" },
+ { FreeRDP_CredentialsFromStdin, 0, "FreeRDP_CredentialsFromStdin" },
+ { FreeRDP_Decorations, 0, "FreeRDP_Decorations" },
+ { FreeRDP_DesktopResize, 0, "FreeRDP_DesktopResize" },
+ { FreeRDP_DeviceRedirection, 0, "FreeRDP_DeviceRedirection" },
+ { FreeRDP_DisableCredentialsDelegation, 0, "FreeRDP_DisableCredentialsDelegation" },
+ { FreeRDP_DisableCtrlAltDel, 0, "FreeRDP_DisableCtrlAltDel" },
+ { FreeRDP_DisableCursorBlinking, 0, "FreeRDP_DisableCursorBlinking" },
+ { FreeRDP_DisableCursorShadow, 0, "FreeRDP_DisableCursorShadow" },
+ { FreeRDP_DisableFullWindowDrag, 0, "FreeRDP_DisableFullWindowDrag" },
+ { FreeRDP_DisableMenuAnims, 0, "FreeRDP_DisableMenuAnims" },
+ { FreeRDP_DisableRemoteAppCapsCheck, 0, "FreeRDP_DisableRemoteAppCapsCheck" },
+ { FreeRDP_DisableThemes, 0, "FreeRDP_DisableThemes" },
+ { FreeRDP_DisableWallpaper, 0, "FreeRDP_DisableWallpaper" },
+ { FreeRDP_DrawAllowColorSubsampling, 0, "FreeRDP_DrawAllowColorSubsampling" },
+ { FreeRDP_DrawAllowDynamicColorFidelity, 0, "FreeRDP_DrawAllowDynamicColorFidelity" },
+ { FreeRDP_DrawAllowSkipAlpha, 0, "FreeRDP_DrawAllowSkipAlpha" },
+ { FreeRDP_DrawGdiPlusCacheEnabled, 0, "FreeRDP_DrawGdiPlusCacheEnabled" },
+ { FreeRDP_DrawGdiPlusEnabled, 0, "FreeRDP_DrawGdiPlusEnabled" },
+ { FreeRDP_DrawNineGridEnabled, 0, "FreeRDP_DrawNineGridEnabled" },
+ { FreeRDP_DumpRemoteFx, 0, "FreeRDP_DumpRemoteFx" },
+ { FreeRDP_DynamicDaylightTimeDisabled, 0, "FreeRDP_DynamicDaylightTimeDisabled" },
+ { FreeRDP_DynamicResolutionUpdate, 0, "FreeRDP_DynamicResolutionUpdate" },
+ { FreeRDP_EmbeddedWindow, 0, "FreeRDP_EmbeddedWindow" },
+ { FreeRDP_EnableWindowsKey, 0, "FreeRDP_EnableWindowsKey" },
+ { FreeRDP_EncomspVirtualChannel, 0, "FreeRDP_EncomspVirtualChannel" },
+ { FreeRDP_ExtSecurity, 0, "FreeRDP_ExtSecurity" },
+ { FreeRDP_ExternalCertificateManagement, 0, "FreeRDP_ExternalCertificateManagement" },
+ { FreeRDP_FIPSMode, 0, "FreeRDP_FIPSMode" },
+ { FreeRDP_FastPathInput, 0, "FreeRDP_FastPathInput" },
+ { FreeRDP_FastPathOutput, 0, "FreeRDP_FastPathOutput" },
+ { FreeRDP_ForceEncryptedCsPdu, 0, "FreeRDP_ForceEncryptedCsPdu" },
+ { FreeRDP_ForceMultimon, 0, "FreeRDP_ForceMultimon" },
+ { FreeRDP_FrameMarkerCommandEnabled, 0, "FreeRDP_FrameMarkerCommandEnabled" },
+ { FreeRDP_Fullscreen, 0, "FreeRDP_Fullscreen" },
+ { FreeRDP_GatewayBypassLocal, 0, "FreeRDP_GatewayBypassLocal" },
+ { FreeRDP_GatewayEnabled, 0, "FreeRDP_GatewayEnabled" },
+ { FreeRDP_GatewayHttpTransport, 0, "FreeRDP_GatewayHttpTransport" },
+ { FreeRDP_GatewayRpcTransport, 0, "FreeRDP_GatewayRpcTransport" },
+ { FreeRDP_GatewayUdpTransport, 0, "FreeRDP_GatewayUdpTransport" },
+ { FreeRDP_GatewayUseSameCredentials, 0, "FreeRDP_GatewayUseSameCredentials" },
+ { FreeRDP_GfxAVC444, 0, "FreeRDP_GfxAVC444" },
+ { FreeRDP_GfxAVC444v2, 0, "FreeRDP_GfxAVC444v2" },
+ { FreeRDP_GfxH264, 0, "FreeRDP_GfxH264" },
+ { FreeRDP_GfxProgressive, 0, "FreeRDP_GfxProgressive" },
+ { FreeRDP_GfxProgressiveV2, 0, "FreeRDP_GfxProgressiveV2" },
+ { FreeRDP_GfxSendQoeAck, 0, "FreeRDP_GfxSendQoeAck" },
+ { FreeRDP_GfxSmallCache, 0, "FreeRDP_GfxSmallCache" },
+ { FreeRDP_GfxThinClient, 0, "FreeRDP_GfxThinClient" },
+ { FreeRDP_GrabKeyboard, 0, "FreeRDP_GrabKeyboard" },
+ { FreeRDP_HasExtendedMouseEvent, 0, "FreeRDP_HasExtendedMouseEvent" },
+ { FreeRDP_HasHorizontalWheel, 0, "FreeRDP_HasHorizontalWheel" },
+ { FreeRDP_HasMonitorAttributes, 0, "FreeRDP_HasMonitorAttributes" },
+ { FreeRDP_HiDefRemoteApp, 0, "FreeRDP_HiDefRemoteApp" },
+ { FreeRDP_IPv6Enabled, 0, "FreeRDP_IPv6Enabled" },
+ { FreeRDP_IgnoreCertificate, 0, "FreeRDP_IgnoreCertificate" },
+ { FreeRDP_JpegCodec, 0, "FreeRDP_JpegCodec" },
+ { FreeRDP_ListMonitors, 0, "FreeRDP_ListMonitors" },
+ { FreeRDP_LocalConnection, 0, "FreeRDP_LocalConnection" },
+ { FreeRDP_LogonErrors, 0, "FreeRDP_LogonErrors" },
+ { FreeRDP_LogonNotify, 0, "FreeRDP_LogonNotify" },
+ { FreeRDP_LongCredentialsSupported, 0, "FreeRDP_LongCredentialsSupported" },
+ { FreeRDP_LyncRdpMode, 0, "FreeRDP_LyncRdpMode" },
+ { FreeRDP_MaximizeShell, 0, "FreeRDP_MaximizeShell" },
+ { FreeRDP_MouseAttached, 0, "FreeRDP_MouseAttached" },
+ { FreeRDP_MouseHasWheel, 0, "FreeRDP_MouseHasWheel" },
+ { FreeRDP_MouseMotion, 0, "FreeRDP_MouseMotion" },
+ { FreeRDP_MstscCookieMode, 0, "FreeRDP_MstscCookieMode" },
+ { FreeRDP_MultiTouchGestures, 0, "FreeRDP_MultiTouchGestures" },
+ { FreeRDP_MultiTouchInput, 0, "FreeRDP_MultiTouchInput" },
+ { FreeRDP_NSCodec, 0, "FreeRDP_NSCodec" },
+ { FreeRDP_NSCodecAllowDynamicColorFidelity, 0, "FreeRDP_NSCodecAllowDynamicColorFidelity" },
+ { FreeRDP_NSCodecAllowSubsampling, 0, "FreeRDP_NSCodecAllowSubsampling" },
+ { FreeRDP_NegotiateSecurityLayer, 0, "FreeRDP_NegotiateSecurityLayer" },
+ { FreeRDP_NetworkAutoDetect, 0, "FreeRDP_NetworkAutoDetect" },
+ { FreeRDP_NlaSecurity, 0, "FreeRDP_NlaSecurity" },
+ { FreeRDP_NoBitmapCompressionHeader, 0, "FreeRDP_NoBitmapCompressionHeader" },
+ { FreeRDP_OldLicenseBehaviour, 0, "FreeRDP_OldLicenseBehaviour" },
+ { FreeRDP_PasswordIsSmartcardPin, 0, "FreeRDP_PasswordIsSmartcardPin" },
+ { FreeRDP_PercentScreenUseHeight, 0, "FreeRDP_PercentScreenUseHeight" },
+ { FreeRDP_PercentScreenUseWidth, 0, "FreeRDP_PercentScreenUseWidth" },
+ { FreeRDP_PlayRemoteFx, 0, "FreeRDP_PlayRemoteFx" },
+ { FreeRDP_PreferIPv6OverIPv4, 0, "FreeRDP_PreferIPv6OverIPv4" },
+ { FreeRDP_PrintReconnectCookie, 0, "FreeRDP_PrintReconnectCookie" },
+ { FreeRDP_PromptForCredentials, 0, "FreeRDP_PromptForCredentials" },
+ { FreeRDP_RdpSecurity, 0, "FreeRDP_RdpSecurity" },
+ { FreeRDP_RedirectClipboard, 0, "FreeRDP_RedirectClipboard" },
+ { FreeRDP_RedirectDrives, 0, "FreeRDP_RedirectDrives" },
+ { FreeRDP_RedirectHomeDrive, 0, "FreeRDP_RedirectHomeDrive" },
+ { FreeRDP_RedirectParallelPorts, 0, "FreeRDP_RedirectParallelPorts" },
+ { FreeRDP_RedirectPrinters, 0, "FreeRDP_RedirectPrinters" },
+ { FreeRDP_RedirectSerialPorts, 0, "FreeRDP_RedirectSerialPorts" },
+ { FreeRDP_RedirectSmartCards, 0, "FreeRDP_RedirectSmartCards" },
+ { FreeRDP_RefreshRect, 0, "FreeRDP_RefreshRect" },
+ { FreeRDP_RemdeskVirtualChannel, 0, "FreeRDP_RemdeskVirtualChannel" },
+ { FreeRDP_RemoteAppLanguageBarSupported, 0, "FreeRDP_RemoteAppLanguageBarSupported" },
+ { FreeRDP_RemoteApplicationMode, 0, "FreeRDP_RemoteApplicationMode" },
+ { FreeRDP_RemoteAssistanceMode, 0, "FreeRDP_RemoteAssistanceMode" },
+ { FreeRDP_RemoteAssistanceRequestControl, 0, "FreeRDP_RemoteAssistanceRequestControl" },
+ { FreeRDP_RemoteConsoleAudio, 0, "FreeRDP_RemoteConsoleAudio" },
+ { FreeRDP_RemoteFxCodec, 0, "FreeRDP_RemoteFxCodec" },
+ { FreeRDP_RemoteFxImageCodec, 0, "FreeRDP_RemoteFxImageCodec" },
+ { FreeRDP_RemoteFxOnly, 0, "FreeRDP_RemoteFxOnly" },
+ { FreeRDP_RestrictedAdminModeRequired, 0, "FreeRDP_RestrictedAdminModeRequired" },
+ { FreeRDP_SaltedChecksum, 0, "FreeRDP_SaltedChecksum" },
+ { FreeRDP_SendPreconnectionPdu, 0, "FreeRDP_SendPreconnectionPdu" },
+ { FreeRDP_ServerMode, 0, "FreeRDP_ServerMode" },
+ { FreeRDP_SmartSizing, 0, "FreeRDP_SmartSizing" },
+ { FreeRDP_SmartcardLogon, 0, "FreeRDP_SmartcardLogon" },
+ { FreeRDP_SoftwareGdi, 0, "FreeRDP_SoftwareGdi" },
+ { FreeRDP_SoundBeepsEnabled, 0, "FreeRDP_SoundBeepsEnabled" },
+ { FreeRDP_SpanMonitors, 0, "FreeRDP_SpanMonitors" },
+ { FreeRDP_SupportAsymetricKeys, 0, "FreeRDP_SupportAsymetricKeys" },
+ { FreeRDP_SupportDisplayControl, 0, "FreeRDP_SupportDisplayControl" },
+ { FreeRDP_SupportDynamicChannels, 0, "FreeRDP_SupportDynamicChannels" },
+ { FreeRDP_SupportDynamicTimeZone, 0, "FreeRDP_SupportDynamicTimeZone" },
+ { FreeRDP_SupportEchoChannel, 0, "FreeRDP_SupportEchoChannel" },
+ { FreeRDP_SupportErrorInfoPdu, 0, "FreeRDP_SupportErrorInfoPdu" },
+ { FreeRDP_SupportGeometryTracking, 0, "FreeRDP_SupportGeometryTracking" },
+ { FreeRDP_SupportGraphicsPipeline, 0, "FreeRDP_SupportGraphicsPipeline" },
+ { FreeRDP_SupportHeartbeatPdu, 0, "FreeRDP_SupportHeartbeatPdu" },
+ { FreeRDP_SupportMonitorLayoutPdu, 0, "FreeRDP_SupportMonitorLayoutPdu" },
+ { FreeRDP_SupportMultitransport, 0, "FreeRDP_SupportMultitransport" },
+ { FreeRDP_SupportSSHAgentChannel, 0, "FreeRDP_SupportSSHAgentChannel" },
+ { FreeRDP_SupportStatusInfoPdu, 0, "FreeRDP_SupportStatusInfoPdu" },
+ { FreeRDP_SupportVideoOptimized, 0, "FreeRDP_SupportVideoOptimized" },
+ { FreeRDP_SuppressOutput, 0, "FreeRDP_SuppressOutput" },
+ { FreeRDP_SurfaceCommandsEnabled, 0, "FreeRDP_SurfaceCommandsEnabled" },
+ { FreeRDP_SurfaceFrameMarkerEnabled, 0, "FreeRDP_SurfaceFrameMarkerEnabled" },
+ { FreeRDP_TcpKeepAlive, 0, "FreeRDP_TcpKeepAlive" },
+ { FreeRDP_TlsSecurity, 0, "FreeRDP_TlsSecurity" },
+ { FreeRDP_ToggleFullscreen, 0, "FreeRDP_ToggleFullscreen" },
+ { FreeRDP_UnicodeInput, 0, "FreeRDP_UnicodeInput" },
+ { FreeRDP_UnmapButtons, 0, "FreeRDP_UnmapButtons" },
+ { FreeRDP_UseMultimon, 0, "FreeRDP_UseMultimon" },
+ { FreeRDP_UseRdpSecurityLayer, 0, "FreeRDP_UseRdpSecurityLayer" },
+ { FreeRDP_UsingSavedCredentials, 0, "FreeRDP_UsingSavedCredentials" },
+ { FreeRDP_VideoDisable, 0, "FreeRDP_VideoDisable" },
+ { FreeRDP_VmConnectMode, 0, "FreeRDP_VmConnectMode" },
+ { FreeRDP_WaitForOutputBufferFlush, 0, "FreeRDP_WaitForOutputBufferFlush" },
+ { FreeRDP_Workarea, 0, "FreeRDP_Workarea" },
+ { FreeRDP_DesktopOrientation, 1, "FreeRDP_DesktopOrientation" },
+ { FreeRDP_ProxyPort, 1, "FreeRDP_ProxyPort" },
+ { FreeRDP_AcceptedCertLength, 3, "FreeRDP_AcceptedCertLength" },
+ { FreeRDP_AuthenticationLevel, 3, "FreeRDP_AuthenticationLevel" },
+ { FreeRDP_AutoReconnectMaxRetries, 3, "FreeRDP_AutoReconnectMaxRetries" },
+ { FreeRDP_BitmapCacheV2NumCells, 3, "FreeRDP_BitmapCacheV2NumCells" },
+ { FreeRDP_BitmapCacheV3CodecId, 3, "FreeRDP_BitmapCacheV3CodecId" },
+ { FreeRDP_BitmapCacheVersion, 3, "FreeRDP_BitmapCacheVersion" },
+ { FreeRDP_BrushSupportLevel, 3, "FreeRDP_BrushSupportLevel" },
+ { FreeRDP_ChannelCount, 3, "FreeRDP_ChannelCount" },
+ { FreeRDP_ChannelDefArraySize, 3, "FreeRDP_ChannelDefArraySize" },
+ { FreeRDP_ClientBuild, 3, "FreeRDP_ClientBuild" },
+ { FreeRDP_ClientRandomLength, 3, "FreeRDP_ClientRandomLength" },
+ { FreeRDP_ClusterInfoFlags, 3, "FreeRDP_ClusterInfoFlags" },
+ { FreeRDP_ColorDepth, 3, "FreeRDP_ColorDepth" },
+ { FreeRDP_CompDeskSupportLevel, 3, "FreeRDP_CompDeskSupportLevel" },
+ { FreeRDP_CompressionLevel, 3, "FreeRDP_CompressionLevel" },
+ { FreeRDP_ConnectionType, 3, "FreeRDP_ConnectionType" },
+ { FreeRDP_CookieMaxLength, 3, "FreeRDP_CookieMaxLength" },
+ { FreeRDP_DesktopHeight, 3, "FreeRDP_DesktopHeight" },
+ { FreeRDP_DesktopPhysicalHeight, 3, "FreeRDP_DesktopPhysicalHeight" },
+ { FreeRDP_DesktopPhysicalWidth, 3, "FreeRDP_DesktopPhysicalWidth" },
+ { FreeRDP_DesktopPosX, 3, "FreeRDP_DesktopPosX" },
+ { FreeRDP_DesktopPosY, 3, "FreeRDP_DesktopPosY" },
+ { FreeRDP_DesktopScaleFactor, 3, "FreeRDP_DesktopScaleFactor" },
+ { FreeRDP_DesktopWidth, 3, "FreeRDP_DesktopWidth" },
+ { FreeRDP_DeviceArraySize, 3, "FreeRDP_DeviceArraySize" },
+ { FreeRDP_DeviceCount, 3, "FreeRDP_DeviceCount" },
+ { FreeRDP_DeviceScaleFactor, 3, "FreeRDP_DeviceScaleFactor" },
+ { FreeRDP_DrawNineGridCacheEntries, 3, "FreeRDP_DrawNineGridCacheEntries" },
+ { FreeRDP_DrawNineGridCacheSize, 3, "FreeRDP_DrawNineGridCacheSize" },
+ { FreeRDP_DynamicChannelArraySize, 3, "FreeRDP_DynamicChannelArraySize" },
+ { FreeRDP_DynamicChannelCount, 3, "FreeRDP_DynamicChannelCount" },
+ { FreeRDP_EarlyCapabilityFlags, 3, "FreeRDP_EarlyCapabilityFlags" },
+ { FreeRDP_EncryptionLevel, 3, "FreeRDP_EncryptionLevel" },
+ { FreeRDP_EncryptionMethods, 3, "FreeRDP_EncryptionMethods" },
+ { FreeRDP_ExtEncryptionMethods, 3, "FreeRDP_ExtEncryptionMethods" },
+ { FreeRDP_FrameAcknowledge, 3, "FreeRDP_FrameAcknowledge" },
+ { FreeRDP_GatewayAcceptedCertLength, 3, "FreeRDP_GatewayAcceptedCertLength" },
+ { FreeRDP_GatewayCredentialsSource, 3, "FreeRDP_GatewayCredentialsSource" },
+ { FreeRDP_GatewayPort, 3, "FreeRDP_GatewayPort" },
+ { FreeRDP_GatewayUsageMethod, 3, "FreeRDP_GatewayUsageMethod" },
+ { FreeRDP_GfxCapsFilter, 3, "FreeRDP_GfxCapsFilter" },
+ { FreeRDP_GlyphSupportLevel, 3, "FreeRDP_GlyphSupportLevel" },
+ { FreeRDP_JpegCodecId, 3, "FreeRDP_JpegCodecId" },
+ { FreeRDP_JpegQuality, 3, "FreeRDP_JpegQuality" },
+ { FreeRDP_KeyboardCodePage, 3, "FreeRDP_KeyboardCodePage" },
+ { FreeRDP_KeyboardFunctionKey, 3, "FreeRDP_KeyboardFunctionKey" },
+ { FreeRDP_KeyboardHook, 3, "FreeRDP_KeyboardHook" },
+ { FreeRDP_KeyboardLayout, 3, "FreeRDP_KeyboardLayout" },
+ { FreeRDP_KeyboardSubType, 3, "FreeRDP_KeyboardSubType" },
+ { FreeRDP_KeyboardType, 3, "FreeRDP_KeyboardType" },
+ { FreeRDP_LargePointerFlag, 3, "FreeRDP_LargePointerFlag" },
+ { FreeRDP_LoadBalanceInfoLength, 3, "FreeRDP_LoadBalanceInfoLength" },
+ { FreeRDP_MaxTimeInCheckLoop, 3, "FreeRDP_MaxTimeInCheckLoop" },
+ { FreeRDP_MonitorCount, 3, "FreeRDP_MonitorCount" },
+ { FreeRDP_MonitorDefArraySize, 3, "FreeRDP_MonitorDefArraySize" },
+ { FreeRDP_MonitorLocalShiftX, 3, "FreeRDP_MonitorLocalShiftX" },
+ { FreeRDP_MonitorLocalShiftY, 3, "FreeRDP_MonitorLocalShiftY" },
+ { FreeRDP_MultifragMaxRequestSize, 3, "FreeRDP_MultifragMaxRequestSize" },
+ { FreeRDP_MultitransportFlags, 3, "FreeRDP_MultitransportFlags" },
+ { FreeRDP_NSCodecColorLossLevel, 3, "FreeRDP_NSCodecColorLossLevel" },
+ { FreeRDP_NSCodecId, 3, "FreeRDP_NSCodecId" },
+ { FreeRDP_NegotiationFlags, 3, "FreeRDP_NegotiationFlags" },
+ { FreeRDP_NumMonitorIds, 3, "FreeRDP_NumMonitorIds" },
+ { FreeRDP_OffscreenCacheEntries, 3, "FreeRDP_OffscreenCacheEntries" },
+ { FreeRDP_OffscreenCacheSize, 3, "FreeRDP_OffscreenCacheSize" },
+ { FreeRDP_OffscreenSupportLevel, 3, "FreeRDP_OffscreenSupportLevel" },
+ { FreeRDP_OsMajorType, 3, "FreeRDP_OsMajorType" },
+ { FreeRDP_OsMinorType, 3, "FreeRDP_OsMinorType" },
+ { FreeRDP_Password51Length, 3, "FreeRDP_Password51Length" },
+ { FreeRDP_PduSource, 3, "FreeRDP_PduSource" },
+ { FreeRDP_PercentScreen, 3, "FreeRDP_PercentScreen" },
+ { FreeRDP_PerformanceFlags, 3, "FreeRDP_PerformanceFlags" },
+ { FreeRDP_PointerCacheSize, 3, "FreeRDP_PointerCacheSize" },
+ { FreeRDP_PreconnectionId, 3, "FreeRDP_PreconnectionId" },
+ { FreeRDP_ProxyType, 3, "FreeRDP_ProxyType" },
+ { FreeRDP_RdpVersion, 3, "FreeRDP_RdpVersion" },
+ { FreeRDP_ReceivedCapabilitiesSize, 3, "FreeRDP_ReceivedCapabilitiesSize" },
+ { FreeRDP_RedirectedSessionId, 3, "FreeRDP_RedirectedSessionId" },
+ { FreeRDP_RedirectionAcceptedCertLength, 3, "FreeRDP_RedirectionAcceptedCertLength" },
+ { FreeRDP_RedirectionFlags, 3, "FreeRDP_RedirectionFlags" },
+ { FreeRDP_RedirectionPasswordLength, 3, "FreeRDP_RedirectionPasswordLength" },
+ { FreeRDP_RedirectionPreferType, 3, "FreeRDP_RedirectionPreferType" },
+ { FreeRDP_RedirectionTsvUrlLength, 3, "FreeRDP_RedirectionTsvUrlLength" },
+ { FreeRDP_RemoteAppNumIconCacheEntries, 3, "FreeRDP_RemoteAppNumIconCacheEntries" },
+ { FreeRDP_RemoteAppNumIconCaches, 3, "FreeRDP_RemoteAppNumIconCaches" },
+ { FreeRDP_RemoteApplicationExpandCmdLine, 3, "FreeRDP_RemoteApplicationExpandCmdLine" },
+ { FreeRDP_RemoteApplicationExpandWorkingDir, 3, "FreeRDP_RemoteApplicationExpandWorkingDir" },
+ { FreeRDP_RemoteApplicationSupportLevel, 3, "FreeRDP_RemoteApplicationSupportLevel" },
+ { FreeRDP_RemoteApplicationSupportMask, 3, "FreeRDP_RemoteApplicationSupportMask" },
+ { FreeRDP_RemoteFxCaptureFlags, 3, "FreeRDP_RemoteFxCaptureFlags" },
+ { FreeRDP_RemoteFxCodecId, 3, "FreeRDP_RemoteFxCodecId" },
+ { FreeRDP_RemoteFxCodecMode, 3, "FreeRDP_RemoteFxCodecMode" },
+ { FreeRDP_RemoteWndSupportLevel, 3, "FreeRDP_RemoteWndSupportLevel" },
+ { FreeRDP_RequestedProtocols, 3, "FreeRDP_RequestedProtocols" },
+ { FreeRDP_SelectedProtocol, 3, "FreeRDP_SelectedProtocol" },
+ { FreeRDP_ServerCertificateLength, 3, "FreeRDP_ServerCertificateLength" },
+ { FreeRDP_ServerPort, 3, "FreeRDP_ServerPort" },
+ { FreeRDP_ServerRandomLength, 3, "FreeRDP_ServerRandomLength" },
+ { FreeRDP_ShareId, 3, "FreeRDP_ShareId" },
+ { FreeRDP_SmartSizingHeight, 3, "FreeRDP_SmartSizingHeight" },
+ { FreeRDP_SmartSizingWidth, 3, "FreeRDP_SmartSizingWidth" },
+ { FreeRDP_StaticChannelArraySize, 3, "FreeRDP_StaticChannelArraySize" },
+ { FreeRDP_StaticChannelCount, 3, "FreeRDP_StaticChannelCount" },
+ { FreeRDP_TargetNetAddressCount, 3, "FreeRDP_TargetNetAddressCount" },
+ { FreeRDP_TcpAckTimeout, 3, "FreeRDP_TcpAckTimeout" },
+ { FreeRDP_TcpKeepAliveDelay, 3, "FreeRDP_TcpKeepAliveDelay" },
+ { FreeRDP_TcpKeepAliveInterval, 3, "FreeRDP_TcpKeepAliveInterval" },
+ { FreeRDP_TcpKeepAliveRetries, 3, "FreeRDP_TcpKeepAliveRetries" },
+ { FreeRDP_TlsSecLevel, 3, "FreeRDP_TlsSecLevel" },
+ { FreeRDP_VirtualChannelChunkSize, 3, "FreeRDP_VirtualChannelChunkSize" },
+ { FreeRDP_VirtualChannelCompressionFlags, 3, "FreeRDP_VirtualChannelCompressionFlags" },
+ { FreeRDP_XPan, 4, "FreeRDP_XPan" },
+ { FreeRDP_YPan, 4, "FreeRDP_YPan" },
+ { FreeRDP_ParentWindowId, 5, "FreeRDP_ParentWindowId" },
+ { FreeRDP_AcceptedCert, 7, "FreeRDP_AcceptedCert" },
+ { FreeRDP_AllowedTlsCiphers, 7, "FreeRDP_AllowedTlsCiphers" },
+ { FreeRDP_AlternateShell, 7, "FreeRDP_AlternateShell" },
+ { FreeRDP_AssistanceFile, 7, "FreeRDP_AssistanceFile" },
+ { FreeRDP_AuthenticationServiceClass, 7, "FreeRDP_AuthenticationServiceClass" },
+ { FreeRDP_CertificateAcceptedFingerprints, 7, "FreeRDP_CertificateAcceptedFingerprints" },
+ { FreeRDP_CertificateContent, 7, "FreeRDP_CertificateContent" },
+ { FreeRDP_CertificateFile, 7, "FreeRDP_CertificateFile" },
+ { FreeRDP_CertificateName, 7, "FreeRDP_CertificateName" },
+ { FreeRDP_ClientAddress, 7, "FreeRDP_ClientAddress" },
+ { FreeRDP_ClientDir, 7, "FreeRDP_ClientDir" },
+ { FreeRDP_ClientHostname, 7, "FreeRDP_ClientHostname" },
+ { FreeRDP_ClientProductId, 7, "FreeRDP_ClientProductId" },
+ { FreeRDP_ComputerName, 7, "FreeRDP_ComputerName" },
+ { FreeRDP_ConfigPath, 7, "FreeRDP_ConfigPath" },
+ { FreeRDP_ConnectionFile, 7, "FreeRDP_ConnectionFile" },
+ { FreeRDP_CurrentPath, 7, "FreeRDP_CurrentPath" },
+ { FreeRDP_Domain, 7, "FreeRDP_Domain" },
+ { FreeRDP_DrivesToRedirect, 7, "FreeRDP_DrivesToRedirect" },
+ { FreeRDP_DumpRemoteFxFile, 7, "FreeRDP_DumpRemoteFxFile" },
+ { FreeRDP_DynamicDSTTimeZoneKeyName, 7, "FreeRDP_DynamicDSTTimeZoneKeyName" },
+ { FreeRDP_GatewayAcceptedCert, 7, "FreeRDP_GatewayAcceptedCert" },
+ { FreeRDP_GatewayAccessToken, 7, "FreeRDP_GatewayAccessToken" },
+ { FreeRDP_GatewayDomain, 7, "FreeRDP_GatewayDomain" },
+ { FreeRDP_GatewayHostname, 7, "FreeRDP_GatewayHostname" },
+ { FreeRDP_GatewayPassword, 7, "FreeRDP_GatewayPassword" },
+ { FreeRDP_GatewayUsername, 7, "FreeRDP_GatewayUsername" },
+ { FreeRDP_HomePath, 7, "FreeRDP_HomePath" },
+ { FreeRDP_ImeFileName, 7, "FreeRDP_ImeFileName" },
+ { FreeRDP_KerberosKdc, 7, "FreeRDP_KerberosKdc" },
+ { FreeRDP_KerberosRealm, 7, "FreeRDP_KerberosRealm" },
+ { FreeRDP_NtlmSamFile, 7, "FreeRDP_NtlmSamFile" },
+ { FreeRDP_Password, 7, "FreeRDP_Password" },
+ { FreeRDP_PasswordHash, 7, "FreeRDP_PasswordHash" },
+ { FreeRDP_PlayRemoteFxFile, 7, "FreeRDP_PlayRemoteFxFile" },
+ { FreeRDP_PreconnectionBlob, 7, "FreeRDP_PreconnectionBlob" },
+ { FreeRDP_PrivateKeyContent, 7, "FreeRDP_PrivateKeyContent" },
+ { FreeRDP_PrivateKeyFile, 7, "FreeRDP_PrivateKeyFile" },
+ { FreeRDP_ProxyHostname, 7, "FreeRDP_ProxyHostname" },
+ { FreeRDP_ProxyPassword, 7, "FreeRDP_ProxyPassword" },
+ { FreeRDP_ProxyUsername, 7, "FreeRDP_ProxyUsername" },
+ { FreeRDP_RDP2TCPArgs, 7, "FreeRDP_RDP2TCPArgs" },
+ { FreeRDP_RdpKeyContent, 7, "FreeRDP_RdpKeyContent" },
+ { FreeRDP_RdpKeyFile, 7, "FreeRDP_RdpKeyFile" },
+ { FreeRDP_RedirectionAcceptedCert, 7, "FreeRDP_RedirectionAcceptedCert" },
+ { FreeRDP_RedirectionDomain, 7, "FreeRDP_RedirectionDomain" },
+ { FreeRDP_RedirectionTargetFQDN, 7, "FreeRDP_RedirectionTargetFQDN" },
+ { FreeRDP_RedirectionTargetNetBiosName, 7, "FreeRDP_RedirectionTargetNetBiosName" },
+ { FreeRDP_RedirectionUsername, 7, "FreeRDP_RedirectionUsername" },
+ { FreeRDP_RemoteApplicationCmdLine, 7, "FreeRDP_RemoteApplicationCmdLine" },
+ { FreeRDP_RemoteApplicationFile, 7, "FreeRDP_RemoteApplicationFile" },
+ { FreeRDP_RemoteApplicationGuid, 7, "FreeRDP_RemoteApplicationGuid" },
+ { FreeRDP_RemoteApplicationIcon, 7, "FreeRDP_RemoteApplicationIcon" },
+ { FreeRDP_RemoteApplicationName, 7, "FreeRDP_RemoteApplicationName" },
+ { FreeRDP_RemoteApplicationProgram, 7, "FreeRDP_RemoteApplicationProgram" },
+ { FreeRDP_RemoteApplicationWorkingDir, 7, "FreeRDP_RemoteApplicationWorkingDir" },
+ { FreeRDP_RemoteAssistancePassStub, 7, "FreeRDP_RemoteAssistancePassStub" },
+ { FreeRDP_RemoteAssistancePassword, 7, "FreeRDP_RemoteAssistancePassword" },
+ { FreeRDP_RemoteAssistanceRCTicket, 7, "FreeRDP_RemoteAssistanceRCTicket" },
+ { FreeRDP_RemoteAssistanceSessionId, 7, "FreeRDP_RemoteAssistanceSessionId" },
+ { FreeRDP_ServerHostname, 7, "FreeRDP_ServerHostname" },
+ { FreeRDP_ShellWorkingDirectory, 7, "FreeRDP_ShellWorkingDirectory" },
+ { FreeRDP_TargetNetAddress, 7, "FreeRDP_TargetNetAddress" },
+ { FreeRDP_Username, 7, "FreeRDP_Username" },
+ { FreeRDP_WindowTitle, 7, "FreeRDP_WindowTitle" },
+ { FreeRDP_WmClass, 7, "FreeRDP_WmClass" },
+ { FreeRDP_BitmapCacheV2CellInfo, 8, "FreeRDP_BitmapCacheV2CellInfo" },
+ { FreeRDP_ChannelDefArray, 8, "FreeRDP_ChannelDefArray" },
+ { FreeRDP_ClientAutoReconnectCookie, 8, "FreeRDP_ClientAutoReconnectCookie" },
+ { FreeRDP_ClientRandom, 8, "FreeRDP_ClientRandom" },
+ { FreeRDP_ClientTimeZone, 8, "FreeRDP_ClientTimeZone" },
+ { FreeRDP_DeviceArray, 8, "FreeRDP_DeviceArray" },
+ { FreeRDP_DynamicChannelArray, 8, "FreeRDP_DynamicChannelArray" },
+ { FreeRDP_FragCache, 8, "FreeRDP_FragCache" },
+ { FreeRDP_GlyphCache, 8, "FreeRDP_GlyphCache" },
+ { FreeRDP_LoadBalanceInfo, 8, "FreeRDP_LoadBalanceInfo" },
+ { FreeRDP_MonitorDefArray, 8, "FreeRDP_MonitorDefArray" },
+ { FreeRDP_MonitorIds, 8, "FreeRDP_MonitorIds" },
+ { FreeRDP_OrderSupport, 8, "FreeRDP_OrderSupport" },
+ { FreeRDP_Password51, 8, "FreeRDP_Password51" },
+ { FreeRDP_RdpServerCertificate, 8, "FreeRDP_RdpServerCertificate" },
+ { FreeRDP_RdpServerRsaKey, 8, "FreeRDP_RdpServerRsaKey" },
+ { FreeRDP_ReceivedCapabilities, 8, "FreeRDP_ReceivedCapabilities" },
+ { FreeRDP_RedirectionPassword, 8, "FreeRDP_RedirectionPassword" },
+ { FreeRDP_RedirectionTsvUrl, 8, "FreeRDP_RedirectionTsvUrl" },
+ { FreeRDP_ServerAutoReconnectCookie, 8, "FreeRDP_ServerAutoReconnectCookie" },
+ { FreeRDP_ServerCertificate, 8, "FreeRDP_ServerCertificate" },
+ { FreeRDP_ServerRandom, 8, "FreeRDP_ServerRandom" },
+ { FreeRDP_StaticChannelArray, 8, "FreeRDP_StaticChannelArray" },
+ { FreeRDP_TargetNetAddresses, 8, "FreeRDP_TargetNetAddresses" },
+ { FreeRDP_TargetNetPorts, 8, "FreeRDP_TargetNetPorts" },
+ { FreeRDP_instance, 8, "FreeRDP_instance" },
+};
+
+SSIZE_T freerdp_settings_get_key_for_name(const char* value)
+{
+ size_t x;
+ for (x = 0; x < ARRAYSIZE(settings_map); x++)
+ {
+ const struct settings_str_entry* cur = &settings_map[x];
+ if (strcmp(value, cur->str) == 0)
+ return cur->id;
+ }
+ return -1;
+}
+
+SSIZE_T freerdp_settings_get_type_for_name(const char* value)
+{
+ size_t x;
+ for (x = 0; x < ARRAYSIZE(settings_map); x++)
+ {
+ const struct settings_str_entry* cur = &settings_map[x];
+ if (strcmp(value, cur->str) == 0)
+ return cur->type;
+ }
+ return -1;
+}
+
+SSIZE_T freerdp_settings_get_type_for_key(size_t key)
+{
+ size_t x;
+ for (x = 0; x < ARRAYSIZE(settings_map); x++)
+ {
+ const struct settings_str_entry* cur = &settings_map[x];
+ if (cur->id == key)
+ return cur->type;
+ }
+ return -1;
+}
+
+const char* freerdp_settings_get_name_for_key(size_t key)
+{
+ size_t x;
+ for (x = 0; x < ARRAYSIZE(settings_map); x++)
+ {
+ const struct settings_str_entry* cur = &settings_map[x];
+ if (cur->id == key)
+ return cur->str;
+ }
+ return NULL;
+}
diff --git a/libfreerdp/core/gateway/rdg.c b/libfreerdp/core/gateway/rdg.c
index d8f17c20b..6ea9e4f06 100644
--- a/libfreerdp/core/gateway/rdg.c
+++ b/libfreerdp/core/gateway/rdg.c
@@ -304,7 +304,8 @@ static wStream* rdg_receive_packet(rdpRdg* rdg)
Stream_Seek(s, 4);
Stream_Read_UINT32(s, packetLength);
- if ((packetLength > INT_MAX) || !Stream_EnsureCapacity(s, packetLength))
+ if ((packetLength > INT_MAX) || !Stream_EnsureCapacity(s, packetLength) ||
+ (packetLength < header))
{
Stream_Free(s, TRUE);
return NULL;
diff --git a/libfreerdp/core/listener.c b/libfreerdp/core/listener.c
index 68b0c0217..3d0a1b164 100644
--- a/libfreerdp/core/listener.c
+++ b/libfreerdp/core/listener.c
@@ -138,7 +138,7 @@ static BOOL freerdp_listener_open(freerdp_listener* instance, const char* bind_a
WSAEventSelect(sockfd, listener->events[listener->num_sockfds],
FD_READ | FD_ACCEPT | FD_CLOSE);
listener->num_sockfds++;
- WLog_INFO(TAG, "Listening on %s:%d", addr, port);
+ WLog_INFO(TAG, "Listening on [%s]:%d", addr, port);
}
freeaddrinfo(res);
diff --git a/libfreerdp/core/nego.c b/libfreerdp/core/nego.c
index 543c2e54f..7cb509464 100644
--- a/libfreerdp/core/nego.c
+++ b/libfreerdp/core/nego.c
@@ -91,9 +91,9 @@ static BOOL nego_security_connect(rdpNego* nego);
static BOOL nego_send_preconnection_pdu(rdpNego* nego);
static BOOL nego_recv_response(rdpNego* nego);
static void nego_send(rdpNego* nego);
-static void nego_process_negotiation_request(rdpNego* nego, wStream* s);
-static void nego_process_negotiation_response(rdpNego* nego, wStream* s);
-static void nego_process_negotiation_failure(rdpNego* nego, wStream* s);
+static BOOL nego_process_negotiation_request(rdpNego* nego, wStream* s);
+static BOOL nego_process_negotiation_response(rdpNego* nego, wStream* s);
+static BOOL nego_process_negotiation_failure(rdpNego* nego, wStream* s);
/**
* Negotiate protocol security and connect.
@@ -618,7 +618,8 @@ int nego_recv(rdpTransport* transport, wStream* s, void* extra)
switch (type)
{
case TYPE_RDP_NEG_RSP:
- nego_process_negotiation_response(nego, s);
+ if (!nego_process_negotiation_response(nego, s))
+ return -1;
WLog_DBG(TAG, "selected_protocol: %" PRIu32 "", nego->SelectedProtocol);
/* enhanced security selected ? */
@@ -645,7 +646,8 @@ int nego_recv(rdpTransport* transport, wStream* s, void* extra)
break;
case TYPE_RDP_NEG_FAILURE:
- nego_process_negotiation_failure(nego, s);
+ if (!nego_process_negotiation_failure(nego, s))
+ return -1;
break;
}
}
@@ -795,7 +797,8 @@ BOOL nego_read_request(rdpNego* nego, wStream* s)
return FALSE;
}
- nego_process_negotiation_request(nego, s);
+ if (!nego_process_negotiation_request(nego, s))
+ return FALSE;
}
return tpkt_ensure_stream_consumed(s, length);
@@ -918,15 +921,19 @@ fail:
* @param s
*/
-void nego_process_negotiation_request(rdpNego* nego, wStream* s)
+BOOL nego_process_negotiation_request(rdpNego* nego, wStream* s)
{
BYTE flags;
UINT16 length;
+
+ if (Stream_GetRemainingLength(s) < 7)
+ return FALSE;
Stream_Read_UINT8(s, flags);
Stream_Read_UINT16(s, length);
Stream_Read_UINT32(s, nego->RequestedProtocols);
WLog_DBG(TAG, "RDP_NEG_REQ: RequestedProtocol: 0x%08" PRIX32 "", nego->RequestedProtocols);
nego->state = NEGO_STATE_FINAL;
+ return TRUE;
}
/**
@@ -935,7 +942,7 @@ void nego_process_negotiation_request(rdpNego* nego, wStream* s)
* @param s
*/
-void nego_process_negotiation_response(rdpNego* nego, wStream* s)
+BOOL nego_process_negotiation_response(rdpNego* nego, wStream* s)
{
UINT16 length;
WLog_DBG(TAG, "RDP_NEG_RSP");
@@ -944,13 +951,14 @@ void nego_process_negotiation_response(rdpNego* nego, wStream* s)
{
WLog_ERR(TAG, "Invalid RDP_NEG_RSP");
nego->state = NEGO_STATE_FAIL;
- return;
+ return FALSE;
}
Stream_Read_UINT8(s, nego->flags);
Stream_Read_UINT16(s, length);
Stream_Read_UINT32(s, nego->SelectedProtocol);
nego->state = NEGO_STATE_FINAL;
+ return TRUE;
}
/**
@@ -959,12 +967,14 @@ void nego_process_negotiation_response(rdpNego* nego, wStream* s)
* @param s
*/
-void nego_process_negotiation_failure(rdpNego* nego, wStream* s)
+BOOL nego_process_negotiation_failure(rdpNego* nego, wStream* s)
{
BYTE flags;
UINT16 length;
UINT32 failureCode;
WLog_DBG(TAG, "RDP_NEG_FAILURE");
+ if (Stream_GetRemainingLength(s) < 7)
+ return FALSE;
Stream_Read_UINT8(s, flags);
Stream_Read_UINT16(s, length);
Stream_Read_UINT32(s, failureCode);
@@ -999,6 +1009,7 @@ void nego_process_negotiation_failure(rdpNego* nego, wStream* s)
}
nego->state = NEGO_STATE_FAIL;
+ return TRUE;
}
/**
diff --git a/libfreerdp/core/orders.c b/libfreerdp/core/orders.c
index 4bf362899..bac9dc113 100644
--- a/libfreerdp/core/orders.c
+++ b/libfreerdp/core/orders.c
@@ -2495,23 +2495,21 @@ BOOL update_write_cache_glyph_v2_order(wStream* s, const CACHE_GLYPH_V2_ORDER* c
return TRUE;
}
-static BOOL update_decompress_brush(wStream* s, BYTE* output, BYTE bpp)
+static BOOL update_decompress_brush(wStream* s, BYTE* output, size_t outSize, BYTE bpp)
{
- UINT32 index;
- UINT32 x, y, k;
+ INT32 x, y, k;
BYTE byte = 0;
- BYTE* palette;
- UINT32 bytesPerPixel;
- palette = Stream_Pointer(s) + 16;
- bytesPerPixel = ((bpp + 1) / 8);
+ const BYTE* palette = Stream_Pointer(s) + 16;
+ const INT32 bytesPerPixel = ((bpp + 1) / 8);
- if (Stream_GetRemainingLength(s) < 16 + 7 * bytesPerPixel) // 64 / 4
+ if (!Stream_SafeSeek(s, 16ULL + 7ULL * bytesPerPixel)) // 64 / 4
return FALSE;
for (y = 7; y >= 0; y--)
{
for (x = 0; x < 8; x++)
{
+ UINT32 index;
if ((x % 4) == 0)
Stream_Read_UINT8(s, byte);
@@ -2519,14 +2517,15 @@ static BOOL update_decompress_brush(wStream* s, BYTE* output, BYTE bpp)
for (k = 0; k < bytesPerPixel; k++)
{
- output[((y * 8 + x) * bytesPerPixel) + k] = palette[(index * bytesPerPixel) + k];
+ const size_t dstIndex = ((y * 8 + x) * bytesPerPixel) + k;
+ const size_t srcIndex = (index * bytesPerPixel) + k;
+ if (dstIndex >= outSize)
+ return FALSE;
+ output[dstIndex] = palette[srcIndex];
}
}
}
- /* Skip the palette */
- Stream_Seek(s, 7 * bytesPerPixel);
-
return TRUE;
}
static BOOL update_compress_brush(wStream* s, const BYTE* input, BYTE bpp)
@@ -2590,7 +2589,8 @@ static CACHE_BRUSH_ORDER* update_read_cache_brush_order(rdpUpdate* update, wStre
if (compressed != FALSE)
{
/* compressed brush */
- if (!update_decompress_brush(s, cache_brush->data, cache_brush->bpp))
+ if (!update_decompress_brush(s, cache_brush->data, sizeof(cache_brush->data),
+ cache_brush->bpp))
goto fail;
}
else
diff --git a/libfreerdp/core/rdp.c b/libfreerdp/core/rdp.c
index 341d15d44..b9c60c74e 100644
--- a/libfreerdp/core/rdp.c
+++ b/libfreerdp/core/rdp.c
@@ -385,6 +385,7 @@ BOOL rdp_read_header(rdpRdp* rdp, wStream* s, UINT16* length, UINT16* channelId)
MCSPDU = (rdp->settings->ServerMode) ? DomainMCSPDU_SendDataRequest
: DomainMCSPDU_SendDataIndication;
+ *channelId = 0; /* Initialize in case of early abort */
if (!tpkt_read_header(s, length))
return FALSE;
diff --git a/libfreerdp/core/server.c b/libfreerdp/core/server.c
index 4dd99035e..484ed8b96 100644
--- a/libfreerdp/core/server.c
+++ b/libfreerdp/core/server.c
@@ -195,7 +195,7 @@ static BOOL wts_read_drdynvc_data_first(rdpPeerChannel* channel, wStream* s, int
Stream_SetPosition(channel->receiveData, 0);
- if (!Stream_EnsureRemainingCapacity(channel->receiveData, (int)channel->dvc_total_length))
+ if (!Stream_EnsureRemainingCapacity(channel->receiveData, channel->dvc_total_length))
return FALSE;
Stream_Write(channel->receiveData, Stream_Pointer(s), length);
diff --git a/libfreerdp/core/test/settings_property_lists.h b/libfreerdp/core/test/settings_property_lists.h
index 85760e25a..c44018e47 100644
--- a/libfreerdp/core/test/settings_property_lists.h
+++ b/libfreerdp/core/test/settings_property_lists.h
@@ -3,169 +3,169 @@
#define have_bool_list_indices
static const size_t bool_list_indices[] = {
- FreeRDP_ServerMode,
- FreeRDP_WaitForOutputBufferFlush,
- FreeRDP_NetworkAutoDetect,
- FreeRDP_SupportAsymetricKeys,
- FreeRDP_SupportErrorInfoPdu,
- FreeRDP_SupportStatusInfoPdu,
- FreeRDP_SupportMonitorLayoutPdu,
- FreeRDP_SupportGraphicsPipeline,
- FreeRDP_SupportDynamicTimeZone,
- FreeRDP_SupportHeartbeatPdu,
- FreeRDP_UseRdpSecurityLayer,
- FreeRDP_ConsoleSession,
- FreeRDP_SpanMonitors,
- FreeRDP_UseMultimon,
- FreeRDP_ForceMultimon,
- FreeRDP_ListMonitors,
- FreeRDP_HasMonitorAttributes,
- FreeRDP_SupportMultitransport,
+ FreeRDP_AllowCacheWaitingList,
+ FreeRDP_AllowDesktopComposition,
+ FreeRDP_AllowFontSmoothing,
+ FreeRDP_AllowUnanouncedOrdersFromServer,
+ FreeRDP_AltSecFrameMarkerSupport,
+ FreeRDP_AsyncChannels,
+ FreeRDP_AsyncInput,
+ FreeRDP_AsyncUpdate,
+ FreeRDP_AudioCapture,
+ FreeRDP_AudioPlayback,
+ FreeRDP_Authentication,
+ FreeRDP_AuthenticationOnly,
+ FreeRDP_AutoAcceptCertificate,
+ FreeRDP_AutoDenyCertificate,
FreeRDP_AutoLogonEnabled,
+ FreeRDP_AutoReconnectionEnabled,
+ FreeRDP_BitmapCacheEnabled,
+ FreeRDP_BitmapCachePersistEnabled,
+ FreeRDP_BitmapCacheV3Enabled,
+ FreeRDP_BitmapCompressionDisabled,
+ FreeRDP_ColorPointerFlag,
FreeRDP_CompressionEnabled,
+ FreeRDP_ConsoleSession,
+ FreeRDP_CredentialsFromStdin,
+ FreeRDP_Decorations,
+ FreeRDP_DesktopResize,
+ FreeRDP_DeviceRedirection,
+ FreeRDP_DisableCredentialsDelegation,
FreeRDP_DisableCtrlAltDel,
- FreeRDP_EnableWindowsKey,
- FreeRDP_MaximizeShell,
- FreeRDP_LogonNotify,
- FreeRDP_LogonErrors,
- FreeRDP_MouseAttached,
- FreeRDP_MouseHasWheel,
- FreeRDP_RemoteConsoleAudio,
- FreeRDP_AudioPlayback,
- FreeRDP_AudioCapture,
- FreeRDP_VideoDisable,
- FreeRDP_PasswordIsSmartcardPin,
- FreeRDP_UsingSavedCredentials,
- FreeRDP_ForceEncryptedCsPdu,
- FreeRDP_HiDefRemoteApp,
- FreeRDP_IPv6Enabled,
- FreeRDP_AutoReconnectionEnabled,
- FreeRDP_PrintReconnectCookie,
- FreeRDP_DynamicDaylightTimeDisabled,
- FreeRDP_AllowFontSmoothing,
- FreeRDP_DisableWallpaper,
+ FreeRDP_DisableCursorBlinking,
+ FreeRDP_DisableCursorShadow,
FreeRDP_DisableFullWindowDrag,
FreeRDP_DisableMenuAnims,
+ FreeRDP_DisableRemoteAppCapsCheck,
FreeRDP_DisableThemes,
- FreeRDP_DisableCursorShadow,
- FreeRDP_DisableCursorBlinking,
- FreeRDP_AllowDesktopComposition,
- FreeRDP_RemoteAssistanceMode,
+ FreeRDP_DisableWallpaper,
+ FreeRDP_DrawAllowColorSubsampling,
+ FreeRDP_DrawAllowDynamicColorFidelity,
+ FreeRDP_DrawAllowSkipAlpha,
+ FreeRDP_DrawGdiPlusCacheEnabled,
+ FreeRDP_DrawGdiPlusEnabled,
+ FreeRDP_DrawNineGridEnabled,
+ FreeRDP_DumpRemoteFx,
+ FreeRDP_DynamicDaylightTimeDisabled,
+ FreeRDP_DynamicResolutionUpdate,
+ FreeRDP_EmbeddedWindow,
+ FreeRDP_EnableWindowsKey,
FreeRDP_EncomspVirtualChannel,
- FreeRDP_RemdeskVirtualChannel,
- FreeRDP_LyncRdpMode,
- FreeRDP_RemoteAssistanceRequestControl,
- FreeRDP_TlsSecurity,
- FreeRDP_NlaSecurity,
- FreeRDP_RdpSecurity,
FreeRDP_ExtSecurity,
- FreeRDP_Authentication,
- FreeRDP_NegotiateSecurityLayer,
- FreeRDP_RestrictedAdminModeRequired,
- FreeRDP_DisableCredentialsDelegation,
- FreeRDP_VmConnectMode,
- FreeRDP_FIPSMode,
- FreeRDP_MstscCookieMode,
- FreeRDP_SendPreconnectionPdu,
- FreeRDP_SmartcardLogon,
- FreeRDP_PromptForCredentials,
- FreeRDP_IgnoreCertificate,
FreeRDP_ExternalCertificateManagement,
- FreeRDP_AutoAcceptCertificate,
- FreeRDP_AutoDenyCertificate,
- FreeRDP_Workarea,
+ FreeRDP_FIPSMode,
+ FreeRDP_FastPathInput,
+ FreeRDP_FastPathOutput,
+ FreeRDP_ForceEncryptedCsPdu,
+ FreeRDP_ForceMultimon,
+ FreeRDP_FrameMarkerCommandEnabled,
FreeRDP_Fullscreen,
- FreeRDP_GrabKeyboard,
- FreeRDP_Decorations,
- FreeRDP_MouseMotion,
- FreeRDP_AsyncInput,
- FreeRDP_AsyncUpdate,
- FreeRDP_AsyncChannels,
- FreeRDP_ToggleFullscreen,
- FreeRDP_EmbeddedWindow,
- FreeRDP_SmartSizing,
- FreeRDP_PercentScreenUseWidth,
- FreeRDP_PercentScreenUseHeight,
- FreeRDP_DynamicResolutionUpdate,
- FreeRDP_SoftwareGdi,
- FreeRDP_LocalConnection,
- FreeRDP_AuthenticationOnly,
- FreeRDP_CredentialsFromStdin,
- FreeRDP_UnmapButtons,
- FreeRDP_OldLicenseBehaviour,
- FreeRDP_DumpRemoteFx,
- FreeRDP_PlayRemoteFx,
- FreeRDP_GatewayUseSameCredentials,
- FreeRDP_GatewayEnabled,
FreeRDP_GatewayBypassLocal,
- FreeRDP_GatewayRpcTransport,
+ FreeRDP_GatewayEnabled,
FreeRDP_GatewayHttpTransport,
+ FreeRDP_GatewayRpcTransport,
FreeRDP_GatewayUdpTransport,
- FreeRDP_RemoteApplicationMode,
- FreeRDP_DisableRemoteAppCapsCheck,
- FreeRDP_RemoteAppLanguageBarSupported,
- FreeRDP_RefreshRect,
- FreeRDP_SuppressOutput,
- FreeRDP_FastPathOutput,
- FreeRDP_SaltedChecksum,
+ FreeRDP_GatewayUseSameCredentials,
+ FreeRDP_GfxAVC444,
+ FreeRDP_GfxAVC444v2,
+ FreeRDP_GfxH264,
+ FreeRDP_GfxProgressive,
+ FreeRDP_GfxProgressiveV2,
+ FreeRDP_GfxSendQoeAck,
+ FreeRDP_GfxSmallCache,
+ FreeRDP_GfxThinClient,
+ FreeRDP_GrabKeyboard,
+ FreeRDP_HasExtendedMouseEvent,
+ FreeRDP_HasHorizontalWheel,
+ FreeRDP_HasMonitorAttributes,
+ FreeRDP_HiDefRemoteApp,
+ FreeRDP_IPv6Enabled,
+ FreeRDP_IgnoreCertificate,
+ FreeRDP_JpegCodec,
+ FreeRDP_ListMonitors,
+ FreeRDP_LocalConnection,
+ FreeRDP_LogonErrors,
+ FreeRDP_LogonNotify,
FreeRDP_LongCredentialsSupported,
- FreeRDP_NoBitmapCompressionHeader,
- FreeRDP_BitmapCompressionDisabled,
- FreeRDP_DesktopResize,
- FreeRDP_DrawAllowDynamicColorFidelity,
- FreeRDP_DrawAllowColorSubsampling,
- FreeRDP_DrawAllowSkipAlpha,
- FreeRDP_BitmapCacheV3Enabled,
- FreeRDP_AltSecFrameMarkerSupport,
- FreeRDP_AllowUnanouncedOrdersFromServer,
- FreeRDP_BitmapCacheEnabled,
- FreeRDP_AllowCacheWaitingList,
- FreeRDP_BitmapCachePersistEnabled,
- FreeRDP_ColorPointerFlag,
- FreeRDP_UnicodeInput,
- FreeRDP_FastPathInput,
- FreeRDP_MultiTouchInput,
+ FreeRDP_LyncRdpMode,
+ FreeRDP_MaximizeShell,
+ FreeRDP_MouseAttached,
+ FreeRDP_MouseHasWheel,
+ FreeRDP_MouseMotion,
+ FreeRDP_MstscCookieMode,
FreeRDP_MultiTouchGestures,
- FreeRDP_HasHorizontalWheel,
- FreeRDP_HasExtendedMouseEvent,
- FreeRDP_SoundBeepsEnabled,
- FreeRDP_SurfaceCommandsEnabled,
- FreeRDP_FrameMarkerCommandEnabled,
- FreeRDP_SurfaceFrameMarkerEnabled,
- FreeRDP_RemoteFxOnly,
- FreeRDP_RemoteFxCodec,
- FreeRDP_RemoteFxImageCodec,
+ FreeRDP_MultiTouchInput,
FreeRDP_NSCodec,
- FreeRDP_NSCodecAllowSubsampling,
FreeRDP_NSCodecAllowDynamicColorFidelity,
- FreeRDP_JpegCodec,
- FreeRDP_GfxThinClient,
- FreeRDP_GfxSmallCache,
- FreeRDP_GfxProgressive,
- FreeRDP_GfxProgressiveV2,
- FreeRDP_GfxH264,
- FreeRDP_GfxAVC444,
- FreeRDP_GfxSendQoeAck,
- FreeRDP_GfxAVC444v2,
- FreeRDP_DrawNineGridEnabled,
- FreeRDP_DrawGdiPlusEnabled,
- FreeRDP_DrawGdiPlusCacheEnabled,
- FreeRDP_DeviceRedirection,
+ FreeRDP_NSCodecAllowSubsampling,
+ FreeRDP_NegotiateSecurityLayer,
+ FreeRDP_NetworkAutoDetect,
+ FreeRDP_NlaSecurity,
+ FreeRDP_NoBitmapCompressionHeader,
+ FreeRDP_OldLicenseBehaviour,
+ FreeRDP_PasswordIsSmartcardPin,
+ FreeRDP_PercentScreenUseHeight,
+ FreeRDP_PercentScreenUseWidth,
+ FreeRDP_PlayRemoteFx,
+ FreeRDP_PreferIPv6OverIPv4,
+ FreeRDP_PrintReconnectCookie,
+ FreeRDP_PromptForCredentials,
+ FreeRDP_RdpSecurity,
+ FreeRDP_RedirectClipboard,
FreeRDP_RedirectDrives,
FreeRDP_RedirectHomeDrive,
- FreeRDP_RedirectSmartCards,
+ FreeRDP_RedirectParallelPorts,
FreeRDP_RedirectPrinters,
FreeRDP_RedirectSerialPorts,
- FreeRDP_RedirectParallelPorts,
- FreeRDP_PreferIPv6OverIPv4,
- FreeRDP_RedirectClipboard,
+ FreeRDP_RedirectSmartCards,
+ FreeRDP_RefreshRect,
+ FreeRDP_RemdeskVirtualChannel,
+ FreeRDP_RemoteAppLanguageBarSupported,
+ FreeRDP_RemoteApplicationMode,
+ FreeRDP_RemoteAssistanceMode,
+ FreeRDP_RemoteAssistanceRequestControl,
+ FreeRDP_RemoteConsoleAudio,
+ FreeRDP_RemoteFxCodec,
+ FreeRDP_RemoteFxImageCodec,
+ FreeRDP_RemoteFxOnly,
+ FreeRDP_RestrictedAdminModeRequired,
+ FreeRDP_SaltedChecksum,
+ FreeRDP_SendPreconnectionPdu,
+ FreeRDP_ServerMode,
+ FreeRDP_SmartSizing,
+ FreeRDP_SmartcardLogon,
+ FreeRDP_SoftwareGdi,
+ FreeRDP_SoundBeepsEnabled,
+ FreeRDP_SpanMonitors,
+ FreeRDP_SupportAsymetricKeys,
+ FreeRDP_SupportDisplayControl,
FreeRDP_SupportDynamicChannels,
+ FreeRDP_SupportDynamicTimeZone,
FreeRDP_SupportEchoChannel,
- FreeRDP_SupportDisplayControl,
+ FreeRDP_SupportErrorInfoPdu,
FreeRDP_SupportGeometryTracking,
+ FreeRDP_SupportGraphicsPipeline,
+ FreeRDP_SupportHeartbeatPdu,
+ FreeRDP_SupportMonitorLayoutPdu,
+ FreeRDP_SupportMultitransport,
FreeRDP_SupportSSHAgentChannel,
+ FreeRDP_SupportStatusInfoPdu,
FreeRDP_SupportVideoOptimized,
+ FreeRDP_SuppressOutput,
+ FreeRDP_SurfaceCommandsEnabled,
+ FreeRDP_SurfaceFrameMarkerEnabled,
FreeRDP_TcpKeepAlive,
+ FreeRDP_TlsSecurity,
+ FreeRDP_ToggleFullscreen,
+ FreeRDP_UnicodeInput,
+ FreeRDP_UnmapButtons,
+ FreeRDP_UseMultimon,
+ FreeRDP_UseRdpSecurityLayer,
+ FreeRDP_UsingSavedCredentials,
+ FreeRDP_VideoDisable,
+ FreeRDP_VmConnectMode,
+ FreeRDP_WaitForOutputBufferFlush,
+ FreeRDP_Workarea,
};
#define have_uint16_list_indices
@@ -176,117 +176,117 @@ static const size_t uint16_list_indices[] = {
#define have_uint32_list_indices
static const size_t uint32_list_indices[] = {
- FreeRDP_ShareId,
- FreeRDP_PduSource,
- FreeRDP_ServerPort,
- FreeRDP_MaxTimeInCheckLoop,
FreeRDP_AcceptedCertLength,
- FreeRDP_RdpVersion,
- FreeRDP_DesktopWidth,
- FreeRDP_DesktopHeight,
+ FreeRDP_AuthenticationLevel,
+ FreeRDP_AutoReconnectMaxRetries,
+ FreeRDP_BitmapCacheV2NumCells,
+ FreeRDP_BitmapCacheV3CodecId,
+ FreeRDP_BitmapCacheVersion,
+ FreeRDP_BrushSupportLevel,
+ FreeRDP_ChannelCount,
+ FreeRDP_ChannelDefArraySize,
+ FreeRDP_ClientBuild,
+ FreeRDP_ClientRandomLength,
+ FreeRDP_ClusterInfoFlags,
FreeRDP_ColorDepth,
+ FreeRDP_CompDeskSupportLevel,
+ FreeRDP_CompressionLevel,
FreeRDP_ConnectionType,
- FreeRDP_ClientBuild,
- FreeRDP_EarlyCapabilityFlags,
- FreeRDP_DesktopPhysicalWidth,
+ FreeRDP_CookieMaxLength,
+ FreeRDP_DesktopHeight,
FreeRDP_DesktopPhysicalHeight,
+ FreeRDP_DesktopPhysicalWidth,
+ FreeRDP_DesktopPosX,
+ FreeRDP_DesktopPosY,
FreeRDP_DesktopScaleFactor,
+ FreeRDP_DesktopWidth,
+ FreeRDP_DeviceArraySize,
+ FreeRDP_DeviceCount,
FreeRDP_DeviceScaleFactor,
+ FreeRDP_DrawNineGridCacheEntries,
+ FreeRDP_DrawNineGridCacheSize,
+ FreeRDP_DynamicChannelArraySize,
+ FreeRDP_DynamicChannelCount,
+ FreeRDP_EarlyCapabilityFlags,
+ FreeRDP_EncryptionLevel,
FreeRDP_EncryptionMethods,
FreeRDP_ExtEncryptionMethods,
- FreeRDP_EncryptionLevel,
- FreeRDP_ServerRandomLength,
- FreeRDP_ServerCertificateLength,
- FreeRDP_ClientRandomLength,
- FreeRDP_ChannelCount,
- FreeRDP_ChannelDefArraySize,
- FreeRDP_ClusterInfoFlags,
- FreeRDP_RedirectedSessionId,
+ FreeRDP_FrameAcknowledge,
+ FreeRDP_GatewayAcceptedCertLength,
+ FreeRDP_GatewayCredentialsSource,
+ FreeRDP_GatewayPort,
+ FreeRDP_GatewayUsageMethod,
+ FreeRDP_GfxCapsFilter,
+ FreeRDP_GlyphSupportLevel,
+ FreeRDP_JpegCodecId,
+ FreeRDP_JpegQuality,
+ FreeRDP_KeyboardCodePage,
+ FreeRDP_KeyboardFunctionKey,
+ FreeRDP_KeyboardHook,
+ FreeRDP_KeyboardLayout,
+ FreeRDP_KeyboardSubType,
+ FreeRDP_KeyboardType,
+ FreeRDP_LargePointerFlag,
+ FreeRDP_LoadBalanceInfoLength,
+ FreeRDP_MaxTimeInCheckLoop,
FreeRDP_MonitorCount,
FreeRDP_MonitorDefArraySize,
- FreeRDP_DesktopPosX,
- FreeRDP_DesktopPosY,
- FreeRDP_NumMonitorIds,
FreeRDP_MonitorLocalShiftX,
FreeRDP_MonitorLocalShiftY,
+ FreeRDP_MultifragMaxRequestSize,
FreeRDP_MultitransportFlags,
- FreeRDP_CompressionLevel,
- FreeRDP_AutoReconnectMaxRetries,
- FreeRDP_PerformanceFlags,
- FreeRDP_RequestedProtocols,
- FreeRDP_SelectedProtocol,
+ FreeRDP_NSCodecColorLossLevel,
+ FreeRDP_NSCodecId,
FreeRDP_NegotiationFlags,
- FreeRDP_AuthenticationLevel,
- FreeRDP_TlsSecLevel,
- FreeRDP_CookieMaxLength,
+ FreeRDP_NumMonitorIds,
+ FreeRDP_OffscreenCacheEntries,
+ FreeRDP_OffscreenCacheSize,
+ FreeRDP_OffscreenSupportLevel,
+ FreeRDP_OsMajorType,
+ FreeRDP_OsMinorType,
+ FreeRDP_Password51Length,
+ FreeRDP_PduSource,
+ FreeRDP_PercentScreen,
+ FreeRDP_PerformanceFlags,
+ FreeRDP_PointerCacheSize,
FreeRDP_PreconnectionId,
+ FreeRDP_ProxyType,
+ FreeRDP_RdpVersion,
+ FreeRDP_ReceivedCapabilitiesSize,
+ FreeRDP_RedirectedSessionId,
+ FreeRDP_RedirectionAcceptedCertLength,
FreeRDP_RedirectionFlags,
- FreeRDP_LoadBalanceInfoLength,
FreeRDP_RedirectionPasswordLength,
- FreeRDP_RedirectionTsvUrlLength,
- FreeRDP_TargetNetAddressCount,
- FreeRDP_RedirectionAcceptedCertLength,
FreeRDP_RedirectionPreferType,
- FreeRDP_Password51Length,
- FreeRDP_PercentScreen,
- FreeRDP_SmartSizingWidth,
- FreeRDP_SmartSizingHeight,
- FreeRDP_GatewayUsageMethod,
- FreeRDP_GatewayPort,
- FreeRDP_GatewayCredentialsSource,
- FreeRDP_GatewayAcceptedCertLength,
- FreeRDP_ProxyType,
+ FreeRDP_RedirectionTsvUrlLength,
+ FreeRDP_RemoteAppNumIconCacheEntries,
+ FreeRDP_RemoteAppNumIconCaches,
FreeRDP_RemoteApplicationExpandCmdLine,
FreeRDP_RemoteApplicationExpandWorkingDir,
- FreeRDP_RemoteAppNumIconCaches,
- FreeRDP_RemoteAppNumIconCacheEntries,
- FreeRDP_RemoteWndSupportLevel,
FreeRDP_RemoteApplicationSupportLevel,
FreeRDP_RemoteApplicationSupportMask,
- FreeRDP_ReceivedCapabilitiesSize,
- FreeRDP_OsMajorType,
- FreeRDP_OsMinorType,
- FreeRDP_BitmapCacheVersion,
- FreeRDP_BitmapCacheV2NumCells,
- FreeRDP_PointerCacheSize,
- FreeRDP_KeyboardCodePage,
- FreeRDP_KeyboardLayout,
- FreeRDP_KeyboardType,
- FreeRDP_KeyboardSubType,
- FreeRDP_KeyboardFunctionKey,
- FreeRDP_KeyboardHook,
- FreeRDP_BrushSupportLevel,
- FreeRDP_GlyphSupportLevel,
- FreeRDP_OffscreenSupportLevel,
- FreeRDP_OffscreenCacheSize,
- FreeRDP_OffscreenCacheEntries,
- FreeRDP_VirtualChannelCompressionFlags,
- FreeRDP_VirtualChannelChunkSize,
- FreeRDP_MultifragMaxRequestSize,
- FreeRDP_LargePointerFlag,
- FreeRDP_CompDeskSupportLevel,
+ FreeRDP_RemoteFxCaptureFlags,
FreeRDP_RemoteFxCodecId,
FreeRDP_RemoteFxCodecMode,
- FreeRDP_RemoteFxCaptureFlags,
- FreeRDP_NSCodecId,
- FreeRDP_FrameAcknowledge,
- FreeRDP_NSCodecColorLossLevel,
- FreeRDP_JpegCodecId,
- FreeRDP_JpegQuality,
- FreeRDP_GfxCapsFilter,
- FreeRDP_BitmapCacheV3CodecId,
- FreeRDP_DrawNineGridCacheSize,
- FreeRDP_DrawNineGridCacheEntries,
- FreeRDP_DeviceCount,
- FreeRDP_DeviceArraySize,
- FreeRDP_StaticChannelCount,
+ FreeRDP_RemoteWndSupportLevel,
+ FreeRDP_RequestedProtocols,
+ FreeRDP_SelectedProtocol,
+ FreeRDP_ServerCertificateLength,
+ FreeRDP_ServerPort,
+ FreeRDP_ServerRandomLength,
+ FreeRDP_ShareId,
+ FreeRDP_SmartSizingHeight,
+ FreeRDP_SmartSizingWidth,
FreeRDP_StaticChannelArraySize,
- FreeRDP_DynamicChannelCount,
- FreeRDP_DynamicChannelArraySize,
- FreeRDP_TcpKeepAliveRetries,
+ FreeRDP_StaticChannelCount,
+ FreeRDP_TargetNetAddressCount,
+ FreeRDP_TcpAckTimeout,
FreeRDP_TcpKeepAliveDelay,
FreeRDP_TcpKeepAliveInterval,
- FreeRDP_TcpAckTimeout,
+ FreeRDP_TcpKeepAliveRetries,
+ FreeRDP_TlsSecLevel,
+ FreeRDP_VirtualChannelChunkSize,
+ FreeRDP_VirtualChannelCompressionFlags,
};
#define have_int32_list_indices
@@ -302,102 +302,102 @@ static const size_t uint64_list_indices[] = {
#define have_string_list_indices
static const size_t string_list_indices[] = {
- FreeRDP_ServerHostname,
- FreeRDP_Username,
- FreeRDP_Password,
- FreeRDP_Domain,
- FreeRDP_PasswordHash,
FreeRDP_AcceptedCert,
- FreeRDP_ClientHostname,
- FreeRDP_ClientProductId,
+ FreeRDP_AllowedTlsCiphers,
FreeRDP_AlternateShell,
- FreeRDP_ShellWorkingDirectory,
- FreeRDP_ClientAddress,
- FreeRDP_ClientDir,
- FreeRDP_DynamicDSTTimeZoneKeyName,
- FreeRDP_RemoteAssistanceSessionId,
- FreeRDP_RemoteAssistancePassStub,
- FreeRDP_RemoteAssistancePassword,
- FreeRDP_RemoteAssistanceRCTicket,
+ FreeRDP_AssistanceFile,
FreeRDP_AuthenticationServiceClass,
- FreeRDP_AllowedTlsCiphers,
- FreeRDP_NtlmSamFile,
- FreeRDP_PreconnectionBlob,
- FreeRDP_TargetNetAddress,
- FreeRDP_RedirectionUsername,
- FreeRDP_RedirectionDomain,
- FreeRDP_RedirectionTargetFQDN,
- FreeRDP_RedirectionTargetNetBiosName,
- FreeRDP_RedirectionAcceptedCert,
- FreeRDP_KerberosKdc,
- FreeRDP_KerberosRealm,
- FreeRDP_CertificateName,
- FreeRDP_CertificateFile,
- FreeRDP_PrivateKeyFile,
- FreeRDP_RdpKeyFile,
- FreeRDP_CertificateContent,
- FreeRDP_PrivateKeyContent,
- FreeRDP_RdpKeyContent,
FreeRDP_CertificateAcceptedFingerprints,
- FreeRDP_WindowTitle,
- FreeRDP_WmClass,
+ FreeRDP_CertificateContent,
+ FreeRDP_CertificateFile,
+ FreeRDP_CertificateName,
+ FreeRDP_ClientAddress,
+ FreeRDP_ClientDir,
+ FreeRDP_ClientHostname,
+ FreeRDP_ClientProductId,
FreeRDP_ComputerName,
- FreeRDP_ConnectionFile,
- FreeRDP_AssistanceFile,
- FreeRDP_HomePath,
FreeRDP_ConfigPath,
+ FreeRDP_ConnectionFile,
FreeRDP_CurrentPath,
+ FreeRDP_Domain,
+ FreeRDP_DrivesToRedirect,
FreeRDP_DumpRemoteFxFile,
- FreeRDP_PlayRemoteFxFile,
+ FreeRDP_DynamicDSTTimeZoneKeyName,
+ FreeRDP_GatewayAcceptedCert,
+ FreeRDP_GatewayAccessToken,
+ FreeRDP_GatewayDomain,
FreeRDP_GatewayHostname,
- FreeRDP_GatewayUsername,
FreeRDP_GatewayPassword,
- FreeRDP_GatewayDomain,
- FreeRDP_GatewayAccessToken,
- FreeRDP_GatewayAcceptedCert,
+ FreeRDP_GatewayUsername,
+ FreeRDP_HomePath,
+ FreeRDP_ImeFileName,
+ FreeRDP_KerberosKdc,
+ FreeRDP_KerberosRealm,
+ FreeRDP_NtlmSamFile,
+ FreeRDP_Password,
+ FreeRDP_PasswordHash,
+ FreeRDP_PlayRemoteFxFile,
+ FreeRDP_PreconnectionBlob,
+ FreeRDP_PrivateKeyContent,
+ FreeRDP_PrivateKeyFile,
FreeRDP_ProxyHostname,
- FreeRDP_ProxyUsername,
FreeRDP_ProxyPassword,
- FreeRDP_RemoteApplicationName,
- FreeRDP_RemoteApplicationIcon,
- FreeRDP_RemoteApplicationProgram,
+ FreeRDP_ProxyUsername,
+ FreeRDP_RDP2TCPArgs,
+ FreeRDP_RdpKeyContent,
+ FreeRDP_RdpKeyFile,
+ FreeRDP_RedirectionAcceptedCert,
+ FreeRDP_RedirectionDomain,
+ FreeRDP_RedirectionTargetFQDN,
+ FreeRDP_RedirectionTargetNetBiosName,
+ FreeRDP_RedirectionUsername,
+ FreeRDP_RemoteApplicationCmdLine,
FreeRDP_RemoteApplicationFile,
FreeRDP_RemoteApplicationGuid,
- FreeRDP_RemoteApplicationCmdLine,
+ FreeRDP_RemoteApplicationIcon,
+ FreeRDP_RemoteApplicationName,
+ FreeRDP_RemoteApplicationProgram,
FreeRDP_RemoteApplicationWorkingDir,
- FreeRDP_ImeFileName,
- FreeRDP_DrivesToRedirect,
- FreeRDP_RDP2TCPArgs,
+ FreeRDP_RemoteAssistancePassStub,
+ FreeRDP_RemoteAssistancePassword,
+ FreeRDP_RemoteAssistanceRCTicket,
+ FreeRDP_RemoteAssistanceSessionId,
+ FreeRDP_ServerHostname,
+ FreeRDP_ShellWorkingDirectory,
+ FreeRDP_TargetNetAddress,
+ FreeRDP_Username,
+ FreeRDP_WindowTitle,
+ FreeRDP_WmClass,
};
#define have_pointer_list_indices
static const size_t pointer_list_indices[] = {
- FreeRDP_StaticChannelArray,
- FreeRDP_DynamicChannelArray,
- FreeRDP_instance,
- FreeRDP_RdpServerCertificate,
- FreeRDP_MonitorIds,
- FreeRDP_TargetNetPorts,
- FreeRDP_DeviceArray,
- FreeRDP_ClientAutoReconnectCookie,
- FreeRDP_TargetNetAddresses,
- FreeRDP_MonitorDefArray,
FreeRDP_BitmapCacheV2CellInfo,
- FreeRDP_ServerAutoReconnectCookie,
- FreeRDP_ServerRandom,
- FreeRDP_ServerCertificate,
+ FreeRDP_ChannelDefArray,
+ FreeRDP_ClientAutoReconnectCookie,
FreeRDP_ClientRandom,
+ FreeRDP_ClientTimeZone,
+ FreeRDP_DeviceArray,
+ FreeRDP_DynamicChannelArray,
+ FreeRDP_FragCache,
+ FreeRDP_GlyphCache,
FreeRDP_LoadBalanceInfo,
- FreeRDP_RedirectionPassword,
- FreeRDP_RedirectionTsvUrl,
- FreeRDP_Password51,
- FreeRDP_ReceivedCapabilities,
+ FreeRDP_MonitorDefArray,
+ FreeRDP_MonitorIds,
FreeRDP_OrderSupport,
+ FreeRDP_Password51,
+ FreeRDP_RdpServerCertificate,
FreeRDP_RdpServerRsaKey,
- FreeRDP_GlyphCache,
- FreeRDP_FragCache,
- FreeRDP_ClientTimeZone,
- FreeRDP_ChannelDefArray,
+ FreeRDP_ReceivedCapabilities,
+ FreeRDP_RedirectionPassword,
+ FreeRDP_RedirectionTsvUrl,
+ FreeRDP_ServerAutoReconnectCookie,
+ FreeRDP_ServerCertificate,
+ FreeRDP_ServerRandom,
+ FreeRDP_StaticChannelArray,
+ FreeRDP_TargetNetAddresses,
+ FreeRDP_TargetNetPorts,
+ FreeRDP_instance,
};
#endif /* TEST_SETTINGS_PROPERTY_LISTS */
diff --git a/libfreerdp/core/update.c b/libfreerdp/core/update.c
index 47e2a949e..aac58819f 100644
--- a/libfreerdp/core/update.c
+++ b/libfreerdp/core/update.c
@@ -774,7 +774,7 @@ BOOL update_recv(rdpUpdate* update, wStream* s)
}
Stream_Read_UINT16(s, updateType); /* updateType (2 bytes) */
- WLog_Print(update->log, WLOG_TRACE, "%s Update Data PDU", UPDATE_TYPE_STRINGS[updateType]);
+ WLog_Print(update->log, WLOG_TRACE, "%s Update Data PDU", update_type_to_string(updateType));
if (!update_begin_paint(update))
goto fail;
diff --git a/libfreerdp/crypto/crypto.c b/libfreerdp/crypto/crypto.c
index 280816698..0920e356e 100644
--- a/libfreerdp/crypto/crypto.c
+++ b/libfreerdp/crypto/crypto.c
@@ -841,7 +841,7 @@ BOOL x509_verify_certificate(CryptoCert cert, const char* certificate_store_path
if (!X509_STORE_CTX_init(csc, cert_ctx, cert->px509, cert->px509chain))
goto end;
- X509_STORE_CTX_set_purpose(csc, X509_PURPOSE_SSL_SERVER);
+ X509_STORE_CTX_set_purpose(csc, X509_PURPOSE_ANY);
X509_STORE_CTX_set_verify_cb(csc, verify_cb);
if (X509_verify_cert(csc) == 1)
diff --git a/scripts/update-settings-tests b/scripts/update-settings-tests
index 79368dc23..25f15714b 100755
--- a/scripts/update-settings-tests
+++ b/scripts/update-settings-tests
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
import os
import sys
@@ -12,6 +12,8 @@ def get_values(entry_dict, entry_type):
elif entry_type in dict(entry_dict):
values = entry_dict[entry_type]
entry_dict.pop(entry_type, None)
+ if values:
+ return sorted(values)
return values
def write_entry(f, entry_dict, entry_type, entry_name):
@@ -28,6 +30,74 @@ def write_entry(f, entry_dict, entry_type, entry_name):
f.write('};\n\n')
+def write_str_case(f, entry_type, val):
+ f.write('\t\t{FreeRDP_' + val + ', ' + str(entry_type) + ', "FreeRDP_' + val + '"},\n')
+
+def write_str(f, entry_dict):
+ f.write('struct settings_str_entry {\n')
+ f.write('\tsize_t id;\n')
+ f.write('\tsize_t type;\n')
+ f.write('\tconst char* str;\n')
+ f.write('};\n')
+ f.write('static const struct settings_str_entry settings_map[] =\n')
+ f.write('{\n')
+
+ entry_types = ['BOOL', 'UINT16', 'INT16', 'UINT32', 'INT32', 'UINT64', 'INT64', 'char*', '*']
+ for entry_type in entry_types:
+ values = get_values(entry_dict, entry_type)
+ if values:
+ for val in values:
+ write_str_case(f, entry_types.index(entry_type), val)
+ f.write('};\n\n')
+ f.write('SSIZE_T freerdp_settings_get_key_for_name(const char* value)\n')
+ f.write('{\n')
+ f.write('\tsize_t x;\n')
+ f.write('\tfor(x=0; x<ARRAYSIZE(settings_map); x++)\n')
+ f.write('\t{\n')
+ f.write('\t\tconst struct settings_str_entry* cur = &settings_map[x];\n')
+ f.write('\t\tif (strcmp(value, cur->str) == 0)\n')
+ f.write('\t\t\treturn cur->id;\n')
+ f.write('\t}\n')
+ f.write('\treturn -1;\n')
+ f.write('}\n')
+ f.write('\n')
+ f.write('SSIZE_T freerdp_settings_get_type_for_name(const char* value)\n')
+ f.write('{\n')
+ f.write('\tsize_t x;\n')
+ f.write('\tfor(x=0; x<ARRAYSIZE(settings_map); x++)\n')
+ f.write('\t{\n')
+ f.write('\t\tconst struct settings_str_entry* cur = &settings_map[x];\n')
+ f.write('\t\tif (strcmp(value, cur->str) == 0)\n')
+ f.write('\t\t\treturn cur->type;\n')
+ f.write('\t}\n')
+ f.write('\treturn -1;\n')
+ f.write('}\n')
+ f.write('\n')
+ f.write('SSIZE_T freerdp_settings_get_type_for_key(size_t key)\n')
+ f.write('{\n')
+ f.write('\tsize_t x;\n')
+ f.write('\tfor(x=0; x<ARRAYSIZE(settings_map); x++)\n')
+ f.write('\t{\n')
+ f.write('\t\tconst struct settings_str_entry* cur = &settings_map[x];\n')
+ f.write('\t\tif (cur->id == key)\n')
+ f.write('\t\t\treturn cur->type;\n')
+ f.write('\t}\n')
+ f.write('\treturn -1;\n')
+ f.write('}\n')
+ f.write('\n')
+ f.write('const char* freerdp_settings_get_name_for_key(size_t key)\n')
+ f.write('{\n')
+ f.write('\tsize_t x;\n')
+ f.write('\tfor(x=0; x<ARRAYSIZE(settings_map); x++)\n')
+ f.write('\t{\n')
+ f.write('\t\tconst struct settings_str_entry* cur = &settings_map[x];\n')
+ f.write('\t\tif (cur->id == key)\n')
+ f.write('\t\t\treturn cur->str;\n')
+ f.write('\t}\n')
+ f.write('\treturn NULL;\n')
+ f.write('}\n')
+ f.write('\n')
+
def write_getter_case(f, val):
f.write('\t\tcase FreeRDP_' + val + ':\n')
f.write('\t\t\treturn settings->' + val + ';\n\n')
@@ -164,6 +234,17 @@ try:
f.write('\n')
+ with open(name + '/../libfreerdp/common/settings_str.c', 'w+') as f:
+ f.write('/* Generated by ' + '' + ' */\n\n')
+ f.write('#include <freerdp/settings.h>\n')
+ f.write('#include <freerdp/log.h>\n\n')
+ f.write('#define TAG FREERDP_TAG("common.settings")\n\n')
+
+ getter_list = dict(type_list)
+ write_str(f, getter_list)
+ f.write('\n')
+
+
with open(name + '/../libfreerdp/core/test/settings_property_lists.h', 'w+') as f:
f.write('#ifndef TEST_SETTINGS_PROPERTY_LISTS\n')
f.write('#define TEST_SETTINGS_PROPERTY_LISTS\n\n')
diff --git a/server/proxy/pf_cliprdr.c b/server/proxy/pf_cliprdr.c
index d5954ca5e..b4904199d 100644
--- a/server/proxy/pf_cliprdr.c
+++ b/server/proxy/pf_cliprdr.c
@@ -294,7 +294,7 @@ static UINT pf_cliprdr_ServerFormatList(CliprdrClientContext* context,
if (pdata->config->TextOnly)
{
- CLIPRDR_FORMAT_LIST list;
+ CLIPRDR_FORMAT_LIST list = { 0 };
pf_cliprdr_create_text_only_format_list(&list);
return server->ServerFormatList(server, &list);
}
diff --git a/server/shadow/shadow_client.c b/server/shadow/shadow_client.c
index 3dded0166..f32f64976 100644
--- a/server/shadow/shadow_client.c
+++ b/server/shadow/shadow_client.c
@@ -128,6 +128,7 @@ static INLINE void shadow_client_free_queued_message(void* obj)
static BOOL shadow_client_context_new(freerdp_peer* peer, rdpShadowClient* client)
{
+ const char bind_address[] = "bind-address,";
rdpSettings* settings;
rdpShadowServer* server;
const wObject cb = { NULL, NULL, NULL, shadow_client_free_queued_message, NULL };
@@ -157,7 +158,8 @@ static BOOL shadow_client_context_new(freerdp_peer* peer, rdpShadowClient* clien
if (!(settings->RdpKeyFile = _strdup(settings->PrivateKeyFile)))
goto fail_rdpkey_file;
- if (server->ipcSocket)
+ if (server->ipcSocket && (strncmp(bind_address, server->ipcSocket,
+ strnlen(bind_address, sizeof(bind_address))) != 0))
{
settings->LyncRdpMode = TRUE;
settings->CompressionEnabled = FALSE;
diff --git a/server/shadow/shadow_server.c b/server/shadow/shadow_server.c
index d7a7536a6..30a63c9fa 100644
--- a/server/shadow/shadow_server.c
+++ b/server/shadow/shadow_server.c
@@ -45,10 +45,16 @@
#define TAG SERVER_TAG("shadow")
+static const char bind_address[] = "bind-address,";
+
static const COMMAND_LINE_ARGUMENT_A shadow_args[] = {
{ "port", COMMAND_LINE_VALUE_REQUIRED, "<number>", NULL, NULL, -1, NULL, "Server port" },
{ "ipc-socket", COMMAND_LINE_VALUE_REQUIRED, "<ipc-socket>", NULL, NULL, -1, NULL,
"Server IPC socket" },
+ { "bind-address", COMMAND_LINE_VALUE_REQUIRED, "<bind-address>[,<another address>, ...]", NULL,
+ NULL, -1, NULL,
+ "An address to bind to. Use '[<ipv6>]' for IPv6 addresses, e.g. '[::1]' for "
+ "localhost" },
{ "monitors", COMMAND_LINE_VALUE_OPTIONAL, "<0,1,2...>", NULL, NULL, -1, NULL,
"Select or list monitors" },
{ "rect", COMMAND_LINE_VALUE_REQUIRED, "<x,y,w,h>", NULL, NULL, -1, NULL,
@@ -220,11 +226,31 @@ int shadow_server_parse_command_line(rdpShadowServer* server, int argc, char** a
}
CommandLineSwitchCase(arg, "ipc-socket")
{
+ /* /bind-address is incompatible */
+ if (server->ipcSocket)
+ return -1;
+
server->ipcSocket = _strdup(arg->Value);
if (!server->ipcSocket)
return -1;
}
+ CommandLineSwitchCase(arg, "bind-address")
+ {
+ int rc;
+ size_t len = strlen(arg->Value) + sizeof(bind_address);
+ /* /ipc-socket is incompatible */
+ if (server->ipcSocket)
+ return -1;
+ server->ipcSocket = calloc(len, sizeof(CHAR));
+
+ if (!server->ipcSocket)
+ return -1;
+
+ rc = _snprintf(server->ipcSocket, len, "%s%s", bind_address, arg->Value);
+ if ((rc < 0) || ((size_t)rc != len - 1))
+ return -1;
+ }
CommandLineSwitchCase(arg, "may-view")
{
server->mayView = arg->Value ? TRUE : FALSE;
@@ -480,8 +506,44 @@ static DWORD WINAPI shadow_server_thread(LPVOID arg)
return 0;
}
+static BOOL open_port(rdpShadowServer* server, char* address)
+{
+ BOOL status;
+ char* modaddr = address;
+
+ if (modaddr)
+ {
+ if (modaddr[0] == '[')
+ {
+ char* end = strchr(address, ']');
+ if (!end)
+ {
+ WLog_ERR(TAG, "Could not parse bind-address %s", address);
+ return -1;
+ }
+ *end++ = '\0';
+ if (strlen(end) > 0)
+ {
+ WLog_ERR(TAG, "Excess data after IPv6 address: '%s'", end);
+ return -1;
+ }
+ modaddr++;
+ }
+ }
+ status = server->listener->Open(server->listener, modaddr, (UINT16)server->port);
+
+ if (!status)
+ {
+ WLog_ERR(TAG,
+ "Problem creating TCP listener. (Port already used or insufficient permissions?)");
+ }
+
+ return status;
+}
+
int shadow_server_start(rdpShadowServer* server)
{
+ BOOL ipc;
BOOL status;
WSADATA wsaData;
@@ -510,16 +572,50 @@ int shadow_server_start(rdpShadowServer* server)
return -1;
}
- if (!server->ipcSocket)
- status = server->listener->Open(server->listener, NULL, (UINT16)server->port);
- else
- status = server->listener->OpenLocal(server->listener, server->ipcSocket);
+ /* Bind magic:
+ *
+ * emtpy ... bind TCP all
+ * <local path> ... bind local (IPC)
+ * bind-socket,<address> ... bind TCP to specified interface
+ */
+ ipc = server->ipcSocket && (strncmp(bind_address, server->ipcSocket,
+ strnlen(bind_address, sizeof(bind_address))) != 0);
+ if (!ipc)
+ {
+ size_t x, count;
+ char** list = CommandLineParseCommaSeparatedValuesEx(NULL, server->ipcSocket, &count);
+ if (!list || (count <= 1))
+ {
+ free(list);
+ if (server->ipcSocket == NULL)
+ {
+ if (!open_port(server, NULL))
+ return -1;
+ }
+ else
+ return -1;
+ }
- if (!status)
+ for (x = 1; x < count; x++)
+ {
+ BOOL success = open_port(server, list[x]);
+ if (!success)
+ {
+ free(list);
+ return -1;
+ }
+ }
+ free(list);
+ }
+ else
{
- WLog_ERR(TAG,
- "Problem creating listener. (Port already used or insufficient permissions?)");
- return -1;
+ status = server->listener->OpenLocal(server->listener, server->ipcSocket);
+ if (!status)
+ {
+ WLog_ERR(TAG, "Problem creating local socket listener. (Port already used or "
+ "insufficient permissions?)");
+ return -1;
+ }
}
if (!(server->thread = CreateThread(NULL, 0, shadow_server_thread, (void*)server, 0, NULL)))
diff --git a/uwac/CMakeLists.txt b/uwac/CMakeLists.txt
index c75d0448d..8ebd4952f 100644
--- a/uwac/CMakeLists.txt
+++ b/uwac/CMakeLists.txt
@@ -17,7 +17,7 @@
# Soname versioning
set(UWAC_VERSION_MAJOR "0")
-set(UWAC_VERSION_MINOR "0")
+set(UWAC_VERSION_MINOR "1")
set(UWAC_VERSION_REVISION "1")
set(UWAC_VERSION "${UWAC_VERSION_MAJOR}.${UWAC_VERSION_MINOR}.${UWAC_VERSION_REVISION}")
set(UWAC_VERSION_FULL "${UWAC_VERSION}")
diff --git a/uwac/libuwac/uwac-display.c b/uwac/libuwac/uwac-display.c
index 379a549e4..277f1ece7 100644
--- a/uwac/libuwac/uwac-display.c
+++ b/uwac/libuwac/uwac-display.c
@@ -668,12 +668,16 @@ uint32_t UwacDisplayGetNbOutputs(const UwacDisplay* display)
const UwacOutput* UwacDisplayGetOutput(UwacDisplay* display, int index)
{
- int i;
+ int i, display_count;
UwacOutput* ret = NULL;
if (!display)
return NULL;
+ display_count = wl_list_length(&display->outputs);
+ if (display_count <= index)
+ return NULL;
+
i = 0;
wl_list_for_each(ret, &display->outputs, link)
{
@@ -694,6 +698,9 @@ const UwacOutput* UwacDisplayGetOutput(UwacDisplay* display, int index)
UwacReturnCode UwacOutputGetResolution(const UwacOutput* output, UwacSize* resolution)
{
+ if ((output->resolution.height <= 0) || (output->resolution.width <= 0))
+ return UWAC_ERROR_INTERNAL;
+
*resolution = output->resolution;
return UWAC_SUCCESS;
}
diff --git a/uwac/libuwac/uwac-input.c b/uwac/libuwac/uwac-input.c
index c2df7aa7c..005eff862 100644
--- a/uwac/libuwac/uwac-input.c
+++ b/uwac/libuwac/uwac-input.c
@@ -26,6 +26,7 @@
#include <stdlib.h>
#include <string.h>
#include <assert.h>
+#include <errno.h>
#include <time.h>
#include <unistd.h>
#include <sys/mman.h>
@@ -69,6 +70,10 @@ static struct wl_buffer* create_pointer_buffer(UwacSeat* seat, const void* src,
seat->pointer_image->width * 4, WL_SHM_FORMAT_ARGB8888);
wl_shm_pool_destroy(pool);
+ if (munmap(data, size) < 0)
+ fprintf(stderr, "%s: munmap(%p, %" PRIuz ") failed with [%d] %s\n", __FUNCTION__, data,
+ size, errno, strerror(errno));
+
error_mmap:
close(fd);
return buffer;
diff --git a/uwac/libuwac/uwac-priv.h b/uwac/libuwac/uwac-priv.h
index ccf237f37..75ad6e0fe 100644
--- a/uwac/libuwac/uwac-priv.h
+++ b/uwac/libuwac/uwac-priv.h
@@ -218,6 +218,7 @@ struct uwac_buffer
#endif
struct wl_buffer* wayland_buffer;
void* data;
+ size_t size;
};
typedef struct uwac_buffer UwacBuffer;
diff --git a/uwac/libuwac/uwac-window.c b/uwac/libuwac/uwac-window.c
index 28c2fd4c1..f76d43bcc 100644
--- a/uwac/libuwac/uwac-window.c
+++ b/uwac/libuwac/uwac-window.c
@@ -65,6 +65,7 @@ static void UwacWindowDestroyBuffers(UwacWindow* w)
region16_uninit(&buffer->damage);
#endif
wl_buffer_destroy(buffer->wayland_buffer);
+ munmap(buffer->data, buffer->size);
}
w->nbuffers = 0;
@@ -306,11 +307,15 @@ int UwacWindowShmAllocBuffers(UwacWindow* w, int nbuffers, int allocSize, uint32
int i, fd;
void* data;
struct wl_shm_pool* pool;
+ size_t pagesize = sysconf(_SC_PAGESIZE);
newBuffers = xrealloc(w->buffers, (w->nbuffers + nbuffers) * sizeof(UwacBuffer));
if (!newBuffers)
return UWAC_ERROR_NOMEMORY;
+ /* round up to a multiple of PAGESIZE to page align data for each buffer */
+ allocSize = (allocSize + pagesize - 1) & ~(pagesize - 1);
+
w->buffers = newBuffers;
memset(w->buffers + w->nbuffers, 0, sizeof(UwacBuffer) * nbuffers);
fd = uwac_create_anonymous_file(allocSize * nbuffers);
@@ -346,6 +351,7 @@ int UwacWindowShmAllocBuffers(UwacWindow* w, int nbuffers, int allocSize, uint32
region16_init(&buffer->damage);
#endif
buffer->data = data + (allocSize * i);
+ buffer->size = allocSize;
buffer->wayland_buffer =
wl_shm_pool_create_buffer(pool, allocSize * i, width, height, w->stride, format);
wl_buffer_add_listener(buffer->wayland_buffer, &buffer_listener, buffer);
diff --git a/winpr/CMakeLists.txt b/winpr/CMakeLists.txt
index ada0cde69..650c5910b 100644
--- a/winpr/CMakeLists.txt
+++ b/winpr/CMakeLists.txt
@@ -51,7 +51,7 @@ if (NOT WIN32)
endif()
# Soname versioning
-set(RAW_VERSION_STRING "2.1.0-dev")
+set(RAW_VERSION_STRING "2.1.0")
if(EXISTS "${CMAKE_SOURCE_DIR}/.source_tag")
file(READ ${CMAKE_SOURCE_DIR}/.source_tag RAW_VERSION_STRING)
elseif(USE_VERSION_FROM_GIT_TAG)
diff --git a/winpr/libwinpr/crt/unicode.c b/winpr/libwinpr/crt/unicode.c
index e4f7ae66d..136df98c8 100644
--- a/winpr/libwinpr/crt/unicode.c
+++ b/winpr/libwinpr/crt/unicode.c
@@ -403,13 +403,12 @@ int ConvertToUnicode(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cb
cchWideChar = MultiByteToWideChar(CodePage, dwFlags, lpMultiByteStr, cbMultiByte, NULL, 0);
allocate = TRUE;
}
+ else if (!(*lpWideCharStr))
+ allocate = TRUE;
if (cchWideChar < 1)
return 0;
- if (!(*lpWideCharStr))
- allocate = TRUE;
-
if (allocate)
{
*lpWideCharStr = (LPWSTR)calloc(cchWideChar + 1, sizeof(WCHAR));
@@ -473,13 +472,12 @@ int ConvertFromUnicode(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int
WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, NULL, 0, NULL, NULL);
allocate = TRUE;
}
+ else if (!(*lpMultiByteStr))
+ allocate = TRUE;
if (cbMultiByte < 1)
return 0;
- if (!(*lpMultiByteStr))
- allocate = TRUE;
-
if (allocate)
{
*lpMultiByteStr = (LPSTR)calloc(1, cbMultiByte + 1);
diff --git a/winpr/libwinpr/sspi/NTLM/ntlm_compute.c b/winpr/libwinpr/sspi/NTLM/ntlm_compute.c
index 7b76c5aae..dbd7f7fb0 100644
--- a/winpr/libwinpr/sspi/NTLM/ntlm_compute.c
+++ b/winpr/libwinpr/sspi/NTLM/ntlm_compute.c
@@ -124,6 +124,9 @@ void ntlm_print_version_info(NTLM_VERSION_INFO* versionInfo)
static int ntlm_read_ntlm_v2_client_challenge(wStream* s, NTLMv2_CLIENT_CHALLENGE* challenge)
{
size_t size;
+ if (Stream_GetRemainingLength(s) < 28)
+ return -1;
+
Stream_Read_UINT8(s, challenge->RespType);
Stream_Read_UINT8(s, challenge->HiRespType);
Stream_Read_UINT16(s, challenge->Reserved1);
@@ -163,6 +166,8 @@ static int ntlm_write_ntlm_v2_client_challenge(wStream* s, NTLMv2_CLIENT_CHALLEN
int ntlm_read_ntlm_v2_response(wStream* s, NTLMv2_RESPONSE* response)
{
+ if (Stream_GetRemainingLength(s) < 16)
+ return -1;
Stream_Read(s, response->Response, 16);
return ntlm_read_ntlm_v2_client_challenge(s, &(response->Challenge));
}
@@ -415,20 +420,20 @@ int ntlm_compute_lm_v2_response(NTLM_CONTEXT* context)
int ntlm_compute_ntlm_v2_response(NTLM_CONTEXT* context)
{
BYTE* blob;
- SecBuffer ntlm_v2_temp;
- SecBuffer ntlm_v2_temp_chal;
- PSecBuffer TargetInfo;
- TargetInfo = &context->ChallengeTargetInfo;
+ SecBuffer ntlm_v2_temp = { 0 };
+ SecBuffer ntlm_v2_temp_chal = { 0 };
+ PSecBuffer TargetInfo = &context->ChallengeTargetInfo;
+ int ret = -1;
if (!sspi_SecBufferAlloc(&ntlm_v2_temp, TargetInfo->cbBuffer + 28))
- return -1;
+ goto exit;
ZeroMemory(ntlm_v2_temp.pvBuffer, ntlm_v2_temp.cbBuffer);
blob = (BYTE*)ntlm_v2_temp.pvBuffer;
/* Compute the NTLMv2 hash */
if (ntlm_compute_ntlm_v2_hash(context, (BYTE*)context->NtlmV2Hash) < 0)
- return -1;
+ goto exit;
/* Construct temp */
blob[0] = 1; /* RespType (1 byte) */
@@ -447,7 +452,7 @@ int ntlm_compute_ntlm_v2_response(NTLM_CONTEXT* context)
/* Concatenate server challenge with temp */
if (!sspi_SecBufferAlloc(&ntlm_v2_temp_chal, ntlm_v2_temp.cbBuffer + 8))
- return -1;
+ goto exit;
blob = (BYTE*)ntlm_v2_temp_chal.pvBuffer;
CopyMemory(blob, context->ServerChallenge, 8);
@@ -459,7 +464,7 @@ int ntlm_compute_ntlm_v2_response(NTLM_CONTEXT* context)
/* NtChallengeResponse, Concatenate NTProofStr with temp */
if (!sspi_SecBufferAlloc(&context->NtChallengeResponse, ntlm_v2_temp.cbBuffer + 16))
- return -1;
+ goto exit;
blob = (BYTE*)context->NtChallengeResponse.pvBuffer;
CopyMemory(blob, context->NtProofString, WINPR_MD5_DIGEST_LENGTH);
@@ -468,9 +473,11 @@ int ntlm_compute_ntlm_v2_response(NTLM_CONTEXT* context)
winpr_HMAC(WINPR_MD_MD5, (BYTE*)context->NtlmV2Hash, WINPR_MD5_DIGEST_LENGTH,
context->NtProofString, WINPR_MD5_DIGEST_LENGTH, context->SessionBaseKey,
WINPR_MD5_DIGEST_LENGTH);
+ ret = 1;
+exit:
sspi_SecBufferFree(&ntlm_v2_temp);
sspi_SecBufferFree(&ntlm_v2_temp_chal);
- return 1;
+ return ret;
}
/**
diff --git a/winpr/libwinpr/sspi/NTLM/ntlm_message.c b/winpr/libwinpr/sspi/NTLM/ntlm_message.c
index e5586c9f5..5fc6ec73b 100644
--- a/winpr/libwinpr/sspi/NTLM/ntlm_message.c
+++ b/winpr/libwinpr/sspi/NTLM/ntlm_message.c
@@ -219,6 +219,11 @@ SECURITY_STATUS ntlm_read_NegotiateMessage(NTLM_CONTEXT* context, PSecBuffer buf
return SEC_E_INVALID_TOKEN;
}
+ if (Stream_GetRemainingLength(s) < 4)
+ {
+ Stream_Free(s, FALSE);
+ return SEC_E_INVALID_TOKEN;
+ }
Stream_Read_UINT32(s, message->NegotiateFlags); /* NegotiateFlags (4 bytes) */
if (!((message->NegotiateFlags & NTLMSSP_REQUEST_TARGET) &&
@@ -676,15 +681,15 @@ SECURITY_STATUS ntlm_write_ChallengeMessage(NTLM_CONTEXT* context, PSecBuffer bu
SECURITY_STATUS ntlm_read_AuthenticateMessage(NTLM_CONTEXT* context, PSecBuffer buffer)
{
+ SECURITY_STATUS status = SEC_E_INVALID_TOKEN;
wStream* s;
size_t length;
- UINT32 flags;
- NTLM_AV_PAIR* AvFlags;
+ UINT32 flags = 0;
+ NTLM_AV_PAIR* AvFlags = NULL;
UINT32 PayloadBufferOffset;
NTLM_AUTHENTICATE_MESSAGE* message;
SSPI_CREDENTIALS* credentials = context->credentials;
- flags = 0;
- AvFlags = NULL;
+
message = &context->AUTHENTICATE_MESSAGE;
ZeroMemory(message, sizeof(NTLM_AUTHENTICATE_MESSAGE));
s = Stream_New((BYTE*)buffer->pvBuffer, buffer->cbBuffer);
@@ -693,130 +698,85 @@ SECURITY_STATUS ntlm_read_AuthenticateMessage(NTLM_CONTEXT* context, PSecBuffer
return SEC_E_INTERNAL_ERROR;
if (ntlm_read_message_header(s, (NTLM_MESSAGE_HEADER*)message) < 0)
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
if (message->MessageType != MESSAGE_TYPE_AUTHENTICATE)
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
if (ntlm_read_message_fields(s, &(message->LmChallengeResponse)) <
0) /* LmChallengeResponseFields (8 bytes) */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
if (ntlm_read_message_fields(s, &(message->NtChallengeResponse)) <
0) /* NtChallengeResponseFields (8 bytes) */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
if (ntlm_read_message_fields(s, &(message->DomainName)) < 0) /* DomainNameFields (8 bytes) */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
if (ntlm_read_message_fields(s, &(message->UserName)) < 0) /* UserNameFields (8 bytes) */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
if (ntlm_read_message_fields(s, &(message->Workstation)) < 0) /* WorkstationFields (8 bytes) */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
if (ntlm_read_message_fields(s, &(message->EncryptedRandomSessionKey)) <
0) /* EncryptedRandomSessionKeyFields (8 bytes) */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
+ if (Stream_GetRemainingLength(s) < 4)
+ goto fail;
Stream_Read_UINT32(s, message->NegotiateFlags); /* NegotiateFlags (4 bytes) */
context->NegotiateKeyExchange =
(message->NegotiateFlags & NTLMSSP_NEGOTIATE_KEY_EXCH) ? TRUE : FALSE;
if ((context->NegotiateKeyExchange && !message->EncryptedRandomSessionKey.Len) ||
(!context->NegotiateKeyExchange && message->EncryptedRandomSessionKey.Len))
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
if (message->NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)
{
if (ntlm_read_version_info(s, &(message->Version)) < 0) /* Version (8 bytes) */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
}
PayloadBufferOffset = Stream_GetPosition(s);
+ status = SEC_E_INTERNAL_ERROR;
if (ntlm_read_message_fields_buffer(s, &(message->DomainName)) < 0) /* DomainName */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INTERNAL_ERROR;
- }
+ goto fail;
if (ntlm_read_message_fields_buffer(s, &(message->UserName)) < 0) /* UserName */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INTERNAL_ERROR;
- }
+ goto fail;
if (ntlm_read_message_fields_buffer(s, &(message->Workstation)) < 0) /* Workstation */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INTERNAL_ERROR;
- }
+ goto fail;
if (ntlm_read_message_fields_buffer(s, &(message->LmChallengeResponse)) <
0) /* LmChallengeResponse */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INTERNAL_ERROR;
- }
+ goto fail;
if (ntlm_read_message_fields_buffer(s, &(message->NtChallengeResponse)) <
0) /* NtChallengeResponse */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INTERNAL_ERROR;
- }
+ goto fail;
if (message->NtChallengeResponse.Len > 0)
{
+ int rc;
size_t cbAvFlags;
wStream* snt =
Stream_New(message->NtChallengeResponse.Buffer, message->NtChallengeResponse.Len);
if (!snt)
- {
- Stream_Free(s, FALSE);
- return SEC_E_INTERNAL_ERROR;
- }
-
- if (ntlm_read_ntlm_v2_response(snt, &(context->NTLMv2Response)) < 0)
- {
- Stream_Free(s, FALSE);
- Stream_Free(snt, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
+ status = SEC_E_INVALID_TOKEN;
+ rc = ntlm_read_ntlm_v2_response(snt, &(context->NTLMv2Response));
Stream_Free(snt, FALSE);
+ if (rc < 0)
+ goto fail;
+ status = SEC_E_INTERNAL_ERROR;
+
context->NtChallengeResponse.pvBuffer = message->NtChallengeResponse.Buffer;
context->NtChallengeResponse.cbBuffer = message->NtChallengeResponse.Len;
sspi_SecBufferFree(&(context->ChallengeTargetInfo));
@@ -833,18 +793,12 @@ SECURITY_STATUS ntlm_read_AuthenticateMessage(NTLM_CONTEXT* context, PSecBuffer
if (ntlm_read_message_fields_buffer(s, &(message->EncryptedRandomSessionKey)) <
0) /* EncryptedRandomSessionKey */
- {
- Stream_Free(s, FALSE);
- return SEC_E_INTERNAL_ERROR;
- }
+ goto fail;
if (message->EncryptedRandomSessionKey.Len > 0)
{
if (message->EncryptedRandomSessionKey.Len != 16)
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
CopyMemory(context->EncryptedRandomSessionKey, message->EncryptedRandomSessionKey.Buffer,
16);
@@ -853,10 +807,7 @@ SECURITY_STATUS ntlm_read_AuthenticateMessage(NTLM_CONTEXT* context, PSecBuffer
length = Stream_GetPosition(s);
if (!sspi_SecBufferAlloc(&context->AuthenticateMessage, length))
- {
- Stream_Free(s, FALSE);
- return SEC_E_INTERNAL_ERROR;
- }
+ goto fail;
CopyMemory(context->AuthenticateMessage.pvBuffer, Stream_Buffer(s), length);
buffer->cbBuffer = length;
@@ -866,15 +817,15 @@ SECURITY_STATUS ntlm_read_AuthenticateMessage(NTLM_CONTEXT* context, PSecBuffer
{
context->MessageIntegrityCheckOffset = (UINT32)Stream_GetPosition(s);
+ status = SEC_E_INVALID_TOKEN;
if (Stream_GetRemainingLength(s) < 16)
- {
- Stream_Free(s, FALSE);
- return SEC_E_INVALID_TOKEN;
- }
+ goto fail;
Stream_Read(s, message->MessageIntegrityCheck, 16);
}
+ status = SEC_E_INTERNAL_ERROR;
+
#ifdef WITH_DEBUG_NTLM
WLog_DBG(TAG, "AUTHENTICATE_MESSAGE (length = %" PRIu32 ")",
context->AuthenticateMessage.cbBuffer);
@@ -906,10 +857,7 @@ SECURITY_STATUS ntlm_read_AuthenticateMessage(NTLM_CONTEXT* context, PSecBuffer
credentials->identity.User = (UINT16*)malloc(message->UserName.Len);
if (!credentials->identity.User)
- {
- Stream_Free(s, FALSE);
- return SEC_E_INTERNAL_ERROR;
- }
+ goto fail;
CopyMemory(credentials->identity.User, message->UserName.Buffer, message->UserName.Len);
credentials->identity.UserLength = message->UserName.Len / 2;
@@ -920,10 +868,7 @@ SECURITY_STATUS ntlm_read_AuthenticateMessage(NTLM_CONTEXT* context, PSecBuffer
credentials->identity.Domain = (UINT16*)malloc(message->DomainName.Len);
if (!credentials->identity.Domain)
- {
- Stream_Free(s, FALSE);
- return SEC_E_INTERNAL_ERROR;
- }
+ goto fail;
CopyMemory(credentials->identity.Domain, message->DomainName.Buffer,
message->DomainName.Len);
@@ -934,6 +879,10 @@ SECURITY_STATUS ntlm_read_AuthenticateMessage(NTLM_CONTEXT* context, PSecBuffer
/* Computations beyond this point require the NTLM hash of the password */
context->state = NTLM_STATE_COMPLETION;
return SEC_I_COMPLETE_NEEDED;
+
+fail:
+ Stream_Free(s, FALSE);
+ return status;
}
/**
diff --git a/winpr/libwinpr/utils/collections/MessagePipe.c b/winpr/libwinpr/utils/collections/MessagePipe.c
index c593bc542..1e54d9ffd 100644
--- a/winpr/libwinpr/utils/collections/MessagePipe.c
+++ b/winpr/libwinpr/utils/collections/MessagePipe.c
@@ -58,7 +58,7 @@ wMessagePipe* MessagePipe_New()
goto error_in;
pipe->Out = MessageQueue_New(NULL);
- if (!pipe->In)
+ if (!pipe->Out)
goto error_out;
return pipe;
diff --git a/winpr/libwinpr/utils/image.c b/winpr/libwinpr/utils/image.c
index 990b4e1c4..41b4cc5e1 100644
--- a/winpr/libwinpr/utils/image.c
+++ b/winpr/libwinpr/utils/image.c
@@ -339,10 +339,13 @@ static int winpr_image_bitmap_read_buffer(wImage* image, const BYTE* buffer, siz
image->type = WINPR_IMAGE_BITMAP;
- if (Stream_Capacity(s) < bf.bfOffBits + bi.biSizeImage)
+ if (Stream_GetPosition(s) > bf.bfOffBits)
+ goto fail;
+ if (!Stream_SafeSeek(s, bf.bfOffBits - Stream_GetPosition(s)))
+ goto fail;
+ if (Stream_GetRemainingCapacity(s) < bi.biSizeImage)
goto fail;
- Stream_SetPosition(s, bf.bfOffBits);
image->width = bi.biWidth;
if (bi.biHeight < 0)
diff --git a/winpr/libwinpr/utils/ntlm.c b/winpr/libwinpr/utils/ntlm.c
index 9baf9e536..3af38b642 100644
--- a/winpr/libwinpr/utils/ntlm.c
+++ b/winpr/libwinpr/utils/ntlm.c
@@ -76,9 +76,7 @@ out_fail:
BOOL NTOWFv2W(LPWSTR Password, UINT32 PasswordLength, LPWSTR User, UINT32 UserLength, LPWSTR Domain,
UINT32 DomainLength, BYTE* NtHash)
{
- BYTE* buffer;
- BYTE NtHashV1[16];
- BOOL result = FALSE;
+ BYTE NtHashV1[WINPR_MD5_DIGEST_LENGTH];
if ((!User) || (!Password) || (!NtHash))
return FALSE;
@@ -86,24 +84,7 @@ BOOL NTOWFv2W(LPWSTR Password, UINT32 PasswordLength, LPWSTR User, UINT32 UserLe
if (!NTOWFv1W(Password, PasswordLength, NtHashV1))
return FALSE;
- if (!(buffer = (BYTE*)malloc(UserLength + DomainLength)))
- return FALSE;
-
- /* Concatenate(UpperCase(User), Domain) */
- CopyMemory(buffer, User, UserLength);
- CharUpperBuffW((LPWSTR)buffer, UserLength / 2);
- CopyMemory(&buffer[UserLength], Domain, DomainLength);
-
- /* Compute the HMAC-MD5 hash of the above value using the NTLMv1 hash as the key, the result is
- * the NTLMv2 hash */
- if (!winpr_HMAC(WINPR_MD_MD5, NtHashV1, 16, buffer, UserLength + DomainLength, NtHash,
- WINPR_MD4_DIGEST_LENGTH))
- goto out_fail;
-
- result = TRUE;
-out_fail:
- free(buffer);
- return result;
+ return NTOWFv2FromHashW(NtHashV1, User, UserLength, Domain, DomainLength, NtHash);
}
BOOL NTOWFv2A(LPSTR Password, UINT32 PasswordLength, LPSTR User, UINT32 UserLength, LPSTR Domain,
@@ -164,7 +145,7 @@ BOOL NTOWFv2FromHashW(BYTE* NtHashV1, LPWSTR User, UINT32 UserLength, LPWSTR Dom
/* Compute the HMAC-MD5 hash of the above value using the NTLMv1 hash as the key, the result is
* the NTLMv2 hash */
if (!winpr_HMAC(WINPR_MD_MD5, NtHashV1, 16, buffer, UserLength + DomainLength, NtHash,
- WINPR_MD4_DIGEST_LENGTH))
+ WINPR_MD5_DIGEST_LENGTH))
goto out_fail;
result = TRUE;