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_ARGVfreerdp_addin_argv_new (size_t argc, const char *const argv[])
 
FREERDP_API ADDIN_ARGVfreerdp_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_DEVICEfreerdp_device_collection_find (rdpSettings *settings, const char *name)
 
WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICEfreerdp_device_collection_find_type (rdpSettings *settings, UINT32 type)
 
FREERDP_API void freerdp_device_free (RDPDR_DEVICE *device)
 
FREERDP_API RDPDR_DEVICEfreerdp_device_new (UINT32 Type, size_t count, const char *const args[])
 
FREERDP_API RDPDR_DEVICEfreerdp_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_ARGVfreerdp_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_ARGVfreerdp_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_ARGVfreerdp_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 2068 of file common/settings.c.

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

◆ 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 4668 of file common/settings.c.

4669{
4670 if (!device)
4671 return nullptr;
4672 union
4673 {
4674 const RDPDR_DEVICE* dev;
4675 const struct RDPDR_DEVICE_EX* ex;
4676 } cnv;
4677
4678 cnv.dev = device;
4679 return cnv.ex->args;
4680}

◆ 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 2325 of file common/settings.c.

2326{
2327 switch (EncryptionLevel)
2328 {
2329 case ENCRYPTION_LEVEL_NONE:
2330 return "ENCRYPTION_LEVEL_NONE";
2331 case ENCRYPTION_LEVEL_LOW:
2332 return "ENCRYPTION_LEVEL_LOW";
2333 case ENCRYPTION_LEVEL_CLIENT_COMPATIBLE:
2334 return "ENCRYPTION_LEVEL_CLIENT_COMPATIBLE";
2335 case ENCRYPTION_LEVEL_HIGH:
2336 return "ENCRYPTION_LEVEL_HIGH";
2337 case ENCRYPTION_LEVEL_FIPS:
2338 return "ENCRYPTION_LEVEL_FIPS";
2339 default:
2340 return "ENCRYPTION_LEVEL_UNKNOWN";
2341 }
2342}

◆ 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 2344 of file common/settings.c.

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

◆ 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 2155 of file common/settings.c.

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

◆ 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 2216 of file common/settings.c.

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

◆ 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 2306 of file common/settings.c.

2307{
2308 switch (type)
2309 {
2310 case RDPDR_DTYP_FILESYSTEM:
2311 return "RDPDR_DTYP_FILESYSTEM";
2312 case RDPDR_DTYP_PARALLEL:
2313 return "RDPDR_DTYP_PARALLEL";
2314 case RDPDR_DTYP_PRINT:
2315 return "RDPDR_DTYP_PRINT";
2316 case RDPDR_DTYP_SERIAL:
2317 return "RDPDR_DTYP_SERIAL";
2318 case RDPDR_DTYP_SMARTCARD:
2319 return "RDPDR_DTYP_SMARTCARD";
2320 default:
2321 return "RDPDR_DTYP_UNKNOWN";
2322 }
2323}

◆ 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 2397 of file common/settings.c.

2399{
2400 const char* old = freerdp_settings_get_string(settings, id);
2401
2402 size_t len = 0;
2403 char* str = nullptr;
2404
2405 if (!old)
2406 winpr_asprintf(&str, &len, "%s", param);
2407 else if (!separator)
2408 winpr_asprintf(&str, &len, "%s%s", old, param);
2409 else
2410 winpr_asprintf(&str, &len, "%s%s%s", old, separator, param);
2411
2412 const BOOL rc = freerdp_settings_set_string_len(settings, id, str, len);
2413 free(str);
2414 return rc;
2415}
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 2417 of file common/settings.c.

2418{
2419 return settings != nullptr;
2420}

◆ 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 1642 of file core/settings.c.

1643{
1644 rdpSettings* dst = (rdpSettings*)calloc(1, sizeof(rdpSettings));
1645
1646 if (!freerdp_settings_copy(dst, settings))
1647 goto out_fail;
1648
1649 return dst;
1650out_fail:
1651 WINPR_PRAGMA_DIAG_PUSH
1652 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1654 WINPR_PRAGMA_DIAG_POP
1655 return nullptr;
1656}
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 1616 of file core/settings.c.

1617{
1618 BOOL rc = 0;
1619
1620 if (!dst || !src)
1621 return FALSE;
1622
1623 /* This is required to free all non string buffers */
1624 freerdp_settings_free_internal(dst);
1625
1626 /* This copies everything except allocated non string buffers. reset all allocated buffers to
1627 * nullptr to fix issues during cleanup */
1628 rc = freerdp_settings_clone_keys(dst, src);
1629 if (!rc)
1630 goto out_fail;
1631 freerdp_settings_free_internal_ensure_reset(dst);
1632
1633 /* Begin copying */
1634 if (!freerdp_settings_int_buffer_copy(dst, src))
1635 goto out_fail;
1636 return TRUE;
1637out_fail:
1638 freerdp_settings_free_internal(dst);
1639 return FALSE;
1640}

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 4530 of file common/settings.c.

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

1395{
1396 if (!settings)
1397 return;
1398
1399 freerdp_settings_free_internal(settings);
1400 free(settings);
1401}

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 2009 of file common/settings.c.

2010{
2011 UINT32 flags = FREERDP_CODEC_ALL;
2012 if (settings->RemoteFxCodec == FALSE)
2013 {
2014 flags &= (uint32_t)~FREERDP_CODEC_REMOTEFX;
2015 }
2016 if (settings->NSCodec == FALSE)
2017 {
2018 flags &= (uint32_t)~FREERDP_CODEC_NSCODEC;
2019 }
2020 /*TODO: check other codecs flags */
2021 return flags;
2022}

◆ 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 810 of file core/settings.c.

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

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 2003 of file common/settings.c.

2005{
2006 return freerdp_settings_get_pointer_array_writable(settings, id, offset);
2007}

◆ 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 1654 of file common/settings.c.

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

◆ 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 4157 of file settings_getters.c.

4158{
4159 WINPR_ASSERT(settings);
4160
4161 switch (id)
4162 {
4163 case FreeRDP_BitmapCacheV2CellInfo:
4164 return (void*)settings->BitmapCacheV2CellInfo;
4165
4166 case FreeRDP_ChannelDefArray:
4167 return (void*)settings->ChannelDefArray;
4168
4169 case FreeRDP_ClientAutoReconnectCookie:
4170 return (void*)settings->ClientAutoReconnectCookie;
4171
4172 case FreeRDP_ClientRandom:
4173 return (void*)settings->ClientRandom;
4174
4175 case FreeRDP_ClientTimeZone:
4176 return (void*)settings->ClientTimeZone;
4177
4178 case FreeRDP_DeviceArray:
4179 return (void*)settings->DeviceArray;
4180
4181 case FreeRDP_DynamicChannelArray:
4182 return (void*)settings->DynamicChannelArray;
4183
4184 case FreeRDP_FragCache:
4185 return (void*)settings->FragCache;
4186
4187 case FreeRDP_GlyphCache:
4188 return (void*)settings->GlyphCache;
4189
4190 case FreeRDP_LoadBalanceInfo:
4191 return (void*)settings->LoadBalanceInfo;
4192
4193 case FreeRDP_MonitorDefArray:
4194 return (void*)settings->MonitorDefArray;
4195
4196 case FreeRDP_MonitorIds:
4197 return (void*)settings->MonitorIds;
4198
4199 case FreeRDP_OrderSupport:
4200 return (void*)settings->OrderSupport;
4201
4202 case FreeRDP_Password51:
4203 return (void*)settings->Password51;
4204
4205 case FreeRDP_RdpServerCertificate:
4206 return (void*)settings->RdpServerCertificate;
4207
4208 case FreeRDP_RdpServerRsaKey:
4209 return (void*)settings->RdpServerRsaKey;
4210
4211 case FreeRDP_ReceivedCapabilities:
4212 return (void*)settings->ReceivedCapabilities;
4213
4214 case FreeRDP_ReceivedCapabilityData:
4215 return (void*)settings->ReceivedCapabilityData;
4216
4217 case FreeRDP_ReceivedCapabilityDataSizes:
4218 return (void*)settings->ReceivedCapabilityDataSizes;
4219
4220 case FreeRDP_RedirectionGuid:
4221 return (void*)settings->RedirectionGuid;
4222
4223 case FreeRDP_RedirectionPassword:
4224 return (void*)settings->RedirectionPassword;
4225
4226 case FreeRDP_RedirectionTargetCertificate:
4227 return (void*)settings->RedirectionTargetCertificate;
4228
4229 case FreeRDP_RedirectionTsvUrl:
4230 return (void*)settings->RedirectionTsvUrl;
4231
4232 case FreeRDP_ServerAutoReconnectCookie:
4233 return (void*)settings->ServerAutoReconnectCookie;
4234
4235 case FreeRDP_ServerCertificate:
4236 return (void*)settings->ServerCertificate;
4237
4238 case FreeRDP_ServerLicenseProductIssuers:
4239 return (void*)settings->ServerLicenseProductIssuers;
4240
4241 case FreeRDP_ServerRandom:
4242 return (void*)settings->ServerRandom;
4243
4244 case FreeRDP_StaticChannelArray:
4245 return (void*)settings->StaticChannelArray;
4246
4247 case FreeRDP_TargetNetAddresses:
4248 return (void*)settings->TargetNetAddresses;
4249
4250 case FreeRDP_TargetNetPorts:
4251 return (void*)settings->TargetNetPorts;
4252
4253 case FreeRDP_instance:
4254 return settings->instance;
4255
4256 default:
4257 WLog_ERR(TAG, "Invalid key index %d [%s|%s]", id, freerdp_settings_get_name_for_key(id),
4259 WINPR_ASSERT(FALSE);
4260 return nullptr;
4261 }
4262}
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 2024 of file common/settings.c.

2025{
2026 WINPR_ASSERT(settings);
2027 const char* hostname = settings->ServerHostname;
2028
2029 if (settings->UserSpecifiedServerName)
2030 hostname = settings->UserSpecifiedServerName;
2031
2032 return hostname;
2033}

◆ 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 2295 of file common/settings.c.

2297{
2298 const char* str = freerdp_settings_get_string(settings, id);
2299 if (pCharLen)
2300 *pCharLen = 0;
2301 if (!str)
2302 return nullptr;
2303 return ConvertUtf8ToWCharAlloc(str, pCharLen);
2304}

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 3089 of file settings_getters.c.

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

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 815 of file core/settings.c.

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

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

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

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 1816 of file common/settings.c.

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

◆ 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 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_BitmapCacheV2NumCells,
1575 data, len, sizeof(BITMAP_CACHE_V2_CELL_INFO));
1576 case FreeRDP_GlyphCache:
1577 if ((len != 0) && (len != 10))
1578 {
1579 WLog_ERR(TAG, "FreeRDP_GlyphCache::len must be 0 or 10");
1580 return FALSE;
1581 }
1582 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1583 sizeof(GLYPH_CACHE_DEFINITION));
1584 case FreeRDP_FragCache:
1585 if (len > 1)
1586 {
1587 WLog_ERR(TAG, "FreeRDP_FragCache::len must be 0 or 1");
1588 return FALSE;
1589 }
1590 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1591 sizeof(GLYPH_CACHE_DEFINITION));
1592 case FreeRDP_StaticChannelArray:
1593 if (data == nullptr)
1594 freerdp_static_channel_collection_free(settings);
1595 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_StaticChannelArraySize,
1596 data, len, sizeof(ADDIN_ARGV*));
1597 case FreeRDP_DynamicChannelArray:
1598 if (data == nullptr)
1599 freerdp_dynamic_channel_collection_free(settings);
1600 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_DynamicChannelArraySize,
1601 data, len, sizeof(ADDIN_ARGV*));
1602 case FreeRDP_ReceivedCapabilityData:
1603 if (!freerdp_capability_buffer_resize(settings, len, FALSE))
1604 return FALSE;
1605 if (data == nullptr)
1606 {
1607 freerdp_capability_data_free(settings, 0, FALSE);
1608 }
1609 return TRUE;
1610 case FreeRDP_ReceivedCapabilities:
1611 if (!freerdp_capability_buffer_resize(settings, len, FALSE))
1612 return FALSE;
1613 if (data == nullptr)
1614 {
1615 for (size_t x = 0; x < settings->ReceivedCapabilitiesSize; x++)
1616 {
1617 settings->ReceivedCapabilities[x] = 0;
1618 }
1619 }
1620 return TRUE;
1621 case FreeRDP_OrderSupport:
1622 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1623 sizeof(char));
1624
1625 case FreeRDP_MonitorIds:
1626 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_NumMonitorIds, data, len,
1627 sizeof(UINT32));
1628
1629 case FreeRDP_ReceivedCapabilityDataSizes:
1630 if (!freerdp_capability_buffer_resize(settings, len, FALSE))
1631 return FALSE;
1632 if (data == nullptr)
1633 {
1634 for (size_t x = 0; x < settings->ReceivedCapabilitiesSize; x++)
1635 settings->ReceivedCapabilityDataSizes[x] = 0;
1636 }
1637 return TRUE;
1638
1639 case FreeRDP_Password51:
1640 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_Password51Length, data,
1641 len, sizeof(char));
1642 default:
1643 if ((data == nullptr) && (len == 0))
1644 {
1645 if (!freerdp_settings_set_pointer(settings, id, nullptr))
1646 return FALSE;
1647 }
1648 else
1649 WLog_WARN(TAG, "Invalid id %d", id);
1650 return FALSE;
1651 }
1652}

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 3789 of file settings_getters.c.

3791{
3792 size_t len = 0;
3793 if (val)
3794 len = strlen(val);
3795 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3796}

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 2255 of file common/settings.c.

2257{
2258 WINPR_ASSERT(settings);
2259
2260 if (!param)
2261 return freerdp_settings_set_string_copy_(settings, id, nullptr, 0, TRUE);
2262
2263 size_t len = 0;
2264
2265 char* str = ConvertWCharToUtf8Alloc(param, &len);
2266 if (!str && (len != 0))
2267 return FALSE;
2268
2269 return freerdp_settings_set_string_(settings, id, str, len);
2270}

◆ 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 2272 of file common/settings.c.

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

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 3783 of file settings_getters.c.

3785{
3786 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3787}

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 2189 of file common/settings.c.

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

◆ 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 2372 of file common/settings.c.

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

◆ 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 2047 of file common/settings.c.

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

◆ 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)