FreeRDP/libfreerdp/common/settings.c

2766 lines
61 KiB
C

/**
* FreeRDP: A Remote Desktop Protocol Implementation
* Settings Management
*
* Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
* Copyright 2016 Armin Novak <armin.novak@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winpr/crt.h>
#include <freerdp/settings.h>
#include <freerdp/freerdp.h>
#include <freerdp/log.h>
#define TAG FREERDP_TAG("common")
int freerdp_addin_set_argument(ADDIN_ARGV* args, char* argument)
{
int i;
char **new_argv;
for (i = 0; i < args->argc; i++)
{
if (strcmp(args->argv[i], argument) == 0)
{
return 1;
}
}
new_argv = (char**) realloc(args->argv, sizeof(char*) * (args->argc + 1));
if (!new_argv)
return -1;
args->argv = new_argv;
args->argc++;
if (!(args->argv[args->argc - 1] = _strdup(argument)))
return -1;
return 0;
}
int freerdp_addin_replace_argument(ADDIN_ARGV* args, char* previous, char* argument)
{
int i;
char **new_argv;
for (i = 0; i < args->argc; i++)
{
if (strcmp(args->argv[i], previous) == 0)
{
free(args->argv[i]);
if (!(args->argv[i] = _strdup(argument)))
return -1;
return 1;
}
}
new_argv = (char**) realloc(args->argv, sizeof(char*) * (args->argc + 1));
if (!new_argv)
return -1;
args->argv = new_argv;
args->argc++;
if (!(args->argv[args->argc - 1] = _strdup(argument)))
return -1;
return 0;
}
int freerdp_addin_set_argument_value(ADDIN_ARGV* args, char* option, char* value)
{
int i;
char* p;
char* str;
int length;
char **new_argv;
length = strlen(option) + strlen(value) + 1;
str = (char*) malloc(length + 1);
if (!str)
return -1;
sprintf_s(str, length + 1, "%s:%s", option, value);
for (i = 0; i < args->argc; i++)
{
p = strchr(args->argv[i], ':');
if (p)
{
if (strncmp(args->argv[i], option, p - args->argv[i]) == 0)
{
free(args->argv[i]);
args->argv[i] = str;
return 1;
}
}
}
new_argv = (char**) realloc(args->argv, sizeof(char*) * (args->argc + 1));
if (!new_argv)
{
free(str);
return -1;
}
args->argv = new_argv;
args->argc++;
args->argv[args->argc - 1] = str;
return 0;
}
int freerdp_addin_replace_argument_value(ADDIN_ARGV* args, char* previous, char* option, char* value)
{
int i;
char* str;
int length;
char **new_argv;
length = strlen(option) + strlen(value) + 1;
str = (char*) malloc(length + 1);
if (!str)
return -1;
sprintf_s(str, length + 1, "%s:%s", option, value);
for (i = 0; i < args->argc; i++)
{
if (strcmp(args->argv[i], previous) == 0)
{
free(args->argv[i]);
args->argv[i] = str;
return 1;
}
}
new_argv = (char**) realloc(args->argv, sizeof(char*) * (args->argc + 1));
if (!new_argv)
{
free(str);
return -1;
}
args->argv = new_argv;
args->argc++;
args->argv[args->argc - 1] = str;
return 0;
}
BOOL freerdp_device_collection_add(rdpSettings* settings, RDPDR_DEVICE* device)
{
if (!settings->DeviceArray)
return FALSE;
if (settings->DeviceArraySize < (settings->DeviceCount + 1))
{
UINT32 new_size;
RDPDR_DEVICE **new_array;
new_size = settings->DeviceArraySize * 2;
new_array = (RDPDR_DEVICE**)
realloc(settings->DeviceArray, new_size * sizeof(RDPDR_DEVICE*));
if (!new_array)
return FALSE;
settings->DeviceArray = new_array;
settings->DeviceArraySize = new_size;
}
settings->DeviceArray[settings->DeviceCount++] = device;
return TRUE;
}
RDPDR_DEVICE* freerdp_device_collection_find(rdpSettings* settings, const char* name)
{
UINT32 index;
RDPDR_DEVICE* device;
for (index = 0; index < settings->DeviceCount; index++)
{
device = (RDPDR_DEVICE*) settings->DeviceArray[index];
if (!device->Name)
continue;
if (strcmp(device->Name, name) == 0)
return device;
}
return NULL;
}
RDPDR_DEVICE* freerdp_device_collection_find_type(rdpSettings* settings, UINT32 type)
{
UINT32 index;
RDPDR_DEVICE* device;
for (index = 0; index < settings->DeviceCount; index++)
{
device = (RDPDR_DEVICE*) settings->DeviceArray[index];
if (device->Type == type)
return device;
}
return NULL;
}
RDPDR_DEVICE* freerdp_device_clone(RDPDR_DEVICE* device)
{
if (device->Type == RDPDR_DTYP_FILESYSTEM)
{
RDPDR_DRIVE* drive = (RDPDR_DRIVE*) device;
RDPDR_DRIVE* _drive = (RDPDR_DRIVE*) calloc(1, sizeof(RDPDR_DRIVE));
if (!_drive)
return NULL;
_drive->Id = drive->Id;
_drive->Type = drive->Type;
_drive->Name = _strdup(drive->Name);
if (!_drive->Name)
goto out_fs_name_error;
_drive->Path = _strdup(drive->Path);
if (!_drive->Path)
goto out_fs_path_error;
return (RDPDR_DEVICE*) _drive;
out_fs_path_error:
free(_drive->Name);
out_fs_name_error:
free(_drive);
return NULL;
}
if (device->Type == RDPDR_DTYP_PRINT)
{
RDPDR_PRINTER* printer = (RDPDR_PRINTER*) device;
RDPDR_PRINTER* _printer = (RDPDR_PRINTER*) calloc(1, sizeof(RDPDR_PRINTER));
if (!_printer)
return NULL;
_printer->Id = printer->Id;
_printer->Type = printer->Type;
if (printer->Name)
{
_printer->Name = _strdup(printer->Name);
if (!_printer->Name)
goto out_print_name_error;
}
if (printer->DriverName)
{
_printer->DriverName = _strdup(printer->DriverName);
if (!_printer->DriverName)
goto out_print_path_error;
}
return (RDPDR_DEVICE*) _printer;
out_print_path_error:
free(_printer->Name);
out_print_name_error:
free(_printer);
return NULL;
}
if (device->Type == RDPDR_DTYP_SMARTCARD)
{
RDPDR_SMARTCARD* smartcard = (RDPDR_SMARTCARD*) device;
RDPDR_SMARTCARD* _smartcard = (RDPDR_SMARTCARD*) calloc(1, sizeof(RDPDR_SMARTCARD));
if (!_smartcard)
return NULL;
_smartcard->Id = smartcard->Id;
_smartcard->Type = smartcard->Type;
if (smartcard->Name)
{
_smartcard->Name = _strdup(smartcard->Name);
if (!_smartcard->Name)
goto out_smartc_name_error;
}
return (RDPDR_DEVICE*) _smartcard;
out_smartc_name_error:
free(_smartcard);
return NULL;
}
if (device->Type == RDPDR_DTYP_SERIAL)
{
RDPDR_SERIAL* serial = (RDPDR_SERIAL*) device;
RDPDR_SERIAL* _serial = (RDPDR_SERIAL*) calloc(1, sizeof(RDPDR_SERIAL));
if (!_serial)
return NULL;
_serial->Id = serial->Id;
_serial->Type = serial->Type;
if (serial->Name)
{
_serial->Name = _strdup(serial->Name);
if (!_serial->Name)
goto out_serial_name_error;
}
if (serial->Path)
{
_serial->Path = _strdup(serial->Path);
if (!_serial->Path)
goto out_serial_path_error;
}
if (serial->Driver)
{
_serial->Driver = _strdup(serial->Driver);
if (!_serial->Driver)
goto out_serial_driver_error;
}
return (RDPDR_DEVICE*) _serial;
out_serial_driver_error:
free(_serial->Path);
out_serial_path_error:
free(_serial->Name);
out_serial_name_error:
free(_serial);
return NULL;
}
if (device->Type == RDPDR_DTYP_PARALLEL)
{
RDPDR_PARALLEL* parallel = (RDPDR_PARALLEL*) device;
RDPDR_PARALLEL* _parallel = (RDPDR_PARALLEL*) calloc(1, sizeof(RDPDR_PARALLEL));
if (!_parallel)
return NULL;
_parallel->Id = parallel->Id;
_parallel->Type = parallel->Type;
if (parallel->Name)
{
_parallel->Name = _strdup(parallel->Name);
if (!_parallel->Name)
goto out_parallel_name_error;
}
if (parallel->Path)
{
_parallel->Path = _strdup(parallel->Path);
if (!_parallel->Path)
goto out_parallel_path_error;
}
return (RDPDR_DEVICE*) _parallel;
out_parallel_path_error:
free(_parallel->Name);
out_parallel_name_error:
free(_parallel);
return NULL;
}
WLog_ERR(TAG, "unknown device type %"PRIu32"", device->Type);
return NULL;
}
void freerdp_device_collection_free(rdpSettings* settings)
{
UINT32 index;
RDPDR_DEVICE* device;
for (index = 0; index < settings->DeviceCount; index++)
{
device = (RDPDR_DEVICE*) settings->DeviceArray[index];
if (!device)
continue;
free(device->Name);
if (settings->DeviceArray[index]->Type == RDPDR_DTYP_FILESYSTEM)
{
free(((RDPDR_DRIVE*) device)->Path);
}
else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_PRINT)
{
}
else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_SMARTCARD)
{
}
else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_SERIAL)
{
free(((RDPDR_SERIAL*) device)->Path);
free(((RDPDR_SERIAL*) device)->Driver);
}
else if (settings->DeviceArray[index]->Type == RDPDR_DTYP_PARALLEL)
{
free(((RDPDR_PARALLEL*) device)->Path);
}
free(device);
}
free(settings->DeviceArray);
settings->DeviceArraySize = 0;
settings->DeviceArray = NULL;
settings->DeviceCount = 0;
}
BOOL freerdp_static_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* channel)
{
if (!settings->StaticChannelArray)
return FALSE;
if (settings->StaticChannelArraySize < (settings->StaticChannelCount + 1))
{
UINT32 new_size;
ADDIN_ARGV **new_array;
new_size = settings->StaticChannelArraySize * 2;
new_array = (ADDIN_ARGV**)
realloc(settings->StaticChannelArray, new_size * sizeof(ADDIN_ARGV*));
if (!new_array)
return FALSE;
settings->StaticChannelArray = new_array;
settings->StaticChannelArraySize = new_size;
}
settings->StaticChannelArray[settings->StaticChannelCount++] = channel;
return TRUE;
}
ADDIN_ARGV* freerdp_static_channel_collection_find(rdpSettings* settings, const char* name)
{
UINT32 index;
ADDIN_ARGV* channel;
for (index = 0; index < settings->StaticChannelCount; index++)
{
channel = settings->StaticChannelArray[index];
if (strcmp(channel->argv[0], name) == 0)
return channel;
}
return NULL;
}
ADDIN_ARGV* freerdp_static_channel_clone(ADDIN_ARGV* channel)
{
int index;
ADDIN_ARGV* _channel = NULL;
_channel = (ADDIN_ARGV*) malloc(sizeof(ADDIN_ARGV));
if (!_channel)
return NULL;
_channel->argc = channel->argc;
_channel->argv = (char**) calloc(channel->argc, sizeof(char*));
if (!_channel->argv)
goto out_free;
for (index = 0; index < _channel->argc; index++)
{
_channel->argv[index] = _strdup(channel->argv[index]);
if (!_channel->argv[index])
goto out_release_args;
}
return _channel;
out_release_args:
for (index = 0; _channel->argv[index]; index++)
free(_channel->argv[index]);
out_free:
free(_channel);
return NULL;
}
void freerdp_static_channel_collection_free(rdpSettings* settings)
{
int j;
UINT32 i;
for (i = 0; i < settings->StaticChannelCount; i++)
{
if (!settings->StaticChannelArray[i])
continue;
for (j = 0; j < settings->StaticChannelArray[i]->argc; j++)
free(settings->StaticChannelArray[i]->argv[j]);
free(settings->StaticChannelArray[i]->argv);
free(settings->StaticChannelArray[i]);
}
free(settings->StaticChannelArray);
settings->StaticChannelArraySize = 0;
settings->StaticChannelArray = NULL;
settings->StaticChannelCount = 0;
}
BOOL freerdp_dynamic_channel_collection_add(rdpSettings* settings, ADDIN_ARGV* channel)
{
if (!settings->DynamicChannelArray)
return FALSE;
if (settings->DynamicChannelArraySize < (settings->DynamicChannelCount + 1))
{
ADDIN_ARGV **new_array;
new_array = realloc(settings->DynamicChannelArray, settings->DynamicChannelArraySize * sizeof(ADDIN_ARGV*) * 2);
if (!new_array)
return FALSE;
settings->DynamicChannelArraySize *= 2;
settings->DynamicChannelArray = new_array;
}
settings->DynamicChannelArray[settings->DynamicChannelCount++] = channel;
return TRUE;
}
ADDIN_ARGV* freerdp_dynamic_channel_collection_find(rdpSettings* settings, const char* name)
{
UINT32 index;
ADDIN_ARGV* channel;
for (index = 0; index < settings->DynamicChannelCount; index++)
{
channel = settings->DynamicChannelArray[index];
if (strcmp(channel->argv[0], name) == 0)
return channel;
}
return NULL;
}
ADDIN_ARGV* freerdp_dynamic_channel_clone(ADDIN_ARGV* channel)
{
int index;
ADDIN_ARGV* _channel = NULL;
_channel = (ADDIN_ARGV*) malloc(sizeof(ADDIN_ARGV));
if (!_channel)
return NULL;
_channel->argc = channel->argc;
_channel->argv = (char**) calloc(sizeof(char*), channel->argc);
if (!_channel->argv)
goto out_free;
for (index = 0; index < _channel->argc; index++)
{
_channel->argv[index] = _strdup(channel->argv[index]);
if (!_channel->argv[index])
goto out_release_args;
}
return _channel;
out_release_args:
for (index = 0; _channel->argv[index]; index++)
free(_channel->argv[index]);
out_free:
free(_channel);
return NULL;
}
void freerdp_dynamic_channel_collection_free(rdpSettings* settings)
{
int j;
UINT32 i;
for (i = 0; i < settings->DynamicChannelCount; i++)
{
if (!settings->DynamicChannelArray[i])
continue;
for (j = 0; j < settings->DynamicChannelArray[i]->argc; j++)
free(settings->DynamicChannelArray[i]->argv[j]);
free(settings->DynamicChannelArray[i]->argv);
free(settings->DynamicChannelArray[i]);
}
free(settings->DynamicChannelArray);
settings->DynamicChannelArraySize = 0;
settings->DynamicChannelArray = NULL;
settings->DynamicChannelCount = 0;
}
void freerdp_target_net_addresses_free(rdpSettings* settings)
{
UINT32 index;
for (index = 0; index < settings->TargetNetAddressCount; index++)
free(settings->TargetNetAddresses[index]);
free(settings->TargetNetAddresses);
free(settings->TargetNetPorts);
settings->TargetNetAddressCount = 0;
settings->TargetNetAddresses = NULL;
settings->TargetNetPorts = NULL;
}
void freerdp_performance_flags_make(rdpSettings* settings)
{
settings->PerformanceFlags = PERF_FLAG_NONE;
if (settings->AllowFontSmoothing)
settings->PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
if (settings->AllowDesktopComposition)
settings->PerformanceFlags |= PERF_ENABLE_DESKTOP_COMPOSITION;
if (settings->DisableWallpaper)
settings->PerformanceFlags |= PERF_DISABLE_WALLPAPER;
if (settings->DisableFullWindowDrag)
settings->PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
if (settings->DisableMenuAnims)
settings->PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
if (settings->DisableThemes)
settings->PerformanceFlags |= PERF_DISABLE_THEMING;
}
void freerdp_performance_flags_split(rdpSettings* settings)
{
settings->AllowFontSmoothing = (settings->PerformanceFlags & PERF_ENABLE_FONT_SMOOTHING) ? TRUE : FALSE;
settings->AllowDesktopComposition = (settings->PerformanceFlags & PERF_ENABLE_DESKTOP_COMPOSITION) ? TRUE : FALSE;
settings->DisableWallpaper = (settings->PerformanceFlags & PERF_DISABLE_WALLPAPER) ? TRUE : FALSE;
settings->DisableFullWindowDrag = (settings->PerformanceFlags & PERF_DISABLE_FULLWINDOWDRAG) ? TRUE : FALSE;
settings->DisableMenuAnims = (settings->PerformanceFlags & PERF_DISABLE_MENUANIMATIONS) ? TRUE : FALSE;
settings->DisableThemes = (settings->PerformanceFlags & PERF_DISABLE_THEMING) ? TRUE : FALSE;
}
void freerdp_set_gateway_usage_method(rdpSettings* settings, UINT32 GatewayUsageMethod)
{
freerdp_set_param_uint32(settings, FreeRDP_GatewayUsageMethod, GatewayUsageMethod);
if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DIRECT)
{
freerdp_set_param_bool(settings, FreeRDP_GatewayEnabled, FALSE);
freerdp_set_param_bool(settings, FreeRDP_GatewayBypassLocal, FALSE);
}
else if (GatewayUsageMethod == TSC_PROXY_MODE_DIRECT)
{
freerdp_set_param_bool(settings, FreeRDP_GatewayEnabled, TRUE);
freerdp_set_param_bool(settings, FreeRDP_GatewayBypassLocal, FALSE);
}
else if (GatewayUsageMethod == TSC_PROXY_MODE_DETECT)
{
freerdp_set_param_bool(settings, FreeRDP_GatewayEnabled, TRUE);
freerdp_set_param_bool(settings, FreeRDP_GatewayBypassLocal, TRUE);
}
else if (GatewayUsageMethod == TSC_PROXY_MODE_DEFAULT)
{
/**
* This corresponds to "Automatically detect RD Gateway server settings",
* which means the client attempts to use gateway group policy settings
* http://technet.microsoft.com/en-us/library/cc770601.aspx
*/
freerdp_set_param_bool(settings, FreeRDP_GatewayEnabled, FALSE);
freerdp_set_param_bool(settings, FreeRDP_GatewayBypassLocal, FALSE);
}
else if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DETECT)
{
freerdp_set_param_bool(settings, FreeRDP_GatewayEnabled, FALSE);
freerdp_set_param_bool(settings, FreeRDP_GatewayBypassLocal, FALSE);
}
}
void freerdp_update_gateway_usage_method(rdpSettings* settings, UINT32 GatewayEnabled, UINT32 GatewayBypassLocal)
{
UINT32 GatewayUsageMethod = 0;
if (!GatewayEnabled && !GatewayBypassLocal)
GatewayUsageMethod = TSC_PROXY_MODE_NONE_DIRECT;
else if (GatewayEnabled && !GatewayBypassLocal)
GatewayUsageMethod = TSC_PROXY_MODE_DIRECT;
else if (GatewayEnabled && GatewayBypassLocal)
GatewayUsageMethod = TSC_PROXY_MODE_DETECT;
freerdp_set_gateway_usage_method(settings, GatewayUsageMethod);
}
/**
* Partially Generated Code
*/
BOOL freerdp_get_param_bool(rdpSettings* settings, int id)
{
switch (id)
{
case FreeRDP_ServerMode:
return settings->ServerMode;
case FreeRDP_NetworkAutoDetect:
return settings->NetworkAutoDetect;
case FreeRDP_SupportAsymetricKeys:
return settings->SupportAsymetricKeys;
case FreeRDP_SupportErrorInfoPdu:
return settings->SupportErrorInfoPdu;
case FreeRDP_SupportStatusInfoPdu:
return settings->SupportStatusInfoPdu;
case FreeRDP_SupportMonitorLayoutPdu:
return settings->SupportMonitorLayoutPdu;
case FreeRDP_SupportGraphicsPipeline:
return settings->SupportGraphicsPipeline;
case FreeRDP_SupportDynamicTimeZone:
return settings->SupportDynamicTimeZone;
case FreeRDP_UseRdpSecurityLayer:
return settings->UseRdpSecurityLayer;
case FreeRDP_ConsoleSession:
return settings->ConsoleSession;
case FreeRDP_SpanMonitors:
return settings->SpanMonitors;
case FreeRDP_UseMultimon:
return settings->UseMultimon;
case FreeRDP_ForceMultimon:
return settings->ForceMultimon;
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_MouseHasWheel:
return settings->MouseHasWheel;
case FreeRDP_RemoteConsoleAudio:
return settings->RemoteConsoleAudio;
case FreeRDP_AudioPlayback:
return settings->AudioPlayback;
case FreeRDP_AudioCapture:
return settings->AudioCapture;
case FreeRDP_VideoDisable:
return settings->VideoDisable;
case FreeRDP_PasswordIsSmartcardPin:
return settings->PasswordIsSmartcardPin;
case FreeRDP_UsingSavedCredentials:
return settings->UsingSavedCredentials;
case FreeRDP_ForceEncryptedCsPdu:
return settings->ForceEncryptedCsPdu;
case FreeRDP_HiDefRemoteApp:
return settings->HiDefRemoteApp;
case FreeRDP_IPv6Enabled:
return settings->IPv6Enabled;
case FreeRDP_AutoReconnectionEnabled:
return settings->AutoReconnectionEnabled;
case FreeRDP_DynamicDaylightTimeDisabled:
return settings->DynamicDaylightTimeDisabled;
case FreeRDP_AllowFontSmoothing:
return settings->AllowFontSmoothing;
case FreeRDP_DisableWallpaper:
return settings->DisableWallpaper;
case FreeRDP_DisableFullWindowDrag:
return settings->DisableFullWindowDrag;
case FreeRDP_DisableMenuAnims:
return settings->DisableMenuAnims;
case FreeRDP_DisableThemes:
return settings->DisableThemes;
case FreeRDP_DisableCursorShadow:
return settings->DisableCursorShadow;
case FreeRDP_DisableCursorBlinking:
return settings->DisableCursorBlinking;
case FreeRDP_AllowDesktopComposition:
return settings->AllowDesktopComposition;
case FreeRDP_RemoteAssistanceMode:
return settings->RemoteAssistanceMode;
case FreeRDP_TlsSecurity:
return settings->TlsSecurity;
case FreeRDP_NlaSecurity:
return settings->NlaSecurity;
case FreeRDP_RdpSecurity:
return settings->RdpSecurity;
case FreeRDP_ExtSecurity:
return settings->ExtSecurity;
case FreeRDP_Authentication:
return settings->Authentication;
case FreeRDP_NegotiateSecurityLayer:
return settings->NegotiateSecurityLayer;
case FreeRDP_RestrictedAdminModeRequired:
return settings->RestrictedAdminModeRequired;
case FreeRDP_DisableCredentialsDelegation:
return settings->DisableCredentialsDelegation;
case FreeRDP_AuthenticationLevel:
return settings->AuthenticationLevel;
case FreeRDP_VmConnectMode:
return settings->VmConnectMode;
case FreeRDP_MstscCookieMode:
return settings->MstscCookieMode;
case FreeRDP_SendPreconnectionPdu:
return settings->SendPreconnectionPdu;
case FreeRDP_IgnoreCertificate:
return settings->IgnoreCertificate;
case FreeRDP_AutoAcceptCertificate:
return settings->AutoAcceptCertificate;
case FreeRDP_ExternalCertificateManagement:
return settings->ExternalCertificateManagement;
case FreeRDP_FIPSMode:
return settings->FIPSMode;
case FreeRDP_Workarea:
return settings->Workarea;
case FreeRDP_Fullscreen:
return settings->Fullscreen;
case FreeRDP_GrabKeyboard:
return settings->GrabKeyboard;
case FreeRDP_Decorations:
return settings->Decorations;
case FreeRDP_SmartSizing:
return settings->SmartSizing;
case FreeRDP_MouseMotion:
return settings->MouseMotion;
case FreeRDP_AsyncInput:
return settings->AsyncInput;
case FreeRDP_AsyncUpdate:
return settings->AsyncUpdate;
case FreeRDP_AsyncChannels:
return settings->AsyncChannels;
case FreeRDP_AsyncTransport:
return settings->AsyncTransport;
case FreeRDP_ToggleFullscreen:
return settings->ToggleFullscreen;
case FreeRDP_SoftwareGdi:
return settings->SoftwareGdi;
case FreeRDP_LocalConnection:
return settings->LocalConnection;
case FreeRDP_AuthenticationOnly:
return settings->AuthenticationOnly;
case FreeRDP_CredentialsFromStdin:
return settings->CredentialsFromStdin;
case FreeRDP_DumpRemoteFx:
return settings->DumpRemoteFx;
case FreeRDP_PlayRemoteFx:
return settings->PlayRemoteFx;
case FreeRDP_GatewayUseSameCredentials:
return settings->GatewayUseSameCredentials;
case FreeRDP_GatewayEnabled:
return settings->GatewayEnabled;
case FreeRDP_GatewayBypassLocal:
return settings->GatewayBypassLocal;
case FreeRDP_GatewayRpcTransport:
return settings->GatewayRpcTransport;
case FreeRDP_GatewayHttpTransport:
return settings->GatewayHttpTransport;
case FreeRDP_GatewayUdpTransport:
return settings->GatewayUdpTransport;
case FreeRDP_RemoteApplicationMode:
return settings->RemoteApplicationMode;
case FreeRDP_DisableRemoteAppCapsCheck:
return settings->DisableRemoteAppCapsCheck;
case FreeRDP_RemoteAppLanguageBarSupported:
return settings->RemoteAppLanguageBarSupported;
case FreeRDP_RefreshRect:
return settings->RefreshRect;
case FreeRDP_SuppressOutput:
return settings->SuppressOutput;
case FreeRDP_FastPathOutput:
return settings->FastPathOutput;
case FreeRDP_SaltedChecksum:
return settings->SaltedChecksum;
case FreeRDP_LongCredentialsSupported:
return settings->LongCredentialsSupported;
case FreeRDP_NoBitmapCompressionHeader:
return settings->NoBitmapCompressionHeader;
case FreeRDP_BitmapCompressionDisabled:
return settings->BitmapCompressionDisabled;
case FreeRDP_DesktopResize:
return settings->DesktopResize;
case FreeRDP_DrawAllowDynamicColorFidelity:
return settings->DrawAllowDynamicColorFidelity;
case FreeRDP_DrawAllowColorSubsampling:
return settings->DrawAllowColorSubsampling;
case FreeRDP_DrawAllowSkipAlpha:
return settings->DrawAllowSkipAlpha;
case FreeRDP_BitmapCacheV3Enabled:
return settings->BitmapCacheV3Enabled;
case FreeRDP_AltSecFrameMarkerSupport:
return settings->AltSecFrameMarkerSupport;
case FreeRDP_BitmapCacheEnabled:
return settings->BitmapCacheEnabled;
case FreeRDP_AllowCacheWaitingList:
return settings->AllowCacheWaitingList;
case FreeRDP_BitmapCachePersistEnabled:
return settings->BitmapCachePersistEnabled;
case FreeRDP_ColorPointerFlag:
return settings->ColorPointerFlag;
case FreeRDP_UnicodeInput:
return settings->UnicodeInput;
case FreeRDP_FastPathInput:
return settings->FastPathInput;
case FreeRDP_MultiTouchInput:
return settings->MultiTouchInput;
case FreeRDP_MultiTouchGestures:
return settings->MultiTouchGestures;
case FreeRDP_SoundBeepsEnabled:
return settings->SoundBeepsEnabled;
case FreeRDP_SurfaceCommandsEnabled:
return settings->SurfaceCommandsEnabled;
case FreeRDP_FrameMarkerCommandEnabled:
return settings->FrameMarkerCommandEnabled;
case FreeRDP_RemoteFxOnly:
return settings->RemoteFxOnly;
case FreeRDP_RemoteFxCodec:
return settings->RemoteFxCodec;
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_DrawNineGridEnabled:
return settings->DrawNineGridEnabled;
case FreeRDP_DrawGdiPlusEnabled:
return settings->DrawGdiPlusEnabled;
case FreeRDP_DrawGdiPlusCacheEnabled:
return settings->DrawGdiPlusCacheEnabled;
case FreeRDP_DeviceRedirection:
return settings->DeviceRedirection;
case FreeRDP_RedirectDrives:
return settings->RedirectDrives;
case FreeRDP_RedirectHomeDrive:
return settings->RedirectHomeDrive;
case FreeRDP_RedirectSmartCards:
return settings->RedirectSmartCards;
case FreeRDP_RedirectPrinters:
return settings->RedirectPrinters;
case FreeRDP_RedirectSerialPorts:
return settings->RedirectSerialPorts;
case FreeRDP_RedirectParallelPorts:
return settings->RedirectParallelPorts;
case FreeRDP_RedirectClipboard:
return settings->RedirectClipboard;
default:
WLog_ERR(TAG, "freerdp_get_param_bool: unknown id: %d", id);
return -1;
}
}
int freerdp_set_param_bool(rdpSettings* settings, int id, BOOL param)
{
switch (id)
{
case FreeRDP_ServerMode:
settings->ServerMode = param;
break;
case FreeRDP_NetworkAutoDetect:
settings->NetworkAutoDetect = param;
break;
case FreeRDP_SupportAsymetricKeys:
settings->SupportAsymetricKeys = param;
break;
case FreeRDP_SupportErrorInfoPdu:
settings->SupportErrorInfoPdu = param;
break;
case FreeRDP_SupportStatusInfoPdu:
settings->SupportStatusInfoPdu = param;
break;
case FreeRDP_SupportMonitorLayoutPdu:
settings->SupportMonitorLayoutPdu = param;
break;
case FreeRDP_SupportGraphicsPipeline:
settings->SupportGraphicsPipeline = param;
break;
case FreeRDP_SupportDynamicTimeZone:
settings->SupportDynamicTimeZone = param;
break;
case FreeRDP_UseRdpSecurityLayer:
settings->UseRdpSecurityLayer = param;
break;
case FreeRDP_ConsoleSession:
settings->ConsoleSession = param;
break;
case FreeRDP_SpanMonitors:
settings->SpanMonitors = param;
break;
case FreeRDP_UseMultimon:
settings->UseMultimon = param;
break;
case FreeRDP_ForceMultimon:
settings->ForceMultimon = param;
break;
case FreeRDP_AutoLogonEnabled:
settings->AutoLogonEnabled = param;
break;
case FreeRDP_CompressionEnabled:
settings->CompressionEnabled = param;
break;
case FreeRDP_DisableCtrlAltDel:
settings->DisableCtrlAltDel = param;
break;
case FreeRDP_EnableWindowsKey:
settings->EnableWindowsKey = param;
break;
case FreeRDP_MaximizeShell:
settings->MaximizeShell = param;
break;
case FreeRDP_LogonNotify:
settings->LogonNotify = param;
break;
case FreeRDP_LogonErrors:
settings->LogonErrors = param;
break;
case FreeRDP_MouseAttached:
settings->MouseAttached = param;
break;
case FreeRDP_MouseHasWheel:
settings->MouseHasWheel = param;
break;
case FreeRDP_RemoteConsoleAudio:
settings->RemoteConsoleAudio = param;
break;
case FreeRDP_AudioPlayback:
settings->AudioPlayback = param;
break;
case FreeRDP_AudioCapture:
settings->AudioCapture = param;
break;
case FreeRDP_VideoDisable:
settings->VideoDisable = param;
break;
case FreeRDP_PasswordIsSmartcardPin:
settings->PasswordIsSmartcardPin = param;
break;
case FreeRDP_UsingSavedCredentials:
settings->UsingSavedCredentials = param;
break;
case FreeRDP_ForceEncryptedCsPdu:
settings->ForceEncryptedCsPdu = param;
break;
case FreeRDP_HiDefRemoteApp:
settings->HiDefRemoteApp = param;
break;
case FreeRDP_IPv6Enabled:
settings->IPv6Enabled = param;
break;
case FreeRDP_AutoReconnectionEnabled:
settings->AutoReconnectionEnabled = param;
break;
case FreeRDP_DynamicDaylightTimeDisabled:
settings->DynamicDaylightTimeDisabled = param;
break;
case FreeRDP_AllowFontSmoothing:
settings->AllowFontSmoothing = param;
break;
case FreeRDP_DisableWallpaper:
settings->DisableWallpaper = param;
break;
case FreeRDP_DisableFullWindowDrag:
settings->DisableFullWindowDrag = param;
break;
case FreeRDP_DisableMenuAnims:
settings->DisableMenuAnims = param;
break;
case FreeRDP_DisableThemes:
settings->DisableThemes = param;
break;
case FreeRDP_DisableCursorShadow:
settings->DisableCursorShadow = param;
break;
case FreeRDP_DisableCursorBlinking:
settings->DisableCursorBlinking = param;
break;
case FreeRDP_AllowDesktopComposition:
settings->AllowDesktopComposition = param;
break;
case FreeRDP_RemoteAssistanceMode:
settings->RemoteAssistanceMode = param;
break;
case FreeRDP_TlsSecurity:
settings->TlsSecurity = param;
break;
case FreeRDP_NlaSecurity:
settings->NlaSecurity = param;
break;
case FreeRDP_RdpSecurity:
settings->RdpSecurity = param;
break;
case FreeRDP_ExtSecurity:
settings->ExtSecurity = param;
break;
case FreeRDP_Authentication:
settings->Authentication = param;
break;
case FreeRDP_NegotiateSecurityLayer:
settings->NegotiateSecurityLayer = param;
break;
case FreeRDP_RestrictedAdminModeRequired:
settings->RestrictedAdminModeRequired = param;
break;
case FreeRDP_DisableCredentialsDelegation:
settings->DisableCredentialsDelegation = param;
break;
case FreeRDP_AuthenticationLevel:
settings->AuthenticationLevel = param;
break;
case FreeRDP_VmConnectMode:
settings->VmConnectMode = param;
break;
case FreeRDP_MstscCookieMode:
settings->MstscCookieMode = param;
break;
case FreeRDP_SendPreconnectionPdu:
settings->SendPreconnectionPdu = param;
break;
case FreeRDP_IgnoreCertificate:
settings->IgnoreCertificate = param;
break;
case FreeRDP_AutoAcceptCertificate:
settings->AutoAcceptCertificate = param;
break;
case FreeRDP_ExternalCertificateManagement:
settings->ExternalCertificateManagement = param;
break;
case FreeRDP_FIPSMode:
settings->FIPSMode = param;
break;
case FreeRDP_Workarea:
settings->Workarea = param;
break;
case FreeRDP_Fullscreen:
settings->Fullscreen = param;
break;
case FreeRDP_GrabKeyboard:
settings->GrabKeyboard = param;
break;
case FreeRDP_Decorations:
settings->Decorations = param;
break;
case FreeRDP_SmartSizing:
settings->SmartSizing = param;
break;
case FreeRDP_MouseMotion:
settings->MouseMotion = param;
break;
case FreeRDP_AsyncInput:
settings->AsyncInput = param;
break;
case FreeRDP_AsyncUpdate:
settings->AsyncUpdate = param;
break;
case FreeRDP_AsyncChannels:
settings->AsyncChannels = param;
break;
case FreeRDP_AsyncTransport:
settings->AsyncTransport = param;
break;
case FreeRDP_ToggleFullscreen:
settings->ToggleFullscreen = param;
break;
case FreeRDP_SoftwareGdi:
settings->SoftwareGdi = param;
break;
case FreeRDP_LocalConnection:
settings->LocalConnection = param;
break;
case FreeRDP_AuthenticationOnly:
settings->AuthenticationOnly = param;
break;
case FreeRDP_CredentialsFromStdin:
settings->CredentialsFromStdin = param;
break;
case FreeRDP_DumpRemoteFx:
settings->DumpRemoteFx = param;
break;
case FreeRDP_PlayRemoteFx:
settings->PlayRemoteFx = param;
break;
case FreeRDP_GatewayUseSameCredentials:
settings->GatewayUseSameCredentials = param;
break;
case FreeRDP_GatewayEnabled:
settings->GatewayEnabled = param;
break;
case FreeRDP_GatewayBypassLocal:
settings->GatewayBypassLocal = param;
break;
case FreeRDP_GatewayRpcTransport:
settings->GatewayRpcTransport = param;
break;
case FreeRDP_GatewayHttpTransport:
settings->GatewayHttpTransport = param;
break;
case FreeRDP_GatewayUdpTransport:
settings->GatewayUdpTransport = param;
break;
case FreeRDP_RemoteApplicationMode:
settings->RemoteApplicationMode = param;
break;
case FreeRDP_DisableRemoteAppCapsCheck:
settings->DisableRemoteAppCapsCheck = param;
break;
case FreeRDP_RemoteAppLanguageBarSupported:
settings->RemoteAppLanguageBarSupported = param;
break;
case FreeRDP_RefreshRect:
settings->RefreshRect = param;
break;
case FreeRDP_SuppressOutput:
settings->SuppressOutput = param;
break;
case FreeRDP_FastPathOutput:
settings->FastPathOutput = param;
break;
case FreeRDP_SaltedChecksum:
settings->SaltedChecksum = param;
break;
case FreeRDP_LongCredentialsSupported:
settings->LongCredentialsSupported = param;
break;
case FreeRDP_NoBitmapCompressionHeader:
settings->NoBitmapCompressionHeader = param;
break;
case FreeRDP_BitmapCompressionDisabled:
settings->BitmapCompressionDisabled = param;
break;
case FreeRDP_DesktopResize:
settings->DesktopResize = param;
break;
case FreeRDP_DrawAllowDynamicColorFidelity:
settings->DrawAllowDynamicColorFidelity = param;
break;
case FreeRDP_DrawAllowColorSubsampling:
settings->DrawAllowColorSubsampling = param;
break;
case FreeRDP_DrawAllowSkipAlpha:
settings->DrawAllowSkipAlpha = param;
break;
case FreeRDP_BitmapCacheV3Enabled:
settings->BitmapCacheV3Enabled = param;
break;
case FreeRDP_AltSecFrameMarkerSupport:
settings->AltSecFrameMarkerSupport = param;
break;
case FreeRDP_BitmapCacheEnabled:
settings->BitmapCacheEnabled = param;
break;
case FreeRDP_AllowCacheWaitingList:
settings->AllowCacheWaitingList = param;
break;
case FreeRDP_BitmapCachePersistEnabled:
settings->BitmapCachePersistEnabled = param;
break;
case FreeRDP_ColorPointerFlag:
settings->ColorPointerFlag = param;
break;
case FreeRDP_UnicodeInput:
settings->UnicodeInput = param;
break;
case FreeRDP_FastPathInput:
settings->FastPathInput = param;
break;
case FreeRDP_MultiTouchInput:
settings->MultiTouchInput = param;
break;
case FreeRDP_MultiTouchGestures:
settings->MultiTouchGestures = param;
break;
case FreeRDP_SoundBeepsEnabled:
settings->SoundBeepsEnabled = param;
break;
case FreeRDP_SurfaceCommandsEnabled:
settings->SurfaceCommandsEnabled = param;
break;
case FreeRDP_FrameMarkerCommandEnabled:
settings->FrameMarkerCommandEnabled = param;
break;
case FreeRDP_RemoteFxOnly:
settings->RemoteFxOnly = param;
break;
case FreeRDP_RemoteFxCodec:
settings->RemoteFxCodec = param;
break;
case FreeRDP_RemoteFxImageCodec:
settings->RemoteFxImageCodec = param;
break;
case FreeRDP_NSCodec:
settings->NSCodec = param;
break;
case FreeRDP_NSCodecAllowSubsampling:
settings->NSCodecAllowSubsampling = param;
break;
case FreeRDP_NSCodecAllowDynamicColorFidelity:
settings->NSCodecAllowDynamicColorFidelity = param;
break;
case FreeRDP_JpegCodec:
settings->JpegCodec = param;
break;
case FreeRDP_GfxThinClient:
settings->GfxThinClient = param;
break;
case FreeRDP_GfxSmallCache:
settings->GfxSmallCache = param;
break;
case FreeRDP_GfxProgressive:
settings->GfxProgressive = param;
break;
case FreeRDP_GfxProgressiveV2:
settings->GfxProgressiveV2 = param;
break;
case FreeRDP_GfxH264:
settings->GfxH264 = param;
break;
case FreeRDP_GfxAVC444:
settings->GfxAVC444 = param;
break;
case FreeRDP_GfxSendQoeAck:
settings->GfxSendQoeAck = param;
break;
case FreeRDP_DrawNineGridEnabled:
settings->DrawNineGridEnabled = param;
break;
case FreeRDP_DrawGdiPlusEnabled:
settings->DrawGdiPlusEnabled = param;
break;
case FreeRDP_DrawGdiPlusCacheEnabled:
settings->DrawGdiPlusCacheEnabled = param;
break;
case FreeRDP_DeviceRedirection:
settings->DeviceRedirection = param;
break;
case FreeRDP_RedirectDrives:
settings->RedirectDrives = param;
break;
case FreeRDP_RedirectHomeDrive:
settings->RedirectHomeDrive = param;
break;
case FreeRDP_RedirectSmartCards:
settings->RedirectSmartCards = param;
break;
case FreeRDP_RedirectPrinters:
settings->RedirectPrinters = param;
break;
case FreeRDP_RedirectSerialPorts:
settings->RedirectSerialPorts = param;
break;
case FreeRDP_RedirectParallelPorts:
settings->RedirectParallelPorts = param;
break;
case FreeRDP_RedirectClipboard:
settings->RedirectClipboard = param;
break;
default:
WLog_ERR(TAG, "freerdp_set_param_bool: unknown id %d (param = %"PRId32")", id, param);
return -1;
}
/* Mark field as modified */
settings->SettingsModified[id] = 1;
return -1;
}
int freerdp_get_param_int(rdpSettings* settings, int id)
{
switch (id)
{
case FreeRDP_XPan:
return settings->XPan;
case FreeRDP_YPan:
return settings->YPan;
default:
WLog_ERR(TAG, "freerdp_get_param_int: unknown id: %d", id);
return 0;
}
}
int freerdp_set_param_int(rdpSettings* settings, int id, int param)
{
switch (id)
{
case FreeRDP_XPan:
settings->XPan = param;
break;
case FreeRDP_YPan:
settings->YPan = param;
break;
default:
WLog_ERR(TAG, "freerdp_set_param_int: unknown id %d (param = %d)", id, param);
return -1;
}
settings->SettingsModified[id] = 1;
return 0;
}
UINT32 freerdp_get_param_uint32(rdpSettings* settings, int id)
{
switch (id)
{
case FreeRDP_ShareId:
return settings->ShareId;
case FreeRDP_PduSource:
return settings->PduSource;
case FreeRDP_ServerPort:
return settings->ServerPort;
case FreeRDP_RdpVersion:
return settings->RdpVersion;
case FreeRDP_DesktopWidth:
return settings->DesktopWidth;
case FreeRDP_DesktopHeight:
return settings->DesktopHeight;
case FreeRDP_ColorDepth:
return settings->ColorDepth;
case FreeRDP_ConnectionType:
return settings->ConnectionType;
case FreeRDP_ClientBuild:
return settings->ClientBuild;
case FreeRDP_EarlyCapabilityFlags:
return settings->EarlyCapabilityFlags;
case FreeRDP_EncryptionMethods:
return settings->EncryptionMethods;
case FreeRDP_ExtEncryptionMethods:
return settings->ExtEncryptionMethods;
case FreeRDP_EncryptionLevel:
return settings->EncryptionLevel;
case FreeRDP_ServerRandomLength:
return settings->ServerRandomLength;
case FreeRDP_ClientRandomLength:
return settings->ClientRandomLength;
case FreeRDP_ChannelCount:
return settings->ChannelCount;
case FreeRDP_ChannelDefArraySize:
return settings->ChannelDefArraySize;
case FreeRDP_ClusterInfoFlags:
return settings->ClusterInfoFlags;
case FreeRDP_RedirectedSessionId:
return settings->RedirectedSessionId;
case FreeRDP_MonitorDefArraySize:
return settings->MonitorDefArraySize;
case FreeRDP_DesktopPosX:
return settings->DesktopPosX;
case FreeRDP_DesktopPosY:
return settings->DesktopPosY;
case FreeRDP_MultitransportFlags:
return settings->MultitransportFlags;
case FreeRDP_CompressionLevel:
return settings->CompressionLevel;
case FreeRDP_AutoReconnectMaxRetries:
return settings->AutoReconnectMaxRetries;
case FreeRDP_PerformanceFlags:
return settings->PerformanceFlags;
case FreeRDP_RequestedProtocols:
return settings->RequestedProtocols;
case FreeRDP_SelectedProtocol:
return settings->SelectedProtocol;
case FreeRDP_NegotiationFlags:
return settings->NegotiationFlags;
case FreeRDP_CookieMaxLength:
return settings->CookieMaxLength;
case FreeRDP_PreconnectionId:
return settings->PreconnectionId;
case FreeRDP_RedirectionFlags:
return settings->RedirectionFlags;
case FreeRDP_LoadBalanceInfoLength:
return settings->LoadBalanceInfoLength;
case FreeRDP_RedirectionPasswordLength:
return settings->RedirectionPasswordLength;
case FreeRDP_RedirectionTsvUrlLength:
return settings->RedirectionTsvUrlLength;
case FreeRDP_TargetNetAddressCount:
return settings->TargetNetAddressCount;
case FreeRDP_PercentScreen:
return settings->PercentScreen;
case FreeRDP_PercentScreenUseWidth:
return settings->PercentScreenUseWidth;
case FreeRDP_PercentScreenUseHeight:
return settings->PercentScreenUseHeight;
case FreeRDP_GatewayUsageMethod:
return settings->GatewayUsageMethod;
case FreeRDP_GatewayPort:
return settings->GatewayPort;
case FreeRDP_GatewayCredentialsSource:
return settings->GatewayCredentialsSource;
case FreeRDP_ProxyType:
return settings->ProxyType;
case FreeRDP_ProxyPort:
return settings->ProxyPort;
case FreeRDP_RemoteAppNumIconCaches:
return settings->RemoteAppNumIconCaches;
case FreeRDP_RemoteAppNumIconCacheEntries:
return settings->RemoteAppNumIconCacheEntries;
case FreeRDP_ReceivedCapabilitiesSize:
return settings->ReceivedCapabilitiesSize;
case FreeRDP_OsMajorType:
return settings->OsMajorType;
case FreeRDP_OsMinorType:
return settings->OsMinorType;
case FreeRDP_BitmapCacheVersion:
return settings->BitmapCacheVersion;
case FreeRDP_BitmapCacheV2NumCells:
return settings->BitmapCacheV2NumCells;
case FreeRDP_PointerCacheSize:
return settings->PointerCacheSize;
case FreeRDP_KeyboardLayout:
return settings->KeyboardLayout;
case FreeRDP_KeyboardType:
return settings->KeyboardType;
case FreeRDP_KeyboardSubType:
return settings->KeyboardSubType;
case FreeRDP_KeyboardFunctionKey:
return settings->KeyboardFunctionKey;
case FreeRDP_KeyboardHook:
return settings->KeyboardHook;
break;
case FreeRDP_BrushSupportLevel:
return settings->BrushSupportLevel;
case FreeRDP_GlyphSupportLevel:
return settings->GlyphSupportLevel;
case FreeRDP_OffscreenSupportLevel:
return settings->OffscreenSupportLevel;
case FreeRDP_OffscreenCacheSize:
return settings->OffscreenCacheSize;
case FreeRDP_OffscreenCacheEntries:
return settings->OffscreenCacheEntries;
case FreeRDP_VirtualChannelCompressionFlags:
return settings->VirtualChannelCompressionFlags;
case FreeRDP_VirtualChannelChunkSize:
return settings->VirtualChannelChunkSize;
case FreeRDP_MultifragMaxRequestSize:
return settings->MultifragMaxRequestSize;
case FreeRDP_LargePointerFlag:
return settings->LargePointerFlag;
case FreeRDP_CompDeskSupportLevel:
return settings->CompDeskSupportLevel;
case FreeRDP_RemoteFxCodecId:
return settings->RemoteFxCodecId;
case FreeRDP_RemoteFxCodecMode:
return settings->RemoteFxCodecMode;
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_JpegQuality:
return settings->JpegQuality;
case FreeRDP_BitmapCacheV3CodecId:
return settings->BitmapCacheV3CodecId;
case FreeRDP_DrawNineGridCacheSize:
return settings->DrawNineGridCacheSize;
case FreeRDP_DrawNineGridCacheEntries:
return settings->DrawNineGridCacheEntries;
case FreeRDP_DeviceCount:
return settings->DeviceCount;
case FreeRDP_DeviceArraySize:
return settings->DeviceArraySize;
case FreeRDP_StaticChannelCount:
return settings->StaticChannelCount;
case FreeRDP_StaticChannelArraySize:
return settings->StaticChannelArraySize;
case FreeRDP_DynamicChannelCount:
return settings->DynamicChannelCount;
case FreeRDP_DynamicChannelArraySize:
return settings->DynamicChannelArraySize;
case FreeRDP_SmartSizingWidth:
return settings->SmartSizingWidth;
case FreeRDP_SmartSizingHeight:
return settings->SmartSizingHeight;
default:
WLog_ERR(TAG, "freerdp_get_param_uint32: unknown id: %d", id);
return 0;
}
}
int freerdp_set_param_uint32(rdpSettings* settings, int id, UINT32 param)
{
switch (id)
{
case FreeRDP_ShareId:
settings->ShareId = param;
break;
case FreeRDP_PduSource:
settings->PduSource = param;
break;
case FreeRDP_ServerPort:
settings->ServerPort = param;
break;
case FreeRDP_RdpVersion:
settings->RdpVersion = param;
break;
case FreeRDP_DesktopWidth:
settings->DesktopWidth = param;
break;
case FreeRDP_DesktopHeight:
settings->DesktopHeight = param;
break;
case FreeRDP_ColorDepth:
settings->ColorDepth = param;
break;
case FreeRDP_ConnectionType:
settings->ConnectionType = param;
break;
case FreeRDP_ClientBuild:
settings->ClientBuild = param;
break;
case FreeRDP_EarlyCapabilityFlags:
settings->EarlyCapabilityFlags = param;
break;
case FreeRDP_EncryptionMethods:
settings->EncryptionMethods = param;
break;
case FreeRDP_ExtEncryptionMethods:
settings->ExtEncryptionMethods = param;
break;
case FreeRDP_EncryptionLevel:
settings->EncryptionLevel = param;
break;
case FreeRDP_ServerRandomLength:
settings->ServerRandomLength = param;
break;
case FreeRDP_ClientRandomLength:
settings->ClientRandomLength = param;
break;
case FreeRDP_ChannelCount:
settings->ChannelCount = param;
break;
case FreeRDP_ChannelDefArraySize:
settings->ChannelDefArraySize = param;
break;
case FreeRDP_ClusterInfoFlags:
settings->ClusterInfoFlags = param;
break;
case FreeRDP_RedirectedSessionId:
settings->RedirectedSessionId = param;
break;
case FreeRDP_MonitorDefArraySize:
settings->MonitorDefArraySize = param;
break;
case FreeRDP_DesktopPosX:
settings->DesktopPosX = param;
break;
case FreeRDP_DesktopPosY:
settings->DesktopPosY = param;
break;
case FreeRDP_MultitransportFlags:
settings->MultitransportFlags = param;
break;
case FreeRDP_CompressionLevel:
settings->CompressionLevel = param;
break;
case FreeRDP_AutoReconnectMaxRetries:
settings->AutoReconnectMaxRetries = param;
break;
case FreeRDP_PerformanceFlags:
settings->PerformanceFlags = param;
break;
case FreeRDP_RequestedProtocols:
settings->RequestedProtocols = param;
break;
case FreeRDP_SelectedProtocol:
settings->SelectedProtocol = param;
break;
case FreeRDP_NegotiationFlags:
settings->NegotiationFlags = param;
break;
case FreeRDP_CookieMaxLength:
settings->CookieMaxLength = param;
break;
case FreeRDP_PreconnectionId:
settings->PreconnectionId = param;
break;
case FreeRDP_RedirectionFlags:
settings->RedirectionFlags = param;
break;
case FreeRDP_LoadBalanceInfoLength:
settings->LoadBalanceInfoLength = param;
break;
case FreeRDP_RedirectionPasswordLength:
settings->RedirectionPasswordLength = param;
break;
case FreeRDP_RedirectionTsvUrlLength:
settings->RedirectionTsvUrlLength = param;
break;
case FreeRDP_TargetNetAddressCount:
settings->TargetNetAddressCount = param;
break;
case FreeRDP_PercentScreen:
settings->PercentScreen = param;
break;
case FreeRDP_PercentScreenUseWidth:
settings->PercentScreenUseWidth = param;
break;
case FreeRDP_PercentScreenUseHeight:
settings->PercentScreenUseHeight = param;
break;
case FreeRDP_GatewayUsageMethod:
settings->GatewayUsageMethod = param;
break;
case FreeRDP_GatewayPort:
settings->GatewayPort = param;
break;
case FreeRDP_GatewayCredentialsSource:
settings->GatewayCredentialsSource = param;
break;
case FreeRDP_ProxyType:
settings->ProxyType = param;
break;
case FreeRDP_ProxyPort:
settings->ProxyPort = param;
break;
case FreeRDP_RemoteAppNumIconCaches:
settings->RemoteAppNumIconCaches = param;
break;
case FreeRDP_RemoteAppNumIconCacheEntries:
settings->RemoteAppNumIconCacheEntries = param;
break;
case FreeRDP_ReceivedCapabilitiesSize:
settings->ReceivedCapabilitiesSize = param;
break;
case FreeRDP_OsMajorType:
settings->OsMajorType = param;
break;
case FreeRDP_OsMinorType:
settings->OsMinorType = param;
break;
case FreeRDP_BitmapCacheVersion:
settings->BitmapCacheVersion = param;
break;
case FreeRDP_BitmapCacheV2NumCells:
settings->BitmapCacheV2NumCells = param;
break;
case FreeRDP_PointerCacheSize:
settings->PointerCacheSize = param;
break;
case FreeRDP_KeyboardLayout:
settings->KeyboardLayout = param;
break;
case FreeRDP_KeyboardType:
settings->KeyboardType = param;
break;
case FreeRDP_KeyboardSubType:
settings->KeyboardSubType = param;
break;
case FreeRDP_KeyboardFunctionKey:
settings->KeyboardFunctionKey = param;
break;
case FreeRDP_KeyboardHook:
settings->KeyboardHook = param;
break;
case FreeRDP_BrushSupportLevel:
settings->BrushSupportLevel = param;
break;
case FreeRDP_GlyphSupportLevel:
settings->GlyphSupportLevel = param;
break;
case FreeRDP_OffscreenSupportLevel:
settings->OffscreenSupportLevel = param;
break;
case FreeRDP_OffscreenCacheSize:
settings->OffscreenCacheSize = param;
break;
case FreeRDP_OffscreenCacheEntries:
settings->OffscreenCacheEntries = param;
break;
case FreeRDP_VirtualChannelCompressionFlags:
settings->VirtualChannelCompressionFlags = param;
break;
case FreeRDP_VirtualChannelChunkSize:
settings->VirtualChannelChunkSize = param;
break;
case FreeRDP_MultifragMaxRequestSize:
settings->MultifragMaxRequestSize = param;
break;
case FreeRDP_LargePointerFlag:
settings->LargePointerFlag = param;
break;
case FreeRDP_CompDeskSupportLevel:
settings->CompDeskSupportLevel = param;
break;
case FreeRDP_RemoteFxCodecId:
settings->RemoteFxCodecId = param;
break;
case FreeRDP_RemoteFxCodecMode:
settings->RemoteFxCodecMode = param;
break;
case FreeRDP_NSCodecId:
settings->NSCodecId = param;
break;
case FreeRDP_FrameAcknowledge:
settings->FrameAcknowledge = param;
break;
case FreeRDP_NSCodecColorLossLevel:
settings->NSCodecColorLossLevel = param;
break;
case FreeRDP_JpegCodecId:
settings->JpegCodecId = param;
break;
case FreeRDP_JpegQuality:
settings->JpegQuality = param;
break;
case FreeRDP_BitmapCacheV3CodecId:
settings->BitmapCacheV3CodecId = param;
break;
case FreeRDP_DrawNineGridCacheSize:
settings->DrawNineGridCacheSize = param;
break;
case FreeRDP_DrawNineGridCacheEntries:
settings->DrawNineGridCacheEntries = param;
break;
case FreeRDP_DeviceCount:
settings->DeviceCount = param;
break;
case FreeRDP_DeviceArraySize:
settings->DeviceArraySize = param;
break;
case FreeRDP_StaticChannelCount:
settings->StaticChannelCount = param;
break;
case FreeRDP_StaticChannelArraySize:
settings->StaticChannelArraySize = param;
break;
case FreeRDP_DynamicChannelCount:
settings->DynamicChannelCount = param;
break;
case FreeRDP_DynamicChannelArraySize:
settings->DynamicChannelArraySize = param;
break;
default:
WLog_ERR(TAG, "freerdp_set_param_uint32: unknown id %d (param = %"PRIu32")", id, param);
return -1;
}
/* Mark field as modified */
settings->SettingsModified[id] = 1;
return 0;
}
UINT64 freerdp_get_param_uint64(rdpSettings* settings, int id)
{
switch (id)
{
case FreeRDP_ParentWindowId:
return settings->ParentWindowId;
default:
WLog_ERR(TAG, "freerdp_get_param_uint64: unknown id: %d", id);
return -1;
}
}
int freerdp_set_param_uint64(rdpSettings* settings, int id, UINT64 param)
{
switch (id)
{
case FreeRDP_ParentWindowId:
settings->ParentWindowId = param;
break;
default:
WLog_ERR(TAG, "freerdp_set_param_uint64: unknown id %d (param = %"PRIu64")", id, param);
return -1;
}
/* Mark field as modified */
settings->SettingsModified[id] = 1;
return 0;
}
char* freerdp_get_param_string(rdpSettings* settings, int id)
{
switch (id)
{
case FreeRDP_ServerHostname:
return settings->ServerHostname;
case FreeRDP_Username:
return settings->Username;
case FreeRDP_Password:
return settings->Password;
case FreeRDP_Domain:
return settings->Domain;
case FreeRDP_PasswordHash:
return settings->PasswordHash;
case FreeRDP_ClientHostname:
return settings->ClientHostname;
case FreeRDP_ClientProductId:
return settings->ClientProductId;
case FreeRDP_AlternateShell:
return settings->AlternateShell;
case FreeRDP_ShellWorkingDirectory:
return settings->ShellWorkingDirectory;
case FreeRDP_ClientAddress:
return settings->ClientAddress;
case FreeRDP_ClientDir:
return settings->ClientDir;
case FreeRDP_DynamicDSTTimeZoneKeyName:
return settings->DynamicDSTTimeZoneKeyName;
case FreeRDP_RemoteAssistanceSessionId:
return settings->RemoteAssistanceSessionId;
case FreeRDP_RemoteAssistancePassStub:
return settings->RemoteAssistancePassStub;
case FreeRDP_RemoteAssistancePassword:
return settings->RemoteAssistancePassword;
case FreeRDP_RemoteAssistanceRCTicket:
return settings->RemoteAssistanceRCTicket;
case FreeRDP_AuthenticationServiceClass:
return settings->AuthenticationServiceClass;
case FreeRDP_AllowedTlsCiphers:
return settings->AllowedTlsCiphers;
case FreeRDP_NtlmSamFile:
return settings->NtlmSamFile;
case FreeRDP_PreconnectionBlob:
return settings->PreconnectionBlob;
case FreeRDP_KerberosKdc:
return settings->KerberosKdc;
case FreeRDP_KerberosRealm:
return settings->KerberosRealm;
case FreeRDP_CertificateName:
return settings->CertificateName;
case FreeRDP_CertificateFile:
return settings->CertificateFile;
case FreeRDP_PrivateKeyFile:
return settings->PrivateKeyFile;
case FreeRDP_RdpKeyFile:
return settings->RdpKeyFile;
case FreeRDP_CertificateContent:
return settings->CertificateContent;
case FreeRDP_PrivateKeyContent:
return settings->PrivateKeyContent;
case FreeRDP_RdpKeyContent:
return settings->RdpKeyContent;
case FreeRDP_WindowTitle:
return settings->WindowTitle;
case FreeRDP_ComputerName:
return settings->ComputerName;
case FreeRDP_ConnectionFile:
return settings->ConnectionFile;
case FreeRDP_AssistanceFile:
return settings->AssistanceFile;
case FreeRDP_HomePath:
return settings->HomePath;
case FreeRDP_ConfigPath:
return settings->ConfigPath;
case FreeRDP_CurrentPath:
return settings->CurrentPath;
case FreeRDP_DumpRemoteFxFile:
return settings->DumpRemoteFxFile;
case FreeRDP_PlayRemoteFxFile:
return settings->PlayRemoteFxFile;
case FreeRDP_GatewayHostname:
return settings->GatewayHostname;
case FreeRDP_GatewayUsername:
return settings->GatewayUsername;
case FreeRDP_GatewayPassword:
return settings->GatewayPassword;
case FreeRDP_GatewayDomain:
return settings->GatewayDomain;
case FreeRDP_ProxyHostname:
return settings->ProxyHostname;
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_RemoteApplicationGuid:
return settings->RemoteApplicationGuid;
case FreeRDP_RemoteApplicationCmdLine:
return settings->RemoteApplicationCmdLine;
case FreeRDP_ImeFileName:
return settings->ImeFileName;
case FreeRDP_DrivesToRedirect:
return settings->DrivesToRedirect;
default:
WLog_ERR(TAG, "freerdp_get_param_string: unknown id: %d", id);
return NULL;
}
}
int freerdp_set_param_string(rdpSettings* settings, int id, const char* param)
{
char **tmp = NULL;
if (!param)
return -1;
switch (id)
{
case FreeRDP_ServerHostname:
tmp = &settings->ServerHostname;
break;
case FreeRDP_Username:
tmp = &settings->Username;
break;
case FreeRDP_Password:
tmp = &settings->Password;
break;
case FreeRDP_Domain:
tmp = &settings->Domain;
break;
case FreeRDP_PasswordHash:
tmp = &settings->PasswordHash;
break;
case FreeRDP_ClientHostname:
tmp = &settings->ClientHostname;
break;
case FreeRDP_ClientProductId:
tmp = &settings->ClientProductId;
break;
case FreeRDP_AlternateShell:
tmp = &settings->AlternateShell;
break;
case FreeRDP_ShellWorkingDirectory:
tmp = &settings->ShellWorkingDirectory;
break;
case FreeRDP_ClientAddress:
tmp = &settings->ClientAddress;
break;
case FreeRDP_ClientDir:
tmp = &settings->ClientDir;
break;
case FreeRDP_DynamicDSTTimeZoneKeyName:
tmp = &settings->DynamicDSTTimeZoneKeyName;
break;
case FreeRDP_RemoteAssistanceSessionId:
tmp = &settings->RemoteAssistanceSessionId;
break;
case FreeRDP_RemoteAssistancePassStub:
tmp = &settings->RemoteAssistancePassStub;
break;
case FreeRDP_RemoteAssistancePassword:
tmp = &settings->RemoteAssistancePassword;
break;
case FreeRDP_RemoteAssistanceRCTicket:
tmp = &settings->RemoteAssistanceRCTicket;
break;
case FreeRDP_AuthenticationServiceClass:
tmp = &settings->AuthenticationServiceClass;
break;
case FreeRDP_AllowedTlsCiphers:
tmp = &settings->AllowedTlsCiphers;
break;
case FreeRDP_NtlmSamFile:
tmp = &settings->NtlmSamFile;
break;
case FreeRDP_PreconnectionBlob:
tmp = &settings->PreconnectionBlob;
break;
case FreeRDP_KerberosKdc:
tmp = &settings->KerberosKdc;
break;
case FreeRDP_KerberosRealm:
tmp = &settings->KerberosRealm;
break;
case FreeRDP_CertificateName:
tmp = &settings->CertificateName;
break;
case FreeRDP_CertificateFile:
tmp = &settings->CertificateFile;
break;
case FreeRDP_PrivateKeyFile:
tmp = &settings->PrivateKeyFile;
break;
case FreeRDP_CertificateContent:
tmp = &settings->CertificateContent;
break;
case FreeRDP_PrivateKeyContent:
tmp = &settings->PrivateKeyContent;
break;
case FreeRDP_RdpKeyContent:
tmp = &settings->RdpKeyContent;
break;
case FreeRDP_RdpKeyFile:
tmp = &settings->RdpKeyFile;
break;
case FreeRDP_WindowTitle:
tmp = &settings->WindowTitle;
break;
case FreeRDP_ComputerName:
tmp = &settings->ComputerName;
break;
case FreeRDP_ConnectionFile:
tmp = &settings->ConnectionFile;
break;
case FreeRDP_AssistanceFile:
tmp = &settings->AssistanceFile;
break;
case FreeRDP_HomePath:
tmp = &settings->HomePath;
break;
case FreeRDP_ConfigPath:
tmp = &settings->ConfigPath;
break;
case FreeRDP_CurrentPath:
tmp = &settings->CurrentPath;
break;
case FreeRDP_DumpRemoteFxFile:
tmp = &settings->DumpRemoteFxFile;
break;
case FreeRDP_PlayRemoteFxFile:
tmp = &settings->PlayRemoteFxFile;
break;
case FreeRDP_GatewayHostname:
tmp = &settings->GatewayHostname;
break;
case FreeRDP_GatewayUsername:
tmp = &settings->GatewayUsername;
break;
case FreeRDP_GatewayPassword:
tmp = &settings->GatewayPassword;
break;
case FreeRDP_GatewayDomain:
tmp = &settings->GatewayDomain;
break;
case FreeRDP_ProxyHostname:
tmp = &settings->ProxyHostname;
break;
case FreeRDP_RemoteApplicationName:
tmp = &settings->RemoteApplicationName;
break;
case FreeRDP_RemoteApplicationIcon:
tmp = &settings->RemoteApplicationIcon;
break;
case FreeRDP_RemoteApplicationProgram:
tmp = &settings->RemoteApplicationProgram;
break;
case FreeRDP_RemoteApplicationFile:
tmp = &settings->RemoteApplicationFile;
break;
case FreeRDP_RemoteApplicationGuid:
tmp = &settings->RemoteApplicationGuid;
break;
case FreeRDP_RemoteApplicationCmdLine:
tmp = &settings->RemoteApplicationCmdLine;
break;
case FreeRDP_ImeFileName:
tmp = &settings->ImeFileName;
break;
case FreeRDP_DrivesToRedirect:
tmp = &settings->DrivesToRedirect;
break;
default:
WLog_ERR(TAG, "unknown id %d (param = %s)", id, param);
return -1;
}
free(*tmp);
if (!(*tmp = _strdup(param)))
return -1;
/* Mark field as modified */
settings->SettingsModified[id] = 1;
return 0;
}