Added python generator for freerdp_[g|s]et_param*

The settings getters and setters are now automatically generated.
Added a test case to check if all available options can be retrieved.
This commit is contained in:
Armin Novak
2019-03-21 13:08:59 +01:00
parent 50566c2171
commit abc93f924c
7 changed files with 3429 additions and 2063 deletions

View 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
}

View 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})

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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;
}

View File

@@ -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 */

187
scripts/update-settings-tests Executable file
View File

@@ -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')