FreeRDP
Loading...
Searching...
No Matches
rdpSettings

This is the FreeRDP settings module. More...

Data Structures

struct  TARGET_NET_ADDRESS
 
struct  ARC_CS_PRIVATE_PACKET
 
struct  ARC_SC_PRIVATE_PACKET
 
struct  ADDIN_ARGV
 
struct  rdp_ext_set
 
struct  BITMAP_CACHE_CELL_INFO
 
struct  BITMAP_CACHE_V2_CELL_INFO
 
struct  GLYPH_CACHE_DEFINITION
 
struct  MONITOR_DEF
 
struct  MONITOR_ATTRIBUTES
 
struct  rdpMonitor
 
struct  RDPDR_DEVICE
 
struct  RDPDR_DRIVE
 
struct  RDPDR_PRINTER
 
struct  RDPDR_SMARTCARD
 
struct  RDPDR_SERIAL
 
struct  RDPDR_PARALLEL
 
struct  rdpSettings
 

Macros

#define FREERDP_SETTINGS_SERVER_MODE   0x00000001
 
#define FREERDP_SETTINGS_REMOTE_MODE   0x00000002
 
#define SURFCMDS_SET_SURFACE_BITS   0x00000002 /** @since version 3.7.0 */
 
#define SURFCMDS_FRAME_MARKER   0x00000010 /** @since version 3.7.0 */
 
#define SURFCMDS_STREAM_SURFACE_BITS   0x00000040 /** @since version 3.7.0 */
 
#define RAIL_LEVEL_SUPPORTED   0x00000001
 
#define RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED   0x00000002
 
#define RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED   0x00000004
 
#define RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED   0x00000008
 
#define RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED   0x00000010
 
#define RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED   0x00000020
 
#define RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED   0x00000040
 
#define RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED   0x00000080
 
#define PERF_FLAG_NONE   0x00000000
 
#define PERF_DISABLE_WALLPAPER   0x00000001
 
#define PERF_DISABLE_FULLWINDOWDRAG   0x00000002
 
#define PERF_DISABLE_MENUANIMATIONS   0x00000004
 
#define PERF_DISABLE_THEMING   0x00000008
 
#define PERF_DISABLE_CURSOR_SHADOW   0x00000020
 
#define PERF_DISABLE_CURSORSETTINGS   0x00000040
 
#define PERF_ENABLE_FONT_SMOOTHING   0x00000080
 
#define PERF_ENABLE_DESKTOP_COMPOSITION   0x00000100
 
#define CONNECTION_TYPE_INVALID
 
#define CONNECTION_TYPE_MODEM   0x01
 
#define CONNECTION_TYPE_BROADBAND_LOW   0x02
 
#define CONNECTION_TYPE_SATELLITE   0x03
 
#define CONNECTION_TYPE_BROADBAND_HIGH   0x04
 
#define CONNECTION_TYPE_WAN   0x05
 
#define CONNECTION_TYPE_LAN   0x06
 
#define CONNECTION_TYPE_AUTODETECT   0x07
 
#define CS_CORE   0xC001
 
#define CS_SECURITY   0xC002
 
#define CS_NET   0xC003
 
#define CS_CLUSTER   0xC004
 
#define CS_MONITOR   0xC005
 
#define CS_MCS_MSGCHANNEL   0xC006
 
#define CS_MONITOR_EX   0xC008
 
#define CS_UNUSED1   0xC00C
 
#define CS_MULTITRANSPORT   0xC00A
 
#define SC_CORE   0x0C01
 
#define SC_SECURITY   0x0C02
 
#define SC_NET   0x0C03
 
#define SC_MCS_MSGCHANNEL   0x0C04
 
#define SC_MULTITRANSPORT   0x0C08
 
#define RNS_UD_COLOR_4BPP   0xCA00
 
#define RNS_UD_COLOR_8BPP   0xCA01
 
#define RNS_UD_COLOR_16BPP_555   0xCA02
 
#define RNS_UD_COLOR_16BPP_565   0xCA03
 
#define RNS_UD_COLOR_24BPP   0xCA04
 
#define RNS_UD_SAS_DEL   0xAA03
 
#define RNS_UD_24BPP_SUPPORT   0x0001
 
#define RNS_UD_16BPP_SUPPORT   0x0002
 
#define RNS_UD_15BPP_SUPPORT   0x0004
 
#define RNS_UD_32BPP_SUPPORT   0x0008
 
#define AUDIO_MODE_REDIRECT   0 /* Bring to this computer */
 
#define AUDIO_MODE_PLAY_ON_SERVER   1 /* Leave at remote computer */
 
#define AUDIO_MODE_NONE   2 /* Do not play */
 
#define RNS_UD_CS_SUPPORT_ERRINFO_PDU   0x0001
 
#define RNS_UD_CS_WANT_32BPP_SESSION   0x0002
 
#define RNS_UD_CS_SUPPORT_STATUSINFO_PDU   0x0004
 
#define RNS_UD_CS_STRONG_ASYMMETRIC_KEYS   0x0008
 
#define RNS_UD_CS_RELATIVE_MOUSE_INPUT   0x0010
 
#define RNS_UD_CS_VALID_CONNECTION_TYPE   0x0020
 
#define RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU   0x0040
 
#define RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT   0x0080
 
#define RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL   0x0100
 
#define RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE   0x0200
 
#define RNS_UD_CS_SUPPORT_HEARTBEAT_PDU   0x0400
 
#define RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN   0x0800
 
#define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V1   0x00000001
 
#define RNS_UD_SC_DYNAMIC_DST_SUPPORTED   0x00000002
 
#define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V2   0x00000004
 
#define RNS_UD_SC_SKIP_CHANNELJOIN_SUPPORTED   0x00000008
 
#define REDIRECTION_SUPPORTED   0x00000001
 
#define REDIRECTED_SESSIONID_FIELD_VALID   0x00000002
 
#define REDIRECTED_SMARTCARD   0x00000040
 
#define ServerSessionRedirectionVersionMask   0x0000003c
 
#define REDIRECTION_VERSION1   0x00
 
#define REDIRECTION_VERSION2   0x01
 
#define REDIRECTION_VERSION3   0x02
 
#define REDIRECTION_VERSION4   0x03
 
#define REDIRECTION_VERSION5   0x04
 
#define REDIRECTION_VERSION6   0x05
 
#define MONITOR_PRIMARY   0x00000001
 
#define ENCRYPTION_METHOD_NONE   0x00000000
 
#define ENCRYPTION_METHOD_40BIT   0x00000001
 
#define ENCRYPTION_METHOD_128BIT   0x00000002
 
#define ENCRYPTION_METHOD_56BIT   0x00000008
 
#define ENCRYPTION_METHOD_FIPS   0x00000010
 
#define ENCRYPTION_LEVEL_NONE   0x00000000
 
#define ENCRYPTION_LEVEL_LOW   0x00000001
 
#define ENCRYPTION_LEVEL_CLIENT_COMPATIBLE   0x00000002
 
#define ENCRYPTION_LEVEL_HIGH   0x00000003
 
#define ENCRYPTION_LEVEL_FIPS   0x00000004
 
#define TRANSPORT_TYPE_UDP_FECR   0x00000001
 
#define TRANSPORT_TYPE_UDP_FECL   0x00000004
 
#define TRANSPORT_TYPE_UDP_PREFERRED   0x00000100
 
#define SOFTSYNC_TCP_TO_UDP   0x00000200
 
#define CHANNEL_OPTION_INITIALIZED   0x80000000
 
#define CHANNEL_OPTION_ENCRYPT_RDP   0x40000000
 
#define CHANNEL_OPTION_ENCRYPT_SC   0x20000000
 
#define CHANNEL_OPTION_ENCRYPT_CS   0x10000000
 
#define CHANNEL_OPTION_PRI_HIGH   0x08000000
 
#define CHANNEL_OPTION_PRI_MED   0x04000000
 
#define CHANNEL_OPTION_PRI_LOW   0x02000000
 
#define CHANNEL_OPTION_COMPRESS_RDP   0x00800000
 
#define CHANNEL_OPTION_COMPRESS   0x00400000
 
#define CHANNEL_OPTION_SHOW_PROTOCOL   0x00200000
 
#define CHANNEL_REMOTE_CONTROL_PERSISTENT   0x00100000
 
#define VCCAPS_NO_COMPR   0x00000000
 
#define VCCAPS_COMPR_SC   0x00000001
 
#define VCCAPS_COMPR_CS_8K   0x00000002
 
#define LARGE_POINTER_FLAG_96x96   0x00000001
 
#define LARGE_POINTER_FLAG_384x384   0x00000002
 
#define AUTO_RECONNECT_VERSION_1   0x00000001
 
#define MSTSC_COOKIE_MAX_LENGTH   9
 
#define DEFAULT_COOKIE_MAX_LENGTH   0xFF
 
#define TS_CAPS_PROTOCOLVERSION   0x200 /** @since version 3.6.0 */
 
#define GLYPH_SUPPORT_NONE   0x0000
 
#define GLYPH_SUPPORT_PARTIAL   0x0001
 
#define GLYPH_SUPPORT_FULL   0x0002
 
#define GLYPH_SUPPORT_ENCODE   0x0003
 
#define TSC_PROXY_MODE_NONE_DIRECT   0x0
 
#define TSC_PROXY_MODE_DIRECT   0x1
 
#define TSC_PROXY_MODE_DETECT   0x2
 
#define TSC_PROXY_MODE_DEFAULT   0x3
 
#define TSC_PROXY_MODE_NONE_DETECT   0x4
 
#define TSC_PROXY_CREDS_MODE_USERPASS   0x0
 
#define TSC_PROXY_CREDS_MODE_SMARTCARD   0x1
 
#define TSC_PROXY_CREDS_MODE_ANY   0x2
 
#define KEYBOARD_HOOK_LOCAL   0
 
#define KEYBOARD_HOOK_REMOTE   1
 
#define KEYBOARD_HOOK_FULLSCREEN_ONLY   2
 
#define LOGON_MSG_SESSION_BUSY_OPTIONS   0xFFFFFFF8
 
#define LOGON_MSG_DISCONNECT_REFUSED   0xFFFFFFF9
 
#define LOGON_MSG_NO_PERMISSION   0xFFFFFFFA
 
#define LOGON_MSG_BUMP_OPTIONS   0xFFFFFFFB
 
#define LOGON_MSG_RECONNECT_OPTIONS   0xFFFFFFFC
 
#define LOGON_MSG_SESSION_TERMINATE   0xFFFFFFFD
 
#define LOGON_MSG_SESSION_CONTINUE   0xFFFFFFFE
 
#define ERROR_CODE_ACCESS_DENIED   0xFFFFFFFF
 
#define LOGON_FAILED_BAD_PASSWORD   0x00000000
 
#define LOGON_FAILED_UPDATE_PASSWORD   0x00000001
 
#define LOGON_FAILED_OTHER   0x00000002
 
#define LOGON_WARNING   0x00000003
 
#define STATUS_FINDING_DESTINATION   0x00000401
 
#define STATUS_LOADING_DESTINATION   0x00000402
 
#define STATUS_BRINGING_SESSION_ONLINE   0x00000403
 
#define STATUS_REDIRECTING_TO_DESTINATION   0x00000404
 
#define STATUS_VM_LOADING   0x00000501
 
#define STATUS_VM_WAKING   0x00000502
 
#define STATUS_VM_BOOTING   0x00000503
 
#define PACKET_COMPR_TYPE_8K   0x00
 
#define PACKET_COMPR_TYPE_64K   0x01
 
#define PACKET_COMPR_TYPE_RDP6   0x02
 
#define PACKET_COMPR_TYPE_RDP61   0x03
 
#define PACKET_COMPR_TYPE_RDP8   0x04
 
#define CLIPRDR_FLAG_LOCAL_TO_REMOTE   0x01
 
#define CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES   0x02
 
#define CLIPRDR_FLAG_REMOTE_TO_LOCAL   0x10
 
#define CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES   0x20
 
#define CLIPRDR_FLAG_DEFAULT_MASK
 
#define FREERDP_MONITOR_OVERRIDE_ORIENTATION   (1u << 0) /** @since version 3.15.0 */
 
#define FREERDP_MONITOR_OVERRIDE_DESKTOP_SCALE   (1u << 1) /** @since version 3.15.0 */
 
#define FREERDP_MONITOR_OVERRIDE_DEVICE_SCALE   (1u << 2) /** @since version 3.15.0 */
 
#define PROXY_TYPE_NONE   0
 
#define PROXY_TYPE_HTTP   1
 
#define PROXY_TYPE_SOCKS   2
 
#define PROXY_TYPE_IGNORE   0xFFFF
 
#define THREADING_FLAGS_DISABLE_THREADS   0x00000001
 
#define FREERDP_SETTINGS_SERVER_MODE   0x00000001
 
#define SETTINGS_DEPRECATED(x)   WINPR_DEPRECATED(x)
 

Enumerations

enum  RDP_VERSION {
  RDP_VERSION_4 = 0x00080001 , RDP_VERSION_5_PLUS = 0x00080004 , RDP_VERSION_10_0 = 0x00080005 , RDP_VERSION_10_1 = 0x00080006 ,
  RDP_VERSION_10_2 = 0x00080007 , RDP_VERSION_10_3 = 0x00080008 , RDP_VERSION_10_4 = 0x00080009 , RDP_VERSION_10_5 = 0x0008000a ,
  RDP_VERSION_10_6 = 0x0008000b , RDP_VERSION_10_7 = 0x0008000C , RDP_VERSION_10_8 = 0x0008000D , RDP_VERSION_10_9 = 0x0008000E ,
  RDP_VERSION_10_10 = 0x0008000F , RDP_VERSION_10_11 = 0x00080010 , RDP_VERSION_10_12 = 0x00080011
}
 
enum  FreeRDP_OrderSupportFlagConstants {
  NEG_DSTBLT_INDEX = 0x00 , NEG_PATBLT_INDEX = 0x01 , NEG_SCRBLT_INDEX = 0x02 , NEG_MEMBLT_INDEX = 0x03 ,
  NEG_MEM3BLT_INDEX = 0x04 , NEG_ATEXTOUT_INDEX = 0x05 , NEG_AEXTTEXTOUT_INDEX = 0x06 , NEG_DRAWNINEGRID_INDEX = 0x07 ,
  NEG_LINETO_INDEX = 0x08 , NEG_MULTI_DRAWNINEGRID_INDEX = 0x09 , NEG_OPAQUE_RECT_INDEX = 0x0A , NEG_SAVEBITMAP_INDEX = 0x0B ,
  NEG_WTEXTOUT_INDEX = 0x0C , NEG_MEMBLT_V2_INDEX = 0x0D , NEG_MEM3BLT_V2_INDEX = 0x0E , NEG_MULTIDSTBLT_INDEX = 0x0F ,
  NEG_MULTIPATBLT_INDEX = 0x10 , NEG_MULTISCRBLT_INDEX = 0x11 , NEG_MULTIOPAQUERECT_INDEX = 0x12 , NEG_FAST_INDEX_INDEX = 0x13 ,
  NEG_POLYGON_SC_INDEX = 0x14 , NEG_POLYGON_CB_INDEX = 0x15 , NEG_POLYLINE_INDEX = 0x16 , NEG_UNUSED23_INDEX = 0x17 ,
  NEG_FAST_GLYPH_INDEX = 0x18 , NEG_ELLIPSE_SC_INDEX = 0x19 , NEG_ELLIPSE_CB_INDEX = 0x1A , NEG_GLYPH_INDEX_INDEX = 0x1B ,
  NEG_GLYPH_WEXTTEXTOUT_INDEX = 0x1C , NEG_GLYPH_WLONGTEXTOUT_INDEX = 0x1D , NEG_GLYPH_WLONGEXTTEXTOUT_INDEX = 0x1E , NEG_UNUSED31_INDEX = 0x1F
}
 
enum  FreeRDP_DesktopRotationFlags { ORIENTATION_LANDSCAPE = 0 , ORIENTATION_PORTRAIT = 90 , ORIENTATION_LANDSCAPE_FLIPPED = 180 , ORIENTATION_PORTRAIT_FLIPPED = 270 }
 
enum  FreeRDP_TLS_SecLevel {
  FREERDP_TLS_SECLEVEL_0 = 0 , FREERDP_TLS_SECLEVEL_80BIT = 1 , FREERDP_TLS_SECLEVEL_112BIT = 2 , FREERDP_TLS_SECLEVEL_128BIT = 3 ,
  FREERDP_TLS_SECLEVEL_192BIT = 4 , FREERDP_TLS_SECLEVEL_256BIT = 5
}
 convenience names for https://docs.openssl.org/3.0/man3/SSL_CTX_set_security_level/#default-callback-behaviour More...
 
enum  FreeRDP_RDPDR_DTYP {
  RDPDR_DTYP_SERIAL = 0x00000001 , RDPDR_DTYP_PARALLEL = 0x00000002 , RDPDR_DTYP_PRINT = 0x00000004 , RDPDR_DTYP_FILESYSTEM = 0x00000008 ,
  RDPDR_DTYP_SMARTCARD = 0x00000020
}
 
enum  rdp_settings_type {
  RDP_SETTINGS_TYPE_BOOL , RDP_SETTINGS_TYPE_UINT16 , RDP_SETTINGS_TYPE_INT16 , RDP_SETTINGS_TYPE_UINT32 ,
  RDP_SETTINGS_TYPE_INT32 , RDP_SETTINGS_TYPE_UINT64 , RDP_SETTINGS_TYPE_INT64 , RDP_SETTINGS_TYPE_STRING ,
  RDP_SETTINGS_TYPE_POINTER
}
 

Functions

FREERDP_API void freerdp_settings_free (rdpSettings *settings)
 Free a settings struct with all data in it.
 
FREERDP_API rdpSettings * freerdp_settings_new (DWORD flags)
 creates a new setting struct
 
FREERDP_API rdpSettings * freerdp_settings_clone (const rdpSettings *settings)
 Creates a deep copy of settings.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_copy (rdpSettings *dst, const rdpSettings *src)
 Deep copies settings from src to dst.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_copy_item (rdpSettings *dst, const rdpSettings *src, SSIZE_T id)
 copies one setting identified by id from src to dst
 
FREERDP_API void freerdp_settings_dump (wLog *log, DWORD level, const rdpSettings *settings)
 Dumps the contents of a settings struct to a WLog logger.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_print_diff (wLog *log, DWORD level, const rdpSettings *settings, const rdpSettings *other)
 Dumps the difference between two settings structs to a WLog.
 
FREERDP_API void freerdp_addin_argv_free (ADDIN_ARGV *args)
 
FREERDP_API ADDIN_ARGV * freerdp_addin_argv_new (size_t argc, const char *const argv[])
 
FREERDP_API ADDIN_ARGV * freerdp_addin_argv_clone (const ADDIN_ARGV *args)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_addin_argv_add_argument (ADDIN_ARGV *args, const char *argument)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_addin_argv_add_argument_ex (ADDIN_ARGV *args, const char *argument, size_t len)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_addin_argv_del_argument (ADDIN_ARGV *args, const char *argument)
 
WINPR_ATTR_NODISCARD FREERDP_API int freerdp_addin_set_argument (ADDIN_ARGV *args, const char *argument)
 
WINPR_ATTR_NODISCARD FREERDP_API int freerdp_addin_replace_argument (ADDIN_ARGV *args, const char *previous, const char *argument)
 
WINPR_ATTR_NODISCARD FREERDP_API int freerdp_addin_set_argument_value (ADDIN_ARGV *args, const char *option, const char *value)
 
WINPR_ATTR_NODISCARD FREERDP_API int freerdp_addin_replace_argument_value (ADDIN_ARGV *args, const char *previous, const char *option, const char *value)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_device_collection_add (rdpSettings *settings, RDPDR_DEVICE *device)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_device_collection_del (rdpSettings *settings, const RDPDR_DEVICE *device)
 Removed a device from the settings, returns ownership of the allocated device to caller.
 
WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE * freerdp_device_collection_find (rdpSettings *settings, const char *name)
 
WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE * freerdp_device_collection_find_type (rdpSettings *settings, UINT32 type)
 
FREERDP_API void freerdp_device_free (RDPDR_DEVICE *device)
 
FREERDP_API RDPDR_DEVICE * freerdp_device_new (UINT32 Type, size_t count, const char *const args[])
 
FREERDP_API RDPDR_DEVICE * freerdp_device_clone (const RDPDR_DEVICE *device)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_device_equal (const RDPDR_DEVICE *what, const RDPDR_DEVICE *other)
 
WINPR_ATTR_NODISCARD FREERDP_API const ADDIN_ARGV * freerdp_device_get_args (const RDPDR_DEVICE *device)
 return the arguments passed to the device channel.
 
FREERDP_API void freerdp_device_collection_free (rdpSettings *settings)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_static_channel_collection_add (rdpSettings *settings, ADDIN_ARGV *channel)
 
FREERDP_API BOOL freerdp_static_channel_collection_del (rdpSettings *settings, const char *name)
 
WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV * freerdp_static_channel_collection_find (rdpSettings *settings, const char *name)
 
FREERDP_API void freerdp_static_channel_collection_free (rdpSettings *settings)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_dynamic_channel_collection_add (rdpSettings *settings, ADDIN_ARGV *channel)
 
FREERDP_API BOOL freerdp_dynamic_channel_collection_del (rdpSettings *settings, const char *name)
 
WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV * freerdp_dynamic_channel_collection_find (const rdpSettings *settings, const char *name)
 
FREERDP_API void freerdp_dynamic_channel_collection_free (rdpSettings *settings)
 
FREERDP_API void freerdp_capability_buffer_free (rdpSettings *settings)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_capability_buffer_copy (rdpSettings *settings, const rdpSettings *src)
 
FREERDP_API void freerdp_server_license_issuers_free (rdpSettings *settings)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_server_license_issuers_copy (rdpSettings *settings, char **issuers, UINT32 count)
 
FREERDP_API void freerdp_target_net_addresses_free (rdpSettings *settings)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_target_net_addresses_copy (rdpSettings *settings, char **addresses, UINT32 count)
 
FREERDP_API void freerdp_performance_flags_make (rdpSettings *settings)
 
FREERDP_API void freerdp_performance_flags_split (rdpSettings *settings)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_set_gateway_usage_method (rdpSettings *settings, UINT32 GatewayUsageMethod)
 
WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_get_gateway_usage_method (const rdpSettings *settings)
 
FREERDP_API void freerdp_update_gateway_usage_method (rdpSettings *settings, UINT32 GatewayEnabled, UINT32 GatewayBypassLocal)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_are_valid (const rdpSettings *settings)
 Returns TRUE if settings are in a valid state, FALSE otherwise.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_get_bool (const rdpSettings *settings, FreeRDP_Settings_Keys_Bool id)
 Returns a boolean settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_bool (rdpSettings *settings, FreeRDP_Settings_Keys_Bool id, BOOL val)
 Sets a BOOL settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API INT16 freerdp_settings_get_int16 (const rdpSettings *settings, FreeRDP_Settings_Keys_Int16 id)
 Returns a INT16 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_int16 (rdpSettings *settings, FreeRDP_Settings_Keys_Int16 id, INT16 val)
 Sets a INT16 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API UINT16 freerdp_settings_get_uint16 (const rdpSettings *settings, FreeRDP_Settings_Keys_UInt16 id)
 Returns a UINT16 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint16 (rdpSettings *settings, FreeRDP_Settings_Keys_UInt16 id, UINT16 val)
 Sets a UINT16 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API INT32 freerdp_settings_get_int32 (const rdpSettings *settings, FreeRDP_Settings_Keys_Int32 id)
 Returns a INT32 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_int32 (rdpSettings *settings, FreeRDP_Settings_Keys_Int32 id, INT32 val)
 Sets a INT32 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_uint32 (const rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id)
 Returns a UINT32 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint32 (rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id, UINT32 val)
 Sets a UINT32 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API INT64 freerdp_settings_get_int64 (const rdpSettings *settings, FreeRDP_Settings_Keys_Int64 id)
 Returns a INT64 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_int64 (rdpSettings *settings, FreeRDP_Settings_Keys_Int64 id, INT64 val)
 Sets a INT64 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API UINT64 freerdp_settings_get_uint64 (const rdpSettings *settings, FreeRDP_Settings_Keys_UInt64 id)
 Returns a UINT64 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint64 (rdpSettings *settings, FreeRDP_Settings_Keys_UInt64 id, UINT64 val)
 Sets a UINT64 settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_string (const rdpSettings *settings, FreeRDP_Settings_Keys_String id)
 Returns a immutable string settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API char * freerdp_settings_get_string_writable (rdpSettings *settings, FreeRDP_Settings_Keys_String id)
 Returns a string settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string_len (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *val, size_t len)
 Sets a string settings value. The val is copied.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *val)
 Sets a string settings value. The param is copied.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_append_string (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *separator, const char *param)
 appends a string to a settings value. The param is copied. If the initial value of the setting was not empty,
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string_from_utf16 (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const WCHAR *param)
 Sets a string settings value. The param is converted to UTF-8 and the copy stored.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string_from_utf16N (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const WCHAR *param, size_t length)
 Sets a string settings value. The param is converted to UTF-8 and the copy stored.
 
FREERDP_API WCHAR * freerdp_settings_get_string_as_utf16 (const rdpSettings *settings, FreeRDP_Settings_Keys_String id, size_t *pCharLen)
 Return an allocated UTF16 string.
 
WINPR_ATTR_NODISCARD FREERDP_API const void * freerdp_settings_get_pointer (const rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id)
 Returns a immutable pointer settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API void * freerdp_settings_get_pointer_writable (rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id)
 Returns a mutable pointer settings value.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_pointer (rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *val)
 Set a pointer to value val.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_pointer_len (rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *data, size_t len)
 Set a pointer to value data.
 
WINPR_ATTR_NODISCARD FREERDP_API const void * freerdp_settings_get_pointer_array (const rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, size_t offset)
 
WINPR_ATTR_NODISCARD FREERDP_API void * freerdp_settings_get_pointer_array_writable (const rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, size_t offset)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_pointer_array (rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, size_t offset, const void *data)
 

to value \b value

Set a setting Both, key and value are provided as strings and parsed internally.

The value will be checked internally:

  • Integer types must be within boundaries
  • BOOL must be any of {'true', 'false', 'on', 'off', '0', '1'} (case insensitive)
  • Strings are passed on as is
  • Pointers are also passed as is
Parameters
settingsThe settings instance to set the value, must not be nullptr
nameThe name of the settings key (like 'FreeRDP_Domain', same as output of freerdp_settings_get_name_for_key ) Must not be nullptr
valueThe value of the setting. Must not be nullptr
Note
If the function fails check wLog output for details
Since
version 3.0.0
Returns
TRUE in case of success, FALSE otherwise.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_value_for_name (rdpSettings *settings, const char *name, const char *value)
 
WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_key_for_name (const char *value)
 Get a key index for the name string of that key.
 
WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_name (const char *value)
 Get a key type for the name string of that key.
 
WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_key (SSIZE_T key)
 Get a key type for the key index.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_key (SSIZE_T key)
 Returns the type name for a key.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_type (SSIZE_T type)
 Returns the type name for a type.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_name_for_key (SSIZE_T key)
 Returns the type name for a key.
 
WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_codecs_flags (const rdpSettings *settings)
 helper function to get a mask of supported codec flags.
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_update_from_caps (rdpSettings *settings, const BYTE *capsFlags, const BYTE **capsData, const UINT32 *capsSizes, UINT32 capsCount, BOOL serverReceivedCaps)
 Parse capability data and apply to settings.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_server_name (const rdpSettings *settings)
 A helper function to return the correct server name.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_rail_support_flags_to_string (UINT32 flags, char *buffer, size_t length)
 Returns a stringified representation of RAIL support flags.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_rdp_version_string (UINT32 version)
 Returns a stringified representation of the RDP protocol version.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_rdpdr_dtyp_string (UINT32 type)
 Returns a string representation of RDPDR_DTYP_*.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_encryption_level_string (UINT32 EncryptionLevel)
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_encryption_methods_string (UINT32 EncryptionMethods, char *buffer, size_t size)
 
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_supported_color_depths_string (UINT16 mask, char *buffer, size_t size)
 returns a string representation of RNS_UD_XXBPP_SUPPORT values
 
WINPR_ATTR_NODISCARD FREERDP_API char * freerdp_settings_get_config_path (void)
 return the configuration directory for the library
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_monitor_def_array_sorted (rdpSettings *settings, const rdpMonitor *monitors, size_t count)
 Sort monitor array according to:
 
WINPR_ATTR_NODISCARD FREERDP_API char * freerdp_settings_serialize (const rdpSettings *settings, BOOL pretty, size_t *plength)
 A function that converts a rdpSettings struct to a JSON serialized string.
 
WINPR_ATTR_NODISCARD FREERDP_API rdpSettings * freerdp_settings_deserialize (const char *jstr, size_t length)
 A function that converts a JSON string to a rdpSettings struct.
 

Detailed Description

This is the FreeRDP settings module.

FreeRDP: A Remote Desktop Protocol Implementation RDP Settings

Copyright 2009-2011 Jay Sorg Copyright 2010-2012 Marc-Andre Moreau marca.nosp@m.ndre.nosp@m..more.nosp@m.au@g.nosp@m.mail..nosp@m.com Copyright 2016 Armin Novak armin.nosp@m..nov.nosp@m.ak@gm.nosp@m.ail..nosp@m.com Copyright 2023 Armin Novak anova.nosp@m.k@th.nosp@m.incas.nosp@m.t.co.nosp@m.m Copyright 2023 Thincast Technologies GmbH

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Settings are used to store configuration data for an RDP connection. There are 3 different settings for each client and server:

  1. The initial connection supplied by the user
  2. The settings sent from client or server during capability exchange
  3. The settings merged from the capability exchange and the initial configuration.

The lifetime of the settings is as follows:

  1. Initial configuration is saved and will be valid for the whole application lifecycle
  2. The client or server settings from the other end are valid from capability exchange until the connection is ended (disconnect/redirect/...)
  3. The merged settings are created from the initial configuration and server settings and have the same lifetime, until the connection ends

So, when accessing the settings always ensure to know which one you are operating on! (this is especially important for the proxy where you have a RDP client and RDP server in the same application context)

FreeRDP: A Remote Desktop Protocol Implementation RDP Settings

Copyright 2009-2011 Jay Sorg Copyright 2010-2012 Marc-Andre Moreau marca.nosp@m.ndre.nosp@m..more.nosp@m.au@g.nosp@m.mail..nosp@m.com Copyright 2016 Armin Novak armin.nosp@m..nov.nosp@m.ak@gm.nosp@m.ail..nosp@m.com Copyright 2023 Armin Novak anova.nosp@m.k@th.nosp@m.incas.nosp@m.t.co.nosp@m.m Copyright 2023 Thincast Technologies GmbH

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

FreeRDP: A Remote Desktop Protocol Implementation Internal settings header for functions not exported

Copyright 2018 Armin Novak armin.nosp@m..nov.nosp@m.ak@th.nosp@m.inca.nosp@m.st.co.nosp@m.m Copyright 2018 Thincast Technologies GmbH

Licensed under the Apache License, Version 2.0 (the "License") you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


Data Structure Documentation

◆ TARGET_NET_ADDRESS

struct TARGET_NET_ADDRESS

Definition at line 293 of file settings_types.h.

Data Fields
LPWSTR Address
UINT32 Length

◆ ARC_CS_PRIVATE_PACKET

struct ARC_CS_PRIVATE_PACKET

Definition at line 370 of file settings_types.h.

Data Fields
UINT32 cbLen
UINT32 logonId
BYTE securityVerifier[16]
UINT32 version

◆ ARC_SC_PRIVATE_PACKET

struct ARC_SC_PRIVATE_PACKET

Definition at line 379 of file settings_types.h.

Data Fields
BYTE arcRandomBits[16]
UINT32 cbLen
UINT32 logonId
UINT32 version

◆ ADDIN_ARGV

struct ADDIN_ARGV

Definition at line 389 of file settings_types.h.

Data Fields
int argc
char ** argv

◆ rdp_ext_set

struct rdp_ext_set

Definition at line 397 of file settings_types.h.

Data Fields
void * data
char name[256]

◆ BITMAP_CACHE_CELL_INFO

struct BITMAP_CACHE_CELL_INFO

Definition at line 405 of file settings_types.h.

Data Fields
UINT16 maxSize
UINT16 numEntries

◆ BITMAP_CACHE_V2_CELL_INFO

struct BITMAP_CACHE_V2_CELL_INFO

Definition at line 411 of file settings_types.h.

Data Fields
UINT32 numEntries
BOOL persistent

◆ GLYPH_CACHE_DEFINITION

struct GLYPH_CACHE_DEFINITION

Definition at line 419 of file settings_types.h.

Data Fields
UINT16 cacheEntries
UINT16 cacheMaximumCellSize

◆ MONITOR_DEF

struct MONITOR_DEF

Definition at line 427 of file settings_types.h.

Data Fields
INT32 bottom
UINT32 flags
INT32 left
INT32 right
INT32 top

◆ MONITOR_ATTRIBUTES

struct MONITOR_ATTRIBUTES

Definition at line 436 of file settings_types.h.

Data Fields
UINT32 desktopScaleFactor
UINT32 deviceScaleFactor
UINT32 orientation
UINT32 physicalHeight
UINT32 physicalWidth

◆ rdpMonitor

struct rdpMonitor

Definition at line 445 of file settings_types.h.

Collaboration diagram for rdpMonitor:
Data Fields
MONITOR_ATTRIBUTES attributes
INT32 height
UINT32 is_primary
UINT32 orig_screen
INT32 width
INT32 x
INT32 y

◆ RDPDR_DEVICE

struct RDPDR_DEVICE

Definition at line 466 of file settings_types.h.

Data Fields
UINT32 Id
char * Name
UINT32 Type

◆ RDPDR_DRIVE

struct RDPDR_DRIVE

Definition at line 473 of file settings_types.h.

Collaboration diagram for RDPDR_DRIVE:
Data Fields
BOOL automount
RDPDR_DEVICE device
char * Path

◆ RDPDR_PRINTER

struct RDPDR_PRINTER

Definition at line 480 of file settings_types.h.

Collaboration diagram for RDPDR_PRINTER:
Data Fields
RDPDR_DEVICE device
char * DriverName
BOOL IsDefault

◆ RDPDR_SMARTCARD

struct RDPDR_SMARTCARD

Definition at line 487 of file settings_types.h.

Collaboration diagram for RDPDR_SMARTCARD:
Data Fields
RDPDR_DEVICE device

◆ RDPDR_SERIAL

struct RDPDR_SERIAL

Definition at line 492 of file settings_types.h.

Collaboration diagram for RDPDR_SERIAL:
Data Fields
RDPDR_DEVICE device
char * Driver
char * Path
char * Permissive

◆ RDPDR_PARALLEL

struct RDPDR_PARALLEL

Definition at line 500 of file settings_types.h.

Collaboration diagram for RDPDR_PARALLEL:
Data Fields
RDPDR_DEVICE device
char * Path

Macro Definition Documentation

◆ AUDIO_MODE_NONE

#define AUDIO_MODE_NONE   2 /* Do not play */

Definition at line 144 of file settings_types.h.

◆ AUDIO_MODE_PLAY_ON_SERVER

#define AUDIO_MODE_PLAY_ON_SERVER   1 /* Leave at remote computer */

Definition at line 143 of file settings_types.h.

◆ AUDIO_MODE_REDIRECT

#define AUDIO_MODE_REDIRECT   0 /* Bring to this computer */

Definition at line 142 of file settings_types.h.

◆ AUTO_RECONNECT_VERSION_1

#define AUTO_RECONNECT_VERSION_1   0x00000001

Definition at line 224 of file settings_types.h.

◆ CHANNEL_OPTION_COMPRESS

#define CHANNEL_OPTION_COMPRESS   0x00400000

Definition at line 210 of file settings_types.h.

◆ CHANNEL_OPTION_COMPRESS_RDP

#define CHANNEL_OPTION_COMPRESS_RDP   0x00800000

Definition at line 209 of file settings_types.h.

◆ CHANNEL_OPTION_ENCRYPT_CS

#define CHANNEL_OPTION_ENCRYPT_CS   0x10000000

Definition at line 205 of file settings_types.h.

◆ CHANNEL_OPTION_ENCRYPT_RDP

#define CHANNEL_OPTION_ENCRYPT_RDP   0x40000000

Definition at line 203 of file settings_types.h.

◆ CHANNEL_OPTION_ENCRYPT_SC

#define CHANNEL_OPTION_ENCRYPT_SC   0x20000000

Definition at line 204 of file settings_types.h.

◆ CHANNEL_OPTION_INITIALIZED

#define CHANNEL_OPTION_INITIALIZED   0x80000000

Definition at line 202 of file settings_types.h.

◆ CHANNEL_OPTION_PRI_HIGH

#define CHANNEL_OPTION_PRI_HIGH   0x08000000

Definition at line 206 of file settings_types.h.

◆ CHANNEL_OPTION_PRI_LOW

#define CHANNEL_OPTION_PRI_LOW   0x02000000

Definition at line 208 of file settings_types.h.

◆ CHANNEL_OPTION_PRI_MED

#define CHANNEL_OPTION_PRI_MED   0x04000000

Definition at line 207 of file settings_types.h.

◆ CHANNEL_OPTION_SHOW_PROTOCOL

#define CHANNEL_OPTION_SHOW_PROTOCOL   0x00200000

Definition at line 211 of file settings_types.h.

◆ CHANNEL_REMOTE_CONTROL_PERSISTENT

#define CHANNEL_REMOTE_CONTROL_PERSISTENT   0x00100000

Definition at line 212 of file settings_types.h.

◆ CLIPRDR_FLAG_DEFAULT_MASK

#define CLIPRDR_FLAG_DEFAULT_MASK
Value:
(CLIPRDR_FLAG_LOCAL_TO_REMOTE | CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES | \
CLIPRDR_FLAG_REMOTE_TO_LOCAL | CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES)

Definition at line 345 of file settings_types.h.

363 {
364 FREERDP_TLS_SECLEVEL_0 = 0,
365 FREERDP_TLS_SECLEVEL_80BIT = 1,
366 FREERDP_TLS_SECLEVEL_112BIT = 2,
367 FREERDP_TLS_SECLEVEL_128BIT = 3,
368 FREERDP_TLS_SECLEVEL_192BIT = 4,
369 FREERDP_TLS_SECLEVEL_256BIT = 5
371
372 /* ARC_CS_PRIVATE_PACKET */
373 typedef struct
374 {
375 UINT32 cbLen;
376 UINT32 version;
377 UINT32 logonId;
378 BYTE securityVerifier[16];
380
381 /* ARC_SC_PRIVATE_PACKET */
382 typedef struct
383 {
384 UINT32 cbLen;
385 UINT32 version;
386 UINT32 logonId;
387 BYTE arcRandomBits[16];
389
390 /* Channels */
391
392 typedef struct
393 {
394 int argc;
395 char** argv;
396 } ADDIN_ARGV;
397
398 /* Extensions */
399
400 struct rdp_ext_set
401 {
402 char name[256]; /* plugin name or path */
403 void* data; /* plugin data */
404 };
405
406 /* Bitmap Cache */
407
408 typedef struct
409 {
410 UINT16 numEntries;
411 UINT16 maxSize;
413
414 typedef struct
415 {
416 UINT32 numEntries;
417 BOOL persistent;
419
420 /* Glyph Cache */
421
422 typedef struct
423 {
424 UINT16 cacheEntries;
425 UINT16 cacheMaximumCellSize;
427
428 /* Monitors */
429
430 typedef struct
431 {
432 INT32 left;
433 INT32 top;
434 INT32 right;
435 INT32 bottom;
436 UINT32 flags;
437 } MONITOR_DEF;
438
439 typedef struct
440 {
441 UINT32 physicalWidth;
442 UINT32 physicalHeight;
443 UINT32 orientation;
444 UINT32 desktopScaleFactor;
445 UINT32 deviceScaleFactor;
447
448 typedef struct
449 {
450 INT32 x;
451 INT32 y;
452 INT32 width;
453 INT32 height;
454 UINT32 is_primary;
455 UINT32 orig_screen;
456 MONITOR_ATTRIBUTES attributes;
457 } rdpMonitor;
458
459 /* Device Redirection */
460 typedef enum
461 {
462 RDPDR_DTYP_SERIAL = 0x00000001,
463 RDPDR_DTYP_PARALLEL = 0x00000002,
464 RDPDR_DTYP_PRINT = 0x00000004,
465 RDPDR_DTYP_FILESYSTEM = 0x00000008,
466 RDPDR_DTYP_SMARTCARD = 0x00000020
467 } FreeRDP_RDPDR_DTYP;
468
469 typedef struct
470 {
471 UINT32 Id;
472 UINT32 Type;
473 char* Name;
474 } RDPDR_DEVICE;
475
476 typedef struct
477 {
478 RDPDR_DEVICE device;
479 char* Path;
480 BOOL automount;
481 } RDPDR_DRIVE;
482
483 typedef struct
484 {
485 RDPDR_DEVICE device;
486 char* DriverName;
487 BOOL IsDefault;
489
490 typedef struct
491 {
492 RDPDR_DEVICE device;
494
495 typedef struct
496 {
497 RDPDR_DEVICE device;
498 char* Path;
499 char* Driver;
500 char* Permissive;
501 } RDPDR_SERIAL;
502
503 typedef struct
504 {
505 RDPDR_DEVICE device;
506 char* Path;
508
509#define PROXY_TYPE_NONE 0
510#define PROXY_TYPE_HTTP 1
511#define PROXY_TYPE_SOCKS 2
512#define PROXY_TYPE_IGNORE 0xFFFF
513
514/* ThreadingFlags */
515#define THREADING_FLAGS_DISABLE_THREADS 0x00000001
516
517 enum rdp_settings_type
518 {
519 RDP_SETTINGS_TYPE_BOOL,
520 RDP_SETTINGS_TYPE_UINT16,
521 RDP_SETTINGS_TYPE_INT16,
522 RDP_SETTINGS_TYPE_UINT32,
523 RDP_SETTINGS_TYPE_INT32,
524 RDP_SETTINGS_TYPE_UINT64,
525 RDP_SETTINGS_TYPE_INT64,
526 RDP_SETTINGS_TYPE_STRING,
527 RDP_SETTINGS_TYPE_POINTER
528 };
529
533#define FREERDP_SETTINGS_SERVER_MODE 0x00000001
534
535#ifdef __cplusplus
536}
537#endif
538
541#endif /* FREERDP_SETTINGS_TYPES_H */
FreeRDP_TLS_SecLevel
convenience names for https://docs.openssl.org/3.0/man3/SSL_CTX_set_security_level/#default-callback-...

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE   0x01

Definition at line 340 of file settings_types.h.

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES   0x02

Definition at line 341 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL   0x10

Definition at line 342 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES   0x20

Definition at line 343 of file settings_types.h.

◆ CONNECTION_TYPE_AUTODETECT

#define CONNECTION_TYPE_AUTODETECT   0x07

Definition at line 82 of file settings_types.h.

◆ CONNECTION_TYPE_BROADBAND_HIGH

#define CONNECTION_TYPE_BROADBAND_HIGH   0x04

Definition at line 79 of file settings_types.h.

◆ CONNECTION_TYPE_BROADBAND_LOW

#define CONNECTION_TYPE_BROADBAND_LOW   0x02

Definition at line 77 of file settings_types.h.

◆ CONNECTION_TYPE_INVALID

#define CONNECTION_TYPE_INVALID
Value:
0x00

Definition at line 74 of file settings_types.h.

◆ CONNECTION_TYPE_LAN

#define CONNECTION_TYPE_LAN   0x06

Definition at line 81 of file settings_types.h.

◆ CONNECTION_TYPE_MODEM

#define CONNECTION_TYPE_MODEM   0x01

Definition at line 76 of file settings_types.h.

◆ CONNECTION_TYPE_SATELLITE

#define CONNECTION_TYPE_SATELLITE   0x03

Definition at line 78 of file settings_types.h.

◆ CONNECTION_TYPE_WAN

#define CONNECTION_TYPE_WAN   0x05

Definition at line 80 of file settings_types.h.

◆ CS_CLUSTER

#define CS_CLUSTER   0xC004

Definition at line 88 of file settings_types.h.

◆ CS_CORE

#define CS_CORE   0xC001

Definition at line 85 of file settings_types.h.

◆ CS_MCS_MSGCHANNEL

#define CS_MCS_MSGCHANNEL   0xC006

Definition at line 90 of file settings_types.h.

◆ CS_MONITOR

#define CS_MONITOR   0xC005

Definition at line 89 of file settings_types.h.

◆ CS_MONITOR_EX

#define CS_MONITOR_EX   0xC008

Definition at line 91 of file settings_types.h.

◆ CS_MULTITRANSPORT

#define CS_MULTITRANSPORT   0xC00A

Definition at line 93 of file settings_types.h.

◆ CS_NET

#define CS_NET   0xC003

Definition at line 87 of file settings_types.h.

◆ CS_SECURITY

#define CS_SECURITY   0xC002

Definition at line 86 of file settings_types.h.

◆ CS_UNUSED1

#define CS_UNUSED1   0xC00C

Definition at line 92 of file settings_types.h.

◆ DEFAULT_COOKIE_MAX_LENGTH

#define DEFAULT_COOKIE_MAX_LENGTH   0xFF

Definition at line 228 of file settings_types.h.

◆ ENCRYPTION_LEVEL_CLIENT_COMPATIBLE

#define ENCRYPTION_LEVEL_CLIENT_COMPATIBLE   0x00000002

Definition at line 191 of file settings_types.h.

◆ ENCRYPTION_LEVEL_FIPS

#define ENCRYPTION_LEVEL_FIPS   0x00000004

Definition at line 193 of file settings_types.h.

◆ ENCRYPTION_LEVEL_HIGH

#define ENCRYPTION_LEVEL_HIGH   0x00000003

Definition at line 192 of file settings_types.h.

◆ ENCRYPTION_LEVEL_LOW

#define ENCRYPTION_LEVEL_LOW   0x00000001

Definition at line 190 of file settings_types.h.

◆ ENCRYPTION_LEVEL_NONE

#define ENCRYPTION_LEVEL_NONE   0x00000000

Definition at line 189 of file settings_types.h.

◆ ENCRYPTION_METHOD_128BIT

#define ENCRYPTION_METHOD_128BIT   0x00000002

Definition at line 184 of file settings_types.h.

◆ ENCRYPTION_METHOD_40BIT

#define ENCRYPTION_METHOD_40BIT   0x00000001

Definition at line 183 of file settings_types.h.

◆ ENCRYPTION_METHOD_56BIT

#define ENCRYPTION_METHOD_56BIT   0x00000008

Definition at line 185 of file settings_types.h.

◆ ENCRYPTION_METHOD_FIPS

#define ENCRYPTION_METHOD_FIPS   0x00000010

Definition at line 186 of file settings_types.h.

◆ ENCRYPTION_METHOD_NONE

#define ENCRYPTION_METHOD_NONE   0x00000000

Definition at line 182 of file settings_types.h.

◆ ERROR_CODE_ACCESS_DENIED

#define ERROR_CODE_ACCESS_DENIED   0xFFFFFFFF

Definition at line 307 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_DESKTOP_SCALE

#define FREERDP_MONITOR_OVERRIDE_DESKTOP_SCALE   (1u << 1) /** @since version 3.15.0 */

Definition at line 351 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_DEVICE_SCALE

#define FREERDP_MONITOR_OVERRIDE_DEVICE_SCALE   (1u << 2) /** @since version 3.15.0 */

Definition at line 352 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_ORIENTATION

#define FREERDP_MONITOR_OVERRIDE_ORIENTATION   (1u << 0) /** @since version 3.15.0 */

Definition at line 350 of file settings_types.h.

◆ FREERDP_SETTINGS_REMOTE_MODE

#define FREERDP_SETTINGS_REMOTE_MODE   0x00000002

Definition at line 81 of file include/freerdp/settings.h.

◆ FREERDP_SETTINGS_SERVER_MODE [1/2]

#define FREERDP_SETTINGS_SERVER_MODE   0x00000001

rdpSettings creation flags

Definition at line 80 of file include/freerdp/settings.h.

◆ FREERDP_SETTINGS_SERVER_MODE [2/2]

#define FREERDP_SETTINGS_SERVER_MODE   0x00000001

rdpSettings creation flags

Definition at line 530 of file settings_types.h.

◆ GLYPH_SUPPORT_ENCODE

#define GLYPH_SUPPORT_ENCODE   0x0003

Definition at line 274 of file settings_types.h.

◆ GLYPH_SUPPORT_FULL

#define GLYPH_SUPPORT_FULL   0x0002

Definition at line 273 of file settings_types.h.

◆ GLYPH_SUPPORT_NONE

#define GLYPH_SUPPORT_NONE   0x0000

Definition at line 271 of file settings_types.h.

◆ GLYPH_SUPPORT_PARTIAL

#define GLYPH_SUPPORT_PARTIAL   0x0001

Definition at line 272 of file settings_types.h.

◆ KEYBOARD_HOOK_FULLSCREEN_ONLY

#define KEYBOARD_HOOK_FULLSCREEN_ONLY   2

Definition at line 291 of file settings_types.h.

◆ KEYBOARD_HOOK_LOCAL

#define KEYBOARD_HOOK_LOCAL   0

Definition at line 289 of file settings_types.h.

◆ KEYBOARD_HOOK_REMOTE

#define KEYBOARD_HOOK_REMOTE   1

Definition at line 290 of file settings_types.h.

◆ LARGE_POINTER_FLAG_384x384

#define LARGE_POINTER_FLAG_384x384   0x00000002

Definition at line 221 of file settings_types.h.

◆ LARGE_POINTER_FLAG_96x96

#define LARGE_POINTER_FLAG_96x96   0x00000001

Definition at line 220 of file settings_types.h.

◆ LOGON_FAILED_BAD_PASSWORD

#define LOGON_FAILED_BAD_PASSWORD   0x00000000

Definition at line 309 of file settings_types.h.

◆ LOGON_FAILED_OTHER

#define LOGON_FAILED_OTHER   0x00000002

Definition at line 311 of file settings_types.h.

◆ LOGON_FAILED_UPDATE_PASSWORD

#define LOGON_FAILED_UPDATE_PASSWORD   0x00000001

Definition at line 310 of file settings_types.h.

◆ LOGON_MSG_BUMP_OPTIONS

#define LOGON_MSG_BUMP_OPTIONS   0xFFFFFFFB

Definition at line 303 of file settings_types.h.

◆ LOGON_MSG_DISCONNECT_REFUSED

#define LOGON_MSG_DISCONNECT_REFUSED   0xFFFFFFF9

Definition at line 301 of file settings_types.h.

◆ LOGON_MSG_NO_PERMISSION

#define LOGON_MSG_NO_PERMISSION   0xFFFFFFFA

Definition at line 302 of file settings_types.h.

◆ LOGON_MSG_RECONNECT_OPTIONS

#define LOGON_MSG_RECONNECT_OPTIONS   0xFFFFFFFC

Definition at line 304 of file settings_types.h.

◆ LOGON_MSG_SESSION_BUSY_OPTIONS

#define LOGON_MSG_SESSION_BUSY_OPTIONS   0xFFFFFFF8

Definition at line 300 of file settings_types.h.

◆ LOGON_MSG_SESSION_CONTINUE

#define LOGON_MSG_SESSION_CONTINUE   0xFFFFFFFE

Definition at line 306 of file settings_types.h.

◆ LOGON_MSG_SESSION_TERMINATE

#define LOGON_MSG_SESSION_TERMINATE   0xFFFFFFFD

Definition at line 305 of file settings_types.h.

◆ LOGON_WARNING

#define LOGON_WARNING   0x00000003

Definition at line 312 of file settings_types.h.

◆ MONITOR_PRIMARY

#define MONITOR_PRIMARY   0x00000001

Definition at line 179 of file settings_types.h.

◆ MSTSC_COOKIE_MAX_LENGTH

#define MSTSC_COOKIE_MAX_LENGTH   9

Definition at line 227 of file settings_types.h.

◆ PACKET_COMPR_TYPE_64K

#define PACKET_COMPR_TYPE_64K   0x01

Definition at line 325 of file settings_types.h.

◆ PACKET_COMPR_TYPE_8K

#define PACKET_COMPR_TYPE_8K   0x00

Definition at line 324 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP6

#define PACKET_COMPR_TYPE_RDP6   0x02

Definition at line 326 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP61

#define PACKET_COMPR_TYPE_RDP61   0x03

Definition at line 327 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP8

#define PACKET_COMPR_TYPE_RDP8   0x04

Definition at line 328 of file settings_types.h.

◆ PERF_DISABLE_CURSOR_SHADOW

#define PERF_DISABLE_CURSOR_SHADOW   0x00000020

Definition at line 68 of file settings_types.h.

◆ PERF_DISABLE_CURSORSETTINGS

#define PERF_DISABLE_CURSORSETTINGS   0x00000040

Definition at line 69 of file settings_types.h.

◆ PERF_DISABLE_FULLWINDOWDRAG

#define PERF_DISABLE_FULLWINDOWDRAG   0x00000002

Definition at line 65 of file settings_types.h.

◆ PERF_DISABLE_MENUANIMATIONS

#define PERF_DISABLE_MENUANIMATIONS   0x00000004

Definition at line 66 of file settings_types.h.

◆ PERF_DISABLE_THEMING

#define PERF_DISABLE_THEMING   0x00000008

Definition at line 67 of file settings_types.h.

◆ PERF_DISABLE_WALLPAPER

#define PERF_DISABLE_WALLPAPER   0x00000001

Definition at line 64 of file settings_types.h.

◆ PERF_ENABLE_DESKTOP_COMPOSITION

#define PERF_ENABLE_DESKTOP_COMPOSITION   0x00000100

Definition at line 71 of file settings_types.h.

◆ PERF_ENABLE_FONT_SMOOTHING

#define PERF_ENABLE_FONT_SMOOTHING   0x00000080

Definition at line 70 of file settings_types.h.

◆ PERF_FLAG_NONE

#define PERF_FLAG_NONE   0x00000000

Definition at line 63 of file settings_types.h.

◆ PROXY_TYPE_HTTP

#define PROXY_TYPE_HTTP   1

Definition at line 507 of file settings_types.h.

◆ PROXY_TYPE_IGNORE

#define PROXY_TYPE_IGNORE   0xFFFF

Definition at line 509 of file settings_types.h.

◆ PROXY_TYPE_NONE

#define PROXY_TYPE_NONE   0

Definition at line 506 of file settings_types.h.

◆ PROXY_TYPE_SOCKS

#define PROXY_TYPE_SOCKS   2

Definition at line 508 of file settings_types.h.

◆ RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED

#define RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED   0x00000002

Definition at line 54 of file settings_types.h.

◆ RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED

#define RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED   0x00000080

Definition at line 60 of file settings_types.h.

◆ RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED

#define RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED   0x00000020

Definition at line 58 of file settings_types.h.

◆ RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED

#define RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED   0x00000008

Definition at line 56 of file settings_types.h.

◆ RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED

#define RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED   0x00000010

Definition at line 57 of file settings_types.h.

◆ RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED

#define RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED   0x00000004

Definition at line 55 of file settings_types.h.

◆ RAIL_LEVEL_SUPPORTED

#define RAIL_LEVEL_SUPPORTED   0x00000001

Definition at line 53 of file settings_types.h.

◆ RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED

#define RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED   0x00000040

Definition at line 59 of file settings_types.h.

◆ REDIRECTED_SESSIONID_FIELD_VALID

#define REDIRECTED_SESSIONID_FIELD_VALID   0x00000002

Definition at line 168 of file settings_types.h.

◆ REDIRECTED_SMARTCARD

#define REDIRECTED_SMARTCARD   0x00000040

Definition at line 169 of file settings_types.h.

◆ REDIRECTION_SUPPORTED

#define REDIRECTION_SUPPORTED   0x00000001

Definition at line 167 of file settings_types.h.

◆ REDIRECTION_VERSION1

#define REDIRECTION_VERSION1   0x00

Definition at line 172 of file settings_types.h.

◆ REDIRECTION_VERSION2

#define REDIRECTION_VERSION2   0x01

Definition at line 173 of file settings_types.h.

◆ REDIRECTION_VERSION3

#define REDIRECTION_VERSION3   0x02

Definition at line 174 of file settings_types.h.

◆ REDIRECTION_VERSION4

#define REDIRECTION_VERSION4   0x03

Definition at line 175 of file settings_types.h.

◆ REDIRECTION_VERSION5

#define REDIRECTION_VERSION5   0x04

Definition at line 176 of file settings_types.h.

◆ REDIRECTION_VERSION6

#define REDIRECTION_VERSION6   0x05

Definition at line 177 of file settings_types.h.

◆ RNS_UD_15BPP_SUPPORT

#define RNS_UD_15BPP_SUPPORT   0x0004

Definition at line 138 of file settings_types.h.

◆ RNS_UD_16BPP_SUPPORT

#define RNS_UD_16BPP_SUPPORT   0x0002

Definition at line 137 of file settings_types.h.

◆ RNS_UD_24BPP_SUPPORT

#define RNS_UD_24BPP_SUPPORT   0x0001

Definition at line 136 of file settings_types.h.

◆ RNS_UD_32BPP_SUPPORT

#define RNS_UD_32BPP_SUPPORT   0x0008

Definition at line 139 of file settings_types.h.

◆ RNS_UD_COLOR_16BPP_555

#define RNS_UD_COLOR_16BPP_555   0xCA02

Definition at line 128 of file settings_types.h.

◆ RNS_UD_COLOR_16BPP_565

#define RNS_UD_COLOR_16BPP_565   0xCA03

Definition at line 129 of file settings_types.h.

◆ RNS_UD_COLOR_24BPP

#define RNS_UD_COLOR_24BPP   0xCA04

Definition at line 130 of file settings_types.h.

◆ RNS_UD_COLOR_4BPP

#define RNS_UD_COLOR_4BPP   0xCA00

Definition at line 126 of file settings_types.h.

◆ RNS_UD_COLOR_8BPP

#define RNS_UD_COLOR_8BPP   0xCA01

Definition at line 127 of file settings_types.h.

◆ RNS_UD_CS_RELATIVE_MOUSE_INPUT

#define RNS_UD_CS_RELATIVE_MOUSE_INPUT   0x0010

Definition at line 151 of file settings_types.h.

◆ RNS_UD_CS_STRONG_ASYMMETRIC_KEYS

#define RNS_UD_CS_STRONG_ASYMMETRIC_KEYS   0x0008

Definition at line 150 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE

#define RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE   0x0200

Definition at line 156 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL

#define RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL   0x0100

Definition at line 155 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_ERRINFO_PDU

#define RNS_UD_CS_SUPPORT_ERRINFO_PDU   0x0001

Definition at line 147 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_HEARTBEAT_PDU

#define RNS_UD_CS_SUPPORT_HEARTBEAT_PDU   0x0400

Definition at line 157 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU

#define RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU   0x0040

Definition at line 153 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT

#define RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT   0x0080

Definition at line 154 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN

#define RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN   0x0800

Definition at line 158 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_STATUSINFO_PDU

#define RNS_UD_CS_SUPPORT_STATUSINFO_PDU   0x0004

Definition at line 149 of file settings_types.h.

◆ RNS_UD_CS_VALID_CONNECTION_TYPE

#define RNS_UD_CS_VALID_CONNECTION_TYPE   0x0020

Definition at line 152 of file settings_types.h.

◆ RNS_UD_CS_WANT_32BPP_SESSION

#define RNS_UD_CS_WANT_32BPP_SESSION   0x0002

Definition at line 148 of file settings_types.h.

◆ RNS_UD_SAS_DEL

#define RNS_UD_SAS_DEL   0xAA03

Definition at line 133 of file settings_types.h.

◆ RNS_UD_SC_DYNAMIC_DST_SUPPORTED

#define RNS_UD_SC_DYNAMIC_DST_SUPPORTED   0x00000002

Definition at line 162 of file settings_types.h.

◆ RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V1

#define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V1   0x00000001

Definition at line 161 of file settings_types.h.

◆ RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V2

#define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V2   0x00000004

Definition at line 163 of file settings_types.h.

◆ RNS_UD_SC_SKIP_CHANNELJOIN_SUPPORTED

#define RNS_UD_SC_SKIP_CHANNELJOIN_SUPPORTED   0x00000008

Definition at line 164 of file settings_types.h.

◆ SC_CORE

#define SC_CORE   0x0C01

Definition at line 96 of file settings_types.h.

◆ SC_MCS_MSGCHANNEL

#define SC_MCS_MSGCHANNEL   0x0C04

Definition at line 99 of file settings_types.h.

◆ SC_MULTITRANSPORT

#define SC_MULTITRANSPORT   0x0C08

Definition at line 100 of file settings_types.h.

◆ SC_NET

#define SC_NET   0x0C03

Definition at line 98 of file settings_types.h.

◆ SC_SECURITY

#define SC_SECURITY   0x0C02

Definition at line 97 of file settings_types.h.

◆ ServerSessionRedirectionVersionMask

#define ServerSessionRedirectionVersionMask   0x0000003c

Definition at line 171 of file settings_types.h.

◆ SETTINGS_DEPRECATED

#define SETTINGS_DEPRECATED (   x)    WINPR_DEPRECATED(x)

Definition at line 45 of file settings_types_private.h.

◆ SOFTSYNC_TCP_TO_UDP

#define SOFTSYNC_TCP_TO_UDP   0x00000200

Definition at line 199 of file settings_types.h.

◆ STATUS_BRINGING_SESSION_ONLINE

#define STATUS_BRINGING_SESSION_ONLINE   0x00000403

Definition at line 317 of file settings_types.h.

◆ STATUS_FINDING_DESTINATION

#define STATUS_FINDING_DESTINATION   0x00000401

Definition at line 315 of file settings_types.h.

◆ STATUS_LOADING_DESTINATION

#define STATUS_LOADING_DESTINATION   0x00000402

Definition at line 316 of file settings_types.h.

◆ STATUS_REDIRECTING_TO_DESTINATION

#define STATUS_REDIRECTING_TO_DESTINATION   0x00000404

Definition at line 318 of file settings_types.h.

◆ STATUS_VM_BOOTING

#define STATUS_VM_BOOTING   0x00000503

Definition at line 321 of file settings_types.h.

◆ STATUS_VM_LOADING

#define STATUS_VM_LOADING   0x00000501

Definition at line 319 of file settings_types.h.

◆ STATUS_VM_WAKING

#define STATUS_VM_WAKING   0x00000502

Definition at line 320 of file settings_types.h.

◆ SURFCMDS_FRAME_MARKER

#define SURFCMDS_FRAME_MARKER   0x00000010 /** @since version 3.7.0 */

Definition at line 49 of file settings_types.h.

◆ SURFCMDS_SET_SURFACE_BITS

#define SURFCMDS_SET_SURFACE_BITS   0x00000002 /** @since version 3.7.0 */

Definition at line 48 of file settings_types.h.

◆ SURFCMDS_STREAM_SURFACE_BITS

#define SURFCMDS_STREAM_SURFACE_BITS   0x00000040 /** @since version 3.7.0 */

Definition at line 50 of file settings_types.h.

◆ THREADING_FLAGS_DISABLE_THREADS

#define THREADING_FLAGS_DISABLE_THREADS   0x00000001

Definition at line 512 of file settings_types.h.

◆ TRANSPORT_TYPE_UDP_FECL

#define TRANSPORT_TYPE_UDP_FECL   0x00000004

Definition at line 197 of file settings_types.h.

◆ TRANSPORT_TYPE_UDP_FECR

#define TRANSPORT_TYPE_UDP_FECR   0x00000001

Definition at line 196 of file settings_types.h.

◆ TRANSPORT_TYPE_UDP_PREFERRED

#define TRANSPORT_TYPE_UDP_PREFERRED   0x00000100

Definition at line 198 of file settings_types.h.

◆ TS_CAPS_PROTOCOLVERSION

#define TS_CAPS_PROTOCOLVERSION   0x200 /** @since version 3.6.0 */

Definition at line 231 of file settings_types.h.

◆ TSC_PROXY_CREDS_MODE_ANY

#define TSC_PROXY_CREDS_MODE_ANY   0x2

Definition at line 286 of file settings_types.h.

◆ TSC_PROXY_CREDS_MODE_SMARTCARD

#define TSC_PROXY_CREDS_MODE_SMARTCARD   0x1

Definition at line 285 of file settings_types.h.

◆ TSC_PROXY_CREDS_MODE_USERPASS

#define TSC_PROXY_CREDS_MODE_USERPASS   0x0

Definition at line 284 of file settings_types.h.

◆ TSC_PROXY_MODE_DEFAULT

#define TSC_PROXY_MODE_DEFAULT   0x3

Definition at line 280 of file settings_types.h.

◆ TSC_PROXY_MODE_DETECT

#define TSC_PROXY_MODE_DETECT   0x2

Definition at line 279 of file settings_types.h.

◆ TSC_PROXY_MODE_DIRECT

#define TSC_PROXY_MODE_DIRECT   0x1

Definition at line 278 of file settings_types.h.

◆ TSC_PROXY_MODE_NONE_DETECT

#define TSC_PROXY_MODE_NONE_DETECT   0x4

Definition at line 281 of file settings_types.h.

◆ TSC_PROXY_MODE_NONE_DIRECT

#define TSC_PROXY_MODE_NONE_DIRECT   0x0

Definition at line 277 of file settings_types.h.

◆ VCCAPS_COMPR_CS_8K

#define VCCAPS_COMPR_CS_8K   0x00000002

Definition at line 217 of file settings_types.h.

◆ VCCAPS_COMPR_SC

#define VCCAPS_COMPR_SC   0x00000001

Definition at line 216 of file settings_types.h.

◆ VCCAPS_NO_COMPR

#define VCCAPS_NO_COMPR   0x00000000

Definition at line 215 of file settings_types.h.

Enumeration Type Documentation

◆ FreeRDP_DesktopRotationFlags

enum FreeRDP_DesktopRotationFlags

Definition at line 331 of file settings_types.h.

335 {
336 ORIENTATION_LANDSCAPE = 0,
337 ORIENTATION_PORTRAIT = 90,

◆ FreeRDP_OrderSupportFlagConstants

enum FreeRDP_OrderSupportFlagConstants

Definition at line 234 of file settings_types.h.

238 {
239 NEG_DSTBLT_INDEX = 0x00,
240 NEG_PATBLT_INDEX = 0x01,
241 NEG_SCRBLT_INDEX = 0x02,
242 NEG_MEMBLT_INDEX = 0x03,
243 NEG_MEM3BLT_INDEX = 0x04,
244 NEG_ATEXTOUT_INDEX = 0x05,
245 NEG_AEXTTEXTOUT_INDEX = 0x06, /* Must be ignored */
246 NEG_DRAWNINEGRID_INDEX = 0x07, /* Must be ignored */
247 NEG_LINETO_INDEX = 0x08,
248 NEG_MULTI_DRAWNINEGRID_INDEX = 0x09,
249 NEG_OPAQUE_RECT_INDEX = 0x0A, /* Must be ignored */
250 NEG_SAVEBITMAP_INDEX = 0x0B,
251 NEG_WTEXTOUT_INDEX = 0x0C, /* Must be ignored */
252 NEG_MEMBLT_V2_INDEX = 0x0D, /* Must be ignored */
253 NEG_MEM3BLT_V2_INDEX = 0x0E, /* Must be ignored */
254 NEG_MULTIDSTBLT_INDEX = 0x0F,
255 NEG_MULTIPATBLT_INDEX = 0x10,
256 NEG_MULTISCRBLT_INDEX = 0x11,
257 NEG_MULTIOPAQUERECT_INDEX = 0x12,
258 NEG_FAST_INDEX_INDEX = 0x13,
259 NEG_POLYGON_SC_INDEX = 0x14,
260 NEG_POLYGON_CB_INDEX = 0x15,
261 NEG_POLYLINE_INDEX = 0x16,
262 NEG_UNUSED23_INDEX = 0x17, /* Must be ignored */
263 NEG_FAST_GLYPH_INDEX = 0x18,
264 NEG_ELLIPSE_SC_INDEX = 0x19,
265 NEG_ELLIPSE_CB_INDEX = 0x1A,
266 NEG_GLYPH_INDEX_INDEX = 0x1B,
267 NEG_GLYPH_WEXTTEXTOUT_INDEX = 0x1C, /* Must be ignored */
268 NEG_GLYPH_WLONGTEXTOUT_INDEX = 0x1D, /* Must be ignored */

◆ FreeRDP_RDPDR_DTYP

enum FreeRDP_RDPDR_DTYP

Definition at line 457 of file settings_types.h.

461 {
462 RDPDR_DTYP_SERIAL = 0x00000001,
463 RDPDR_DTYP_PARALLEL = 0x00000002,
464 RDPDR_DTYP_PRINT = 0x00000004,

◆ FreeRDP_TLS_SecLevel

convenience names for https://docs.openssl.org/3.0/man3/SSL_CTX_set_security_level/#default-callback-behaviour

Since
version 3.27.0

Definition at line 359 of file settings_types.h.

363 {
364 FREERDP_TLS_SECLEVEL_0 = 0,
365 FREERDP_TLS_SECLEVEL_80BIT = 1,
366 FREERDP_TLS_SECLEVEL_112BIT = 2,
367 FREERDP_TLS_SECLEVEL_128BIT = 3,

◆ rdp_settings_type

enum rdp_settings_type

Definition at line 514 of file settings_types.h.

518 {
519 RDP_SETTINGS_TYPE_BOOL,
520 RDP_SETTINGS_TYPE_UINT16,
521 RDP_SETTINGS_TYPE_INT16,
522 RDP_SETTINGS_TYPE_UINT32,
523 RDP_SETTINGS_TYPE_INT32,
524 RDP_SETTINGS_TYPE_UINT64,
525 RDP_SETTINGS_TYPE_INT64,

◆ RDP_VERSION

enum RDP_VERSION

Definition at line 106 of file settings_types.h.

110 {
111 RDP_VERSION_4 = 0x00080001,
112 RDP_VERSION_5_PLUS = 0x00080004,
113 RDP_VERSION_10_0 = 0x00080005,
114 RDP_VERSION_10_1 = 0x00080006,
115 RDP_VERSION_10_2 = 0x00080007,
116 RDP_VERSION_10_3 = 0x00080008,
117 RDP_VERSION_10_4 = 0x00080009,
118 RDP_VERSION_10_5 = 0x0008000a,
119 RDP_VERSION_10_6 = 0x0008000b,
120 RDP_VERSION_10_7 = 0x0008000C,
121 RDP_VERSION_10_8 = 0x0008000D,
122 RDP_VERSION_10_9 = 0x0008000E,
123 RDP_VERSION_10_10 = 0x0008000F,

Function Documentation

◆ freerdp_addin_argv_add_argument()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_addin_argv_add_argument ( ADDIN_ARGV *  args,
const char *  argument 
)

Definition at line 83 of file common/settings.c.

84{
85 return freerdp_addin_argv_add_argument_ex(args, argument, 0);
86}

◆ freerdp_addin_argv_add_argument_ex()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_addin_argv_add_argument_ex ( ADDIN_ARGV *  args,
const char *  argument,
size_t  len 
)

Definition at line 59 of file common/settings.c.

60{
61 if (!args || !argument)
62 return FALSE;
63
64 if (len == 0)
65 len = strlen(argument);
66
67 char** new_argv = (char**)realloc(
68 (void*)args->argv, sizeof(char*) * (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc) + 1));
69
70 if (!new_argv)
71 return FALSE;
72
73 args->argv = new_argv;
74
75 char* str = calloc(len + 1, sizeof(char));
76 if (!str)
77 return FALSE;
78 memcpy(str, argument, len);
79 args->argv[args->argc++] = str;
80 return TRUE;
81}

◆ freerdp_addin_argv_clone()

FREERDP_API ADDIN_ARGV * freerdp_addin_argv_clone ( const ADDIN_ARGV *  args)

Definition at line 765 of file common/settings.c.

766{
767 union
768 {
769 char** c;
770 const char** cc;
771 } cnv;
772 if (!args)
773 return nullptr;
774 cnv.c = args->argv;
775 return freerdp_addin_argv_new(WINPR_ASSERTING_INT_CAST(uint32_t, args->argc), cnv.cc);
776}

◆ freerdp_addin_argv_del_argument()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_addin_argv_del_argument ( ADDIN_ARGV *  args,
const char *  argument 
)

Definition at line 88 of file common/settings.c.

89{
90 if (!args || !argument)
91 return FALSE;
92 for (int x = 0; x < args->argc; x++)
93 {
94 char* arg = args->argv[x];
95 if (strcmp(argument, arg) == 0)
96 {
97 free(arg);
98 const BOOL res =
99 memmove_s((void*)&args->argv[x],
100 (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x)) * sizeof(char*),
101 (void*)&args->argv[x + 1],
102 (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x - 1)) *
103 sizeof(char*)) >= 0;
104 args->argv[args->argc - 1] = nullptr;
105 args->argc--;
106 return res;
107 }
108 }
109 return FALSE;
110}

◆ freerdp_addin_argv_free()

FREERDP_API void freerdp_addin_argv_free ( ADDIN_ARGV *  args)

Definition at line 709 of file common/settings.c.

710{
711 if (!args)
712 return;
713
714 if (args->argv)
715 {
716 for (int index = 0; index < args->argc; index++)
717 free(args->argv[index]);
718 free((void*)args->argv);
719 }
720
721 free(args);
722}

◆ freerdp_addin_argv_new()

FREERDP_API ADDIN_ARGV * freerdp_addin_argv_new ( size_t  argc,
const char *const  argv[] 
)

Definition at line 724 of file common/settings.c.

725{
726 if (argc > INT32_MAX)
727 return nullptr;
728
729 ADDIN_ARGV* args = calloc(1, sizeof(ADDIN_ARGV));
730 if (!args)
731 return nullptr;
732 if (argc == 0)
733 return args;
734
735 args->argc = (int)argc;
736 args->argv = (char**)calloc(argc, sizeof(char*));
737 if (!args->argv)
738 goto fail;
739
740 if (argv)
741 {
742 /* first argument must not be NULL, others might be */
743 if (!argv[0])
744 goto fail;
745
746 for (size_t x = 0; x < argc; x++)
747 {
748 if (!argv[x])
749 continue;
750 args->argv[x] = _strdup(argv[x]);
751 if (!args->argv[x])
752 goto fail;
753 }
754 }
755 return args;
756
757fail:
758 WINPR_PRAGMA_DIAG_PUSH
759 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
760 freerdp_addin_argv_free(args);
761 WINPR_PRAGMA_DIAG_POP
762 return nullptr;
763}

◆ freerdp_addin_replace_argument()

WINPR_ATTR_NODISCARD FREERDP_API int freerdp_addin_replace_argument ( ADDIN_ARGV *  args,
const char *  previous,
const char *  argument 
)

Definition at line 130 of file common/settings.c.

131{
132 if (!args || !previous || !argument)
133 return -2;
134
135 for (int i = 0; i < args->argc; i++)
136 {
137 if (strcmp(args->argv[i], previous) == 0)
138 {
139 free(args->argv[i]);
140
141 if (!(args->argv[i] = _strdup(argument)))
142 return -1;
143
144 return 1;
145 }
146 }
147
148 if (!freerdp_addin_argv_add_argument(args, argument))
149 return -1;
150 return 0;
151}

◆ freerdp_addin_replace_argument_value()

WINPR_ATTR_NODISCARD FREERDP_API int freerdp_addin_replace_argument_value ( ADDIN_ARGV *  args,
const char *  previous,
const char *  option,
const char *  value 
)

Definition at line 192 of file common/settings.c.

194{
195 BOOL rc = 0;
196 char* str = nullptr;
197 size_t length = 0;
198 if (!args || !previous || !option || !value)
199 return -2;
200 length = strlen(option) + strlen(value) + 1;
201 str = (char*)calloc(length + 1, sizeof(char));
202
203 if (!str)
204 return -1;
205
206 (void)sprintf_s(str, length + 1, "%s:%s", option, value);
207
208 for (int i = 0; i < args->argc; i++)
209 {
210 if (strcmp(args->argv[i], previous) == 0)
211 {
212 free(args->argv[i]);
213 args->argv[i] = str;
214 return 1;
215 }
216 }
217
218 rc = freerdp_addin_argv_add_argument(args, str);
219 free(str);
220 if (!rc)
221 return -1;
222 return 0;
223}

◆ freerdp_addin_set_argument()

WINPR_ATTR_NODISCARD FREERDP_API int freerdp_addin_set_argument ( ADDIN_ARGV *  args,
const char *  argument 
)

Definition at line 112 of file common/settings.c.

113{
114 if (!args || !argument)
115 return -2;
116
117 for (int i = 0; i < args->argc; i++)
118 {
119 if (strcmp(args->argv[i], argument) == 0)
120 {
121 return 1;
122 }
123 }
124
125 if (!freerdp_addin_argv_add_argument(args, argument))
126 return -1;
127 return 0;
128}

◆ freerdp_addin_set_argument_value()

WINPR_ATTR_NODISCARD FREERDP_API int freerdp_addin_set_argument_value ( ADDIN_ARGV *  args,
const char *  option,
const char *  value 
)

Definition at line 153 of file common/settings.c.

154{
155 BOOL rc = 0;
156 char* p = nullptr;
157 char* str = nullptr;
158 size_t length = 0;
159 if (!args || !option || !value)
160 return -2;
161 length = strlen(option) + strlen(value) + 1;
162 str = (char*)calloc(length + 1, sizeof(char));
163
164 if (!str)
165 return -1;
166
167 (void)sprintf_s(str, length + 1, "%s:%s", option, value);
168
169 for (int i = 0; i < args->argc; i++)
170 {
171 p = strchr(args->argv[i], ':');
172
173 if (p)
174 {
175 if (strncmp(args->argv[i], option,
176 WINPR_ASSERTING_INT_CAST(size_t, p - args->argv[i])) == 0)
177 {
178 free(args->argv[i]);
179 args->argv[i] = str;
180 return 1;
181 }
182 }
183 }
184
185 rc = freerdp_addin_argv_add_argument(args, str);
186 free(str);
187 if (!rc)
188 return -1;
189 return 0;
190}

◆ freerdp_capability_buffer_copy()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_capability_buffer_copy ( rdpSettings *  settings,
const rdpSettings *  src 
)

Definition at line 914 of file common/settings.c.

915{
916 WINPR_ASSERT(settings);
917 WINPR_ASSERT(src);
918
919 if (src->ReceivedCapabilitiesSize == 0)
920 return TRUE;
921
922 if (!freerdp_capability_buffer_resize(settings, src->ReceivedCapabilitiesSize, TRUE))
923 return FALSE;
924
925 for (UINT32 x = 0; x < src->ReceivedCapabilitiesSize; x++)
926 {
927 WINPR_ASSERT(settings->ReceivedCapabilities);
928 settings->ReceivedCapabilities[x] = src->ReceivedCapabilities[x];
929
930 WINPR_ASSERT(settings->ReceivedCapabilityDataSizes);
931 settings->ReceivedCapabilityDataSizes[x] = src->ReceivedCapabilityDataSizes[x];
932
933 WINPR_ASSERT(settings->ReceivedCapabilityData);
934 if (src->ReceivedCapabilityDataSizes[x] > 0)
935 {
936 void* tmp = realloc(settings->ReceivedCapabilityData[x],
937 settings->ReceivedCapabilityDataSizes[x]);
938 if (!tmp)
939 return FALSE;
940 memcpy(tmp, src->ReceivedCapabilityData[x], src->ReceivedCapabilityDataSizes[x]);
941 settings->ReceivedCapabilityData[x] = tmp;
942 }
943 else
944 {
945 free(settings->ReceivedCapabilityData[x]);
946 settings->ReceivedCapabilityData[x] = nullptr;
947 }
948 }
949 return TRUE;
950}

◆ freerdp_capability_buffer_free()

FREERDP_API void freerdp_capability_buffer_free ( rdpSettings *  settings)

Definition at line 819 of file common/settings.c.

820{
821 WINPR_ASSERT(settings);
822
823 freerdp_capability_data_free(settings, 0, TRUE);
824
825 free(settings->ReceivedCapabilityDataSizes);
826 settings->ReceivedCapabilityDataSizes = nullptr;
827
828 free(settings->ReceivedCapabilities);
829 settings->ReceivedCapabilities = nullptr;
830
831 settings->ReceivedCapabilitiesSize = 0;
832}

◆ freerdp_device_clone()

FREERDP_API RDPDR_DEVICE * freerdp_device_clone ( const RDPDR_DEVICE *  device)

Definition at line 460 of file common/settings.c.

461{
462 const struct RDPDR_DEVICE_EX* src = (const struct RDPDR_DEVICE_EX*)device;
463
464 if (!src)
465 return nullptr;
466
467 int argc = 0;
468 const char* const* argv = nullptr;
469 if (src->args)
470 {
471 argc = src->args->argc;
472 if (argc < 0)
473 return nullptr;
474 argv = (const char* const*)src->args->argv;
475 }
476
477 RDPDR_DEVICE* copy =
478 freerdp_device_new(device->Type, WINPR_ASSERTING_INT_CAST(size_t, argc), argv);
479 if (!copy)
480 return nullptr;
481 copy->Id = device->Id;
482 return copy;
483}

◆ freerdp_device_collection_add()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_device_collection_add ( rdpSettings *  settings,
RDPDR_DEVICE *  device 
)

Definition at line 225 of file common/settings.c.

226{
227 UINT32 count = 0;
228 UINT32 old = 0;
229 WINPR_ASSERT(settings);
230 WINPR_ASSERT(device);
231
232 count = freerdp_settings_get_uint32(settings, FreeRDP_DeviceCount) + 1;
233 old = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
234 if (old < count)
235 {
236 const size_t new_size = (old + 32);
237 RDPDR_DEVICE** new_array =
238 (RDPDR_DEVICE**)realloc((void*)settings->DeviceArray, new_size * sizeof(RDPDR_DEVICE*));
239
240 if (!new_array)
241 return FALSE;
242
243 settings->DeviceArray = new_array;
244 for (size_t x = old; x < new_size; x++)
245 settings->DeviceArray[x] = nullptr;
246
247 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize,
248 WINPR_ASSERTING_INT_CAST(uint32_t, new_size)))
249 return FALSE;
250 }
251
252 settings->DeviceArray[settings->DeviceCount++] = device;
253 return TRUE;
254}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint32(rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id, UINT32 val)
Sets a UINT32 settings value.
WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_uint32(const rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id)
Returns a UINT32 settings value.

◆ freerdp_device_collection_del()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_device_collection_del ( rdpSettings *  settings,
const RDPDR_DEVICE *  device 
)

Removed a device from the settings, returns ownership of the allocated device to caller.

Parameters
settingsthe settings to remove the device from
devicethe device to remove
Since
version 3.4.0
Returns
TRUE if the device was removed, FALSE if device was not found or is nullptr

Definition at line 256 of file common/settings.c.

257{
258 WINPR_ASSERT(settings);
259
260 if (!device)
261 return FALSE;
262
263 const UINT32 count = settings->DeviceCount;
264 for (size_t x = 0; x < count; x++)
265 {
266 const RDPDR_DEVICE* cur = settings->DeviceArray[x];
267 if (cur == device)
268 {
269 for (size_t y = x + 1; y < count; y++)
270 {
271 RDPDR_DEVICE* next = settings->DeviceArray[y];
272 settings->DeviceArray[y - 1] = next;
273 }
274 settings->DeviceArray[count - 1] = nullptr;
275 settings->DeviceCount--;
276 return TRUE;
277 }
278 }
279
280 return FALSE;
281}

◆ freerdp_device_collection_find()

WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE * freerdp_device_collection_find ( rdpSettings *  settings,
const char *  name 
)

Definition at line 283 of file common/settings.c.

284{
285 RDPDR_DEVICE* device = nullptr;
286
287 WINPR_ASSERT(settings);
288 WINPR_ASSERT(name);
289 for (UINT32 index = 0; index < settings->DeviceCount; index++)
290 {
291 device = settings->DeviceArray[index];
292
293 if (!device->Name)
294 continue;
295
296 if (strcmp(device->Name, name) == 0)
297 return device;
298 }
299
300 return nullptr;
301}

◆ freerdp_device_collection_find_type()

WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE * freerdp_device_collection_find_type ( rdpSettings *  settings,
UINT32  type 
)

Definition at line 303 of file common/settings.c.

304{
305 RDPDR_DEVICE* device = nullptr;
306 WINPR_ASSERT(settings);
307
308 for (UINT32 index = 0; index < settings->DeviceCount; index++)
309 {
310 device = settings->DeviceArray[index];
311
312 if (device->Type == type)
313 return device;
314 }
315
316 return nullptr;
317}

◆ freerdp_device_collection_free()

FREERDP_API void freerdp_device_collection_free ( rdpSettings *  settings)

Definition at line 485 of file common/settings.c.

486{
487 WINPR_ASSERT(settings);
488
489 if (settings->DeviceArray)
490 {
491 for (UINT32 index = 0; index < settings->DeviceArraySize; index++)
492 {
493 const BOOL rc =
494 freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, index, nullptr);
495 if (!rc)
496 WLog_WARN(TAG,
497 "freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, "
498 "index=%" PRIu32 ", nullptr) failed",
499 index);
500 }
501 }
502
503 free((void*)settings->DeviceArray);
504
505 if (!freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, nullptr))
506 WLog_WARN(TAG,
507 "freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, nullptr) failed");
508 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0))
509 WLog_WARN(TAG, "freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0) failed");
510 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0))
511 WLog_WARN(TAG, "freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0) failed");
512}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_pointer(rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *val)
Set a pointer to value val.

◆ freerdp_device_equal()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_device_equal ( const RDPDR_DEVICE *  what,
const RDPDR_DEVICE *  other 
)

Definition at line 2073 of file common/settings.c.

2074{
2075 if (!what && !other)
2076 return TRUE;
2077 if (!what || !other)
2078 return FALSE;
2079
2080 if (what->Id != other->Id)
2081 return FALSE;
2082 if (what->Type != other->Type)
2083 return FALSE;
2084 if (what->Name && other->Name)
2085 {
2086 if (strcmp(what->Name, other->Name) != 0)
2087 return FALSE;
2088 }
2089 else
2090 {
2091 if (what->Name != other->Name)
2092 return FALSE;
2093 }
2094
2095 switch (what->Type)
2096 {
2097 case RDPDR_DTYP_PRINT:
2098 {
2099 const RDPDR_PRINTER* a = (const RDPDR_PRINTER*)what;
2100 const RDPDR_PRINTER* b = (const RDPDR_PRINTER*)other;
2101 if (a->DriverName && b->DriverName)
2102 return strcmp(a->DriverName, b->DriverName) == 0;
2103 return a->DriverName == b->DriverName;
2104 }
2105
2106 case RDPDR_DTYP_SERIAL:
2107 {
2108 const RDPDR_SERIAL* a = (const RDPDR_SERIAL*)what;
2109 const RDPDR_SERIAL* b = (const RDPDR_SERIAL*)other;
2110
2111 if (a->Path && b->Path)
2112 {
2113 if (strcmp(a->Path, b->Path) != 0)
2114 return FALSE;
2115 }
2116 else if (a->Path != b->Path)
2117 return FALSE;
2118
2119 if (a->Driver && b->Driver)
2120 {
2121 if (strcmp(a->Driver, b->Driver) != 0)
2122 return FALSE;
2123 }
2124 else if (a->Driver != b->Driver)
2125 return FALSE;
2126 if (a->Permissive && b->Permissive)
2127 return strcmp(a->Permissive, b->Permissive) == 0;
2128 return a->Permissive == b->Permissive;
2129 }
2130
2131 case RDPDR_DTYP_PARALLEL:
2132 {
2133 const RDPDR_PARALLEL* a = (const RDPDR_PARALLEL*)what;
2134 const RDPDR_PARALLEL* b = (const RDPDR_PARALLEL*)other;
2135 if (a->Path && b->Path)
2136 return strcmp(a->Path, b->Path) == 0;
2137 return a->Path == b->Path;
2138 }
2139
2140 case RDPDR_DTYP_SMARTCARD:
2141 break;
2142 case RDPDR_DTYP_FILESYSTEM:
2143 {
2144 const RDPDR_DRIVE* a = (const RDPDR_DRIVE*)what;
2145 const RDPDR_DRIVE* b = (const RDPDR_DRIVE*)other;
2146 if (a->automount != b->automount)
2147 return FALSE;
2148 if (a->Path && b->Path)
2149 return strcmp(a->Path, b->Path) == 0;
2150 return a->Path == b->Path;
2151 }
2152
2153 default:
2154 return FALSE;
2155 }
2156
2157 return TRUE;
2158}

◆ freerdp_device_free()

FREERDP_API void freerdp_device_free ( RDPDR_DEVICE *  device)

Definition at line 421 of file common/settings.c.

422{
423 if (!device)
424 return;
425
426 union
427 {
428 RDPDR_DEVICE* dev;
429 struct RDPDR_DEVICE_EX* ex;
430 } cnv;
431
432 cnv.dev = device;
433
434 switch (device->Type)
435 {
436 case RDPDR_DTYP_PRINT:
437 free(cnv.ex->u.printer.DriverName);
438 break;
439 case RDPDR_DTYP_SERIAL:
440 free(cnv.ex->u.serial.Path);
441 free(cnv.ex->u.serial.Driver);
442 free(cnv.ex->u.serial.Permissive);
443 break;
444 case RDPDR_DTYP_PARALLEL:
445 free(cnv.ex->u.parallel.Path);
446 break;
447 case RDPDR_DTYP_SMARTCARD:
448 break;
449 case RDPDR_DTYP_FILESYSTEM:
450 free(cnv.ex->u.drive.Path);
451 break;
452 default:
453 break;
454 }
455 freerdp_addin_argv_free(cnv.ex->args);
456 free(cnv.dev->Name);
457 free(cnv.dev);
458}

◆ freerdp_device_get_args()

WINPR_ATTR_NODISCARD FREERDP_API const ADDIN_ARGV * freerdp_device_get_args ( const RDPDR_DEVICE *  device)

return the arguments passed to the device channel.

Parameters
deviceThe device to get the arguments for
Returns
A pointer to the device arguments. Might be nullptr if not supported.
Since
version 3.27.0

Definition at line 4673 of file common/settings.c.

4674{
4675 if (!device)
4676 return nullptr;
4677 union
4678 {
4679 const RDPDR_DEVICE* dev;
4680 const struct RDPDR_DEVICE_EX* ex;
4681 } cnv;
4682
4683 cnv.dev = device;
4684 return cnv.ex->args;
4685}

◆ freerdp_device_new()

FREERDP_API RDPDR_DEVICE * freerdp_device_new ( UINT32  Type,
size_t  count,
const char *const  args[] 
)

Definition at line 319 of file common/settings.c.

320{
321 WINPR_ASSERT(args || (count == 0));
322
323 switch (Type)
324 {
325 case RDPDR_DTYP_PRINT:
326 case RDPDR_DTYP_SERIAL:
327 case RDPDR_DTYP_PARALLEL:
328 case RDPDR_DTYP_SMARTCARD:
329 case RDPDR_DTYP_FILESYSTEM:
330 break;
331 default:
332 return nullptr;
333 }
334
335 const size_t size = sizeof(struct RDPDR_DEVICE_EX);
336 struct RDPDR_DEVICE_EX* device = calloc(1, size);
337 if (!device)
338 goto fail;
339 device->u.base.Id = 0;
340 device->u.base.Type = Type;
341
342 if (count > 0)
343 {
344 device->u.base.Name = _strdup(args[0]);
345 if (!device->u.base.Name)
346 goto fail;
347
348 switch (Type)
349 {
350 case RDPDR_DTYP_PRINT:
351 if (count > 1)
352 {
353 device->u.printer.DriverName = _strdup(args[1]);
354 if (!device->u.printer.DriverName)
355 goto fail;
356 }
357
358 if (count > 2)
359 {
360 device->u.printer.IsDefault = _stricmp(args[2], "default") == 0;
361 }
362 break;
363 case RDPDR_DTYP_SERIAL:
364 if (count > 1)
365 {
366 device->u.serial.Path = _strdup(args[1]);
367 if (!device->u.serial.Path)
368 goto fail;
369 }
370
371 if (count > 2)
372 {
373 device->u.serial.Driver = _strdup(args[2]);
374 if (!device->u.serial.Driver)
375 goto fail;
376 }
377
378 if (count > 3)
379 {
380 device->u.serial.Permissive = _strdup(args[3]);
381 if (!device->u.serial.Permissive)
382 goto fail;
383 }
384 break;
385 case RDPDR_DTYP_PARALLEL:
386 if (count > 1)
387 {
388 device->u.parallel.Path = _strdup(args[1]);
389 if (!device->u.serial.Path)
390 goto fail;
391 }
392 break;
393 case RDPDR_DTYP_SMARTCARD:
394 break;
395 case RDPDR_DTYP_FILESYSTEM:
396 if (count > 1)
397 {
398 device->u.drive.Path = _strdup(args[1]);
399 if (!device->u.drive.Path)
400 goto fail;
401 }
402 if (count > 2)
403 device->u.drive.automount = (args[2] == nullptr);
404 break;
405 default:
406 goto fail;
407 }
408
409 device->args = freerdp_addin_argv_new(count, args);
410 if (!device->args)
411 goto fail;
412 }
413 return &device->u.base;
414
415fail:
416 if (device)
417 freerdp_device_free(&device->u.base);
418 return nullptr;
419}

◆ freerdp_dynamic_channel_collection_add()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_dynamic_channel_collection_add ( rdpSettings *  settings,
ADDIN_ARGV *  channel 
)

Definition at line 657 of file common/settings.c.

658{
659 UINT32 count = 0;
660 UINT32 oldSize = 0;
661
662 WINPR_ASSERT(settings);
663 WINPR_ASSERT(channel);
664
665 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount) + 1;
666 oldSize = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
667 if (oldSize < count)
668 {
669
670 const size_t size = oldSize + 32;
671 ADDIN_ARGV** new_array =
672 (ADDIN_ARGV**)realloc((void*)settings->DynamicChannelArray, sizeof(ADDIN_ARGV*) * size);
673
674 if (!new_array)
675 return FALSE;
676
677 settings->DynamicChannelArray = new_array;
678 {
679 for (size_t x = oldSize; x < size; x++)
680 settings->DynamicChannelArray[x] = nullptr;
681 }
682 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize,
683 WINPR_ASSERTING_INT_CAST(uint32_t, size)))
684 return FALSE;
685 }
686
687 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
688 settings->DynamicChannelArray[count++] = channel;
689 return freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count);
690}

◆ freerdp_dynamic_channel_collection_del()

FREERDP_API BOOL freerdp_dynamic_channel_collection_del ( rdpSettings *  settings,
const char *  name 
)

Definition at line 626 of file common/settings.c.

627{
628 const UINT32 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
629 if (!settings || !settings->DynamicChannelArray)
630 return FALSE;
631
632 for (UINT32 x = 0; x < count; x++)
633 {
634 ADDIN_ARGV* cur = settings->DynamicChannelArray[x];
635 if (cur && (cur->argc > 0))
636 {
637 if (strcmp(name, cur->argv[0]) == 0)
638 {
639 const BOOL success = memmove_s((void*)&settings->DynamicChannelArray[x],
640 (count - x) * sizeof(ADDIN_ARGV*),
641 (void*)&settings->DynamicChannelArray[x + 1],
642 (count - x - 1) * sizeof(ADDIN_ARGV*)) >= 0;
643 for (size_t y = count - 1; y < settings->DynamicChannelArraySize; y++)
644 settings->DynamicChannelArray[y] = nullptr;
645
646 freerdp_addin_argv_free(cur);
647 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count - 1))
648 return FALSE;
649 return success;
650 }
651 }
652 }
653
654 return FALSE;
655}

◆ freerdp_dynamic_channel_collection_find()

WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV * freerdp_dynamic_channel_collection_find ( const rdpSettings *  settings,
const char *  name 
)

Definition at line 692 of file common/settings.c.

693{
694 WINPR_ASSERT(settings);
695 WINPR_ASSERT(name);
696
697 for (UINT32 index = 0;
698 index < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount); index++)
699 {
700 ADDIN_ARGV* channel = settings->DynamicChannelArray[index];
701
702 if (strcmp(channel->argv[0], name) == 0)
703 return channel;
704 }
705
706 return nullptr;
707}

◆ freerdp_dynamic_channel_collection_free()

FREERDP_API void freerdp_dynamic_channel_collection_free ( rdpSettings *  settings)

Definition at line 778 of file common/settings.c.

779{
780 WINPR_ASSERT(settings);
781
782 if (settings->DynamicChannelArray)
783 {
784 for (UINT32 i = 0;
785 i < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize); i++)
786 freerdp_addin_argv_free(settings->DynamicChannelArray[i]);
787 }
788
789 free((void*)settings->DynamicChannelArray);
790 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0))
791 WLog_WARN(
792 TAG,
793 "freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0) failed");
794 settings->DynamicChannelArray = nullptr;
795 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0))
796 WLog_WARN(TAG,
797 "freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0) failed");
798}

◆ freerdp_encryption_level_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_encryption_level_string ( UINT32  EncryptionLevel)

Definition at line 2330 of file common/settings.c.

2331{
2332 switch (EncryptionLevel)
2333 {
2334 case ENCRYPTION_LEVEL_NONE:
2335 return "ENCRYPTION_LEVEL_NONE";
2336 case ENCRYPTION_LEVEL_LOW:
2337 return "ENCRYPTION_LEVEL_LOW";
2338 case ENCRYPTION_LEVEL_CLIENT_COMPATIBLE:
2339 return "ENCRYPTION_LEVEL_CLIENT_COMPATIBLE";
2340 case ENCRYPTION_LEVEL_HIGH:
2341 return "ENCRYPTION_LEVEL_HIGH";
2342 case ENCRYPTION_LEVEL_FIPS:
2343 return "ENCRYPTION_LEVEL_FIPS";
2344 default:
2345 return "ENCRYPTION_LEVEL_UNKNOWN";
2346 }
2347}

◆ freerdp_encryption_methods_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_encryption_methods_string ( UINT32  EncryptionMethods,
char *  buffer,
size_t  size 
)

Definition at line 2349 of file common/settings.c.

2350{
2351 if (EncryptionMethods == ENCRYPTION_METHOD_NONE)
2352 {
2353 winpr_str_append("ENCRYPTION_METHOD_NONE", buffer, size, "|");
2354 return buffer;
2355 }
2356
2357 if (EncryptionMethods & ENCRYPTION_METHOD_40BIT)
2358 {
2359 winpr_str_append("ENCRYPTION_METHOD_40BIT", buffer, size, "|");
2360 }
2361 if (EncryptionMethods & ENCRYPTION_METHOD_128BIT)
2362 {
2363 winpr_str_append("ENCRYPTION_METHOD_128BIT", buffer, size, "|");
2364 }
2365 if (EncryptionMethods & ENCRYPTION_METHOD_56BIT)
2366 {
2367 winpr_str_append("ENCRYPTION_METHOD_56BIT", buffer, size, "|");
2368 }
2369 if (EncryptionMethods & ENCRYPTION_METHOD_FIPS)
2370 {
2371 winpr_str_append("ENCRYPTION_METHOD_FIPS", buffer, size, "|");
2372 }
2373
2374 return buffer;
2375}

◆ freerdp_get_gateway_usage_method()

WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_get_gateway_usage_method ( const rdpSettings *  settings)

Definition at line 1144 of file common/settings.c.

1145{
1146 if (freerdp_settings_get_bool(settings, FreeRDP_GatewayEnabled))
1147 {
1148 if (freerdp_settings_get_bool(settings, FreeRDP_GatewayBypassLocal))
1149 return TSC_PROXY_MODE_DETECT;
1150 return TSC_PROXY_MODE_DIRECT;
1151 }
1152
1153 return freerdp_settings_get_uint32(settings, FreeRDP_GatewayUsageMethod);
1154}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_get_bool(const rdpSettings *settings, FreeRDP_Settings_Keys_Bool id)
Returns a boolean settings value.

◆ freerdp_performance_flags_make()

FREERDP_API void freerdp_performance_flags_make ( rdpSettings *  settings)

Definition at line 1035 of file common/settings.c.

1036{
1037 UINT32 PerformanceFlags = PERF_FLAG_NONE;
1038
1039 if (freerdp_settings_get_bool(settings, FreeRDP_AllowFontSmoothing))
1040 PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
1041
1042 if (freerdp_settings_get_bool(settings, FreeRDP_AllowDesktopComposition))
1043 PerformanceFlags |= PERF_ENABLE_DESKTOP_COMPOSITION;
1044
1045 if (freerdp_settings_get_bool(settings, FreeRDP_DisableWallpaper))
1046 PerformanceFlags |= PERF_DISABLE_WALLPAPER;
1047
1048 if (freerdp_settings_get_bool(settings, FreeRDP_DisableFullWindowDrag))
1049 PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
1050
1051 if (freerdp_settings_get_bool(settings, FreeRDP_DisableMenuAnims))
1052 PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
1053
1054 if (freerdp_settings_get_bool(settings, FreeRDP_DisableThemes))
1055 PerformanceFlags |= PERF_DISABLE_THEMING;
1056 if (!freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags))
1057 WLog_WARN(TAG,
1058 "freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, 0x%08" PRIx32
1059 ") failed",
1060 PerformanceFlags);
1061}

◆ freerdp_performance_flags_split()

FREERDP_API void freerdp_performance_flags_split ( rdpSettings *  settings)

Definition at line 1063 of file common/settings.c.

1064{
1065 BOOL res =
1066 freerdp_settings_set_bool(settings, FreeRDP_AllowFontSmoothing,
1067 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1068 PERF_ENABLE_FONT_SMOOTHING) != 0);
1070 settings, FreeRDP_AllowDesktopComposition,
1071 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1072 PERF_ENABLE_DESKTOP_COMPOSITION) != 0))
1073 res = FALSE;
1075 settings, FreeRDP_DisableWallpaper,
1076 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1077 PERF_DISABLE_WALLPAPER) != 0))
1078 res = FALSE;
1080 settings, FreeRDP_DisableFullWindowDrag,
1081 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1082 PERF_DISABLE_FULLWINDOWDRAG) != 0))
1083 res = FALSE;
1085 settings, FreeRDP_DisableMenuAnims,
1086 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1087 PERF_DISABLE_MENUANIMATIONS) != 0))
1088 res = FALSE;
1090 settings, FreeRDP_DisableThemes,
1091 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1092 PERF_DISABLE_THEMING) != 0))
1093 res = FALSE;
1094 if (!res)
1095 {
1096 WLog_WARN(TAG, "freerdp_performance_flags_split() failed");
1097 }
1098}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_bool(rdpSettings *settings, FreeRDP_Settings_Keys_Bool id, BOOL val)
Sets a BOOL settings value.

◆ freerdp_rail_support_flags_to_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_rail_support_flags_to_string ( UINT32  flags,
char *  buffer,
size_t  length 
)

Returns a stringified representation of RAIL support flags.

Parameters
flagsThe flags to stringify
bufferA pointer to the string buffer to write to
lengthThe size of the string buffer
Returns
A pointer to buffer for success, nullptr otherwise

Definition at line 2160 of file common/settings.c.

2161{
2162 const UINT32 mask =
2163 RAIL_LEVEL_SUPPORTED | RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED |
2164 RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED | RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED |
2165 RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED | RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED |
2166 RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED | RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED;
2167
2168 if (flags & RAIL_LEVEL_SUPPORTED)
2169 winpr_str_append("RAIL_LEVEL_SUPPORTED", buffer, length, "|");
2170 if (flags & RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED)
2171 winpr_str_append("RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED", buffer, length, "|");
2172 if (flags & RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED)
2173 winpr_str_append("RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED", buffer, length, "|");
2174 if (flags & RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED)
2175 winpr_str_append("RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED", buffer, length, "|");
2176 if (flags & RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED)
2177 winpr_str_append("RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED", buffer, length, "|");
2178 if (flags & RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED)
2179 winpr_str_append("RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED", buffer, length, "|");
2180 if (flags & RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED)
2181 winpr_str_append("RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED", buffer, length, "|");
2182 if (flags & RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED)
2183 winpr_str_append("RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED", buffer, length, "|");
2184
2185 if ((flags & ~mask) != 0)
2186 {
2187 char tbuffer[64] = WINPR_C_ARRAY_INIT;
2188 (void)_snprintf(tbuffer, sizeof(tbuffer), "RAIL_FLAG_UNKNOWN 0x%08" PRIx32, flags & mask);
2189 winpr_str_append(tbuffer, buffer, length, "|");
2190 }
2191 return buffer;
2192}

◆ freerdp_rdp_version_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_rdp_version_string ( UINT32  version)

Returns a stringified representation of the RDP protocol version.

Parameters
versionThe RDP protocol version number.
Returns
A string representation of the protocol version as "RDP_VERSION_10_11" or "RDP_VERSION_UNKNOWN" for invalid/unknown versions

Definition at line 2221 of file common/settings.c.

2222{
2223 switch (version)
2224 {
2225 case RDP_VERSION_4:
2226 return "RDP_VERSION_4";
2227 case RDP_VERSION_5_PLUS:
2228 return "RDP_VERSION_5_PLUS";
2229 case RDP_VERSION_10_0:
2230 return "RDP_VERSION_10_0";
2231 case RDP_VERSION_10_1:
2232 return "RDP_VERSION_10_1";
2233 case RDP_VERSION_10_2:
2234 return "RDP_VERSION_10_2";
2235 case RDP_VERSION_10_3:
2236 return "RDP_VERSION_10_3";
2237 case RDP_VERSION_10_4:
2238 return "RDP_VERSION_10_4";
2239 case RDP_VERSION_10_5:
2240 return "RDP_VERSION_10_5";
2241 case RDP_VERSION_10_6:
2242 return "RDP_VERSION_10_6";
2243 case RDP_VERSION_10_7:
2244 return "RDP_VERSION_10_7";
2245 case RDP_VERSION_10_8:
2246 return "RDP_VERSION_10_8";
2247 case RDP_VERSION_10_9:
2248 return "RDP_VERSION_10_9";
2249 case RDP_VERSION_10_10:
2250 return "RDP_VERSION_10_10";
2251 case RDP_VERSION_10_11:
2252 return "RDP_VERSION_10_11";
2253 case RDP_VERSION_10_12:
2254 return "RDP_VERSION_10_12";
2255 default:
2256 return "RDP_VERSION_UNKNOWN";
2257 }
2258}

◆ freerdp_rdpdr_dtyp_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_rdpdr_dtyp_string ( UINT32  type)

Returns a string representation of RDPDR_DTYP_*.

Parameters
typeThe integer of the RDPDR_DTYP_* to stringify
Returns
A string representation of the RDPDR_DTYP_* or "RDPDR_DTYP_UNKNOWN"

Definition at line 2311 of file common/settings.c.

2312{
2313 switch (type)
2314 {
2315 case RDPDR_DTYP_FILESYSTEM:
2316 return "RDPDR_DTYP_FILESYSTEM";
2317 case RDPDR_DTYP_PARALLEL:
2318 return "RDPDR_DTYP_PARALLEL";
2319 case RDPDR_DTYP_PRINT:
2320 return "RDPDR_DTYP_PRINT";
2321 case RDPDR_DTYP_SERIAL:
2322 return "RDPDR_DTYP_SERIAL";
2323 case RDPDR_DTYP_SMARTCARD:
2324 return "RDPDR_DTYP_SMARTCARD";
2325 default:
2326 return "RDPDR_DTYP_UNKNOWN";
2327 }
2328}

◆ freerdp_server_license_issuers_copy()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_server_license_issuers_copy ( rdpSettings *  settings,
char **  issuers,
UINT32  count 
)

Definition at line 1015 of file common/settings.c.

1016{
1017 WINPR_ASSERT(settings);
1018 WINPR_ASSERT(issuers || (count == 0));
1019
1020 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_ServerLicenseProductIssuers, nullptr,
1021 count))
1022 return FALSE;
1023
1024 for (UINT32 x = 0; x < count; x++)
1025 {
1026 char* issuer = _strdup(issuers[x]);
1027 if (!issuer)
1028 return FALSE;
1029 settings->ServerLicenseProductIssuers[x] = issuer;
1030 }
1031
1032 return TRUE;
1033}
BOOL freerdp_settings_set_pointer_len(rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *data, size_t len)
Set a pointer to value data.

◆ freerdp_server_license_issuers_free()

FREERDP_API void freerdp_server_license_issuers_free ( rdpSettings *  settings)

Definition at line 1001 of file common/settings.c.

1002{
1003 WINPR_ASSERT(settings);
1004
1005 if (settings->ServerLicenseProductIssuers)
1006 {
1007 for (UINT32 x = 0; x < settings->ServerLicenseProductIssuersCount; x++)
1008 free(settings->ServerLicenseProductIssuers[x]);
1009 }
1010 free((void*)settings->ServerLicenseProductIssuers);
1011 settings->ServerLicenseProductIssuers = nullptr;
1012 settings->ServerLicenseProductIssuersCount = 0;
1013}

◆ freerdp_set_gateway_usage_method()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_set_gateway_usage_method ( rdpSettings *  settings,
UINT32  GatewayUsageMethod 
)

This corresponds to "Automatically detect RD Gateway server settings", which means the client attempts to use gateway group policy settings http://technet.microsoft.com/en-us/library/cc770601.aspx

Definition at line 1100 of file common/settings.c.

1101{
1102 if (!freerdp_settings_set_uint32(settings, FreeRDP_GatewayUsageMethod, GatewayUsageMethod))
1103 return FALSE;
1104
1105 if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DIRECT)
1106 {
1107 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1108 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1109 return FALSE;
1110 }
1111 else if (GatewayUsageMethod == TSC_PROXY_MODE_DIRECT)
1112 {
1113 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1114 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1115 return FALSE;
1116 }
1117 else if (GatewayUsageMethod == TSC_PROXY_MODE_DETECT)
1118 {
1119 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1120 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, TRUE))
1121 return FALSE;
1122 }
1123 else if (GatewayUsageMethod == TSC_PROXY_MODE_DEFAULT)
1124 {
1130 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1131 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1132 return FALSE;
1133 }
1134 else if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DETECT)
1135 {
1136 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1137 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1138 return FALSE;
1139 }
1140
1141 return TRUE;
1142}

References freerdp_settings_set_bool(), and freerdp_settings_set_uint32().

Here is the call graph for this function:

◆ freerdp_settings_append_string()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_append_string ( rdpSettings *  settings,
FreeRDP_Settings_Keys_String  id,
const char *  separator,
const char *  param 
)

appends a string to a settings value. The param is copied. If the initial value of the setting was not empty,

<old value><separator><param>

is created

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
separatorThe separator string to use. May be nullptr (no separator)
paramThe value to append
Returns
TRUE for success, FALSE for failure

Definition at line 2402 of file common/settings.c.

2404{
2405 const char* old = freerdp_settings_get_string(settings, id);
2406
2407 size_t len = 0;
2408 char* str = nullptr;
2409
2410 if (!old)
2411 winpr_asprintf(&str, &len, "%s", param);
2412 else if (!separator)
2413 winpr_asprintf(&str, &len, "%s%s", old, param);
2414 else
2415 winpr_asprintf(&str, &len, "%s%s%s", old, separator, param);
2416
2417 const BOOL rc = freerdp_settings_set_string_len(settings, id, str, len);
2418 free(str);
2419 return rc;
2420}
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_string(const rdpSettings *settings, FreeRDP_Settings_Keys_String id)
Returns a immutable string settings value.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string_len(rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *val, size_t len)
Sets a string settings value. The val is copied.

References freerdp_settings_get_string(), and freerdp_settings_set_string_len().

Here is the call graph for this function:

◆ freerdp_settings_are_valid()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_are_valid ( const rdpSettings *  settings)

Returns TRUE if settings are in a valid state, FALSE otherwise.

This function is meant to replace tideous return checks for freerdp_settings_set_* with a single check after these calls.

Parameters
settingsthe settings instance to check
Returns
TRUE if valid, FALSE otherwise

Definition at line 2422 of file common/settings.c.

2423{
2424 return settings != nullptr;
2425}

◆ freerdp_settings_clone()

FREERDP_API rdpSettings * freerdp_settings_clone ( const rdpSettings *  settings)

Creates a deep copy of settings.

Parameters
settingsA pointer to a settings struct to copy. May be nullptr (returns nullptr)
Returns
A newly allocated copy of settings or nullptr

Definition at line 1633 of file core/settings.c.

1634{
1635 rdpSettings* dst = (rdpSettings*)calloc(1, sizeof(rdpSettings));
1636
1637 if (!freerdp_settings_copy(dst, settings))
1638 goto out_fail;
1639
1640 return dst;
1641out_fail:
1642 WINPR_PRAGMA_DIAG_PUSH
1643 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1645 WINPR_PRAGMA_DIAG_POP
1646 return nullptr;
1647}
BOOL freerdp_settings_copy(rdpSettings *dst, const rdpSettings *src)
Deep copies settings from src to dst.
void freerdp_settings_free(rdpSettings *settings)
Free a settings struct with all data in it.

References freerdp_settings_copy(), and freerdp_settings_free().

Here is the call graph for this function:

◆ freerdp_settings_copy()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_copy ( rdpSettings *  dst,
const rdpSettings *  src 
)

Deep copies settings from src to dst.

The function frees up all allocated data in dst before copying the data from src

Parameters
dstA pointer for the settings to copy data to. May be nullptr (fails copy)
srcA pointer to the settings to copy. May be nullptr (fails copy)
Returns
TRUE for success, FALSE for failure.

Definition at line 1607 of file core/settings.c.

1608{
1609 BOOL rc = 0;
1610
1611 if (!dst || !src)
1612 return FALSE;
1613
1614 /* This is required to free all non string buffers */
1615 freerdp_settings_free_internal(dst);
1616
1617 /* This copies everything except allocated non string buffers. reset all allocated buffers to
1618 * nullptr to fix issues during cleanup */
1619 rc = freerdp_settings_clone_keys(dst, src);
1620 if (!rc)
1621 goto out_fail;
1622 freerdp_settings_free_internal_ensure_reset(dst);
1623
1624 /* Begin copying */
1625 if (!freerdp_settings_int_buffer_copy(dst, src))
1626 goto out_fail;
1627 return TRUE;
1628out_fail:
1629 freerdp_settings_free_internal(dst);
1630 return FALSE;
1631}

Referenced by freerdp_settings_clone().

Here is the caller graph for this function:

◆ freerdp_settings_copy_item()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_copy_item ( rdpSettings *  dst,
const rdpSettings *  src,
SSIZE_T  id 
)

copies one setting identified by id from src to dst

The function frees up all allocated data in dst before copying the data from src

Parameters
dstA pointer for the settings to copy data to. May be nullptr (fails copy)
srcA pointer to the settings to copy. May be nullptr (fails copy)
idThe settings identifier to copy
Returns
TRUE for success, FALSE for failure.

Definition at line 443 of file settings_str.c.

444{
445 WINPR_ASSERT(dst);
446 WINPR_ASSERT(src);
447
448 const SSIZE_T key = freerdp_settings_get_type_for_key(id);
449 switch (key)
450 {
451 case FREERDP_SETTINGS_TYPE_BOOL:
452 {
453 const BOOL val = freerdp_settings_get_bool(src, (FreeRDP_Settings_Keys_Bool)id);
454 return freerdp_settings_set_bool(dst, (FreeRDP_Settings_Keys_Bool)id, val);
455 }
456 case FREERDP_SETTINGS_TYPE_INT16:
457 {
458 const INT16 val = freerdp_settings_get_int16(src, (FreeRDP_Settings_Keys_Int16)id);
459 return freerdp_settings_set_int16(dst, (FreeRDP_Settings_Keys_Int16)id, val);
460 }
461 case FREERDP_SETTINGS_TYPE_INT32:
462 {
463 const INT32 val = freerdp_settings_get_int32(src, (FreeRDP_Settings_Keys_Int32)id);
464 return freerdp_settings_set_int32(dst, (FreeRDP_Settings_Keys_Int32)id, val);
465 }
466 case FREERDP_SETTINGS_TYPE_INT64:
467 {
468 const INT64 val = freerdp_settings_get_int64(src, (FreeRDP_Settings_Keys_Int64)id);
469 return freerdp_settings_set_int64(dst, (FreeRDP_Settings_Keys_Int64)id, val);
470 }
471 case FREERDP_SETTINGS_TYPE_UINT16:
472 {
473 const UINT16 val = freerdp_settings_get_uint16(src, (FreeRDP_Settings_Keys_UInt16)id);
474 return freerdp_settings_set_uint16(dst, (FreeRDP_Settings_Keys_UInt16)id, val);
475 }
476 case FREERDP_SETTINGS_TYPE_UINT32:
477 {
478 const UINT32 val = freerdp_settings_get_uint32(src, (FreeRDP_Settings_Keys_UInt32)id);
479 return freerdp_settings_set_uint32(dst, (FreeRDP_Settings_Keys_UInt32)id, val);
480 }
481 case FREERDP_SETTINGS_TYPE_UINT64:
482 {
483 const UINT64 val = freerdp_settings_get_uint64(src, (FreeRDP_Settings_Keys_UInt64)id);
484 return freerdp_settings_set_uint64(dst, (FreeRDP_Settings_Keys_UInt64)id, val);
485 }
486 case FREERDP_SETTINGS_TYPE_STRING:
487 {
488 const char* val = freerdp_settings_get_string(src, (FreeRDP_Settings_Keys_String)id);
489 return freerdp_settings_set_string(dst, (FreeRDP_Settings_Keys_String)id, val);
490 }
491 case FREERDP_SETTINGS_TYPE_POINTER:
492 {
493 const void* val = freerdp_settings_get_pointer(src, (FreeRDP_Settings_Keys_Pointer)id);
494 return freerdp_settings_set_pointer(dst, (FreeRDP_Settings_Keys_Pointer)id, val);
495 }
496 default:
497 return FALSE;
498 }
499}
WINPR_ATTR_NODISCARD FREERDP_API const void * freerdp_settings_get_pointer(const rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id)
Returns a immutable pointer settings value.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_int64(rdpSettings *settings, FreeRDP_Settings_Keys_Int64 id, INT64 val)
Sets a INT64 settings value.
WINPR_ATTR_NODISCARD FREERDP_API INT32 freerdp_settings_get_int32(const rdpSettings *settings, FreeRDP_Settings_Keys_Int32 id)
Returns a INT32 settings value.
WINPR_ATTR_NODISCARD FREERDP_API UINT16 freerdp_settings_get_uint16(const rdpSettings *settings, FreeRDP_Settings_Keys_UInt16 id)
Returns a UINT16 settings value.
WINPR_ATTR_NODISCARD FREERDP_API UINT64 freerdp_settings_get_uint64(const rdpSettings *settings, FreeRDP_Settings_Keys_UInt64 id)
Returns a UINT64 settings value.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint64(rdpSettings *settings, FreeRDP_Settings_Keys_UInt64 id, UINT64 val)
Sets a UINT64 settings value.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_int16(rdpSettings *settings, FreeRDP_Settings_Keys_Int16 id, INT16 val)
Sets a INT16 settings value.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_int32(rdpSettings *settings, FreeRDP_Settings_Keys_Int32 id, INT32 val)
Sets a INT32 settings value.
WINPR_ATTR_NODISCARD FREERDP_API INT16 freerdp_settings_get_int16(const rdpSettings *settings, FreeRDP_Settings_Keys_Int16 id)
Returns a INT16 settings value.
WINPR_ATTR_NODISCARD FREERDP_API INT64 freerdp_settings_get_int64(const rdpSettings *settings, FreeRDP_Settings_Keys_Int64 id)
Returns a INT64 settings value.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint16(rdpSettings *settings, FreeRDP_Settings_Keys_UInt16 id, UINT16 val)
Sets a UINT16 settings value.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string(rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *val)
Sets a string settings value. The param is copied.
SSIZE_T freerdp_settings_get_type_for_key(SSIZE_T key)
Get a key type for the key index.

References freerdp_settings_get_bool(), freerdp_settings_get_int16(), freerdp_settings_get_int32(), freerdp_settings_get_int64(), freerdp_settings_get_pointer(), freerdp_settings_get_string(), freerdp_settings_get_type_for_key(), freerdp_settings_get_uint16(), freerdp_settings_get_uint32(), freerdp_settings_get_uint64(), freerdp_settings_set_bool(), freerdp_settings_set_int16(), freerdp_settings_set_int32(), freerdp_settings_set_int64(), freerdp_settings_set_pointer(), freerdp_settings_set_string(), freerdp_settings_set_uint16(), freerdp_settings_set_uint32(), and freerdp_settings_set_uint64().

Here is the call graph for this function:

◆ freerdp_settings_deserialize()

WINPR_ATTR_NODISCARD FREERDP_API rdpSettings * freerdp_settings_deserialize ( const char *  jstr,
size_t  length 
)

A function that converts a JSON string to a rdpSettings struct.

Parameters
jstrThe JSON string
lengthThe strlen of the JSON string
Returns
An allocated rdpSettings struct or nullptr in case of an error
Since
version 3.16.0

Definition at line 4535 of file common/settings.c.

4536{
4537 wLog* log = WLog_Get(TAG);
4538 WINPR_JSON* json = WINPR_JSON_ParseWithLength(jstr, length);
4539 if (!json)
4540 {
4541 WLog_Print(log, WLOG_ERROR, "JSON parsing failed");
4542 return nullptr;
4543 }
4544
4545 WINPR_JSON* jbool = WINPR_JSON_GetObjectItemCaseSensitive(
4546 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_BOOL));
4547 WINPR_JSON* juint16 = WINPR_JSON_GetObjectItemCaseSensitive(
4548 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT16));
4549 WINPR_JSON* jint16 = WINPR_JSON_GetObjectItemCaseSensitive(
4550 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT16));
4551 WINPR_JSON* juint32 = WINPR_JSON_GetObjectItemCaseSensitive(
4552 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT32));
4553 WINPR_JSON* jint32 = WINPR_JSON_GetObjectItemCaseSensitive(
4554 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT32));
4555 WINPR_JSON* juint64 = WINPR_JSON_GetObjectItemCaseSensitive(
4556 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT64));
4557 WINPR_JSON* jint64 = WINPR_JSON_GetObjectItemCaseSensitive(
4558 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT64));
4559 WINPR_JSON* jstring = WINPR_JSON_GetObjectItemCaseSensitive(
4560 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_STRING));
4561 WINPR_JSON* jpointer = WINPR_JSON_GetObjectItemCaseSensitive(
4562 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_POINTER));
4563
4564 rdpSettings* settings = freerdp_settings_new(0);
4565 if (!settings)
4566 {
4567 WLog_Print(log, WLOG_ERROR, "freerdp_settings_new failed");
4568 goto fail;
4569 }
4570 if (!jbool || !juint16 || !jint16 || !juint32 || !jint32 || !juint64 || !jint64 || !jstring ||
4571 !jpointer)
4572 goto fail;
4573
4574 for (int x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
4575 {
4576 union
4577 {
4578
4579 int s;
4580 FreeRDP_Settings_Keys_Bool b;
4581 FreeRDP_Settings_Keys_Int16 i16;
4582 FreeRDP_Settings_Keys_UInt16 u16;
4583 FreeRDP_Settings_Keys_Int32 i32;
4584 FreeRDP_Settings_Keys_UInt32 u32;
4585 FreeRDP_Settings_Keys_Int64 i64;
4586 FreeRDP_Settings_Keys_UInt64 u64;
4587 FreeRDP_Settings_Keys_String str;
4588 FreeRDP_Settings_Keys_Pointer ptr;
4589 } iter;
4590 iter.s = x;
4591
4592 SSIZE_T type = freerdp_settings_get_type_for_key(iter.s);
4593 switch (type)
4594 {
4595 case RDP_SETTINGS_TYPE_POINTER:
4596 if (!deserialize_pointer(jpointer, settings, iter.ptr))
4597 goto fail;
4598 break;
4599 default:
4600 break;
4601 }
4602 }
4603
4604 for (int x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
4605 {
4606 union
4607 {
4608
4609 int s;
4610 FreeRDP_Settings_Keys_Bool b;
4611 FreeRDP_Settings_Keys_Int16 i16;
4612 FreeRDP_Settings_Keys_UInt16 u16;
4613 FreeRDP_Settings_Keys_Int32 i32;
4614 FreeRDP_Settings_Keys_UInt32 u32;
4615 FreeRDP_Settings_Keys_Int64 i64;
4616 FreeRDP_Settings_Keys_UInt64 u64;
4617 FreeRDP_Settings_Keys_String str;
4618 FreeRDP_Settings_Keys_Pointer ptr;
4619 } iter;
4620 iter.s = x;
4621
4622 const char* name = freerdp_settings_get_name_for_key(iter.s);
4623 SSIZE_T type = freerdp_settings_get_type_for_key(iter.s);
4624 switch (type)
4625 {
4626 case RDP_SETTINGS_TYPE_BOOL:
4627 if (!settings_json_bool(log, settings, iter.b, jbool, name))
4628 goto fail;
4629 break;
4630 case RDP_SETTINGS_TYPE_UINT16:
4631 if (!settings_json_uint16(log, settings, iter.u16, juint16, name))
4632 goto fail;
4633 break;
4634 case RDP_SETTINGS_TYPE_INT16:
4635 if (!settings_json_int16(log, settings, iter.i16, jint16, name))
4636 goto fail;
4637 break;
4638 case RDP_SETTINGS_TYPE_UINT32:
4639 if (!settings_json_uint32(log, settings, iter.u32, juint32, name))
4640 goto fail;
4641 break;
4642 case RDP_SETTINGS_TYPE_INT32:
4643 if (!settings_json_int32(log, settings, iter.i32, jint32, name))
4644 goto fail;
4645 break;
4646 case RDP_SETTINGS_TYPE_UINT64:
4647 if (!settings_json_uint64(log, settings, iter.u64, juint64, name))
4648 goto fail;
4649 break;
4650 case RDP_SETTINGS_TYPE_INT64:
4651 if (!settings_json_int64(log, settings, iter.i64, jint64, name))
4652 goto fail;
4653 break;
4654 case RDP_SETTINGS_TYPE_STRING:
4655 if (!settings_json_string(log, settings, iter.str, jstring, name))
4656 goto fail;
4657 break;
4658 case RDP_SETTINGS_TYPE_POINTER:
4659 default:
4660 break;
4661 }
4662 }
4663
4664 WINPR_JSON_Delete(json);
4665 return settings;
4666
4667fail:
4668 freerdp_settings_free(settings);
4669 WINPR_JSON_Delete(json);
4670 return nullptr;
4671}
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_GetObjectItemCaseSensitive(const WINPR_JSON *object, const char *string)
Same as WINPR_JSON_GetObjectItem but with case sensitive matching.
Definition c-json.c:127
WINPR_API WINPR_JSON * WINPR_JSON_ParseWithLength(const char *value, size_t buffer_length)
Parse a JSON string.
Definition c-json.c:98
WINPR_API void WINPR_JSON_Delete(WINPR_JSON *item)
Delete a WinPR JSON wrapper object.
Definition c-json.c:103
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_type(SSIZE_T type)
Returns the type name for a type.
FREERDP_API rdpSettings * freerdp_settings_new(DWORD flags)
creates a new setting struct
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_name_for_key(SSIZE_T key)
Returns the type name for a key.

References freerdp_settings_free(), freerdp_settings_get_name_for_key(), freerdp_settings_get_type_for_key(), freerdp_settings_get_type_name_for_type(), freerdp_settings_new(), WINPR_JSON_Delete(), WINPR_JSON_GetObjectItemCaseSensitive(), and WINPR_JSON_ParseWithLength().

Here is the call graph for this function:

◆ freerdp_settings_dump()

FREERDP_API void freerdp_settings_dump ( wLog *  log,
DWORD  level,
const rdpSettings *  settings 
)

Dumps the contents of a settings struct to a WLog logger.

Parameters
logThe logger to write to, must not be nullptr
levelThe WLog level to use for the log entries
settingsA pointer to the settings to dump. May be nullptr.

Definition at line 249 of file settings_str.c.

250{
251 WINPR_ASSERT(log);
252 WINPR_ASSERT(settings);
253
254 for (size_t x = 0; x < ARRAYSIZE(settings_map); x++)
255 {
256 const struct settings_str_entry* cur = &settings_map[x];
257 switch (cur->type)
258 {
259 case FREERDP_SETTINGS_TYPE_BOOL: /* bool */
260 {
261 BOOL sval =
262 freerdp_settings_get_bool(settings, (FreeRDP_Settings_Keys_Bool)cur->id);
263 WLog_Print(log, level, "%s [BOOL]: %s", cur->str, sval ? "TRUE" : "FALSE");
264 }
265 break;
266 case FREERDP_SETTINGS_TYPE_UINT16: /* UINT16 */
267 {
268 UINT16 sval =
269 freerdp_settings_get_uint16(settings, (FreeRDP_Settings_Keys_UInt16)cur->id);
270 WLog_Print(log, level, "%s [UINT16]: %" PRIu16, cur->str, sval);
271 }
272 break;
273 case FREERDP_SETTINGS_TYPE_INT16: /* INT16 */
274 {
275 INT16 sval =
276 freerdp_settings_get_int16(settings, (FreeRDP_Settings_Keys_Int16)cur->id);
277 WLog_Print(log, level, "%s [INT16]: %" PRId16, cur->str, sval);
278 }
279 break;
280 case FREERDP_SETTINGS_TYPE_UINT32: /* UINT32 */
281 {
282 UINT32 sval =
283 freerdp_settings_get_uint32(settings, (FreeRDP_Settings_Keys_UInt32)cur->id);
284 WLog_Print(log, level, "%s [UINT32]: %" PRIu32, cur->str, sval);
285 }
286 break;
287 case FREERDP_SETTINGS_TYPE_INT32: /* INT32 */
288 {
289 INT32 sval =
290 freerdp_settings_get_int32(settings, (FreeRDP_Settings_Keys_Int32)cur->id);
291 WLog_Print(log, level, "%s [INT32]: %" PRId32, cur->str, sval);
292 }
293 break;
294 case FREERDP_SETTINGS_TYPE_UINT64: /* UINT64 */
295 {
296 UINT64 sval =
297 freerdp_settings_get_uint64(settings, (FreeRDP_Settings_Keys_UInt64)cur->id);
298 WLog_Print(log, level, "%s [UINT64]: %" PRIu64, cur->str, sval);
299 }
300 break;
301 case FREERDP_SETTINGS_TYPE_INT64: /* INT64 */
302 {
303 INT64 sval =
304 freerdp_settings_get_int64(settings, (FreeRDP_Settings_Keys_Int64)cur->id);
305 WLog_Print(log, level, "%s [INT64]: %" PRId64, cur->str, sval);
306 }
307 break;
308 case FREERDP_SETTINGS_TYPE_STRING: /* strings */
309 {
310 const char* sval =
311 freerdp_settings_get_string(settings, (FreeRDP_Settings_Keys_String)cur->id);
312 WLog_Print(log, level, "%s [STRING]: '%s'", cur->str, sval);
313 }
314 break;
315 case FREERDP_SETTINGS_TYPE_POINTER: /* pointer */
316 {
317 const void* sval =
318 freerdp_settings_get_pointer(settings, (FreeRDP_Settings_Keys_Pointer)cur->id);
319 WLog_Print(log, level, "%s [POINTER]: '%p'", cur->str, sval);
320 }
321 break;
322 default:
323 break;
324 }
325 }
326}

References freerdp_settings_get_bool(), freerdp_settings_get_int16(), freerdp_settings_get_int32(), freerdp_settings_get_int64(), freerdp_settings_get_pointer(), freerdp_settings_get_string(), freerdp_settings_get_uint16(), freerdp_settings_get_uint32(), and freerdp_settings_get_uint64().

Here is the call graph for this function:

◆ freerdp_settings_free()

FREERDP_API void freerdp_settings_free ( rdpSettings *  settings)

Free a settings struct with all data in it.

Parameters
settingsA pointer to the settings to free, May be nullptr

Definition at line 1385 of file core/settings.c.

1386{
1387 if (!settings)
1388 return;
1389
1390 freerdp_settings_free_internal(settings);
1391 free(settings);
1392}

Referenced by freerdp_settings_clone(), freerdp_settings_deserialize(), and freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_get_bool()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_get_bool ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_Bool  id 
)

Returns a boolean settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the value of the boolean key

Referenced by freerdp_settings_copy_item(), freerdp_settings_dump(), freerdp_settings_new(), freerdp_settings_print_diff(), freerdp_settings_serialize(), and AppDelegate::rdpConnectError:.

Here is the caller graph for this function:

◆ freerdp_settings_get_codecs_flags()

WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_codecs_flags ( const rdpSettings *  settings)

helper function to get a mask of supported codec flags.

This function checks various settings to create a mask of supported codecs FreeRDP_CodecFlags defines the codecs

Parameters
settingsthe settings to check
Returns
a mask of supported codecs

Definition at line 2014 of file common/settings.c.

2015{
2016 UINT32 flags = FREERDP_CODEC_ALL;
2017 if (settings->RemoteFxCodec == FALSE)
2018 {
2019 flags &= (uint32_t)~FREERDP_CODEC_REMOTEFX;
2020 }
2021 if (settings->NSCodec == FALSE)
2022 {
2023 flags &= (uint32_t)~FREERDP_CODEC_NSCODEC;
2024 }
2025 /*TODO: check other codecs flags */
2026 return flags;
2027}

◆ freerdp_settings_get_config_path()

WINPR_ATTR_NODISCARD FREERDP_API char * freerdp_settings_get_config_path ( void  )

return the configuration directory for the library

Returns
The current configuration path or nullptr
Since
version 3.6.0
Note
Since 3.17.1 this is a wrapper for freerdp_GetConfigFilePath(FALSE, "")

Definition at line 811 of file core/settings.c.

812{
813 return freerdp_GetConfigFilePath(FALSE, "");
814}

Referenced by freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_get_int16()

WINPR_ATTR_NODISCARD FREERDP_API INT16 freerdp_settings_get_int16 ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_Int16  id 
)

Returns a INT16 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the value of the INT16 key

Referenced by freerdp_settings_copy_item(), freerdp_settings_dump(), freerdp_settings_print_diff(), and freerdp_settings_serialize().

Here is the caller graph for this function:

◆ freerdp_settings_get_int32()

WINPR_ATTR_NODISCARD FREERDP_API INT32 freerdp_settings_get_int32 ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_Int32  id 
)

Returns a INT32 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the value of the INT32 key

Referenced by freerdp_settings_copy_item(), freerdp_settings_dump(), freerdp_settings_print_diff(), and freerdp_settings_serialize().

Here is the caller graph for this function:

◆ freerdp_settings_get_int64()

WINPR_ATTR_NODISCARD FREERDP_API INT64 freerdp_settings_get_int64 ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_Int64  id 
)

Returns a INT64 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the value of the INT64 key

Referenced by freerdp_settings_copy_item(), freerdp_settings_dump(), freerdp_settings_print_diff(), and freerdp_settings_serialize().

Here is the caller graph for this function:

◆ freerdp_settings_get_key_for_name()

WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_key_for_name ( const char *  value)

Get a key index for the name string of that key.

Parameters
valueA key name string like FreeRDP_ServerMode
Returns
The key index or -1 in case of an error (e.g. name does not exist)

Definition at line 362 of file settings_str.c.

363{
364 WINPR_ASSERT(value);
365
366 for (size_t x = 0; x < ARRAYSIZE(settings_map); x++)
367 {
368 const struct settings_str_entry* cur = &settings_map[x];
369 if (strcmp(value, cur->str) == 0)
370 return cur->id;
371 }
372 return -1;
373}

◆ freerdp_settings_get_name_for_key()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_name_for_key ( SSIZE_T  key)

Returns the type name for a key.

Parameters
keythe key number to stringify
Returns
the name of the key or nullptr

Definition at line 432 of file settings_str.c.

433{
434 for (size_t x = 0; x < ARRAYSIZE(settings_map); x++)
435 {
436 const struct settings_str_entry* cur = &settings_map[x];
437 if (cur->id == key)
438 return cur->str;
439 }
440 return nullptr;
441}

Referenced by freerdp_settings_deserialize(), freerdp_settings_get_pointer_writable(), freerdp_settings_get_string_writable(), and freerdp_settings_serialize().

Here is the caller graph for this function:

◆ freerdp_settings_get_pointer()

WINPR_ATTR_NODISCARD FREERDP_API const void * freerdp_settings_get_pointer ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_Pointer  id 
)

Returns a immutable pointer settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the immutable pointer value

Definition at line 1420 of file common/settings.c.

1422{
1423 union
1424 {
1425 const rdpSettings* pc;
1426 rdpSettings* p;
1427 } cnv;
1428 cnv.pc = settings;
1429 return freerdp_settings_get_pointer_writable(cnv.p, id);
1430}
WINPR_ATTR_NODISCARD FREERDP_API void * freerdp_settings_get_pointer_writable(rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id)
Returns a mutable pointer settings value.

References freerdp_settings_get_pointer_writable().

Referenced by freerdp_settings_copy_item(), freerdp_settings_dump(), and freerdp_settings_print_diff().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ freerdp_settings_get_pointer_array()

WINPR_ATTR_NODISCARD FREERDP_API const void * freerdp_settings_get_pointer_array ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_Pointer  id,
size_t  offset 
)

Definition at line 2008 of file common/settings.c.

2010{
2011 return freerdp_settings_get_pointer_array_writable(settings, id, offset);
2012}

◆ freerdp_settings_get_pointer_array_writable()

WINPR_ATTR_NODISCARD FREERDP_API void * freerdp_settings_get_pointer_array_writable ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_Pointer  id,
size_t  offset 
)

Definition at line 1659 of file common/settings.c.

1661{
1662 size_t max = 0;
1663 if (!settings)
1664 return nullptr;
1665 switch (id)
1666 {
1667 case FreeRDP_ClientAutoReconnectCookie:
1668 max = 1;
1669 if ((offset >= max) || !settings->ClientAutoReconnectCookie)
1670 goto fail;
1671 return &settings->ClientAutoReconnectCookie[offset];
1672 case FreeRDP_ServerAutoReconnectCookie:
1673 max = 1;
1674 if ((offset >= max) || !settings->ServerAutoReconnectCookie)
1675 goto fail;
1676 return &settings->ServerAutoReconnectCookie[offset];
1677 case FreeRDP_ServerCertificate:
1678 max = freerdp_settings_get_uint32(settings, FreeRDP_ServerCertificateLength);
1679 if (offset >= max)
1680 goto fail;
1681 return &settings->ServerCertificate[offset];
1682 case FreeRDP_ServerRandom:
1683 max = freerdp_settings_get_uint32(settings, FreeRDP_ServerRandomLength);
1684 if (offset >= max)
1685 goto fail;
1686 return &settings->ServerRandom[offset];
1687 case FreeRDP_ClientRandom:
1688 max = freerdp_settings_get_uint32(settings, FreeRDP_ClientRandomLength);
1689 if (offset >= max)
1690 goto fail;
1691 return &settings->ClientRandom[offset];
1692 case FreeRDP_LoadBalanceInfo:
1693 max = freerdp_settings_get_uint32(settings, FreeRDP_LoadBalanceInfoLength);
1694 if (offset >= max)
1695 goto fail;
1696 return &settings->LoadBalanceInfo[offset];
1697
1698 case FreeRDP_RedirectionTsvUrl:
1699 max = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionTsvUrlLength);
1700 if (offset >= max)
1701 goto fail;
1702 return &settings->RedirectionTsvUrl[offset];
1703
1704 case FreeRDP_RedirectionPassword:
1705 max = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionPasswordLength);
1706 if (offset >= max)
1707 goto fail;
1708 return &settings->RedirectionPassword[offset];
1709
1710 case FreeRDP_OrderSupport:
1711 max = 32;
1712 if (offset >= max)
1713 goto fail;
1714 return &settings->OrderSupport[offset];
1715 case FreeRDP_MonitorIds:
1716 max = freerdp_settings_get_uint32(settings, FreeRDP_NumMonitorIds);
1717 if (offset >= max)
1718 goto fail;
1719 return &settings->MonitorIds[offset];
1720 case FreeRDP_MonitorDefArray:
1721 max = freerdp_settings_get_uint32(settings, FreeRDP_MonitorDefArraySize);
1722 if (offset >= max)
1723 goto fail;
1724 return &settings->MonitorDefArray[offset];
1725 case FreeRDP_ChannelDefArray:
1726 max = freerdp_settings_get_uint32(settings, FreeRDP_ChannelDefArraySize);
1727 if (offset >= max)
1728 goto fail;
1729 return &settings->ChannelDefArray[offset];
1730 case FreeRDP_DeviceArray:
1731 max = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
1732 if (offset >= max)
1733 goto fail;
1734 return settings->DeviceArray[offset];
1735 case FreeRDP_StaticChannelArray:
1736 max = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
1737 if (offset >= max)
1738 goto fail;
1739 return settings->StaticChannelArray[offset];
1740 case FreeRDP_DynamicChannelArray:
1741 max = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
1742 if (offset >= max)
1743 goto fail;
1744 return settings->DynamicChannelArray[offset];
1745 case FreeRDP_FragCache:
1746 max = 1;
1747 if (offset >= max)
1748 goto fail;
1749 return &settings->FragCache[offset];
1750 case FreeRDP_GlyphCache:
1751 max = 10;
1752 if (offset >= max)
1753 goto fail;
1754 return &settings->GlyphCache[offset];
1755 case FreeRDP_BitmapCacheV2CellInfo:
1756 max = freerdp_settings_get_uint32(settings, FreeRDP_BitmapCacheV2NumCells);
1757 if (offset >= max)
1758 goto fail;
1759 return &settings->BitmapCacheV2CellInfo[offset];
1760 case FreeRDP_ReceivedCapabilities:
1761 max = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
1762 if (offset >= max)
1763 goto fail;
1764 return &settings->ReceivedCapabilities[offset];
1765 case FreeRDP_TargetNetAddresses:
1766 max = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1767 if (offset >= max)
1768 goto fail;
1769 WINPR_ASSERT(settings->TargetNetAddresses);
1770 return settings->TargetNetAddresses[offset];
1771 case FreeRDP_TargetNetPorts:
1772 max = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1773 if (offset >= max)
1774 goto fail;
1775 WINPR_ASSERT(settings->TargetNetPorts);
1776 return &settings->TargetNetPorts[offset];
1777 case FreeRDP_ClientTimeZone:
1778 max = 1;
1779 if (offset >= max)
1780 goto fail;
1781 return settings->ClientTimeZone;
1782 case FreeRDP_RdpServerCertificate:
1783 max = 1;
1784 if (offset >= max)
1785 goto fail;
1786 return settings->RdpServerCertificate;
1787 case FreeRDP_RdpServerRsaKey:
1788 max = 1;
1789 if (offset >= max)
1790 goto fail;
1791 return settings->RdpServerRsaKey;
1792 case FreeRDP_ServerLicenseProductIssuers:
1793 max = freerdp_settings_get_uint32(settings, FreeRDP_ServerLicenseProductIssuersCount);
1794 if (offset >= max)
1795 goto fail;
1796 return settings->ServerLicenseProductIssuers[offset];
1797 case FreeRDP_ReceivedCapabilityData:
1798 max = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
1799 if (offset >= max)
1800 goto fail;
1801 WINPR_ASSERT(settings->ReceivedCapabilityData);
1802 return settings->ReceivedCapabilityData[offset];
1803
1804 case FreeRDP_ReceivedCapabilityDataSizes:
1805 max = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
1806 if (offset >= max)
1807 goto fail;
1808 WINPR_ASSERT(settings->ReceivedCapabilityDataSizes);
1809 return &settings->ReceivedCapabilityDataSizes[offset];
1810 default:
1811 WLog_WARN(TAG, "Invalid id %s [%d]", freerdp_settings_get_name_for_key(id), id);
1812 return nullptr;
1813 }
1814
1815fail:
1816 WLog_WARN(TAG, "Invalid offset for %s [%d]: size=%" PRIuz ", offset=%" PRIuz,
1817 freerdp_settings_get_name_for_key(id), id, max, offset);
1818 return nullptr;
1819}

◆ freerdp_settings_get_pointer_writable()

WINPR_ATTR_NODISCARD FREERDP_API void * freerdp_settings_get_pointer_writable ( rdpSettings *  settings,
FreeRDP_Settings_Keys_Pointer  id 
)

Returns a mutable pointer settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the mutable pointer value

Definition at line 4174 of file settings_getters.c.

4175{
4176 WINPR_ASSERT(settings);
4177
4178 switch (id)
4179 {
4180 case FreeRDP_BitmapCacheV2CellInfo:
4181 return (void*)settings->BitmapCacheV2CellInfo;
4182
4183 case FreeRDP_ChannelDefArray:
4184 return (void*)settings->ChannelDefArray;
4185
4186 case FreeRDP_ClientAutoReconnectCookie:
4187 return (void*)settings->ClientAutoReconnectCookie;
4188
4189 case FreeRDP_ClientRandom:
4190 return (void*)settings->ClientRandom;
4191
4192 case FreeRDP_ClientTimeZone:
4193 return (void*)settings->ClientTimeZone;
4194
4195 case FreeRDP_DeviceArray:
4196 return (void*)settings->DeviceArray;
4197
4198 case FreeRDP_DynamicChannelArray:
4199 return (void*)settings->DynamicChannelArray;
4200
4201 case FreeRDP_FragCache:
4202 return (void*)settings->FragCache;
4203
4204 case FreeRDP_GlyphCache:
4205 return (void*)settings->GlyphCache;
4206
4207 case FreeRDP_LoadBalanceInfo:
4208 return (void*)settings->LoadBalanceInfo;
4209
4210 case FreeRDP_MonitorDefArray:
4211 return (void*)settings->MonitorDefArray;
4212
4213 case FreeRDP_MonitorIds:
4214 return (void*)settings->MonitorIds;
4215
4216 case FreeRDP_OrderSupport:
4217 return (void*)settings->OrderSupport;
4218
4219 case FreeRDP_Password51:
4220 return (void*)settings->Password51;
4221
4222 case FreeRDP_RdpServerCertificate:
4223 return (void*)settings->RdpServerCertificate;
4224
4225 case FreeRDP_RdpServerRsaKey:
4226 return (void*)settings->RdpServerRsaKey;
4227
4228 case FreeRDP_ReceivedCapabilities:
4229 return (void*)settings->ReceivedCapabilities;
4230
4231 case FreeRDP_ReceivedCapabilityData:
4232 return (void*)settings->ReceivedCapabilityData;
4233
4234 case FreeRDP_ReceivedCapabilityDataSizes:
4235 return (void*)settings->ReceivedCapabilityDataSizes;
4236
4237 case FreeRDP_RedirectionGuid:
4238 return (void*)settings->RedirectionGuid;
4239
4240 case FreeRDP_RedirectionPassword:
4241 return (void*)settings->RedirectionPassword;
4242
4243 case FreeRDP_RedirectionTargetCertificate:
4244 return (void*)settings->RedirectionTargetCertificate;
4245
4246 case FreeRDP_RedirectionTsvUrl:
4247 return (void*)settings->RedirectionTsvUrl;
4248
4249 case FreeRDP_ServerAutoReconnectCookie:
4250 return (void*)settings->ServerAutoReconnectCookie;
4251
4252 case FreeRDP_ServerCertificate:
4253 return (void*)settings->ServerCertificate;
4254
4255 case FreeRDP_ServerLicenseProductIssuers:
4256 return (void*)settings->ServerLicenseProductIssuers;
4257
4258 case FreeRDP_ServerRandom:
4259 return (void*)settings->ServerRandom;
4260
4261 case FreeRDP_StaticChannelArray:
4262 return (void*)settings->StaticChannelArray;
4263
4264 case FreeRDP_TargetNetAddresses:
4265 return (void*)settings->TargetNetAddresses;
4266
4267 case FreeRDP_TargetNetPorts:
4268 return (void*)settings->TargetNetPorts;
4269
4270 case FreeRDP_instance:
4271 return settings->instance;
4272
4273 default:
4274 WLog_ERR(TAG, "Invalid key index %d [%s|%s]", id, freerdp_settings_get_name_for_key(id),
4276 WINPR_ASSERT(FALSE);
4277 return nullptr;
4278 }
4279}
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_key(SSIZE_T key)
Returns the type name for a key.

References freerdp_settings_get_name_for_key(), and freerdp_settings_get_type_name_for_key().

Referenced by freerdp_settings_get_pointer(), freerdp_settings_new(), and freerdp_settings_set_monitor_def_array_sorted().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ freerdp_settings_get_server_name()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_server_name ( const rdpSettings *  settings)

A helper function to return the correct server name.

The server name might be in key FreeRDP_ServerHostname or if used in FreeRDP_UserSpecifiedServerName. This function returns the correct name to use.

Parameters
settingsThe settings to query, must not be nullptr.
Returns
A string pointer or nullptr in case of failure.

Definition at line 2029 of file common/settings.c.

2030{
2031 WINPR_ASSERT(settings);
2032 const char* hostname = settings->ServerHostname;
2033
2034 if (settings->UserSpecifiedServerName)
2035 hostname = settings->UserSpecifiedServerName;
2036
2037 return hostname;
2038}

◆ freerdp_settings_get_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_string ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_String  id 
)

Returns a immutable string settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the immutable string pointer

Referenced by freerdp_settings_append_string(), freerdp_settings_copy_item(), freerdp_settings_dump(), freerdp_settings_get_string_as_utf16(), freerdp_settings_new(), freerdp_settings_print_diff(), and freerdp_settings_serialize().

Here is the caller graph for this function:

◆ freerdp_settings_get_string_as_utf16()

FREERDP_API WCHAR * freerdp_settings_get_string_as_utf16 ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_String  id,
size_t *  pCharLen 
)

Return an allocated UTF16 string.

Parameters
settingsA pointer to the settings struct to use
idThe settings identifier
Returns
An allocated, '\0' terminated WCHAR string or nullptr

Definition at line 2300 of file common/settings.c.

2302{
2303 const char* str = freerdp_settings_get_string(settings, id);
2304 if (pCharLen)
2305 *pCharLen = 0;
2306 if (!str)
2307 return nullptr;
2308 return ConvertUtf8ToWCharAlloc(str, pCharLen);
2309}

References freerdp_settings_get_string().

Here is the call graph for this function:

◆ freerdp_settings_get_string_writable()

WINPR_ATTR_NODISCARD FREERDP_API char * freerdp_settings_get_string_writable ( rdpSettings *  settings,
FreeRDP_Settings_Keys_String  id 
)

Returns a string settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the string pointer

Definition at line 3097 of file settings_getters.c.

3098{
3099 WINPR_ASSERT(settings);
3100
3101 switch (id)
3102 {
3103 case FreeRDP_AadAuthHelper:
3104 return settings->AadAuthHelper;
3105
3106 case FreeRDP_AadServerHostname:
3107 return settings->AadServerHostname;
3108
3109 case FreeRDP_AcceptedCert:
3110 return settings->AcceptedCert;
3111
3112 case FreeRDP_ActionScript:
3113 return settings->ActionScript;
3114
3115 case FreeRDP_AllowedTlsCiphers:
3116 return settings->AllowedTlsCiphers;
3117
3118 case FreeRDP_AlternateShell:
3119 return settings->AlternateShell;
3120
3121 case FreeRDP_AssistanceFile:
3122 return settings->AssistanceFile;
3123
3124 case FreeRDP_AuthenticationPackageList:
3125 return settings->AuthenticationPackageList;
3126
3127 case FreeRDP_AuthenticationServiceClass:
3128 return settings->AuthenticationServiceClass;
3129
3130 case FreeRDP_BitmapCachePersistFile:
3131 return settings->BitmapCachePersistFile;
3132
3133 case FreeRDP_CardName:
3134 return settings->CardName;
3135
3136 case FreeRDP_CertificateAcceptedFingerprints:
3137 return settings->CertificateAcceptedFingerprints;
3138
3139 case FreeRDP_CertificateName:
3140 return settings->CertificateName;
3141
3142 case FreeRDP_ClientAddress:
3143 return settings->ClientAddress;
3144
3145 case FreeRDP_ClientDir:
3146 return settings->ClientDir;
3147
3148 case FreeRDP_ClientHostname:
3149 return settings->ClientHostname;
3150
3151 case FreeRDP_ClientProductId:
3152 return settings->ClientProductId;
3153
3154 case FreeRDP_ClipboardUseSelection:
3155 return settings->ClipboardUseSelection;
3156
3157 case FreeRDP_ComputerName:
3158 return settings->ComputerName;
3159
3160 case FreeRDP_ConfigPath:
3161 return settings->ConfigPath;
3162
3163 case FreeRDP_ConnectionFile:
3164 return settings->ConnectionFile;
3165
3166 case FreeRDP_ContainerName:
3167 return settings->ContainerName;
3168
3169 case FreeRDP_CorrelationId:
3170 return settings->CorrelationId;
3171
3172 case FreeRDP_CspName:
3173 return settings->CspName;
3174
3175 case FreeRDP_CurrentPath:
3176 return settings->CurrentPath;
3177
3178 case FreeRDP_Domain:
3179 return settings->Domain;
3180
3181 case FreeRDP_DrivesToRedirect:
3182 return settings->DrivesToRedirect;
3183
3184 case FreeRDP_DumpRemoteFxFile:
3185 return settings->DumpRemoteFxFile;
3186
3187 case FreeRDP_DynamicDSTTimeZoneKeyName:
3188 return settings->DynamicDSTTimeZoneKeyName;
3189
3190 case FreeRDP_EndpointFedAuthToken:
3191 return settings->EndpointFedAuthToken;
3192
3193 case FreeRDP_GatewayAcceptedCert:
3194 return settings->GatewayAcceptedCert;
3195
3196 case FreeRDP_GatewayAccessToken:
3197 return settings->GatewayAccessToken;
3198
3199 case FreeRDP_GatewayAvdAadtenantid:
3200 return settings->GatewayAvdAadtenantid;
3201
3202 case FreeRDP_GatewayAvdAccessAadFormat:
3203 return settings->GatewayAvdAccessAadFormat;
3204
3205 case FreeRDP_GatewayAvdAccessTokenFormat:
3206 return settings->GatewayAvdAccessTokenFormat;
3207
3208 case FreeRDP_GatewayAvdActivityhint:
3209 return settings->GatewayAvdActivityhint;
3210
3211 case FreeRDP_GatewayAvdArmpath:
3212 return settings->GatewayAvdArmpath;
3213
3214 case FreeRDP_GatewayAvdClientID:
3215 return settings->GatewayAvdClientID;
3216
3217 case FreeRDP_GatewayAvdDiagnosticserviceurl:
3218 return settings->GatewayAvdDiagnosticserviceurl;
3219
3220 case FreeRDP_GatewayAvdGeo:
3221 return settings->GatewayAvdGeo;
3222
3223 case FreeRDP_GatewayAvdHubdiscoverygeourl:
3224 return settings->GatewayAvdHubdiscoverygeourl;
3225
3226 case FreeRDP_GatewayAvdScope:
3227 return settings->GatewayAvdScope;
3228
3229 case FreeRDP_GatewayAvdWvdEndpointPool:
3230 return settings->GatewayAvdWvdEndpointPool;
3231
3232 case FreeRDP_GatewayAzureActiveDirectory:
3233 return settings->GatewayAzureActiveDirectory;
3234
3235 case FreeRDP_GatewayDomain:
3236 return settings->GatewayDomain;
3237
3238 case FreeRDP_GatewayHostname:
3239 return settings->GatewayHostname;
3240
3241 case FreeRDP_GatewayHttpExtAuthBearer:
3242 return settings->GatewayHttpExtAuthBearer;
3243
3244 case FreeRDP_GatewayHttpMsUserAgent:
3245 return settings->GatewayHttpMsUserAgent;
3246
3247 case FreeRDP_GatewayHttpReferer:
3248 return settings->GatewayHttpReferer;
3249
3250 case FreeRDP_GatewayHttpUserAgent:
3251 return settings->GatewayHttpUserAgent;
3252
3253 case FreeRDP_GatewayPassword:
3254 return settings->GatewayPassword;
3255
3256 case FreeRDP_GatewayUrl:
3257 return settings->GatewayUrl;
3258
3259 case FreeRDP_GatewayUsername:
3260 return settings->GatewayUsername;
3261
3262 case FreeRDP_HomePath:
3263 return settings->HomePath;
3264
3265 case FreeRDP_ImeFileName:
3266 return settings->ImeFileName;
3267
3268 case FreeRDP_KerberosArmor:
3269 return settings->KerberosArmor;
3270
3271 case FreeRDP_KerberosCache:
3272 return settings->KerberosCache;
3273
3274 case FreeRDP_KerberosKdcUrl:
3275 return settings->KerberosKdcUrl;
3276
3277 case FreeRDP_KerberosKeytab:
3278 return settings->KerberosKeytab;
3279
3280 case FreeRDP_KerberosLifeTime:
3281 return settings->KerberosLifeTime;
3282
3283 case FreeRDP_KerberosRealm:
3284 return settings->KerberosRealm;
3285
3286 case FreeRDP_KerberosRenewableLifeTime:
3287 return settings->KerberosRenewableLifeTime;
3288
3289 case FreeRDP_KerberosStartTime:
3290 return settings->KerberosStartTime;
3291
3292 case FreeRDP_KeyboardPipeName:
3293 return settings->KeyboardPipeName;
3294
3295 case FreeRDP_KeyboardRemappingList:
3296 return settings->KeyboardRemappingList;
3297
3298 case FreeRDP_NtlmSamFile:
3299 return settings->NtlmSamFile;
3300
3301 case FreeRDP_Password:
3302 return settings->Password;
3303
3304 case FreeRDP_PasswordHash:
3305 return settings->PasswordHash;
3306
3307 case FreeRDP_Pkcs11Module:
3308 return settings->Pkcs11Module;
3309
3310 case FreeRDP_PkinitAnchors:
3311 return settings->PkinitAnchors;
3312
3313 case FreeRDP_PlayRemoteFxFile:
3314 return settings->PlayRemoteFxFile;
3315
3316 case FreeRDP_PreconnectionBlob:
3317 return settings->PreconnectionBlob;
3318
3319 case FreeRDP_ProxyHostname:
3320 return settings->ProxyHostname;
3321
3322 case FreeRDP_ProxyPassword:
3323 return settings->ProxyPassword;
3324
3325 case FreeRDP_ProxyUsername:
3326 return settings->ProxyUsername;
3327
3328 case FreeRDP_RDP2TCPArgs:
3329 return settings->RDP2TCPArgs;
3330
3331 case FreeRDP_ReaderName:
3332 return settings->ReaderName;
3333
3334 case FreeRDP_RedirectionAcceptedCert:
3335 return settings->RedirectionAcceptedCert;
3336
3337 case FreeRDP_RedirectionDomain:
3338 return settings->RedirectionDomain;
3339
3340 case FreeRDP_RedirectionTargetFQDN:
3341 return settings->RedirectionTargetFQDN;
3342
3343 case FreeRDP_RedirectionTargetNetBiosName:
3344 return settings->RedirectionTargetNetBiosName;
3345
3346 case FreeRDP_RedirectionUsername:
3347 return settings->RedirectionUsername;
3348
3349 case FreeRDP_RemoteApplicationCmdLine:
3350 return settings->RemoteApplicationCmdLine;
3351
3352 case FreeRDP_RemoteApplicationFile:
3353 return settings->RemoteApplicationFile;
3354
3355 case FreeRDP_RemoteApplicationGuid:
3356 return settings->RemoteApplicationGuid;
3357
3358 case FreeRDP_RemoteApplicationIcon:
3359 return settings->RemoteApplicationIcon;
3360
3361 case FreeRDP_RemoteApplicationName:
3362 return settings->RemoteApplicationName;
3363
3364 case FreeRDP_RemoteApplicationProgram:
3365 return settings->RemoteApplicationProgram;
3366
3367 case FreeRDP_RemoteApplicationWorkingDir:
3368 return settings->RemoteApplicationWorkingDir;
3369
3370 case FreeRDP_RemoteAssistancePassStub:
3371 return settings->RemoteAssistancePassStub;
3372
3373 case FreeRDP_RemoteAssistancePassword:
3374 return settings->RemoteAssistancePassword;
3375
3376 case FreeRDP_RemoteAssistanceRCTicket:
3377 return settings->RemoteAssistanceRCTicket;
3378
3379 case FreeRDP_RemoteAssistanceSessionId:
3380 return settings->RemoteAssistanceSessionId;
3381
3382 case FreeRDP_ServerHostname:
3383 return settings->ServerHostname;
3384
3385 case FreeRDP_ServerLicenseCompanyName:
3386 return settings->ServerLicenseCompanyName;
3387
3388 case FreeRDP_ServerLicenseProductName:
3389 return settings->ServerLicenseProductName;
3390
3391 case FreeRDP_ShellWorkingDirectory:
3392 return settings->ShellWorkingDirectory;
3393
3394 case FreeRDP_SmartcardCertificate:
3395 return settings->SmartcardCertificate;
3396
3397 case FreeRDP_SmartcardPrivateKey:
3398 return settings->SmartcardPrivateKey;
3399
3400 case FreeRDP_SspiClientHostname:
3401 return settings->SspiClientHostname;
3402
3403 case FreeRDP_SspiModule:
3404 return settings->SspiModule;
3405
3406 case FreeRDP_TargetNetAddress:
3407 return settings->TargetNetAddress;
3408
3409 case FreeRDP_TerminalDescriptor:
3410 return settings->TerminalDescriptor;
3411
3412 case FreeRDP_TlsSecretsFile:
3413 return settings->TlsSecretsFile;
3414
3415 case FreeRDP_TransportDumpFile:
3416 return settings->TransportDumpFile;
3417
3418 case FreeRDP_UserSpecifiedServerName:
3419 return settings->UserSpecifiedServerName;
3420
3421 case FreeRDP_Username:
3422 return settings->Username;
3423
3424 case FreeRDP_WinSCardModule:
3425 return settings->WinSCardModule;
3426
3427 case FreeRDP_WindowTitle:
3428 return settings->WindowTitle;
3429
3430 case FreeRDP_WmClass:
3431 return settings->WmClass;
3432
3433 default:
3434 WLog_ERR(TAG, "Invalid key index %d [%s|%s]", id, freerdp_settings_get_name_for_key(id),
3436 WINPR_ASSERT(FALSE);
3437 return nullptr;
3438 }
3439}

References freerdp_settings_get_name_for_key(), and freerdp_settings_get_type_name_for_key().

Here is the call graph for this function:

◆ freerdp_settings_get_type_for_key()

WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_key ( SSIZE_T  key)

Get a key type for the key index.

Parameters
keyThe key index like FreeRDP_ServerMode
Returns
The key type (e.g. FREERDP_SETTINGS_TYPE_BOOL) or -1 in case of an error (e.g. name does not exist)

Definition at line 421 of file settings_str.c.

422{
423 for (size_t x = 0; x < ARRAYSIZE(settings_map); x++)
424 {
425 const struct settings_str_entry* cur = &settings_map[x];
426 if (cur->id == key)
427 return cur->type;
428 }
429 return -1;
430}

Referenced by freerdp_settings_copy_item(), freerdp_settings_deserialize(), freerdp_settings_get_type_name_for_key(), and freerdp_settings_serialize().

Here is the caller graph for this function:

◆ freerdp_settings_get_type_for_name()

WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_name ( const char *  value)

Get a key type for the name string of that key.

Parameters
valueA key name string like FreeRDP_ServerMode
Returns
The key type (e.g. FREERDP_SETTINGS_TYPE_BOOL) or -1 in case of an error (e.g. name does not exist)

Definition at line 375 of file settings_str.c.

376{
377 WINPR_ASSERT(value);
378
379 for (size_t x = 0; x < ARRAYSIZE(settings_map); x++)
380 {
381 const struct settings_str_entry* cur = &settings_map[x];
382 if (strcmp(value, cur->str) == 0)
383 return cur->type;
384 }
385 return -1;
386}

◆ freerdp_settings_get_type_name_for_key()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_key ( SSIZE_T  key)

Returns the type name for a key.

Parameters
keythe key number to stringify
Returns
the type name of the key or FREERDP_SETTINGS_TYPE_UNKNOWN

Definition at line 388 of file settings_str.c.

389{
390 const SSIZE_T type = freerdp_settings_get_type_for_key(key);
392}

References freerdp_settings_get_type_for_key(), and freerdp_settings_get_type_name_for_type().

Referenced by freerdp_settings_get_pointer_writable(), and freerdp_settings_get_string_writable().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ freerdp_settings_get_type_name_for_type()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_type ( SSIZE_T  type)

Returns the type name for a type.

Parameters
typethe type to stringify
Returns
the name of the key or FREERDP_SETTINGS_TYPE_UNKNOWN

Definition at line 394 of file settings_str.c.

395{
396 switch (type)
397 {
398 case FREERDP_SETTINGS_TYPE_BOOL:
399 return "FREERDP_SETTINGS_TYPE_BOOL";
400 case FREERDP_SETTINGS_TYPE_UINT16:
401 return "FREERDP_SETTINGS_TYPE_UINT16";
402 case FREERDP_SETTINGS_TYPE_INT16:
403 return "FREERDP_SETTINGS_TYPE_INT16";
404 case FREERDP_SETTINGS_TYPE_UINT32:
405 return "FREERDP_SETTINGS_TYPE_UINT32";
406 case FREERDP_SETTINGS_TYPE_INT32:
407 return "FREERDP_SETTINGS_TYPE_INT32";
408 case FREERDP_SETTINGS_TYPE_UINT64:
409 return "FREERDP_SETTINGS_TYPE_UINT64";
410 case FREERDP_SETTINGS_TYPE_INT64:
411 return "FREERDP_SETTINGS_TYPE_INT64";
412 case FREERDP_SETTINGS_TYPE_STRING:
413 return "FREERDP_SETTINGS_TYPE_STRING";
414 case FREERDP_SETTINGS_TYPE_POINTER:
415 return "FREERDP_SETTINGS_TYPE_POINTER";
416 default:
417 return "FREERDP_SETTINGS_TYPE_UNKNOWN";
418 }
419}

Referenced by freerdp_settings_deserialize(), freerdp_settings_get_type_name_for_key(), and freerdp_settings_serialize().

Here is the caller graph for this function:

◆ freerdp_settings_get_uint16()

WINPR_ATTR_NODISCARD FREERDP_API UINT16 freerdp_settings_get_uint16 ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_UInt16  id 
)

Returns a UINT16 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the value of the UINT16 key

Referenced by freerdp_settings_copy_item(), freerdp_settings_dump(), freerdp_settings_print_diff(), and freerdp_settings_serialize().

Here is the caller graph for this function:

◆ freerdp_settings_get_uint32()

WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_uint32 ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_UInt32  id 
)

Returns a UINT32 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the value of the UINT32 key

Referenced by freerdp_settings_copy_item(), freerdp_settings_dump(), freerdp_settings_print_diff(), freerdp_settings_serialize(), and AppDelegate::rdpConnectError:.

Here is the caller graph for this function:

◆ freerdp_settings_get_uint64()

WINPR_ATTR_NODISCARD FREERDP_API UINT64 freerdp_settings_get_uint64 ( const rdpSettings *  settings,
FreeRDP_Settings_Keys_UInt64  id 
)

Returns a UINT64 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
Returns
the value of the UINT64 key

Referenced by freerdp_settings_copy_item(), freerdp_settings_dump(), freerdp_settings_print_diff(), and freerdp_settings_serialize().

Here is the caller graph for this function:

◆ freerdp_settings_new()

FREERDP_API rdpSettings * freerdp_settings_new ( DWORD  flags)

creates a new setting struct

Parameters
flagsFlags for creation, use FREERDP_SETTINGS_SERVER_MODE for server settings, 0 for client.
Returns
A newly allocated settings struct or nullptr

Definition at line 816 of file core/settings.c.

817{
818 const BOOL server = ((flags & FREERDP_SETTINGS_SERVER_MODE) != 0);
819 const BOOL remote = ((flags & FREERDP_SETTINGS_REMOTE_MODE) != 0);
820 rdpSettings* settings = (rdpSettings*)calloc(1, sizeof(rdpSettings));
821
822 if (!settings)
823 return nullptr;
824
825 {
826 const char* vendor = freerdp_getApplicationDetailsVendor();
827 const char* product = freerdp_getApplicationDetailsProduct();
828 const char* details = freerdp_getApplicationDetailsString();
829 char* issuer1 = nullptr;
830 char* issuer2 = nullptr;
831 char* issuer3 = nullptr;
832 size_t len = 0;
833 (void)winpr_asprintf(&issuer1, &len, "%s-licenser", freerdp_getApplicationDetailsString());
834 (void)winpr_asprintf(&issuer2, &len, "%s-licenser", freerdp_getApplicationDetailsVendor());
835 (void)winpr_asprintf(&issuer3, &len, "%s-licenser", freerdp_getApplicationDetailsProduct());
836
837 char* issuers[] = { WINPR_CAST_CONST_PTR_AWAY(vendor, char*),
838 WINPR_CAST_CONST_PTR_AWAY(product, char*),
839 WINPR_CAST_CONST_PTR_AWAY(details, char*),
840 issuer1,
841 issuer2,
842 issuer3 };
843
844 const BOOL res = freerdp_server_license_issuers_copy(settings, issuers, ARRAYSIZE(issuers));
845 free(issuer1);
846 free(issuer2);
847 free(issuer3);
848 if (!res)
849 goto out_fail;
850 }
851 if (!server && !remote)
852 {
853 if (!freerdp_settings_set_string(settings, FreeRDP_GatewayHttpUserAgent,
854 FREERDP_USER_AGENT))
855 goto out_fail;
856 if (!freerdp_settings_set_string(settings, FreeRDP_GatewayHttpMsUserAgent,
857 FREERDP_USER_AGENT))
858 goto out_fail;
859
860 if (!freerdp_settings_set_string(settings, FreeRDP_GatewayHttpReferer, ""))
861 goto out_fail;
862 if (!freerdp_settings_set_string(settings, FreeRDP_GatewayAvdAccessTokenFormat,
863 "ms-appx-web%%3a%%2f%%2fMicrosoft.AAD.BrokerPlugin%%2f%s"))
864 goto out_fail;
865 if (!freerdp_settings_set_string(settings, FreeRDP_GatewayAvdAccessAadFormat,
866 "https%%3A%%2F%%2F%s%%2F%s%%2Foauth2%%2Fnativeclient"))
867 goto out_fail;
868 if (!freerdp_settings_set_string(settings, FreeRDP_GatewayAvdScope,
869 "https%3A%2F%2Fwww.wvd.microsoft.com%2F.default%20openid%"
870 "20profile%20offline_access"))
871
872 goto out_fail;
873 if (!freerdp_settings_set_string(settings, FreeRDP_GatewayAvdClientID,
874 "a85cf173-4192-42f8-81fa-777a763e6e2c"))
875 goto out_fail;
876 if (!freerdp_settings_set_string(settings, FreeRDP_GatewayAzureActiveDirectory,
877 "login.microsoftonline.com"))
878 goto out_fail;
879 if (!freerdp_settings_set_string(settings, FreeRDP_GatewayAvdAadtenantid, "common"))
880 goto out_fail;
881 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayAvdUseTenantid, FALSE))
882 goto out_fail;
883 if (!freerdp_settings_set_uint32(settings, FreeRDP_DesktopPhysicalWidth, 1000))
884 goto out_fail;
885 if (!freerdp_settings_set_uint32(settings, FreeRDP_DesktopPhysicalHeight, 1000))
886 goto out_fail;
887 if (!freerdp_settings_set_uint16(settings, FreeRDP_DesktopOrientation,
888 ORIENTATION_LANDSCAPE))
889 goto out_fail;
890 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceScaleFactor, 100))
891 goto out_fail;
892 if (!freerdp_settings_set_uint32(settings, FreeRDP_DesktopScaleFactor, 100))
893 goto out_fail;
894 }
895 if (!freerdp_settings_set_uint32(settings, FreeRDP_SurfaceCommandsSupported,
896 SURFCMDS_SET_SURFACE_BITS | SURFCMDS_STREAM_SURFACE_BITS |
897 SURFCMDS_FRAME_MARKER))
898 goto out_fail;
899
900 if (!freerdp_settings_set_uint32(settings, FreeRDP_RemoteFxRlgrMode, RLGR3))
901 goto out_fail;
902
903 if (!freerdp_settings_set_uint16(settings, FreeRDP_CapsProtocolVersion,
904 TS_CAPS_PROTOCOLVERSION))
905 goto out_fail;
906
907 if (!freerdp_settings_set_uint32(settings, FreeRDP_ClipboardFeatureMask,
908 CLIPRDR_FLAG_DEFAULT_MASK))
909 goto out_fail;
910 if (!freerdp_settings_set_string(settings, FreeRDP_ServerLicenseCompanyName,
911 freerdp_getApplicationDetailsVendor()))
912 goto out_fail;
913
914 {
915 size_t len = 0;
916 char* val = nullptr;
917 (void)winpr_asprintf(&val, &len, "%s-licensing-server",
918 freerdp_getApplicationDetailsProduct());
919 if (!val)
920 goto out_fail;
921
922 const BOOL rc =
923 freerdp_settings_set_string(settings, FreeRDP_ServerLicenseProductName, val);
924 free(val);
925 if (!rc)
926 goto out_fail;
927 }
928
929 if (!freerdp_settings_set_uint32(settings, FreeRDP_ServerLicenseProductVersion, 1))
930 goto out_fail;
931
932 if (!freerdp_settings_set_uint16(settings, FreeRDP_SupportedColorDepths,
933 RNS_UD_32BPP_SUPPORT | RNS_UD_24BPP_SUPPORT |
934 RNS_UD_16BPP_SUPPORT | RNS_UD_15BPP_SUPPORT))
935 goto out_fail;
936
937 const UINT32 railflags = TS_RAIL_CLIENTSTATUS_ALLOWLOCALMOVESIZE |
938 TS_RAIL_CLIENTSTATUS_ZORDER_SYNC |
939 TS_RAIL_CLIENTSTATUS_WINDOW_RESIZE_MARGIN_SUPPORTED |
940 TS_RAIL_CLIENTSTATUS_APPBAR_REMOTING_SUPPORTED |
941 TS_RAIL_CLIENTSTATUS_POWER_DISPLAY_REQUEST_SUPPORTED |
942 TS_RAIL_CLIENTSTATUS_BIDIRECTIONAL_CLOAK_SUPPORTED;
943 if (!freerdp_settings_set_uint32(settings, FreeRDP_RemoteAppFeatureFlags, railflags))
944 goto out_fail;
945
946 if (!freerdp_settings_set_bool(settings, FreeRDP_UnicodeInput, TRUE) ||
947 !freerdp_settings_set_bool(settings, FreeRDP_HasHorizontalWheel, TRUE) ||
948 !freerdp_settings_set_bool(settings, FreeRDP_HasExtendedMouseEvent, TRUE) ||
949 !freerdp_settings_set_bool(settings, FreeRDP_HasQoeEvent, TRUE) ||
950 !freerdp_settings_set_bool(settings, FreeRDP_HasRelativeMouseEvent, TRUE) ||
951 !freerdp_settings_set_bool(settings, FreeRDP_HiDefRemoteApp, TRUE) ||
953 settings, FreeRDP_RemoteApplicationSupportMask,
954 RAIL_LEVEL_SUPPORTED | RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED |
955 RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED | RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED |
956 RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED |
957 RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED | RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED |
958 RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED) ||
959 !freerdp_settings_set_uint16(settings, FreeRDP_TextANSICodePage, CP_UTF8) ||
960 !freerdp_settings_set_uint16(settings, FreeRDP_OrderSupportFlags,
961 NEGOTIATE_ORDER_SUPPORT | ZERO_BOUNDS_DELTA_SUPPORT |
962 COLOR_INDEX_SUPPORT) ||
963 !freerdp_settings_set_bool(settings, FreeRDP_SupportHeartbeatPdu, TRUE) ||
964 !freerdp_settings_set_bool(settings, FreeRDP_ServerMode, server) ||
965 !freerdp_settings_set_bool(settings, FreeRDP_WaitForOutputBufferFlush, TRUE) ||
966 !freerdp_settings_set_uint32(settings, FreeRDP_ClusterInfoFlags, REDIRECTION_SUPPORTED) ||
967 !freerdp_settings_set_uint32(settings, FreeRDP_DesktopWidth, 1024) ||
968 !freerdp_settings_set_uint32(settings, FreeRDP_DesktopHeight, 768) ||
969 !freerdp_settings_set_bool(settings, FreeRDP_Workarea, FALSE) ||
970 !freerdp_settings_set_bool(settings, FreeRDP_Fullscreen, FALSE) ||
971 !freerdp_settings_set_bool(settings, FreeRDP_GrabKeyboard, TRUE) ||
972 !freerdp_settings_set_bool(settings, FreeRDP_Decorations, TRUE) ||
973 !freerdp_settings_set_uint32(settings, FreeRDP_RdpVersion, RDP_VERSION_10_12) ||
974 !freerdp_settings_set_uint32(settings, FreeRDP_ColorDepth, 32) ||
975 !freerdp_settings_set_bool(settings, FreeRDP_AadSecurity, FALSE) ||
976 !freerdp_settings_set_bool(settings, FreeRDP_ExtSecurity, TRUE) ||
977 !freerdp_settings_set_bool(settings, FreeRDP_NlaSecurity, TRUE) ||
978 !freerdp_settings_set_bool(settings, FreeRDP_TlsSecurity, TRUE) ||
979 !freerdp_settings_set_bool(settings, FreeRDP_RdpSecurity, TRUE) ||
980 !freerdp_settings_set_bool(settings, FreeRDP_RdstlsSecurity, FALSE) ||
981 !freerdp_settings_set_bool(settings, FreeRDP_NegotiateSecurityLayer, TRUE) ||
982 !freerdp_settings_set_bool(settings, FreeRDP_RestrictedAdminModeRequired, FALSE) ||
983 !freerdp_settings_set_bool(settings, FreeRDP_RestrictedAdminModeSupported, TRUE) ||
984 !freerdp_settings_set_bool(settings, FreeRDP_MstscCookieMode, FALSE) ||
985 !freerdp_settings_set_uint32(settings, FreeRDP_CookieMaxLength,
986 DEFAULT_COOKIE_MAX_LENGTH) ||
987 !freerdp_settings_set_uint32(settings, FreeRDP_ClientBuild,
988 18363) || /* Windows 10, Version 1909 */
989 !freerdp_settings_set_uint32(settings, FreeRDP_KeyboardType, WINPR_KBD_TYPE_IBM_ENHANCED) ||
990 !freerdp_settings_set_uint32(settings, FreeRDP_KeyboardSubType, 0) ||
991 !freerdp_settings_set_uint32(settings, FreeRDP_KeyboardFunctionKey, 12) ||
992 !freerdp_settings_set_uint32(settings, FreeRDP_KeyboardLayout, 0) ||
993 !freerdp_settings_set_uint32(settings, FreeRDP_KeyboardHook,
994 KEYBOARD_HOOK_FULLSCREEN_ONLY) ||
995 !freerdp_settings_set_bool(settings, FreeRDP_UseRdpSecurityLayer, FALSE) ||
996 !freerdp_settings_set_bool(settings, FreeRDP_SaltedChecksum, TRUE) ||
997 !freerdp_settings_set_uint32(settings, FreeRDP_ServerPort, 3389) ||
998 !freerdp_settings_set_uint32(settings, FreeRDP_GatewayPort, 443) ||
999 !freerdp_settings_set_bool(settings, FreeRDP_DesktopResize, TRUE) ||
1000 !freerdp_settings_set_bool(settings, FreeRDP_ToggleFullscreen, TRUE) ||
1001 !freerdp_settings_set_uint32(settings, FreeRDP_DesktopPosX, UINT32_MAX) ||
1002 !freerdp_settings_set_uint32(settings, FreeRDP_DesktopPosY, UINT32_MAX) ||
1003 !freerdp_settings_set_bool(settings, FreeRDP_SoftwareGdi, TRUE) ||
1004 !freerdp_settings_set_bool(settings, FreeRDP_UnmapButtons, FALSE) ||
1005 !freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PERF_FLAG_NONE) ||
1006 !freerdp_settings_set_bool(settings, FreeRDP_AllowFontSmoothing, TRUE) ||
1007 !freerdp_settings_set_bool(settings, FreeRDP_AllowDesktopComposition, FALSE) ||
1008 !freerdp_settings_set_bool(settings, FreeRDP_DisableWallpaper, FALSE) ||
1009 !freerdp_settings_set_bool(settings, FreeRDP_DisableFullWindowDrag, TRUE) ||
1010 !freerdp_settings_set_bool(settings, FreeRDP_DisableMenuAnims, TRUE) ||
1011 !freerdp_settings_set_bool(settings, FreeRDP_DisableThemes, FALSE) ||
1012 !freerdp_settings_set_uint32(settings, FreeRDP_ConnectionType,
1013 CONNECTION_TYPE_AUTODETECT) ||
1014 !freerdp_settings_set_bool(settings, FreeRDP_NetworkAutoDetect, TRUE) ||
1015 !freerdp_settings_set_uint32(settings, FreeRDP_EncryptionMethods, ENCRYPTION_METHOD_NONE) ||
1016 !freerdp_settings_set_uint32(settings, FreeRDP_EncryptionLevel, ENCRYPTION_LEVEL_NONE) ||
1017 !freerdp_settings_set_bool(settings, FreeRDP_FIPSMode, FALSE) ||
1018 !freerdp_settings_set_bool(settings, FreeRDP_CompressionEnabled, TRUE) ||
1019 !freerdp_settings_set_bool(settings, FreeRDP_LogonNotify, TRUE) ||
1020 !freerdp_settings_set_uint32(settings, FreeRDP_BrushSupportLevel, BRUSH_COLOR_FULL) ||
1021 !freerdp_settings_set_uint32(settings, FreeRDP_CompressionLevel, PACKET_COMPR_TYPE_RDP61) ||
1022 !freerdp_settings_set_bool(settings, FreeRDP_Authentication, TRUE) ||
1023 !freerdp_settings_set_bool(settings, FreeRDP_AuthenticationOnly, FALSE) ||
1024 !freerdp_settings_set_bool(settings, FreeRDP_CredentialsFromStdin, FALSE) ||
1025 !freerdp_settings_set_bool(settings, FreeRDP_DisableCredentialsDelegation, FALSE) ||
1026 !freerdp_settings_set_uint32(settings, FreeRDP_AuthenticationLevel, 2) ||
1027 !freerdp_settings_set_uint32(settings, FreeRDP_ChannelCount, 0) ||
1028 !freerdp_settings_set_bool(settings, FreeRDP_CertificateCallbackPreferPEM, FALSE) ||
1029 !freerdp_settings_set_uint32(settings, FreeRDP_KeySpec, AT_KEYEXCHANGE))
1030 goto out_fail;
1031
1032 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_ChannelDefArray, nullptr,
1033 CHANNEL_MAX_COUNT))
1034 goto out_fail;
1035
1036 if (!freerdp_settings_set_bool(settings, FreeRDP_SupportMonitorLayoutPdu, FALSE))
1037 goto out_fail;
1038
1039 if (!freerdp_settings_set_uint32(settings, FreeRDP_MonitorCount, 0))
1040 goto out_fail;
1041
1042 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_MonitorDefArray, nullptr, 32))
1043 goto out_fail;
1044
1045 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftX, 0))
1046 goto out_fail;
1047
1048 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftY, 0))
1049 goto out_fail;
1050
1051 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_MonitorIds, nullptr, 0))
1052 goto out_fail;
1053
1054 if (!freerdp_settings_set_uint32(settings, FreeRDP_MultitransportFlags,
1055 TRANSPORT_TYPE_UDP_FECR))
1056 goto out_fail;
1057 if (!freerdp_settings_set_bool(settings, FreeRDP_SupportMultitransport, TRUE))
1058 goto out_fail;
1059
1060 if (!settings_init_computer_name(settings))
1061 goto out_fail;
1062
1063 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_RdpServerCertificate, nullptr, 1))
1064 goto out_fail;
1065
1066 if (!freerdp_capability_buffer_resize(settings, 32, FALSE))
1067 goto out_fail;
1068
1069 {
1070 char tmp[32] = WINPR_C_ARRAY_INIT;
1071 if (!freerdp_settings_set_string_len(settings, FreeRDP_ClientProductId, tmp, sizeof(tmp)))
1072 goto out_fail;
1073 }
1074
1075 /* [MS-RDPBCGR] 2.2.7.1.5 Pointer Capability Set (TS_POINTER_CAPABILITYSET)
1076 *
1077 * if we are in server mode send a reasonable large cache size,
1078 * if we are in client mode just set the value to the maximum we want to
1079 * support and during capability exchange that size will be limited to the
1080 * sizes the server supports
1081 *
1082 * We have chosen 128 cursors in cache which is at worst 128 * 576kB (384x384 pixel cursor with
1083 * 32bit color depth)
1084 * */
1085 if (freerdp_settings_get_bool(settings, FreeRDP_ServerMode))
1086 {
1087 if (!freerdp_settings_set_uint32(settings, FreeRDP_PointerCacheSize, 25) ||
1088 !freerdp_settings_set_uint32(settings, FreeRDP_ColorPointerCacheSize, 25))
1089 goto out_fail;
1090 }
1091 else
1092 {
1093 if (!freerdp_settings_set_uint32(settings, FreeRDP_PointerCacheSize, 128) ||
1094 !freerdp_settings_set_uint32(settings, FreeRDP_ColorPointerCacheSize, 128))
1095 goto out_fail;
1096 }
1097
1098 if (!freerdp_settings_set_uint32(settings, FreeRDP_LargePointerFlag,
1099 (LARGE_POINTER_FLAG_96x96 | LARGE_POINTER_FLAG_384x384)) ||
1100 !freerdp_settings_set_bool(settings, FreeRDP_SoundBeepsEnabled, TRUE) ||
1101 !freerdp_settings_set_bool(settings, FreeRDP_DrawGdiPlusEnabled, FALSE) ||
1102 !freerdp_settings_set_bool(settings, FreeRDP_DrawAllowSkipAlpha, TRUE) ||
1103 !freerdp_settings_set_bool(settings, FreeRDP_DrawAllowColorSubsampling, FALSE) ||
1104 !freerdp_settings_set_bool(settings, FreeRDP_DrawAllowDynamicColorFidelity, TRUE) ||
1105 !freerdp_settings_set_bool(settings, FreeRDP_FrameMarkerCommandEnabled, TRUE) ||
1106 !freerdp_settings_set_bool(settings, FreeRDP_SurfaceFrameMarkerEnabled, TRUE) ||
1107 !freerdp_settings_set_bool(settings, FreeRDP_AllowCacheWaitingList, TRUE))
1108 goto out_fail;
1109
1110 const BITMAP_CACHE_V2_CELL_INFO CellInfo[5] = {
1111 { 600, FALSE }, { 600, FALSE }, { 65536, FALSE }, { 4096, FALSE }, { 2048, FALSE }
1112 };
1113 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_BitmapCacheV2CellInfo, CellInfo,
1114 ARRAYSIZE(CellInfo)))
1115 goto out_fail;
1116
1117 if (!freerdp_settings_set_bool(settings, FreeRDP_NoBitmapCompressionHeader, TRUE) ||
1118 !freerdp_settings_set_bool(settings, FreeRDP_RefreshRect, TRUE) ||
1119 !freerdp_settings_set_bool(settings, FreeRDP_SuppressOutput, TRUE) ||
1120 !freerdp_settings_set_uint32(settings, FreeRDP_GlyphSupportLevel, GLYPH_SUPPORT_NONE))
1121 goto out_fail;
1122 settings->GlyphCache = calloc(10, sizeof(GLYPH_CACHE_DEFINITION));
1123
1124 if (!settings->GlyphCache)
1125 goto out_fail;
1126
1127 settings->FragCache = calloc(1, sizeof(GLYPH_CACHE_DEFINITION));
1128
1129 if (!settings->FragCache)
1130 goto out_fail;
1131
1132 for (size_t x = 0; x < 10; x++)
1133 {
1134 GLYPH_CACHE_DEFINITION cache = WINPR_C_ARRAY_INIT;
1135 cache.cacheEntries = 254;
1136 switch (x)
1137 {
1138 case 0:
1139 case 1:
1140 cache.cacheMaximumCellSize = 4;
1141 break;
1142 case 2:
1143 case 3:
1144 cache.cacheMaximumCellSize = 8;
1145 break;
1146 case 4:
1147 cache.cacheMaximumCellSize = 16;
1148 break;
1149 case 5:
1150 cache.cacheMaximumCellSize = 32;
1151 break;
1152 case 6:
1153 cache.cacheMaximumCellSize = 64;
1154 break;
1155 case 7:
1156 cache.cacheMaximumCellSize = 128;
1157 break;
1158 case 8:
1159 cache.cacheMaximumCellSize = 256;
1160 break;
1161 case 9:
1162 cache.cacheMaximumCellSize = 256;
1163 break;
1164 default:
1165 goto out_fail;
1166 }
1167
1168 if (!freerdp_settings_set_pointer_array(settings, FreeRDP_GlyphCache, x, &cache))
1169 goto out_fail;
1170 }
1171 {
1172 GLYPH_CACHE_DEFINITION cache = WINPR_C_ARRAY_INIT;
1173 cache.cacheEntries = 256;
1174 cache.cacheMaximumCellSize = 256;
1175 if (!freerdp_settings_set_pointer_array(settings, FreeRDP_FragCache, 0, &cache))
1176 goto out_fail;
1177 }
1178 if (!freerdp_settings_set_uint32(settings, FreeRDP_OffscreenSupportLevel, 0) ||
1179 !freerdp_settings_set_uint32(settings, FreeRDP_OffscreenCacheSize, 7680) ||
1180 !freerdp_settings_set_uint32(settings, FreeRDP_OffscreenCacheEntries, 2000) ||
1181 !freerdp_settings_set_uint32(settings, FreeRDP_DrawNineGridCacheSize, 2560) ||
1182 !freerdp_settings_set_uint32(settings, FreeRDP_DrawNineGridCacheEntries, 256) ||
1183 !freerdp_settings_set_string(settings, FreeRDP_ClientDir, client_dll) ||
1184 !freerdp_settings_get_string(settings, FreeRDP_ClientDir) ||
1185 !freerdp_settings_set_uint32(settings, FreeRDP_RemoteWndSupportLevel,
1186 WINDOW_LEVEL_SUPPORTED | WINDOW_LEVEL_SUPPORTED_EX) ||
1187 !freerdp_settings_set_uint32(settings, FreeRDP_RemoteAppNumIconCaches, 3) ||
1188 !freerdp_settings_set_uint32(settings, FreeRDP_RemoteAppNumIconCacheEntries, 12) ||
1189 !freerdp_settings_set_uint32(settings, FreeRDP_VCChunkSize,
1190 (server && !remote) ? CHANNEL_CHUNK_MAX_LENGTH
1191 : CHANNEL_CHUNK_LENGTH) ||
1192 /* [MS-RDPBCGR] 2.2.7.2.7 Large Pointer Capability Set (TS_LARGE_POINTER_CAPABILITYSET)
1193 requires at least this size */
1194 !freerdp_settings_set_uint32(settings, FreeRDP_MultifragMaxRequestSize,
1195 server ? 0 : 608299) ||
1196 !freerdp_settings_set_bool(settings, FreeRDP_GatewayUseSameCredentials, FALSE) ||
1197 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE) ||
1198 !freerdp_settings_set_bool(settings, FreeRDP_GatewayRpcTransport, TRUE) ||
1199 !freerdp_settings_set_bool(settings, FreeRDP_GatewayHttpTransport, TRUE) ||
1200 !freerdp_settings_set_bool(settings, FreeRDP_GatewayUdpTransport, TRUE) ||
1201 !freerdp_settings_set_bool(settings, FreeRDP_GatewayHttpUseWebsockets, TRUE) ||
1202 !freerdp_settings_set_bool(settings, FreeRDP_GatewayHttpExtAuthSspiNtlm, FALSE) ||
1203 !freerdp_settings_set_bool(settings, FreeRDP_GatewayArmTransport, FALSE) ||
1204 !freerdp_settings_set_bool(settings, FreeRDP_FastPathInput, TRUE) ||
1205 !freerdp_settings_set_bool(settings, FreeRDP_FastPathOutput, TRUE) ||
1206 !freerdp_settings_set_bool(settings, FreeRDP_LongCredentialsSupported, TRUE) ||
1207 !freerdp_settings_set_uint32(settings, FreeRDP_FrameAcknowledge, 2) ||
1208 !freerdp_settings_set_bool(settings, FreeRDP_MouseMotion, TRUE) ||
1209 !freerdp_settings_set_uint32(settings, FreeRDP_NSCodecColorLossLevel, 3) ||
1210 !freerdp_settings_set_bool(settings, FreeRDP_NSCodecAllowSubsampling, TRUE) ||
1211 !freerdp_settings_set_bool(settings, FreeRDP_NSCodecAllowDynamicColorFidelity, TRUE) ||
1212 !freerdp_settings_set_bool(settings, FreeRDP_AutoReconnectionEnabled, FALSE) ||
1213 !freerdp_settings_set_uint32(settings, FreeRDP_AutoReconnectMaxRetries, 20) ||
1214 !freerdp_settings_set_bool(settings, FreeRDP_GfxThinClient, FALSE) ||
1215 !freerdp_settings_set_bool(settings, FreeRDP_GfxSmallCache, TRUE) ||
1216 !freerdp_settings_set_bool(settings, FreeRDP_GfxProgressive, FALSE) ||
1217 !freerdp_settings_set_bool(settings, FreeRDP_GfxProgressiveV2, FALSE) ||
1218 !freerdp_settings_set_bool(settings, FreeRDP_GfxPlanar, TRUE) ||
1219 !freerdp_settings_set_bool(settings, FreeRDP_GfxH264, FALSE) ||
1220 !freerdp_settings_set_bool(settings, FreeRDP_GfxAVC444, FALSE) ||
1221 !freerdp_settings_set_bool(settings, FreeRDP_GfxCodecAV1, TRUE) ||
1222 !freerdp_settings_set_uint32(settings, FreeRDP_GfxCodecAV1Profile, 1) ||
1223 !freerdp_settings_set_bool(settings, FreeRDP_GfxSendQoeAck, FALSE) ||
1224 !freerdp_settings_set_bool(settings, FreeRDP_SupportDisplayControl, TRUE))
1225 goto out_fail;
1226 {
1227 ARC_CS_PRIVATE_PACKET cookie = WINPR_C_ARRAY_INIT;
1228 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_ClientAutoReconnectCookie, &cookie,
1229 1))
1230 goto out_fail;
1231 }
1232 {
1233 ARC_SC_PRIVATE_PACKET cookie = WINPR_C_ARRAY_INIT;
1234 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_ServerAutoReconnectCookie, &cookie,
1235 1))
1236 goto out_fail;
1237 }
1238
1239 settings->ClientTimeZone = (LPTIME_ZONE_INFORMATION)calloc(1, sizeof(TIME_ZONE_INFORMATION));
1240
1241 if (!settings->ClientTimeZone)
1242 goto out_fail;
1243
1244 if (!settings->ServerMode)
1245 {
1246 DYNAMIC_TIME_ZONE_INFORMATION dynamic = WINPR_C_ARRAY_INIT;
1248 freerdp_settings_get_pointer_writable(settings, FreeRDP_ClientTimeZone);
1249 WINPR_ASSERT(tz);
1250
1251 GetTimeZoneInformation(tz);
1252 GetDynamicTimeZoneInformation(&dynamic);
1253
1254 if (!freerdp_settings_set_string_from_utf16N(settings, FreeRDP_DynamicDSTTimeZoneKeyName,
1255 dynamic.TimeZoneKeyName,
1256 ARRAYSIZE(dynamic.TimeZoneKeyName)))
1257 goto out_fail;
1258
1259 if (!freerdp_settings_set_bool(settings, FreeRDP_DynamicDaylightTimeDisabled,
1260 dynamic.DynamicDaylightTimeDisabled))
1261 goto out_fail;
1262 }
1263
1264 if (!freerdp_settings_set_bool(settings, FreeRDP_TcpKeepAlive, TRUE) ||
1265 !freerdp_settings_set_uint32(settings, FreeRDP_TcpKeepAliveRetries, 3) ||
1266 !freerdp_settings_set_uint32(settings, FreeRDP_TcpKeepAliveDelay, 5) ||
1267 !freerdp_settings_set_uint32(settings, FreeRDP_TcpKeepAliveInterval, 2) ||
1268 !freerdp_settings_set_uint32(settings, FreeRDP_TcpAckTimeout, 9000) ||
1269 !freerdp_settings_set_uint32(settings, FreeRDP_TcpConnectTimeout, 15000))
1270 goto out_fail;
1271
1272 /* Bound for waiting on a gateway HTTP response (status/header phase and body phase each),
1273 * separate from FreeRDP_TcpConnectTimeout, which only bounds TCP connection establishment. */
1274 if (!freerdp_settings_set_uint32(settings, FreeRDP_GatewayResponseTimeout, 15000))
1275 goto out_fail;
1276
1277 if (!freerdp_settings_get_bool(settings, FreeRDP_ServerMode))
1278 {
1279 BOOL rc = FALSE;
1280 char* path = nullptr;
1281 if (!freerdp_settings_set_bool(settings, FreeRDP_RedirectClipboard, TRUE))
1282 goto out_fail;
1283 /* these values are used only by the client part */
1284 path = GetKnownPath(KNOWN_PATH_HOME);
1285 rc = freerdp_settings_set_string(settings, FreeRDP_HomePath, path);
1286 free(path);
1287
1288 if (!rc || !freerdp_settings_get_string(settings, FreeRDP_HomePath))
1289 goto out_fail;
1290
1291 char* config = freerdp_settings_get_config_path();
1292 rc = freerdp_settings_set_string(settings, FreeRDP_ConfigPath, config);
1293 if (rc)
1294 {
1295 char* action = GetCombinedPath(config, "action.sh");
1296 rc = freerdp_settings_set_string(settings, FreeRDP_ActionScript, action);
1297 free(action);
1298 }
1299
1300 free(config);
1301 if (!rc)
1302 goto out_fail;
1303 }
1304
1305 settings_load_hkey_local_machine(settings);
1306
1307 if (!freerdp_settings_set_bool(settings, FreeRDP_SmartcardLogon, FALSE))
1308 goto out_fail;
1309 if (!freerdp_settings_set_uint32(settings, FreeRDP_TlsSecLevel, FREERDP_TLS_SECLEVEL_112BIT))
1310 goto out_fail;
1311 settings->OrderSupport = calloc(1, 32);
1312
1313 if (!freerdp_settings_set_uint16(settings, FreeRDP_TLSMinVersion, TLS1_2_VERSION))
1314 goto out_fail;
1315 if (!freerdp_settings_set_uint16(settings, FreeRDP_TLSMaxVersion, 0))
1316 goto out_fail;
1317
1318 if (!settings->OrderSupport)
1319 goto out_fail;
1320
1321 if (!freerdp_settings_set_default_order_support(settings))
1322 goto out_fail;
1323
1324 {
1325 const BOOL enable = freerdp_settings_get_bool(settings, FreeRDP_ServerMode);
1326 {
1327 const FreeRDP_Settings_Keys_Bool keys[] = { FreeRDP_SupportGraphicsPipeline,
1328 FreeRDP_SupportStatusInfoPdu,
1329 FreeRDP_SupportErrorInfoPdu,
1330 FreeRDP_SupportAsymetricKeys };
1331
1332 for (size_t x = 0; x < ARRAYSIZE(keys); x++)
1333 {
1334 if (!freerdp_settings_set_bool(settings, keys[x], enable))
1335 goto out_fail;
1336 }
1337 }
1338 }
1339
1340 if (!freerdp_settings_set_bool(settings, FreeRDP_SupportDynamicTimeZone, TRUE))
1341 goto out_fail;
1342 if (!freerdp_settings_set_bool(settings, FreeRDP_SupportSkipChannelJoin, TRUE))
1343 goto out_fail;
1344
1345 UUID corrId = WINPR_C_ARRAY_INIT;
1346 if (UuidCreate(&corrId) != RPC_S_OK)
1347 goto out_fail;
1348
1349 char buffer[64] = WINPR_C_ARRAY_INIT;
1350 if (!freerdp_settings_set_string(settings, FreeRDP_CorrelationId,
1351 guid2str(&corrId, buffer, sizeof(buffer))))
1352 goto out_fail;
1353
1354 return settings;
1355out_fail:
1356 WINPR_PRAGMA_DIAG_PUSH
1357 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1358 freerdp_settings_free(settings);
1359 WINPR_PRAGMA_DIAG_POP
1360 return nullptr;
1361}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string_from_utf16N(rdpSettings *settings, FreeRDP_Settings_Keys_String id, const WCHAR *param, size_t length)
Sets a string settings value. The param is converted to UTF-8 and the copy stored.
char * freerdp_settings_get_config_path(void)
return the configuration directory for the library
#define FREERDP_SETTINGS_SERVER_MODE
Definition wtypes.h:263

References freerdp_settings_free(), freerdp_settings_get_bool(), freerdp_settings_get_config_path(), freerdp_settings_get_pointer_writable(), freerdp_settings_get_string(), FREERDP_SETTINGS_SERVER_MODE, freerdp_settings_set_bool(), freerdp_settings_set_int32(), freerdp_settings_set_pointer_len(), freerdp_settings_set_string(), freerdp_settings_set_string_from_utf16N(), freerdp_settings_set_string_len(), freerdp_settings_set_uint16(), and freerdp_settings_set_uint32().

Referenced by freerdp_settings_deserialize().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ freerdp_settings_print_diff()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_print_diff ( wLog *  log,
DWORD  level,
const rdpSettings *  settings,
const rdpSettings *  other 
)

Dumps the difference between two settings structs to a WLog.

Parameters
logThe logger to write to, must not be nullptr.
levelThe WLog level to use for the log entries.
settingsA pointer to the settings to dump. May be nullptr.
otherA pointer to the settings to dump. May be nullptr.
Returns
TRUE if not equal, FALSE otherwise

Definition at line 99 of file settings_str.c.

101{
102 BOOL rc = FALSE;
103
104 WINPR_ASSERT(log);
105 WINPR_ASSERT(settings);
106 WINPR_ASSERT(other);
107
108 for (size_t x = 0; x < ARRAYSIZE(settings_map); x++)
109 {
110 const struct settings_str_entry* cur = &settings_map[x];
111 switch (cur->type)
112 {
113 case FREERDP_SETTINGS_TYPE_BOOL: /* bool */
114 {
115 BOOL sval =
116 freerdp_settings_get_bool(settings, (FreeRDP_Settings_Keys_Bool)cur->id);
117 BOOL cval = freerdp_settings_get_bool(other, (FreeRDP_Settings_Keys_Bool)cur->id);
118 if (sval != cval)
119 {
120 rc = TRUE;
121 WLog_Print(log, level, "%s [BOOL]: %s -> %s", cur->str, sval ? "TRUE" : "FALSE",
122 cval ? "TRUE" : "FALSE");
123 }
124 }
125 break;
126 case FREERDP_SETTINGS_TYPE_UINT16: /* UINT16 */
127 {
128 UINT16 sval =
129 freerdp_settings_get_uint16(settings, (FreeRDP_Settings_Keys_UInt16)cur->id);
130 UINT16 cval =
131 freerdp_settings_get_uint16(other, (FreeRDP_Settings_Keys_UInt16)cur->id);
132 if (sval != cval)
133 {
134 rc = TRUE;
135 WLog_Print(log, level, "%s [UINT16]: %" PRIu16 " -> %" PRIu16, cur->str, sval,
136 cval);
137 }
138 }
139 break;
140 case FREERDP_SETTINGS_TYPE_INT16: /* INT16 */
141 {
142 INT16 sval =
143 freerdp_settings_get_int16(settings, (FreeRDP_Settings_Keys_Int16)cur->id);
144 INT16 cval =
145 freerdp_settings_get_int16(other, (FreeRDP_Settings_Keys_Int16)cur->id);
146 if (sval != cval)
147 {
148 rc = TRUE;
149 WLog_Print(log, level, "%s [INT16]: %" PRId16 " -> %" PRId16, cur->str, sval,
150 cval);
151 }
152 }
153 break;
154 case FREERDP_SETTINGS_TYPE_UINT32: /* UINT32 */
155 {
156 UINT32 sval =
157 freerdp_settings_get_uint32(settings, (FreeRDP_Settings_Keys_UInt32)cur->id);
158 UINT32 cval =
159 freerdp_settings_get_uint32(other, (FreeRDP_Settings_Keys_UInt32)cur->id);
160 if (sval != cval)
161 {
162 rc = TRUE;
163 WLog_Print(log, level, "%s [UINT32]: %" PRIu32 " -> %" PRIu32, cur->str, sval,
164 cval);
165 }
166 }
167 break;
168 case FREERDP_SETTINGS_TYPE_INT32: /* INT32 */
169 {
170 INT32 sval =
171 freerdp_settings_get_int32(settings, (FreeRDP_Settings_Keys_Int32)cur->id);
172 INT32 cval =
173 freerdp_settings_get_int32(other, (FreeRDP_Settings_Keys_Int32)cur->id);
174 if (sval != cval)
175 {
176 rc = TRUE;
177 WLog_Print(log, level, "%s [INT32]: %" PRId32 " -> %" PRId32, cur->str, sval,
178 cval);
179 }
180 }
181 break;
182 case FREERDP_SETTINGS_TYPE_UINT64: /* UINT64 */
183 {
184 UINT64 sval =
185 freerdp_settings_get_uint64(settings, (FreeRDP_Settings_Keys_UInt64)cur->id);
186 UINT64 cval =
187 freerdp_settings_get_uint64(other, (FreeRDP_Settings_Keys_UInt64)cur->id);
188 if (sval != cval)
189 {
190 rc = TRUE;
191 WLog_Print(log, level, "%s [UINT64]: %" PRIu64 " -> %" PRIu64, cur->str, sval,
192 cval);
193 }
194 }
195 break;
196 case FREERDP_SETTINGS_TYPE_INT64: /* INT64 */
197 {
198 INT64 sval =
199 freerdp_settings_get_int64(settings, (FreeRDP_Settings_Keys_Int64)cur->id);
200 INT64 cval =
201 freerdp_settings_get_int64(other, (FreeRDP_Settings_Keys_Int64)cur->id);
202 if (sval != cval)
203 {
204 rc = TRUE;
205 WLog_Print(log, level, "%s [INT64]: %" PRId64 " -> %" PRId64, cur->str, sval,
206 cval);
207 }
208 }
209 break;
210 case FREERDP_SETTINGS_TYPE_STRING: /* strings */
211 {
212 const char* sval =
213 freerdp_settings_get_string(settings, (FreeRDP_Settings_Keys_String)cur->id);
214 const char* cval =
215 freerdp_settings_get_string(other, (FreeRDP_Settings_Keys_String)cur->id);
216 if (sval != cval)
217 {
218 if (!sval || !cval || (strcmp(sval, cval) != 0))
219 {
220 rc = TRUE;
221 WLog_Print(log, level, "%s [STRING]: '%s' -> '%s'", cur->str, sval, cval);
222 }
223 }
224 }
225 break;
226 case FREERDP_SETTINGS_TYPE_POINTER: /* pointer */
227 {
228 const void* sval =
229 freerdp_settings_get_pointer(settings, (FreeRDP_Settings_Keys_Pointer)cur->id);
230 const void* cval =
231 freerdp_settings_get_pointer(other, (FreeRDP_Settings_Keys_Pointer)cur->id);
232 if (sval != cval)
233 {
234 if ((sval && !cval) || (!sval && cval))
235 {
236 rc = TRUE;
237 WLog_Print(log, level, "%s [POINTER]: '%p' -> '%p'", cur->str, sval, cval);
238 }
239 }
240 }
241 break;
242 default:
243 break;
244 }
245 }
246 return rc;
247}

References freerdp_settings_get_bool(), freerdp_settings_get_int16(), freerdp_settings_get_int32(), freerdp_settings_get_int64(), freerdp_settings_get_pointer(), freerdp_settings_get_string(), freerdp_settings_get_uint16(), freerdp_settings_get_uint32(), and freerdp_settings_get_uint64().

Here is the call graph for this function:

◆ freerdp_settings_serialize()

WINPR_ATTR_NODISCARD FREERDP_API char * freerdp_settings_serialize ( const rdpSettings *  settings,
BOOL  pretty,
size_t *  plength 
)

A function that converts a rdpSettings struct to a JSON serialized string.

Parameters
settingsThe settings instance to serialize
prettyFormat the resulting JSON human readable
plengthAn optional pointer that receives the length (strlen) of the returned string.
Returns
A JSON string representing the serialized form of the rdpSettings or nullptr in case of an error.
Since
version 3.16.0

Definition at line 3702 of file common/settings.c.

3703{
3704 char* str = nullptr;
3705
3706 if (plength)
3707 *plength = 0;
3708
3709 if (!settings)
3710 return nullptr;
3711
3712 WINPR_JSON* json = WINPR_JSON_CreateObject();
3713 if (!json)
3714 return nullptr;
3715
3716 WINPR_JSON* jbool = WINPR_JSON_AddObjectToObject(
3717 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_BOOL));
3718 WINPR_JSON* juint16 = WINPR_JSON_AddObjectToObject(
3719 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT16));
3720 WINPR_JSON* jint16 = WINPR_JSON_AddObjectToObject(
3721 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT16));
3722 WINPR_JSON* juint32 = WINPR_JSON_AddObjectToObject(
3723 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT32));
3724 WINPR_JSON* jint32 = WINPR_JSON_AddObjectToObject(
3725 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT32));
3726 WINPR_JSON* juint64 = WINPR_JSON_AddObjectToObject(
3727 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT64));
3728 WINPR_JSON* jint64 = WINPR_JSON_AddObjectToObject(
3729 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT64));
3730 WINPR_JSON* jstring = WINPR_JSON_AddObjectToObject(
3731 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_STRING));
3732 WINPR_JSON* jpointer = WINPR_JSON_AddObjectToObject(
3733 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_POINTER));
3734 if (!jbool || !juint16 || !jint16 || !juint32 || !jint32 || !juint64 || !jint64 || !jstring ||
3735 !jpointer)
3736 goto fail;
3737
3738 for (int x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
3739 {
3740 union
3741 {
3742
3743 int s;
3744 FreeRDP_Settings_Keys_Bool b;
3745 FreeRDP_Settings_Keys_Int16 i16;
3746 FreeRDP_Settings_Keys_UInt16 u16;
3747 FreeRDP_Settings_Keys_Int32 i32;
3748 FreeRDP_Settings_Keys_UInt32 u32;
3749 FreeRDP_Settings_Keys_Int64 i64;
3750 FreeRDP_Settings_Keys_UInt64 u64;
3751 FreeRDP_Settings_Keys_String str;
3752 FreeRDP_Settings_Keys_Pointer ptr;
3753 } iter;
3754 iter.s = x;
3755
3756 const char* name = freerdp_settings_get_name_for_key(iter.s);
3757 SSIZE_T type = freerdp_settings_get_type_for_key(iter.s);
3758 switch (type)
3759 {
3760 case RDP_SETTINGS_TYPE_BOOL:
3761 {
3762 const BOOL val = freerdp_settings_get_bool(settings, iter.b);
3763 if (!WINPR_JSON_AddBoolToObject(jbool, name, val))
3764 goto fail;
3765 }
3766 break;
3767 case RDP_SETTINGS_TYPE_UINT16:
3768 {
3769 const uint16_t val = freerdp_settings_get_uint16(settings, iter.u16);
3770 if (!WINPR_JSON_AddNumberToObject(juint16, name, (double)val))
3771 goto fail;
3772 }
3773 break;
3774 case RDP_SETTINGS_TYPE_INT16:
3775 {
3776 const int16_t val = freerdp_settings_get_int16(settings, iter.i16);
3777 if (!WINPR_JSON_AddNumberToObject(jint16, name, (double)val))
3778 goto fail;
3779 }
3780 break;
3781 case RDP_SETTINGS_TYPE_UINT32:
3782 {
3783 const uint32_t val = freerdp_settings_get_uint32(settings, iter.u32);
3784 if (!WINPR_JSON_AddNumberToObject(juint32, name, (double)val))
3785 goto fail;
3786 }
3787 break;
3788 case RDP_SETTINGS_TYPE_INT32:
3789 {
3790 const int32_t val = freerdp_settings_get_int32(settings, iter.i32);
3791 if (!WINPR_JSON_AddNumberToObject(jint32, name, (double)val))
3792 goto fail;
3793 }
3794 break;
3795 case RDP_SETTINGS_TYPE_UINT64:
3796 {
3797 const uint64_t val = freerdp_settings_get_uint64(settings, iter.u64);
3798 if (!WINPR_JSON_AddNumberToObject(juint64, name, (double)val))
3799 goto fail;
3800 }
3801 break;
3802 case RDP_SETTINGS_TYPE_INT64:
3803 {
3804 const int64_t val = freerdp_settings_get_int64(settings, iter.i64);
3805 if (!WINPR_JSON_AddNumberToObject(jint64, name, (double)val))
3806 goto fail;
3807 }
3808 break;
3809 case RDP_SETTINGS_TYPE_STRING:
3810 {
3811 const char* val = freerdp_settings_get_string(settings, iter.str);
3812 if (val)
3813 {
3814 if (!WINPR_JSON_AddStringToObject(jstring, name, val))
3815 goto fail;
3816 }
3817 else
3818 {
3819 if (!WINPR_JSON_AddNullToObject(jstring, name))
3820 goto fail;
3821 }
3822 }
3823 break;
3824 case RDP_SETTINGS_TYPE_POINTER:
3825 if (!serialize_pointer(settings, jpointer, iter.ptr))
3826 goto fail;
3827 break;
3828 default:
3829 break;
3830 }
3831 }
3832
3833 if (pretty)
3834 str = WINPR_JSON_Print(json);
3835 else
3836 str = WINPR_JSON_PrintUnformatted(json);
3837
3838 if (!str)
3839 goto fail;
3840 if (plength)
3841 *plength = strlen(str);
3842
3843fail:
3844 WINPR_JSON_Delete(json);
3845 return str;
3846}
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_AddObjectToObject(WINPR_JSON *object, const char *name)
WINPR_JSON_AddObjectToObject.
Definition c-json.c:274
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_CreateObject(void)
WINPR_JSON_CreateObject.
Definition c-json.c:232
WINPR_API char * WINPR_JSON_Print(WINPR_JSON *item)
Serialize a JSON instance to string for minimal size without formatting see WINPR_JSON_PrintUnformatt...
Definition c-json.c:306
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_AddNumberToObject(WINPR_JSON *object, const char *name, double number)
WINPR_JSON_AddNumberToObject.
Definition c-json.c:257
WINPR_API char * WINPR_JSON_PrintUnformatted(WINPR_JSON *item)
Serialize a JSON instance to string without formatting for human readable formatted output see WINPR_...
Definition c-json.c:311
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_AddNullToObject(WINPR_JSON *object, const char *name)
WINPR_JSON_AddNullToObject.
Definition c-json.c:237
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_AddStringToObject(WINPR_JSON *object, const char *name, const char *string)
WINPR_JSON_AddStringToObject.
Definition c-json.c:269
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_AddBoolToObject(WINPR_JSON *object, const char *name, BOOL boolean)
WINPR_JSON_AddBoolToObject.
Definition c-json.c:252

References freerdp_settings_get_bool(), freerdp_settings_get_int16(), freerdp_settings_get_int32(), freerdp_settings_get_int64(), freerdp_settings_get_name_for_key(), freerdp_settings_get_string(), freerdp_settings_get_type_for_key(), freerdp_settings_get_type_name_for_type(), freerdp_settings_get_uint16(), freerdp_settings_get_uint32(), freerdp_settings_get_uint64(), WINPR_JSON_AddBoolToObject(), WINPR_JSON_AddNullToObject(), WINPR_JSON_AddNumberToObject(), WINPR_JSON_AddObjectToObject(), WINPR_JSON_AddStringToObject(), WINPR_JSON_CreateObject(), WINPR_JSON_Delete(), WINPR_JSON_Print(), and WINPR_JSON_PrintUnformatted().

Here is the call graph for this function:

◆ freerdp_settings_set_bool()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_bool ( rdpSettings *  settings,
FreeRDP_Settings_Keys_Bool  id,
BOOL  val 
)

Sets a BOOL settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
valThe value to set.
Returns
TRUE for success, FALSE for failure

Referenced by freerdp_set_gateway_usage_method(), freerdp_settings_copy_item(), and freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_int16()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_int16 ( rdpSettings *  settings,
FreeRDP_Settings_Keys_Int16  id,
INT16  val 
)

Sets a INT16 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
valThe value to set.
Returns
TRUE for success, FALSE for failure

Referenced by freerdp_settings_copy_item().

Here is the caller graph for this function:

◆ freerdp_settings_set_int32()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_int32 ( rdpSettings *  settings,
FreeRDP_Settings_Keys_Int32  id,
INT32  val 
)

Sets a INT32 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
valThe value to set.
Returns
TRUE for success, FALSE for failure

Referenced by freerdp_settings_copy_item(), freerdp_settings_new(), and freerdp_settings_set_monitor_def_array_sorted().

Here is the caller graph for this function:

◆ freerdp_settings_set_int64()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_int64 ( rdpSettings *  settings,
FreeRDP_Settings_Keys_Int64  id,
INT64  val 
)

Sets a INT64 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
valThe value to set.
Returns
TRUE for success, FALSE for failure

Referenced by freerdp_settings_copy_item().

Here is the caller graph for this function:

◆ freerdp_settings_set_monitor_def_array_sorted()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_monitor_def_array_sorted ( rdpSettings *  settings,
const rdpMonitor *  monitors,
size_t  count 
)

Sort monitor array according to:

  1. First monitor is at x/y 0/0 and is the primary monitor
  2. The primary monitor must be at 0/0, if not set FreeRDP_MonitorLocalShiftX/FreeRDP_MonitorLocalShiftY

The FreeRDP_MonitorLocalShiftX/FreeRDP_MonitorLocalShiftY is required to map the local monitors / mouse / touch coordinates to the remote ones.

Parameters
settingsThe settings to set the monitors for
monitorsThe unsorted monitors array
countThe number of monitors in the unsorted array
Returns
TRUE if the configuration is valid (or could be corrected to a valid one), FALSE otherwise.
Version
since 3.11.0

Definition at line 2451 of file common/settings.c.

2453{
2454 WINPR_ASSERT(monitors || (count == 0));
2455 if (count == 0)
2456 {
2457 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftX, 0))
2458 return FALSE;
2459 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftY, 0))
2460 return FALSE;
2461 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_MonitorDefArray, nullptr, 0))
2462 return FALSE;
2463 return freerdp_settings_set_uint32(settings, FreeRDP_MonitorCount, 0);
2464 }
2465
2466 // Find primary or alternatively the monitor at 0/0
2467 const rdpMonitor* primary = nullptr;
2468 for (size_t x = 0; x < count; x++)
2469 {
2470 const rdpMonitor* cur = &monitors[x];
2471 if (cur->is_primary)
2472 {
2473 primary = cur;
2474 break;
2475 }
2476 }
2477 if (!primary)
2478 {
2479 for (size_t x = 0; x < count; x++)
2480 {
2481 const rdpMonitor* cur = &monitors[x];
2482 if ((cur->x == 0) && (cur->y == 0))
2483 {
2484 primary = cur;
2485 break;
2486 }
2487 }
2488 }
2489
2490 if (!primary)
2491 {
2492 WLog_ERR(TAG, "Could not find primary monitor, aborting");
2493 return FALSE;
2494 }
2495
2496 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_MonitorDefArray, nullptr, count))
2497 return FALSE;
2498 rdpMonitor* sorted = freerdp_settings_get_pointer_writable(settings, FreeRDP_MonitorDefArray);
2499 WINPR_ASSERT(sorted);
2500
2501 size_t sortpos = 0;
2502
2503 /* Set primary. Ensure left/top is at 0/0 and flags contains MONITOR_PRIMARY */
2504 sorted[sortpos] = *primary;
2505 sorted[sortpos].x = 0;
2506 sorted[sortpos].y = 0;
2507 sorted[sortpos].is_primary = TRUE;
2508 sortpos++;
2509
2510 /* Set monitor shift to original layout */
2511 const INT32 offsetX = primary->x;
2512 const INT32 offsetY = primary->y;
2513 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftX, offsetX))
2514 return FALSE;
2515 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftY, offsetY))
2516 return FALSE;
2517
2518 for (size_t x = 0; x < count; x++)
2519 {
2520 const rdpMonitor* cur = &monitors[x];
2521 if (cur == primary)
2522 continue;
2523
2524 rdpMonitor m = monitors[x];
2525 m.x -= offsetX;
2526 m.y -= offsetY;
2527 sorted[sortpos++] = m;
2528 }
2529
2530 // Sort remaining monitors by x/y ?
2531 qsort(sorted, count, sizeof(rdpMonitor), sort_monitor_fn);
2532
2533 return freerdp_settings_set_uint32(settings, FreeRDP_MonitorCount,
2534 WINPR_ASSERTING_INT_CAST(uint32_t, count));
2535}

References freerdp_settings_get_pointer_writable(), freerdp_settings_set_int32(), freerdp_settings_set_pointer_len(), and freerdp_settings_set_uint32().

Here is the call graph for this function:

◆ freerdp_settings_set_pointer()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_pointer ( rdpSettings *  settings,
FreeRDP_Settings_Keys_Pointer  id,
const void *  val 
)

Set a pointer to value val.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to update
valThe data to set (direct update, no copy created, previous value overwritten)
Returns
TRUE for success, FALSE for failure

Referenced by freerdp_settings_copy_item(), and freerdp_settings_set_pointer_len().

Here is the caller graph for this function:

◆ freerdp_settings_set_pointer_array()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_pointer_array ( rdpSettings *  settings,
FreeRDP_Settings_Keys_Pointer  id,
size_t  offset,
const void *  data 
)

Definition at line 1821 of file common/settings.c.

1823{
1824 size_t maxOffset = 0;
1825 if (!settings)
1826 return FALSE;
1827 switch (id)
1828 {
1829 case FreeRDP_ClientAutoReconnectCookie:
1830 maxOffset = 1;
1831 if ((offset >= maxOffset) || !data || !settings->ClientAutoReconnectCookie)
1832 goto fail;
1833 settings->ClientAutoReconnectCookie[offset] = *(const ARC_CS_PRIVATE_PACKET*)data;
1834 return TRUE;
1835 case FreeRDP_ServerAutoReconnectCookie:
1836 maxOffset = 1;
1837 if ((offset >= maxOffset) || !data || !settings->ServerAutoReconnectCookie)
1838 goto fail;
1839 settings->ServerAutoReconnectCookie[offset] = *(const ARC_SC_PRIVATE_PACKET*)data;
1840 return TRUE;
1841 case FreeRDP_ServerCertificate:
1842 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ServerCertificateLength);
1843 if ((offset >= maxOffset) || !data)
1844 goto fail;
1845 settings->ServerCertificate[offset] = *(const BYTE*)data;
1846 return TRUE;
1847 case FreeRDP_DeviceArray:
1848 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
1849 if (offset >= maxOffset)
1850 goto fail;
1851 freerdp_device_free(settings->DeviceArray[offset]);
1852 settings->DeviceArray[offset] = freerdp_device_clone(data);
1853 return TRUE;
1854 case FreeRDP_TargetNetAddresses:
1855 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1856 if ((offset >= maxOffset) || !data)
1857 goto fail;
1858 WINPR_ASSERT(settings->TargetNetAddresses);
1859 free(settings->TargetNetAddresses[offset]);
1860 settings->TargetNetAddresses[offset] = _strdup((const char*)data);
1861 return settings->TargetNetAddresses[offset] != nullptr;
1862 case FreeRDP_TargetNetPorts:
1863 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1864 if ((offset >= maxOffset) || !data)
1865 goto fail;
1866 WINPR_ASSERT(settings->TargetNetPorts);
1867 settings->TargetNetPorts[offset] = *((const UINT32*)data);
1868 return TRUE;
1869 case FreeRDP_StaticChannelArray:
1870 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
1871 if ((offset >= maxOffset) || !data)
1872 goto fail;
1873 freerdp_addin_argv_free(settings->StaticChannelArray[offset]);
1874 settings->StaticChannelArray[offset] = freerdp_addin_argv_clone(data);
1875 return TRUE;
1876 case FreeRDP_DynamicChannelArray:
1877 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
1878 if ((offset >= maxOffset) || !data)
1879 goto fail;
1880 freerdp_addin_argv_free(settings->DynamicChannelArray[offset]);
1881 settings->DynamicChannelArray[offset] = freerdp_addin_argv_clone(data);
1882 return TRUE;
1883 case FreeRDP_BitmapCacheV2CellInfo:
1884 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_BitmapCacheV2NumCells);
1885 if ((offset >= maxOffset) || !data)
1886 goto fail;
1887 {
1888 const BITMAP_CACHE_V2_CELL_INFO* cdata = (const BITMAP_CACHE_V2_CELL_INFO*)data;
1889 settings->BitmapCacheV2CellInfo[offset] = *cdata;
1890 }
1891 return TRUE;
1892 case FreeRDP_ServerRandom:
1893 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ServerRandomLength);
1894 if ((offset >= maxOffset) || !data)
1895 goto fail;
1896 settings->ServerRandom[offset] = *(const BYTE*)data;
1897 return TRUE;
1898 case FreeRDP_ClientRandom:
1899 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ClientRandomLength);
1900 if ((offset >= maxOffset) || !data)
1901 goto fail;
1902 settings->ClientRandom[offset] = *(const BYTE*)data;
1903 return TRUE;
1904 case FreeRDP_LoadBalanceInfo:
1905 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_LoadBalanceInfoLength);
1906 if ((offset >= maxOffset) || !data)
1907 goto fail;
1908 settings->LoadBalanceInfo[offset] = *(const BYTE*)data;
1909 return TRUE;
1910 case FreeRDP_RedirectionTsvUrl:
1911 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionTsvUrlLength);
1912 if ((offset >= maxOffset) || !data)
1913 goto fail;
1914 settings->RedirectionTsvUrl[offset] = *(const BYTE*)data;
1915 return TRUE;
1916 case FreeRDP_RedirectionPassword:
1917 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionPasswordLength);
1918 if ((offset >= maxOffset) || !data)
1919 goto fail;
1920 settings->RedirectionPassword[offset] = *(const BYTE*)data;
1921 return TRUE;
1922 case FreeRDP_OrderSupport:
1923 maxOffset = 32;
1924 if (!settings->OrderSupport)
1925 goto fail;
1926 if ((offset >= maxOffset) || !data)
1927 goto fail;
1928 settings->OrderSupport[offset] = *(const BOOL*)data ? 1 : 0;
1929 return TRUE;
1930 case FreeRDP_GlyphCache:
1931 maxOffset = 10;
1932 if (!settings->GlyphCache)
1933 goto fail;
1934 if ((offset >= maxOffset) || !data)
1935 goto fail;
1936 settings->GlyphCache[offset] = *(const GLYPH_CACHE_DEFINITION*)data;
1937 return TRUE;
1938 case FreeRDP_FragCache:
1939 maxOffset = 1;
1940 if (!settings->FragCache)
1941 goto fail;
1942 if ((offset >= maxOffset) || !data)
1943 goto fail;
1944 settings->FragCache[offset] = *(const GLYPH_CACHE_DEFINITION*)data;
1945 return TRUE;
1946 case FreeRDP_MonitorIds:
1947 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_NumMonitorIds);
1948 if ((offset >= maxOffset) || !data)
1949 goto fail;
1950 settings->MonitorIds[offset] = *(const UINT32*)data;
1951 return TRUE;
1952 case FreeRDP_ChannelDefArray:
1953 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ChannelDefArraySize);
1954 if ((offset >= maxOffset) || !data)
1955 goto fail;
1956 settings->ChannelDefArray[offset] = *(const CHANNEL_DEF*)data;
1957 return TRUE;
1958 case FreeRDP_MonitorDefArray:
1959 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_MonitorDefArraySize);
1960 if ((offset >= maxOffset) || !data)
1961 goto fail;
1962 settings->MonitorDefArray[offset] = *(const rdpMonitor*)data;
1963 return TRUE;
1964
1965 case FreeRDP_ClientTimeZone:
1966 maxOffset = 1;
1967 if ((offset >= maxOffset) || !data || !settings->ClientTimeZone)
1968 goto fail;
1969 settings->ClientTimeZone[offset] = *(const TIME_ZONE_INFORMATION*)data;
1970 return TRUE;
1971
1972 case FreeRDP_ServerLicenseProductIssuers:
1973 maxOffset =
1974 freerdp_settings_get_uint32(settings, FreeRDP_ServerLicenseProductIssuersCount);
1975 if ((offset >= maxOffset) || !settings->ServerLicenseProductIssuers)
1976 goto fail;
1977 free(settings->ServerLicenseProductIssuers[offset]);
1978 settings->ServerLicenseProductIssuers[offset] = nullptr;
1979 if (data)
1980 settings->ServerLicenseProductIssuers[offset] = _strdup((const char*)data);
1981 return TRUE;
1982
1983 case FreeRDP_ReceivedCapabilityData:
1984 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
1985 if (offset >= maxOffset)
1986 goto fail;
1987 WINPR_ASSERT(settings->ReceivedCapabilityData);
1988 settings->ReceivedCapabilityData[offset] = WINPR_CAST_CONST_PTR_AWAY(data, BYTE*);
1989 return TRUE;
1990 case FreeRDP_ReceivedCapabilityDataSizes:
1991 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
1992 if (offset >= maxOffset)
1993 goto fail;
1994 WINPR_ASSERT(settings->ReceivedCapabilityDataSizes);
1995 settings->ReceivedCapabilityDataSizes[offset] = *(const uint32_t*)data;
1996 return TRUE;
1997 default:
1998 WLog_WARN(TAG, "Invalid id %s [%d]", freerdp_settings_get_name_for_key(id), id);
1999 return FALSE;
2000 }
2001
2002fail:
2003 WLog_WARN(TAG, "[%s] Invalid offset=%" PRIuz " [%" PRIuz "] or nullptr data=%p",
2004 freerdp_settings_get_name_for_key(id), offset, maxOffset, data);
2005 return FALSE;
2006}

◆ freerdp_settings_set_pointer_len()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_pointer_len ( rdpSettings *  settings,
FreeRDP_Settings_Keys_Pointer  id,
const void *  data,
size_t  len 
)

Set a pointer to value data.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to update
dataThe data to set (copy created, previous value freed)
Returns
TRUE for success, FALSE for failure

Definition at line 1432 of file common/settings.c.

1434{
1435 union
1436 {
1437 const void* cv;
1438 void* v;
1439 } cnv;
1440
1441 cnv.cv = data;
1442 if (!settings)
1443 return FALSE;
1444
1445 switch (id)
1446 {
1447 case FreeRDP_instance:
1448 if ((len != 0) && (len != sizeof(void*)))
1449 {
1450 WLog_ERR(TAG, "FreeRDP_instance::len must be 0 or %" PRIuz, sizeof(void*));
1451 return FALSE;
1452 }
1453 settings->instance = cnv.v;
1454 return TRUE;
1455 case FreeRDP_RdpServerCertificate:
1456 freerdp_certificate_free(settings->RdpServerCertificate);
1457
1458 if (len > 1)
1459 {
1460 WLog_ERR(TAG, "FreeRDP_RdpServerCertificate::len must be 0 or 1");
1461 return FALSE;
1462 }
1463 settings->RdpServerCertificate = cnv.v;
1464 if (!settings->RdpServerCertificate && (len > 0))
1465 {
1466 settings->RdpServerCertificate = freerdp_certificate_new();
1467 if (!settings->RdpServerCertificate)
1468 return FALSE;
1469 }
1470 return TRUE;
1471 case FreeRDP_RdpServerRsaKey:
1472 freerdp_key_free(settings->RdpServerRsaKey);
1473 if (len > 1)
1474 {
1475 WLog_ERR(TAG, "FreeRDP_RdpServerRsaKey::len must be 0 or 1");
1476 return FALSE;
1477 }
1478 settings->RdpServerRsaKey = (rdpPrivateKey*)cnv.v;
1479 if (!settings->RdpServerRsaKey && (len > 0))
1480 {
1481 settings->RdpServerRsaKey = freerdp_key_new();
1482 if (!settings->RdpServerRsaKey)
1483 return FALSE;
1484 }
1485 return TRUE;
1486 case FreeRDP_RedirectionPassword:
1487 return freerdp_settings_set_pointer_len_(
1488 settings, id, FreeRDP_RedirectionPasswordLength, data, len, sizeof(char));
1489 case FreeRDP_RedirectionTsvUrl:
1490 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_RedirectionTsvUrlLength,
1491 data, len, sizeof(char));
1492 case FreeRDP_RedirectionTargetCertificate:
1493 freerdp_certificate_free(settings->RedirectionTargetCertificate);
1494
1495 if (len > 1)
1496 {
1497 WLog_ERR(TAG, "FreeRDP_RedirectionTargetCertificate::len must be 0 or 1");
1498 return FALSE;
1499 }
1500 settings->RedirectionTargetCertificate = cnv.v;
1501 if (!settings->RedirectionTargetCertificate && (len > 0))
1502 {
1503 settings->RedirectionTargetCertificate = freerdp_certificate_new();
1504 if (!settings->RedirectionTargetCertificate)
1505 return FALSE;
1506 }
1507 return TRUE;
1508 case FreeRDP_RedirectionGuid:
1509 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_RedirectionGuidLength,
1510 data, len, sizeof(BYTE));
1511 case FreeRDP_LoadBalanceInfo:
1512 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_LoadBalanceInfoLength,
1513 data, len, sizeof(char));
1514 case FreeRDP_ServerRandom:
1515 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ServerRandomLength, data,
1516 len, sizeof(char));
1517 case FreeRDP_ClientRandom:
1518 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ClientRandomLength, data,
1519 len, sizeof(char));
1520 case FreeRDP_ServerCertificate:
1521 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ServerCertificateLength,
1522 data, len, sizeof(char));
1523 case FreeRDP_TargetNetAddresses:
1524 if (!freerdp_target_net_addresses_resize(settings, len))
1525 return FALSE;
1526 if (data == nullptr)
1527 target_net_addresses_free(settings, 0);
1528 return TRUE;
1529 case FreeRDP_ServerLicenseProductIssuers:
1530 if (data == nullptr)
1531 freerdp_server_license_issuers_free(settings);
1532 return freerdp_settings_set_pointer_len_(
1533 settings, id, FreeRDP_ServerLicenseProductIssuersCount, data, len, sizeof(char*));
1534 case FreeRDP_TargetNetPorts:
1535 if (!freerdp_target_net_addresses_resize(settings, len))
1536 return FALSE;
1537 if (data == nullptr)
1538 {
1539 for (size_t x = 0; x < len; x++)
1540 settings->TargetNetPorts[x] = 0;
1541 }
1542 return TRUE;
1543 case FreeRDP_DeviceArray:
1544 if (data == nullptr)
1545 freerdp_device_collection_free(settings);
1546 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_DeviceArraySize, data,
1547 len, sizeof(RDPDR_DEVICE*));
1548 case FreeRDP_ChannelDefArray:
1549 if ((len > 0) && (len < CHANNEL_MAX_COUNT))
1550 WLog_WARN(TAG,
1551 "FreeRDP_ChannelDefArray::len expected to be >= %d, but have %" PRIuz,
1552 CHANNEL_MAX_COUNT, len);
1553 return freerdp_settings_set_pointer_len_(settings, FreeRDP_ChannelDefArray,
1554 FreeRDP_ChannelDefArraySize, data, len,
1555 sizeof(CHANNEL_DEF));
1556 case FreeRDP_MonitorDefArray:
1557 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_MonitorDefArraySize,
1558 data, len, sizeof(rdpMonitor));
1559 case FreeRDP_ClientAutoReconnectCookie:
1560 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1561 sizeof(ARC_CS_PRIVATE_PACKET));
1562 case FreeRDP_ServerAutoReconnectCookie:
1563 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1564 sizeof(ARC_SC_PRIVATE_PACKET));
1565 case FreeRDP_ClientTimeZone:
1566 if (len > 1)
1567 {
1568 WLog_ERR(TAG, "FreeRDP_ClientTimeZone::len must be 0 or 1");
1569 return FALSE;
1570 }
1571 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1572 sizeof(TIME_ZONE_INFORMATION));
1573 case FreeRDP_BitmapCacheV2CellInfo:
1574 if (len > 5)
1575 {
1576 WLog_ERR(TAG, "FreeRDP_BitmapCacheV2CellInfo::len must be >= 0 and <= 5");
1577 return FALSE;
1578 }
1579 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_BitmapCacheV2NumCells,
1580 data, len, sizeof(BITMAP_CACHE_V2_CELL_INFO));
1581 case FreeRDP_GlyphCache:
1582 if ((len != 0) && (len != 10))
1583 {
1584 WLog_ERR(TAG, "FreeRDP_GlyphCache::len must be 0 or 10");
1585 return FALSE;
1586 }
1587 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1588 sizeof(GLYPH_CACHE_DEFINITION));
1589 case FreeRDP_FragCache:
1590 if (len > 1)
1591 {
1592 WLog_ERR(TAG, "FreeRDP_FragCache::len must be 0 or 1");
1593 return FALSE;
1594 }
1595 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1596 sizeof(GLYPH_CACHE_DEFINITION));
1597 case FreeRDP_StaticChannelArray:
1598 if (data == nullptr)
1599 freerdp_static_channel_collection_free(settings);
1600 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_StaticChannelArraySize,
1601 data, len, sizeof(ADDIN_ARGV*));
1602 case FreeRDP_DynamicChannelArray:
1603 if (data == nullptr)
1604 freerdp_dynamic_channel_collection_free(settings);
1605 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_DynamicChannelArraySize,
1606 data, len, sizeof(ADDIN_ARGV*));
1607 case FreeRDP_ReceivedCapabilityData:
1608 if (!freerdp_capability_buffer_resize(settings, len, FALSE))
1609 return FALSE;
1610 if (data == nullptr)
1611 {
1612 freerdp_capability_data_free(settings, 0, FALSE);
1613 }
1614 return TRUE;
1615 case FreeRDP_ReceivedCapabilities:
1616 if (!freerdp_capability_buffer_resize(settings, len, FALSE))
1617 return FALSE;
1618 if (data == nullptr)
1619 {
1620 for (size_t x = 0; x < settings->ReceivedCapabilitiesSize; x++)
1621 {
1622 settings->ReceivedCapabilities[x] = 0;
1623 }
1624 }
1625 return TRUE;
1626 case FreeRDP_OrderSupport:
1627 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1628 sizeof(char));
1629
1630 case FreeRDP_MonitorIds:
1631 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_NumMonitorIds, data, len,
1632 sizeof(UINT32));
1633
1634 case FreeRDP_ReceivedCapabilityDataSizes:
1635 if (!freerdp_capability_buffer_resize(settings, len, FALSE))
1636 return FALSE;
1637 if (data == nullptr)
1638 {
1639 for (size_t x = 0; x < settings->ReceivedCapabilitiesSize; x++)
1640 settings->ReceivedCapabilityDataSizes[x] = 0;
1641 }
1642 return TRUE;
1643
1644 case FreeRDP_Password51:
1645 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_Password51Length, data,
1646 len, sizeof(char));
1647 default:
1648 if ((data == nullptr) && (len == 0))
1649 {
1650 if (!freerdp_settings_set_pointer(settings, id, nullptr))
1651 return FALSE;
1652 }
1653 else
1654 WLog_WARN(TAG, "Invalid id %d", id);
1655 return FALSE;
1656 }
1657}

References freerdp_settings_set_pointer().

Referenced by freerdp_settings_new(), and freerdp_settings_set_monitor_def_array_sorted().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ freerdp_settings_set_string()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string ( rdpSettings *  settings,
FreeRDP_Settings_Keys_String  id,
const char *  val 
)

Sets a string settings value. The param is copied.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
valThe value to set. If nullptr removes the old entry, otherwise a copy is created.
Returns
TRUE for success, FALSE for failure

Definition at line 3803 of file settings_getters.c.

3805{
3806 size_t len = 0;
3807 if (val)
3808 len = strlen(val);
3809 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3810}

Referenced by freerdp_settings_copy_item(), and freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_string_from_utf16()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string_from_utf16 ( rdpSettings *  settings,
FreeRDP_Settings_Keys_String  id,
const WCHAR *  param 
)

Sets a string settings value. The param is converted to UTF-8 and the copy stored.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
paramThe value to set. If nullptr removes the old entry, otherwise a copy is created.
Returns
TRUE for success, FALSE for failure

Definition at line 2260 of file common/settings.c.

2262{
2263 WINPR_ASSERT(settings);
2264
2265 if (!param)
2266 return freerdp_settings_set_string_copy_(settings, id, nullptr, 0, TRUE);
2267
2268 size_t len = 0;
2269
2270 char* str = ConvertWCharToUtf8Alloc(param, &len);
2271 if (!str && (len != 0))
2272 return FALSE;
2273
2274 return freerdp_settings_set_string_(settings, id, str, len);
2275}

◆ freerdp_settings_set_string_from_utf16N()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string_from_utf16N ( rdpSettings *  settings,
FreeRDP_Settings_Keys_String  id,
const WCHAR *  param,
size_t  length 
)

Sets a string settings value. The param is converted to UTF-8 and the copy stored.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
paramThe value to set. If nullptr removes the old entry, otherwise a copy is created.
lengthThe length of the WCHAR string in number of WCHAR characters
Returns
TRUE for success, FALSE for failure

Definition at line 2277 of file common/settings.c.

2279{
2280 size_t len = 0;
2281
2282 WINPR_ASSERT(settings);
2283
2284 if (!param)
2285 return freerdp_settings_set_string_copy_(settings, id, nullptr, length, TRUE);
2286
2287 char* str = ConvertWCharNToUtf8Alloc(param, length, &len);
2288 if (!str && (length != 0))
2289 {
2290 /* If the input string is an empty string, but length > 0
2291 * consider the conversion a success */
2292 const size_t wlen = _wcsnlen(param, length);
2293 if (wlen != 0)
2294 return FALSE;
2295 }
2296
2297 return freerdp_settings_set_string_(settings, id, str, len);
2298}

Referenced by freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_string_len()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string_len ( rdpSettings *  settings,
FreeRDP_Settings_Keys_String  id,
const char *  val,
size_t  len 
)

Sets a string settings value. The val is copied.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
valThe value to set. If nullptr allocates an empty string buffer of len size, otherwise a copy is created.
lenThe length of val, 0 to remove the old entry.
Returns
TRUE for success, FALSE for failure

Definition at line 3797 of file settings_getters.c.

3799{
3800 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3801}

Referenced by freerdp_settings_append_string(), and freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_uint16()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint16 ( rdpSettings *  settings,
FreeRDP_Settings_Keys_UInt16  id,
UINT16  val 
)

Sets a UINT16 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
valThe value to set.
Returns
TRUE for success, FALSE for failure

Referenced by freerdp_settings_copy_item(), and freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_uint32()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint32 ( rdpSettings *  settings,
FreeRDP_Settings_Keys_UInt32  id,
UINT32  val 
)

Sets a UINT32 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
valThe value to set.
Returns
TRUE for success, FALSE for failure

Referenced by freerdp_set_gateway_usage_method(), freerdp_settings_copy_item(), freerdp_settings_new(), and freerdp_settings_set_monitor_def_array_sorted().

Here is the caller graph for this function:

◆ freerdp_settings_set_uint64()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint64 ( rdpSettings *  settings,
FreeRDP_Settings_Keys_UInt64  id,
UINT64  val 
)

Sets a UINT64 settings value.

Parameters
settingsA pointer to the settings to query, must not be nullptr.
idThe key to query
valThe value to set.
Returns
TRUE for success, FALSE for failure

Referenced by freerdp_settings_copy_item().

Here is the caller graph for this function:

◆ freerdp_settings_set_value_for_name()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_value_for_name ( rdpSettings *  settings,
const char *  name,
const char *  value 
)

Definition at line 1282 of file common/settings.c.

1283{
1284 ULONGLONG uval = 0;
1285 LONGLONG ival = 0;
1286 SSIZE_T type = 0;
1287
1288 if (!settings || !name)
1289 return FALSE;
1290
1291 const SSIZE_T i = freerdp_settings_get_key_for_name(name);
1292 if (i < 0)
1293 {
1294 WLog_ERR(TAG, "Invalid settings key [%s]", name);
1295 return FALSE;
1296 }
1297
1298 const SSIZE_T index = i;
1299
1301 switch (type)
1302 {
1303
1304 case RDP_SETTINGS_TYPE_BOOL:
1305 {
1306 const BOOL val = (_strnicmp(value, "TRUE", 5) == 0) || (_strnicmp(value, "ON", 5) == 0);
1307 const BOOL nval =
1308 (_strnicmp(value, "FALSE", 6) == 0) || (_strnicmp(value, "OFF", 6) == 0);
1309 if (!val && !nval)
1310 return parsing_fail(name, "BOOL", value);
1311
1312 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1313 return freerdp_settings_set_bool(settings, (FreeRDP_Settings_Keys_Bool)index, val);
1314 }
1315 case RDP_SETTINGS_TYPE_UINT16:
1316 if (!value_to_uint(value, &uval, 0, UINT16_MAX))
1317 return parsing_fail(name, "UINT16", value);
1318
1319 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1320 if (!freerdp_settings_set_uint16(settings, (FreeRDP_Settings_Keys_UInt16)index,
1321 (UINT16)uval))
1322 return parsing_fail(name, "UINT16", value);
1323 return TRUE;
1324
1325 case RDP_SETTINGS_TYPE_INT16:
1326 if (!value_to_int(value, &ival, INT16_MIN, INT16_MAX))
1327 return parsing_fail(name, "INT16", value);
1328
1329 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1330 if (!freerdp_settings_set_int16(settings, (FreeRDP_Settings_Keys_Int16)index,
1331 (INT16)ival))
1332 return parsing_fail(name, "INT16", value);
1333 return TRUE;
1334 case RDP_SETTINGS_TYPE_UINT32:
1335 if (!value_to_uint(value, &uval, 0, UINT32_MAX))
1336 return parsing_fail(name, "UINT32", value);
1337
1338 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1339 if (!freerdp_settings_set_uint32(settings, (FreeRDP_Settings_Keys_UInt32)index,
1340 (UINT32)uval))
1341 return parsing_fail(name, "UINT32", value);
1342 return TRUE;
1343 case RDP_SETTINGS_TYPE_INT32:
1344 if (!value_to_int(value, &ival, INT32_MIN, INT32_MAX))
1345 return parsing_fail(name, "INT32", value);
1346
1347 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1348 if (!freerdp_settings_set_int32(settings, (FreeRDP_Settings_Keys_Int32)index,
1349 (INT32)ival))
1350 return parsing_fail(name, "INT32", value);
1351 return TRUE;
1352 case RDP_SETTINGS_TYPE_UINT64:
1353 if (!value_to_uint(value, &uval, 0, UINT64_MAX))
1354 return parsing_fail(name, "UINT64", value);
1355
1356 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1357 if (!freerdp_settings_set_uint64(settings, (FreeRDP_Settings_Keys_UInt64)index, uval))
1358 return parsing_fail(name, "UINT64", value);
1359 return TRUE;
1360 case RDP_SETTINGS_TYPE_INT64:
1361 if (!value_to_int(value, &ival, INT64_MIN, INT64_MAX))
1362 return parsing_fail(name, "INT64", value);
1363
1364 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1365 if (!freerdp_settings_set_int64(settings, (FreeRDP_Settings_Keys_Int64)index, ival))
1366 return parsing_fail(name, "INT64", value);
1367 return TRUE;
1368
1369 case RDP_SETTINGS_TYPE_STRING:
1370 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1371 return freerdp_settings_set_string(settings, (FreeRDP_Settings_Keys_String)index,
1372 value);
1373 case RDP_SETTINGS_TYPE_POINTER:
1374 return parsing_fail(name, "POINTER", value);
1375 default:
1376 return FALSE;
1377 }
1378 return FALSE;
1379}
WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_key_for_name(const char *value)
Get a key index for the name string of that key.

◆ freerdp_settings_update_from_caps()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_update_from_caps ( rdpSettings *  settings,
const BYTE *  capsFlags,
const BYTE **  capsData,
const UINT32 *  capsSizes,
UINT32  capsCount,
BOOL  serverReceivedCaps 
)

Parse capability data and apply to settings.

The capability message is stored in raw form in the settings, the data parsed and applied to the settings.

Parameters
settingsA pointer to the settings to use
capsFlagsA pointer to the capability flags, must have capsCount fields
capsDataA pointer array to the RAW capability data, must have capsCount fields
capsSizesA pointer to an array of RAW capability sizes, must have capsCount fields
capsCountThe number of capabilities contained in the RAW data
serverReceivedCapsIndicates if the parser should assume to be a server or client instance
Returns
TRUE for success, FALSE in case of an error

Definition at line 2194 of file common/settings.c.

2197{
2198 WINPR_ASSERT(settings);
2199 WINPR_ASSERT(capsFlags || (capsCount == 0));
2200 WINPR_ASSERT(capsData || (capsCount == 0));
2201 WINPR_ASSERT(capsSizes || (capsCount == 0));
2202 WINPR_ASSERT(capsCount <= UINT16_MAX);
2203
2204 wLog* log = WLog_Get(TAG);
2205
2206 for (UINT32 x = 0; x < capsCount; x++)
2207 {
2208 if (capsFlags[x])
2209 {
2210 wStream buffer = WINPR_C_ARRAY_INIT;
2211 wStream* sub = Stream_StaticConstInit(&buffer, capsData[x], capsSizes[x]);
2212
2213 if (!rdp_read_capability_set(log, sub, (UINT16)x, settings, serverReceivedCaps))
2214 return FALSE;
2215 }
2216 }
2217
2218 return TRUE;
2219}

◆ freerdp_static_channel_collection_add()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_static_channel_collection_add ( rdpSettings *  settings,
ADDIN_ARGV *  channel 
)

Definition at line 548 of file common/settings.c.

549{
550 UINT32 count = 0;
551
552 WINPR_ASSERT(settings);
553 WINPR_ASSERT(channel);
554
555 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount) + 1;
556 if (freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize) < count)
557 {
558 const UINT32 oldSize =
559 freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
560 const size_t new_size = oldSize + 32ul;
561 ADDIN_ARGV** new_array = (ADDIN_ARGV**)realloc((void*)settings->StaticChannelArray,
562 new_size * sizeof(ADDIN_ARGV*));
563
564 if (!new_array)
565 return FALSE;
566
567 settings->StaticChannelArray = new_array;
568 {
569 for (size_t x = oldSize; x < new_size; x++)
570 settings->StaticChannelArray[x] = nullptr;
571 }
572 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize,
573 WINPR_ASSERTING_INT_CAST(uint32_t, new_size)))
574 return FALSE;
575 }
576
577 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
578
579 ADDIN_ARGV** cur = &settings->StaticChannelArray[count++];
580 freerdp_addin_argv_free(*cur);
581 *cur = channel;
582 return freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count);
583}

◆ freerdp_static_channel_collection_del()

FREERDP_API BOOL freerdp_static_channel_collection_del ( rdpSettings *  settings,
const char *  name 
)

Definition at line 514 of file common/settings.c.

515{
516 const UINT32 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
517 if (!settings || !settings->StaticChannelArray)
518 return FALSE;
519
520 for (UINT32 x = 0; x < count; x++)
521 {
522 ADDIN_ARGV* cur = settings->StaticChannelArray[x];
523 if (cur && (cur->argc > 0))
524 {
525 if (strcmp(name, cur->argv[0]) == 0)
526 {
527 const BOOL success = memmove_s((void*)&settings->StaticChannelArray[x],
528 (count - x) * sizeof(ADDIN_ARGV*),
529 (void*)&settings->StaticChannelArray[x + 1],
530 (count - x - 1) * sizeof(ADDIN_ARGV*)) >= 0;
531 for (size_t y = count - 1; y < settings->StaticChannelArraySize; y++)
532 settings->StaticChannelArray[y] = nullptr;
533
534 freerdp_addin_argv_free(cur);
535 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count - 1))
536 return FALSE;
537 return success;
538 }
539 }
540 }
541 {
542 for (size_t x = count; x < settings->StaticChannelArraySize; x++)
543 settings->StaticChannelArray[x] = nullptr;
544 }
545 return FALSE;
546}

◆ freerdp_static_channel_collection_find()

WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV * freerdp_static_channel_collection_find ( rdpSettings *  settings,
const char *  name 
)

Definition at line 585 of file common/settings.c.

586{
587 ADDIN_ARGV* channel = nullptr;
588
589 WINPR_ASSERT(settings);
590 WINPR_ASSERT(name);
591
592 for (UINT32 index = 0;
593 index < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount); index++)
594 {
595 channel = settings->StaticChannelArray[index];
596
597 if (strcmp(channel->argv[0], name) == 0)
598 return channel;
599 }
600
601 return nullptr;
602}

◆ freerdp_static_channel_collection_free()

FREERDP_API void freerdp_static_channel_collection_free ( rdpSettings *  settings)

Definition at line 604 of file common/settings.c.

605{
606 if (!settings)
607 return;
608
609 if (settings->StaticChannelArray)
610 {
611 for (UINT32 i = 0;
612 i < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize); i++)
613 freerdp_addin_argv_free(settings->StaticChannelArray[i]);
614 }
615
616 free((void*)settings->StaticChannelArray);
617 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0))
618 WLog_WARN(
619 TAG, "freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0) failed");
620 settings->StaticChannelArray = nullptr;
621 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0))
622 WLog_WARN(TAG,
623 "freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0) failed");
624}

◆ freerdp_supported_color_depths_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_supported_color_depths_string ( UINT16  mask,
char *  buffer,
size_t  size 
)

returns a string representation of RNS_UD_XXBPP_SUPPORT values

Parameters
maskA bitmask of supported color dephts RNS_UD_*
bufferA pointer to a buffer of size bytes
sizeThe size of the buffer in bytes
Returns
A string reprenentation of the bitmask.

Definition at line 2377 of file common/settings.c.

2378{
2379 const UINT32 invalid = mask & ~(RNS_UD_32BPP_SUPPORT | RNS_UD_24BPP_SUPPORT |
2380 RNS_UD_16BPP_SUPPORT | RNS_UD_15BPP_SUPPORT);
2381
2382 if (mask & RNS_UD_32BPP_SUPPORT)
2383 winpr_str_append("RNS_UD_32BPP_SUPPORT", buffer, size, "|");
2384 if (mask & RNS_UD_24BPP_SUPPORT)
2385 winpr_str_append("RNS_UD_24BPP_SUPPORT", buffer, size, "|");
2386 if (mask & RNS_UD_16BPP_SUPPORT)
2387 winpr_str_append("RNS_UD_16BPP_SUPPORT", buffer, size, "|");
2388 if (mask & RNS_UD_15BPP_SUPPORT)
2389 winpr_str_append("RNS_UD_15BPP_SUPPORT", buffer, size, "|");
2390
2391 if (invalid != 0)
2392 {
2393 char str[32] = WINPR_C_ARRAY_INIT;
2394 (void)_snprintf(str, sizeof(str), "RNS_UD_INVALID[0x%04" PRIx32 "]", invalid);
2395 winpr_str_append(str, buffer, size, "|");
2396 }
2397 char hex[32] = WINPR_C_ARRAY_INIT;
2398 (void)_snprintf(hex, sizeof(hex), "[0x%04" PRIx16 "]", mask);
2399 return buffer;
2400}

◆ freerdp_target_net_addresses_copy()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_target_net_addresses_copy ( rdpSettings *  settings,
char **  addresses,
UINT32  count 
)

Definition at line 2052 of file common/settings.c.

2053{
2054 WINPR_ASSERT(settings);
2055 WINPR_ASSERT(addresses);
2056
2057 if (!freerdp_target_net_adresses_reset(settings, count))
2058 return FALSE;
2059
2060 for (UINT32 i = 0; i < settings->TargetNetAddressCount; i++)
2061 {
2062 const char* address = addresses[i];
2063 if (!freerdp_settings_set_pointer_array(settings, FreeRDP_TargetNetAddresses, i, address))
2064 {
2065 freerdp_target_net_addresses_free(settings);
2066 return FALSE;
2067 }
2068 }
2069
2070 return TRUE;
2071}

◆ freerdp_target_net_addresses_free()

FREERDP_API void freerdp_target_net_addresses_free ( rdpSettings *  settings)

Definition at line 966 of file common/settings.c.

967{
968 WINPR_ASSERT(settings);
969
970 target_net_addresses_free(settings, 0);
971
972 free((void*)settings->TargetNetAddresses);
973 settings->TargetNetAddresses = nullptr;
974
975 free(settings->TargetNetPorts);
976 settings->TargetNetPorts = nullptr;
977
978 settings->TargetNetAddressCount = 0;
979}

◆ freerdp_update_gateway_usage_method()

FREERDP_API void freerdp_update_gateway_usage_method ( rdpSettings *  settings,
UINT32  GatewayEnabled,
UINT32  GatewayBypassLocal 
)

Definition at line 1156 of file common/settings.c.

1158{
1159 UINT32 GatewayUsageMethod = 0;
1160
1161 if (!GatewayEnabled && !GatewayBypassLocal)
1162 GatewayUsageMethod = TSC_PROXY_MODE_NONE_DIRECT;
1163 else if (GatewayEnabled && !GatewayBypassLocal)
1164 GatewayUsageMethod = TSC_PROXY_MODE_DIRECT;
1165 else if (GatewayEnabled && GatewayBypassLocal)
1166 GatewayUsageMethod = TSC_PROXY_MODE_DETECT;
1167
1168 if (!freerdp_set_gateway_usage_method(settings, GatewayUsageMethod))
1169 WLog_WARN(TAG,
1170 "freerdp_set_gateway_usage_method(settings, GatewayUsageMethod=%" PRIu32
1171 ") failed)",
1172 GatewayUsageMethod);
1173}
BOOL freerdp_set_gateway_usage_method(rdpSettings *settings, UINT32 GatewayUsageMethod)