Added python generator for freerdp_[g|s]et_param*
authorArmin Novak <armin.novak@thincast.com>
Thu, 21 Mar 2019 12:08:59 +0000 (13:08 +0100)
committerArmin Novak <armin.novak@thincast.com>
Wed, 8 May 2019 12:17:23 +0000 (14:17 +0200)
The settings getters and setters are now automatically generated.
Added a test case to check if all available options can be retrieved.

include/freerdp/settings.h
libfreerdp/common/CMakeLists.txt
libfreerdp/common/settings.c
libfreerdp/common/settings_getters.c [new file with mode: 0644]
libfreerdp/core/test/TestSettings.c
libfreerdp/core/test/settings_property_lists.h [new file with mode: 0644]
scripts/update-settings-tests [new file with mode: 0755]

index d6eef5c..93a3878 100644 (file)
@@ -1029,7 +1029,7 @@ struct rdp_settings
        UINT64 padding0896[896 - 837]; /* 837 */
 
        /* Client Info (Time Zone) */
-       ALIGN64 LPTIME_ZONE_INFORMATION ClientTimeZone;              /* 896 */
+       ALIGN64 TIME_ZONE_INFORMATION*  ClientTimeZone;              /* 896 */
        ALIGN64 char*                   DynamicDSTTimeZoneKeyName;   /* 897 */
        ALIGN64 BOOL                    DynamicDaylightTimeDisabled; /* 898 */
        UINT64 padding0960[960 - 899]; /* 899 */
@@ -1164,8 +1164,8 @@ struct rdp_settings
        ALIGN64 char*  WmClass;                 /* 1549 */
        ALIGN64 BOOL   EmbeddedWindow;          /* 1550 */
        ALIGN64 BOOL   SmartSizing;             /* 1551 */
-       ALIGN64 int    XPan;                    /* 1552 */
-       ALIGN64 int    YPan;                    /* 1553 */
+       ALIGN64 INT32  XPan;                    /* 1552 */
+       ALIGN64 INT32  YPan;                    /* 1553 */
        ALIGN64 UINT32 SmartSizingWidth;        /* 1554 */
        ALIGN64 UINT32 SmartSizingHeight;       /* 1555 */
        ALIGN64 BOOL   PercentScreenUseWidth;   /* 1556 */
@@ -1519,7 +1519,7 @@ struct rdp_settings
         */
 
        /* Extensions */
-       ALIGN64 int num_extensions; /*  */
+       ALIGN64 INT32 num_extensions; /*  */
        ALIGN64 struct rdp_ext_set extensions[16]; /*  */
 
        ALIGN64 BYTE*
@@ -1576,20 +1576,31 @@ FREERDP_API void freerdp_set_gateway_usage_method(rdpSettings* settings, UINT32
 FREERDP_API void freerdp_update_gateway_usage_method(rdpSettings* settings, UINT32 GatewayEnabled,
         UINT32 GatewayBypassLocal);
 
-FREERDP_API BOOL freerdp_get_param_bool(rdpSettings* settings, int id);
-FREERDP_API int freerdp_set_param_bool(rdpSettings* settings, int id, BOOL param);
+FREERDP_API BOOL freerdp_get_param_bool(rdpSettings* settings, size_t id);
+FREERDP_API BOOL freerdp_set_param_bool(rdpSettings* settings, size_t id, BOOL param);
 
-FREERDP_API int freerdp_get_param_int(rdpSettings* settings, int id);
-FREERDP_API int freerdp_set_param_int(rdpSettings* settings, int id, int param);
+FREERDP_API INT16 freerdp_get_param_int16(rdpSettings* settings, size_t id);
+FREERDP_API BOOL freerdp_set_param_int16(rdpSettings* settings, size_t id, INT16 param);
 
-FREERDP_API UINT32 freerdp_get_param_uint32(rdpSettings* settings, int id);
-FREERDP_API int freerdp_set_param_uint32(rdpSettings* settings, int id, UINT32 param);
+FREERDP_API UINT16 freerdp_get_param_uint16(rdpSettings* settings, size_t id);
+FREERDP_API BOOL freerdp_set_param_uint16(rdpSettings* settings, size_t id, UINT16 param);
 
-FREERDP_API UINT64 freerdp_get_param_uint64(rdpSettings* settings, int id);
-FREERDP_API int freerdp_set_param_uint64(rdpSettings* settings, int id, UINT64 param);
+FREERDP_API INT32 freerdp_get_param_int32(rdpSettings* settings, size_t id);
+FREERDP_API BOOL freerdp_set_param_int32(rdpSettings* settings, size_t id, INT32 param);
 
-FREERDP_API char* freerdp_get_param_string(rdpSettings* settings, int id);
-FREERDP_API int freerdp_set_param_string(rdpSettings* settings, int id, const char* param);
+FREERDP_API UINT32 freerdp_get_param_uint32(rdpSettings* settings, size_t id);
+FREERDP_API BOOL freerdp_set_param_uint32(rdpSettings* settings, size_t id, UINT32 param);
+
+FREERDP_API INT64 freerdp_get_param_int64(rdpSettings* settings, size_t id);
+FREERDP_API BOOL freerdp_set_param_int64(rdpSettings* settings, size_t id, INT64 param);
+
+FREERDP_API UINT64 freerdp_get_param_uint64(rdpSettings* settings, size_t id);
+FREERDP_API BOOL freerdp_set_param_uint64(rdpSettings* settings, size_t id, UINT64 param);
+
+FREERDP_API const char* freerdp_get_param_string(rdpSettings* settings, size_t id);
+FREERDP_API BOOL freerdp_set_param_string(rdpSettings* settings, size_t id, const char* param);
+
+FREERDP_API const void* freerdp_get_param_pointer(rdpSettings* settings, size_t id);
 
 #ifdef __cplusplus
 }
index 14ad05c..fa8b817 100644 (file)
@@ -21,6 +21,7 @@ set(MODULE_PREFIX "FREERDP_COMMON")
 set(${MODULE_PREFIX}_SRCS
        addin.c
        settings.c
+       settings_getters.c
        assistance.c)
 
 freerdp_module_add(${${MODULE_PREFIX}_SRCS})
index 5cd481b..a2d6aba 100644 (file)
@@ -745,2051 +745,3 @@ void freerdp_update_gateway_usage_method(rdpSettings* settings, UINT32 GatewayEn
 
        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_AutoDenyCertificate:
-                       return settings->AutoDenyCertificate;
-
-               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_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;
-
-               case FreeRDP_SmartcardLogon:
-                       return  settings->SmartcardLogon;
-
-               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_AutoDenyCertificate:
-                       settings->AutoDenyCertificate = 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_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;
-
-               case FreeRDP_SmartcardLogon:
-                       settings->SmartcardLogon = 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;
-
-               case FreeRDP_TlsSecLevel:
-                       return settings->TlsSecLevel;
-
-               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;
-
-               case FreeRDP_TlsSecLevel:
-                       settings->TlsSecLevel = 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_GatewayAccessToken:
-                       return settings->GatewayAccessToken;
-
-               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_GatewayAccessToken:
-                       tmp = &settings->GatewayAccessToken;
-                       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;
-}
diff --git a/libfreerdp/common/settings_getters.c b/libfreerdp/common/settings_getters.c
new file mode 100644 (file)
index 0000000..ccb1945
--- /dev/null
@@ -0,0 +1,2703 @@
+/* Generated by  */
+
+#include <freerdp/settings.h>
+#include <freerdp/log.h>
+
+#define TAG FREERDP_TAG("common.settings")
+
+BOOL freerdp_get_param_bool(rdpSettings* settings, size_t id)
+{
+       if (!settings)
+               return FALSE;
+
+       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_SupportStatusInfoPdu:
+                       return settings->SupportStatusInfoPdu;
+
+               case FreeRDP_SupportMonitorLayoutPdu:
+                       return settings->SupportMonitorLayoutPdu;
+
+               case FreeRDP_SupportGraphicsPipeline:
+                       return settings->SupportGraphicsPipeline;
+
+               case FreeRDP_SupportDynamicTimeZone:
+                       return settings->SupportDynamicTimeZone;
+
+               case FreeRDP_SupportHeartbeatPdu:
+                       return settings->SupportHeartbeatPdu;
+
+               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_ListMonitors:
+                       return settings->ListMonitors;
+
+               case FreeRDP_HasMonitorAttributes:
+                       return settings->HasMonitorAttributes;
+
+               case FreeRDP_SupportMultitransport:
+                       return settings->SupportMultitransport;
+
+               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_PrintReconnectCookie:
+                       return settings->PrintReconnectCookie;
+
+               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_EncomspVirtualChannel:
+                       return settings->EncomspVirtualChannel;
+
+               case FreeRDP_RemdeskVirtualChannel:
+                       return settings->RemdeskVirtualChannel;
+
+               case FreeRDP_LyncRdpMode:
+                       return settings->LyncRdpMode;
+
+               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_VmConnectMode:
+                       return settings->VmConnectMode;
+
+               case FreeRDP_FIPSMode:
+                       return settings->FIPSMode;
+
+               case FreeRDP_MstscCookieMode:
+                       return settings->MstscCookieMode;
+
+               case FreeRDP_SendPreconnectionPdu:
+                       return settings->SendPreconnectionPdu;
+
+               case FreeRDP_SmartcardLogon:
+                       return settings->SmartcardLogon;
+
+               case FreeRDP_IgnoreCertificate:
+                       return settings->IgnoreCertificate;
+
+               case FreeRDP_ExternalCertificateManagement:
+                       return settings->ExternalCertificateManagement;
+
+               case FreeRDP_AutoAcceptCertificate:
+                       return settings->AutoAcceptCertificate;
+
+               case FreeRDP_AutoDenyCertificate:
+                       return settings->AutoDenyCertificate;
+
+               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_MouseMotion:
+                       return settings->MouseMotion;
+
+               case FreeRDP_AsyncInput:
+                       return settings->AsyncInput;
+
+               case FreeRDP_AsyncUpdate:
+                       return settings->AsyncUpdate;
+
+               case FreeRDP_AsyncChannels:
+                       return settings->AsyncChannels;
+
+               case FreeRDP_ToggleFullscreen:
+                       return settings->ToggleFullscreen;
+
+               case FreeRDP_EmbeddedWindow:
+                       return settings->EmbeddedWindow;
+
+               case FreeRDP_SmartSizing:
+                       return settings->SmartSizing;
+
+               case FreeRDP_PercentScreenUseWidth:
+                       return settings->PercentScreenUseWidth;
+
+               case FreeRDP_PercentScreenUseHeight:
+                       return settings->PercentScreenUseHeight;
+
+               case FreeRDP_DynamicResolutionUpdate:
+                       return settings->DynamicResolutionUpdate;
+
+               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_UnmapButtons:
+                       return settings->UnmapButtons;
+
+               case FreeRDP_OldLicenseBehaviour:
+                       return settings->OldLicenseBehaviour;
+
+               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_AllowUnanouncedOrdersFromServer:
+                       return settings->AllowUnanouncedOrdersFromServer;
+
+               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_HasHorizontalWheel:
+                       return settings->HasHorizontalWheel;
+
+               case FreeRDP_HasExtendedMouseEvent:
+                       return settings->HasExtendedMouseEvent;
+
+               case FreeRDP_SoundBeepsEnabled:
+                       return settings->SoundBeepsEnabled;
+
+               case FreeRDP_SurfaceCommandsEnabled:
+                       return settings->SurfaceCommandsEnabled;
+
+               case FreeRDP_FrameMarkerCommandEnabled:
+                       return settings->FrameMarkerCommandEnabled;
+
+               case FreeRDP_SurfaceFrameMarkerEnabled:
+                       return settings->SurfaceFrameMarkerEnabled;
+
+               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_GfxSendQoeAck:
+                       return settings->GfxSendQoeAck;
+
+               case FreeRDP_GfxAVC444v2:
+                       return settings->GfxAVC444v2;
+
+               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_PreferIPv6OverIPv4:
+                       return settings->PreferIPv6OverIPv4;
+
+               case FreeRDP_RedirectClipboard:
+                       return settings->RedirectClipboard;
+
+               case FreeRDP_SupportDynamicChannels:
+                       return settings->SupportDynamicChannels;
+
+               case FreeRDP_SupportEchoChannel:
+                       return settings->SupportEchoChannel;
+
+               case FreeRDP_SupportDisplayControl:
+                       return settings->SupportDisplayControl;
+
+               case FreeRDP_SupportGeometryTracking:
+                       return settings->SupportGeometryTracking;
+
+               case FreeRDP_SupportSSHAgentChannel:
+                       return settings->SupportSSHAgentChannel;
+
+               case FreeRDP_SupportVideoOptimized:
+                       return settings->SupportVideoOptimized;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+}
+
+BOOL freerdp_set_param_bool(rdpSettings* settings, size_t id, BOOL val)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               case FreeRDP_ServerMode:
+                       settings->ServerMode = val;
+                       break;
+
+               case FreeRDP_WaitForOutputBufferFlush:
+                       settings->WaitForOutputBufferFlush = val;
+                       break;
+
+               case FreeRDP_NetworkAutoDetect:
+                       settings->NetworkAutoDetect = val;
+                       break;
+
+               case FreeRDP_SupportAsymetricKeys:
+                       settings->SupportAsymetricKeys = val;
+                       break;
+
+               case FreeRDP_SupportErrorInfoPdu:
+                       settings->SupportErrorInfoPdu = val;
+                       break;
+
+               case FreeRDP_SupportStatusInfoPdu:
+                       settings->SupportStatusInfoPdu = val;
+                       break;
+
+               case FreeRDP_SupportMonitorLayoutPdu:
+                       settings->SupportMonitorLayoutPdu = val;
+                       break;
+
+               case FreeRDP_SupportGraphicsPipeline:
+                       settings->SupportGraphicsPipeline = val;
+                       break;
+
+               case FreeRDP_SupportDynamicTimeZone:
+                       settings->SupportDynamicTimeZone = val;
+                       break;
+
+               case FreeRDP_SupportHeartbeatPdu:
+                       settings->SupportHeartbeatPdu = val;
+                       break;
+
+               case FreeRDP_UseRdpSecurityLayer:
+                       settings->UseRdpSecurityLayer = val;
+                       break;
+
+               case FreeRDP_ConsoleSession:
+                       settings->ConsoleSession = val;
+                       break;
+
+               case FreeRDP_SpanMonitors:
+                       settings->SpanMonitors = val;
+                       break;
+
+               case FreeRDP_UseMultimon:
+                       settings->UseMultimon = val;
+                       break;
+
+               case FreeRDP_ForceMultimon:
+                       settings->ForceMultimon = val;
+                       break;
+
+               case FreeRDP_ListMonitors:
+                       settings->ListMonitors = val;
+                       break;
+
+               case FreeRDP_HasMonitorAttributes:
+                       settings->HasMonitorAttributes = val;
+                       break;
+
+               case FreeRDP_SupportMultitransport:
+                       settings->SupportMultitransport = val;
+                       break;
+
+               case FreeRDP_AutoLogonEnabled:
+                       settings->AutoLogonEnabled = val;
+                       break;
+
+               case FreeRDP_CompressionEnabled:
+                       settings->CompressionEnabled = val;
+                       break;
+
+               case FreeRDP_DisableCtrlAltDel:
+                       settings->DisableCtrlAltDel = val;
+                       break;
+
+               case FreeRDP_EnableWindowsKey:
+                       settings->EnableWindowsKey = val;
+                       break;
+
+               case FreeRDP_MaximizeShell:
+                       settings->MaximizeShell = val;
+                       break;
+
+               case FreeRDP_LogonNotify:
+                       settings->LogonNotify = val;
+                       break;
+
+               case FreeRDP_LogonErrors:
+                       settings->LogonErrors = val;
+                       break;
+
+               case FreeRDP_MouseAttached:
+                       settings->MouseAttached = val;
+                       break;
+
+               case FreeRDP_MouseHasWheel:
+                       settings->MouseHasWheel = val;
+                       break;
+
+               case FreeRDP_RemoteConsoleAudio:
+                       settings->RemoteConsoleAudio = val;
+                       break;
+
+               case FreeRDP_AudioPlayback:
+                       settings->AudioPlayback = val;
+                       break;
+
+               case FreeRDP_AudioCapture:
+                       settings->AudioCapture = val;
+                       break;
+
+               case FreeRDP_VideoDisable:
+                       settings->VideoDisable = val;
+                       break;
+
+               case FreeRDP_PasswordIsSmartcardPin:
+                       settings->PasswordIsSmartcardPin = val;
+                       break;
+
+               case FreeRDP_UsingSavedCredentials:
+                       settings->UsingSavedCredentials = val;
+                       break;
+
+               case FreeRDP_ForceEncryptedCsPdu:
+                       settings->ForceEncryptedCsPdu = val;
+                       break;
+
+               case FreeRDP_HiDefRemoteApp:
+                       settings->HiDefRemoteApp = val;
+                       break;
+
+               case FreeRDP_IPv6Enabled:
+                       settings->IPv6Enabled = val;
+                       break;
+
+               case FreeRDP_AutoReconnectionEnabled:
+                       settings->AutoReconnectionEnabled = val;
+                       break;
+
+               case FreeRDP_PrintReconnectCookie:
+                       settings->PrintReconnectCookie = val;
+                       break;
+
+               case FreeRDP_DynamicDaylightTimeDisabled:
+                       settings->DynamicDaylightTimeDisabled = val;
+                       break;
+
+               case FreeRDP_AllowFontSmoothing:
+                       settings->AllowFontSmoothing = val;
+                       break;
+
+               case FreeRDP_DisableWallpaper:
+                       settings->DisableWallpaper = val;
+                       break;
+
+               case FreeRDP_DisableFullWindowDrag:
+                       settings->DisableFullWindowDrag = val;
+                       break;
+
+               case FreeRDP_DisableMenuAnims:
+                       settings->DisableMenuAnims = val;
+                       break;
+
+               case FreeRDP_DisableThemes:
+                       settings->DisableThemes = val;
+                       break;
+
+               case FreeRDP_DisableCursorShadow:
+                       settings->DisableCursorShadow = val;
+                       break;
+
+               case FreeRDP_DisableCursorBlinking:
+                       settings->DisableCursorBlinking = val;
+                       break;
+
+               case FreeRDP_AllowDesktopComposition:
+                       settings->AllowDesktopComposition = val;
+                       break;
+
+               case FreeRDP_RemoteAssistanceMode:
+                       settings->RemoteAssistanceMode = val;
+                       break;
+
+               case FreeRDP_EncomspVirtualChannel:
+                       settings->EncomspVirtualChannel = val;
+                       break;
+
+               case FreeRDP_RemdeskVirtualChannel:
+                       settings->RemdeskVirtualChannel = val;
+                       break;
+
+               case FreeRDP_LyncRdpMode:
+                       settings->LyncRdpMode = val;
+                       break;
+
+               case FreeRDP_TlsSecurity:
+                       settings->TlsSecurity = val;
+                       break;
+
+               case FreeRDP_NlaSecurity:
+                       settings->NlaSecurity = val;
+                       break;
+
+               case FreeRDP_RdpSecurity:
+                       settings->RdpSecurity = val;
+                       break;
+
+               case FreeRDP_ExtSecurity:
+                       settings->ExtSecurity = val;
+                       break;
+
+               case FreeRDP_Authentication:
+                       settings->Authentication = val;
+                       break;
+
+               case FreeRDP_NegotiateSecurityLayer:
+                       settings->NegotiateSecurityLayer = val;
+                       break;
+
+               case FreeRDP_RestrictedAdminModeRequired:
+                       settings->RestrictedAdminModeRequired = val;
+                       break;
+
+               case FreeRDP_DisableCredentialsDelegation:
+                       settings->DisableCredentialsDelegation = val;
+                       break;
+
+               case FreeRDP_VmConnectMode:
+                       settings->VmConnectMode = val;
+                       break;
+
+               case FreeRDP_FIPSMode:
+                       settings->FIPSMode = val;
+                       break;
+
+               case FreeRDP_MstscCookieMode:
+                       settings->MstscCookieMode = val;
+                       break;
+
+               case FreeRDP_SendPreconnectionPdu:
+                       settings->SendPreconnectionPdu = val;
+                       break;
+
+               case FreeRDP_SmartcardLogon:
+                       settings->SmartcardLogon = val;
+                       break;
+
+               case FreeRDP_IgnoreCertificate:
+                       settings->IgnoreCertificate = val;
+                       break;
+
+               case FreeRDP_ExternalCertificateManagement:
+                       settings->ExternalCertificateManagement = val;
+                       break;
+
+               case FreeRDP_AutoAcceptCertificate:
+                       settings->AutoAcceptCertificate = val;
+                       break;
+
+               case FreeRDP_AutoDenyCertificate:
+                       settings->AutoDenyCertificate = val;
+                       break;
+
+               case FreeRDP_Workarea:
+                       settings->Workarea = val;
+                       break;
+
+               case FreeRDP_Fullscreen:
+                       settings->Fullscreen = val;
+                       break;
+
+               case FreeRDP_GrabKeyboard:
+                       settings->GrabKeyboard = val;
+                       break;
+
+               case FreeRDP_Decorations:
+                       settings->Decorations = val;
+                       break;
+
+               case FreeRDP_MouseMotion:
+                       settings->MouseMotion = val;
+                       break;
+
+               case FreeRDP_AsyncInput:
+                       settings->AsyncInput = val;
+                       break;
+
+               case FreeRDP_AsyncUpdate:
+                       settings->AsyncUpdate = val;
+                       break;
+
+               case FreeRDP_AsyncChannels:
+                       settings->AsyncChannels = val;
+                       break;
+
+               case FreeRDP_ToggleFullscreen:
+                       settings->ToggleFullscreen = val;
+                       break;
+
+               case FreeRDP_EmbeddedWindow:
+                       settings->EmbeddedWindow = val;
+                       break;
+
+               case FreeRDP_SmartSizing:
+                       settings->SmartSizing = val;
+                       break;
+
+               case FreeRDP_PercentScreenUseWidth:
+                       settings->PercentScreenUseWidth = val;
+                       break;
+
+               case FreeRDP_PercentScreenUseHeight:
+                       settings->PercentScreenUseHeight = val;
+                       break;
+
+               case FreeRDP_DynamicResolutionUpdate:
+                       settings->DynamicResolutionUpdate = val;
+                       break;
+
+               case FreeRDP_SoftwareGdi:
+                       settings->SoftwareGdi = val;
+                       break;
+
+               case FreeRDP_LocalConnection:
+                       settings->LocalConnection = val;
+                       break;
+
+               case FreeRDP_AuthenticationOnly:
+                       settings->AuthenticationOnly = val;
+                       break;
+
+               case FreeRDP_CredentialsFromStdin:
+                       settings->CredentialsFromStdin = val;
+                       break;
+
+               case FreeRDP_UnmapButtons:
+                       settings->UnmapButtons = val;
+                       break;
+
+               case FreeRDP_OldLicenseBehaviour:
+                       settings->OldLicenseBehaviour = val;
+                       break;
+
+               case FreeRDP_DumpRemoteFx:
+                       settings->DumpRemoteFx = val;
+                       break;
+
+               case FreeRDP_PlayRemoteFx:
+                       settings->PlayRemoteFx = val;
+                       break;
+
+               case FreeRDP_GatewayUseSameCredentials:
+                       settings->GatewayUseSameCredentials = val;
+                       break;
+
+               case FreeRDP_GatewayEnabled:
+                       settings->GatewayEnabled = val;
+                       break;
+
+               case FreeRDP_GatewayBypassLocal:
+                       settings->GatewayBypassLocal = val;
+                       break;
+
+               case FreeRDP_GatewayRpcTransport:
+                       settings->GatewayRpcTransport = val;
+                       break;
+
+               case FreeRDP_GatewayHttpTransport:
+                       settings->GatewayHttpTransport = val;
+                       break;
+
+               case FreeRDP_GatewayUdpTransport:
+                       settings->GatewayUdpTransport = val;
+                       break;
+
+               case FreeRDP_RemoteApplicationMode:
+                       settings->RemoteApplicationMode = val;
+                       break;
+
+               case FreeRDP_DisableRemoteAppCapsCheck:
+                       settings->DisableRemoteAppCapsCheck = val;
+                       break;
+
+               case FreeRDP_RemoteAppLanguageBarSupported:
+                       settings->RemoteAppLanguageBarSupported = val;
+                       break;
+
+               case FreeRDP_RefreshRect:
+                       settings->RefreshRect = val;
+                       break;
+
+               case FreeRDP_SuppressOutput:
+                       settings->SuppressOutput = val;
+                       break;
+
+               case FreeRDP_FastPathOutput:
+                       settings->FastPathOutput = val;
+                       break;
+
+               case FreeRDP_SaltedChecksum:
+                       settings->SaltedChecksum = val;
+                       break;
+
+               case FreeRDP_LongCredentialsSupported:
+                       settings->LongCredentialsSupported = val;
+                       break;
+
+               case FreeRDP_NoBitmapCompressionHeader:
+                       settings->NoBitmapCompressionHeader = val;
+                       break;
+
+               case FreeRDP_BitmapCompressionDisabled:
+                       settings->BitmapCompressionDisabled = val;
+                       break;
+
+               case FreeRDP_DesktopResize:
+                       settings->DesktopResize = val;
+                       break;
+
+               case FreeRDP_DrawAllowDynamicColorFidelity:
+                       settings->DrawAllowDynamicColorFidelity = val;
+                       break;
+
+               case FreeRDP_DrawAllowColorSubsampling:
+                       settings->DrawAllowColorSubsampling = val;
+                       break;
+
+               case FreeRDP_DrawAllowSkipAlpha:
+                       settings->DrawAllowSkipAlpha = val;
+                       break;
+
+               case FreeRDP_BitmapCacheV3Enabled:
+                       settings->BitmapCacheV3Enabled = val;
+                       break;
+
+               case FreeRDP_AltSecFrameMarkerSupport:
+                       settings->AltSecFrameMarkerSupport = val;
+                       break;
+
+               case FreeRDP_AllowUnanouncedOrdersFromServer:
+                       settings->AllowUnanouncedOrdersFromServer = val;
+                       break;
+
+               case FreeRDP_BitmapCacheEnabled:
+                       settings->BitmapCacheEnabled = val;
+                       break;
+
+               case FreeRDP_AllowCacheWaitingList:
+                       settings->AllowCacheWaitingList = val;
+                       break;
+
+               case FreeRDP_BitmapCachePersistEnabled:
+                       settings->BitmapCachePersistEnabled = val;
+                       break;
+
+               case FreeRDP_ColorPointerFlag:
+                       settings->ColorPointerFlag = val;
+                       break;
+
+               case FreeRDP_UnicodeInput:
+                       settings->UnicodeInput = val;
+                       break;
+
+               case FreeRDP_FastPathInput:
+                       settings->FastPathInput = val;
+                       break;
+
+               case FreeRDP_MultiTouchInput:
+                       settings->MultiTouchInput = val;
+                       break;
+
+               case FreeRDP_MultiTouchGestures:
+                       settings->MultiTouchGestures = val;
+                       break;
+
+               case FreeRDP_HasHorizontalWheel:
+                       settings->HasHorizontalWheel = val;
+                       break;
+
+               case FreeRDP_HasExtendedMouseEvent:
+                       settings->HasExtendedMouseEvent = val;
+                       break;
+
+               case FreeRDP_SoundBeepsEnabled:
+                       settings->SoundBeepsEnabled = val;
+                       break;
+
+               case FreeRDP_SurfaceCommandsEnabled:
+                       settings->SurfaceCommandsEnabled = val;
+                       break;
+
+               case FreeRDP_FrameMarkerCommandEnabled:
+                       settings->FrameMarkerCommandEnabled = val;
+                       break;
+
+               case FreeRDP_SurfaceFrameMarkerEnabled:
+                       settings->SurfaceFrameMarkerEnabled = val;
+                       break;
+
+               case FreeRDP_RemoteFxOnly:
+                       settings->RemoteFxOnly = val;
+                       break;
+
+               case FreeRDP_RemoteFxCodec:
+                       settings->RemoteFxCodec = val;
+                       break;
+
+               case FreeRDP_RemoteFxImageCodec:
+                       settings->RemoteFxImageCodec = val;
+                       break;
+
+               case FreeRDP_NSCodec:
+                       settings->NSCodec = val;
+                       break;
+
+               case FreeRDP_NSCodecAllowSubsampling:
+                       settings->NSCodecAllowSubsampling = val;
+                       break;
+
+               case FreeRDP_NSCodecAllowDynamicColorFidelity:
+                       settings->NSCodecAllowDynamicColorFidelity = val;
+                       break;
+
+               case FreeRDP_JpegCodec:
+                       settings->JpegCodec = val;
+                       break;
+
+               case FreeRDP_GfxThinClient:
+                       settings->GfxThinClient = val;
+                       break;
+
+               case FreeRDP_GfxSmallCache:
+                       settings->GfxSmallCache = val;
+                       break;
+
+               case FreeRDP_GfxProgressive:
+                       settings->GfxProgressive = val;
+                       break;
+
+               case FreeRDP_GfxProgressiveV2:
+                       settings->GfxProgressiveV2 = val;
+                       break;
+
+               case FreeRDP_GfxH264:
+                       settings->GfxH264 = val;
+                       break;
+
+               case FreeRDP_GfxAVC444:
+                       settings->GfxAVC444 = val;
+                       break;
+
+               case FreeRDP_GfxSendQoeAck:
+                       settings->GfxSendQoeAck = val;
+                       break;
+
+               case FreeRDP_GfxAVC444v2:
+                       settings->GfxAVC444v2 = val;
+                       break;
+
+               case FreeRDP_DrawNineGridEnabled:
+                       settings->DrawNineGridEnabled = val;
+                       break;
+
+               case FreeRDP_DrawGdiPlusEnabled:
+                       settings->DrawGdiPlusEnabled = val;
+                       break;
+
+               case FreeRDP_DrawGdiPlusCacheEnabled:
+                       settings->DrawGdiPlusCacheEnabled = val;
+                       break;
+
+               case FreeRDP_DeviceRedirection:
+                       settings->DeviceRedirection = val;
+                       break;
+
+               case FreeRDP_RedirectDrives:
+                       settings->RedirectDrives = val;
+                       break;
+
+               case FreeRDP_RedirectHomeDrive:
+                       settings->RedirectHomeDrive = val;
+                       break;
+
+               case FreeRDP_RedirectSmartCards:
+                       settings->RedirectSmartCards = val;
+                       break;
+
+               case FreeRDP_RedirectPrinters:
+                       settings->RedirectPrinters = val;
+                       break;
+
+               case FreeRDP_RedirectSerialPorts:
+                       settings->RedirectSerialPorts = val;
+                       break;
+
+               case FreeRDP_RedirectParallelPorts:
+                       settings->RedirectParallelPorts = val;
+                       break;
+
+               case FreeRDP_PreferIPv6OverIPv4:
+                       settings->PreferIPv6OverIPv4 = val;
+                       break;
+
+               case FreeRDP_RedirectClipboard:
+                       settings->RedirectClipboard = val;
+                       break;
+
+               case FreeRDP_SupportDynamicChannels:
+                       settings->SupportDynamicChannels = val;
+                       break;
+
+               case FreeRDP_SupportEchoChannel:
+                       settings->SupportEchoChannel = val;
+                       break;
+
+               case FreeRDP_SupportDisplayControl:
+                       settings->SupportDisplayControl = val;
+                       break;
+
+               case FreeRDP_SupportGeometryTracking:
+                       settings->SupportGeometryTracking = val;
+                       break;
+
+               case FreeRDP_SupportSSHAgentChannel:
+                       settings->SupportSSHAgentChannel = val;
+                       break;
+
+               case FreeRDP_SupportVideoOptimized:
+                       settings->SupportVideoOptimized = val;
+                       break;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+
+       return TRUE;
+}
+
+UINT16 freerdp_get_param_uint16(rdpSettings* settings, size_t id)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               case FreeRDP_DesktopOrientation:
+                       return settings->DesktopOrientation;
+
+               case FreeRDP_ProxyPort:
+                       return settings->ProxyPort;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+}
+
+BOOL freerdp_set_param_uint16(rdpSettings* settings, size_t id, UINT16 val)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               case FreeRDP_DesktopOrientation:
+                       settings->DesktopOrientation = val;
+                       break;
+
+               case FreeRDP_ProxyPort:
+                       settings->ProxyPort = val;
+                       break;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+
+       return TRUE;
+}
+
+INT16 freerdp_get_param_int16(rdpSettings* settings, size_t id)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+}
+
+BOOL freerdp_set_param_int16(rdpSettings* settings, size_t id, INT16 val)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+
+       return TRUE;
+}
+
+UINT32 freerdp_get_param_uint32(rdpSettings* settings, size_t id)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               case FreeRDP_ShareId:
+                       return settings->ShareId;
+
+               case FreeRDP_PduSource:
+                       return settings->PduSource;
+
+               case FreeRDP_ServerPort:
+                       return settings->ServerPort;
+
+               case FreeRDP_MaxTimeInCheckLoop:
+                       return settings->MaxTimeInCheckLoop;
+
+               case FreeRDP_AcceptedCertLength:
+                       return settings->AcceptedCertLength;
+
+               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_DesktopPhysicalWidth:
+                       return settings->DesktopPhysicalWidth;
+
+               case FreeRDP_DesktopPhysicalHeight:
+                       return settings->DesktopPhysicalHeight;
+
+               case FreeRDP_DesktopScaleFactor:
+                       return settings->DesktopScaleFactor;
+
+               case FreeRDP_DeviceScaleFactor:
+                       return settings->DeviceScaleFactor;
+
+               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_ServerCertificateLength:
+                       return settings->ServerCertificateLength;
+
+               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_MonitorCount:
+                       return settings->MonitorCount;
+
+               case FreeRDP_MonitorDefArraySize:
+                       return settings->MonitorDefArraySize;
+
+               case FreeRDP_DesktopPosX:
+                       return settings->DesktopPosX;
+
+               case FreeRDP_DesktopPosY:
+                       return settings->DesktopPosY;
+
+               case FreeRDP_NumMonitorIds:
+                       return settings->NumMonitorIds;
+
+               case FreeRDP_MonitorLocalShiftX:
+                       return settings->MonitorLocalShiftX;
+
+               case FreeRDP_MonitorLocalShiftY:
+                       return settings->MonitorLocalShiftY;
+
+               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_AuthenticationLevel:
+                       return settings->AuthenticationLevel;
+
+               case FreeRDP_TlsSecLevel:
+                       return settings->TlsSecLevel;
+
+               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_RedirectionAcceptedCertLength:
+                       return settings->RedirectionAcceptedCertLength;
+
+               case FreeRDP_RedirectionPreferType:
+                       return settings->RedirectionPreferType;
+
+               case FreeRDP_Password51Length:
+                       return settings->Password51Length;
+
+               case FreeRDP_PercentScreen:
+                       return settings->PercentScreen;
+
+               case FreeRDP_SmartSizingWidth:
+                       return settings->SmartSizingWidth;
+
+               case FreeRDP_SmartSizingHeight:
+                       return settings->SmartSizingHeight;
+
+               case FreeRDP_GatewayUsageMethod:
+                       return settings->GatewayUsageMethod;
+
+               case FreeRDP_GatewayPort:
+                       return settings->GatewayPort;
+
+               case FreeRDP_GatewayCredentialsSource:
+                       return settings->GatewayCredentialsSource;
+
+               case FreeRDP_GatewayAcceptedCertLength:
+                       return settings->GatewayAcceptedCertLength;
+
+               case FreeRDP_ProxyType:
+                       return settings->ProxyType;
+
+               case FreeRDP_RemoteApplicationExpandCmdLine:
+                       return settings->RemoteApplicationExpandCmdLine;
+
+               case FreeRDP_RemoteApplicationExpandWorkingDir:
+                       return settings->RemoteApplicationExpandWorkingDir;
+
+               case FreeRDP_RemoteAppNumIconCaches:
+                       return settings->RemoteAppNumIconCaches;
+
+               case FreeRDP_RemoteAppNumIconCacheEntries:
+                       return settings->RemoteAppNumIconCacheEntries;
+
+               case FreeRDP_RemoteWndSupportLevel:
+                       return settings->RemoteWndSupportLevel;
+
+               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;
+
+               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_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_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;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+}
+
+BOOL freerdp_set_param_uint32(rdpSettings* settings, size_t id, UINT32 val)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               case FreeRDP_ShareId:
+                       settings->ShareId = val;
+                       break;
+
+               case FreeRDP_PduSource:
+                       settings->PduSource = val;
+                       break;
+
+               case FreeRDP_ServerPort:
+                       settings->ServerPort = val;
+                       break;
+
+               case FreeRDP_MaxTimeInCheckLoop:
+                       settings->MaxTimeInCheckLoop = val;
+                       break;
+
+               case FreeRDP_AcceptedCertLength:
+                       settings->AcceptedCertLength = val;
+                       break;
+
+               case FreeRDP_RdpVersion:
+                       settings->RdpVersion = val;
+                       break;
+
+               case FreeRDP_DesktopWidth:
+                       settings->DesktopWidth = val;
+                       break;
+
+               case FreeRDP_DesktopHeight:
+                       settings->DesktopHeight = val;
+                       break;
+
+               case FreeRDP_ColorDepth:
+                       settings->ColorDepth = val;
+                       break;
+
+               case FreeRDP_ConnectionType:
+                       settings->ConnectionType = val;
+                       break;
+
+               case FreeRDP_ClientBuild:
+                       settings->ClientBuild = val;
+                       break;
+
+               case FreeRDP_EarlyCapabilityFlags:
+                       settings->EarlyCapabilityFlags = val;
+                       break;
+
+               case FreeRDP_DesktopPhysicalWidth:
+                       settings->DesktopPhysicalWidth = val;
+                       break;
+
+               case FreeRDP_DesktopPhysicalHeight:
+                       settings->DesktopPhysicalHeight = val;
+                       break;
+
+               case FreeRDP_DesktopScaleFactor:
+                       settings->DesktopScaleFactor = val;
+                       break;
+
+               case FreeRDP_DeviceScaleFactor:
+                       settings->DeviceScaleFactor = val;
+                       break;
+
+               case FreeRDP_EncryptionMethods:
+                       settings->EncryptionMethods = val;
+                       break;
+
+               case FreeRDP_ExtEncryptionMethods:
+                       settings->ExtEncryptionMethods = val;
+                       break;
+
+               case FreeRDP_EncryptionLevel:
+                       settings->EncryptionLevel = val;
+                       break;
+
+               case FreeRDP_ServerRandomLength:
+                       settings->ServerRandomLength = val;
+                       break;
+
+               case FreeRDP_ServerCertificateLength:
+                       settings->ServerCertificateLength = val;
+                       break;
+
+               case FreeRDP_ClientRandomLength:
+                       settings->ClientRandomLength = val;
+                       break;
+
+               case FreeRDP_ChannelCount:
+                       settings->ChannelCount = val;
+                       break;
+
+               case FreeRDP_ChannelDefArraySize:
+                       settings->ChannelDefArraySize = val;
+                       break;
+
+               case FreeRDP_ClusterInfoFlags:
+                       settings->ClusterInfoFlags = val;
+                       break;
+
+               case FreeRDP_RedirectedSessionId:
+                       settings->RedirectedSessionId = val;
+                       break;
+
+               case FreeRDP_MonitorCount:
+                       settings->MonitorCount = val;
+                       break;
+
+               case FreeRDP_MonitorDefArraySize:
+                       settings->MonitorDefArraySize = val;
+                       break;
+
+               case FreeRDP_DesktopPosX:
+                       settings->DesktopPosX = val;
+                       break;
+
+               case FreeRDP_DesktopPosY:
+                       settings->DesktopPosY = val;
+                       break;
+
+               case FreeRDP_NumMonitorIds:
+                       settings->NumMonitorIds = val;
+                       break;
+
+               case FreeRDP_MonitorLocalShiftX:
+                       settings->MonitorLocalShiftX = val;
+                       break;
+
+               case FreeRDP_MonitorLocalShiftY:
+                       settings->MonitorLocalShiftY = val;
+                       break;
+
+               case FreeRDP_MultitransportFlags:
+                       settings->MultitransportFlags = val;
+                       break;
+
+               case FreeRDP_CompressionLevel:
+                       settings->CompressionLevel = val;
+                       break;
+
+               case FreeRDP_AutoReconnectMaxRetries:
+                       settings->AutoReconnectMaxRetries = val;
+                       break;
+
+               case FreeRDP_PerformanceFlags:
+                       settings->PerformanceFlags = val;
+                       break;
+
+               case FreeRDP_RequestedProtocols:
+                       settings->RequestedProtocols = val;
+                       break;
+
+               case FreeRDP_SelectedProtocol:
+                       settings->SelectedProtocol = val;
+                       break;
+
+               case FreeRDP_NegotiationFlags:
+                       settings->NegotiationFlags = val;
+                       break;
+
+               case FreeRDP_AuthenticationLevel:
+                       settings->AuthenticationLevel = val;
+                       break;
+
+               case FreeRDP_TlsSecLevel:
+                       settings->TlsSecLevel = val;
+                       break;
+
+               case FreeRDP_CookieMaxLength:
+                       settings->CookieMaxLength = val;
+                       break;
+
+               case FreeRDP_PreconnectionId:
+                       settings->PreconnectionId = val;
+                       break;
+
+               case FreeRDP_RedirectionFlags:
+                       settings->RedirectionFlags = val;
+                       break;
+
+               case FreeRDP_LoadBalanceInfoLength:
+                       settings->LoadBalanceInfoLength = val;
+                       break;
+
+               case FreeRDP_RedirectionPasswordLength:
+                       settings->RedirectionPasswordLength = val;
+                       break;
+
+               case FreeRDP_RedirectionTsvUrlLength:
+                       settings->RedirectionTsvUrlLength = val;
+                       break;
+
+               case FreeRDP_TargetNetAddressCount:
+                       settings->TargetNetAddressCount = val;
+                       break;
+
+               case FreeRDP_RedirectionAcceptedCertLength:
+                       settings->RedirectionAcceptedCertLength = val;
+                       break;
+
+               case FreeRDP_RedirectionPreferType:
+                       settings->RedirectionPreferType = val;
+                       break;
+
+               case FreeRDP_Password51Length:
+                       settings->Password51Length = val;
+                       break;
+
+               case FreeRDP_PercentScreen:
+                       settings->PercentScreen = val;
+                       break;
+
+               case FreeRDP_SmartSizingWidth:
+                       settings->SmartSizingWidth = val;
+                       break;
+
+               case FreeRDP_SmartSizingHeight:
+                       settings->SmartSizingHeight = val;
+                       break;
+
+               case FreeRDP_GatewayUsageMethod:
+                       settings->GatewayUsageMethod = val;
+                       break;
+
+               case FreeRDP_GatewayPort:
+                       settings->GatewayPort = val;
+                       break;
+
+               case FreeRDP_GatewayCredentialsSource:
+                       settings->GatewayCredentialsSource = val;
+                       break;
+
+               case FreeRDP_GatewayAcceptedCertLength:
+                       settings->GatewayAcceptedCertLength = val;
+                       break;
+
+               case FreeRDP_ProxyType:
+                       settings->ProxyType = val;
+                       break;
+
+               case FreeRDP_RemoteApplicationExpandCmdLine:
+                       settings->RemoteApplicationExpandCmdLine = val;
+                       break;
+
+               case FreeRDP_RemoteApplicationExpandWorkingDir:
+                       settings->RemoteApplicationExpandWorkingDir = val;
+                       break;
+
+               case FreeRDP_RemoteAppNumIconCaches:
+                       settings->RemoteAppNumIconCaches = val;
+                       break;
+
+               case FreeRDP_RemoteAppNumIconCacheEntries:
+                       settings->RemoteAppNumIconCacheEntries = val;
+                       break;
+
+               case FreeRDP_RemoteWndSupportLevel:
+                       settings->RemoteWndSupportLevel = val;
+                       break;
+
+               case FreeRDP_ReceivedCapabilitiesSize:
+                       settings->ReceivedCapabilitiesSize = val;
+                       break;
+
+               case FreeRDP_OsMajorType:
+                       settings->OsMajorType = val;
+                       break;
+
+               case FreeRDP_OsMinorType:
+                       settings->OsMinorType = val;
+                       break;
+
+               case FreeRDP_BitmapCacheVersion:
+                       settings->BitmapCacheVersion = val;
+                       break;
+
+               case FreeRDP_BitmapCacheV2NumCells:
+                       settings->BitmapCacheV2NumCells = val;
+                       break;
+
+               case FreeRDP_PointerCacheSize:
+                       settings->PointerCacheSize = val;
+                       break;
+
+               case FreeRDP_KeyboardLayout:
+                       settings->KeyboardLayout = val;
+                       break;
+
+               case FreeRDP_KeyboardType:
+                       settings->KeyboardType = val;
+                       break;
+
+               case FreeRDP_KeyboardSubType:
+                       settings->KeyboardSubType = val;
+                       break;
+
+               case FreeRDP_KeyboardFunctionKey:
+                       settings->KeyboardFunctionKey = val;
+                       break;
+
+               case FreeRDP_KeyboardHook:
+                       settings->KeyboardHook = val;
+                       break;
+
+               case FreeRDP_BrushSupportLevel:
+                       settings->BrushSupportLevel = val;
+                       break;
+
+               case FreeRDP_GlyphSupportLevel:
+                       settings->GlyphSupportLevel = val;
+                       break;
+
+               case FreeRDP_OffscreenSupportLevel:
+                       settings->OffscreenSupportLevel = val;
+                       break;
+
+               case FreeRDP_OffscreenCacheSize:
+                       settings->OffscreenCacheSize = val;
+                       break;
+
+               case FreeRDP_OffscreenCacheEntries:
+                       settings->OffscreenCacheEntries = val;
+                       break;
+
+               case FreeRDP_VirtualChannelCompressionFlags:
+                       settings->VirtualChannelCompressionFlags = val;
+                       break;
+
+               case FreeRDP_VirtualChannelChunkSize:
+                       settings->VirtualChannelChunkSize = val;
+                       break;
+
+               case FreeRDP_MultifragMaxRequestSize:
+                       settings->MultifragMaxRequestSize = val;
+                       break;
+
+               case FreeRDP_LargePointerFlag:
+                       settings->LargePointerFlag = val;
+                       break;
+
+               case FreeRDP_CompDeskSupportLevel:
+                       settings->CompDeskSupportLevel = val;
+                       break;
+
+               case FreeRDP_RemoteFxCodecId:
+                       settings->RemoteFxCodecId = val;
+                       break;
+
+               case FreeRDP_RemoteFxCodecMode:
+                       settings->RemoteFxCodecMode = val;
+                       break;
+
+               case FreeRDP_RemoteFxCaptureFlags:
+                       settings->RemoteFxCaptureFlags = val;
+                       break;
+
+               case FreeRDP_NSCodecId:
+                       settings->NSCodecId = val;
+                       break;
+
+               case FreeRDP_FrameAcknowledge:
+                       settings->FrameAcknowledge = val;
+                       break;
+
+               case FreeRDP_NSCodecColorLossLevel:
+                       settings->NSCodecColorLossLevel = val;
+                       break;
+
+               case FreeRDP_JpegCodecId:
+                       settings->JpegCodecId = val;
+                       break;
+
+               case FreeRDP_JpegQuality:
+                       settings->JpegQuality = val;
+                       break;
+
+               case FreeRDP_BitmapCacheV3CodecId:
+                       settings->BitmapCacheV3CodecId = val;
+                       break;
+
+               case FreeRDP_DrawNineGridCacheSize:
+                       settings->DrawNineGridCacheSize = val;
+                       break;
+
+               case FreeRDP_DrawNineGridCacheEntries:
+                       settings->DrawNineGridCacheEntries = val;
+                       break;
+
+               case FreeRDP_DeviceCount:
+                       settings->DeviceCount = val;
+                       break;
+
+               case FreeRDP_DeviceArraySize:
+                       settings->DeviceArraySize = val;
+                       break;
+
+               case FreeRDP_StaticChannelCount:
+                       settings->StaticChannelCount = val;
+                       break;
+
+               case FreeRDP_StaticChannelArraySize:
+                       settings->StaticChannelArraySize = val;
+                       break;
+
+               case FreeRDP_DynamicChannelCount:
+                       settings->DynamicChannelCount = val;
+                       break;
+
+               case FreeRDP_DynamicChannelArraySize:
+                       settings->DynamicChannelArraySize = val;
+                       break;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+
+       return TRUE;
+}
+
+INT32 freerdp_get_param_int32(rdpSettings* settings, size_t id)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               case FreeRDP_XPan:
+                       return settings->XPan;
+
+               case FreeRDP_YPan:
+                       return settings->YPan;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+}
+
+BOOL freerdp_set_param_int32(rdpSettings* settings, size_t id, INT32 val)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               case FreeRDP_XPan:
+                       settings->XPan = val;
+                       break;
+
+               case FreeRDP_YPan:
+                       settings->YPan = val;
+                       break;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+
+       return TRUE;
+}
+
+UINT64 freerdp_get_param_uint64(rdpSettings* settings, size_t id)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               case FreeRDP_ParentWindowId:
+                       return settings->ParentWindowId;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+}
+
+BOOL freerdp_set_param_uint64(rdpSettings* settings, size_t id, UINT64 val)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               case FreeRDP_ParentWindowId:
+                       settings->ParentWindowId = val;
+                       break;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+
+       return TRUE;
+}
+
+INT64 freerdp_get_param_int64(rdpSettings* settings, size_t id)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+}
+
+BOOL freerdp_set_param_int64(rdpSettings* settings, size_t id, INT64 val)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+
+       return TRUE;
+}
+
+const char* freerdp_get_param_string(rdpSettings* settings, size_t id)
+{
+       if (!settings)
+               return FALSE;
+
+       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_AcceptedCert:
+                       return settings->AcceptedCert;
+
+               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_TargetNetAddress:
+                       return settings->TargetNetAddress;
+
+               case FreeRDP_RedirectionUsername:
+                       return settings->RedirectionUsername;
+
+               case FreeRDP_RedirectionDomain:
+                       return settings->RedirectionDomain;
+
+               case FreeRDP_RedirectionTargetFQDN:
+                       return settings->RedirectionTargetFQDN;
+
+               case FreeRDP_RedirectionTargetNetBiosName:
+                       return settings->RedirectionTargetNetBiosName;
+
+               case FreeRDP_RedirectionAcceptedCert:
+                       return settings->RedirectionAcceptedCert;
+
+               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_WmClass:
+                       return settings->WmClass;
+
+               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_GatewayAccessToken:
+                       return settings->GatewayAccessToken;
+
+               case FreeRDP_GatewayAcceptedCert:
+                       return settings->GatewayAcceptedCert;
+
+               case FreeRDP_ProxyHostname:
+                       return settings->ProxyHostname;
+
+               case FreeRDP_ProxyUsername:
+                       return settings->ProxyUsername;
+
+               case FreeRDP_ProxyPassword:
+                       return settings->ProxyPassword;
+
+               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, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+}
+
+BOOL freerdp_set_param_string(rdpSettings* settings, size_t id, const char* val)
+{
+       if (!settings)
+               return FALSE;
+
+       switch (id)
+       {
+               case FreeRDP_ServerHostname:
+                       free(settings->ServerHostname);
+                       settings->ServerHostname = _strdup(val);
+                       return settings->ServerHostname != NULL;
+
+               case FreeRDP_Username:
+                       free(settings->Username);
+                       settings->Username = _strdup(val);
+                       return settings->Username != NULL;
+
+               case FreeRDP_Password:
+                       free(settings->Password);
+                       settings->Password = _strdup(val);
+                       return settings->Password != NULL;
+
+               case FreeRDP_Domain:
+                       free(settings->Domain);
+                       settings->Domain = _strdup(val);
+                       return settings->Domain != NULL;
+
+               case FreeRDP_PasswordHash:
+                       free(settings->PasswordHash);
+                       settings->PasswordHash = _strdup(val);
+                       return settings->PasswordHash != NULL;
+
+               case FreeRDP_AcceptedCert:
+                       free(settings->AcceptedCert);
+                       settings->AcceptedCert = _strdup(val);
+                       return settings->AcceptedCert != NULL;
+
+               case FreeRDP_ClientHostname:
+                       free(settings->ClientHostname);
+                       settings->ClientHostname = _strdup(val);
+                       return settings->ClientHostname != NULL;
+
+               case FreeRDP_ClientProductId:
+                       free(settings->ClientProductId);
+                       settings->ClientProductId = _strdup(val);
+                       return settings->ClientProductId != NULL;
+
+               case FreeRDP_AlternateShell:
+                       free(settings->AlternateShell);
+                       settings->AlternateShell = _strdup(val);
+                       return settings->AlternateShell != NULL;
+
+               case FreeRDP_ShellWorkingDirectory:
+                       free(settings->ShellWorkingDirectory);
+                       settings->ShellWorkingDirectory = _strdup(val);
+                       return settings->ShellWorkingDirectory != NULL;
+
+               case FreeRDP_ClientAddress:
+                       free(settings->ClientAddress);
+                       settings->ClientAddress = _strdup(val);
+                       return settings->ClientAddress != NULL;
+
+               case FreeRDP_ClientDir:
+                       free(settings->ClientDir);
+                       settings->ClientDir = _strdup(val);
+                       return settings->ClientDir != NULL;
+
+               case FreeRDP_DynamicDSTTimeZoneKeyName:
+                       free(settings->DynamicDSTTimeZoneKeyName);
+                       settings->DynamicDSTTimeZoneKeyName = _strdup(val);
+                       return settings->DynamicDSTTimeZoneKeyName != NULL;
+
+               case FreeRDP_RemoteAssistanceSessionId:
+                       free(settings->RemoteAssistanceSessionId);
+                       settings->RemoteAssistanceSessionId = _strdup(val);
+                       return settings->RemoteAssistanceSessionId != NULL;
+
+               case FreeRDP_RemoteAssistancePassStub:
+                       free(settings->RemoteAssistancePassStub);
+                       settings->RemoteAssistancePassStub = _strdup(val);
+                       return settings->RemoteAssistancePassStub != NULL;
+
+               case FreeRDP_RemoteAssistancePassword:
+                       free(settings->RemoteAssistancePassword);
+                       settings->RemoteAssistancePassword = _strdup(val);
+                       return settings->RemoteAssistancePassword != NULL;
+
+               case FreeRDP_RemoteAssistanceRCTicket:
+                       free(settings->RemoteAssistanceRCTicket);
+                       settings->RemoteAssistanceRCTicket = _strdup(val);
+                       return settings->RemoteAssistanceRCTicket != NULL;
+
+               case FreeRDP_AuthenticationServiceClass:
+                       free(settings->AuthenticationServiceClass);
+                       settings->AuthenticationServiceClass = _strdup(val);
+                       return settings->AuthenticationServiceClass != NULL;
+
+               case FreeRDP_AllowedTlsCiphers:
+                       free(settings->AllowedTlsCiphers);
+                       settings->AllowedTlsCiphers = _strdup(val);
+                       return settings->AllowedTlsCiphers != NULL;
+
+               case FreeRDP_NtlmSamFile:
+                       free(settings->NtlmSamFile);
+                       settings->NtlmSamFile = _strdup(val);
+                       return settings->NtlmSamFile != NULL;
+
+               case FreeRDP_PreconnectionBlob:
+                       free(settings->PreconnectionBlob);
+                       settings->PreconnectionBlob = _strdup(val);
+                       return settings->PreconnectionBlob != NULL;
+
+               case FreeRDP_TargetNetAddress:
+                       free(settings->TargetNetAddress);
+                       settings->TargetNetAddress = _strdup(val);
+                       return settings->TargetNetAddress != NULL;
+
+               case FreeRDP_RedirectionUsername:
+                       free(settings->RedirectionUsername);
+                       settings->RedirectionUsername = _strdup(val);
+                       return settings->RedirectionUsername != NULL;
+
+               case FreeRDP_RedirectionDomain:
+                       free(settings->RedirectionDomain);
+                       settings->RedirectionDomain = _strdup(val);
+                       return settings->RedirectionDomain != NULL;
+
+               case FreeRDP_RedirectionTargetFQDN:
+                       free(settings->RedirectionTargetFQDN);
+                       settings->RedirectionTargetFQDN = _strdup(val);
+                       return settings->RedirectionTargetFQDN != NULL;
+
+               case FreeRDP_RedirectionTargetNetBiosName:
+                       free(settings->RedirectionTargetNetBiosName);
+                       settings->RedirectionTargetNetBiosName = _strdup(val);
+                       return settings->RedirectionTargetNetBiosName != NULL;
+
+               case FreeRDP_RedirectionAcceptedCert:
+                       free(settings->RedirectionAcceptedCert);
+                       settings->RedirectionAcceptedCert = _strdup(val);
+                       return settings->RedirectionAcceptedCert != NULL;
+
+               case FreeRDP_KerberosKdc:
+                       free(settings->KerberosKdc);
+                       settings->KerberosKdc = _strdup(val);
+                       return settings->KerberosKdc != NULL;
+
+               case FreeRDP_KerberosRealm:
+                       free(settings->KerberosRealm);
+                       settings->KerberosRealm = _strdup(val);
+                       return settings->KerberosRealm != NULL;
+
+               case FreeRDP_CertificateName:
+                       free(settings->CertificateName);
+                       settings->CertificateName = _strdup(val);
+                       return settings->CertificateName != NULL;
+
+               case FreeRDP_CertificateFile:
+                       free(settings->CertificateFile);
+                       settings->CertificateFile = _strdup(val);
+                       return settings->CertificateFile != NULL;
+
+               case FreeRDP_PrivateKeyFile:
+                       free(settings->PrivateKeyFile);
+                       settings->PrivateKeyFile = _strdup(val);
+                       return settings->PrivateKeyFile != NULL;
+
+               case FreeRDP_RdpKeyFile:
+                       free(settings->RdpKeyFile);
+                       settings->RdpKeyFile = _strdup(val);
+                       return settings->RdpKeyFile != NULL;
+
+               case FreeRDP_CertificateContent:
+                       free(settings->CertificateContent);
+                       settings->CertificateContent = _strdup(val);
+                       return settings->CertificateContent != NULL;
+
+               case FreeRDP_PrivateKeyContent:
+                       free(settings->PrivateKeyContent);
+                       settings->PrivateKeyContent = _strdup(val);
+                       return settings->PrivateKeyContent != NULL;
+
+               case FreeRDP_RdpKeyContent:
+                       free(settings->RdpKeyContent);
+                       settings->RdpKeyContent = _strdup(val);
+                       return settings->RdpKeyContent != NULL;
+
+               case FreeRDP_WindowTitle:
+                       free(settings->WindowTitle);
+                       settings->WindowTitle = _strdup(val);
+                       return settings->WindowTitle != NULL;
+
+               case FreeRDP_WmClass:
+                       free(settings->WmClass);
+                       settings->WmClass = _strdup(val);
+                       return settings->WmClass != NULL;
+
+               case FreeRDP_ComputerName:
+                       free(settings->ComputerName);
+                       settings->ComputerName = _strdup(val);
+                       return settings->ComputerName != NULL;
+
+               case FreeRDP_ConnectionFile:
+                       free(settings->ConnectionFile);
+                       settings->ConnectionFile = _strdup(val);
+                       return settings->ConnectionFile != NULL;
+
+               case FreeRDP_AssistanceFile:
+                       free(settings->AssistanceFile);
+                       settings->AssistanceFile = _strdup(val);
+                       return settings->AssistanceFile != NULL;
+
+               case FreeRDP_HomePath:
+                       free(settings->HomePath);
+                       settings->HomePath = _strdup(val);
+                       return settings->HomePath != NULL;
+
+               case FreeRDP_ConfigPath:
+                       free(settings->ConfigPath);
+                       settings->ConfigPath = _strdup(val);
+                       return settings->ConfigPath != NULL;
+
+               case FreeRDP_CurrentPath:
+                       free(settings->CurrentPath);
+                       settings->CurrentPath = _strdup(val);
+                       return settings->CurrentPath != NULL;
+
+               case FreeRDP_DumpRemoteFxFile:
+                       free(settings->DumpRemoteFxFile);
+                       settings->DumpRemoteFxFile = _strdup(val);
+                       return settings->DumpRemoteFxFile != NULL;
+
+               case FreeRDP_PlayRemoteFxFile:
+                       free(settings->PlayRemoteFxFile);
+                       settings->PlayRemoteFxFile = _strdup(val);
+                       return settings->PlayRemoteFxFile != NULL;
+
+               case FreeRDP_GatewayHostname:
+                       free(settings->GatewayHostname);
+                       settings->GatewayHostname = _strdup(val);
+                       return settings->GatewayHostname != NULL;
+
+               case FreeRDP_GatewayUsername:
+                       free(settings->GatewayUsername);
+                       settings->GatewayUsername = _strdup(val);
+                       return settings->GatewayUsername != NULL;
+
+               case FreeRDP_GatewayPassword:
+                       free(settings->GatewayPassword);
+                       settings->GatewayPassword = _strdup(val);
+                       return settings->GatewayPassword != NULL;
+
+               case FreeRDP_GatewayDomain:
+                       free(settings->GatewayDomain);
+                       settings->GatewayDomain = _strdup(val);
+                       return settings->GatewayDomain != NULL;
+
+               case FreeRDP_GatewayAccessToken:
+                       free(settings->GatewayAccessToken);
+                       settings->GatewayAccessToken = _strdup(val);
+                       return settings->GatewayAccessToken != NULL;
+
+               case FreeRDP_GatewayAcceptedCert:
+                       free(settings->GatewayAcceptedCert);
+                       settings->GatewayAcceptedCert = _strdup(val);
+                       return settings->GatewayAcceptedCert != NULL;
+
+               case FreeRDP_ProxyHostname:
+                       free(settings->ProxyHostname);
+                       settings->ProxyHostname = _strdup(val);
+                       return settings->ProxyHostname != NULL;
+
+               case FreeRDP_ProxyUsername:
+                       free(settings->ProxyUsername);
+                       settings->ProxyUsername = _strdup(val);
+                       return settings->ProxyUsername != NULL;
+
+               case FreeRDP_ProxyPassword:
+                       free(settings->ProxyPassword);
+                       settings->ProxyPassword = _strdup(val);
+                       return settings->ProxyPassword != NULL;
+
+               case FreeRDP_RemoteApplicationName:
+                       free(settings->RemoteApplicationName);
+                       settings->RemoteApplicationName = _strdup(val);
+                       return settings->RemoteApplicationName != NULL;
+
+               case FreeRDP_RemoteApplicationIcon:
+                       free(settings->RemoteApplicationIcon);
+                       settings->RemoteApplicationIcon = _strdup(val);
+                       return settings->RemoteApplicationIcon != NULL;
+
+               case FreeRDP_RemoteApplicationProgram:
+                       free(settings->RemoteApplicationProgram);
+                       settings->RemoteApplicationProgram = _strdup(val);
+                       return settings->RemoteApplicationProgram != NULL;
+
+               case FreeRDP_RemoteApplicationFile:
+                       free(settings->RemoteApplicationFile);
+                       settings->RemoteApplicationFile = _strdup(val);
+                       return settings->RemoteApplicationFile != NULL;
+
+               case FreeRDP_RemoteApplicationGuid:
+                       free(settings->RemoteApplicationGuid);
+                       settings->RemoteApplicationGuid = _strdup(val);
+                       return settings->RemoteApplicationGuid != NULL;
+
+               case FreeRDP_RemoteApplicationCmdLine:
+                       free(settings->RemoteApplicationCmdLine);
+                       settings->RemoteApplicationCmdLine = _strdup(val);
+                       return settings->RemoteApplicationCmdLine != NULL;
+
+               case FreeRDP_ImeFileName:
+                       free(settings->ImeFileName);
+                       settings->ImeFileName = _strdup(val);
+                       return settings->ImeFileName != NULL;
+
+               case FreeRDP_DrivesToRedirect:
+                       free(settings->DrivesToRedirect);
+                       settings->DrivesToRedirect = _strdup(val);
+                       return settings->DrivesToRedirect != NULL;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+
+       return TRUE;
+}
+
+const void* freerdp_get_param_pointer(rdpSettings* settings, size_t id)
+{
+       if (!settings)
+               return FALSE;
+
+       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_StaticChannelArray:
+                       return settings->StaticChannelArray;
+
+               case FreeRDP_DynamicChannelArray:
+                       return settings->DynamicChannelArray;
+
+               case FreeRDP_DeviceArray:
+                       return settings->DeviceArray;
+
+               case FreeRDP_GlyphCache:
+                       return settings->GlyphCache;
+
+               case FreeRDP_FragCache:
+                       return settings->FragCache;
+
+               case FreeRDP_ClientTimeZone:
+                       return settings->ClientTimeZone;
+
+               case FreeRDP_ServerRandom:
+                       return settings->ServerRandom;
+
+               case FreeRDP_ServerCertificate:
+                       return settings->ServerCertificate;
+
+               case FreeRDP_ClientRandom:
+                       return settings->ClientRandom;
+
+               case FreeRDP_LoadBalanceInfo:
+                       return settings->LoadBalanceInfo;
+
+               case FreeRDP_RedirectionPassword:
+                       return settings->RedirectionPassword;
+
+               case FreeRDP_RedirectionTsvUrl:
+                       return settings->RedirectionTsvUrl;
+
+               case FreeRDP_Password51:
+                       return settings->Password51;
+
+               case FreeRDP_ReceivedCapabilities:
+                       return settings->ReceivedCapabilities;
+
+               case FreeRDP_OrderSupport:
+                       return settings->OrderSupport;
+
+               default:
+                       WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);
+                       return FALSE;
+       }
+}
+
+
index ebfc15f..0cef4bd 100644 (file)
@@ -1,7 +1,10 @@
 #include <freerdp/settings.h>
+#include "settings_property_lists.h"
 
 int TestSettings(int argc, char* argv[])
 {
+       int rc = -1;
+       size_t x;
        rdpSettings* settings = NULL;
        rdpSettings* cloned;
        WINPR_UNUSED(argc);
@@ -25,8 +28,120 @@ int TestSettings(int argc, char* argv[])
                return -1;
        }
 
+#if defined(have_bool_list_indices)
+
+       for (x = 0; x < ARRAYSIZE(bool_list_indices); x++)
+       {
+               const size_t key = bool_list_indices[x];
+               const BOOL val = freerdp_get_param_bool(settings, key);
+
+               if (!freerdp_set_param_bool(settings, key, val))
+                       goto fail;
+       }
+
+#endif
+#if defined(have_int16_list_indices)
+
+       for (x = 0; x < ARRAYSIZE(int16_list_indices); x++)
+       {
+               const size_t key = int16_list_indices[x];
+               const INT16 val = freerdp_get_param_int16(settings, key);
+
+               if (!freerdp_set_param_int16(settings, key, val))
+                       goto fail;
+       }
+
+#endif
+#if defined(have_uint16_list_indices)
+
+       for (x = 0; x < ARRAYSIZE(uint16_list_indices); x++)
+       {
+               const size_t key = uint16_list_indices[x];
+               const UINT16 val = freerdp_get_param_uint16(settings, key);
+
+               if (!freerdp_set_param_uint16(settings, key, val))
+                       goto fail;
+       }
+
+#endif
+#if defined(have_uint32_list_indices)
+
+       for (x = 0; x < ARRAYSIZE(uint32_list_indices); x++)
+       {
+               const size_t key = uint32_list_indices[x];
+               const UINT32 val = freerdp_get_param_uint32(settings, key);
+
+               if (!freerdp_set_param_uint32(settings, key, val))
+                       goto fail;
+       }
+
+#endif
+#if defined(have_int32_list_indices)
+
+       for (x = 0; x < ARRAYSIZE(int32_list_indices); x++)
+       {
+               const size_t key = int32_list_indices[x];
+               const INT32 val = freerdp_get_param_int32(settings, key);
+
+               if (!freerdp_set_param_int32(settings, key, val))
+                       goto fail;
+       }
+
+#endif
+#if defined(have_uint64_list_indices)
+
+       for (x = 0; x < ARRAYSIZE(uint64_list_indices); x++)
+       {
+               const size_t key = uint64_list_indices[x];
+               const UINT64 val = freerdp_get_param_uint64(settings, key);
+
+               if (!freerdp_set_param_uint64(settings, key, val))
+                       goto fail;
+       }
+
+#endif
+#if defined(have_int64_list_indices)
+
+       for (x = 0; x < ARRAYSIZE(int64_list_indices); x++)
+       {
+               const size_t key = int64_list_indices[x];
+               const INT64 val = freerdp_get_param_int64(settings, key);
+
+               if (!freerdp_set_param_int64(settings, key, val))
+                       goto fail;
+       }
+
+#endif
+#if defined(have_string_list_indices)
+
+       for (x = 0; x < ARRAYSIZE(string_list_indices); x++)
+       {
+               const size_t key = string_list_indices[x];
+               const char* val = "test-string";
+               const char* res;
+
+               if (!freerdp_set_param_string(settings, key, val))
+                       goto fail;
+
+               res = freerdp_get_param_string(settings, key);
+               if (strncmp(val, res, sizeof(val)) != 0)
+                       goto fail;
+       }
+
+#endif
+#if defined(have_pointer_list_indices)
+
+       for (x = 0; x < ARRAYSIZE(pointer_list_indices); x++)
+       {
+               const size_t key = pointer_list_indices[x];
+               const void* val = freerdp_get_param_pointer(settings, key);
+       }
+
+#endif
+       rc = 0;
+fail:
        freerdp_settings_free(cloned);
        freerdp_settings_free(settings);
-       return 0;
+       return rc;
 }
 
diff --git a/libfreerdp/core/test/settings_property_lists.h b/libfreerdp/core/test/settings_property_lists.h
new file mode 100644 (file)
index 0000000..648b606
--- /dev/null
@@ -0,0 +1,397 @@
+#ifndef TEST_SETTINGS_PROPERTY_LISTS
+#define TEST_SETTINGS_PROPERTY_LISTS
+
+#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_AutoLogonEnabled,
+       FreeRDP_CompressionEnabled,
+       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_DisableFullWindowDrag,
+       FreeRDP_DisableMenuAnims,
+       FreeRDP_DisableThemes,
+       FreeRDP_DisableCursorShadow,
+       FreeRDP_DisableCursorBlinking,
+       FreeRDP_AllowDesktopComposition,
+       FreeRDP_RemoteAssistanceMode,
+       FreeRDP_EncomspVirtualChannel,
+       FreeRDP_RemdeskVirtualChannel,
+       FreeRDP_LyncRdpMode,
+       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_IgnoreCertificate,
+       FreeRDP_ExternalCertificateManagement,
+       FreeRDP_AutoAcceptCertificate,
+       FreeRDP_AutoDenyCertificate,
+       FreeRDP_Workarea,
+       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_GatewayHttpTransport,
+       FreeRDP_GatewayUdpTransport,
+       FreeRDP_RemoteApplicationMode,
+       FreeRDP_DisableRemoteAppCapsCheck,
+       FreeRDP_RemoteAppLanguageBarSupported,
+       FreeRDP_RefreshRect,
+       FreeRDP_SuppressOutput,
+       FreeRDP_FastPathOutput,
+       FreeRDP_SaltedChecksum,
+       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_MultiTouchGestures,
+       FreeRDP_HasHorizontalWheel,
+       FreeRDP_HasExtendedMouseEvent,
+       FreeRDP_SoundBeepsEnabled,
+       FreeRDP_SurfaceCommandsEnabled,
+       FreeRDP_FrameMarkerCommandEnabled,
+       FreeRDP_SurfaceFrameMarkerEnabled,
+       FreeRDP_RemoteFxOnly,
+       FreeRDP_RemoteFxCodec,
+       FreeRDP_RemoteFxImageCodec,
+       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_RedirectDrives,
+       FreeRDP_RedirectHomeDrive,
+       FreeRDP_RedirectSmartCards,
+       FreeRDP_RedirectPrinters,
+       FreeRDP_RedirectSerialPorts,
+       FreeRDP_RedirectParallelPorts,
+       FreeRDP_PreferIPv6OverIPv4,
+       FreeRDP_RedirectClipboard,
+       FreeRDP_SupportDynamicChannels,
+       FreeRDP_SupportEchoChannel,
+       FreeRDP_SupportDisplayControl,
+       FreeRDP_SupportGeometryTracking,
+       FreeRDP_SupportSSHAgentChannel,
+       FreeRDP_SupportVideoOptimized,
+};
+
+#define have_uint16_list_indices
+static const size_t uint16_list_indices[] =
+{
+       FreeRDP_DesktopOrientation,
+       FreeRDP_ProxyPort,
+};
+
+#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_ColorDepth,
+       FreeRDP_ConnectionType,
+       FreeRDP_ClientBuild,
+       FreeRDP_EarlyCapabilityFlags,
+       FreeRDP_DesktopPhysicalWidth,
+       FreeRDP_DesktopPhysicalHeight,
+       FreeRDP_DesktopScaleFactor,
+       FreeRDP_DeviceScaleFactor,
+       FreeRDP_EncryptionMethods,
+       FreeRDP_ExtEncryptionMethods,
+       FreeRDP_EncryptionLevel,
+       FreeRDP_ServerRandomLength,
+       FreeRDP_ServerCertificateLength,
+       FreeRDP_ClientRandomLength,
+       FreeRDP_ChannelCount,
+       FreeRDP_ChannelDefArraySize,
+       FreeRDP_ClusterInfoFlags,
+       FreeRDP_RedirectedSessionId,
+       FreeRDP_MonitorCount,
+       FreeRDP_MonitorDefArraySize,
+       FreeRDP_DesktopPosX,
+       FreeRDP_DesktopPosY,
+       FreeRDP_NumMonitorIds,
+       FreeRDP_MonitorLocalShiftX,
+       FreeRDP_MonitorLocalShiftY,
+       FreeRDP_MultitransportFlags,
+       FreeRDP_CompressionLevel,
+       FreeRDP_AutoReconnectMaxRetries,
+       FreeRDP_PerformanceFlags,
+       FreeRDP_RequestedProtocols,
+       FreeRDP_SelectedProtocol,
+       FreeRDP_NegotiationFlags,
+       FreeRDP_AuthenticationLevel,
+       FreeRDP_TlsSecLevel,
+       FreeRDP_CookieMaxLength,
+       FreeRDP_PreconnectionId,
+       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_RemoteApplicationExpandCmdLine,
+       FreeRDP_RemoteApplicationExpandWorkingDir,
+       FreeRDP_RemoteAppNumIconCaches,
+       FreeRDP_RemoteAppNumIconCacheEntries,
+       FreeRDP_RemoteWndSupportLevel,
+       FreeRDP_ReceivedCapabilitiesSize,
+       FreeRDP_OsMajorType,
+       FreeRDP_OsMinorType,
+       FreeRDP_BitmapCacheVersion,
+       FreeRDP_BitmapCacheV2NumCells,
+       FreeRDP_PointerCacheSize,
+       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_RemoteFxCodecId,
+       FreeRDP_RemoteFxCodecMode,
+       FreeRDP_RemoteFxCaptureFlags,
+       FreeRDP_NSCodecId,
+       FreeRDP_FrameAcknowledge,
+       FreeRDP_NSCodecColorLossLevel,
+       FreeRDP_JpegCodecId,
+       FreeRDP_JpegQuality,
+       FreeRDP_BitmapCacheV3CodecId,
+       FreeRDP_DrawNineGridCacheSize,
+       FreeRDP_DrawNineGridCacheEntries,
+       FreeRDP_DeviceCount,
+       FreeRDP_DeviceArraySize,
+       FreeRDP_StaticChannelCount,
+       FreeRDP_StaticChannelArraySize,
+       FreeRDP_DynamicChannelCount,
+       FreeRDP_DynamicChannelArraySize,
+};
+
+#define have_int32_list_indices
+static const size_t int32_list_indices[] =
+{
+       FreeRDP_XPan,
+       FreeRDP_YPan,
+};
+
+#define have_uint64_list_indices
+static const size_t uint64_list_indices[] =
+{
+       FreeRDP_ParentWindowId,
+};
+
+#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_AlternateShell,
+       FreeRDP_ShellWorkingDirectory,
+       FreeRDP_ClientAddress,
+       FreeRDP_ClientDir,
+       FreeRDP_DynamicDSTTimeZoneKeyName,
+       FreeRDP_RemoteAssistanceSessionId,
+       FreeRDP_RemoteAssistancePassStub,
+       FreeRDP_RemoteAssistancePassword,
+       FreeRDP_RemoteAssistanceRCTicket,
+       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_WindowTitle,
+       FreeRDP_WmClass,
+       FreeRDP_ComputerName,
+       FreeRDP_ConnectionFile,
+       FreeRDP_AssistanceFile,
+       FreeRDP_HomePath,
+       FreeRDP_ConfigPath,
+       FreeRDP_CurrentPath,
+       FreeRDP_DumpRemoteFxFile,
+       FreeRDP_PlayRemoteFxFile,
+       FreeRDP_GatewayHostname,
+       FreeRDP_GatewayUsername,
+       FreeRDP_GatewayPassword,
+       FreeRDP_GatewayDomain,
+       FreeRDP_GatewayAccessToken,
+       FreeRDP_GatewayAcceptedCert,
+       FreeRDP_ProxyHostname,
+       FreeRDP_ProxyUsername,
+       FreeRDP_ProxyPassword,
+       FreeRDP_RemoteApplicationName,
+       FreeRDP_RemoteApplicationIcon,
+       FreeRDP_RemoteApplicationProgram,
+       FreeRDP_RemoteApplicationFile,
+       FreeRDP_RemoteApplicationGuid,
+       FreeRDP_RemoteApplicationCmdLine,
+       FreeRDP_ImeFileName,
+       FreeRDP_DrivesToRedirect,
+};
+
+#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_ClientRandom,
+       FreeRDP_LoadBalanceInfo,
+       FreeRDP_RedirectionPassword,
+       FreeRDP_RedirectionTsvUrl,
+       FreeRDP_Password51,
+       FreeRDP_ReceivedCapabilities,
+       FreeRDP_OrderSupport,
+       FreeRDP_RdpServerRsaKey,
+       FreeRDP_GlyphCache,
+       FreeRDP_FragCache,
+       FreeRDP_ClientTimeZone,
+       FreeRDP_ChannelDefArray,
+};
+
+#endif /* TEST_SETTINGS_PROPERTY_LISTS */
+
diff --git a/scripts/update-settings-tests b/scripts/update-settings-tests
new file mode 100755 (executable)
index 0000000..7be477c
--- /dev/null
@@ -0,0 +1,187 @@
+#!/usr/bin/env python
+import os
+import sys
+
+def get_values(entry_dict, entry_type):
+    values = []
+    if '*' == entry_type:
+        for key in entry_dict.keys():
+            if entry_type in key:
+                values += entry_dict[key]
+                entry_dict.pop(key, None)
+    elif entry_type in entry_dict:
+        values = entry_dict[entry_type]
+        entry_dict.pop(entry_type, None)
+    return values
+
+def write_entry(f, entry_dict, entry_type, entry_name):
+    values = get_values(entry_dict, entry_type)
+    if not values:
+        return
+
+    f.write('#define have_' + entry_name.lower() + '_list_indices\n')
+    f.write('static const size_t ' + entry_name.lower() + '_list_indices[] =\n')
+    f.write('{\n')
+
+    for val in values:
+        f.write('\tFreeRDP_' + val + ',\n')
+
+    f.write('};\n\n')
+
+def write_getter_case(f, val):
+    f.write('\t\tcase FreeRDP_' + val + ':\n')
+    f.write('\t\t\treturn settings->' + val + ';\n\n')
+
+def write_getter(f, entry_dict, entry_type, entry_name):
+    isString = 'string' in entry_name
+    isPointer = 'pointer' in entry_name
+    values = get_values(entry_dict, entry_type)
+
+    if isPointer:
+        f.write('const void*')
+    elif isString:
+        f.write('const ' + entry_type)
+    else:
+        f.write(entry_type)
+    f.write(' freerdp_get_param_' + entry_name.lower() + '(rdpSettings* settings, size_t id)\n')
+    f.write('{\n')
+    f.write('\tif (!settings)\n')
+    f.write('\t\treturn FALSE;\n\n')
+    f.write('\tswitch (id)\n')
+    f.write('\t{\n')
+    if values:
+        for val in values:
+            write_getter_case(f, val)
+    f.write('\t\tdefault:\n')
+    f.write('\t\t\tWLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);\n')
+    f.write('\t\t\treturn FALSE;\n')
+    f.write('\t}\n')
+    f.write('}\n\n')
+
+def write_setter_case(f, val, isString, isPointer):
+    f.write('\t\tcase FreeRDP_' + val + ':\n')
+    if not isString:
+        f.write('\t\t\tsettings->' + val + ' = val;\n')
+        f.write('\t\t\tbreak;\n\n')
+    else:
+        f.write('\t\t\tfree(settings->' + val + ');\n')
+        f.write('\t\t\tsettings->' + val + ' = _strdup(val);\n')
+        f.write('\t\t\treturn settings->' + val + ' != NULL;\n\n')
+
+def write_setter(f, entry_dict, entry_type, entry_name):
+    isString = 'string' in entry_name
+    isPointer = 'pointer' in entry_name
+    values = get_values(entry_dict, entry_type)
+
+    f.write('BOOL freerdp_set_param_' + entry_name.lower() + '(rdpSettings* settings, size_t id, ')
+    if isString or isPointer:
+        f.write('const ')
+    if not isPointer:
+        f.write(entry_type + ' val)\n')
+    else:
+        f.write('void* val)\n')
+    f.write('{\n')
+    f.write('\tif (!settings)\n')
+    f.write('\t\treturn FALSE;\n\n')
+    f.write('\tswitch (id)\n')
+    f.write('\t{\n')
+    if values:
+        for val in values:
+            write_setter_case(f, val, isString, isPointer)
+    f.write('\t\tdefault:\n')
+    f.write('\t\t\tWLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__,  id);\n')
+    f.write('\t\t\treturn FALSE;\n')
+    f.write('\t}\n')
+    f.write('\treturn TRUE;\n')
+    f.write('}\n\n')
+
+name = os.path.dirname(os.path.realpath(__file__))
+begin = "WARNING: this data structure is carefully padded for ABI stability!"
+end = "WARNING: End of ABI stable zone!"
+
+print('begin parsing settings header')
+try:
+    type_list = dict()
+
+    with open(name + "/../include/freerdp/settings.h", "rb") as f:
+        lines = f.readlines()
+        started = False
+        for line in lines:
+            if not started:
+                if begin in line:
+                    started = True
+                continue
+
+            if end in line:
+                break
+
+            sline = line.strip()
+            if not sline:
+                continue
+            if sline.startswith('/'):
+                continue
+            if sline.startswith('*'):
+                continue
+            if 'padding' in sline:
+                continue
+
+            if sline.startswith('ALIGN64'):
+                sline = sline[7:].strip()
+
+            sline = sline[:sline.find(';')]
+            pair = sline.split()
+            if pair[0] in type_list:
+                type_list[pair[0]].append(pair[1])
+            else:
+                type_list[pair[0]] = [pair[1]]
+
+    with open(name + '/../libfreerdp/common/settings_getters.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)
+        setter_list = dict(type_list)
+        write_getter(f, getter_list, 'BOOL', 'bool')
+        write_setter(f, setter_list, 'BOOL', 'bool')
+        write_getter(f, getter_list, 'UINT16', 'uint16')
+        write_setter(f, setter_list, 'UINT16', 'uint16')
+        write_getter(f, getter_list, 'INT16', 'int16')
+        write_setter(f, setter_list, 'INT16', 'int16')
+        write_getter(f, getter_list, 'UINT32', 'uint32')
+        write_setter(f, setter_list, 'UINT32', 'uint32')
+        write_getter(f, getter_list, 'INT32', 'int32')
+        write_setter(f, setter_list, 'INT32', 'int32')
+        write_getter(f, getter_list, 'UINT64', 'uint64')
+        write_setter(f, setter_list, 'UINT64', 'uint64')
+        write_getter(f, getter_list, 'INT64', 'int64')
+        write_setter(f, setter_list, 'INT64', 'int64')
+        write_getter(f, getter_list, 'char*', 'string')
+        write_setter(f, setter_list, 'char*', 'string')
+        write_getter(f, getter_list, '*', 'pointer')
+#        write_setter(f, setter_list, '*', 'pointer')
+
+        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')
+
+        write_entry(f, type_list, 'BOOL', 'bool')
+        write_entry(f, type_list, 'UINT16', 'uint16')
+        write_entry(f, type_list, 'INT16', 'int16')
+        write_entry(f, type_list, 'UINT32', 'uint32')
+        write_entry(f, type_list, 'INT32', 'int32')
+        write_entry(f, type_list, 'UINT64', 'uint64')
+        write_entry(f, type_list, 'INT64', 'int64')
+        write_entry(f, type_list, 'char*', 'string')
+        write_entry(f, type_list, '*', 'pointer')
+
+        f.write('#endif /* TEST_SETTINGS_PROPERTY_LISTS */\n\n')
+
+        print('remaining:\n' + str(type_list))
+except IOError as e:
+    print('failed to parse settings header ' + str(e))
+    sys.exit(-1)
+print('ended parsing settings header')