diff --git a/client/common/CMakeLists.txt b/client/common/CMakeLists.txt index c6da3a9ec..709f59ef4 100644 --- a/client/common/CMakeLists.txt +++ b/client/common/CMakeLists.txt @@ -29,6 +29,7 @@ set(SRCS client.c client_rails.c cmdline.c + cmdline.h file.c client_cliprdr_file.c geometry.c diff --git a/client/common/client.c b/client/common/client.c index e9f6731d7..011f8c450 100644 --- a/client/common/client.c +++ b/client/common/client.c @@ -66,6 +66,17 @@ #include #define TAG CLIENT_TAG("common") +static void set_default_callbacks(freerdp* instance) +{ + WINPR_ASSERT(instance); + instance->AuthenticateEx = client_cli_authenticate_ex; + instance->ChooseSmartcard = client_cli_choose_smartcard; + instance->VerifyCertificateEx = client_cli_verify_certificate_ex; + instance->VerifyChangedCertificateEx = client_cli_verify_changed_certificate_ex; + instance->PresentGatewayMessage = client_cli_present_gateway_message; + instance->LogonErrorInfo = client_cli_logon_error_info; +} + static BOOL freerdp_client_common_new(freerdp* instance, rdpContext* context) { RDP_CLIENT_ENTRY_POINTS* pEntryPoints; @@ -74,12 +85,7 @@ static BOOL freerdp_client_common_new(freerdp* instance, rdpContext* context) WINPR_ASSERT(context); instance->LoadChannels = freerdp_client_load_channels; - instance->AuthenticateEx = client_cli_authenticate_ex; - instance->ChooseSmartcard = client_cli_choose_smartcard; - instance->VerifyCertificateEx = client_cli_verify_certificate_ex; - instance->VerifyChangedCertificateEx = client_cli_verify_changed_certificate_ex; - instance->PresentGatewayMessage = client_cli_present_gateway_message; - instance->LogonErrorInfo = client_cli_logon_error_info; + set_default_callbacks(instance); pEntryPoints = instance->pClientEntryPoints; WINPR_ASSERT(pEntryPoints); @@ -173,6 +179,9 @@ int freerdp_client_start(rdpContext* context) if (!context || !context->instance || !context->instance->pClientEntryPoints) return ERROR_BAD_ARGUMENTS; + if (freerdp_settings_get_bool(context->settings, FreeRDP_UseCommonStdioCallbacks)) + set_default_callbacks(context->instance); + pEntryPoints = context->instance->pClientEntryPoints; return IFCALLRESULT(CHANNEL_RC_OK, pEntryPoints->ClientStart, context); } diff --git a/client/common/cmdline.c b/client/common/cmdline.c index 37f38ac32..e809acedf 100644 --- a/client/common/cmdline.c +++ b/client/common/cmdline.c @@ -4058,11 +4058,15 @@ static int freerdp_client_settings_parse_command_line_arguments_int(rdpSettings* } CommandLineSwitchCase(arg, "unmap-buttons") { - settings->UnmapButtons = enable; + freerdp_settings_set_bool(settings, FreeRDP_UnmapButtons, enable); } CommandLineSwitchCase(arg, "toggle-fullscreen") { - settings->ToggleFullscreen = enable; + freerdp_settings_set_bool(settings, FreeRDP_ToggleFullscreen, enable); + } + CommandLineSwitchCase(arg, "force-console-callbacks") + { + freerdp_settings_set_bool(settings, FreeRDP_UseCommonStdioCallbacks, enable); } CommandLineSwitchCase(arg, "floatbar") { diff --git a/client/common/cmdline.h b/client/common/cmdline.h index 641def1b2..67d98fca5 100644 --- a/client/common/cmdline.h +++ b/client/common/cmdline.h @@ -163,6 +163,8 @@ static const COMMAND_LINE_ARGUMENT_A global_cmd_args[] = { "floatbar is disabled by default (when enabled defaults to sticky in fullscreen mode)" }, { "fonts", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueTrue, NULL, -1, NULL, "smooth fonts (ClearType)" }, + { "force-console-callbacks", COMMAND_LINE_VALUE_BOOL, NULL, BoolValueFalse, NULL, -1, NULL, + "Use default callbacks (console) for certificate/credential/..." }, { "frame-ack", COMMAND_LINE_VALUE_REQUIRED, "", NULL, NULL, -1, NULL, "Number of frame acknowledgement" }, { "args-from", COMMAND_LINE_VALUE_REQUIRED, "|stdin|fd:|env:", NULL, NULL, diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 232840834..1c050ba80 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -734,6 +734,7 @@ extern "C" #define FreeRDP_UnmapButtons (1605) #define FreeRDP_OldLicenseBehaviour (1606) #define FreeRDP_MouseUseRelativeMove (1607) +#define FreeRDP_UseCommonStdioCallbacks (1608) #define FreeRDP_ComputerName (1664) #define FreeRDP_ConnectionFile (1728) #define FreeRDP_AssistanceFile (1729) @@ -1293,7 +1294,8 @@ extern "C" ALIGN64 BOOL UnmapButtons; /* 1605 */ ALIGN64 BOOL OldLicenseBehaviour; /* 1606 */ ALIGN64 BOOL MouseUseRelativeMove; /* 1607 */ - UINT64 padding1664[1664 - 1608]; /* 1608 */ + ALIGN64 BOOL UseCommonStdioCallbacks; /* 1608 */ + UINT64 padding1664[1664 - 1609]; /* 1609 */ /* Names */ ALIGN64 char* ComputerName; /* 1664 */ diff --git a/libfreerdp/common/settings_getters.c b/libfreerdp/common/settings_getters.c index 7fe9c2283..ac971c2c1 100644 --- a/libfreerdp/common/settings_getters.c +++ b/libfreerdp/common/settings_getters.c @@ -582,6 +582,9 @@ BOOL freerdp_settings_get_bool(const rdpSettings* settings, size_t id) case FreeRDP_UnmapButtons: return settings->UnmapButtons; + case FreeRDP_UseCommonStdioCallbacks: + return settings->UseCommonStdioCallbacks; + case FreeRDP_UseMultimon: return settings->UseMultimon; @@ -1326,6 +1329,10 @@ BOOL freerdp_settings_set_bool(rdpSettings* settings, size_t id, BOOL val) settings->UnmapButtons = cnv.c; break; + case FreeRDP_UseCommonStdioCallbacks: + settings->UseCommonStdioCallbacks = cnv.c; + break; + case FreeRDP_UseMultimon: settings->UseMultimon = cnv.c; break; diff --git a/libfreerdp/common/settings_str.c b/libfreerdp/common/settings_str.c index 48f013c88..c9f57e72c 100644 --- a/libfreerdp/common/settings_str.c +++ b/libfreerdp/common/settings_str.c @@ -241,6 +241,8 @@ static const struct settings_str_entry settings_map[] = { { FreeRDP_TransportDumpReplay, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_TransportDumpReplay" }, { FreeRDP_UnicodeInput, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_UnicodeInput" }, { FreeRDP_UnmapButtons, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_UnmapButtons" }, + { FreeRDP_UseCommonStdioCallbacks, FREERDP_SETTINGS_TYPE_BOOL, + "FreeRDP_UseCommonStdioCallbacks" }, { FreeRDP_UseMultimon, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_UseMultimon" }, { FreeRDP_UseRdpSecurityLayer, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_UseRdpSecurityLayer" }, { FreeRDP_UsingSavedCredentials, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_UsingSavedCredentials" }, diff --git a/libfreerdp/core/test/settings_property_lists.h b/libfreerdp/core/test/settings_property_lists.h index f4247b322..b4a695295 100644 --- a/libfreerdp/core/test/settings_property_lists.h +++ b/libfreerdp/core/test/settings_property_lists.h @@ -178,6 +178,7 @@ static const size_t bool_list_indices[] = { FreeRDP_TransportDumpReplay, FreeRDP_UnicodeInput, FreeRDP_UnmapButtons, + FreeRDP_UseCommonStdioCallbacks, FreeRDP_UseMultimon, FreeRDP_UseRdpSecurityLayer, FreeRDP_UsingSavedCredentials,