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 STATUS_FINDING_DESTINATION   0x00000401
 
#define STATUS_LOADING_DESTINATION   0x00000402
 
#define STATUS_BRINGING_SESSION_ONLINE   0x00000403
 
#define STATUS_REDIRECTING_TO_DESTINATION   0x00000404
 
#define STATUS_VM_LOADING   0x00000501
 
#define STATUS_VM_WAKING   0x00000502
 
#define STATUS_VM_BOOTING   0x00000503
 
#define PACKET_COMPR_TYPE_8K   0x00
 
#define PACKET_COMPR_TYPE_64K   0x01
 
#define PACKET_COMPR_TYPE_RDP6   0x02
 
#define PACKET_COMPR_TYPE_RDP61   0x03
 
#define PACKET_COMPR_TYPE_RDP8   0x04
 
#define CLIPRDR_FLAG_LOCAL_TO_REMOTE   0x01
 
#define CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES   0x02
 
#define CLIPRDR_FLAG_REMOTE_TO_LOCAL   0x10
 
#define CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES   0x20
 
#define CLIPRDR_FLAG_DEFAULT_MASK
 
#define FREERDP_MONITOR_OVERRIDE_ORIENTATION   (1u << 0) /** @since version 3.15.0 */
 
#define FREERDP_MONITOR_OVERRIDE_DESKTOP_SCALE   (1u << 1) /** @since version 3.15.0 */
 
#define FREERDP_MONITOR_OVERRIDE_DEVICE_SCALE   (1u << 2) /** @since version 3.15.0 */
 
#define PROXY_TYPE_NONE   0
 
#define PROXY_TYPE_HTTP   1
 
#define PROXY_TYPE_SOCKS   2
 
#define PROXY_TYPE_IGNORE   0xFFFF
 
#define THREADING_FLAGS_DISABLE_THREADS   0x00000001
 
#define FREERDP_SETTINGS_SERVER_MODE   0x00000001
 
#define SETTINGS_DEPRECATED(x)   WINPR_DEPRECATED(x)
 

Enumerations

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

Functions

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

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 376 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 385 of file settings_types.h.

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

◆ ADDIN_ARGV

struct ADDIN_ARGV

Definition at line 395 of file settings_types.h.

Data Fields
int argc
char ** argv

◆ rdp_ext_set

struct rdp_ext_set

Definition at line 403 of file settings_types.h.

Data Fields
void * data
char name[256]

◆ BITMAP_CACHE_CELL_INFO

struct BITMAP_CACHE_CELL_INFO

Definition at line 411 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 417 of file settings_types.h.

Data Fields
UINT32 numEntries
BOOL persistent

◆ GLYPH_CACHE_DEFINITION

struct GLYPH_CACHE_DEFINITION

Definition at line 425 of file settings_types.h.

Data Fields
UINT16 cacheEntries
UINT16 cacheMaximumCellSize

◆ MONITOR_DEF

struct MONITOR_DEF

Definition at line 433 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 442 of file settings_types.h.

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

◆ rdpMonitor

struct rdpMonitor

Definition at line 451 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 472 of file settings_types.h.

Data Fields
UINT32 Id
char * Name
UINT32 Type

◆ RDPDR_DRIVE

struct RDPDR_DRIVE

Definition at line 479 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 486 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 493 of file settings_types.h.

Collaboration diagram for RDPDR_SMARTCARD:
Data Fields
RDPDR_DEVICE device

◆ RDPDR_SERIAL

struct RDPDR_SERIAL

Definition at line 498 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 506 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 351 of file settings_types.h.

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

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES   0x02

Definition at line 347 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL   0x10

Definition at line 348 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES   0x20

Definition at line 349 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.

◆ FREERDP_MONITOR_OVERRIDE_DESKTOP_SCALE

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

Definition at line 357 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 358 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_ORIENTATION

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

Definition at line 356 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 536 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.

◆ 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 331 of file settings_types.h.

◆ PACKET_COMPR_TYPE_8K

#define PACKET_COMPR_TYPE_8K   0x00

Definition at line 330 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP6

#define PACKET_COMPR_TYPE_RDP6   0x02

Definition at line 332 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP61

#define PACKET_COMPR_TYPE_RDP61   0x03

Definition at line 333 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP8

#define PACKET_COMPR_TYPE_RDP8   0x04

Definition at line 334 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 513 of file settings_types.h.

◆ PROXY_TYPE_IGNORE

#define PROXY_TYPE_IGNORE   0xFFFF

Definition at line 515 of file settings_types.h.

◆ PROXY_TYPE_NONE

#define PROXY_TYPE_NONE   0

Definition at line 512 of file settings_types.h.

◆ PROXY_TYPE_SOCKS

#define PROXY_TYPE_SOCKS   2

Definition at line 514 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 323 of file settings_types.h.

◆ STATUS_FINDING_DESTINATION

#define STATUS_FINDING_DESTINATION   0x00000401

Definition at line 321 of file settings_types.h.

◆ STATUS_LOADING_DESTINATION

#define STATUS_LOADING_DESTINATION   0x00000402

Definition at line 322 of file settings_types.h.

◆ STATUS_REDIRECTING_TO_DESTINATION

#define STATUS_REDIRECTING_TO_DESTINATION   0x00000404

Definition at line 324 of file settings_types.h.

◆ STATUS_VM_BOOTING

#define STATUS_VM_BOOTING   0x00000503

Definition at line 327 of file settings_types.h.

◆ STATUS_VM_LOADING

#define STATUS_VM_LOADING   0x00000501

Definition at line 325 of file settings_types.h.

◆ STATUS_VM_WAKING

#define STATUS_VM_WAKING   0x00000502

Definition at line 326 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 518 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 337 of file settings_types.h.

341 {
342 ORIENTATION_LANDSCAPE = 0,
343 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 463 of file settings_types.h.

467 {
468 RDPDR_DTYP_SERIAL = 0x00000001,
469 RDPDR_DTYP_PARALLEL = 0x00000002,
470 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 365 of file settings_types.h.

369 {
370 FREERDP_TLS_SECLEVEL_0 = 0,
371 FREERDP_TLS_SECLEVEL_80BIT = 1,
372 FREERDP_TLS_SECLEVEL_112BIT = 2,
373 FREERDP_TLS_SECLEVEL_128BIT = 3,

◆ rdp_settings_type

enum rdp_settings_type

Definition at line 520 of file settings_types.h.

524 {
525 RDP_SETTINGS_TYPE_BOOL,
526 RDP_SETTINGS_TYPE_UINT16,
527 RDP_SETTINGS_TYPE_INT16,
528 RDP_SETTINGS_TYPE_UINT32,
529 RDP_SETTINGS_TYPE_INT32,
530 RDP_SETTINGS_TYPE_UINT64,
531 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 86 of file common/settings.c.

87{
88 return freerdp_addin_argv_add_argument_ex(args, argument, 0);
89}

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

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

◆ freerdp_addin_argv_clone()

FREERDP_API ADDIN_ARGV * freerdp_addin_argv_clone ( const ADDIN_ARGV *  args)

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

780{
781 union
782 {
783 char** c;
784 const char** cc;
785 } cnv;
786 if (!args)
787 return nullptr;
788 cnv.c = args->argv;
789 return freerdp_addin_argv_new(WINPR_ASSERTING_INT_CAST(uint32_t, args->argc), cnv.cc);
790}

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

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

◆ freerdp_addin_argv_free()

FREERDP_API void freerdp_addin_argv_free ( ADDIN_ARGV *  args)

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

724{
725 if (!args)
726 return;
727
728 if (args->argv)
729 {
730 for (int index = 0; index < args->argc; index++)
731 free(args->argv[index]);
732 free((void*)args->argv);
733 }
734
735 free(args);
736}

◆ freerdp_addin_argv_new()

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

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

739{
740 if (argc > INT32_MAX)
741 return nullptr;
742
743 ADDIN_ARGV* args = calloc(1, sizeof(ADDIN_ARGV));
744 if (!args)
745 return nullptr;
746 if (argc == 0)
747 return args;
748
749 args->argc = (int)argc;
750 args->argv = (char**)calloc(argc, sizeof(char*));
751 if (!args->argv)
752 goto fail;
753
754 if (argv)
755 {
756 /* first argument must not be NULL, others might be */
757 if (!argv[0])
758 goto fail;
759
760 for (size_t x = 0; x < argc; x++)
761 {
762 if (!argv[x])
763 continue;
764 args->argv[x] = _strdup(argv[x]);
765 if (!args->argv[x])
766 goto fail;
767 }
768 }
769 return args;
770
771fail:
772 WINPR_PRAGMA_DIAG_PUSH
773 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
774 freerdp_addin_argv_free(args);
775 WINPR_PRAGMA_DIAG_POP
776 return nullptr;
777}

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

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

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

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

◆ freerdp_addin_set_argument()

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

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

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

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

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

◆ freerdp_capability_buffer_copy()

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

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

929{
930 WINPR_ASSERT(settings);
931 WINPR_ASSERT(src);
932
933 if (src->ReceivedCapabilitiesSize == 0)
934 return TRUE;
935
936 if (!freerdp_capability_buffer_resize(settings, src->ReceivedCapabilitiesSize, TRUE))
937 return FALSE;
938
939 for (UINT32 x = 0; x < src->ReceivedCapabilitiesSize; x++)
940 {
941 WINPR_ASSERT(settings->ReceivedCapabilities);
942 settings->ReceivedCapabilities[x] = src->ReceivedCapabilities[x];
943
944 WINPR_ASSERT(settings->ReceivedCapabilityDataSizes);
945 settings->ReceivedCapabilityDataSizes[x] = src->ReceivedCapabilityDataSizes[x];
946
947 WINPR_ASSERT(settings->ReceivedCapabilityData);
948 if (src->ReceivedCapabilityDataSizes[x] > 0)
949 {
950 void* tmp = realloc(settings->ReceivedCapabilityData[x],
951 settings->ReceivedCapabilityDataSizes[x]);
952 if (!tmp)
953 return FALSE;
954 memcpy(tmp, src->ReceivedCapabilityData[x], src->ReceivedCapabilityDataSizes[x]);
955 settings->ReceivedCapabilityData[x] = tmp;
956 }
957 else
958 {
959 free(settings->ReceivedCapabilityData[x]);
960 settings->ReceivedCapabilityData[x] = nullptr;
961 }
962 }
963 return TRUE;
964}

◆ freerdp_capability_buffer_free()

FREERDP_API void freerdp_capability_buffer_free ( rdpSettings *  settings)

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

834{
835 WINPR_ASSERT(settings);
836
837 freerdp_capability_data_free(settings, 0, TRUE);
838
839 free(settings->ReceivedCapabilityDataSizes);
840 settings->ReceivedCapabilityDataSizes = nullptr;
841
842 free(settings->ReceivedCapabilities);
843 settings->ReceivedCapabilities = nullptr;
844
845 settings->ReceivedCapabilitiesSize = 0;
846}

◆ freerdp_device_clone()

FREERDP_API RDPDR_DEVICE * freerdp_device_clone ( const RDPDR_DEVICE *  device)

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

475{
476 const struct RDPDR_DEVICE_EX* src = (const struct RDPDR_DEVICE_EX*)device;
477
478 if (!src)
479 return nullptr;
480
481 int argc = 0;
482 const char* const* argv = nullptr;
483 if (src->args)
484 {
485 argc = src->args->argc;
486 if (argc < 0)
487 return nullptr;
488 argv = (const char* const*)src->args->argv;
489 }
490
491 RDPDR_DEVICE* copy =
492 freerdp_device_new(device->Type, WINPR_ASSERTING_INT_CAST(size_t, argc), argv);
493 if (!copy)
494 return nullptr;
495 copy->Id = device->Id;
496 return copy;
497}

◆ freerdp_device_collection_add()

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

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

229{
230 UINT32 count = 0;
231 UINT32 old = 0;
232 WINPR_ASSERT(settings);
233 WINPR_ASSERT(device);
234
235 count = freerdp_settings_get_uint32(settings, FreeRDP_DeviceCount) + 1;
236 old = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
237 if (old < count)
238 {
239 const size_t new_size = (old + 32);
240 RDPDR_DEVICE** new_array =
241 (RDPDR_DEVICE**)realloc((void*)settings->DeviceArray, new_size * sizeof(RDPDR_DEVICE*));
242
243 if (!new_array)
244 return FALSE;
245
246 settings->DeviceArray = new_array;
247 for (size_t x = old; x < new_size; x++)
248 settings->DeviceArray[x] = nullptr;
249
250 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize,
251 WINPR_ASSERTING_INT_CAST(uint32_t, new_size)))
252 return FALSE;
253 }
254
255 settings->DeviceArray[settings->DeviceCount++] = device;
256 return TRUE;
257}
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 259 of file common/settings.c.

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

◆ freerdp_device_collection_find()

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

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

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

◆ freerdp_device_collection_find_type()

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

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

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

◆ freerdp_device_collection_free()

FREERDP_API void freerdp_device_collection_free ( rdpSettings *  settings)

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

500{
501 WINPR_ASSERT(settings);
502
503 if (settings->DeviceArray)
504 {
505 for (UINT32 index = 0; index < settings->DeviceArraySize; index++)
506 {
507 const BOOL rc =
508 freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, index, nullptr);
509 if (!rc)
510 WLog_WARN(TAG,
511 "freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, "
512 "index=%" PRIu32 ", nullptr) failed",
513 index);
514 }
515 }
516
517 free((void*)settings->DeviceArray);
518
519 if (!freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, nullptr))
520 WLog_WARN(TAG,
521 "freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, nullptr) failed");
522 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0))
523 WLog_WARN(TAG, "freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0) failed");
524 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0))
525 WLog_WARN(TAG, "freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0) failed");
526}
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 2087 of file common/settings.c.

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

◆ freerdp_device_free()

FREERDP_API void freerdp_device_free ( RDPDR_DEVICE *  device)

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

428{
429 if (!device)
430 return;
431
432 union
433 {
434 RDPDR_DEVICE* dev;
435 struct RDPDR_DEVICE_EX* ex;
436 } cnv;
437
438 cnv.dev = device;
439
440 switch (device->Type)
441 {
442 case RDPDR_DTYP_PRINT:
443 free(cnv.ex->u.printer.DriverName);
444 break;
445 case RDPDR_DTYP_SERIAL:
446 free(cnv.ex->u.serial.Path);
447 free(cnv.ex->u.serial.Driver);
448 free(cnv.ex->u.serial.Permissive);
449 break;
450 case RDPDR_DTYP_PARALLEL:
451 free(cnv.ex->u.parallel.Path);
452 break;
453 case RDPDR_DTYP_SMARTCARD:
454 break;
455 case RDPDR_DTYP_FILESYSTEM:
456 free(cnv.ex->u.drive.Path);
457 break;
458 default:
459 break;
460 }
461
462 WINPR_STATIC_ASSERT(sizeof(magic) == sizeof(cnv.ex->magic));
463 if (memcmp(magic, cnv.ex->magic, sizeof(magic)) == 0)
464 freerdp_addin_argv_free(cnv.ex->args);
465 else
466 WLog_WARN(TAG,
467 "freerdp_device_free called with argument not allocated by freerdp_device_new! "
468 "This is not supported with FreeRDP 3.x and might crash your application");
469
470 free(cnv.dev->Name);
471 free(cnv.dev);
472}

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

4705{
4706 if (!device)
4707 return nullptr;
4708 union
4709 {
4710 const RDPDR_DEVICE* dev;
4711 const struct RDPDR_DEVICE_EX* ex;
4712 } cnv;
4713
4714 cnv.dev = device;
4715 return cnv.ex->args;
4716}

◆ freerdp_device_new()

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

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

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

◆ freerdp_dynamic_channel_collection_add()

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

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

672{
673 UINT32 count = 0;
674 UINT32 oldSize = 0;
675
676 WINPR_ASSERT(settings);
677 WINPR_ASSERT(channel);
678
679 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount) + 1;
680 oldSize = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
681 if (oldSize < count)
682 {
683
684 const size_t size = oldSize + 32;
685 ADDIN_ARGV** new_array =
686 (ADDIN_ARGV**)realloc((void*)settings->DynamicChannelArray, sizeof(ADDIN_ARGV*) * size);
687
688 if (!new_array)
689 return FALSE;
690
691 settings->DynamicChannelArray = new_array;
692 {
693 for (size_t x = oldSize; x < size; x++)
694 settings->DynamicChannelArray[x] = nullptr;
695 }
696 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize,
697 WINPR_ASSERTING_INT_CAST(uint32_t, size)))
698 return FALSE;
699 }
700
701 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
702 settings->DynamicChannelArray[count++] = channel;
703 return freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count);
704}

◆ freerdp_dynamic_channel_collection_del()

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

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

641{
642 const UINT32 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
643 if (!settings || !settings->DynamicChannelArray)
644 return FALSE;
645
646 for (UINT32 x = 0; x < count; x++)
647 {
648 ADDIN_ARGV* cur = settings->DynamicChannelArray[x];
649 if (cur && (cur->argc > 0))
650 {
651 if (strcmp(name, cur->argv[0]) == 0)
652 {
653 const BOOL success = memmove_s((void*)&settings->DynamicChannelArray[x],
654 (count - x) * sizeof(ADDIN_ARGV*),
655 (void*)&settings->DynamicChannelArray[x + 1],
656 (count - x - 1) * sizeof(ADDIN_ARGV*)) >= 0;
657 for (size_t y = count - 1; y < settings->DynamicChannelArraySize; y++)
658 settings->DynamicChannelArray[y] = nullptr;
659
660 freerdp_addin_argv_free(cur);
661 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count - 1))
662 return FALSE;
663 return success;
664 }
665 }
666 }
667
668 return FALSE;
669}

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

707{
708 WINPR_ASSERT(settings);
709 WINPR_ASSERT(name);
710
711 for (UINT32 index = 0;
712 index < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount); index++)
713 {
714 ADDIN_ARGV* channel = settings->DynamicChannelArray[index];
715
716 if (strcmp(channel->argv[0], name) == 0)
717 return channel;
718 }
719
720 return nullptr;
721}

◆ freerdp_dynamic_channel_collection_free()

FREERDP_API void freerdp_dynamic_channel_collection_free ( rdpSettings *  settings)

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

793{
794 WINPR_ASSERT(settings);
795
796 if (settings->DynamicChannelArray)
797 {
798 for (UINT32 i = 0;
799 i < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize); i++)
800 freerdp_addin_argv_free(settings->DynamicChannelArray[i]);
801 }
802
803 free((void*)settings->DynamicChannelArray);
804 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0))
805 WLog_WARN(
806 TAG,
807 "freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0) failed");
808 settings->DynamicChannelArray = nullptr;
809 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0))
810 WLog_WARN(TAG,
811 "freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0) failed");
812}

◆ freerdp_encryption_level_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_encryption_level_string ( UINT32  EncryptionLevel)

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

2345{
2346 switch (EncryptionLevel)
2347 {
2348 case ENCRYPTION_LEVEL_NONE:
2349 return "ENCRYPTION_LEVEL_NONE";
2350 case ENCRYPTION_LEVEL_LOW:
2351 return "ENCRYPTION_LEVEL_LOW";
2352 case ENCRYPTION_LEVEL_CLIENT_COMPATIBLE:
2353 return "ENCRYPTION_LEVEL_CLIENT_COMPATIBLE";
2354 case ENCRYPTION_LEVEL_HIGH:
2355 return "ENCRYPTION_LEVEL_HIGH";
2356 case ENCRYPTION_LEVEL_FIPS:
2357 return "ENCRYPTION_LEVEL_FIPS";
2358 default:
2359 return "ENCRYPTION_LEVEL_UNKNOWN";
2360 }
2361}

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

2364{
2365 if (EncryptionMethods == ENCRYPTION_METHOD_NONE)
2366 {
2367 winpr_str_append("ENCRYPTION_METHOD_NONE", buffer, size, "|");
2368 return buffer;
2369 }
2370
2371 if (EncryptionMethods & ENCRYPTION_METHOD_40BIT)
2372 {
2373 winpr_str_append("ENCRYPTION_METHOD_40BIT", buffer, size, "|");
2374 }
2375 if (EncryptionMethods & ENCRYPTION_METHOD_128BIT)
2376 {
2377 winpr_str_append("ENCRYPTION_METHOD_128BIT", buffer, size, "|");
2378 }
2379 if (EncryptionMethods & ENCRYPTION_METHOD_56BIT)
2380 {
2381 winpr_str_append("ENCRYPTION_METHOD_56BIT", buffer, size, "|");
2382 }
2383 if (EncryptionMethods & ENCRYPTION_METHOD_FIPS)
2384 {
2385 winpr_str_append("ENCRYPTION_METHOD_FIPS", buffer, size, "|");
2386 }
2387
2388 return buffer;
2389}

◆ freerdp_get_gateway_usage_method()

WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_get_gateway_usage_method ( const rdpSettings *  settings)

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

1159{
1160 if (freerdp_settings_get_bool(settings, FreeRDP_GatewayEnabled))
1161 {
1162 if (freerdp_settings_get_bool(settings, FreeRDP_GatewayBypassLocal))
1163 return TSC_PROXY_MODE_DETECT;
1164 return TSC_PROXY_MODE_DIRECT;
1165 }
1166
1167 return freerdp_settings_get_uint32(settings, FreeRDP_GatewayUsageMethod);
1168}
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 1049 of file common/settings.c.

1050{
1051 UINT32 PerformanceFlags = PERF_FLAG_NONE;
1052
1053 if (freerdp_settings_get_bool(settings, FreeRDP_AllowFontSmoothing))
1054 PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
1055
1056 if (freerdp_settings_get_bool(settings, FreeRDP_AllowDesktopComposition))
1057 PerformanceFlags |= PERF_ENABLE_DESKTOP_COMPOSITION;
1058
1059 if (freerdp_settings_get_bool(settings, FreeRDP_DisableWallpaper))
1060 PerformanceFlags |= PERF_DISABLE_WALLPAPER;
1061
1062 if (freerdp_settings_get_bool(settings, FreeRDP_DisableFullWindowDrag))
1063 PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
1064
1065 if (freerdp_settings_get_bool(settings, FreeRDP_DisableMenuAnims))
1066 PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
1067
1068 if (freerdp_settings_get_bool(settings, FreeRDP_DisableThemes))
1069 PerformanceFlags |= PERF_DISABLE_THEMING;
1070 if (!freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags))
1071 WLog_WARN(TAG,
1072 "freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, 0x%08" PRIx32
1073 ") failed",
1074 PerformanceFlags);
1075}

◆ freerdp_performance_flags_split()

FREERDP_API void freerdp_performance_flags_split ( rdpSettings *  settings)

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

1078{
1079 BOOL res =
1080 freerdp_settings_set_bool(settings, FreeRDP_AllowFontSmoothing,
1081 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1082 PERF_ENABLE_FONT_SMOOTHING) != 0);
1084 settings, FreeRDP_AllowDesktopComposition,
1085 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1086 PERF_ENABLE_DESKTOP_COMPOSITION) != 0))
1087 res = FALSE;
1089 settings, FreeRDP_DisableWallpaper,
1090 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1091 PERF_DISABLE_WALLPAPER) != 0))
1092 res = FALSE;
1094 settings, FreeRDP_DisableFullWindowDrag,
1095 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1096 PERF_DISABLE_FULLWINDOWDRAG) != 0))
1097 res = FALSE;
1099 settings, FreeRDP_DisableMenuAnims,
1100 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1101 PERF_DISABLE_MENUANIMATIONS) != 0))
1102 res = FALSE;
1104 settings, FreeRDP_DisableThemes,
1105 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1106 PERF_DISABLE_THEMING) != 0))
1107 res = FALSE;
1108 if (!res)
1109 {
1110 WLog_WARN(TAG, "freerdp_performance_flags_split() failed");
1111 }
1112}
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 2174 of file common/settings.c.

2175{
2176 const UINT32 mask =
2177 RAIL_LEVEL_SUPPORTED | RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED |
2178 RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED | RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED |
2179 RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED | RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED |
2180 RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED | RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED;
2181
2182 if (flags & RAIL_LEVEL_SUPPORTED)
2183 winpr_str_append("RAIL_LEVEL_SUPPORTED", buffer, length, "|");
2184 if (flags & RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED)
2185 winpr_str_append("RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED", buffer, length, "|");
2186 if (flags & RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED)
2187 winpr_str_append("RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED", buffer, length, "|");
2188 if (flags & RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED)
2189 winpr_str_append("RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED", buffer, length, "|");
2190 if (flags & RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED)
2191 winpr_str_append("RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED", buffer, length, "|");
2192 if (flags & RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED)
2193 winpr_str_append("RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED", buffer, length, "|");
2194 if (flags & RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED)
2195 winpr_str_append("RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED", buffer, length, "|");
2196 if (flags & RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED)
2197 winpr_str_append("RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED", buffer, length, "|");
2198
2199 if ((flags & ~mask) != 0)
2200 {
2201 char tbuffer[64] = WINPR_C_ARRAY_INIT;
2202 (void)_snprintf(tbuffer, sizeof(tbuffer), "RAIL_FLAG_UNKNOWN 0x%08" PRIx32, flags & mask);
2203 winpr_str_append(tbuffer, buffer, length, "|");
2204 }
2205 return buffer;
2206}

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

2236{
2237 switch (version)
2238 {
2239 case RDP_VERSION_4:
2240 return "RDP_VERSION_4";
2241 case RDP_VERSION_5_PLUS:
2242 return "RDP_VERSION_5_PLUS";
2243 case RDP_VERSION_10_0:
2244 return "RDP_VERSION_10_0";
2245 case RDP_VERSION_10_1:
2246 return "RDP_VERSION_10_1";
2247 case RDP_VERSION_10_2:
2248 return "RDP_VERSION_10_2";
2249 case RDP_VERSION_10_3:
2250 return "RDP_VERSION_10_3";
2251 case RDP_VERSION_10_4:
2252 return "RDP_VERSION_10_4";
2253 case RDP_VERSION_10_5:
2254 return "RDP_VERSION_10_5";
2255 case RDP_VERSION_10_6:
2256 return "RDP_VERSION_10_6";
2257 case RDP_VERSION_10_7:
2258 return "RDP_VERSION_10_7";
2259 case RDP_VERSION_10_8:
2260 return "RDP_VERSION_10_8";
2261 case RDP_VERSION_10_9:
2262 return "RDP_VERSION_10_9";
2263 case RDP_VERSION_10_10:
2264 return "RDP_VERSION_10_10";
2265 case RDP_VERSION_10_11:
2266 return "RDP_VERSION_10_11";
2267 case RDP_VERSION_10_12:
2268 return "RDP_VERSION_10_12";
2269 default:
2270 return "RDP_VERSION_UNKNOWN";
2271 }
2272}

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

2326{
2327 switch (type)
2328 {
2329 case RDPDR_DTYP_FILESYSTEM:
2330 return "RDPDR_DTYP_FILESYSTEM";
2331 case RDPDR_DTYP_PARALLEL:
2332 return "RDPDR_DTYP_PARALLEL";
2333 case RDPDR_DTYP_PRINT:
2334 return "RDPDR_DTYP_PRINT";
2335 case RDPDR_DTYP_SERIAL:
2336 return "RDPDR_DTYP_SERIAL";
2337 case RDPDR_DTYP_SMARTCARD:
2338 return "RDPDR_DTYP_SMARTCARD";
2339 default:
2340 return "RDPDR_DTYP_UNKNOWN";
2341 }
2342}

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

1030{
1031 WINPR_ASSERT(settings);
1032 WINPR_ASSERT(issuers || (count == 0));
1033
1034 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_ServerLicenseProductIssuers, nullptr,
1035 count))
1036 return FALSE;
1037
1038 for (UINT32 x = 0; x < count; x++)
1039 {
1040 char* issuer = _strdup(issuers[x]);
1041 if (!issuer)
1042 return FALSE;
1043 settings->ServerLicenseProductIssuers[x] = issuer;
1044 }
1045
1046 return TRUE;
1047}
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 1015 of file common/settings.c.

1016{
1017 WINPR_ASSERT(settings);
1018
1019 if (settings->ServerLicenseProductIssuers)
1020 {
1021 for (UINT32 x = 0; x < settings->ServerLicenseProductIssuersCount; x++)
1022 free(settings->ServerLicenseProductIssuers[x]);
1023 }
1024 free((void*)settings->ServerLicenseProductIssuers);
1025 settings->ServerLicenseProductIssuers = nullptr;
1026 settings->ServerLicenseProductIssuersCount = 0;
1027}

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

1115{
1116 if (!freerdp_settings_set_uint32(settings, FreeRDP_GatewayUsageMethod, GatewayUsageMethod))
1117 return FALSE;
1118
1119 if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DIRECT)
1120 {
1121 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1122 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1123 return FALSE;
1124 }
1125 else if (GatewayUsageMethod == TSC_PROXY_MODE_DIRECT)
1126 {
1127 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1128 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1129 return FALSE;
1130 }
1131 else if (GatewayUsageMethod == TSC_PROXY_MODE_DETECT)
1132 {
1133 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1134 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, TRUE))
1135 return FALSE;
1136 }
1137 else if (GatewayUsageMethod == TSC_PROXY_MODE_DEFAULT)
1138 {
1144 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1145 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1146 return FALSE;
1147 }
1148 else if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DETECT)
1149 {
1150 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1151 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1152 return FALSE;
1153 }
1154
1155 return TRUE;
1156}

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

2418{
2419 const char* old = freerdp_settings_get_string(settings, id);
2420
2421 size_t len = 0;
2422 char* str = nullptr;
2423
2424 if (!old)
2425 winpr_asprintf(&str, &len, "%s", param);
2426 else if (!separator)
2427 winpr_asprintf(&str, &len, "%s%s", old, param);
2428 else
2429 winpr_asprintf(&str, &len, "%s%s%s", old, separator, param);
2430
2431 const BOOL rc = freerdp_settings_set_string_len(settings, id, str, len);
2432 free(str);
2433 return rc;
2434}
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 2436 of file common/settings.c.

2437{
2438 return settings != nullptr;
2439}

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

1694{
1695 rdpSettings* dst = (rdpSettings*)calloc(1, sizeof(rdpSettings));
1696
1697 if (!freerdp_settings_copy(dst, settings))
1698 goto out_fail;
1699
1700 return dst;
1701out_fail:
1702 WINPR_PRAGMA_DIAG_PUSH
1703 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1705 WINPR_PRAGMA_DIAG_POP
1706 return nullptr;
1707}
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 1667 of file core/settings.c.

1668{
1669 BOOL rc = 0;
1670
1671 if (!dst || !src)
1672 return FALSE;
1673
1674 /* This is required to free all non string buffers */
1675 freerdp_settings_free_internal(dst);
1676
1677 /* This copies everything except allocated non string buffers. reset all allocated buffers to
1678 * nullptr to fix issues during cleanup */
1679 rc = freerdp_settings_clone_keys(dst, src);
1680 if (!rc)
1681 goto out_fail;
1682 freerdp_settings_free_internal_ensure_reset(dst);
1683
1684 /* Begin copying */
1685 if (!freerdp_settings_int_buffer_copy(dst, src))
1686 goto out_fail;
1687 return TRUE;
1688out_fail:
1689 freerdp_settings_free_internal(dst);
1690 return FALSE;
1691}

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

4550{
4551 wLog* log = WLog_Get(TAG);
4552 WINPR_JSON* json = WINPR_JSON_ParseWithLength(jstr, length);
4553 if (!json)
4554 {
4555 WLog_Print(log, WLOG_ERROR, "JSON parsing failed");
4556 return nullptr;
4557 }
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
4566 if (!freerdp_settings_apply_from_json(settings, json))
4567 goto fail;
4568
4569 WINPR_JSON_Delete(json);
4570 return settings;
4571
4572fail:
4573 freerdp_settings_free(settings);
4574 WINPR_JSON_Delete(json);
4575 return nullptr;
4576}
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
FREERDP_API rdpSettings * freerdp_settings_new(DWORD flags)
creates a new setting struct

References freerdp_settings_free(), freerdp_settings_new(), WINPR_JSON_Delete(), 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 1445 of file core/settings.c.

1446{
1447 if (!settings)
1448 return;
1449
1450 freerdp_settings_free_internal(settings);
1451 free(settings);
1452}

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

2029{
2030 UINT32 flags = FREERDP_CODEC_ALL;
2031 if (settings->RemoteFxCodec == FALSE)
2032 {
2033 flags &= (uint32_t)~FREERDP_CODEC_REMOTEFX;
2034 }
2035 if (settings->NSCodec == FALSE)
2036 {
2037 flags &= (uint32_t)~FREERDP_CODEC_NSCODEC;
2038 }
2039 /*TODO: check other codecs flags */
2040 return flags;
2041}

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

858{
859 return freerdp_GetConfigFilePath(FALSE, "");
860}

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

1436{
1437 union
1438 {
1439 const rdpSettings* pc;
1440 rdpSettings* p;
1441 } cnv;
1442 cnv.pc = settings;
1443 return freerdp_settings_get_pointer_writable(cnv.p, id);
1444}
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 2022 of file common/settings.c.

2024{
2025 return freerdp_settings_get_pointer_array_writable(settings, id, offset);
2026}

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

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

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

4199{
4200 WINPR_ASSERT(settings);
4201
4202 switch (id)
4203 {
4204 case FreeRDP_BitmapCacheV2CellInfo:
4205 return (void*)settings->BitmapCacheV2CellInfo;
4206
4207 case FreeRDP_ChannelDefArray:
4208 return (void*)settings->ChannelDefArray;
4209
4210 case FreeRDP_ClientAutoReconnectCookie:
4211 return (void*)settings->ClientAutoReconnectCookie;
4212
4213 case FreeRDP_ClientRandom:
4214 return (void*)settings->ClientRandom;
4215
4216 case FreeRDP_ClientTimeZone:
4217 return (void*)settings->ClientTimeZone;
4218
4219 case FreeRDP_DeviceArray:
4220 return (void*)settings->DeviceArray;
4221
4222 case FreeRDP_DynamicChannelArray:
4223 return (void*)settings->DynamicChannelArray;
4224
4225 case FreeRDP_FragCache:
4226 return (void*)settings->FragCache;
4227
4228 case FreeRDP_GlyphCache:
4229 return (void*)settings->GlyphCache;
4230
4231 case FreeRDP_LoadBalanceInfo:
4232 return (void*)settings->LoadBalanceInfo;
4233
4234 case FreeRDP_MonitorDefArray:
4235 return (void*)settings->MonitorDefArray;
4236
4237 case FreeRDP_MonitorIds:
4238 return (void*)settings->MonitorIds;
4239
4240 case FreeRDP_OrderSupport:
4241 return (void*)settings->OrderSupport;
4242
4243 case FreeRDP_Password51:
4244 return (void*)settings->Password51;
4245
4246 case FreeRDP_RdpServerCertificate:
4247 return (void*)settings->RdpServerCertificate;
4248
4249 case FreeRDP_RdpServerRsaKey:
4250 return (void*)settings->RdpServerRsaKey;
4251
4252 case FreeRDP_ReceivedCapabilities:
4253 return (void*)settings->ReceivedCapabilities;
4254
4255 case FreeRDP_ReceivedCapabilityData:
4256 return (void*)settings->ReceivedCapabilityData;
4257
4258 case FreeRDP_ReceivedCapabilityDataSizes:
4259 return (void*)settings->ReceivedCapabilityDataSizes;
4260
4261 case FreeRDP_RedirectionGuid:
4262 return (void*)settings->RedirectionGuid;
4263
4264 case FreeRDP_RedirectionPassword:
4265 return (void*)settings->RedirectionPassword;
4266
4267 case FreeRDP_RedirectionTargetCertificate:
4268 return (void*)settings->RedirectionTargetCertificate;
4269
4270 case FreeRDP_RedirectionTsvUrl:
4271 return (void*)settings->RedirectionTsvUrl;
4272
4273 case FreeRDP_ServerAutoReconnectCookie:
4274 return (void*)settings->ServerAutoReconnectCookie;
4275
4276 case FreeRDP_ServerCertificate:
4277 return (void*)settings->ServerCertificate;
4278
4279 case FreeRDP_ServerLicenseProductIssuers:
4280 return (void*)settings->ServerLicenseProductIssuers;
4281
4282 case FreeRDP_ServerRandom:
4283 return (void*)settings->ServerRandom;
4284
4285 case FreeRDP_StaticChannelArray:
4286 return (void*)settings->StaticChannelArray;
4287
4288 case FreeRDP_TargetNetAddresses:
4289 return (void*)settings->TargetNetAddresses;
4290
4291 case FreeRDP_TargetNetPorts:
4292 return (void*)settings->TargetNetPorts;
4293
4294 case FreeRDP_instance:
4295 return settings->instance;
4296
4297 default:
4298 WLog_ERR(TAG, "Invalid key index %d [%s|%s]", id, freerdp_settings_get_name_for_key(id),
4300 WINPR_ASSERT(FALSE);
4301 return nullptr;
4302 }
4303}
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 2043 of file common/settings.c.

2044{
2045 WINPR_ASSERT(settings);
2046 const char* hostname = settings->ServerHostname;
2047
2048 if (settings->UserSpecifiedServerName)
2049 hostname = settings->UserSpecifiedServerName;
2050
2051 return hostname;
2052}

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

2316{
2317 const char* str = freerdp_settings_get_string(settings, id);
2318 if (pCharLen)
2319 *pCharLen = 0;
2320 if (!str)
2321 return nullptr;
2322 return ConvertUtf8ToWCharAlloc(str, pCharLen);
2323}

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

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

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_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}
const char * freerdp_settings_get_type_name_for_type(SSIZE_T type)
Returns the type name for a type.

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

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

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

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

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

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

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

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

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

3826{
3827 size_t len = 0;
3828 if (val)
3829 len = strlen(val);
3830 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3831}

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

2276{
2277 WINPR_ASSERT(settings);
2278
2279 if (!param)
2280 return freerdp_settings_set_string_copy_(settings, id, nullptr, 0, TRUE);
2281
2282 size_t len = 0;
2283
2284 char* str = ConvertWCharToUtf8Alloc(param, &len);
2285 if (!str && (len != 0))
2286 return FALSE;
2287
2288 return freerdp_settings_set_string_(settings, id, str, len);
2289}

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

2293{
2294 size_t len = 0;
2295
2296 WINPR_ASSERT(settings);
2297
2298 if (!param)
2299 return freerdp_settings_set_string_copy_(settings, id, nullptr, length, TRUE);
2300
2301 char* str = ConvertWCharNToUtf8Alloc(param, length, &len);
2302 if (!str && (length != 0))
2303 {
2304 /* If the input string is an empty string, but length > 0
2305 * consider the conversion a success */
2306 const size_t wlen = _wcsnlen(param, length);
2307 if (wlen != 0)
2308 return FALSE;
2309 }
2310
2311 return freerdp_settings_set_string_(settings, id, str, len);
2312}

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

3820{
3821 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3822}

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

1297{
1298 ULONGLONG uval = 0;
1299 LONGLONG ival = 0;
1300 SSIZE_T type = 0;
1301
1302 if (!settings || !name)
1303 return FALSE;
1304
1305 const SSIZE_T i = freerdp_settings_get_key_for_name(name);
1306 if (i < 0)
1307 {
1308 WLog_ERR(TAG, "Invalid settings key [%s]", name);
1309 return FALSE;
1310 }
1311
1312 const SSIZE_T index = i;
1313
1315 switch (type)
1316 {
1317
1318 case RDP_SETTINGS_TYPE_BOOL:
1319 {
1320 const BOOL val = (_strnicmp(value, "TRUE", 5) == 0) || (_strnicmp(value, "ON", 5) == 0);
1321 const BOOL nval =
1322 (_strnicmp(value, "FALSE", 6) == 0) || (_strnicmp(value, "OFF", 6) == 0);
1323 if (!val && !nval)
1324 return parsing_fail(name, "BOOL", value);
1325
1326 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1327 return freerdp_settings_set_bool(settings, (FreeRDP_Settings_Keys_Bool)index, val);
1328 }
1329 case RDP_SETTINGS_TYPE_UINT16:
1330 if (!value_to_uint(value, &uval, 0, UINT16_MAX))
1331 return parsing_fail(name, "UINT16", value);
1332
1333 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1334 if (!freerdp_settings_set_uint16(settings, (FreeRDP_Settings_Keys_UInt16)index,
1335 (UINT16)uval))
1336 return parsing_fail(name, "UINT16", value);
1337 return TRUE;
1338
1339 case RDP_SETTINGS_TYPE_INT16:
1340 if (!value_to_int(value, &ival, INT16_MIN, INT16_MAX))
1341 return parsing_fail(name, "INT16", value);
1342
1343 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1344 if (!freerdp_settings_set_int16(settings, (FreeRDP_Settings_Keys_Int16)index,
1345 (INT16)ival))
1346 return parsing_fail(name, "INT16", value);
1347 return TRUE;
1348 case RDP_SETTINGS_TYPE_UINT32:
1349 if (!value_to_uint(value, &uval, 0, UINT32_MAX))
1350 return parsing_fail(name, "UINT32", value);
1351
1352 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1353 if (!freerdp_settings_set_uint32(settings, (FreeRDP_Settings_Keys_UInt32)index,
1354 (UINT32)uval))
1355 return parsing_fail(name, "UINT32", value);
1356 return TRUE;
1357 case RDP_SETTINGS_TYPE_INT32:
1358 if (!value_to_int(value, &ival, INT32_MIN, INT32_MAX))
1359 return parsing_fail(name, "INT32", value);
1360
1361 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1362 if (!freerdp_settings_set_int32(settings, (FreeRDP_Settings_Keys_Int32)index,
1363 (INT32)ival))
1364 return parsing_fail(name, "INT32", value);
1365 return TRUE;
1366 case RDP_SETTINGS_TYPE_UINT64:
1367 if (!value_to_uint(value, &uval, 0, UINT64_MAX))
1368 return parsing_fail(name, "UINT64", value);
1369
1370 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1371 if (!freerdp_settings_set_uint64(settings, (FreeRDP_Settings_Keys_UInt64)index, uval))
1372 return parsing_fail(name, "UINT64", value);
1373 return TRUE;
1374 case RDP_SETTINGS_TYPE_INT64:
1375 if (!value_to_int(value, &ival, INT64_MIN, INT64_MAX))
1376 return parsing_fail(name, "INT64", value);
1377
1378 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1379 if (!freerdp_settings_set_int64(settings, (FreeRDP_Settings_Keys_Int64)index, ival))
1380 return parsing_fail(name, "INT64", value);
1381 return TRUE;
1382
1383 case RDP_SETTINGS_TYPE_STRING:
1384 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1385 return freerdp_settings_set_string(settings, (FreeRDP_Settings_Keys_String)index,
1386 value);
1387 case RDP_SETTINGS_TYPE_POINTER:
1388 return parsing_fail(name, "POINTER", value);
1389 default:
1390 return FALSE;
1391 }
1392 return FALSE;
1393}
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 2208 of file common/settings.c.

2211{
2212 WINPR_ASSERT(settings);
2213 WINPR_ASSERT(capsFlags || (capsCount == 0));
2214 WINPR_ASSERT(capsData || (capsCount == 0));
2215 WINPR_ASSERT(capsSizes || (capsCount == 0));
2216 WINPR_ASSERT(capsCount <= UINT16_MAX);
2217
2218 wLog* log = WLog_Get(TAG);
2219
2220 for (UINT32 x = 0; x < capsCount; x++)
2221 {
2222 if (capsFlags[x])
2223 {
2224 wStream buffer = WINPR_C_ARRAY_INIT;
2225 wStream* sub = Stream_StaticConstInit(&buffer, capsData[x], capsSizes[x]);
2226
2227 if (!rdp_read_capability_set(log, sub, (UINT16)x, settings, serverReceivedCaps))
2228 return FALSE;
2229 }
2230 }
2231
2232 return TRUE;
2233}

◆ freerdp_static_channel_collection_add()

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

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

563{
564 UINT32 count = 0;
565
566 WINPR_ASSERT(settings);
567 WINPR_ASSERT(channel);
568
569 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount) + 1;
570 if (freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize) < count)
571 {
572 const UINT32 oldSize =
573 freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
574 const size_t new_size = oldSize + 32ul;
575 ADDIN_ARGV** new_array = (ADDIN_ARGV**)realloc((void*)settings->StaticChannelArray,
576 new_size * sizeof(ADDIN_ARGV*));
577
578 if (!new_array)
579 return FALSE;
580
581 settings->StaticChannelArray = new_array;
582 {
583 for (size_t x = oldSize; x < new_size; x++)
584 settings->StaticChannelArray[x] = nullptr;
585 }
586 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize,
587 WINPR_ASSERTING_INT_CAST(uint32_t, new_size)))
588 return FALSE;
589 }
590
591 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
592
593 ADDIN_ARGV** cur = &settings->StaticChannelArray[count++];
594 freerdp_addin_argv_free(*cur);
595 *cur = channel;
596 return freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count);
597}

◆ freerdp_static_channel_collection_del()

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

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

529{
530 const UINT32 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
531 if (!settings || !settings->StaticChannelArray)
532 return FALSE;
533
534 for (UINT32 x = 0; x < count; x++)
535 {
536 ADDIN_ARGV* cur = settings->StaticChannelArray[x];
537 if (cur && (cur->argc > 0))
538 {
539 if (strcmp(name, cur->argv[0]) == 0)
540 {
541 const BOOL success = memmove_s((void*)&settings->StaticChannelArray[x],
542 (count - x) * sizeof(ADDIN_ARGV*),
543 (void*)&settings->StaticChannelArray[x + 1],
544 (count - x - 1) * sizeof(ADDIN_ARGV*)) >= 0;
545 for (size_t y = count - 1; y < settings->StaticChannelArraySize; y++)
546 settings->StaticChannelArray[y] = nullptr;
547
548 freerdp_addin_argv_free(cur);
549 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count - 1))
550 return FALSE;
551 return success;
552 }
553 }
554 }
555 {
556 for (size_t x = count; x < settings->StaticChannelArraySize; x++)
557 settings->StaticChannelArray[x] = nullptr;
558 }
559 return FALSE;
560}

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

600{
601 ADDIN_ARGV* channel = nullptr;
602
603 WINPR_ASSERT(settings);
604 WINPR_ASSERT(name);
605
606 for (UINT32 index = 0;
607 index < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount); index++)
608 {
609 channel = settings->StaticChannelArray[index];
610
611 if (strcmp(channel->argv[0], name) == 0)
612 return channel;
613 }
614
615 return nullptr;
616}

◆ freerdp_static_channel_collection_free()

FREERDP_API void freerdp_static_channel_collection_free ( rdpSettings *  settings)

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

619{
620 if (!settings)
621 return;
622
623 if (settings->StaticChannelArray)
624 {
625 for (UINT32 i = 0;
626 i < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize); i++)
627 freerdp_addin_argv_free(settings->StaticChannelArray[i]);
628 }
629
630 free((void*)settings->StaticChannelArray);
631 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0))
632 WLog_WARN(
633 TAG, "freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0) failed");
634 settings->StaticChannelArray = nullptr;
635 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0))
636 WLog_WARN(TAG,
637 "freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0) failed");
638}

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

2392{
2393 const UINT32 invalid = mask & ~(RNS_UD_32BPP_SUPPORT | RNS_UD_24BPP_SUPPORT |
2394 RNS_UD_16BPP_SUPPORT | RNS_UD_15BPP_SUPPORT);
2395
2396 if (mask & RNS_UD_32BPP_SUPPORT)
2397 winpr_str_append("RNS_UD_32BPP_SUPPORT", buffer, size, "|");
2398 if (mask & RNS_UD_24BPP_SUPPORT)
2399 winpr_str_append("RNS_UD_24BPP_SUPPORT", buffer, size, "|");
2400 if (mask & RNS_UD_16BPP_SUPPORT)
2401 winpr_str_append("RNS_UD_16BPP_SUPPORT", buffer, size, "|");
2402 if (mask & RNS_UD_15BPP_SUPPORT)
2403 winpr_str_append("RNS_UD_15BPP_SUPPORT", buffer, size, "|");
2404
2405 if (invalid != 0)
2406 {
2407 char str[32] = WINPR_C_ARRAY_INIT;
2408 (void)_snprintf(str, sizeof(str), "RNS_UD_INVALID[0x%04" PRIx32 "]", invalid);
2409 winpr_str_append(str, buffer, size, "|");
2410 }
2411 char hex[32] = WINPR_C_ARRAY_INIT;
2412 (void)_snprintf(hex, sizeof(hex), "[0x%04" PRIx16 "]", mask);
2413 return buffer;
2414}

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

2067{
2068 WINPR_ASSERT(settings);
2069 WINPR_ASSERT(addresses);
2070
2071 if (!freerdp_target_net_adresses_reset(settings, count))
2072 return FALSE;
2073
2074 for (UINT32 i = 0; i < settings->TargetNetAddressCount; i++)
2075 {
2076 const char* address = addresses[i];
2077 if (!freerdp_settings_set_pointer_array(settings, FreeRDP_TargetNetAddresses, i, address))
2078 {
2079 freerdp_target_net_addresses_free(settings);
2080 return FALSE;
2081 }
2082 }
2083
2084 return TRUE;
2085}

◆ freerdp_target_net_addresses_free()

FREERDP_API void freerdp_target_net_addresses_free ( rdpSettings *  settings)

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

981{
982 WINPR_ASSERT(settings);
983
984 target_net_addresses_free(settings, 0);
985
986 free((void*)settings->TargetNetAddresses);
987 settings->TargetNetAddresses = nullptr;
988
989 free(settings->TargetNetPorts);
990 settings->TargetNetPorts = nullptr;
991
992 settings->TargetNetAddressCount = 0;
993}

◆ freerdp_update_gateway_usage_method()

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

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

1172{
1173 UINT32 GatewayUsageMethod = 0;
1174
1175 if (!GatewayEnabled && !GatewayBypassLocal)
1176 GatewayUsageMethod = TSC_PROXY_MODE_NONE_DIRECT;
1177 else if (GatewayEnabled && !GatewayBypassLocal)
1178 GatewayUsageMethod = TSC_PROXY_MODE_DIRECT;
1179 else if (GatewayEnabled && GatewayBypassLocal)
1180 GatewayUsageMethod = TSC_PROXY_MODE_DETECT;
1181
1182 if (!freerdp_set_gateway_usage_method(settings, GatewayUsageMethod))
1183 WLog_WARN(TAG,
1184 "freerdp_set_gateway_usage_method(settings, GatewayUsageMethod=%" PRIu32
1185 ") failed)",
1186 GatewayUsageMethod);
1187}
BOOL freerdp_set_gateway_usage_method(rdpSettings *settings, UINT32 GatewayUsageMethod)

◆ WINPR_C23_ENUM_TYPE()

enum FreeRDP_ErrorNotificationData WINPR_C23_ENUM_TYPE ( uint32_t  )

Definition at line 300 of file settings_types.h.

304 {
305 LOGON_MSG_SESSION_BUSY_OPTIONS = 0xFFFFFFF8,
306 LOGON_MSG_DISCONNECT_REFUSED = 0xFFFFFFF9,
307 LOGON_MSG_NO_PERMISSION = 0xFFFFFFFA,
308 LOGON_MSG_BUMP_OPTIONS = 0xFFFFFFFB,
309 LOGON_MSG_RECONNECT_OPTIONS = 0xFFFFFFFC,
310 LOGON_MSG_SESSION_TERMINATE = 0xFFFFFFFD,