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

This is the FreeRDP settings module. More...

Data Structures

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

Macros

#define FREERDP_SETTINGS_SERVER_MODE   0x00000001
 
#define FREERDP_SETTINGS_REMOTE_MODE   0x00000002
 
#define SURFCMDS_SET_SURFACE_BITS   0x00000002 /** @since version 3.7.0 */
 
#define SURFCMDS_FRAME_MARKER   0x00000010 /** @since version 3.7.0 */
 
#define SURFCMDS_STREAM_SURFACE_BITS   0x00000040 /** @since version 3.7.0 */
 
#define RAIL_LEVEL_SUPPORTED   0x00000001
 
#define RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED   0x00000002
 
#define RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED   0x00000004
 
#define RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED   0x00000008
 
#define RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED   0x00000010
 
#define RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED   0x00000020
 
#define RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED   0x00000040
 
#define RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED   0x00000080
 
#define PERF_FLAG_NONE   0x00000000
 
#define PERF_DISABLE_WALLPAPER   0x00000001
 
#define PERF_DISABLE_FULLWINDOWDRAG   0x00000002
 
#define PERF_DISABLE_MENUANIMATIONS   0x00000004
 
#define PERF_DISABLE_THEMING   0x00000008
 
#define PERF_DISABLE_CURSOR_SHADOW   0x00000020
 
#define PERF_DISABLE_CURSORSETTINGS   0x00000040
 
#define PERF_ENABLE_FONT_SMOOTHING   0x00000080
 
#define PERF_ENABLE_DESKTOP_COMPOSITION   0x00000100
 
#define CONNECTION_TYPE_INVALID
 
#define CONNECTION_TYPE_MODEM   0x01
 
#define CONNECTION_TYPE_BROADBAND_LOW   0x02
 
#define CONNECTION_TYPE_SATELLITE   0x03
 
#define CONNECTION_TYPE_BROADBAND_HIGH   0x04
 
#define CONNECTION_TYPE_WAN   0x05
 
#define CONNECTION_TYPE_LAN   0x06
 
#define CONNECTION_TYPE_AUTODETECT   0x07
 
#define CS_CORE   0xC001
 
#define CS_SECURITY   0xC002
 
#define CS_NET   0xC003
 
#define CS_CLUSTER   0xC004
 
#define CS_MONITOR   0xC005
 
#define CS_MCS_MSGCHANNEL   0xC006
 
#define CS_MONITOR_EX   0xC008
 
#define CS_UNUSED1   0xC00C
 
#define CS_MULTITRANSPORT   0xC00A
 
#define SC_CORE   0x0C01
 
#define SC_SECURITY   0x0C02
 
#define SC_NET   0x0C03
 
#define SC_MCS_MSGCHANNEL   0x0C04
 
#define SC_MULTITRANSPORT   0x0C08
 
#define RNS_UD_COLOR_4BPP   0xCA00
 
#define RNS_UD_COLOR_8BPP   0xCA01
 
#define RNS_UD_COLOR_16BPP_555   0xCA02
 
#define RNS_UD_COLOR_16BPP_565   0xCA03
 
#define RNS_UD_COLOR_24BPP   0xCA04
 
#define RNS_UD_SAS_DEL   0xAA03
 
#define RNS_UD_24BPP_SUPPORT   0x0001
 
#define RNS_UD_16BPP_SUPPORT   0x0002
 
#define RNS_UD_15BPP_SUPPORT   0x0004
 
#define RNS_UD_32BPP_SUPPORT   0x0008
 
#define AUDIO_MODE_REDIRECT   0 /* Bring to this computer */
 
#define AUDIO_MODE_PLAY_ON_SERVER   1 /* Leave at remote computer */
 
#define AUDIO_MODE_NONE   2 /* Do not play */
 
#define RNS_UD_CS_SUPPORT_ERRINFO_PDU   0x0001
 
#define RNS_UD_CS_WANT_32BPP_SESSION   0x0002
 
#define RNS_UD_CS_SUPPORT_STATUSINFO_PDU   0x0004
 
#define RNS_UD_CS_STRONG_ASYMMETRIC_KEYS   0x0008
 
#define RNS_UD_CS_RELATIVE_MOUSE_INPUT   0x0010
 
#define RNS_UD_CS_VALID_CONNECTION_TYPE   0x0020
 
#define RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU   0x0040
 
#define RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT   0x0080
 
#define RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL   0x0100
 
#define RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE   0x0200
 
#define RNS_UD_CS_SUPPORT_HEARTBEAT_PDU   0x0400
 
#define RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN   0x0800
 
#define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V1   0x00000001
 
#define RNS_UD_SC_DYNAMIC_DST_SUPPORTED   0x00000002
 
#define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V2   0x00000004
 
#define RNS_UD_SC_SKIP_CHANNELJOIN_SUPPORTED   0x00000008
 
#define REDIRECTION_SUPPORTED   0x00000001
 
#define REDIRECTED_SESSIONID_FIELD_VALID   0x00000002
 
#define REDIRECTED_SMARTCARD   0x00000040
 
#define ServerSessionRedirectionVersionMask   0x0000003c
 
#define REDIRECTION_VERSION1   0x00
 
#define REDIRECTION_VERSION2   0x01
 
#define REDIRECTION_VERSION3   0x02
 
#define REDIRECTION_VERSION4   0x03
 
#define REDIRECTION_VERSION5   0x04
 
#define REDIRECTION_VERSION6   0x05
 
#define MONITOR_PRIMARY   0x00000001
 
#define ENCRYPTION_METHOD_NONE   0x00000000
 
#define ENCRYPTION_METHOD_40BIT   0x00000001
 
#define ENCRYPTION_METHOD_128BIT   0x00000002
 
#define ENCRYPTION_METHOD_56BIT   0x00000008
 
#define ENCRYPTION_METHOD_FIPS   0x00000010
 
#define ENCRYPTION_LEVEL_NONE   0x00000000
 
#define ENCRYPTION_LEVEL_LOW   0x00000001
 
#define ENCRYPTION_LEVEL_CLIENT_COMPATIBLE   0x00000002
 
#define ENCRYPTION_LEVEL_HIGH   0x00000003
 
#define ENCRYPTION_LEVEL_FIPS   0x00000004
 
#define TRANSPORT_TYPE_UDP_FECR   0x00000001
 
#define TRANSPORT_TYPE_UDP_FECL   0x00000004
 
#define TRANSPORT_TYPE_UDP_PREFERRED   0x00000100
 
#define SOFTSYNC_TCP_TO_UDP   0x00000200
 
#define CHANNEL_OPTION_INITIALIZED   0x80000000
 
#define CHANNEL_OPTION_ENCRYPT_RDP   0x40000000
 
#define CHANNEL_OPTION_ENCRYPT_SC   0x20000000
 
#define CHANNEL_OPTION_ENCRYPT_CS   0x10000000
 
#define CHANNEL_OPTION_PRI_HIGH   0x08000000
 
#define CHANNEL_OPTION_PRI_MED   0x04000000
 
#define CHANNEL_OPTION_PRI_LOW   0x02000000
 
#define CHANNEL_OPTION_COMPRESS_RDP   0x00800000
 
#define CHANNEL_OPTION_COMPRESS   0x00400000
 
#define CHANNEL_OPTION_SHOW_PROTOCOL   0x00200000
 
#define CHANNEL_REMOTE_CONTROL_PERSISTENT   0x00100000
 
#define VCCAPS_NO_COMPR   0x00000000
 
#define VCCAPS_COMPR_SC   0x00000001
 
#define VCCAPS_COMPR_CS_8K   0x00000002
 
#define LARGE_POINTER_FLAG_96x96   0x00000001
 
#define LARGE_POINTER_FLAG_384x384   0x00000002
 
#define AUTO_RECONNECT_VERSION_1   0x00000001
 
#define MSTSC_COOKIE_MAX_LENGTH   9
 
#define DEFAULT_COOKIE_MAX_LENGTH   0xFF
 
#define TS_CAPS_PROTOCOLVERSION   0x200 /** @since version 3.6.0 */
 
#define GLYPH_SUPPORT_NONE   0x0000
 
#define GLYPH_SUPPORT_PARTIAL   0x0001
 
#define GLYPH_SUPPORT_FULL   0x0002
 
#define GLYPH_SUPPORT_ENCODE   0x0003
 
#define TSC_PROXY_MODE_NONE_DIRECT   0x0
 
#define TSC_PROXY_MODE_DIRECT   0x1
 
#define TSC_PROXY_MODE_DETECT   0x2
 
#define TSC_PROXY_MODE_DEFAULT   0x3
 
#define TSC_PROXY_MODE_NONE_DETECT   0x4
 
#define TSC_PROXY_CREDS_MODE_USERPASS   0x0
 
#define TSC_PROXY_CREDS_MODE_SMARTCARD   0x1
 
#define TSC_PROXY_CREDS_MODE_ANY   0x2
 
#define KEYBOARD_HOOK_LOCAL   0
 
#define KEYBOARD_HOOK_REMOTE   1
 
#define KEYBOARD_HOOK_FULLSCREEN_ONLY   2
 
#define LOGON_MSG_DISCONNECT_REFUSED   0xFFFFFFF9
 
#define LOGON_MSG_NO_PERMISSION   0xFFFFFFFA
 
#define LOGON_MSG_BUMP_OPTIONS   0xFFFFFFFB
 
#define LOGON_MSG_RECONNECT_OPTIONS   0xFFFFFFFC
 
#define LOGON_MSG_SESSION_TERMINATE   0xFFFFFFFD
 
#define LOGON_MSG_SESSION_CONTINUE   0xFFFFFFFE
 
#define LOGON_FAILED_BAD_PASSWORD   0x00000000
 
#define LOGON_FAILED_UPDATE_PASSWORD   0x00000001
 
#define LOGON_FAILED_OTHER   0x00000002
 
#define LOGON_WARNING   0x00000003
 
#define STATUS_FINDING_DESTINATION   0x00000401
 
#define STATUS_LOADING_DESTINATION   0x00000402
 
#define STATUS_BRINGING_SESSION_ONLINE   0x00000403
 
#define STATUS_REDIRECTING_TO_DESTINATION   0x00000404
 
#define STATUS_VM_LOADING   0x00000501
 
#define STATUS_VM_WAKING   0x00000502
 
#define STATUS_VM_BOOTING   0x00000503
 
#define PACKET_COMPR_TYPE_8K   0x00
 
#define PACKET_COMPR_TYPE_64K   0x01
 
#define PACKET_COMPR_TYPE_RDP6   0x02
 
#define PACKET_COMPR_TYPE_RDP61   0x03
 
#define PACKET_COMPR_TYPE_RDP8   0x04
 
#define CLIPRDR_FLAG_LOCAL_TO_REMOTE   0x01
 
#define CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES   0x02
 
#define CLIPRDR_FLAG_REMOTE_TO_LOCAL   0x10
 
#define CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES   0x20
 
#define CLIPRDR_FLAG_DEFAULT_MASK
 
#define FREERDP_MONITOR_OVERRIDE_ORIENTATION   (1 << 0) /** @since version 3.15.0 */
 
#define FREERDP_MONITOR_OVERRIDE_DESKTOP_SCALE   (1 << 1) /** @since version 3.15.0 */
 
#define FREERDP_MONITOR_OVERRIDE_DEVICE_SCALE   (1 << 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_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.
 
WINPR_ATTR_NODISCARD FREERDP_API rdpSettings * freerdp_settings_new (DWORD flags)
 creates a new setting struct
 
WINPR_ATTR_NODISCARD 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.
 
FREERDP_API BOOL freerdp_settings_print_diff (wLog *log, DWORD level, const rdpSettings *src, const rdpSettings *other)
 Dumps the difference between two settings structs to a WLog.
 
FREERDP_API void freerdp_addin_argv_free (ADDIN_ARGV *args)
 
WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGVfreerdp_addin_argv_new (size_t argc, const char *const argv[])
 
WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGVfreerdp_addin_argv_clone (const ADDIN_ARGV *args)
 
FREERDP_API BOOL freerdp_addin_argv_add_argument (ADDIN_ARGV *args, const char *argument)
 
FREERDP_API BOOL freerdp_addin_argv_add_argument_ex (ADDIN_ARGV *args, const char *argument, size_t len)
 
FREERDP_API BOOL freerdp_addin_argv_del_argument (ADDIN_ARGV *args, const char *argument)
 
FREERDP_API int freerdp_addin_set_argument (ADDIN_ARGV *args, const char *argument)
 
FREERDP_API int freerdp_addin_replace_argument (ADDIN_ARGV *args, const char *previous, const char *argument)
 
FREERDP_API int freerdp_addin_set_argument_value (ADDIN_ARGV *args, const char *option, const char *value)
 
FREERDP_API int freerdp_addin_replace_argument_value (ADDIN_ARGV *args, const char *previous, const char *option, const char *value)
 
FREERDP_API BOOL freerdp_device_collection_add (rdpSettings *settings, RDPDR_DEVICE *device)
 
FREERDP_API BOOL freerdp_device_collection_del (rdpSettings *settings, const RDPDR_DEVICE *device)
 Removed a device from the settings, returns ownership of the allocated device to caller.
 
WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICEfreerdp_device_collection_find (rdpSettings *settings, const char *name)
 
WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICEfreerdp_device_collection_find_type (rdpSettings *settings, UINT32 type)
 
FREERDP_API void freerdp_device_free (RDPDR_DEVICE *device)
 
WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICEfreerdp_device_new (UINT32 Type, size_t count, const char *const args[])
 
WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICEfreerdp_device_clone (const RDPDR_DEVICE *device)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_device_equal (const RDPDR_DEVICE *one, const RDPDR_DEVICE *other)
 
FREERDP_API void freerdp_device_collection_free (rdpSettings *settings)
 
FREERDP_API BOOL freerdp_static_channel_collection_add (rdpSettings *settings, ADDIN_ARGV *channel)
 
FREERDP_API BOOL freerdp_static_channel_collection_del (rdpSettings *settings, const char *name)
 
WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGVfreerdp_static_channel_collection_find (rdpSettings *settings, const char *name)
 
FREERDP_API void freerdp_static_channel_collection_free (rdpSettings *settings)
 
FREERDP_API BOOL freerdp_dynamic_channel_collection_add (rdpSettings *settings, ADDIN_ARGV *channel)
 
FREERDP_API BOOL freerdp_dynamic_channel_collection_del (rdpSettings *settings, const char *name)
 
WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGVfreerdp_dynamic_channel_collection_find (const rdpSettings *settings, const char *name)
 
FREERDP_API void freerdp_dynamic_channel_collection_free (rdpSettings *settings)
 
FREERDP_API void freerdp_capability_buffer_free (rdpSettings *settings)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_capability_buffer_copy (rdpSettings *settings, const rdpSettings *src)
 
FREERDP_API void freerdp_server_license_issuers_free (rdpSettings *settings)
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_server_license_issuers_copy (rdpSettings *settings, char **addresses, 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)
 
FREERDP_API BOOL freerdp_set_gateway_usage_method (rdpSettings *settings, UINT32 GatewayUsageMethod)
 
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.
 
FREERDP_API BOOL freerdp_settings_set_bool (rdpSettings *settings, FreeRDP_Settings_Keys_Bool id, BOOL param)
 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.
 
FREERDP_API BOOL freerdp_settings_set_int16 (rdpSettings *settings, FreeRDP_Settings_Keys_Int16 id, INT16 param)
 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.
 
FREERDP_API BOOL freerdp_settings_set_uint16 (rdpSettings *settings, FreeRDP_Settings_Keys_UInt16 id, UINT16 param)
 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.
 
FREERDP_API BOOL freerdp_settings_set_int32 (rdpSettings *settings, FreeRDP_Settings_Keys_Int32 id, INT32 param)
 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.
 
FREERDP_API BOOL freerdp_settings_set_uint32 (rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id, UINT32 param)
 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.
 
FREERDP_API BOOL freerdp_settings_set_int64 (rdpSettings *settings, FreeRDP_Settings_Keys_Int64 id, INT64 param)
 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.
 
FREERDP_API BOOL freerdp_settings_set_uint64 (rdpSettings *settings, FreeRDP_Settings_Keys_UInt64 id, UINT64 param)
 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.
 
FREERDP_API BOOL freerdp_settings_set_string_len (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *param, size_t len)
 Sets a string settings value. The param is copied.
 
FREERDP_API BOOL freerdp_settings_set_string (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *param)
 Sets a string settings value. The param is copied.
 
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,
 
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.
 
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.
 
WINPR_ATTR_NODISCARD 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.
 
FREERDP_API BOOL freerdp_settings_set_pointer (rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *data)
 Set a pointer to value data.
 
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)
 
FREERDP_API BOOL freerdp_settings_set_pointer_array (rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, size_t offset, const void *data)
 

to value \b value

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

The value will be checked internally:

  • Integer types must be within boundaries
  • BOOL must be any of {'true', 'false', 'on', 'off', '0', '1'} (case insensitive)
  • Strings are passed on as is
  • Pointers are also passed as is
Parameters
settingsThe settings instance to set the value, must not be NULL
nameThe name of the settings key (like 'FreeRDP_Domain', same as output of freerdp_settings_get_name_for_key ) Must not be NULL
valueThe value of the setting. Must not be NULL
Note
If the function fails check wLog output for details
Since
version 3.0.0
Returns
TRUE in case of success, FALSE otherwise.
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 EncryptionLevel, 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 *json, 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 353 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 362 of file settings_types.h.

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

◆ ADDIN_ARGV

struct ADDIN_ARGV

Definition at line 372 of file settings_types.h.

Data Fields
int argc
char ** argv

◆ rdp_ext_set

struct rdp_ext_set

Definition at line 380 of file settings_types.h.

Data Fields
void * data
char name[256]

◆ BITMAP_CACHE_CELL_INFO

struct BITMAP_CACHE_CELL_INFO

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

Data Fields
UINT32 numEntries
BOOL persistent

◆ GLYPH_CACHE_DEFINITION

struct GLYPH_CACHE_DEFINITION

Definition at line 402 of file settings_types.h.

Data Fields
UINT16 cacheEntries
UINT16 cacheMaximumCellSize

◆ MONITOR_DEF

struct MONITOR_DEF

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

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

◆ rdpMonitor

struct rdpMonitor

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

Data Fields
UINT32 Id
char * Name
UINT32 Type

◆ RDPDR_DRIVE

struct RDPDR_DRIVE

Definition at line 456 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 463 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 470 of file settings_types.h.

Collaboration diagram for RDPDR_SMARTCARD:
Data Fields
RDPDR_DEVICE device

◆ RDPDR_SERIAL

struct RDPDR_SERIAL

Definition at line 475 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 483 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 343 of file settings_types.h.

357 {
358 UINT32 cbLen;
359 UINT32 version;
360 UINT32 logonId;
361 BYTE securityVerifier[16];
363
364 /* ARC_SC_PRIVATE_PACKET */
365 typedef struct
366 {
367 UINT32 cbLen;
368 UINT32 version;
369 UINT32 logonId;
370 BYTE arcRandomBits[16];
372
373 /* Channels */
374
375 typedef struct
376 {
377 int argc;
378 char** argv;
379 } ADDIN_ARGV;
380
381 /* Extensions */
382
383 struct rdp_ext_set
384 {
385 char name[256]; /* plugin name or path */
386 void* data; /* plugin data */
387 };
388
389 /* Bitmap Cache */
390
391 typedef struct
392 {
393 UINT16 numEntries;
394 UINT16 maxSize;
396
397 typedef struct
398 {
399 UINT32 numEntries;
400 BOOL persistent;
402
403 /* Glyph Cache */
404
405 typedef struct
406 {
407 UINT16 cacheEntries;
408 UINT16 cacheMaximumCellSize;
410
411 /* Monitors */
412
413 typedef struct
414 {
415 INT32 left;
416 INT32 top;
417 INT32 right;
418 INT32 bottom;
419 UINT32 flags;
420 } MONITOR_DEF;
421
422 typedef struct
423 {
424 UINT32 physicalWidth;
425 UINT32 physicalHeight;
426 UINT32 orientation;
427 UINT32 desktopScaleFactor;
428 UINT32 deviceScaleFactor;
430
431 typedef struct
432 {
433 INT32 x;
434 INT32 y;
435 INT32 width;
436 INT32 height;
437 UINT32 is_primary;
438 UINT32 orig_screen;
439 MONITOR_ATTRIBUTES attributes;
440 } rdpMonitor;
441
442 /* Device Redirection */
443 typedef enum
444 {
445 RDPDR_DTYP_SERIAL = 0x00000001,
446 RDPDR_DTYP_PARALLEL = 0x00000002,
447 RDPDR_DTYP_PRINT = 0x00000004,
448 RDPDR_DTYP_FILESYSTEM = 0x00000008,
449 RDPDR_DTYP_SMARTCARD = 0x00000020
450 } FreeRDP_RDPDR_DTYP;
451
452 typedef struct
453 {
454 UINT32 Id;
455 UINT32 Type;
456 char* Name;
457 } RDPDR_DEVICE;
458
459 typedef struct
460 {
461 RDPDR_DEVICE device;
462 char* Path;
463 BOOL automount;
464 } RDPDR_DRIVE;
465
466 typedef struct
467 {
468 RDPDR_DEVICE device;
469 char* DriverName;
470 BOOL IsDefault;
472
473 typedef struct
474 {
475 RDPDR_DEVICE device;
477
478 typedef struct
479 {
480 RDPDR_DEVICE device;
481 char* Path;
482 char* Driver;
483 char* Permissive;
484 } RDPDR_SERIAL;
485
486 typedef struct
487 {
488 RDPDR_DEVICE device;
489 char* Path;
491
492#define PROXY_TYPE_NONE 0
493#define PROXY_TYPE_HTTP 1
494#define PROXY_TYPE_SOCKS 2
495#define PROXY_TYPE_IGNORE 0xFFFF
496
497/* ThreadingFlags */
498#define THREADING_FLAGS_DISABLE_THREADS 0x00000001
499
500 enum rdp_settings_type
501 {
502 RDP_SETTINGS_TYPE_BOOL,
503 RDP_SETTINGS_TYPE_UINT16,
504 RDP_SETTINGS_TYPE_INT16,
505 RDP_SETTINGS_TYPE_UINT32,
506 RDP_SETTINGS_TYPE_INT32,
507 RDP_SETTINGS_TYPE_UINT64,
508 RDP_SETTINGS_TYPE_INT64,
509 RDP_SETTINGS_TYPE_STRING,
510 RDP_SETTINGS_TYPE_POINTER
511 };
512
516#define FREERDP_SETTINGS_SERVER_MODE 0x00000001
517
518#ifdef __cplusplus
519}
520#endif
521
524#endif /* FREERDP_SETTINGS_TYPES_H */

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE   0x01

Definition at line 338 of file settings_types.h.

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES   0x02

Definition at line 339 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL   0x10

Definition at line 340 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES   0x20

Definition at line 341 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   (1 << 1) /** @since version 3.15.0 */

Definition at line 349 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_DEVICE_SCALE

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

Definition at line 350 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_ORIENTATION

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

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

◆ GLYPH_SUPPORT_ENCODE

#define GLYPH_SUPPORT_ENCODE   0x0003

Definition at line 274 of file settings_types.h.

◆ GLYPH_SUPPORT_FULL

#define GLYPH_SUPPORT_FULL   0x0002

Definition at line 273 of file settings_types.h.

◆ GLYPH_SUPPORT_NONE

#define GLYPH_SUPPORT_NONE   0x0000

Definition at line 271 of file settings_types.h.

◆ GLYPH_SUPPORT_PARTIAL

#define GLYPH_SUPPORT_PARTIAL   0x0001

Definition at line 272 of file settings_types.h.

◆ KEYBOARD_HOOK_FULLSCREEN_ONLY

#define KEYBOARD_HOOK_FULLSCREEN_ONLY   2

Definition at line 291 of file settings_types.h.

◆ KEYBOARD_HOOK_LOCAL

#define KEYBOARD_HOOK_LOCAL   0

Definition at line 289 of file settings_types.h.

◆ KEYBOARD_HOOK_REMOTE

#define KEYBOARD_HOOK_REMOTE   1

Definition at line 290 of file settings_types.h.

◆ LARGE_POINTER_FLAG_384x384

#define LARGE_POINTER_FLAG_384x384   0x00000002

Definition at line 221 of file settings_types.h.

◆ LARGE_POINTER_FLAG_96x96

#define LARGE_POINTER_FLAG_96x96   0x00000001

Definition at line 220 of file settings_types.h.

◆ LOGON_FAILED_BAD_PASSWORD

#define LOGON_FAILED_BAD_PASSWORD   0x00000000

Definition at line 307 of file settings_types.h.

◆ LOGON_FAILED_OTHER

#define LOGON_FAILED_OTHER   0x00000002

Definition at line 309 of file settings_types.h.

◆ LOGON_FAILED_UPDATE_PASSWORD

#define LOGON_FAILED_UPDATE_PASSWORD   0x00000001

Definition at line 308 of file settings_types.h.

◆ LOGON_MSG_BUMP_OPTIONS

#define LOGON_MSG_BUMP_OPTIONS   0xFFFFFFFB

Definition at line 302 of file settings_types.h.

◆ LOGON_MSG_DISCONNECT_REFUSED

#define LOGON_MSG_DISCONNECT_REFUSED   0xFFFFFFF9

Definition at line 300 of file settings_types.h.

◆ LOGON_MSG_NO_PERMISSION

#define LOGON_MSG_NO_PERMISSION   0xFFFFFFFA

Definition at line 301 of file settings_types.h.

◆ LOGON_MSG_RECONNECT_OPTIONS

#define LOGON_MSG_RECONNECT_OPTIONS   0xFFFFFFFC

Definition at line 303 of file settings_types.h.

◆ LOGON_MSG_SESSION_CONTINUE

#define LOGON_MSG_SESSION_CONTINUE   0xFFFFFFFE

Definition at line 305 of file settings_types.h.

◆ LOGON_MSG_SESSION_TERMINATE

#define LOGON_MSG_SESSION_TERMINATE   0xFFFFFFFD

Definition at line 304 of file settings_types.h.

◆ LOGON_WARNING

#define LOGON_WARNING   0x00000003

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

◆ PACKET_COMPR_TYPE_8K

#define PACKET_COMPR_TYPE_8K   0x00

Definition at line 322 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP6

#define PACKET_COMPR_TYPE_RDP6   0x02

Definition at line 324 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP61

#define PACKET_COMPR_TYPE_RDP61   0x03

Definition at line 325 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP8

#define PACKET_COMPR_TYPE_RDP8   0x04

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

◆ PROXY_TYPE_IGNORE

#define PROXY_TYPE_IGNORE   0xFFFF

Definition at line 492 of file settings_types.h.

◆ PROXY_TYPE_NONE

#define PROXY_TYPE_NONE   0

Definition at line 489 of file settings_types.h.

◆ PROXY_TYPE_SOCKS

#define PROXY_TYPE_SOCKS   2

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

◆ STATUS_FINDING_DESTINATION

#define STATUS_FINDING_DESTINATION   0x00000401

Definition at line 313 of file settings_types.h.

◆ STATUS_LOADING_DESTINATION

#define STATUS_LOADING_DESTINATION   0x00000402

Definition at line 314 of file settings_types.h.

◆ STATUS_REDIRECTING_TO_DESTINATION

#define STATUS_REDIRECTING_TO_DESTINATION   0x00000404

Definition at line 316 of file settings_types.h.

◆ STATUS_VM_BOOTING

#define STATUS_VM_BOOTING   0x00000503

Definition at line 319 of file settings_types.h.

◆ STATUS_VM_LOADING

#define STATUS_VM_LOADING   0x00000501

Definition at line 317 of file settings_types.h.

◆ STATUS_VM_WAKING

#define STATUS_VM_WAKING   0x00000502

Definition at line 318 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 495 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 329 of file settings_types.h.

333{
334 ORIENTATION_LANDSCAPE = 0,
335 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 440 of file settings_types.h.

444 {
445 RDPDR_DTYP_SERIAL = 0x00000001,
446 RDPDR_DTYP_PARALLEL = 0x00000002,
447 RDPDR_DTYP_PRINT = 0x00000004,

◆ rdp_settings_type

enum rdp_settings_type

Definition at line 497 of file settings_types.h.

501 {
502 RDP_SETTINGS_TYPE_BOOL,
503 RDP_SETTINGS_TYPE_UINT16,
504 RDP_SETTINGS_TYPE_INT16,
505 RDP_SETTINGS_TYPE_UINT32,
506 RDP_SETTINGS_TYPE_INT32,
507 RDP_SETTINGS_TYPE_UINT64,
508 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()

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

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

70{
71 return freerdp_addin_argv_add_argument_ex(args, argument, 0);
72}

◆ freerdp_addin_argv_add_argument_ex()

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

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

46{
47 if (!args || !argument)
48 return FALSE;
49
50 if (len == 0)
51 len = strlen(argument);
52
53 char** new_argv = (char**)realloc(
54 (void*)args->argv, sizeof(char*) * (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc) + 1));
55
56 if (!new_argv)
57 return FALSE;
58
59 args->argv = new_argv;
60
61 char* str = calloc(len + 1, sizeof(char));
62 if (!str)
63 return FALSE;
64 memcpy(str, argument, len);
65 args->argv[args->argc++] = str;
66 return TRUE;
67}

◆ freerdp_addin_argv_clone()

WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV * freerdp_addin_argv_clone ( const ADDIN_ARGV args)

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

800{
801 union
802 {
803 char** c;
804 const char** cc;
805 } cnv;
806 if (!args)
807 return NULL;
808 cnv.c = args->argv;
809 return freerdp_addin_argv_new(WINPR_ASSERTING_INT_CAST(uint32_t, args->argc), cnv.cc);
810}

◆ freerdp_addin_argv_del_argument()

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

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

75{
76 if (!args || !argument)
77 return FALSE;
78 for (int x = 0; x < args->argc; x++)
79 {
80 char* arg = args->argv[x];
81 if (strcmp(argument, arg) == 0)
82 {
83 free(arg);
84 memmove_s((void*)&args->argv[x],
85 (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x)) * sizeof(char*),
86 (void*)&args->argv[x + 1],
87 (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x - 1)) * sizeof(char*));
88 args->argv[args->argc - 1] = NULL;
89 args->argc--;
90 return TRUE;
91 }
92 }
93 return FALSE;
94}

◆ freerdp_addin_argv_free()

FREERDP_API void freerdp_addin_argv_free ( ADDIN_ARGV args)

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

750{
751 if (!args)
752 return;
753
754 if (args->argv)
755 {
756 for (int index = 0; index < args->argc; index++)
757 free(args->argv[index]);
758 free((void*)args->argv);
759 }
760
761 free(args);
762}

◆ freerdp_addin_argv_new()

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

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

765{
766 if (argc > INT32_MAX)
767 return NULL;
768
769 ADDIN_ARGV* args = calloc(1, sizeof(ADDIN_ARGV));
770 if (!args)
771 return NULL;
772 if (argc == 0)
773 return args;
774
775 args->argc = (int)argc;
776 args->argv = (char**)calloc(argc, sizeof(char*));
777 if (!args->argv)
778 goto fail;
779
780 if (argv)
781 {
782 for (size_t x = 0; x < argc; x++)
783 {
784 args->argv[x] = _strdup(argv[x]);
785 if (!args->argv[x])
786 goto fail;
787 }
788 }
789 return args;
790
791fail:
792 WINPR_PRAGMA_DIAG_PUSH
793 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
794 freerdp_addin_argv_free(args);
795 WINPR_PRAGMA_DIAG_POP
796 return NULL;
797}

◆ freerdp_addin_replace_argument()

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

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

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

◆ freerdp_addin_replace_argument_value()

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

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

178{
179 BOOL rc = 0;
180 char* str = NULL;
181 size_t length = 0;
182 if (!args || !previous || !option || !value)
183 return -2;
184 length = strlen(option) + strlen(value) + 1;
185 str = (char*)calloc(length + 1, sizeof(char));
186
187 if (!str)
188 return -1;
189
190 (void)sprintf_s(str, length + 1, "%s:%s", option, value);
191
192 for (int i = 0; i < args->argc; i++)
193 {
194 if (strcmp(args->argv[i], previous) == 0)
195 {
196 free(args->argv[i]);
197 args->argv[i] = str;
198 return 1;
199 }
200 }
201
202 rc = freerdp_addin_argv_add_argument(args, str);
203 free(str);
204 if (!rc)
205 return -1;
206 return 0;
207}

◆ freerdp_addin_set_argument()

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

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

97{
98 if (!args || !argument)
99 return -2;
100
101 for (int i = 0; i < args->argc; i++)
102 {
103 if (strcmp(args->argv[i], argument) == 0)
104 {
105 return 1;
106 }
107 }
108
109 if (!freerdp_addin_argv_add_argument(args, argument))
110 return -1;
111 return 0;
112}

◆ freerdp_addin_set_argument_value()

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

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

138{
139 BOOL rc = 0;
140 char* p = NULL;
141 char* str = NULL;
142 size_t length = 0;
143 if (!args || !option || !value)
144 return -2;
145 length = strlen(option) + strlen(value) + 1;
146 str = (char*)calloc(length + 1, sizeof(char));
147
148 if (!str)
149 return -1;
150
151 (void)sprintf_s(str, length + 1, "%s:%s", option, value);
152
153 for (int i = 0; i < args->argc; i++)
154 {
155 p = strchr(args->argv[i], ':');
156
157 if (p)
158 {
159 if (strncmp(args->argv[i], option,
160 WINPR_ASSERTING_INT_CAST(size_t, p - args->argv[i])) == 0)
161 {
162 free(args->argv[i]);
163 args->argv[i] = str;
164 return 1;
165 }
166 }
167 }
168
169 rc = freerdp_addin_argv_add_argument(args, str);
170 free(str);
171 if (!rc)
172 return -1;
173 return 0;
174}

◆ freerdp_capability_buffer_copy()

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

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

944{
945 WINPR_ASSERT(settings);
946 WINPR_ASSERT(src);
947
948 if (src->ReceivedCapabilitiesSize == 0)
949 return TRUE;
950
951 if (!freerdp_capability_buffer_resize(settings, src->ReceivedCapabilitiesSize, TRUE))
952 return FALSE;
953
954 for (UINT32 x = 0; x < src->ReceivedCapabilitiesSize; x++)
955 {
956 WINPR_ASSERT(settings->ReceivedCapabilities);
957 settings->ReceivedCapabilities[x] = src->ReceivedCapabilities[x];
958
959 WINPR_ASSERT(settings->ReceivedCapabilityDataSizes);
960 settings->ReceivedCapabilityDataSizes[x] = src->ReceivedCapabilityDataSizes[x];
961
962 WINPR_ASSERT(settings->ReceivedCapabilityData);
963 if (src->ReceivedCapabilityDataSizes[x] > 0)
964 {
965 void* tmp = realloc(settings->ReceivedCapabilityData[x],
966 settings->ReceivedCapabilityDataSizes[x]);
967 if (!tmp)
968 return FALSE;
969 memcpy(tmp, src->ReceivedCapabilityData[x], src->ReceivedCapabilityDataSizes[x]);
970 settings->ReceivedCapabilityData[x] = tmp;
971 }
972 else
973 {
974 free(settings->ReceivedCapabilityData[x]);
975 settings->ReceivedCapabilityData[x] = NULL;
976 }
977 }
978 return TRUE;
979}

◆ freerdp_capability_buffer_free()

FREERDP_API void freerdp_capability_buffer_free ( rdpSettings *  settings)

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

849{
850 WINPR_ASSERT(settings);
851
852 freerdp_capability_data_free(settings, 0, TRUE);
853
854 free(settings->ReceivedCapabilityDataSizes);
855 settings->ReceivedCapabilityDataSizes = NULL;
856
857 free(settings->ReceivedCapabilities);
858 settings->ReceivedCapabilities = NULL;
859
860 settings->ReceivedCapabilitiesSize = 0;
861}

◆ freerdp_device_clone()

WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE * freerdp_device_clone ( const RDPDR_DEVICE device)

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

463{
464 union
465 {
466 const RDPDR_DEVICE* dev;
467 const RDPDR_DRIVE* drive;
468 const RDPDR_SERIAL* serial;
469 const RDPDR_PRINTER* printer;
470 const RDPDR_PARALLEL* parallel;
471 const RDPDR_SMARTCARD* smartcard;
472 } src;
473
474 union
475 {
476 RDPDR_DEVICE* dev;
477 RDPDR_DRIVE* drive;
478 RDPDR_SERIAL* serial;
479 RDPDR_PRINTER* printer;
480 RDPDR_PARALLEL* parallel;
481 RDPDR_SMARTCARD* smartcard;
482 } copy;
483 size_t count = 0;
484 const char* args[4] = { 0 };
485
486 copy.dev = NULL;
487 src.dev = device;
488
489 if (!device)
490 return NULL;
491
492 if (device->Name)
493 {
494 args[count++] = device->Name;
495 }
496
497 switch (device->Type)
498 {
499 case RDPDR_DTYP_FILESYSTEM:
500 if (src.drive->Path)
501 {
502 args[count++] = src.drive->Path;
503 args[count++] = src.drive->automount ? NULL : src.drive->Path;
504 }
505 break;
506
507 case RDPDR_DTYP_PRINT:
508 if (src.printer->DriverName)
509 args[count++] = src.printer->DriverName;
510 break;
511
512 case RDPDR_DTYP_SMARTCARD:
513 break;
514
515 case RDPDR_DTYP_SERIAL:
516 if (src.serial->Path)
517 args[count++] = src.serial->Path;
518
519 if (src.serial->Driver)
520 args[count++] = src.serial->Driver;
521
522 if (src.serial->Permissive)
523 args[count++] = src.serial->Permissive;
524 break;
525
526 case RDPDR_DTYP_PARALLEL:
527 if (src.parallel->Path)
528 args[count++] = src.parallel->Path;
529 break;
530 default:
531 WLog_ERR(TAG, "unknown device type %" PRIu32 "", device->Type);
532 break;
533 }
534
535 copy.dev = freerdp_device_new(device->Type, count, args);
536 if (!copy.dev)
537 return NULL;
538
539 copy.dev->Id = device->Id;
540
541 return copy.dev;
542}

◆ freerdp_device_collection_add()

FREERDP_API BOOL freerdp_device_collection_add ( rdpSettings *  settings,
RDPDR_DEVICE device 
)

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

210{
211 UINT32 count = 0;
212 UINT32 old = 0;
213 WINPR_ASSERT(settings);
214 WINPR_ASSERT(device);
215
216 count = freerdp_settings_get_uint32(settings, FreeRDP_DeviceCount) + 1;
217 old = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
218 if (old < count)
219 {
220 const size_t new_size = (old + 32);
221 RDPDR_DEVICE** new_array =
222 (RDPDR_DEVICE**)realloc((void*)settings->DeviceArray, new_size * sizeof(RDPDR_DEVICE*));
223
224 if (!new_array)
225 return FALSE;
226
227 settings->DeviceArray = new_array;
228 for (size_t x = old; x < new_size; x++)
229 settings->DeviceArray[x] = NULL;
230
231 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize,
232 WINPR_ASSERTING_INT_CAST(uint32_t, new_size)))
233 return FALSE;
234 }
235
236 settings->DeviceArray[settings->DeviceCount++] = device;
237 return TRUE;
238}
WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_uint32(const rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id)
Returns a UINT32 settings value.
FREERDP_API BOOL freerdp_settings_set_uint32(rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id, UINT32 param)
Sets a UINT32 settings value.

◆ freerdp_device_collection_del()

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 NULL

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

241{
242 WINPR_ASSERT(settings);
243
244 if (!device)
245 return FALSE;
246
247 const UINT32 count = settings->DeviceCount;
248 for (size_t x = 0; x < count; x++)
249 {
250 const RDPDR_DEVICE* cur = settings->DeviceArray[x];
251 if (cur == device)
252 {
253 for (size_t y = x + 1; y < count; y++)
254 {
255 RDPDR_DEVICE* next = settings->DeviceArray[y];
256 settings->DeviceArray[y - 1] = next;
257 }
258 settings->DeviceArray[count - 1] = NULL;
259 settings->DeviceCount--;
260 return TRUE;
261 }
262 }
263
264 return FALSE;
265}

◆ freerdp_device_collection_find()

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

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

268{
269 RDPDR_DEVICE* device = NULL;
270
271 WINPR_ASSERT(settings);
272 WINPR_ASSERT(name);
273 for (UINT32 index = 0; index < settings->DeviceCount; index++)
274 {
275 device = settings->DeviceArray[index];
276
277 if (!device->Name)
278 continue;
279
280 if (strcmp(device->Name, name) == 0)
281 return device;
282 }
283
284 return NULL;
285}

◆ freerdp_device_collection_find_type()

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

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

288{
289 RDPDR_DEVICE* device = NULL;
290 WINPR_ASSERT(settings);
291
292 for (UINT32 index = 0; index < settings->DeviceCount; index++)
293 {
294 device = settings->DeviceArray[index];
295
296 if (device->Type == type)
297 return device;
298 }
299
300 return NULL;
301}

◆ freerdp_device_collection_free()

FREERDP_API void freerdp_device_collection_free ( rdpSettings *  settings)

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

545{
546 WINPR_ASSERT(settings);
547
548 if (settings->DeviceArray)
549 {
550 for (UINT32 index = 0; index < settings->DeviceArraySize; index++)
551 (void)freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, index, NULL);
552 }
553
554 free((void*)settings->DeviceArray);
555
556 (void)freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, NULL);
557 (void)freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0);
558 (void)freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0);
559}
FREERDP_API BOOL freerdp_settings_set_pointer(rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *data)
Set a pointer to value data.

◆ freerdp_device_equal()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_device_equal ( const RDPDR_DEVICE one,
const RDPDR_DEVICE other 
)

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

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

◆ freerdp_device_free()

FREERDP_API void freerdp_device_free ( RDPDR_DEVICE device)

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

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

◆ freerdp_device_new()

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

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

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

◆ freerdp_dynamic_channel_collection_add()

FREERDP_API BOOL freerdp_dynamic_channel_collection_add ( rdpSettings *  settings,
ADDIN_ARGV channel 
)

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

698{
699 UINT32 count = 0;
700 UINT32 oldSize = 0;
701
702 WINPR_ASSERT(settings);
703 WINPR_ASSERT(channel);
704
705 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount) + 1;
706 oldSize = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
707 if (oldSize < count)
708 {
709
710 const size_t size = oldSize + 32;
711 ADDIN_ARGV** new_array =
712 (ADDIN_ARGV**)realloc((void*)settings->DynamicChannelArray, sizeof(ADDIN_ARGV*) * size);
713
714 if (!new_array)
715 return FALSE;
716
717 settings->DynamicChannelArray = new_array;
718 {
719 for (size_t x = oldSize; x < size; x++)
720 settings->DynamicChannelArray[x] = NULL;
721 }
722 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize,
723 WINPR_ASSERTING_INT_CAST(uint32_t, size)))
724 return FALSE;
725 }
726
727 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
728 settings->DynamicChannelArray[count++] = channel;
729 return freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count);
730}

◆ freerdp_dynamic_channel_collection_del()

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

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

668{
669 const UINT32 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
670 if (!settings || !settings->DynamicChannelArray)
671 return FALSE;
672
673 for (UINT32 x = 0; x < count; x++)
674 {
675 ADDIN_ARGV* cur = settings->DynamicChannelArray[x];
676 if (cur && (cur->argc > 0))
677 {
678 if (strcmp(name, cur->argv[0]) == 0)
679 {
680 memmove_s((void*)&settings->DynamicChannelArray[x],
681 (count - x) * sizeof(ADDIN_ARGV*),
682 (void*)&settings->DynamicChannelArray[x + 1],
683 (count - x - 1) * sizeof(ADDIN_ARGV*));
684 for (size_t y = count - 1; y < settings->DynamicChannelArraySize; y++)
685 settings->DynamicChannelArray[y] = NULL;
686
687 freerdp_addin_argv_free(cur);
688 return freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount,
689 count - 1);
690 }
691 }
692 }
693
694 return FALSE;
695}

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

733{
734 WINPR_ASSERT(settings);
735 WINPR_ASSERT(name);
736
737 for (UINT32 index = 0;
738 index < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount); index++)
739 {
740 ADDIN_ARGV* channel = settings->DynamicChannelArray[index];
741
742 if (strcmp(channel->argv[0], name) == 0)
743 return channel;
744 }
745
746 return NULL;
747}

◆ freerdp_dynamic_channel_collection_free()

FREERDP_API void freerdp_dynamic_channel_collection_free ( rdpSettings *  settings)

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

813{
814 WINPR_ASSERT(settings);
815
816 if (settings->DynamicChannelArray)
817 {
818 for (UINT32 i = 0;
819 i < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize); i++)
820 freerdp_addin_argv_free(settings->DynamicChannelArray[i]);
821 }
822
823 free((void*)settings->DynamicChannelArray);
824 (void)freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0);
825 settings->DynamicChannelArray = NULL;
826 (void)freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0);
827}

◆ freerdp_encryption_level_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_encryption_level_string ( UINT32  EncryptionLevel)

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

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

◆ freerdp_encryption_methods_string()

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

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

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

◆ freerdp_performance_flags_make()

FREERDP_API void freerdp_performance_flags_make ( rdpSettings *  settings)

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

1065{
1066 UINT32 PerformanceFlags = PERF_FLAG_NONE;
1067
1068 if (freerdp_settings_get_bool(settings, FreeRDP_AllowFontSmoothing))
1069 PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
1070
1071 if (freerdp_settings_get_bool(settings, FreeRDP_AllowDesktopComposition))
1072 PerformanceFlags |= PERF_ENABLE_DESKTOP_COMPOSITION;
1073
1074 if (freerdp_settings_get_bool(settings, FreeRDP_DisableWallpaper))
1075 PerformanceFlags |= PERF_DISABLE_WALLPAPER;
1076
1077 if (freerdp_settings_get_bool(settings, FreeRDP_DisableFullWindowDrag))
1078 PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
1079
1080 if (freerdp_settings_get_bool(settings, FreeRDP_DisableMenuAnims))
1081 PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
1082
1083 if (freerdp_settings_get_bool(settings, FreeRDP_DisableThemes))
1084 PerformanceFlags |= PERF_DISABLE_THEMING;
1085 (void)freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags);
1086}
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_split()

FREERDP_API void freerdp_performance_flags_split ( rdpSettings *  settings)

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

1089{
1091 settings, FreeRDP_AllowFontSmoothing,
1092 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1093 PERF_ENABLE_FONT_SMOOTHING)
1094 ? TRUE
1095 : FALSE);
1097 settings, FreeRDP_AllowDesktopComposition,
1098 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1099 PERF_ENABLE_DESKTOP_COMPOSITION)
1100 ? TRUE
1101 : FALSE);
1103 settings, FreeRDP_DisableWallpaper,
1104 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_WALLPAPER)
1105 ? TRUE
1106 : FALSE);
1108 settings, FreeRDP_DisableFullWindowDrag,
1109 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1110 PERF_DISABLE_FULLWINDOWDRAG)
1111 ? TRUE
1112 : FALSE);
1114 settings, FreeRDP_DisableMenuAnims,
1115 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1116 PERF_DISABLE_MENUANIMATIONS)
1117 ? TRUE
1118 : FALSE);
1120 settings, FreeRDP_DisableThemes,
1121 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_THEMING)
1122 ? TRUE
1123 : FALSE);
1124}
FREERDP_API BOOL freerdp_settings_set_bool(rdpSettings *settings, FreeRDP_Settings_Keys_Bool id, BOOL param)
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, NULL otherwise

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

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

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

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

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

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

◆ freerdp_server_license_issuers_copy()

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

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

1045{
1046 WINPR_ASSERT(settings);
1047 WINPR_ASSERT(issuers || (count == 0));
1048
1049 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_ServerLicenseProductIssuers, NULL,
1050 count))
1051 return FALSE;
1052
1053 for (UINT32 x = 0; x < count; x++)
1054 {
1055 char* issuer = _strdup(issuers[x]);
1056 if (!issuer)
1057 return FALSE;
1058 settings->ServerLicenseProductIssuers[x] = issuer;
1059 }
1060
1061 return TRUE;
1062}
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 1030 of file common/settings.c.

1031{
1032 WINPR_ASSERT(settings);
1033
1034 if (settings->ServerLicenseProductIssuers)
1035 {
1036 for (UINT32 x = 0; x < settings->ServerLicenseProductIssuersCount; x++)
1037 free(settings->ServerLicenseProductIssuers[x]);
1038 }
1039 free((void*)settings->ServerLicenseProductIssuers);
1040 settings->ServerLicenseProductIssuers = NULL;
1041 settings->ServerLicenseProductIssuersCount = 0;
1042}

◆ freerdp_set_gateway_usage_method()

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

1127{
1128 if (!freerdp_settings_set_uint32(settings, FreeRDP_GatewayUsageMethod, GatewayUsageMethod))
1129 return FALSE;
1130
1131 if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DIRECT)
1132 {
1133 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1134 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1135 return FALSE;
1136 }
1137 else if (GatewayUsageMethod == TSC_PROXY_MODE_DIRECT)
1138 {
1139 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1140 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1141 return FALSE;
1142 }
1143 else if (GatewayUsageMethod == TSC_PROXY_MODE_DETECT)
1144 {
1145 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1146 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, TRUE))
1147 return FALSE;
1148 }
1149 else if (GatewayUsageMethod == TSC_PROXY_MODE_DEFAULT)
1150 {
1156 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1157 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1158 return FALSE;
1159 }
1160 else if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DETECT)
1161 {
1162 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1163 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1164 return FALSE;
1165 }
1166
1167 return TRUE;
1168}

References freerdp_settings_set_bool(), and freerdp_settings_set_uint32().

Here is the call graph for this function:

◆ freerdp_settings_append_string()

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 NULL.
idThe key to query
separatorThe separator string to use. May be NULL (no separator)
paramThe value to append
Returns
TRUE for success, FALSE for failure

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

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

2420{
2421 return settings != NULL;
2422}

◆ freerdp_settings_clone()

WINPR_ATTR_NODISCARD 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 NULL (returns NULL)
Returns
A newly allocated copy of settings or NULL

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

1536{
1537 rdpSettings* _settings = (rdpSettings*)calloc(1, sizeof(rdpSettings));
1538
1539 if (!freerdp_settings_copy(_settings, settings))
1540 goto out_fail;
1541
1542 return _settings;
1543out_fail:
1544 WINPR_PRAGMA_DIAG_PUSH
1545 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1546 freerdp_settings_free(_settings);
1547 WINPR_PRAGMA_DIAG_POP
1548 return NULL;
1549}
BOOL freerdp_settings_copy(rdpSettings *_settings, const rdpSettings *settings)
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 NULL (fails copy)
srcA pointer to the settings to copy. May be NULL (fails copy)
Returns
TRUE for success, FALSE for failure.

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

1510{
1511 BOOL rc = 0;
1512
1513 if (!settings || !_settings)
1514 return FALSE;
1515
1516 /* This is required to free all non string buffers */
1517 freerdp_settings_free_internal(_settings);
1518
1519 /* This copies everything except allocated non string buffers. reset all allocated buffers to
1520 * NULL to fix issues during cleanup */
1521 rc = freerdp_settings_clone_keys(_settings, settings);
1522 if (!rc)
1523 goto out_fail;
1524 freerdp_settings_free_internal_ensure_reset(_settings);
1525
1526 /* Begin copying */
1527 if (!freerdp_settings_int_buffer_copy(_settings, settings))
1528 goto out_fail;
1529 return TRUE;
1530out_fail:
1531 freerdp_settings_free_internal(_settings);
1532 return FALSE;
1533}

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 NULL (fails copy)
srcA pointer to the settings to copy. May be NULL (fails copy)
idThe settings identifier to copy
Returns
TRUE for success, FALSE for failure.

Definition at line 432 of file settings_str.c.

433{
434 WINPR_ASSERT(dst);
435 WINPR_ASSERT(src);
436
437 const SSIZE_T key = freerdp_settings_get_type_for_key(id);
438 switch (key)
439 {
440 case FREERDP_SETTINGS_TYPE_BOOL:
441 {
442 const BOOL val = freerdp_settings_get_bool(src, (FreeRDP_Settings_Keys_Bool)id);
443 return freerdp_settings_set_bool(dst, (FreeRDP_Settings_Keys_Bool)id, val);
444 }
445 case FREERDP_SETTINGS_TYPE_INT16:
446 {
447 const INT16 val = freerdp_settings_get_int16(src, (FreeRDP_Settings_Keys_Int16)id);
448 return freerdp_settings_set_int16(dst, (FreeRDP_Settings_Keys_Int16)id, val);
449 }
450 case FREERDP_SETTINGS_TYPE_INT32:
451 {
452 const INT32 val = freerdp_settings_get_int32(src, (FreeRDP_Settings_Keys_Int32)id);
453 return freerdp_settings_set_int32(dst, (FreeRDP_Settings_Keys_Int32)id, val);
454 }
455 case FREERDP_SETTINGS_TYPE_INT64:
456 {
457 const INT64 val = freerdp_settings_get_int64(src, (FreeRDP_Settings_Keys_Int64)id);
458 return freerdp_settings_set_int64(dst, (FreeRDP_Settings_Keys_Int64)id, val);
459 }
460 case FREERDP_SETTINGS_TYPE_UINT16:
461 {
462 const UINT16 val = freerdp_settings_get_uint16(src, (FreeRDP_Settings_Keys_UInt16)id);
463 return freerdp_settings_set_uint16(dst, (FreeRDP_Settings_Keys_UInt16)id, val);
464 }
465 case FREERDP_SETTINGS_TYPE_UINT32:
466 {
467 const UINT32 val = freerdp_settings_get_uint32(src, (FreeRDP_Settings_Keys_UInt32)id);
468 return freerdp_settings_set_uint32(dst, (FreeRDP_Settings_Keys_UInt32)id, val);
469 }
470 case FREERDP_SETTINGS_TYPE_UINT64:
471 {
472 const UINT64 val = freerdp_settings_get_uint64(src, (FreeRDP_Settings_Keys_UInt64)id);
473 return freerdp_settings_set_uint64(dst, (FreeRDP_Settings_Keys_UInt64)id, val);
474 }
475 case FREERDP_SETTINGS_TYPE_STRING:
476 {
477 const char* val = freerdp_settings_get_string(src, (FreeRDP_Settings_Keys_String)id);
478 return freerdp_settings_set_string(dst, (FreeRDP_Settings_Keys_String)id, val);
479 }
480 case FREERDP_SETTINGS_TYPE_POINTER:
481 {
482 const void* val = freerdp_settings_get_pointer(src, (FreeRDP_Settings_Keys_Pointer)id);
483 return freerdp_settings_set_pointer(dst, (FreeRDP_Settings_Keys_Pointer)id, val);
484 }
485 default:
486 return FALSE;
487 }
488}
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.
FREERDP_API BOOL freerdp_settings_set_string(rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *param)
Sets a string settings value. The param is copied.
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.
FREERDP_API BOOL freerdp_settings_set_int32(rdpSettings *settings, FreeRDP_Settings_Keys_Int32 id, INT32 param)
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.
FREERDP_API BOOL freerdp_settings_set_uint64(rdpSettings *settings, FreeRDP_Settings_Keys_UInt64 id, UINT64 param)
Sets a UINT64 settings value.
FREERDP_API BOOL freerdp_settings_set_int16(rdpSettings *settings, FreeRDP_Settings_Keys_Int16 id, INT16 param)
Sets a INT16 settings value.
FREERDP_API BOOL freerdp_settings_set_int64(rdpSettings *settings, FreeRDP_Settings_Keys_Int64 id, INT64 param)
Sets a INT64 settings value.
FREERDP_API BOOL freerdp_settings_set_uint16(rdpSettings *settings, FreeRDP_Settings_Keys_UInt16 id, UINT16 param)
Sets a UINT16 settings value.
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 *  json,
size_t  length 
)

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

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

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

4307{
4308 WINPR_JSON* json = WINPR_JSON_ParseWithLength(jstr, length);
4309 if (!json)
4310 return NULL;
4311
4312 WINPR_JSON* jbool = WINPR_JSON_GetObjectItemCaseSensitive(
4313 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_BOOL));
4314 WINPR_JSON* juint16 = WINPR_JSON_GetObjectItemCaseSensitive(
4315 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT16));
4316 WINPR_JSON* jint16 = WINPR_JSON_GetObjectItemCaseSensitive(
4317 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT16));
4318 WINPR_JSON* juint32 = WINPR_JSON_GetObjectItemCaseSensitive(
4319 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT32));
4320 WINPR_JSON* jint32 = WINPR_JSON_GetObjectItemCaseSensitive(
4321 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT32));
4322 WINPR_JSON* juint64 = WINPR_JSON_GetObjectItemCaseSensitive(
4323 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT64));
4324 WINPR_JSON* jint64 = WINPR_JSON_GetObjectItemCaseSensitive(
4325 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT64));
4326 WINPR_JSON* jstring = WINPR_JSON_GetObjectItemCaseSensitive(
4327 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_STRING));
4328 WINPR_JSON* jpointer = WINPR_JSON_GetObjectItemCaseSensitive(
4329 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_POINTER));
4330
4331 rdpSettings* settings = freerdp_settings_new(0);
4332 if (!settings)
4333 goto fail;
4334 if (!jbool || !juint16 || !jint16 || !juint32 || !jint32 || !juint64 || !jint64 || !jstring ||
4335 !jpointer)
4336 goto fail;
4337
4338 for (int x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
4339 {
4340 union
4341 {
4342
4343 int s;
4344 FreeRDP_Settings_Keys_Bool b;
4345 FreeRDP_Settings_Keys_Int16 i16;
4346 FreeRDP_Settings_Keys_UInt16 u16;
4347 FreeRDP_Settings_Keys_Int32 i32;
4348 FreeRDP_Settings_Keys_UInt32 u32;
4349 FreeRDP_Settings_Keys_Int64 i64;
4350 FreeRDP_Settings_Keys_UInt64 u64;
4351 FreeRDP_Settings_Keys_String str;
4352 FreeRDP_Settings_Keys_Pointer ptr;
4353 } iter;
4354 iter.s = x;
4355
4356 SSIZE_T type = freerdp_settings_get_type_for_key(iter.s);
4357 switch (type)
4358 {
4359 case RDP_SETTINGS_TYPE_POINTER:
4360 if (!deserialize_pointer(jpointer, settings, iter.ptr))
4361 goto fail;
4362 break;
4363 default:
4364 break;
4365 }
4366 }
4367
4368 for (int x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
4369 {
4370 union
4371 {
4372
4373 int s;
4374 FreeRDP_Settings_Keys_Bool b;
4375 FreeRDP_Settings_Keys_Int16 i16;
4376 FreeRDP_Settings_Keys_UInt16 u16;
4377 FreeRDP_Settings_Keys_Int32 i32;
4378 FreeRDP_Settings_Keys_UInt32 u32;
4379 FreeRDP_Settings_Keys_Int64 i64;
4380 FreeRDP_Settings_Keys_UInt64 u64;
4381 FreeRDP_Settings_Keys_String str;
4382 FreeRDP_Settings_Keys_Pointer ptr;
4383 } iter;
4384 iter.s = x;
4385
4386 const char* name = freerdp_settings_get_name_for_key(iter.s);
4387 SSIZE_T type = freerdp_settings_get_type_for_key(iter.s);
4388 switch (type)
4389 {
4390 case RDP_SETTINGS_TYPE_BOOL:
4391 {
4392 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(jbool, name);
4393 if (!item)
4394 goto fail;
4395 if (!WINPR_JSON_IsBool(item))
4396 goto fail;
4397 const BOOL val = WINPR_JSON_IsTrue(item);
4398 if (!freerdp_settings_set_bool(settings, iter.b, val))
4399 goto fail;
4400 }
4401 break;
4402 case RDP_SETTINGS_TYPE_UINT16:
4403 {
4404 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(juint16, name);
4405 const uint16_t val = (uint16_t)uint_from_json_item(item, UINT16_MAX);
4406 if (errno != 0)
4407 goto fail;
4408 if (!freerdp_settings_set_uint16(settings, iter.u16, val))
4409 goto fail;
4410 }
4411 break;
4412 case RDP_SETTINGS_TYPE_INT16:
4413 {
4414 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(jint16, name);
4415 const int16_t val = (int16_t)int_from_json_item(item, INT16_MIN, INT16_MAX);
4416 if (errno != 0)
4417 goto fail;
4418 if (!freerdp_settings_set_int16(settings, iter.i16, val))
4419 goto fail;
4420 }
4421 break;
4422 case RDP_SETTINGS_TYPE_UINT32:
4423 {
4424 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(juint32, name);
4425 const uint32_t val = (uint32_t)uint_from_json_item(item, UINT32_MAX);
4426 if (errno != 0)
4427 goto fail;
4428 if (!freerdp_settings_set_uint32(settings, iter.u32, val))
4429 goto fail;
4430 }
4431 break;
4432 case RDP_SETTINGS_TYPE_INT32:
4433 {
4434 const int64_t val = int_from_json(jint32, name, INT32_MIN, INT32_MAX);
4435 if (errno != 0)
4436 goto fail;
4437 if (!freerdp_settings_set_int32(settings, iter.i32, (int32_t)val))
4438 goto fail;
4439 }
4440 break;
4441 case RDP_SETTINGS_TYPE_UINT64:
4442 {
4443 const uint64_t val = uint_from_json(juint64, name, UINT64_MAX);
4444 if (errno != 0)
4445 goto fail;
4446 if (!freerdp_settings_set_uint64(settings, iter.u64, val))
4447 goto fail;
4448 }
4449 break;
4450 case RDP_SETTINGS_TYPE_INT64:
4451 {
4452 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(jint64, name);
4453 const int64_t val = int_from_json_item(item, INT64_MIN, INT64_MAX);
4454 if (errno != 0)
4455 goto fail;
4456 if (!freerdp_settings_set_int64(settings, iter.i64, val))
4457 goto fail;
4458 }
4459 break;
4460 case RDP_SETTINGS_TYPE_STRING:
4461 {
4462 const char* val = NULL;
4463 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(jstring, name);
4464 if (item && !WINPR_JSON_IsNull(item))
4465 {
4466 if (!WINPR_JSON_IsString(item))
4467 goto fail;
4468 val = WINPR_JSON_GetStringValue(item);
4469 if (!val)
4470 goto fail;
4471 }
4472 if (!freerdp_settings_set_string(settings, iter.str, val))
4473 goto fail;
4474 }
4475 break;
4476 case RDP_SETTINGS_TYPE_POINTER:
4477 default:
4478 break;
4479 }
4480 }
4481
4482 WINPR_JSON_Delete(json);
4483 return settings;
4484
4485fail:
4486 freerdp_settings_free(settings);
4487 WINPR_JSON_Delete(json);
4488 return NULL;
4489}
WINPR_API BOOL WINPR_JSON_IsNull(const WINPR_JSON *item)
Check if JSON item is Null.
Definition c-json.c:172
WINPR_API BOOL WINPR_JSON_IsString(const WINPR_JSON *item)
Check if JSON item is of type String.
Definition c-json.c:182
WINPR_API BOOL WINPR_JSON_IsBool(const WINPR_JSON *item)
Check if JSON item is of type BOOL.
Definition c-json.c:167
WINPR_API WINPR_JSON * WINPR_JSON_GetObjectItemCaseSensitive(const WINPR_JSON *object, const char *string)
Same as WINPR_JSON_GetObjectItem but with case sensitive matching.
Definition c-json.c:127
WINPR_ATTR_NODISCARD 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 const char * WINPR_JSON_GetStringValue(WINPR_JSON *item)
Return the String value of a JSON item.
Definition c-json.c:142
WINPR_API void WINPR_JSON_Delete(WINPR_JSON *item)
Delete a WinPR JSON wrapper object.
Definition c-json.c:103
WINPR_API BOOL WINPR_JSON_IsTrue(const WINPR_JSON *item)
Check if JSON item is BOOL value True.
Definition c-json.c:162
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 rdpSettings * freerdp_settings_new(DWORD flags)
creates a new setting struct
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_name_for_key(SSIZE_T key)
Returns the type name for a key.

References freerdp_settings_free(), freerdp_settings_get_name_for_key(), freerdp_settings_get_type_for_key(), freerdp_settings_get_type_name_for_type(), freerdp_settings_new(), freerdp_settings_set_bool(), freerdp_settings_set_int16(), freerdp_settings_set_int32(), freerdp_settings_set_int64(), freerdp_settings_set_string(), freerdp_settings_set_uint16(), freerdp_settings_set_uint32(), freerdp_settings_set_uint64(), WINPR_JSON_Delete(), WINPR_JSON_GetObjectItemCaseSensitive(), WINPR_JSON_GetStringValue(), WINPR_JSON_IsBool(), WINPR_JSON_IsNull(), WINPR_JSON_IsString(), WINPR_JSON_IsTrue(), 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 NULL
levelThe WLog level to use for the log entries
settingsA pointer to the settings to dump. May be NULL.

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 NULL

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

1289{
1290 if (!settings)
1291 return;
1292
1293 freerdp_settings_free_internal(settings);
1294 free(settings);
1295}

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 NULL.
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(), AppDelegate::rdpConnectError:, and SdlContext::SdlContext().

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

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

◆ 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 NULL
Since
version 3.6.0
Note
Since 3.17.1 this is a wrapper for freerdp_GetConfigFilePath(FALSE, "")

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

762{
763 return freerdp_GetConfigFilePath(FALSE, "");
764}

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 NULL.
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 NULL.
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 NULL.
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 351 of file settings_str.c.

352{
353 WINPR_ASSERT(value);
354
355 for (size_t x = 0; x < ARRAYSIZE(settings_map); x++)
356 {
357 const struct settings_str_entry* cur = &settings_map[x];
358 if (strcmp(value, cur->str) == 0)
359 return cur->id;
360 }
361 return -1;
362}

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

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->str;
428 }
429 return NULL;
430}

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

Here is the caller graph for this function:

◆ freerdp_settings_get_pointer()

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

Returns a immutable pointer settings value.

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

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

1432{
1433 union
1434 {
1435 const rdpSettings* pc;
1436 rdpSettings* p;
1437 } cnv;
1438 cnv.pc = settings;
1439 return freerdp_settings_get_pointer_writable(cnv.p, id);
1440}
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 2004 of file common/settings.c.

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

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

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

◆ 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 NULL.
idThe key to query
Returns
the mutable pointer value

Definition at line 4088 of file settings_getters.c.

4089{
4090 WINPR_ASSERT(settings);
4091
4092 switch (id)
4093 {
4094 case FreeRDP_BitmapCacheV2CellInfo:
4095 return (void*)settings->BitmapCacheV2CellInfo;
4096
4097 case FreeRDP_ChannelDefArray:
4098 return (void*)settings->ChannelDefArray;
4099
4100 case FreeRDP_ClientAutoReconnectCookie:
4101 return (void*)settings->ClientAutoReconnectCookie;
4102
4103 case FreeRDP_ClientRandom:
4104 return (void*)settings->ClientRandom;
4105
4106 case FreeRDP_ClientTimeZone:
4107 return (void*)settings->ClientTimeZone;
4108
4109 case FreeRDP_DeviceArray:
4110 return (void*)settings->DeviceArray;
4111
4112 case FreeRDP_DynamicChannelArray:
4113 return (void*)settings->DynamicChannelArray;
4114
4115 case FreeRDP_FragCache:
4116 return (void*)settings->FragCache;
4117
4118 case FreeRDP_GlyphCache:
4119 return (void*)settings->GlyphCache;
4120
4121 case FreeRDP_LoadBalanceInfo:
4122 return (void*)settings->LoadBalanceInfo;
4123
4124 case FreeRDP_MonitorDefArray:
4125 return (void*)settings->MonitorDefArray;
4126
4127 case FreeRDP_MonitorIds:
4128 return (void*)settings->MonitorIds;
4129
4130 case FreeRDP_OrderSupport:
4131 return (void*)settings->OrderSupport;
4132
4133 case FreeRDP_Password51:
4134 return (void*)settings->Password51;
4135
4136 case FreeRDP_RdpServerCertificate:
4137 return (void*)settings->RdpServerCertificate;
4138
4139 case FreeRDP_RdpServerRsaKey:
4140 return (void*)settings->RdpServerRsaKey;
4141
4142 case FreeRDP_ReceivedCapabilities:
4143 return (void*)settings->ReceivedCapabilities;
4144
4145 case FreeRDP_ReceivedCapabilityData:
4146 return (void*)settings->ReceivedCapabilityData;
4147
4148 case FreeRDP_ReceivedCapabilityDataSizes:
4149 return (void*)settings->ReceivedCapabilityDataSizes;
4150
4151 case FreeRDP_RedirectionGuid:
4152 return (void*)settings->RedirectionGuid;
4153
4154 case FreeRDP_RedirectionPassword:
4155 return (void*)settings->RedirectionPassword;
4156
4157 case FreeRDP_RedirectionTargetCertificate:
4158 return (void*)settings->RedirectionTargetCertificate;
4159
4160 case FreeRDP_RedirectionTsvUrl:
4161 return (void*)settings->RedirectionTsvUrl;
4162
4163 case FreeRDP_ServerAutoReconnectCookie:
4164 return (void*)settings->ServerAutoReconnectCookie;
4165
4166 case FreeRDP_ServerCertificate:
4167 return (void*)settings->ServerCertificate;
4168
4169 case FreeRDP_ServerLicenseProductIssuers:
4170 return (void*)settings->ServerLicenseProductIssuers;
4171
4172 case FreeRDP_ServerRandom:
4173 return (void*)settings->ServerRandom;
4174
4175 case FreeRDP_StaticChannelArray:
4176 return (void*)settings->StaticChannelArray;
4177
4178 case FreeRDP_TargetNetAddresses:
4179 return (void*)settings->TargetNetAddresses;
4180
4181 case FreeRDP_TargetNetPorts:
4182 return (void*)settings->TargetNetPorts;
4183
4184 case FreeRDP_instance:
4185 return settings->instance;
4186
4187 default:
4188 WLog_ERR(TAG, "Invalid key index %d [%s|%s]", id, freerdp_settings_get_name_for_key(id),
4190 WINPR_ASSERT(FALSE);
4191 return NULL;
4192 }
4193}
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 NULL.
Returns
A string pointer or NULL in case of failure.

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

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

◆ 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 NULL.
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()

WINPR_ATTR_NODISCARD 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 NULL

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

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

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 NULL.
idThe key to query
Returns
the string pointer

Definition at line 3048 of file settings_getters.c.

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

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 410 of file settings_str.c.

411{
412 for (size_t x = 0; x < ARRAYSIZE(settings_map); x++)
413 {
414 const struct settings_str_entry* cur = &settings_map[x];
415 if (cur->id == key)
416 return cur->type;
417 }
418 return -1;
419}

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

Here is the caller graph for this function:

◆ freerdp_settings_get_type_for_name()

WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_name ( const char *  value)

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

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

Definition at line 364 of file settings_str.c.

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

◆ 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 377 of file settings_str.c.

378{
379 const SSIZE_T type = freerdp_settings_get_type_for_key(key);
381}

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 383 of file settings_str.c.

384{
385 switch (type)
386 {
387 case FREERDP_SETTINGS_TYPE_BOOL:
388 return "FREERDP_SETTINGS_TYPE_BOOL";
389 case FREERDP_SETTINGS_TYPE_UINT16:
390 return "FREERDP_SETTINGS_TYPE_UINT16";
391 case FREERDP_SETTINGS_TYPE_INT16:
392 return "FREERDP_SETTINGS_TYPE_INT16";
393 case FREERDP_SETTINGS_TYPE_UINT32:
394 return "FREERDP_SETTINGS_TYPE_UINT32";
395 case FREERDP_SETTINGS_TYPE_INT32:
396 return "FREERDP_SETTINGS_TYPE_INT32";
397 case FREERDP_SETTINGS_TYPE_UINT64:
398 return "FREERDP_SETTINGS_TYPE_UINT64";
399 case FREERDP_SETTINGS_TYPE_INT64:
400 return "FREERDP_SETTINGS_TYPE_INT64";
401 case FREERDP_SETTINGS_TYPE_STRING:
402 return "FREERDP_SETTINGS_TYPE_STRING";
403 case FREERDP_SETTINGS_TYPE_POINTER:
404 return "FREERDP_SETTINGS_TYPE_POINTER";
405 default:
406 return "FREERDP_SETTINGS_TYPE_UNKNOWN";
407 }
408}

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

Here is the caller graph for this function:

◆ freerdp_settings_get_uint16()

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

Returns a UINT16 settings value.

Parameters
settingsA pointer to the settings to query, must not be NULL.
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 NULL.
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 NULL.
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()

WINPR_ATTR_NODISCARD 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 NULL

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

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

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

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

Dumps the difference between two settings structs to a WLog.

Parameters
logThe logger to write to, must not be NULL.
levelThe WLog level to use for the log entries.
srcA pointer to the settings to dump. May be NULL.
otherA pointer to the settings to dump. May be NULL.
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 NULL in case of an error.
Since
version 3.16.0

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

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

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

FREERDP_API BOOL freerdp_settings_set_bool ( rdpSettings *  settings,
FreeRDP_Settings_Keys_Bool  id,
BOOL  param 
)

Sets a BOOL settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_int16()

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

Sets a INT16 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

Here is the caller graph for this function:

◆ freerdp_settings_set_int32()

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

Sets a INT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_int64()

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

Sets a INT64 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

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

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

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

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

Set a pointer to value data.

Parameters
settingsA pointer to the settings to query, must not be NULL.
idThe key to update
dataThe 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()

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

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

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

◆ freerdp_settings_set_pointer_len()

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 NULL.
idThe key to update
dataThe data to set (copy created, previous value freed)
Returns
TRUE for success, FALSE for failure

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

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

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

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

Sets a string settings value. The param is copied.

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

Definition at line 3729 of file settings_getters.c.

3731{
3732 size_t len = 0;
3733 if (val)
3734 len = strlen(val);
3735 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3736}

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

Here is the caller graph for this function:

◆ freerdp_settings_set_string_from_utf16()

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 NULL.
idThe key to query
paramThe value to set. If NULL removes the old entry, otherwise a copy is created.
Returns
TRUE for success, FALSE for failure

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

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

◆ freerdp_settings_set_string_from_utf16N()

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 NULL.
idThe key to query
paramThe value to set. If NULL 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 2274 of file common/settings.c.

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

Referenced by freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_string_len()

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

Sets a string settings value. The param is copied.

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

Definition at line 3723 of file settings_getters.c.

3725{
3726 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3727}

Referenced by freerdp_settings_append_string(), and freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_uint16()

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

Sets a UINT16 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_uint32()

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

Sets a UINT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_uint64()

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

Sets a UINT64 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

Here is the caller graph for this function:

◆ freerdp_settings_set_value_for_name()

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

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

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

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

◆ freerdp_static_channel_collection_add()

FREERDP_API BOOL freerdp_static_channel_collection_add ( rdpSettings *  settings,
ADDIN_ARGV channel 
)

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

594{
595 UINT32 count = 0;
596
597 WINPR_ASSERT(settings);
598 WINPR_ASSERT(channel);
599
600 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount) + 1;
601 if (freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize) < count)
602 {
603 const UINT32 oldSize =
604 freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
605 const size_t new_size = oldSize + 32ul;
606 ADDIN_ARGV** new_array = (ADDIN_ARGV**)realloc((void*)settings->StaticChannelArray,
607 new_size * sizeof(ADDIN_ARGV*));
608
609 if (!new_array)
610 return FALSE;
611
612 settings->StaticChannelArray = new_array;
613 {
614 for (size_t x = oldSize; x < new_size; x++)
615 settings->StaticChannelArray[x] = NULL;
616 }
617 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize,
618 WINPR_ASSERTING_INT_CAST(uint32_t, new_size)))
619 return FALSE;
620 }
621
622 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
623
624 ADDIN_ARGV** cur = &settings->StaticChannelArray[count++];
625 freerdp_addin_argv_free(*cur);
626 *cur = channel;
627 return freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count);
628}

◆ freerdp_static_channel_collection_del()

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

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

562{
563 const UINT32 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
564 if (!settings || !settings->StaticChannelArray)
565 return FALSE;
566
567 for (UINT32 x = 0; x < count; x++)
568 {
569 ADDIN_ARGV* cur = settings->StaticChannelArray[x];
570 if (cur && (cur->argc > 0))
571 {
572 if (strcmp(name, cur->argv[0]) == 0)
573 {
574 memmove_s((void*)&settings->StaticChannelArray[x],
575 (count - x) * sizeof(ADDIN_ARGV*),
576 (void*)&settings->StaticChannelArray[x + 1],
577 (count - x - 1) * sizeof(ADDIN_ARGV*));
578 for (size_t y = count - 1; y < settings->StaticChannelArraySize; y++)
579 settings->StaticChannelArray[y] = NULL;
580
581 freerdp_addin_argv_free(cur);
582 return freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count - 1);
583 }
584 }
585 }
586 {
587 for (size_t x = count; x < settings->StaticChannelArraySize; x++)
588 settings->StaticChannelArray[x] = NULL;
589 }
590 return FALSE;
591}

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

631{
632 ADDIN_ARGV* channel = NULL;
633
634 WINPR_ASSERT(settings);
635 WINPR_ASSERT(name);
636
637 for (UINT32 index = 0;
638 index < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount); index++)
639 {
640 channel = settings->StaticChannelArray[index];
641
642 if (strcmp(channel->argv[0], name) == 0)
643 return channel;
644 }
645
646 return NULL;
647}

◆ freerdp_static_channel_collection_free()

FREERDP_API void freerdp_static_channel_collection_free ( rdpSettings *  settings)

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

650{
651 if (!settings)
652 return;
653
654 if (settings->StaticChannelArray)
655 {
656 for (UINT32 i = 0;
657 i < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize); i++)
658 freerdp_addin_argv_free(settings->StaticChannelArray[i]);
659 }
660
661 free((void*)settings->StaticChannelArray);
662 (void)freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0);
663 settings->StaticChannelArray = NULL;
664 (void)freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0);
665}

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

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

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

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

◆ freerdp_target_net_addresses_free()

FREERDP_API void freerdp_target_net_addresses_free ( rdpSettings *  settings)

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

996{
997 WINPR_ASSERT(settings);
998
999 target_net_addresses_free(settings, 0);
1000
1001 free((void*)settings->TargetNetAddresses);
1002 settings->TargetNetAddresses = NULL;
1003
1004 free(settings->TargetNetPorts);
1005 settings->TargetNetPorts = NULL;
1006
1007 settings->TargetNetAddressCount = 0;
1008}

◆ 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 freerdp_set_gateway_usage_method(settings, GatewayUsageMethod);
1183}
BOOL freerdp_set_gateway_usage_method(rdpSettings *settings, UINT32 GatewayUsageMethod)