From 970d8d2260104ad886adbd33c99eee04937a25ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Wed, 16 Oct 2013 22:55:51 -0400 Subject: [PATCH] libfreerdp-core: add freerdp_settings_clone --- client/common/file.c | 2 +- include/freerdp/settings.h | 3 +- libfreerdp/common/settings.c | 12 +- libfreerdp/core/settings.c | 330 ++++++++++++++++++++++++++++++++++- 4 files changed, 335 insertions(+), 12 deletions(-) diff --git a/client/common/file.c b/client/common/file.c index 4cd2d6ba3..35b0b1341 100644 --- a/client/common/file.c +++ b/client/common/file.c @@ -525,7 +525,7 @@ BOOL freerdp_client_parse_rdp_file(rdpFile* file, const char* name) } #define WRITE_ALL_SETTINGS TRUE -#define SETTING_MODIFIED(_settings, _field) (WRITE_ALL_SETTINGS || _settings->settings_modified[FreeRDP_##_field]) +#define SETTING_MODIFIED(_settings, _field) (WRITE_ALL_SETTINGS || _settings->SettingsModified[FreeRDP_##_field]) #define SETTING_MODIFIED_SET(_target, _settings, _field) if SETTING_MODIFIED(_settings, _field) _target = _settings->_field BOOL freerdp_client_populate_rdp_file_from_settings(rdpFile* file, rdpSettings* settings) diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 19772bf73..dbd8ad6d1 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -1291,7 +1291,7 @@ struct rdp_settings ALIGN64 int num_extensions; /* */ ALIGN64 struct rdp_ext_set extensions[16]; /* */ - ALIGN64 BYTE* settings_modified; /* byte array marking fields that have been modified from their default value */ + ALIGN64 BYTE* SettingsModified; /* byte array marking fields that have been modified from their default value */ }; typedef struct rdp_settings rdpSettings; @@ -1305,6 +1305,7 @@ extern "C" { #define FREERDP_SETTINGS_SERVER_MODE 0x00000001 FREERDP_API rdpSettings* freerdp_settings_new(DWORD flags); +FREERDP_API rdpSettings* freerdp_settings_clone(rdpSettings* settings); FREERDP_API void freerdp_settings_free(rdpSettings* settings); FREERDP_API int freerdp_addin_set_argument(ADDIN_ARGV* args, char* argument); diff --git a/libfreerdp/common/settings.c b/libfreerdp/common/settings.c index b1181937a..90af694c8 100644 --- a/libfreerdp/common/settings.c +++ b/libfreerdp/common/settings.c @@ -1258,7 +1258,7 @@ int freerdp_set_param_bool(rdpSettings* settings, int id, BOOL param) } /* Mark field as modified */ - settings->settings_modified[id] = 1; + settings->SettingsModified[id] = 1; return -1; } @@ -1300,7 +1300,7 @@ int freerdp_set_param_int(rdpSettings* settings, int id, int param) break; } - settings->settings_modified[id] = 1; + settings->SettingsModified[id] = 1; return 0; } @@ -1943,7 +1943,7 @@ int freerdp_set_param_uint32(rdpSettings* settings, int id, UINT32 param) } /* Mark field as modified */ - settings->settings_modified[id] = 1; + settings->SettingsModified[id] = 1; return 0; } @@ -1978,7 +1978,7 @@ int freerdp_set_param_uint64(rdpSettings* settings, int id, UINT64 param) } /* Mark field as modified */ - settings->settings_modified[id] = 1; + settings->SettingsModified[id] = 1; return 0; } @@ -2309,7 +2309,7 @@ int freerdp_set_param_string(rdpSettings* settings, int id, const char* param) } /* Mark field as modified */ - settings->settings_modified[id] = 1; + settings->SettingsModified[id] = 1; return 0; } @@ -2344,7 +2344,7 @@ int freerdp_set_param_double(rdpSettings* settings, int id, double param) } /* Mark field as modified */ - settings->settings_modified[id] = 1; + settings->SettingsModified[id] = 1; return 0; } diff --git a/libfreerdp/core/settings.c b/libfreerdp/core/settings.c index ae5351583..972519d57 100644 --- a/libfreerdp/core/settings.c +++ b/libfreerdp/core/settings.c @@ -416,16 +416,338 @@ rdpSettings* freerdp_settings_new(DWORD flags) settings_load_hkey_local_machine(settings); - settings->settings_modified = (BYTE*) malloc(sizeof(rdpSettings) / 8 ); - ZeroMemory(settings->settings_modified, sizeof(rdpSettings) / 8); + settings->SettingsModified = (BYTE*) malloc(sizeof(rdpSettings) / 8 ); + ZeroMemory(settings->SettingsModified, sizeof(rdpSettings) / 8); } return settings; } +rdpSettings* freerdp_settings_clone(rdpSettings* settings) +{ + rdpSettings* _settings; + + _settings = (rdpSettings*) malloc(sizeof(rdpSettings)); + + if (_settings) + { + ZeroMemory(_settings, sizeof(rdpSettings)); + + /** + * Generated Code + */ + + /* char* values */ + + _settings->ServerHostname = _strdup(settings->ServerHostname); /* 20 */ + _settings->Username = _strdup(settings->Username); /* 21 */ + _settings->Password = _strdup(settings->Password); /* 22 */ + _settings->Domain = _strdup(settings->Domain); /* 23 */ + _settings->ClientHostname = _strdup(settings->ClientHostname); /* 134 */ + _settings->ClientProductId = _strdup(settings->ClientProductId); /* 135 */ + _settings->AlternateShell = _strdup(settings->AlternateShell); /* 640 */ + _settings->ShellWorkingDirectory = _strdup(settings->ShellWorkingDirectory); /* 641 */ + _settings->ClientAddress = _strdup(settings->ClientAddress); /* 769 */ + _settings->ClientDir = _strdup(settings->ClientDir); /* 770 */ + _settings->DynamicDSTTimeZoneKeyName = _strdup(settings->DynamicDSTTimeZoneKeyName); /* 897 */ + _settings->PreconnectionBlob = _strdup(settings->PreconnectionBlob); /* 1155 */ + _settings->KerberosKdc = _strdup(settings->KerberosKdc); /* 1344 */ + _settings->KerberosRealm = _strdup(settings->KerberosRealm); /* 1345 */ + _settings->CertificateName = _strdup(settings->CertificateName); /* 1409 */ + _settings->CertificateFile = _strdup(settings->CertificateFile); /* 1410 */ + _settings->PrivateKeyFile = _strdup(settings->PrivateKeyFile); /* 1411 */ + _settings->RdpKeyFile = _strdup(settings->RdpKeyFile); /* 1412 */ + _settings->WindowTitle = _strdup(settings->WindowTitle); /* 1542 */ + _settings->WmClass = _strdup(settings->WmClass); /* 1549 */ + _settings->ComputerName = _strdup(settings->ComputerName); /* 1664 */ + _settings->ConnectionFile = _strdup(settings->ConnectionFile); /* 1728 */ + _settings->HomePath = _strdup(settings->HomePath); /* 1792 */ + _settings->ConfigPath = _strdup(settings->ConfigPath); /* 1793 */ + _settings->CurrentPath = _strdup(settings->CurrentPath); /* 1794 */ + _settings->DumpRemoteFxFile = _strdup(settings->DumpRemoteFxFile); /* 1858 */ + _settings->PlayRemoteFxFile = _strdup(settings->PlayRemoteFxFile); /* 1859 */ + _settings->GatewayHostname = _strdup(settings->GatewayHostname); /* 1986 */ + _settings->GatewayUsername = _strdup(settings->GatewayUsername); /* 1987 */ + _settings->GatewayPassword = _strdup(settings->GatewayPassword); /* 1988 */ + _settings->GatewayDomain = _strdup(settings->GatewayDomain); /* 1989 */ + _settings->RemoteApplicationName = _strdup(settings->RemoteApplicationName); /* 2113 */ + _settings->RemoteApplicationIcon = _strdup(settings->RemoteApplicationIcon); /* 2114 */ + _settings->RemoteApplicationProgram = _strdup(settings->RemoteApplicationProgram); /* 2115 */ + _settings->RemoteApplicationFile = _strdup(settings->RemoteApplicationFile); /* 2116 */ + _settings->RemoteApplicationGuid = _strdup(settings->RemoteApplicationGuid); /* 2117 */ + _settings->RemoteApplicationCmdLine = _strdup(settings->RemoteApplicationCmdLine); /* 2118 */ + _settings->ImeFileName = _strdup(settings->ImeFileName); /* 2628 */ + _settings->DrivesToRedirect = _strdup(settings->DrivesToRedirect); /* 4290 */ + + /* UINT32 values */ + + _settings->ShareId = settings->ShareId; /* 17 */ + _settings->PduSource = settings->PduSource; /* 18 */ + _settings->ServerPort = settings->ServerPort; /* 19 */ + _settings->RdpVersion = settings->RdpVersion; /* 128 */ + _settings->DesktopWidth = settings->DesktopWidth; /* 129 */ + _settings->DesktopHeight = settings->DesktopHeight; /* 130 */ + _settings->ColorDepth = settings->ColorDepth; /* 131 */ + _settings->ConnectionType = settings->ConnectionType; /* 132 */ + _settings->ClientBuild = settings->ClientBuild; /* 133 */ + _settings->EarlyCapabilityFlags = settings->EarlyCapabilityFlags; /* 136 */ + _settings->EncryptionMethods = settings->EncryptionMethods; /* 193 */ + _settings->ExtEncryptionMethods = settings->ExtEncryptionMethods; /* 194 */ + _settings->EncryptionLevel = settings->EncryptionLevel; /* 195 */ + _settings->ServerRandomLength = settings->ServerRandomLength; /* 197 */ + _settings->ServerCertificateLength = settings->ServerCertificateLength; /* 199 */ + _settings->ChannelCount = settings->ChannelCount; /* 256 */ + _settings->ChannelDefArraySize = settings->ChannelDefArraySize; /* 257 */ + _settings->ClusterInfoFlags = settings->ClusterInfoFlags; /* 320 */ + _settings->RedirectedSessionId = settings->RedirectedSessionId; /* 321 */ + _settings->MonitorDefArraySize = settings->MonitorDefArraySize; /* 385 */ + _settings->DesktopPosX = settings->DesktopPosX; /* 390 */ + _settings->DesktopPosY = settings->DesktopPosY; /* 391 */ + _settings->NumMonitorIds = settings->NumMonitorIds; /* 394 */ + _settings->MultitransportFlags = settings->MultitransportFlags; /* 512 */ + _settings->AutoReconnectMaxRetries = settings->AutoReconnectMaxRetries; /* 833 */ + _settings->PerformanceFlags = settings->PerformanceFlags; /* 960 */ + _settings->RequestedProtocols = settings->RequestedProtocols; /* 1093 */ + _settings->SelectedProtocol = settings->SelectedProtocol; /* 1094 */ + _settings->NegotiationFlags = settings->NegotiationFlags; /* 1095 */ + _settings->CookieMaxLength = settings->CookieMaxLength; /* 1153 */ + _settings->PreconnectionId = settings->PreconnectionId; /* 1154 */ + _settings->RedirectionFlags = settings->RedirectionFlags; /* 1216 */ + _settings->LoadBalanceInfoLength = settings->LoadBalanceInfoLength; /* 1218 */ + _settings->RedirectionUsernameLength = settings->RedirectionUsernameLength; /* 1220 */ + _settings->RedirectionDomainLength = settings->RedirectionDomainLength; /* 1222 */ + _settings->RedirectionPasswordLength = settings->RedirectionPasswordLength; /* 1224 */ + _settings->RedirectionTargetFQDNLength = settings->RedirectionTargetFQDNLength; /* 1226 */ + _settings->RedirectionTargetNetBiosNameLength = settings->RedirectionTargetNetBiosNameLength; /* 1228 */ + _settings->RedirectionTsvUrlLength = settings->RedirectionTsvUrlLength; /* 1230 */ + _settings->TargetNetAddressCount = settings->TargetNetAddressCount; /* 1231 */ + _settings->Password51Length = settings->Password51Length; /* 1281 */ + _settings->PercentScreen = settings->PercentScreen; /* 1538 */ + _settings->GatewayUsageMethod = settings->GatewayUsageMethod; /* 1984 */ + _settings->GatewayPort = settings->GatewayPort; /* 1985 */ + _settings->GatewayCredentialsSource = settings->GatewayCredentialsSource; /* 1990 */ + _settings->RemoteApplicationExpandCmdLine = settings->RemoteApplicationExpandCmdLine; /* 2119 */ + _settings->RemoteApplicationExpandWorkingDir = settings->RemoteApplicationExpandWorkingDir; /* 2120 */ + _settings->RemoteAppNumIconCaches = settings->RemoteAppNumIconCaches; /* 2122 */ + _settings->RemoteAppNumIconCacheEntries = settings->RemoteAppNumIconCacheEntries; /* 2123 */ + _settings->ReceivedCapabilitiesSize = settings->ReceivedCapabilitiesSize; /* 2241 */ + _settings->OsMajorType = settings->OsMajorType; /* 2304 */ + _settings->OsMinorType = settings->OsMinorType; /* 2305 */ + _settings->BitmapCacheVersion = settings->BitmapCacheVersion; /* 2498 */ + _settings->BitmapCacheV2NumCells = settings->BitmapCacheV2NumCells; /* 2501 */ + _settings->PointerCacheSize = settings->PointerCacheSize; /* 2561 */ + _settings->KeyboardLayout = settings->KeyboardLayout; /* 2624 */ + _settings->KeyboardType = settings->KeyboardType; /* 2625 */ + _settings->KeyboardSubType = settings->KeyboardSubType; /* 2626 */ + _settings->KeyboardFunctionKey = settings->KeyboardFunctionKey; /* 2627 */ + _settings->BrushSupportLevel = settings->BrushSupportLevel; /* 2688 */ + _settings->GlyphSupportLevel = settings->GlyphSupportLevel; /* 2752 */ + _settings->OffscreenSupportLevel = settings->OffscreenSupportLevel; /* 2816 */ + _settings->OffscreenCacheSize = settings->OffscreenCacheSize; /* 2817 */ + _settings->OffscreenCacheEntries = settings->OffscreenCacheEntries; /* 2818 */ + _settings->VirtualChannelCompressionFlags = settings->VirtualChannelCompressionFlags; /* 2880 */ + _settings->VirtualChannelChunkSize = settings->VirtualChannelChunkSize; /* 2881 */ + _settings->MultifragMaxRequestSize = settings->MultifragMaxRequestSize; /* 3328 */ + _settings->LargePointerFlag = settings->LargePointerFlag; /* 3392 */ + _settings->CompDeskSupportLevel = settings->CompDeskSupportLevel; /* 3456 */ + _settings->RemoteFxCodecId = settings->RemoteFxCodecId; /* 3650 */ + _settings->RemoteFxCodecMode = settings->RemoteFxCodecMode; /* 3651 */ + _settings->RemoteFxCaptureFlags = settings->RemoteFxCaptureFlags; /* 3653 */ + _settings->NSCodecId = settings->NSCodecId; /* 3713 */ + _settings->FrameAcknowledge = settings->FrameAcknowledge; /* 3714 */ + _settings->JpegCodecId = settings->JpegCodecId; /* 3777 */ + _settings->JpegQuality = settings->JpegQuality; /* 3778 */ + _settings->BitmapCacheV3CodecId = settings->BitmapCacheV3CodecId; /* 3904 */ + _settings->DrawNineGridCacheSize = settings->DrawNineGridCacheSize; /* 3969 */ + _settings->DrawNineGridCacheEntries = settings->DrawNineGridCacheEntries; /* 3970 */ + _settings->DeviceCount = settings->DeviceCount; /* 4161 */ + _settings->DeviceArraySize = settings->DeviceArraySize; /* 4162 */ + _settings->StaticChannelCount = settings->StaticChannelCount; /* 4928 */ + _settings->StaticChannelArraySize = settings->StaticChannelArraySize; /* 4929 */ + _settings->DynamicChannelCount = settings->DynamicChannelCount; /* 5056 */ + _settings->DynamicChannelArraySize = settings->DynamicChannelArraySize; /* 5057 */ + + /* BOOL values */ + + _settings->ServerMode = settings->ServerMode; /* 16 */ + _settings->NetworkAutoDetect = settings->NetworkAutoDetect; /* 137 */ + _settings->SupportAsymetricKeys = settings->SupportAsymetricKeys; /* 138 */ + _settings->SupportErrorInfoPdu = settings->SupportErrorInfoPdu; /* 139 */ + _settings->SupportStatusInfoPdu = settings->SupportStatusInfoPdu; /* 140 */ + _settings->SupportMonitorLayoutPdu = settings->SupportMonitorLayoutPdu; /* 141 */ + _settings->SupportGraphicsPipeline = settings->SupportGraphicsPipeline; /* 142 */ + _settings->SupportDynamicTimeZone = settings->SupportDynamicTimeZone; /* 143 */ + _settings->DisableEncryption = settings->DisableEncryption; /* 192 */ + _settings->ConsoleSession = settings->ConsoleSession; /* 322 */ + _settings->SpanMonitors = settings->SpanMonitors; /* 387 */ + _settings->UseMultimon = settings->UseMultimon; /* 388 */ + _settings->ForceMultimon = settings->ForceMultimon; /* 389 */ + _settings->ListMonitors = settings->ListMonitors; /* 392 */ + _settings->AutoLogonEnabled = settings->AutoLogonEnabled; /* 704 */ + _settings->CompressionEnabled = settings->CompressionEnabled; /* 705 */ + _settings->DisableCtrlAltDel = settings->DisableCtrlAltDel; /* 706 */ + _settings->EnableWindowsKey = settings->EnableWindowsKey; /* 707 */ + _settings->MaximizeShell = settings->MaximizeShell; /* 708 */ + _settings->LogonNotify = settings->LogonNotify; /* 709 */ + _settings->LogonErrors = settings->LogonErrors; /* 710 */ + _settings->MouseAttached = settings->MouseAttached; /* 711 */ + _settings->MouseHasWheel = settings->MouseHasWheel; /* 712 */ + _settings->RemoteConsoleAudio = settings->RemoteConsoleAudio; /* 713 */ + _settings->AudioPlayback = settings->AudioPlayback; /* 714 */ + _settings->AudioCapture = settings->AudioCapture; /* 715 */ + _settings->VideoDisable = settings->VideoDisable; /* 716 */ + _settings->PasswordIsSmartcardPin = settings->PasswordIsSmartcardPin; /* 717 */ + _settings->UsingSavedCredentials = settings->UsingSavedCredentials; /* 718 */ + _settings->ForceEncryptedCsPdu = settings->ForceEncryptedCsPdu; /* 719 */ + _settings->HiDefRemoteApp = settings->HiDefRemoteApp; /* 720 */ + _settings->IPv6Enabled = settings->IPv6Enabled; /* 768 */ + _settings->AutoReconnectionEnabled = settings->AutoReconnectionEnabled; /* 832 */ + _settings->DynamicDaylightTimeDisabled = settings->DynamicDaylightTimeDisabled; /* 898 */ + _settings->AllowFontSmoothing = settings->AllowFontSmoothing; /* 961 */ + _settings->DisableWallpaper = settings->DisableWallpaper; /* 962 */ + _settings->DisableFullWindowDrag = settings->DisableFullWindowDrag; /* 963 */ + _settings->DisableMenuAnims = settings->DisableMenuAnims; /* 964 */ + _settings->DisableThemes = settings->DisableThemes; /* 965 */ + _settings->DisableCursorShadow = settings->DisableCursorShadow; /* 966 */ + _settings->DisableCursorBlinking = settings->DisableCursorBlinking; /* 967 */ + _settings->AllowDesktopComposition = settings->AllowDesktopComposition; /* 968 */ + _settings->TlsSecurity = settings->TlsSecurity; /* 1088 */ + _settings->NlaSecurity = settings->NlaSecurity; /* 1089 */ + _settings->RdpSecurity = settings->RdpSecurity; /* 1090 */ + _settings->ExtSecurity = settings->ExtSecurity; /* 1091 */ + _settings->Authentication = settings->Authentication; /* 1092 */ + _settings->NegotiateSecurityLayer = settings->NegotiateSecurityLayer; /* 1096 */ + _settings->MstscCookieMode = settings->MstscCookieMode; /* 1152 */ + _settings->SendPreconnectionPdu = settings->SendPreconnectionPdu; /* 1156 */ + _settings->IgnoreCertificate = settings->IgnoreCertificate; /* 1408 */ + _settings->Workarea = settings->Workarea; /* 1536 */ + _settings->Fullscreen = settings->Fullscreen; /* 1537 */ + _settings->GrabKeyboard = settings->GrabKeyboard; /* 1539 */ + _settings->Decorations = settings->Decorations; /* 1540 */ + _settings->MouseMotion = settings->MouseMotion; /* 1541 */ + _settings->AsyncInput = settings->AsyncInput; /* 1544 */ + _settings->AsyncUpdate = settings->AsyncUpdate; /* 1545 */ + _settings->AsyncChannels = settings->AsyncChannels; /* 1546 */ + _settings->AsyncTransport = settings->AsyncTransport; /* 1547 */ + _settings->ToggleFullscreen = settings->ToggleFullscreen; /* 1548 */ + _settings->EmbeddedWindow = settings->EmbeddedWindow; /* 1550 */ + _settings->SmartSizing = settings->SmartSizing; /* 1551 */ + _settings->SoftwareGdi = settings->SoftwareGdi; /* 1601 */ + _settings->LocalConnection = settings->LocalConnection; /* 1602 */ + _settings->AuthenticationOnly = settings->AuthenticationOnly; /* 1603 */ + _settings->CredentialsFromStdin = settings->CredentialsFromStdin; /* 1604 */ + _settings->DumpRemoteFx = settings->DumpRemoteFx; /* 1856 */ + _settings->PlayRemoteFx = settings->PlayRemoteFx; /* 1857 */ + _settings->GatewayUseSameCredentials = settings->GatewayUseSameCredentials; /* 1991 */ + _settings->GatewayEnabled = settings->GatewayEnabled; /* 1992 */ + _settings->RemoteApplicationMode = settings->RemoteApplicationMode; /* 2112 */ + _settings->DisableRemoteAppCapsCheck = settings->DisableRemoteAppCapsCheck; /* 2121 */ + _settings->RemoteAppLanguageBarSupported = settings->RemoteAppLanguageBarSupported; /* 2124 */ + _settings->RefreshRect = settings->RefreshRect; /* 2306 */ + _settings->SuppressOutput = settings->SuppressOutput; /* 2307 */ + _settings->FastPathOutput = settings->FastPathOutput; /* 2308 */ + _settings->SaltedChecksum = settings->SaltedChecksum; /* 2309 */ + _settings->LongCredentialsSupported = settings->LongCredentialsSupported; /* 2310 */ + _settings->NoBitmapCompressionHeader = settings->NoBitmapCompressionHeader; /* 2311 */ + _settings->BitmapCompressionDisabled = settings->BitmapCompressionDisabled; /* 2312 */ + _settings->DesktopResize = settings->DesktopResize; /* 2368 */ + _settings->DrawAllowDynamicColorFidelity = settings->DrawAllowDynamicColorFidelity; /* 2369 */ + _settings->DrawAllowColorSubsampling = settings->DrawAllowColorSubsampling; /* 2370 */ + _settings->DrawAllowSkipAlpha = settings->DrawAllowSkipAlpha; /* 2371 */ + _settings->BitmapCacheV3Enabled = settings->BitmapCacheV3Enabled; /* 2433 */ + _settings->AltSecFrameMarkerSupport = settings->AltSecFrameMarkerSupport; /* 2434 */ + _settings->BitmapCacheEnabled = settings->BitmapCacheEnabled; /* 2497 */ + _settings->AllowCacheWaitingList = settings->AllowCacheWaitingList; /* 2499 */ + _settings->BitmapCachePersistEnabled = settings->BitmapCachePersistEnabled; /* 2500 */ + _settings->ColorPointerFlag = settings->ColorPointerFlag; /* 2560 */ + _settings->UnicodeInput = settings->UnicodeInput; /* 2629 */ + _settings->FastPathInput = settings->FastPathInput; /* 2630 */ + _settings->MultiTouchInput = settings->MultiTouchInput; /* 2631 */ + _settings->MultiTouchGestures = settings->MultiTouchGestures; /* 2632 */ + _settings->SoundBeepsEnabled = settings->SoundBeepsEnabled; /* 2944 */ + _settings->SurfaceCommandsEnabled = settings->SurfaceCommandsEnabled; /* 3520 */ + _settings->FrameMarkerCommandEnabled = settings->FrameMarkerCommandEnabled; /* 3521 */ + _settings->RemoteFxOnly = settings->RemoteFxOnly; /* 3648 */ + _settings->RemoteFxCodec = settings->RemoteFxCodec; /* 3649 */ + _settings->RemoteFxImageCodec = settings->RemoteFxImageCodec; /* 3652 */ + _settings->NSCodec = settings->NSCodec; /* 3712 */ + _settings->JpegCodec = settings->JpegCodec; /* 3776 */ + _settings->DrawNineGridEnabled = settings->DrawNineGridEnabled; /* 3968 */ + _settings->DrawGdiPlusEnabled = settings->DrawGdiPlusEnabled; /* 4032 */ + _settings->DrawGdiPlusCacheEnabled = settings->DrawGdiPlusCacheEnabled; /* 4033 */ + _settings->DeviceRedirection = settings->DeviceRedirection; /* 4160 */ + _settings->RedirectDrives = settings->RedirectDrives; /* 4288 */ + _settings->RedirectHomeDrive = settings->RedirectHomeDrive; /* 4289 */ + _settings->RedirectSmartCards = settings->RedirectSmartCards; /* 4416 */ + _settings->RedirectPrinters = settings->RedirectPrinters; /* 4544 */ + _settings->RedirectSerialPorts = settings->RedirectSerialPorts; /* 4672 */ + _settings->RedirectParallelPorts = settings->RedirectParallelPorts; /* 4673 */ + _settings->RedirectClipboard = settings->RedirectClipboard; /* 4800 */ + + /** + * Manual Code + */ + + _settings->ChannelCount = settings->ChannelCount; + _settings->ChannelDefArraySize = settings->ChannelDefArraySize; + _settings->ChannelDefArray = (rdpChannel*) malloc(sizeof(rdpChannel) * settings->ChannelDefArraySize); + CopyMemory(_settings->ChannelDefArray, settings->ChannelDefArray, sizeof(rdpChannel) * settings->ChannelDefArraySize); + + _settings->MonitorCount = settings->MonitorCount; + _settings->MonitorDefArraySize = settings->MonitorDefArraySize; + _settings->MonitorDefArray = (rdpMonitor*) malloc(sizeof(rdpMonitor) * settings->MonitorDefArraySize); + CopyMemory(_settings->MonitorDefArray, settings->MonitorDefArray, sizeof(rdpMonitor) * settings->MonitorDefArraySize); + + _settings->ReceivedCapabilities = malloc(32); + _settings->OrderSupport = malloc(32); + CopyMemory(_settings->ReceivedCapabilities, settings->ReceivedCapabilities, 32); + CopyMemory(_settings->OrderSupport, settings->OrderSupport, 32); + + _settings->ClientHostname = malloc(32); + _settings->ClientProductId = malloc(32); + CopyMemory(_settings->ClientHostname, settings->ClientHostname, 32); + CopyMemory(_settings->ClientProductId, settings->ClientProductId, 32); + + _settings->BitmapCacheV2CellInfo = (BITMAP_CACHE_V2_CELL_INFO*) malloc(sizeof(BITMAP_CACHE_V2_CELL_INFO) * 6); + CopyMemory(_settings->BitmapCacheV2CellInfo, settings->BitmapCacheV2CellInfo, sizeof(BITMAP_CACHE_V2_CELL_INFO) * 6); + + _settings->GlyphCache = malloc(sizeof(GLYPH_CACHE_DEFINITION) * 10); + _settings->FragCache = malloc(sizeof(GLYPH_CACHE_DEFINITION)); + CopyMemory(_settings->GlyphCache, settings->GlyphCache, sizeof(GLYPH_CACHE_DEFINITION) * 10); + CopyMemory(_settings->FragCache, settings->FragCache, sizeof(GLYPH_CACHE_DEFINITION)); + + _settings->ClientAutoReconnectCookie = (ARC_CS_PRIVATE_PACKET*) malloc(sizeof(ARC_CS_PRIVATE_PACKET)); + _settings->ServerAutoReconnectCookie = (ARC_SC_PRIVATE_PACKET*) malloc(sizeof(ARC_SC_PRIVATE_PACKET)); + CopyMemory(_settings->ClientAutoReconnectCookie, settings->ClientAutoReconnectCookie, sizeof(ARC_CS_PRIVATE_PACKET)); + CopyMemory(_settings->ServerAutoReconnectCookie, settings->ServerAutoReconnectCookie, sizeof(ARC_SC_PRIVATE_PACKET)); + + _settings->ClientTimeZone = (TIME_ZONE_INFO*) malloc(sizeof(TIME_ZONE_INFO)); + CopyMemory(_settings->ClientTimeZone, _settings->ClientTimeZone, sizeof(TIME_ZONE_INFO)); + + _settings->DeviceArraySize = 16; + _settings->DeviceArray = (RDPDR_DEVICE**) malloc(sizeof(RDPDR_DEVICE*) * _settings->DeviceArraySize); + ZeroMemory(_settings->DeviceArray, sizeof(RDPDR_DEVICE*) * _settings->DeviceArraySize); + + _settings->StaticChannelArraySize = 16; + _settings->StaticChannelArray = (ADDIN_ARGV**) + malloc(sizeof(ADDIN_ARGV*) * _settings->StaticChannelArraySize); + ZeroMemory(_settings->StaticChannelArray, sizeof(ADDIN_ARGV*) * _settings->StaticChannelArraySize); + + _settings->DynamicChannelArraySize = 16; + _settings->DynamicChannelArray = (ADDIN_ARGV**) + malloc(sizeof(ADDIN_ARGV*) * _settings->DynamicChannelArraySize); + ZeroMemory(_settings->DynamicChannelArray, sizeof(ADDIN_ARGV*) * _settings->DynamicChannelArraySize); + + _settings->SettingsModified = (BYTE*) malloc(sizeof(rdpSettings) / 8); + ZeroMemory(_settings->SettingsModified, sizeof(rdpSettings) / 8); + } + + return _settings; +} + void freerdp_settings_free(rdpSettings* settings) { - if (settings != NULL) + if (settings) { free(settings->ServerHostname); free(settings->Username); @@ -462,7 +784,7 @@ void freerdp_settings_free(rdpSettings* settings) freerdp_device_collection_free(settings); freerdp_static_channel_collection_free(settings); freerdp_dynamic_channel_collection_free(settings); - free(settings->settings_modified); + free(settings->SettingsModified); free(settings); } }