mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
core: Fix and extend populate rdp file from settings
This PR contains the following changes: - Get rid of unused SettingsModified array (kept in the settings struct for ABI compatibility) - Fix and extend freerdp_client_populate_rdp_file_form_settings (wrote <null> strings to the rdp file, missed a lot of settings) - Set KeyboardHook default value to 2 (hook in fullscreen) just as mstsc does
This commit is contained in:
committed by
akallabeth
parent
18be45eca1
commit
baca062321
@@ -841,74 +841,85 @@ BOOL freerdp_client_parse_rdp_file_ex(rdpFile* file, const char* name, rdp_file_
|
||||
return status;
|
||||
}
|
||||
|
||||
#define WRITE_ALL_SETTINGS TRUE
|
||||
#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
|
||||
|
||||
#define SETTING_MODIFIED_SET_BOOL(_target, _settings, _field) \
|
||||
if \
|
||||
SETTING_MODIFIED(_settings, _field) \
|
||||
_target = _settings->_field ? 1 : 0
|
||||
|
||||
#define SETTING_MODIFIED_SET_STRING(_target, _settings, _field) \
|
||||
do \
|
||||
{ \
|
||||
if \
|
||||
SETTING_MODIFIED(_settings, _field) _target = _strdup(_settings->_field); \
|
||||
if (!_target && _settings->_field) \
|
||||
return FALSE; \
|
||||
#define FILE_POPULATE_STRING(_target, _setting) \
|
||||
do \
|
||||
{ \
|
||||
if (_setting) \
|
||||
{ \
|
||||
_target = _strdup(_setting); \
|
||||
if (!_target) \
|
||||
return FALSE; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
BOOL freerdp_client_populate_rdp_file_from_settings(rdpFile* file, const rdpSettings* settings)
|
||||
{
|
||||
SETTING_MODIFIED_SET_STRING(file->Domain, settings, Domain);
|
||||
SETTING_MODIFIED_SET_STRING(file->Username, settings, Username);
|
||||
SETTING_MODIFIED_SET_STRING(file->Password, settings, Password);
|
||||
SETTING_MODIFIED_SET(file->ServerPort, settings, ServerPort);
|
||||
SETTING_MODIFIED_SET_STRING(file->FullAddress, settings, ServerHostname);
|
||||
SETTING_MODIFIED_SET_STRING(file->AlternateFullAddress, settings, ServerHostname);
|
||||
SETTING_MODIFIED_SET(file->DesktopWidth, settings, DesktopWidth);
|
||||
SETTING_MODIFIED_SET(file->DesktopHeight, settings, DesktopHeight);
|
||||
SETTING_MODIFIED_SET(file->SessionBpp, settings, ColorDepth);
|
||||
SETTING_MODIFIED_SET_BOOL(file->ConnectToConsole, settings, ConsoleSession);
|
||||
SETTING_MODIFIED_SET_BOOL(file->AdministrativeSession, settings, ConsoleSession);
|
||||
SETTING_MODIFIED_SET_BOOL(file->NegotiateSecurityLayer, settings, NegotiateSecurityLayer);
|
||||
SETTING_MODIFIED_SET_BOOL(file->EnableCredSSPSupport, settings, NlaSecurity);
|
||||
SETTING_MODIFIED_SET_STRING(file->AlternateShell, settings, AlternateShell);
|
||||
SETTING_MODIFIED_SET_STRING(file->ShellWorkingDirectory, settings, ShellWorkingDirectory);
|
||||
SETTING_MODIFIED_SET(file->ConnectionType, settings, ConnectionType);
|
||||
SETTING_MODIFIED_SET_STRING(file->DrivesToRedirect, settings, DrivesToRedirect);
|
||||
FILE_POPULATE_STRING(file->Domain, settings->Domain);
|
||||
FILE_POPULATE_STRING(file->Username, settings->Username);
|
||||
FILE_POPULATE_STRING(file->Password, settings->Password);
|
||||
file->ServerPort = settings->ServerPort;
|
||||
FILE_POPULATE_STRING(file->FullAddress, settings->ServerHostname);
|
||||
FILE_POPULATE_STRING(file->AlternateFullAddress, settings->ServerHostname);
|
||||
file->DesktopWidth = settings->DesktopWidth;
|
||||
file->DesktopHeight = settings->DesktopHeight;
|
||||
file->SessionBpp = settings->ColorDepth;
|
||||
file->ConnectToConsole = settings->ConsoleSession;
|
||||
file->NegotiateSecurityLayer = settings->NegotiateSecurityLayer;
|
||||
file->EnableCredSSPSupport = settings->NlaSecurity;
|
||||
FILE_POPULATE_STRING(file->AlternateShell, settings->AlternateShell);
|
||||
FILE_POPULATE_STRING(file->ShellWorkingDirectory, settings->ShellWorkingDirectory);
|
||||
file->ConnectionType = settings->ConnectionType;
|
||||
FILE_POPULATE_STRING(file->DrivesToRedirect, settings->DrivesToRedirect);
|
||||
file->ScreenModeId = settings->Fullscreen ? 2 : 1;
|
||||
|
||||
if (SETTING_MODIFIED(settings, AudioPlayback) || SETTING_MODIFIED(settings, RemoteConsoleAudio))
|
||||
if (settings->LoadBalanceInfoLength)
|
||||
{
|
||||
if (settings->AudioPlayback)
|
||||
file->AudioMode = AUDIO_MODE_REDIRECT;
|
||||
else if (settings->RemoteConsoleAudio)
|
||||
file->AudioMode = AUDIO_MODE_PLAY_ON_SERVER;
|
||||
else
|
||||
file->AudioMode = AUDIO_MODE_NONE;
|
||||
file->LoadBalanceInfo = calloc(settings->LoadBalanceInfoLength + 1, 1);
|
||||
if (!file->LoadBalanceInfo)
|
||||
return FALSE;
|
||||
strncpy(file->LoadBalanceInfo, settings->LoadBalanceInfo, settings->LoadBalanceInfoLength);
|
||||
}
|
||||
|
||||
SETTING_MODIFIED_SET_BOOL(file->AudioCaptureMode, settings, AudioCapture);
|
||||
SETTING_MODIFIED_SET_STRING(file->GatewayHostname, settings, GatewayHostname);
|
||||
SETTING_MODIFIED_SET_STRING(file->GatewayAccessToken, settings, GatewayAccessToken);
|
||||
SETTING_MODIFIED_SET(file->GatewayUsageMethod, settings, GatewayUsageMethod);
|
||||
SETTING_MODIFIED_SET_BOOL(file->PromptCredentialOnce, settings, GatewayUseSameCredentials);
|
||||
SETTING_MODIFIED_SET_BOOL(file->PromptForCredentials, settings, PromptForCredentials);
|
||||
SETTING_MODIFIED_SET_BOOL(file->RemoteApplicationMode, settings, RemoteApplicationMode);
|
||||
SETTING_MODIFIED_SET_STRING(file->RemoteApplicationProgram, settings, RemoteApplicationProgram);
|
||||
SETTING_MODIFIED_SET_STRING(file->RemoteApplicationName, settings, RemoteApplicationName);
|
||||
SETTING_MODIFIED_SET_STRING(file->RemoteApplicationIcon, settings, RemoteApplicationIcon);
|
||||
SETTING_MODIFIED_SET_STRING(file->RemoteApplicationFile, settings, RemoteApplicationFile);
|
||||
SETTING_MODIFIED_SET_STRING(file->RemoteApplicationGuid, settings, RemoteApplicationGuid);
|
||||
SETTING_MODIFIED_SET_STRING(file->RemoteApplicationCmdLine, settings, RemoteApplicationCmdLine);
|
||||
SETTING_MODIFIED_SET_BOOL(file->SpanMonitors, settings, SpanMonitors);
|
||||
SETTING_MODIFIED_SET_BOOL(file->UseMultiMon, settings, UseMultimon);
|
||||
SETTING_MODIFIED_SET_STRING(file->PreconnectionBlob, settings, PreconnectionBlob);
|
||||
if (settings->AudioPlayback)
|
||||
file->AudioMode = AUDIO_MODE_REDIRECT;
|
||||
else if (settings->RemoteConsoleAudio)
|
||||
file->AudioMode = AUDIO_MODE_PLAY_ON_SERVER;
|
||||
else
|
||||
file->AudioMode = AUDIO_MODE_NONE;
|
||||
|
||||
file->AudioCaptureMode = settings->AudioCapture;
|
||||
file->Compression = settings->CompressionEnabled;
|
||||
FILE_POPULATE_STRING(file->GatewayHostname, settings->GatewayHostname);
|
||||
FILE_POPULATE_STRING(file->GatewayAccessToken, settings->GatewayAccessToken);
|
||||
file->GatewayUsageMethod = settings->GatewayUsageMethod;
|
||||
file->PromptCredentialOnce = settings->GatewayUseSameCredentials;
|
||||
file->PromptForCredentials = settings->PromptForCredentials;
|
||||
file->RemoteApplicationMode = settings->RemoteApplicationMode;
|
||||
FILE_POPULATE_STRING(file->RemoteApplicationProgram, settings->RemoteApplicationProgram);
|
||||
FILE_POPULATE_STRING(file->RemoteApplicationName, settings->RemoteApplicationName);
|
||||
FILE_POPULATE_STRING(file->RemoteApplicationIcon, settings->RemoteApplicationIcon);
|
||||
FILE_POPULATE_STRING(file->RemoteApplicationFile, settings->RemoteApplicationFile);
|
||||
FILE_POPULATE_STRING(file->RemoteApplicationGuid, settings->RemoteApplicationGuid);
|
||||
FILE_POPULATE_STRING(file->RemoteApplicationCmdLine, settings->RemoteApplicationCmdLine);
|
||||
file->SpanMonitors = settings->SpanMonitors;
|
||||
file->UseMultiMon = settings->UseMultimon;
|
||||
file->AllowFontSmoothing = settings->AllowFontSmoothing;
|
||||
file->DisableWallpaper = settings->DisableWallpaper;
|
||||
file->DisableFullWindowDrag = settings->DisableFullWindowDrag;
|
||||
file->DisableMenuAnims = settings->DisableMenuAnims;
|
||||
file->DisableThemes = settings->DisableThemes;
|
||||
file->BandwidthAutoDetect = (settings->ConnectionType >= 7) ? TRUE : FALSE;
|
||||
file->NetworkAutoDetect = settings->NetworkAutoDetect;
|
||||
file->AutoReconnectionEnabled = settings->AutoReconnectionEnabled;
|
||||
file->RedirectSmartCards = settings->RedirectSmartCards;
|
||||
file->RedirectClipboard = settings->RedirectClipboard;
|
||||
file->RedirectPrinters = settings->RedirectPrinters;
|
||||
file->RedirectDrives = settings->RedirectDrives;
|
||||
file->RedirectComPorts = (settings->RedirectSerialPorts || settings->RedirectParallelPorts);
|
||||
FILE_POPULATE_STRING(file->DrivesToRedirect, settings->DrivesToRedirect);
|
||||
file->KeyboardHook = settings->KeyboardHook;
|
||||
FILE_POPULATE_STRING(file->PreconnectionBlob, settings->PreconnectionBlob);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -1551,7 +1551,7 @@ struct rdp_settings
|
||||
ALIGN64 struct rdp_ext_set extensions[16]; /* */
|
||||
|
||||
ALIGN64 BYTE* SettingsModified; /* byte array marking fields that have been modified from their
|
||||
default value */
|
||||
default value - currently UNUSED! */
|
||||
ALIGN64 char* ActionScript;
|
||||
ALIGN64 DWORD Floatbar;
|
||||
};
|
||||
|
||||
@@ -346,6 +346,7 @@ rdpSettings* freerdp_settings_new(DWORD flags)
|
||||
settings->KeyboardSubType = 0;
|
||||
settings->KeyboardFunctionKey = 12;
|
||||
settings->KeyboardLayout = 0;
|
||||
settings->KeyboardHook = 2;
|
||||
settings->UseRdpSecurityLayer = FALSE;
|
||||
settings->SaltedChecksum = TRUE;
|
||||
settings->ServerPort = 3389;
|
||||
@@ -605,10 +606,6 @@ rdpSettings* freerdp_settings_new(DWORD flags)
|
||||
}
|
||||
|
||||
settings_load_hkey_local_machine(settings);
|
||||
settings->SettingsModified = (BYTE*)calloc(1, sizeof(rdpSettings) / 8);
|
||||
|
||||
if (!settings->SettingsModified)
|
||||
goto out_fail;
|
||||
|
||||
settings->ActionScript = _strdup("~/.config/freerdp/action.sh");
|
||||
settings->SmartcardLogon = FALSE;
|
||||
@@ -713,7 +710,6 @@ static void freerdp_settings_free_internal(rdpSettings* settings)
|
||||
freerdp_device_collection_free(settings);
|
||||
freerdp_static_channel_collection_free(settings);
|
||||
freerdp_dynamic_channel_collection_free(settings);
|
||||
free(settings->SettingsModified);
|
||||
memset(settings, 0, sizeof(rdpSettings));
|
||||
}
|
||||
|
||||
@@ -1111,11 +1107,6 @@ BOOL freerdp_settings_copy(rdpSettings* _settings, const rdpSettings* settings)
|
||||
goto out_fail;
|
||||
}
|
||||
|
||||
_settings->SettingsModified = (BYTE*)calloc(1, sizeof(rdpSettings) / 8);
|
||||
|
||||
if (!_settings->SettingsModified)
|
||||
goto out_fail;
|
||||
|
||||
return TRUE;
|
||||
out_fail:
|
||||
freerdp_settings_free_internal(_settings);
|
||||
|
||||
Reference in New Issue
Block a user