summaryrefslogtreecommitdiff
path: root/src/rdp/rdp_settings.c
diff options
context:
space:
mode:
authorsss <sss@dark-alexandr.net>2023-01-17 00:38:19 +0300
committersss <sss@dark-alexandr.net>2023-01-17 00:38:19 +0300
commitcc3f33db7a8d3c4ad373e646b199808e01bc5d9b (patch)
treeec09d690c7656ab5f2cc72607e05fb359c24d8b2 /src/rdp/rdp_settings.c
added webrdp public code
Diffstat (limited to 'src/rdp/rdp_settings.c')
-rw-r--r--src/rdp/rdp_settings.c2278
1 files changed, 2278 insertions, 0 deletions
diff --git a/src/rdp/rdp_settings.c b/src/rdp/rdp_settings.c
new file mode 100644
index 0000000..ecb1dcc
--- /dev/null
+++ b/src/rdp/rdp_settings.c
@@ -0,0 +1,2278 @@
+/* BSD-2-Clause license
+ *
+ * Copyright (c) 2018-2023 NST <www.newinfosec.ru>, sss <sss at dark-alexandr dot net>.
+ *
+ */
+
+#include <stdbool.h>
+#include <stddef.h>
+
+#include <webrdp_module_api.h>
+#include <webrdp_core_api.h>
+
+#include "rdp_backend_api.h"
+#include "rdp_impl.h"
+
+/* this variable used in integer settng name field to indicate used setting */
+static const char *setting_used = "1";
+
+bool
+rdp_set_setting_str(backend_setting_str *setting, void *internals)
+{
+ rdp_internals *i = internals;
+#ifdef DEBUG
+ {
+ char buf[128];
+ snprintf(buf, 127,
+ "rdp backend handling setting string: \"%s: %s\"",
+ setting->name, setting->value);
+ i->core->api_utils->log_msg(
+ (const uint8_t *)buf, strlen(buf), wrdp_log_level_trace, 0);
+ }
+#endif /* DEBUG */
+ if (!strcmp(setting->name, "host"))
+ {
+ free(i->my_settings.host.value);
+ i->my_settings.host.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "pcb"))
+ {
+ /*
+ free (i->my_settings.pcb.value);
+ i->my_settings.pcb.value = strdup (setting->value); */
+ return true;
+ }
+ else if (!strcmp(setting->name, "user") && setting->value)
+ {
+ free(i->my_settings.user.value);
+ i->my_settings.user.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "password") && setting->value)
+ {
+ free(i->my_settings.password.value);
+ i->my_settings.password.value = strdup(setting->value);
+ return true;
+ }
+
+ /* handle int settings passed as strings */
+ if (!strcmp(setting->name, "port"))
+ {
+ i->my_settings.port.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.port.value = atoll(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "width"))
+ {
+ i->my_settings.width.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.width.value = atoll(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "height"))
+ {
+ i->my_settings.height.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.height.value = atoll(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "perf"))
+ {
+ i->my_settings.perf.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.perf.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "fntlm"))
+ {
+ i->my_settings.fntlm.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.fntlm.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "nowallp"))
+ {
+ i->my_settings.nowallp.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.nowallp.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "nowdrag"))
+ {
+ i->my_settings.nowdrag.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.nowdrag.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "nomani"))
+ {
+ i->my_settings.nomani.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.nomani.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "notheme"))
+ {
+ i->my_settings.notheme.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.notheme.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "nonla"))
+ {
+ i->my_settings.nonla.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.nonla.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "notls"))
+ {
+ i->my_settings.notls.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.notls.value = atoi(setting->value);
+ }
+ return true;
+ }
+
+ /*new settings from freerdp header (strings) begin */
+ else if (!strcmp(setting->name, "Domain") && setting->value)
+ {
+ free(i->my_settings.Domain.value);
+ i->my_settings.Domain.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "PasswordHash") && setting->value)
+ {
+ free(i->my_settings.PasswordHash.value);
+ i->my_settings.PasswordHash.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "AcceptedCert") && setting->value)
+ {
+ free(i->my_settings.AcceptedCert.value);
+ i->my_settings.AcceptedCert.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ClientHostname") && setting->value)
+ {
+ free(i->my_settings.ClientHostname.value);
+ i->my_settings.ClientHostname.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ClientProductId") && setting->value)
+ {
+ free(i->my_settings.ClientProductId.value);
+ i->my_settings.ClientProductId.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "AlternateShell") && setting->value)
+ {
+ free(i->my_settings.AlternateShell.value);
+ i->my_settings.AlternateShell.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ShellWorkingDirectory")
+ && setting->value)
+ {
+ free(i->my_settings.ShellWorkingDirectory.value);
+ i->my_settings.ShellWorkingDirectory.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ClientAddress") && setting->value)
+ {
+ free(i->my_settings.ClientAddress.value);
+ i->my_settings.ClientAddress.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ClientDir") && setting->value)
+ {
+ free(i->my_settings.ClientDir.value);
+ i->my_settings.ClientDir.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "DynamicDSTTimeZoneKeyName")
+ && setting->value)
+ {
+ free(i->my_settings.DynamicDSTTimeZoneKeyName.value);
+ i->my_settings.DynamicDSTTimeZoneKeyName.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteAssistanceSessionId")
+ && setting->value)
+ {
+ free(i->my_settings.RemoteAssistanceSessionId.value);
+ i->my_settings.RemoteAssistanceSessionId.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteAssistancePassStub")
+ && setting->value)
+ {
+ free(i->my_settings.RemoteAssistancePassStub.value);
+ i->my_settings.RemoteAssistancePassStub.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteAssistancePassword")
+ && setting->value)
+ {
+ free(i->my_settings.RemoteAssistancePassword.value);
+ i->my_settings.RemoteAssistancePassword.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteAssistanceRCTicket")
+ && setting->value)
+ {
+ free(i->my_settings.RemoteAssistanceRCTicket.value);
+ i->my_settings.RemoteAssistanceRCTicket.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "AuthenticationServiceClass")
+ && setting->value)
+ {
+ free(i->my_settings.AuthenticationServiceClass.value);
+ i->my_settings.AuthenticationServiceClass.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "AllowedTlsCiphers") && setting->value)
+ {
+ free(i->my_settings.AllowedTlsCiphers.value);
+ i->my_settings.AllowedTlsCiphers.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "NtlmSamFile") && setting->value)
+ {
+ free(i->my_settings.NtlmSamFile.value);
+ i->my_settings.NtlmSamFile.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "PreconnectionBlob") && setting->value)
+ {
+ free(i->my_settings.PreconnectionBlob.value);
+ i->my_settings.PreconnectionBlob.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RedirectionAcceptedCert")
+ && setting->value)
+ {
+ free(i->my_settings.RedirectionAcceptedCert.value);
+ i->my_settings.RedirectionAcceptedCert.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "KerberosKdc") && setting->value)
+ {
+ free(i->my_settings.KerberosKdc.value);
+ i->my_settings.KerberosKdc.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "KerberosRealm") && setting->value)
+ {
+ free(i->my_settings.KerberosRealm.value);
+ i->my_settings.KerberosRealm.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "CertificateName") && setting->value)
+ {
+ free(i->my_settings.CertificateName.value);
+ i->my_settings.CertificateName.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "CertificateFile") && setting->value)
+ {
+ free(i->my_settings.CertificateFile.value);
+ i->my_settings.CertificateFile.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "PrivateKeyFile") && setting->value)
+ {
+ free(i->my_settings.PrivateKeyFile.value);
+ i->my_settings.PrivateKeyFile.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "CertificateContent") && setting->value)
+ {
+ free(i->my_settings.CertificateContent.value);
+ i->my_settings.CertificateContent.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "PrivateKeyContent") && setting->value)
+ {
+ free(i->my_settings.PrivateKeyContent.value);
+ i->my_settings.PrivateKeyContent.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "WindowTitle") && setting->value)
+ {
+ free(i->my_settings.WindowTitle.value);
+ i->my_settings.WindowTitle.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "WmClass") && setting->value)
+ {
+ free(i->my_settings.WmClass.value);
+ i->my_settings.WmClass.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ComputerName") && setting->value)
+ {
+ free(i->my_settings.ComputerName.value);
+ i->my_settings.ComputerName.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ConnectionFile") && setting->value)
+ {
+ free(i->my_settings.ConnectionFile.value);
+ i->my_settings.ConnectionFile.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "AssistanceFile") && setting->value)
+ {
+ free(i->my_settings.AssistanceFile.value);
+ i->my_settings.AssistanceFile.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "HomePath") && setting->value)
+ {
+ free(i->my_settings.HomePath.value);
+ i->my_settings.HomePath.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ConfigPath") && setting->value)
+ {
+ free(i->my_settings.ConfigPath.value);
+ i->my_settings.ConfigPath.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "CurrentPath") && setting->value)
+ {
+ free(i->my_settings.CurrentPath.value);
+ i->my_settings.CurrentPath.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "DumpRemoteFxFile") && setting->value)
+ {
+ free(i->my_settings.DumpRemoteFxFile.value);
+ i->my_settings.DumpRemoteFxFile.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "PlayRemoteFxFile") && setting->value)
+ {
+ free(i->my_settings.PlayRemoteFxFile.value);
+ i->my_settings.PlayRemoteFxFile.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "GatewayHostname") && setting->value)
+ {
+ free(i->my_settings.GatewayHostname.value);
+ i->my_settings.GatewayHostname.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "GatewayUsername") && setting->value)
+ {
+ free(i->my_settings.GatewayUsername.value);
+ i->my_settings.GatewayUsername.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "GatewayPassword") && setting->value)
+ {
+ free(i->my_settings.GatewayPassword.value);
+ i->my_settings.GatewayPassword.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "GatewayDomain") && setting->value)
+ {
+ free(i->my_settings.GatewayDomain.value);
+ i->my_settings.GatewayDomain.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "GatewayAccessToken") && setting->value)
+ {
+ free(i->my_settings.GatewayAccessToken.value);
+ i->my_settings.GatewayAccessToken.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "GatewayAcceptedCert")
+ && setting->value)
+ {
+ free(i->my_settings.GatewayAcceptedCert.value);
+ i->my_settings.GatewayAcceptedCert.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ProxyHostname") && setting->value)
+ {
+ free(i->my_settings.ProxyHostname.value);
+ i->my_settings.ProxyHostname.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteApplicationName")
+ && setting->value)
+ {
+ free(i->my_settings.RemoteApplicationName.value);
+ i->my_settings.RemoteApplicationName.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteApplicationIcon")
+ && setting->value)
+ {
+ free(i->my_settings.RemoteApplicationIcon.value);
+ i->my_settings.RemoteApplicationIcon.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteApplicationProgram")
+ && setting->value)
+ {
+ free(i->my_settings.RemoteApplicationProgram.value);
+ i->my_settings.RemoteApplicationProgram.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteApplicationFile")
+ && setting->value)
+ {
+ free(i->my_settings.RemoteApplicationFile.value);
+ i->my_settings.RemoteApplicationFile.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteApplicationGuid")
+ && setting->value)
+ {
+ free(i->my_settings.RemoteApplicationGuid.value);
+ i->my_settings.RemoteApplicationGuid.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteApplicationCmdLine")
+ && setting->value)
+ {
+ free(i->my_settings.RemoteApplicationCmdLine.value);
+ i->my_settings.RemoteApplicationCmdLine.value
+ = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ImeFileName") && setting->value)
+ {
+ free(i->my_settings.ImeFileName.value);
+ i->my_settings.ImeFileName.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "DrivesToRedirect") && setting->value)
+ {
+ free(i->my_settings.DrivesToRedirect.value);
+ i->my_settings.DrivesToRedirect.value = strdup(setting->value);
+ return true;
+ }
+ else if (!strcmp(setting->name, "ActionScript") && setting->value)
+ {
+ free(i->my_settings.ActionScript.value);
+ i->my_settings.ActionScript.value = strdup(setting->value);
+ return true;
+ }
+ /*new settings from freerdp header (strings) end */
+
+ /* TODO: handle also integer settings passed as strings */
+
+ /* new settings from freerdp header (integers as string) begin */
+
+ else if (!strcmp(setting->name, "ServerMode"))
+ {
+ i->my_settings.ServerMode.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.ServerMode.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "WaitForOutputBufferFlush"))
+ {
+ i->my_settings.WaitForOutputBufferFlush.name
+ = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.WaitForOutputBufferFlush.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "MaxTimeInCheckLoop"))
+ {
+ i->my_settings.MaxTimeInCheckLoop.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.MaxTimeInCheckLoop.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "DesktopWidth"))
+ {
+ i->my_settings.DesktopWidth.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.DesktopWidth.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "DesktopHeight"))
+ {
+ i->my_settings.DesktopHeight.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.DesktopHeight.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "Workarea"))
+ {
+ i->my_settings.Workarea.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.Workarea.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "Fullscreen"))
+ {
+ i->my_settings.Fullscreen.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.Fullscreen.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "GrabKeyboard"))
+ {
+ i->my_settings.GrabKeyboard.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.GrabKeyboard.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "Decorations"))
+ {
+ i->my_settings.Decorations.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.Decorations.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "RdpVersion"))
+ {
+ i->my_settings.RdpVersion.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.RdpVersion.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "ColorDepth"))
+ {
+ i->my_settings.ColorDepth.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.ColorDepth.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "ExtSecurity"))
+ {
+ i->my_settings.ExtSecurity.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.ExtSecurity.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "NlaSecurity"))
+ {
+ i->my_settings.NlaSecurity.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.NlaSecurity.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "TlsSecurity"))
+ {
+ i->my_settings.TlsSecurity.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.TlsSecurity.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "RdpSecurity"))
+ {
+ i->my_settings.RdpSecurity.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.RdpSecurity.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "NegotiateSecurityLayer"))
+ {
+ i->my_settings.NegotiateSecurityLayer.name
+ = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.NegotiateSecurityLayer.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "RestrictedAdminModeRequired"))
+ {
+ i->my_settings.RestrictedAdminModeRequired.name
+ = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.RestrictedAdminModeRequired.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "MstscCookieMode"))
+ {
+ i->my_settings.MstscCookieMode.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.MstscCookieMode.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "CookieMaxLength"))
+ {
+ i->my_settings.CookieMaxLength.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.CookieMaxLength.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "ClientBuild"))
+ {
+ i->my_settings.ClientBuild.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.ClientBuild.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "KeyboardType"))
+ {
+ i->my_settings.KeyboardType.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.KeyboardType.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "KeyboardSubType"))
+ {
+ i->my_settings.KeyboardSubType.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.KeyboardSubType.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "KeyboardFunctionKey"))
+ {
+ i->my_settings.KeyboardFunctionKey.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.KeyboardFunctionKey.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "KeyboardLayout"))
+ {
+ i->my_settings.KeyboardLayout.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.KeyboardLayout.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "UseRdpSecurityLayer"))
+ {
+ i->my_settings.UseRdpSecurityLayer.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.UseRdpSecurityLayer.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "SaltedChecksum"))
+ {
+ i->my_settings.SaltedChecksum.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.SaltedChecksum.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "ServerPort"))
+ {
+ i->my_settings.ServerPort.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.ServerPort.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "GatewayPort"))
+ {
+ i->my_settings.GatewayPort.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.GatewayPort.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "DesktopResize"))
+ {
+ i->my_settings.DesktopResize.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.DesktopResize.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "ToggleFullscreen"))
+ {
+ i->my_settings.ToggleFullscreen.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.ToggleFullscreen.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "Floatbar"))
+ {
+ i->my_settings.Floatbar.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.Floatbar.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "DesktopPosX"))
+ {
+ i->my_settings.DesktopPosX.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.DesktopPosX.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "DesktopPosY"))
+ {
+ i->my_settings.DesktopPosY.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.DesktopPosY.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "SoftwareGdi"))
+ {
+ i->my_settings.SoftwareGdi.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.SoftwareGdi.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "UnmapButtons"))
+ {
+ i->my_settings.UnmapButtons.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.UnmapButtons.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "PerformanceFlags"))
+ {
+ i->my_settings.PerformanceFlags.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.PerformanceFlags.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "AllowFontSmoothing"))
+ {
+ i->my_settings.AllowFontSmoothing.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.AllowFontSmoothing.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "AllowDesktopComposition"))
+ {
+ i->my_settings.AllowDesktopComposition.name
+ = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.AllowDesktopComposition.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "DisableWallpaper"))
+ {
+ i->my_settings.DisableWallpaper.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.DisableWallpaper.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "DisableFullWindowDrag"))
+ {
+ i->my_settings.DisableFullWindowDrag.name
+ = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.DisableFullWindowDrag.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "DisableMenuAnims"))
+ {
+ i->my_settings.DisableMenuAnims.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.DisableMenuAnims.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "DisableThemes"))
+ {
+ i->my_settings.DisableThemes.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.DisableThemes.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "ConnectionType"))
+ {
+ i->my_settings.ConnectionType.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.ConnectionType.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "EncryptionMethods"))
+ {
+ i->my_settings.EncryptionMethods.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.EncryptionMethods.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "EncryptionLevel"))
+ {
+ i->my_settings.EncryptionLevel.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.EncryptionLevel.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "FIPSMode"))
+ {
+ i->my_settings.FIPSMode.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.FIPSMode.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "CompressionEnabled"))
+ {
+ i->my_settings.CompressionEnabled.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.CompressionEnabled.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "LogonNotify"))
+ {
+ i->my_settings.LogonNotify.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.LogonNotify.value = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "BrushSupportLevel"))
+ {
+ i->my_settings.BrushSupportLevel.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.BrushSupportLevel.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteApplicationMode"))
+ {
+ i->my_settings.RemoteApplicationMode.name
+ = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.RemoteApplicationMode.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ else if (!strcmp(setting->name, "TcpAckTimeout"))
+ {
+ i->my_settings.TcpAckTimeout.name = (char *)setting_used;
+ if (setting->value)
+ {
+ i->my_settings.TcpAckTimeout.value
+ = atoi(setting->value);
+ }
+ return true;
+ }
+ /* new settings from freerdp header (integers as string) end */
+
+ /* error: unhandled setting */
+ {
+ char buf[128];
+ snprintf(buf, 127, "rdp_module: unknown setting string: %s",
+ setting->name);
+ i->core->api_utils->log_msg((const uint8_t *)buf, strlen(buf),
+ wrdp_log_level_warning, 0);
+ }
+ return false;
+}
+
+bool
+rdp_set_setting_int(backend_setting_int *setting, void *internals)
+{
+ rdp_internals *i = internals;
+#ifdef DEBUG
+ {
+ char buf[128];
+ snprintf(buf, 127,
+ "rdp backend handling setting int: \"%s: %ld\"",
+ setting->name, setting->value);
+ i->core->api_utils->log_msg(
+ (const uint8_t *)buf, strlen(buf), wrdp_log_level_trace, 0);
+ }
+#endif
+ if (!strcmp(setting->name, "port"))
+ {
+ i->my_settings.port.name = (char *)setting_used;
+ i->my_settings.port.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "width"))
+ {
+ i->my_settings.width.name = (char *)setting_used;
+ i->my_settings.width.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "height"))
+ {
+ i->my_settings.height.name = (char *)setting_used;
+ i->my_settings.height.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "perf"))
+ {
+ i->my_settings.perf.name = (char *)setting_used;
+ i->my_settings.perf.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "fntlm"))
+ {
+ i->my_settings.fntlm.name = (char *)setting_used;
+ i->my_settings.fntlm.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "nowallp"))
+ {
+ i->my_settings.nowallp.name = (char *)setting_used;
+ i->my_settings.nowallp.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "nowdrag"))
+ {
+ i->my_settings.nowdrag.name = (char *)setting_used;
+ i->my_settings.nowdrag.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "nomani"))
+ {
+ i->my_settings.nomani.name = (char *)setting_used;
+ i->my_settings.nomani.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "notheme"))
+ {
+ i->my_settings.notheme.name = (char *)setting_used;
+ i->my_settings.notheme.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "nonla"))
+ {
+ i->my_settings.nonla.name = (char *)setting_used;
+ i->my_settings.nonla.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "notls"))
+ {
+ i->my_settings.notls.name = (char *)setting_used;
+ i->my_settings.notls.value = setting->value;
+ return true;
+ }
+
+ /* new settings from freerdp header (integers) begin */
+ else if (!strcmp(setting->name, "ServerMode"))
+ {
+ i->my_settings.ServerMode.name = (char *)setting_used;
+ i->my_settings.ServerMode.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "WaitForOutputBufferFlush"))
+ {
+ i->my_settings.WaitForOutputBufferFlush.name
+ = (char *)setting_used;
+ i->my_settings.WaitForOutputBufferFlush.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "MaxTimeInCheckLoop"))
+ {
+ i->my_settings.MaxTimeInCheckLoop.name = (char *)setting_used;
+ i->my_settings.MaxTimeInCheckLoop.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "DesktopWidth"))
+ {
+ i->my_settings.DesktopWidth.name = (char *)setting_used;
+ i->my_settings.DesktopWidth.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "DesktopHeight"))
+ {
+ i->my_settings.DesktopHeight.name = (char *)setting_used;
+ i->my_settings.DesktopHeight.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "Workarea"))
+ {
+ i->my_settings.Workarea.name = (char *)setting_used;
+ i->my_settings.Workarea.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "Fullscreen"))
+ {
+ i->my_settings.Fullscreen.name = (char *)setting_used;
+ i->my_settings.Fullscreen.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "GrabKeyboard"))
+ {
+ i->my_settings.GrabKeyboard.name = (char *)setting_used;
+ i->my_settings.GrabKeyboard.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "Decorations"))
+ {
+ i->my_settings.Decorations.name = (char *)setting_used;
+ i->my_settings.Decorations.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "RdpVersion"))
+ {
+ i->my_settings.RdpVersion.name = (char *)setting_used;
+ i->my_settings.RdpVersion.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "ColorDepth"))
+ {
+ i->my_settings.ColorDepth.name = (char *)setting_used;
+ i->my_settings.ColorDepth.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "ExtSecurity"))
+ {
+ i->my_settings.ExtSecurity.name = (char *)setting_used;
+ i->my_settings.ExtSecurity.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "NlaSecurity"))
+ {
+ i->my_settings.NlaSecurity.name = (char *)setting_used;
+ i->my_settings.NlaSecurity.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "TlsSecurity"))
+ {
+ i->my_settings.TlsSecurity.name = (char *)setting_used;
+ i->my_settings.TlsSecurity.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "RdpSecurity"))
+ {
+ i->my_settings.RdpSecurity.name = (char *)setting_used;
+ i->my_settings.RdpSecurity.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "NegotiateSecurityLayer"))
+ {
+ i->my_settings.NegotiateSecurityLayer.name
+ = (char *)setting_used;
+ i->my_settings.NegotiateSecurityLayer.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "RestrictedAdminModeRequired"))
+ {
+ i->my_settings.RestrictedAdminModeRequired.name
+ = (char *)setting_used;
+ i->my_settings.RestrictedAdminModeRequired.value
+ = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "MstscCookieMode"))
+ {
+ i->my_settings.MstscCookieMode.name = (char *)setting_used;
+ i->my_settings.MstscCookieMode.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "CookieMaxLength"))
+ {
+ i->my_settings.CookieMaxLength.name = (char *)setting_used;
+ i->my_settings.CookieMaxLength.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "ClientBuild"))
+ {
+ i->my_settings.ClientBuild.name = (char *)setting_used;
+ i->my_settings.ClientBuild.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "KeyboardType"))
+ {
+ i->my_settings.KeyboardType.name = (char *)setting_used;
+ i->my_settings.KeyboardType.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "KeyboardSubType"))
+ {
+ i->my_settings.KeyboardSubType.name = (char *)setting_used;
+ i->my_settings.KeyboardSubType.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "KeyboardFunctionKey"))
+ {
+ i->my_settings.KeyboardFunctionKey.name = (char *)setting_used;
+ i->my_settings.KeyboardFunctionKey.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "KeyboardLayout"))
+ {
+ i->my_settings.KeyboardLayout.name = (char *)setting_used;
+ i->my_settings.KeyboardLayout.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "UseRdpSecurityLayer"))
+ {
+ i->my_settings.UseRdpSecurityLayer.name = (char *)setting_used;
+ i->my_settings.UseRdpSecurityLayer.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "SaltedChecksum"))
+ {
+ i->my_settings.SaltedChecksum.name = (char *)setting_used;
+ i->my_settings.SaltedChecksum.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "ServerPort"))
+ {
+ i->my_settings.ServerPort.name = (char *)setting_used;
+ i->my_settings.ServerPort.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "GatewayPort"))
+ {
+ i->my_settings.GatewayPort.name = (char *)setting_used;
+ i->my_settings.GatewayPort.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "DesktopResize"))
+ {
+ i->my_settings.DesktopResize.name = (char *)setting_used;
+ i->my_settings.DesktopResize.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "ToggleFullscreen"))
+ {
+ i->my_settings.ToggleFullscreen.name = (char *)setting_used;
+ i->my_settings.ToggleFullscreen.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "Floatbar"))
+ {
+ i->my_settings.Floatbar.name = (char *)setting_used;
+ i->my_settings.Floatbar.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "DesktopPosX"))
+ {
+ i->my_settings.DesktopPosX.name = (char *)setting_used;
+ i->my_settings.DesktopPosX.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "DesktopPosY"))
+ {
+ i->my_settings.DesktopPosY.name = (char *)setting_used;
+ i->my_settings.DesktopPosY.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "SoftwareGdi"))
+ {
+ i->my_settings.SoftwareGdi.name = (char *)setting_used;
+ i->my_settings.SoftwareGdi.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "UnmapButtons"))
+ {
+ i->my_settings.UnmapButtons.name = (char *)setting_used;
+ i->my_settings.UnmapButtons.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "PerformanceFlags"))
+ {
+ i->my_settings.PerformanceFlags.name = (char *)setting_used;
+ i->my_settings.PerformanceFlags.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "AllowFontSmoothing"))
+ {
+ i->my_settings.AllowFontSmoothing.name = (char *)setting_used;
+ i->my_settings.AllowFontSmoothing.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "AllowDesktopComposition"))
+ {
+ i->my_settings.AllowDesktopComposition.name
+ = (char *)setting_used;
+ i->my_settings.AllowDesktopComposition.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "DisableWallpaper"))
+ {
+ i->my_settings.DisableWallpaper.name = (char *)setting_used;
+ i->my_settings.DisableWallpaper.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "DisableFullWindowDrag"))
+ {
+ i->my_settings.DisableFullWindowDrag.name
+ = (char *)setting_used;
+ i->my_settings.DisableFullWindowDrag.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "DisableMenuAnims"))
+ {
+ i->my_settings.DisableMenuAnims.name = (char *)setting_used;
+ i->my_settings.DisableMenuAnims.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "DisableThemes"))
+ {
+ i->my_settings.DisableThemes.name = (char *)setting_used;
+ i->my_settings.DisableThemes.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "ConnectionType"))
+ {
+ i->my_settings.ConnectionType.name = (char *)setting_used;
+ i->my_settings.ConnectionType.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "EncryptionMethods"))
+ {
+ i->my_settings.EncryptionMethods.name = (char *)setting_used;
+ i->my_settings.EncryptionMethods.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "EncryptionLevel"))
+ {
+ i->my_settings.EncryptionLevel.name = (char *)setting_used;
+ i->my_settings.EncryptionLevel.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "FIPSMode"))
+ {
+ i->my_settings.FIPSMode.name = (char *)setting_used;
+ i->my_settings.FIPSMode.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "CompressionEnabled"))
+ {
+ i->my_settings.CompressionEnabled.name = (char *)setting_used;
+ i->my_settings.CompressionEnabled.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "LogonNotify"))
+ {
+ i->my_settings.LogonNotify.name = (char *)setting_used;
+ i->my_settings.LogonNotify.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "BrushSupportLevel"))
+ {
+ i->my_settings.BrushSupportLevel.name = (char *)setting_used;
+ i->my_settings.BrushSupportLevel.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "RemoteApplicationMode"))
+ {
+ i->my_settings.RemoteApplicationMode.name
+ = (char *)setting_used;
+ i->my_settings.RemoteApplicationMode.value = setting->value;
+ return true;
+ }
+ else if (!strcmp(setting->name, "TcpAckTimeout"))
+ {
+ i->my_settings.TcpAckTimeout.name = (char *)setting_used;
+ i->my_settings.TcpAckTimeout.value = setting->value;
+ return true;
+ }
+
+ /* new settings from freerdp header (integers) end */
+
+ /* error: unhandled setting */
+ {
+ char buf[128];
+ snprintf(buf, 127, "rdp_module: unknown setting int: %s",
+ setting->name);
+ i->core->api_utils->log_msg((const uint8_t *)buf, strlen(buf),
+ wrdp_log_level_warning, 0);
+ }
+ return false;
+}
+
+void
+rdp_settings_free(rdp_internals *internals)
+{
+ rdp_internals *i = internals;
+ if (i->my_settings.host.value)
+ {
+ free((void *)i->my_settings.host.value);
+ }
+ if (i->my_settings.pcb.value)
+ {
+ free((void *)i->my_settings.pcb.value);
+ }
+ if (i->my_settings.user.value)
+ {
+ free((void *)i->my_settings.user.value);
+ }
+ if (i->my_settings.password.value)
+ {
+ free((void *)i->my_settings.password.value);
+ }
+ /* new */
+ if (i->my_settings.Domain.value)
+ {
+ free((void *)i->my_settings.Domain.value);
+ }
+ if (i->my_settings.PasswordHash.value)
+ {
+ free((void *)i->my_settings.PasswordHash.value);
+ }
+ if (i->my_settings.AcceptedCert.value)
+ {
+ free((void *)i->my_settings.AcceptedCert.value);
+ }
+ if (i->my_settings.ClientHostname.value)
+ {
+ free((void *)i->my_settings.ClientHostname.value);
+ }
+ if (i->my_settings.ClientProductId.value)
+ {
+ free((void *)i->my_settings.ClientProductId.value);
+ }
+ if (i->my_settings.AlternateShell.value)
+ {
+ free((void *)i->my_settings.AlternateShell.value);
+ }
+ if (i->my_settings.ShellWorkingDirectory.value)
+ {
+ free((void *)i->my_settings.ShellWorkingDirectory.value);
+ }
+ if (i->my_settings.ClientAddress.value)
+ {
+ free((void *)i->my_settings.ClientAddress.value);
+ }
+ if (i->my_settings.ClientDir.value)
+ {
+ free((void *)i->my_settings.ClientDir.value);
+ }
+ if (i->my_settings.DynamicDSTTimeZoneKeyName.value)
+ {
+ free((void *)i->my_settings.DynamicDSTTimeZoneKeyName.value);
+ }
+ if (i->my_settings.RemoteAssistanceSessionId.value)
+ {
+ free((void *)i->my_settings.RemoteAssistanceSessionId.value);
+ }
+ if (i->my_settings.RemoteAssistancePassStub.value)
+ {
+ free((void *)i->my_settings.RemoteAssistancePassStub.value);
+ }
+ if (i->my_settings.RemoteAssistancePassword.value)
+ {
+ free((void *)i->my_settings.RemoteAssistancePassword.value);
+ }
+ if (i->my_settings.RemoteAssistanceRCTicket.value)
+ {
+ free((void *)i->my_settings.RemoteAssistanceRCTicket.value);
+ }
+ if (i->my_settings.AuthenticationServiceClass.value)
+ {
+ free((void *)i->my_settings.AuthenticationServiceClass.value);
+ }
+ if (i->my_settings.AllowedTlsCiphers.value)
+ {
+ free((void *)i->my_settings.AllowedTlsCiphers.value);
+ }
+ if (i->my_settings.NtlmSamFile.value)
+ {
+ free((void *)i->my_settings.NtlmSamFile.value);
+ }
+ if (i->my_settings.PreconnectionBlob.value)
+ {
+ free((void *)i->my_settings.PreconnectionBlob.value);
+ }
+ if (i->my_settings.RedirectionAcceptedCert.value)
+ {
+ free((void *)i->my_settings.RedirectionAcceptedCert.value);
+ }
+ if (i->my_settings.KerberosKdc.value)
+ {
+ free((void *)i->my_settings.KerberosKdc.value);
+ }
+ if (i->my_settings.KerberosRealm.value)
+ {
+ free((void *)i->my_settings.KerberosRealm.value);
+ }
+ if (i->my_settings.CertificateName.value)
+ {
+ free((void *)i->my_settings.CertificateName.value);
+ }
+ if (i->my_settings.CertificateFile.value)
+ {
+ free((void *)i->my_settings.CertificateFile.value);
+ }
+ if (i->my_settings.PrivateKeyFile.value)
+ {
+ free((void *)i->my_settings.PrivateKeyFile.value);
+ }
+ if (i->my_settings.CertificateContent.value)
+ {
+ free((void *)i->my_settings.CertificateContent.value);
+ }
+ if (i->my_settings.PrivateKeyContent.value)
+ {
+ free((void *)i->my_settings.PrivateKeyContent.value);
+ }
+ if (i->my_settings.WindowTitle.value)
+ {
+ free((void *)i->my_settings.WindowTitle.value);
+ }
+ if (i->my_settings.WmClass.value)
+ {
+ free((void *)i->my_settings.WmClass.value);
+ }
+ if (i->my_settings.ComputerName.value)
+ {
+ free((void *)i->my_settings.ComputerName.value);
+ }
+ if (i->my_settings.ConnectionFile.value)
+ {
+ free((void *)i->my_settings.ConnectionFile.value);
+ }
+ if (i->my_settings.AssistanceFile.value)
+ {
+ free((void *)i->my_settings.AssistanceFile.value);
+ }
+ if (i->my_settings.HomePath.value)
+ {
+ free((void *)i->my_settings.HomePath.value);
+ }
+ if (i->my_settings.ConfigPath.value)
+ {
+ free((void *)i->my_settings.ConfigPath.value);
+ }
+ if (i->my_settings.CurrentPath.value)
+ {
+ free((void *)i->my_settings.CurrentPath.value);
+ }
+ if (i->my_settings.DumpRemoteFxFile.value)
+ {
+ free((void *)i->my_settings.DumpRemoteFxFile.value);
+ }
+ if (i->my_settings.PlayRemoteFxFile.value)
+ {
+ free((void *)i->my_settings.PlayRemoteFxFile.value);
+ }
+ if (i->my_settings.GatewayHostname.value)
+ {
+ free((void *)i->my_settings.GatewayHostname.value);
+ }
+ if (i->my_settings.GatewayUsername.value)
+ {
+ free((void *)i->my_settings.GatewayUsername.value);
+ }
+ if (i->my_settings.GatewayPassword.value)
+ {
+ free((void *)i->my_settings.GatewayPassword.value);
+ }
+ if (i->my_settings.GatewayDomain.value)
+ {
+ free((void *)i->my_settings.GatewayDomain.value);
+ }
+ if (i->my_settings.GatewayAccessToken.value)
+ {
+ free((void *)i->my_settings.GatewayAccessToken.value);
+ }
+ if (i->my_settings.GatewayAcceptedCert.value)
+ {
+ free((void *)i->my_settings.GatewayAcceptedCert.value);
+ }
+ if (i->my_settings.ProxyHostname.value)
+ {
+ free((void *)i->my_settings.ProxyHostname.value);
+ }
+ if (i->my_settings.RemoteApplicationName.value)
+ {
+ free((void *)i->my_settings.RemoteApplicationName.value);
+ }
+ if (i->my_settings.RemoteApplicationIcon.value)
+ {
+ free((void *)i->my_settings.RemoteApplicationIcon.value);
+ }
+ if (i->my_settings.RemoteApplicationProgram.value)
+ {
+ free((void *)i->my_settings.RemoteApplicationProgram.value);
+ }
+ if (i->my_settings.RemoteApplicationFile.value)
+ {
+ free((void *)i->my_settings.RemoteApplicationFile.value);
+ }
+ if (i->my_settings.RemoteApplicationGuid.value)
+ {
+ free((void *)i->my_settings.RemoteApplicationGuid.value);
+ }
+ if (i->my_settings.RemoteApplicationCmdLine.value)
+ {
+ free((void *)i->my_settings.RemoteApplicationCmdLine.value);
+ }
+ if (i->my_settings.ImeFileName.value)
+ {
+ free((void *)i->my_settings.ImeFileName.value);
+ }
+ if (i->my_settings.DrivesToRedirect.value)
+ {
+ free((void *)i->my_settings.DrivesToRedirect.value);
+ }
+ if (i->my_settings.ActionScript.value)
+ {
+ free((void *)i->my_settings.ActionScript.value);
+ }
+}
+
+bool
+rdp_init_settings(void *internals)
+{
+ rdp_internals *i = internals;
+ rdpSettings *s = i->instance->context->settings;
+
+ /* via are not server here ) */
+ s->ServerMode = FALSE;
+
+ s->TlsSecurity = !(i->my_settings.notls.value);
+ if (i->my_settings.host.value && i->my_settings.host.value[0])
+ {
+ s->ServerHostname = strdup((char *)i->my_settings.host.value);
+ }
+ else
+ {
+ const char *msg = "rdp_module: server hostname does not set.";
+ i->core->api_utils->log_msg(
+ (const uint8_t *)msg, strlen(msg), wrdp_log_level_error, 0);
+ return FALSE;
+ }
+ if (i->my_settings.port.name && i->my_settings.port.name[0] == '1')
+ {
+ s->ServerPort = i->my_settings.port.value;
+ }
+ if (i->my_settings.user.value && i->my_settings.user.value[0])
+ {
+ s->Username = strdup((char *)i->my_settings.user.value);
+ }
+ if (i->my_settings.password.value && i->my_settings.password.value[0])
+ {
+ s->Password = strdup((char *)i->my_settings.password.value);
+ }
+ if (!i->my_settings.user.value && !i->my_settings.password.value)
+ {
+ /* TODO: disable authentication */
+ }
+ if (i->my_settings.nowallp.name
+ && i->my_settings.nowallp.name[0] == '1')
+ {
+ s->DisableWallpaper = i->my_settings.nowallp.value;
+ s->PerformanceFlags |= PERF_DISABLE_WALLPAPER;
+ }
+ if (i->my_settings.nowdrag.name
+ && i->my_settings.nowdrag.name[0] == '1')
+ {
+ s->DisableFullWindowDrag = i->my_settings.nowdrag.value;
+ s->PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
+ }
+ if (i->my_settings.nomani.name && i->my_settings.nomani.name[0] == '1')
+ {
+ s->DisableMenuAnims = i->my_settings.nomani.value;
+ s->PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
+ }
+ if (i->my_settings.notheme.name
+ && i->my_settings.notheme.name[0] == '1')
+ {
+ s->DisableThemes = i->my_settings.notheme.value;
+ s->PerformanceFlags |= PERF_DISABLE_THEMING;
+ }
+ if (i->my_settings.nonla.name && i->my_settings.nonla.name[0] == '1')
+ {
+ s->NlaSecurity = !(i->my_settings.nonla.value);
+ }
+ if (i->my_settings.width.name && i->my_settings.width.name[0] == '1')
+ {
+ s->DesktopWidth = i->my_settings.width.value;
+ }
+ if (i->my_settings.height.name && i->my_settings.height.name[0] == '1')
+ {
+ s->DesktopHeight = i->my_settings.height.value;
+ }
+ if (i->my_settings.pcb.value && i->my_settings.pcb.value[0])
+ {
+ s->SendPreconnectionPdu = TRUE;
+ s->PreconnectionBlob = strdup(i->my_settings.pcb.value);
+ }
+
+ s->IgnoreCertificate = TRUE;
+
+ if (i->my_settings.perf.name && i->my_settings.perf.name[0] == '1')
+ {
+ switch (i->my_settings.perf.value)
+ {
+ case 0:
+ //LAN
+ s->PerformanceFlags = PERF_FLAG_NONE;
+ s->ConnectionType = CONNECTION_TYPE_LAN;
+ s->AllowFontSmoothing = TRUE;
+ break;
+ case 1:
+ //Broadband
+ s->PerformanceFlags = PERF_DISABLE_WALLPAPER;
+ s->ConnectionType
+ = CONNECTION_TYPE_BROADBAND_HIGH;
+ break;
+ case 2:
+ //Modem
+ s->PerformanceFlags
+ = PERF_DISABLE_WALLPAPER
+ | PERF_DISABLE_FULLWINDOWDRAG
+ | PERF_DISABLE_MENUANIMATIONS
+ | PERF_DISABLE_THEMING;
+ s->ConnectionType = CONNECTION_TYPE_MODEM;
+ break;
+ }
+ }
+
+ /* new settings from freerdp header (strings) begin */
+
+ if (i->my_settings.Domain.value)
+ {
+ s->Domain = strdup(i->my_settings.Domain.value);
+ }
+ if (i->my_settings.PasswordHash.value)
+ {
+ s->PasswordHash = strdup(i->my_settings.PasswordHash.value);
+ }
+ if (i->my_settings.AcceptedCert.value)
+ {
+ s->AcceptedCert = strdup(i->my_settings.AcceptedCert.value);
+ }
+ if (i->my_settings.ClientHostname.value)
+ {
+ s->ClientHostname = strdup(i->my_settings.ClientHostname.value);
+ }
+ if (i->my_settings.ClientProductId.value)
+ {
+ s->ClientProductId
+ = strdup(i->my_settings.ClientProductId.value);
+ }
+ if (i->my_settings.AlternateShell.value)
+ {
+ s->AlternateShell = strdup(i->my_settings.AlternateShell.value);
+ }
+ if (i->my_settings.ShellWorkingDirectory.value)
+ {
+ s->ShellWorkingDirectory
+ = strdup(i->my_settings.ShellWorkingDirectory.value);
+ }
+ if (i->my_settings.ClientAddress.value)
+ {
+ s->ClientAddress = strdup(i->my_settings.ClientAddress.value);
+ }
+ if (i->my_settings.ClientDir.value)
+ {
+ s->ClientDir = strdup(i->my_settings.ClientDir.value);
+ }
+ if (i->my_settings.DynamicDSTTimeZoneKeyName.value)
+ {
+ s->DynamicDSTTimeZoneKeyName
+ = strdup(i->my_settings.DynamicDSTTimeZoneKeyName.value);
+ }
+ if (i->my_settings.RemoteAssistanceSessionId.value)
+ {
+ s->RemoteAssistanceSessionId
+ = strdup(i->my_settings.RemoteAssistanceSessionId.value);
+ }
+ if (i->my_settings.RemoteAssistancePassStub.value)
+ {
+ s->RemoteAssistancePassStub
+ = strdup(i->my_settings.RemoteAssistancePassStub.value);
+ }
+ if (i->my_settings.RemoteAssistancePassword.value)
+ {
+ s->RemoteAssistancePassword
+ = strdup(i->my_settings.RemoteAssistancePassword.value);
+ }
+ if (i->my_settings.RemoteAssistanceRCTicket.value)
+ {
+ s->RemoteAssistanceRCTicket
+ = strdup(i->my_settings.RemoteAssistanceRCTicket.value);
+ }
+ if (i->my_settings.AuthenticationServiceClass.value)
+ {
+ s->AuthenticationServiceClass
+ = strdup(i->my_settings.AuthenticationServiceClass.value);
+ }
+ if (i->my_settings.AllowedTlsCiphers.value)
+ {
+ s->AllowedTlsCiphers
+ = strdup(i->my_settings.AllowedTlsCiphers.value);
+ }
+ if (i->my_settings.NtlmSamFile.value)
+ {
+ s->NtlmSamFile = strdup(i->my_settings.NtlmSamFile.value);
+ }
+ if (i->my_settings.PreconnectionBlob.value)
+ {
+ s->PreconnectionBlob
+ = strdup(i->my_settings.PreconnectionBlob.value);
+ }
+ if (i->my_settings.RedirectionAcceptedCert.value)
+ {
+ s->RedirectionAcceptedCert
+ = strdup(i->my_settings.RedirectionAcceptedCert.value);
+ }
+ if (i->my_settings.KerberosKdc.value)
+ {
+ s->KerberosKdc = strdup(i->my_settings.KerberosKdc.value);
+ }
+ if (i->my_settings.KerberosRealm.value)
+ {
+ s->KerberosRealm = strdup(i->my_settings.KerberosRealm.value);
+ }
+ if (i->my_settings.CertificateName.value)
+ {
+ s->CertificateName
+ = strdup(i->my_settings.CertificateName.value);
+ }
+ if (i->my_settings.CertificateFile.value)
+ {
+ s->CertificateFile
+ = strdup(i->my_settings.CertificateFile.value);
+ }
+ if (i->my_settings.PrivateKeyFile.value)
+ {
+ s->PrivateKeyFile = strdup(i->my_settings.PrivateKeyFile.value);
+ }
+ if (i->my_settings.CertificateContent.value)
+ {
+ s->CertificateContent
+ = strdup(i->my_settings.CertificateContent.value);
+ }
+ if (i->my_settings.PrivateKeyContent.value)
+ {
+ s->PrivateKeyContent
+ = strdup(i->my_settings.PrivateKeyContent.value);
+ }
+ if (i->my_settings.WindowTitle.value)
+ {
+ s->WindowTitle = strdup(i->my_settings.WindowTitle.value);
+ }
+ if (i->my_settings.WmClass.value)
+ {
+ s->WmClass = strdup(i->my_settings.WmClass.value);
+ }
+ if (i->my_settings.ComputerName.value)
+ {
+ s->ComputerName = strdup(i->my_settings.ComputerName.value);
+ }
+ if (i->my_settings.ConnectionFile.value)
+ {
+ s->ConnectionFile = strdup(i->my_settings.ConnectionFile.value);
+ }
+ if (i->my_settings.AssistanceFile.value)
+ {
+ s->AssistanceFile = strdup(i->my_settings.AssistanceFile.value);
+ }
+ if (i->my_settings.HomePath.value)
+ {
+ s->HomePath = strdup(i->my_settings.HomePath.value);
+ }
+ if (i->my_settings.ConfigPath.value)
+ {
+ s->ConfigPath = strdup(i->my_settings.ConfigPath.value);
+ }
+ if (i->my_settings.CurrentPath.value)
+ {
+ s->CurrentPath = strdup(i->my_settings.CurrentPath.value);
+ }
+ if (i->my_settings.DumpRemoteFxFile.value)
+ {
+ s->DumpRemoteFxFile
+ = strdup(i->my_settings.DumpRemoteFxFile.value);
+ }
+ if (i->my_settings.PlayRemoteFxFile.value)
+ {
+ s->PlayRemoteFxFile
+ = strdup(i->my_settings.PlayRemoteFxFile.value);
+ }
+ if (i->my_settings.GatewayHostname.value)
+ {
+ s->GatewayHostname
+ = strdup(i->my_settings.GatewayHostname.value);
+ }
+ if (i->my_settings.GatewayUsername.value)
+ {
+ s->GatewayUsername
+ = strdup(i->my_settings.GatewayUsername.value);
+ }
+ if (i->my_settings.GatewayPassword.value)
+ {
+ s->GatewayPassword
+ = strdup(i->my_settings.GatewayPassword.value);
+ }
+ if (i->my_settings.GatewayDomain.value)
+ {
+ s->GatewayDomain = strdup(i->my_settings.GatewayDomain.value);
+ }
+ if (i->my_settings.GatewayAccessToken.value)
+ {
+ s->GatewayAccessToken
+ = strdup(i->my_settings.GatewayAccessToken.value);
+ }
+ if (i->my_settings.GatewayAcceptedCert.value)
+ {
+ s->GatewayAcceptedCert
+ = strdup(i->my_settings.GatewayAcceptedCert.value);
+ }
+ if (i->my_settings.ProxyHostname.value)
+ {
+ s->ProxyHostname = strdup(i->my_settings.ProxyHostname.value);
+ }
+ if (i->my_settings.RemoteApplicationName.value)
+ {
+ s->RemoteApplicationName
+ = strdup(i->my_settings.RemoteApplicationName.value);
+ }
+ if (i->my_settings.RemoteApplicationIcon.value)
+ {
+ s->RemoteApplicationIcon
+ = strdup(i->my_settings.RemoteApplicationIcon.value);
+ }
+ if (i->my_settings.RemoteApplicationProgram.value)
+ {
+ s->RemoteApplicationProgram
+ = strdup(i->my_settings.RemoteApplicationProgram.value);
+ }
+ if (i->my_settings.RemoteApplicationFile.value)
+ {
+ s->RemoteApplicationFile
+ = strdup(i->my_settings.RemoteApplicationFile.value);
+ }
+ if (i->my_settings.RemoteApplicationGuid.value)
+ {
+ s->RemoteApplicationGuid
+ = strdup(i->my_settings.RemoteApplicationGuid.value);
+ }
+ if (i->my_settings.RemoteApplicationCmdLine.value)
+ {
+ s->RemoteApplicationCmdLine
+ = strdup(i->my_settings.RemoteApplicationCmdLine.value);
+ }
+ if (i->my_settings.ImeFileName.value)
+ {
+ s->ImeFileName = strdup(i->my_settings.ImeFileName.value);
+ }
+ if (i->my_settings.DrivesToRedirect.value)
+ {
+ s->DrivesToRedirect
+ = strdup(i->my_settings.DrivesToRedirect.value);
+ }
+ if (i->my_settings.ActionScript.value)
+ {
+ s->ActionScript = strdup(i->my_settings.ActionScript.value);
+ }
+
+ /* new settings from freerdp header (strings) end */
+
+ /* new settings from freerdp header (integers) begin */
+
+ if (i->my_settings.ServerMode.name
+ && i->my_settings.ServerMode.name[0] == '1')
+ {
+ s->ServerMode = i->my_settings.ServerMode.value;
+ }
+ if (i->my_settings.WaitForOutputBufferFlush.name
+ && i->my_settings.WaitForOutputBufferFlush.name[0] == '1')
+ {
+ s->WaitForOutputBufferFlush
+ = i->my_settings.WaitForOutputBufferFlush.value;
+ }
+ if (i->my_settings.MaxTimeInCheckLoop.name
+ && i->my_settings.MaxTimeInCheckLoop.name[0] == '1')
+ {
+ s->MaxTimeInCheckLoop = i->my_settings.MaxTimeInCheckLoop.value;
+ }
+ if (i->my_settings.DesktopWidth.name
+ && i->my_settings.DesktopWidth.name[0] == '1')
+ {
+ s->DesktopWidth = i->my_settings.DesktopWidth.value;
+ }
+ if (i->my_settings.Workarea.name
+ && i->my_settings.Workarea.name[0] == '1')
+ {
+ s->Workarea = i->my_settings.Workarea.value;
+ }
+ if (i->my_settings.Fullscreen.name
+ && i->my_settings.Fullscreen.name[0] == '1')
+ {
+ s->Fullscreen = i->my_settings.Fullscreen.value;
+ }
+ if (i->my_settings.GrabKeyboard.name
+ && i->my_settings.GrabKeyboard.name[0] == '1')
+ {
+ s->GrabKeyboard = i->my_settings.GrabKeyboard.value;
+ }
+ if (i->my_settings.Decorations.name
+ && i->my_settings.Decorations.name[0] == '1')
+ {
+ s->Decorations = i->my_settings.Decorations.value;
+ }
+ if (i->my_settings.RdpVersion.name
+ && i->my_settings.RdpVersion.name[0] == '1')
+ {
+ s->RdpVersion = i->my_settings.RdpVersion.value;
+ }
+ if (i->my_settings.ColorDepth.name
+ && i->my_settings.ColorDepth.name[0] == '1')
+ {
+ s->ColorDepth = i->my_settings.ColorDepth.value;
+ }
+ if (i->my_settings.ExtSecurity.name
+ && i->my_settings.ExtSecurity.name[0] == '1')
+ {
+ s->ExtSecurity = i->my_settings.ExtSecurity.value;
+ }
+ if (i->my_settings.NlaSecurity.name
+ && i->my_settings.NlaSecurity.name[0] == '1')
+ {
+ s->NlaSecurity = i->my_settings.NlaSecurity.value;
+ }
+ if (i->my_settings.TlsSecurity.name
+ && i->my_settings.TlsSecurity.name[0] == '1')
+ {
+ s->TlsSecurity = i->my_settings.TlsSecurity.value;
+ }
+ if (i->my_settings.RdpSecurity.name
+ && i->my_settings.RdpSecurity.name[0] == '1')
+ {
+ s->RdpSecurity = i->my_settings.RdpSecurity.value;
+ }
+ if (i->my_settings.NegotiateSecurityLayer.name
+ && i->my_settings.NegotiateSecurityLayer.name[0] == '1')
+ {
+ s->NegotiateSecurityLayer
+ = i->my_settings.NegotiateSecurityLayer.value;
+ }
+ if (i->my_settings.RestrictedAdminModeRequired.name
+ && i->my_settings.RestrictedAdminModeRequired.name[0] == '1')
+ {
+ s->RestrictedAdminModeRequired
+ = i->my_settings.RestrictedAdminModeRequired.value;
+ }
+ if (i->my_settings.MstscCookieMode.name
+ && i->my_settings.MstscCookieMode.name[0] == '1')
+ {
+ s->MstscCookieMode = i->my_settings.MstscCookieMode.value;
+ }
+ if (i->my_settings.CookieMaxLength.name
+ && i->my_settings.CookieMaxLength.name[0] == '1')
+ {
+ s->CookieMaxLength = i->my_settings.CookieMaxLength.value;
+ }
+ if (i->my_settings.ClientBuild.name
+ && i->my_settings.ClientBuild.name[0] == '1')
+ {
+ s->ClientBuild = i->my_settings.ClientBuild.value;
+ }
+ if (i->my_settings.KeyboardType.name
+ && i->my_settings.KeyboardType.name[0] == '1')
+ {
+ s->KeyboardType = i->my_settings.KeyboardType.value;
+ }
+ if (i->my_settings.KeyboardSubType.name
+ && i->my_settings.KeyboardSubType.name[0] == '1')
+ {
+ s->KeyboardSubType = i->my_settings.KeyboardSubType.value;
+ }
+ if (i->my_settings.KeyboardFunctionKey.name
+ && i->my_settings.KeyboardFunctionKey.name[0] == '1')
+ {
+ s->KeyboardFunctionKey
+ = i->my_settings.KeyboardFunctionKey.value;
+ }
+ if (i->my_settings.KeyboardLayout.name
+ && i->my_settings.KeyboardLayout.name[0] == '1')
+ {
+ s->KeyboardLayout = i->my_settings.KeyboardLayout.value;
+ }
+ if (i->my_settings.UseRdpSecurityLayer.name
+ && i->my_settings.UseRdpSecurityLayer.name[0] == '1')
+ {
+ s->UseRdpSecurityLayer
+ = i->my_settings.UseRdpSecurityLayer.value;
+ }
+ if (i->my_settings.SaltedChecksum.name
+ && i->my_settings.SaltedChecksum.name[0] == '1')
+ {
+ s->SaltedChecksum = i->my_settings.SaltedChecksum.value;
+ }
+ if (i->my_settings.ServerPort.name
+ && i->my_settings.ServerPort.name[0] == '1')
+ {
+ s->ServerPort = i->my_settings.ServerPort.value;
+ }
+ if (i->my_settings.GatewayPort.name
+ && i->my_settings.GatewayPort.name[0] == '1')
+ {
+ s->GatewayPort = i->my_settings.GatewayPort.value;
+ }
+ if (i->my_settings.DesktopResize.name
+ && i->my_settings.DesktopResize.name[0] == '1')
+ {
+ s->DesktopResize = i->my_settings.DesktopResize.value;
+ }
+ if (i->my_settings.ToggleFullscreen.name
+ && i->my_settings.ToggleFullscreen.name[0] == '1')
+ {
+ s->ToggleFullscreen = i->my_settings.ToggleFullscreen.value;
+ }
+ if (i->my_settings.Floatbar.name
+ && i->my_settings.Floatbar.name[0] == '1')
+ {
+ s->Floatbar = i->my_settings.Floatbar.value;
+ }
+ if (i->my_settings.DesktopPosX.name
+ && i->my_settings.DesktopPosX.name[0] == '1')
+ {
+ s->DesktopPosX = i->my_settings.DesktopPosX.value;
+ }
+ if (i->my_settings.DesktopPosY.name
+ && i->my_settings.DesktopPosY.name[0] == '1')
+ {
+ s->DesktopPosY = i->my_settings.DesktopPosY.value;
+ }
+ if (i->my_settings.SoftwareGdi.name
+ && i->my_settings.SoftwareGdi.name[0] == '1')
+ {
+ s->SoftwareGdi = i->my_settings.SoftwareGdi.value;
+ }
+ if (i->my_settings.UnmapButtons.name
+ && i->my_settings.UnmapButtons.name[0] == '1')
+ {
+ s->UnmapButtons = i->my_settings.UnmapButtons.value;
+ }
+ if (i->my_settings.PerformanceFlags.name
+ && i->my_settings.PerformanceFlags.name[0] == '1')
+ {
+ s->PerformanceFlags = i->my_settings.PerformanceFlags.value;
+ }
+ if (i->my_settings.AllowFontSmoothing.name
+ && i->my_settings.AllowFontSmoothing.name[0] == '1')
+ {
+ s->AllowFontSmoothing = i->my_settings.AllowFontSmoothing.value;
+ }
+ if (i->my_settings.AllowDesktopComposition.name
+ && i->my_settings.AllowDesktopComposition.name[0] == '1')
+ {
+ s->AllowDesktopComposition
+ = i->my_settings.AllowDesktopComposition.value;
+ }
+ if (i->my_settings.DisableWallpaper.name
+ && i->my_settings.DisableWallpaper.name[0] == '1')
+ {
+ s->DisableWallpaper = i->my_settings.DisableWallpaper.value;
+ }
+ if (i->my_settings.DisableFullWindowDrag.name
+ && i->my_settings.DisableFullWindowDrag.name[0] == '1')
+ {
+ s->DisableFullWindowDrag
+ = i->my_settings.DisableFullWindowDrag.value;
+ }
+ if (i->my_settings.DisableMenuAnims.name
+ && i->my_settings.DisableMenuAnims.name[0] == '1')
+ {
+ s->DisableMenuAnims = i->my_settings.DisableMenuAnims.value;
+ }
+ if (i->my_settings.DisableThemes.name
+ && i->my_settings.DisableThemes.name[0] == '1')
+ {
+ s->DisableThemes = i->my_settings.DisableThemes.value;
+ }
+ if (i->my_settings.ConnectionType.name
+ && i->my_settings.ConnectionType.name[0] == '1')
+ {
+ s->ConnectionType = i->my_settings.ConnectionType.value;
+ }
+ if (i->my_settings.EncryptionMethods.name
+ && i->my_settings.EncryptionMethods.name[0] == '1')
+ {
+ s->EncryptionMethods = i->my_settings.EncryptionMethods.value;
+ }
+ if (i->my_settings.EncryptionLevel.name
+ && i->my_settings.EncryptionLevel.name[0] == '1')
+ {
+ s->EncryptionLevel = i->my_settings.EncryptionLevel.value;
+ }
+ if (i->my_settings.FIPSMode.name
+ && i->my_settings.FIPSMode.name[0] == '1')
+ {
+ s->FIPSMode = i->my_settings.FIPSMode.value;
+ }
+ if (i->my_settings.CompressionEnabled.name
+ && i->my_settings.CompressionEnabled.name[0] == '1')
+ {
+ s->CompressionEnabled = i->my_settings.CompressionEnabled.value;
+ }
+ if (i->my_settings.LogonNotify.name
+ && i->my_settings.LogonNotify.name[0] == '1')
+ {
+ s->LogonNotify = i->my_settings.LogonNotify.value;
+ }
+ if (i->my_settings.BrushSupportLevel.name
+ && i->my_settings.BrushSupportLevel.name[0] == '1')
+ {
+ s->BrushSupportLevel = i->my_settings.BrushSupportLevel.value;
+ }
+ if (i->my_settings.RemoteApplicationMode.name
+ && i->my_settings.RemoteApplicationMode.name[0] == '1')
+ {
+ s->RemoteApplicationMode
+ = i->my_settings.RemoteApplicationMode.value;
+ }
+ if (i->my_settings.TcpAckTimeout.name
+ && i->my_settings.TcpAckTimeout.name[0] == '1')
+ {
+ s->TcpAckTimeout = i->my_settings.TcpAckTimeout.value;
+ }
+ /* new settings from freerdp header (integers) end */
+
+ /* TODO: handle rest of options:
+ * fntlm
+ */
+
+ return true;
+}