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

This is the FreeRDP settings module. More...

Data Structures

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

Macros

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

Enumerations

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

Functions

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

to value \b value

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

The value will be checked internally:

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

Detailed Description

This is the FreeRDP settings module.

FreeRDP: A Remote Desktop Protocol Implementation RDP Settings

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

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

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

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

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

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

The lifetime of the settings is as follows:

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

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

FreeRDP: A Remote Desktop Protocol Implementation RDP Settings

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

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

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

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

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

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

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

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

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


Data Structure Documentation

◆ TARGET_NET_ADDRESS

struct TARGET_NET_ADDRESS

Definition at line 293 of file settings_types.h.

Data Fields
LPWSTR Address
UINT32 Length

◆ ARC_CS_PRIVATE_PACKET

struct ARC_CS_PRIVATE_PACKET

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

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

◆ ADDIN_ARGV

struct ADDIN_ARGV

Definition at line 374 of file settings_types.h.

Data Fields
int argc
char ** argv

◆ rdp_ext_set

struct rdp_ext_set

Definition at line 382 of file settings_types.h.

Data Fields
void * data
char name[256]

◆ BITMAP_CACHE_CELL_INFO

struct BITMAP_CACHE_CELL_INFO

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

Data Fields
UINT32 numEntries
BOOL persistent

◆ GLYPH_CACHE_DEFINITION

struct GLYPH_CACHE_DEFINITION

Definition at line 404 of file settings_types.h.

Data Fields
UINT16 cacheEntries
UINT16 cacheMaximumCellSize

◆ MONITOR_DEF

struct MONITOR_DEF

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

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

◆ rdpMonitor

struct rdpMonitor

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

Data Fields
UINT32 Id
char * Name
UINT32 Type

◆ RDPDR_DRIVE

struct RDPDR_DRIVE

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

Collaboration diagram for RDPDR_SMARTCARD:
Data Fields
RDPDR_DEVICE device

◆ RDPDR_SERIAL

struct RDPDR_SERIAL

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

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

Macro Definition Documentation

◆ AUDIO_MODE_NONE

#define AUDIO_MODE_NONE   2 /* Do not play */

Definition at line 144 of file settings_types.h.

◆ AUDIO_MODE_PLAY_ON_SERVER

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

Definition at line 143 of file settings_types.h.

◆ AUDIO_MODE_REDIRECT

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

Definition at line 142 of file settings_types.h.

◆ AUTO_RECONNECT_VERSION_1

#define AUTO_RECONNECT_VERSION_1   0x00000001

Definition at line 224 of file settings_types.h.

◆ CHANNEL_OPTION_COMPRESS

#define CHANNEL_OPTION_COMPRESS   0x00400000

Definition at line 210 of file settings_types.h.

◆ CHANNEL_OPTION_COMPRESS_RDP

#define CHANNEL_OPTION_COMPRESS_RDP   0x00800000

Definition at line 209 of file settings_types.h.

◆ CHANNEL_OPTION_ENCRYPT_CS

#define CHANNEL_OPTION_ENCRYPT_CS   0x10000000

Definition at line 205 of file settings_types.h.

◆ CHANNEL_OPTION_ENCRYPT_RDP

#define CHANNEL_OPTION_ENCRYPT_RDP   0x40000000

Definition at line 203 of file settings_types.h.

◆ CHANNEL_OPTION_ENCRYPT_SC

#define CHANNEL_OPTION_ENCRYPT_SC   0x20000000

Definition at line 204 of file settings_types.h.

◆ CHANNEL_OPTION_INITIALIZED

#define CHANNEL_OPTION_INITIALIZED   0x80000000

Definition at line 202 of file settings_types.h.

◆ CHANNEL_OPTION_PRI_HIGH

#define CHANNEL_OPTION_PRI_HIGH   0x08000000

Definition at line 206 of file settings_types.h.

◆ CHANNEL_OPTION_PRI_LOW

#define CHANNEL_OPTION_PRI_LOW   0x02000000

Definition at line 208 of file settings_types.h.

◆ CHANNEL_OPTION_PRI_MED

#define CHANNEL_OPTION_PRI_MED   0x04000000

Definition at line 207 of file settings_types.h.

◆ CHANNEL_OPTION_SHOW_PROTOCOL

#define CHANNEL_OPTION_SHOW_PROTOCOL   0x00200000

Definition at line 211 of file settings_types.h.

◆ CHANNEL_REMOTE_CONTROL_PERSISTENT

#define CHANNEL_REMOTE_CONTROL_PERSISTENT   0x00100000

Definition at line 212 of file settings_types.h.

◆ CLIPRDR_FLAG_DEFAULT_MASK

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

Definition at line 345 of file settings_types.h.

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

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE   0x01

Definition at line 340 of file settings_types.h.

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES   0x02

Definition at line 341 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL   0x10

Definition at line 342 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES   0x20

Definition at line 343 of file settings_types.h.

◆ CONNECTION_TYPE_AUTODETECT

#define CONNECTION_TYPE_AUTODETECT   0x07

Definition at line 82 of file settings_types.h.

◆ CONNECTION_TYPE_BROADBAND_HIGH

#define CONNECTION_TYPE_BROADBAND_HIGH   0x04

Definition at line 79 of file settings_types.h.

◆ CONNECTION_TYPE_BROADBAND_LOW

#define CONNECTION_TYPE_BROADBAND_LOW   0x02

Definition at line 77 of file settings_types.h.

◆ CONNECTION_TYPE_INVALID

#define CONNECTION_TYPE_INVALID
Value:
0x00

Definition at line 74 of file settings_types.h.

◆ CONNECTION_TYPE_LAN

#define CONNECTION_TYPE_LAN   0x06

Definition at line 81 of file settings_types.h.

◆ CONNECTION_TYPE_MODEM

#define CONNECTION_TYPE_MODEM   0x01

Definition at line 76 of file settings_types.h.

◆ CONNECTION_TYPE_SATELLITE

#define CONNECTION_TYPE_SATELLITE   0x03

Definition at line 78 of file settings_types.h.

◆ CONNECTION_TYPE_WAN

#define CONNECTION_TYPE_WAN   0x05

Definition at line 80 of file settings_types.h.

◆ CS_CLUSTER

#define CS_CLUSTER   0xC004

Definition at line 88 of file settings_types.h.

◆ CS_CORE

#define CS_CORE   0xC001

Definition at line 85 of file settings_types.h.

◆ CS_MCS_MSGCHANNEL

#define CS_MCS_MSGCHANNEL   0xC006

Definition at line 90 of file settings_types.h.

◆ CS_MONITOR

#define CS_MONITOR   0xC005

Definition at line 89 of file settings_types.h.

◆ CS_MONITOR_EX

#define CS_MONITOR_EX   0xC008

Definition at line 91 of file settings_types.h.

◆ CS_MULTITRANSPORT

#define CS_MULTITRANSPORT   0xC00A

Definition at line 93 of file settings_types.h.

◆ CS_NET

#define CS_NET   0xC003

Definition at line 87 of file settings_types.h.

◆ CS_SECURITY

#define CS_SECURITY   0xC002

Definition at line 86 of file settings_types.h.

◆ CS_UNUSED1

#define CS_UNUSED1   0xC00C

Definition at line 92 of file settings_types.h.

◆ DEFAULT_COOKIE_MAX_LENGTH

#define DEFAULT_COOKIE_MAX_LENGTH   0xFF

Definition at line 228 of file settings_types.h.

◆ ENCRYPTION_LEVEL_CLIENT_COMPATIBLE

#define ENCRYPTION_LEVEL_CLIENT_COMPATIBLE   0x00000002

Definition at line 191 of file settings_types.h.

◆ ENCRYPTION_LEVEL_FIPS

#define ENCRYPTION_LEVEL_FIPS   0x00000004

Definition at line 193 of file settings_types.h.

◆ ENCRYPTION_LEVEL_HIGH

#define ENCRYPTION_LEVEL_HIGH   0x00000003

Definition at line 192 of file settings_types.h.

◆ ENCRYPTION_LEVEL_LOW

#define ENCRYPTION_LEVEL_LOW   0x00000001

Definition at line 190 of file settings_types.h.

◆ ENCRYPTION_LEVEL_NONE

#define ENCRYPTION_LEVEL_NONE   0x00000000

Definition at line 189 of file settings_types.h.

◆ ENCRYPTION_METHOD_128BIT

#define ENCRYPTION_METHOD_128BIT   0x00000002

Definition at line 184 of file settings_types.h.

◆ ENCRYPTION_METHOD_40BIT

#define ENCRYPTION_METHOD_40BIT   0x00000001

Definition at line 183 of file settings_types.h.

◆ ENCRYPTION_METHOD_56BIT

#define ENCRYPTION_METHOD_56BIT   0x00000008

Definition at line 185 of file settings_types.h.

◆ ENCRYPTION_METHOD_FIPS

#define ENCRYPTION_METHOD_FIPS   0x00000010

Definition at line 186 of file settings_types.h.

◆ ENCRYPTION_METHOD_NONE

#define ENCRYPTION_METHOD_NONE   0x00000000

Definition at line 182 of file settings_types.h.

◆ ERROR_CODE_ACCESS_DENIED

#define ERROR_CODE_ACCESS_DENIED   0xFFFFFFFF

Definition at line 307 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_DESKTOP_SCALE

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

Definition at line 351 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_DEVICE_SCALE

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

Definition at line 352 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_ORIENTATION

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

Definition at line 350 of file settings_types.h.

◆ FREERDP_SETTINGS_REMOTE_MODE

#define FREERDP_SETTINGS_REMOTE_MODE   0x00000002

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

◆ FREERDP_SETTINGS_SERVER_MODE [1/2]

#define FREERDP_SETTINGS_SERVER_MODE   0x00000001

rdpSettings creation flags

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

◆ FREERDP_SETTINGS_SERVER_MODE [2/2]

#define FREERDP_SETTINGS_SERVER_MODE   0x00000001

rdpSettings creation flags

Definition at line 515 of file settings_types.h.

◆ GLYPH_SUPPORT_ENCODE

#define GLYPH_SUPPORT_ENCODE   0x0003

Definition at line 274 of file settings_types.h.

◆ GLYPH_SUPPORT_FULL

#define GLYPH_SUPPORT_FULL   0x0002

Definition at line 273 of file settings_types.h.

◆ GLYPH_SUPPORT_NONE

#define GLYPH_SUPPORT_NONE   0x0000

Definition at line 271 of file settings_types.h.

◆ GLYPH_SUPPORT_PARTIAL

#define GLYPH_SUPPORT_PARTIAL   0x0001

Definition at line 272 of file settings_types.h.

◆ KEYBOARD_HOOK_FULLSCREEN_ONLY

#define KEYBOARD_HOOK_FULLSCREEN_ONLY   2

Definition at line 291 of file settings_types.h.

◆ KEYBOARD_HOOK_LOCAL

#define KEYBOARD_HOOK_LOCAL   0

Definition at line 289 of file settings_types.h.

◆ KEYBOARD_HOOK_REMOTE

#define KEYBOARD_HOOK_REMOTE   1

Definition at line 290 of file settings_types.h.

◆ LARGE_POINTER_FLAG_384x384

#define LARGE_POINTER_FLAG_384x384   0x00000002

Definition at line 221 of file settings_types.h.

◆ LARGE_POINTER_FLAG_96x96

#define LARGE_POINTER_FLAG_96x96   0x00000001

Definition at line 220 of file settings_types.h.

◆ LOGON_FAILED_BAD_PASSWORD

#define LOGON_FAILED_BAD_PASSWORD   0x00000000

Definition at line 309 of file settings_types.h.

◆ LOGON_FAILED_OTHER

#define LOGON_FAILED_OTHER   0x00000002

Definition at line 311 of file settings_types.h.

◆ LOGON_FAILED_UPDATE_PASSWORD

#define LOGON_FAILED_UPDATE_PASSWORD   0x00000001

Definition at line 310 of file settings_types.h.

◆ LOGON_MSG_BUMP_OPTIONS

#define LOGON_MSG_BUMP_OPTIONS   0xFFFFFFFB

Definition at line 303 of file settings_types.h.

◆ LOGON_MSG_DISCONNECT_REFUSED

#define LOGON_MSG_DISCONNECT_REFUSED   0xFFFFFFF9

Definition at line 301 of file settings_types.h.

◆ LOGON_MSG_NO_PERMISSION

#define LOGON_MSG_NO_PERMISSION   0xFFFFFFFA

Definition at line 302 of file settings_types.h.

◆ LOGON_MSG_RECONNECT_OPTIONS

#define LOGON_MSG_RECONNECT_OPTIONS   0xFFFFFFFC

Definition at line 304 of file settings_types.h.

◆ LOGON_MSG_SESSION_BUSY_OPTIONS

#define LOGON_MSG_SESSION_BUSY_OPTIONS   0xFFFFFFF8

Definition at line 300 of file settings_types.h.

◆ LOGON_MSG_SESSION_CONTINUE

#define LOGON_MSG_SESSION_CONTINUE   0xFFFFFFFE

Definition at line 306 of file settings_types.h.

◆ LOGON_MSG_SESSION_TERMINATE

#define LOGON_MSG_SESSION_TERMINATE   0xFFFFFFFD

Definition at line 305 of file settings_types.h.

◆ LOGON_WARNING

#define LOGON_WARNING   0x00000003

Definition at line 312 of file settings_types.h.

◆ MONITOR_PRIMARY

#define MONITOR_PRIMARY   0x00000001

Definition at line 179 of file settings_types.h.

◆ MSTSC_COOKIE_MAX_LENGTH

#define MSTSC_COOKIE_MAX_LENGTH   9

Definition at line 227 of file settings_types.h.

◆ PACKET_COMPR_TYPE_64K

#define PACKET_COMPR_TYPE_64K   0x01

Definition at line 325 of file settings_types.h.

◆ PACKET_COMPR_TYPE_8K

#define PACKET_COMPR_TYPE_8K   0x00

Definition at line 324 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP6

#define PACKET_COMPR_TYPE_RDP6   0x02

Definition at line 326 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP61

#define PACKET_COMPR_TYPE_RDP61   0x03

Definition at line 327 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP8

#define PACKET_COMPR_TYPE_RDP8   0x04

Definition at line 328 of file settings_types.h.

◆ PERF_DISABLE_CURSOR_SHADOW

#define PERF_DISABLE_CURSOR_SHADOW   0x00000020

Definition at line 68 of file settings_types.h.

◆ PERF_DISABLE_CURSORSETTINGS

#define PERF_DISABLE_CURSORSETTINGS   0x00000040

Definition at line 69 of file settings_types.h.

◆ PERF_DISABLE_FULLWINDOWDRAG

#define PERF_DISABLE_FULLWINDOWDRAG   0x00000002

Definition at line 65 of file settings_types.h.

◆ PERF_DISABLE_MENUANIMATIONS

#define PERF_DISABLE_MENUANIMATIONS   0x00000004

Definition at line 66 of file settings_types.h.

◆ PERF_DISABLE_THEMING

#define PERF_DISABLE_THEMING   0x00000008

Definition at line 67 of file settings_types.h.

◆ PERF_DISABLE_WALLPAPER

#define PERF_DISABLE_WALLPAPER   0x00000001

Definition at line 64 of file settings_types.h.

◆ PERF_ENABLE_DESKTOP_COMPOSITION

#define PERF_ENABLE_DESKTOP_COMPOSITION   0x00000100

Definition at line 71 of file settings_types.h.

◆ PERF_ENABLE_FONT_SMOOTHING

#define PERF_ENABLE_FONT_SMOOTHING   0x00000080

Definition at line 70 of file settings_types.h.

◆ PERF_FLAG_NONE

#define PERF_FLAG_NONE   0x00000000

Definition at line 63 of file settings_types.h.

◆ PROXY_TYPE_HTTP

#define PROXY_TYPE_HTTP   1

Definition at line 492 of file settings_types.h.

◆ PROXY_TYPE_IGNORE

#define PROXY_TYPE_IGNORE   0xFFFF

Definition at line 494 of file settings_types.h.

◆ PROXY_TYPE_NONE

#define PROXY_TYPE_NONE   0

Definition at line 491 of file settings_types.h.

◆ PROXY_TYPE_SOCKS

#define PROXY_TYPE_SOCKS   2

Definition at line 493 of file settings_types.h.

◆ RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED

#define RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED   0x00000002

Definition at line 54 of file settings_types.h.

◆ RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED

#define RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED   0x00000080

Definition at line 60 of file settings_types.h.

◆ RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED

#define RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED   0x00000020

Definition at line 58 of file settings_types.h.

◆ RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED

#define RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED   0x00000008

Definition at line 56 of file settings_types.h.

◆ RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED

#define RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED   0x00000010

Definition at line 57 of file settings_types.h.

◆ RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED

#define RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED   0x00000004

Definition at line 55 of file settings_types.h.

◆ RAIL_LEVEL_SUPPORTED

#define RAIL_LEVEL_SUPPORTED   0x00000001

Definition at line 53 of file settings_types.h.

◆ RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED

#define RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED   0x00000040

Definition at line 59 of file settings_types.h.

◆ REDIRECTED_SESSIONID_FIELD_VALID

#define REDIRECTED_SESSIONID_FIELD_VALID   0x00000002

Definition at line 168 of file settings_types.h.

◆ REDIRECTED_SMARTCARD

#define REDIRECTED_SMARTCARD   0x00000040

Definition at line 169 of file settings_types.h.

◆ REDIRECTION_SUPPORTED

#define REDIRECTION_SUPPORTED   0x00000001

Definition at line 167 of file settings_types.h.

◆ REDIRECTION_VERSION1

#define REDIRECTION_VERSION1   0x00

Definition at line 172 of file settings_types.h.

◆ REDIRECTION_VERSION2

#define REDIRECTION_VERSION2   0x01

Definition at line 173 of file settings_types.h.

◆ REDIRECTION_VERSION3

#define REDIRECTION_VERSION3   0x02

Definition at line 174 of file settings_types.h.

◆ REDIRECTION_VERSION4

#define REDIRECTION_VERSION4   0x03

Definition at line 175 of file settings_types.h.

◆ REDIRECTION_VERSION5

#define REDIRECTION_VERSION5   0x04

Definition at line 176 of file settings_types.h.

◆ REDIRECTION_VERSION6

#define REDIRECTION_VERSION6   0x05

Definition at line 177 of file settings_types.h.

◆ RNS_UD_15BPP_SUPPORT

#define RNS_UD_15BPP_SUPPORT   0x0004

Definition at line 138 of file settings_types.h.

◆ RNS_UD_16BPP_SUPPORT

#define RNS_UD_16BPP_SUPPORT   0x0002

Definition at line 137 of file settings_types.h.

◆ RNS_UD_24BPP_SUPPORT

#define RNS_UD_24BPP_SUPPORT   0x0001

Definition at line 136 of file settings_types.h.

◆ RNS_UD_32BPP_SUPPORT

#define RNS_UD_32BPP_SUPPORT   0x0008

Definition at line 139 of file settings_types.h.

◆ RNS_UD_COLOR_16BPP_555

#define RNS_UD_COLOR_16BPP_555   0xCA02

Definition at line 128 of file settings_types.h.

◆ RNS_UD_COLOR_16BPP_565

#define RNS_UD_COLOR_16BPP_565   0xCA03

Definition at line 129 of file settings_types.h.

◆ RNS_UD_COLOR_24BPP

#define RNS_UD_COLOR_24BPP   0xCA04

Definition at line 130 of file settings_types.h.

◆ RNS_UD_COLOR_4BPP

#define RNS_UD_COLOR_4BPP   0xCA00

Definition at line 126 of file settings_types.h.

◆ RNS_UD_COLOR_8BPP

#define RNS_UD_COLOR_8BPP   0xCA01

Definition at line 127 of file settings_types.h.

◆ RNS_UD_CS_RELATIVE_MOUSE_INPUT

#define RNS_UD_CS_RELATIVE_MOUSE_INPUT   0x0010

Definition at line 151 of file settings_types.h.

◆ RNS_UD_CS_STRONG_ASYMMETRIC_KEYS

#define RNS_UD_CS_STRONG_ASYMMETRIC_KEYS   0x0008

Definition at line 150 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE

#define RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE   0x0200

Definition at line 156 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL

#define RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL   0x0100

Definition at line 155 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_ERRINFO_PDU

#define RNS_UD_CS_SUPPORT_ERRINFO_PDU   0x0001

Definition at line 147 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_HEARTBEAT_PDU

#define RNS_UD_CS_SUPPORT_HEARTBEAT_PDU   0x0400

Definition at line 157 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU

#define RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU   0x0040

Definition at line 153 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT

#define RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT   0x0080

Definition at line 154 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN

#define RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN   0x0800

Definition at line 158 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_STATUSINFO_PDU

#define RNS_UD_CS_SUPPORT_STATUSINFO_PDU   0x0004

Definition at line 149 of file settings_types.h.

◆ RNS_UD_CS_VALID_CONNECTION_TYPE

#define RNS_UD_CS_VALID_CONNECTION_TYPE   0x0020

Definition at line 152 of file settings_types.h.

◆ RNS_UD_CS_WANT_32BPP_SESSION

#define RNS_UD_CS_WANT_32BPP_SESSION   0x0002

Definition at line 148 of file settings_types.h.

◆ RNS_UD_SAS_DEL

#define RNS_UD_SAS_DEL   0xAA03

Definition at line 133 of file settings_types.h.

◆ RNS_UD_SC_DYNAMIC_DST_SUPPORTED

#define RNS_UD_SC_DYNAMIC_DST_SUPPORTED   0x00000002

Definition at line 162 of file settings_types.h.

◆ RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V1

#define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V1   0x00000001

Definition at line 161 of file settings_types.h.

◆ RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V2

#define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V2   0x00000004

Definition at line 163 of file settings_types.h.

◆ RNS_UD_SC_SKIP_CHANNELJOIN_SUPPORTED

#define RNS_UD_SC_SKIP_CHANNELJOIN_SUPPORTED   0x00000008

Definition at line 164 of file settings_types.h.

◆ SC_CORE

#define SC_CORE   0x0C01

Definition at line 96 of file settings_types.h.

◆ SC_MCS_MSGCHANNEL

#define SC_MCS_MSGCHANNEL   0x0C04

Definition at line 99 of file settings_types.h.

◆ SC_MULTITRANSPORT

#define SC_MULTITRANSPORT   0x0C08

Definition at line 100 of file settings_types.h.

◆ SC_NET

#define SC_NET   0x0C03

Definition at line 98 of file settings_types.h.

◆ SC_SECURITY

#define SC_SECURITY   0x0C02

Definition at line 97 of file settings_types.h.

◆ ServerSessionRedirectionVersionMask

#define ServerSessionRedirectionVersionMask   0x0000003c

Definition at line 171 of file settings_types.h.

◆ SETTINGS_DEPRECATED

#define SETTINGS_DEPRECATED (   x)    WINPR_DEPRECATED(x)

Definition at line 45 of file settings_types_private.h.

◆ SOFTSYNC_TCP_TO_UDP

#define SOFTSYNC_TCP_TO_UDP   0x00000200

Definition at line 199 of file settings_types.h.

◆ STATUS_BRINGING_SESSION_ONLINE

#define STATUS_BRINGING_SESSION_ONLINE   0x00000403

Definition at line 317 of file settings_types.h.

◆ STATUS_FINDING_DESTINATION

#define STATUS_FINDING_DESTINATION   0x00000401

Definition at line 315 of file settings_types.h.

◆ STATUS_LOADING_DESTINATION

#define STATUS_LOADING_DESTINATION   0x00000402

Definition at line 316 of file settings_types.h.

◆ STATUS_REDIRECTING_TO_DESTINATION

#define STATUS_REDIRECTING_TO_DESTINATION   0x00000404

Definition at line 318 of file settings_types.h.

◆ STATUS_VM_BOOTING

#define STATUS_VM_BOOTING   0x00000503

Definition at line 321 of file settings_types.h.

◆ STATUS_VM_LOADING

#define STATUS_VM_LOADING   0x00000501

Definition at line 319 of file settings_types.h.

◆ STATUS_VM_WAKING

#define STATUS_VM_WAKING   0x00000502

Definition at line 320 of file settings_types.h.

◆ SURFCMDS_FRAME_MARKER

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

Definition at line 49 of file settings_types.h.

◆ SURFCMDS_SET_SURFACE_BITS

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

Definition at line 48 of file settings_types.h.

◆ SURFCMDS_STREAM_SURFACE_BITS

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

Definition at line 50 of file settings_types.h.

◆ THREADING_FLAGS_DISABLE_THREADS

#define THREADING_FLAGS_DISABLE_THREADS   0x00000001

Definition at line 497 of file settings_types.h.

◆ TRANSPORT_TYPE_UDP_FECL

#define TRANSPORT_TYPE_UDP_FECL   0x00000004

Definition at line 197 of file settings_types.h.

◆ TRANSPORT_TYPE_UDP_FECR

#define TRANSPORT_TYPE_UDP_FECR   0x00000001

Definition at line 196 of file settings_types.h.

◆ TRANSPORT_TYPE_UDP_PREFERRED

#define TRANSPORT_TYPE_UDP_PREFERRED   0x00000100

Definition at line 198 of file settings_types.h.

◆ TS_CAPS_PROTOCOLVERSION

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

Definition at line 231 of file settings_types.h.

◆ TSC_PROXY_CREDS_MODE_ANY

#define TSC_PROXY_CREDS_MODE_ANY   0x2

Definition at line 286 of file settings_types.h.

◆ TSC_PROXY_CREDS_MODE_SMARTCARD

#define TSC_PROXY_CREDS_MODE_SMARTCARD   0x1

Definition at line 285 of file settings_types.h.

◆ TSC_PROXY_CREDS_MODE_USERPASS

#define TSC_PROXY_CREDS_MODE_USERPASS   0x0

Definition at line 284 of file settings_types.h.

◆ TSC_PROXY_MODE_DEFAULT

#define TSC_PROXY_MODE_DEFAULT   0x3

Definition at line 280 of file settings_types.h.

◆ TSC_PROXY_MODE_DETECT

#define TSC_PROXY_MODE_DETECT   0x2

Definition at line 279 of file settings_types.h.

◆ TSC_PROXY_MODE_DIRECT

#define TSC_PROXY_MODE_DIRECT   0x1

Definition at line 278 of file settings_types.h.

◆ TSC_PROXY_MODE_NONE_DETECT

#define TSC_PROXY_MODE_NONE_DETECT   0x4

Definition at line 281 of file settings_types.h.

◆ TSC_PROXY_MODE_NONE_DIRECT

#define TSC_PROXY_MODE_NONE_DIRECT   0x0

Definition at line 277 of file settings_types.h.

◆ VCCAPS_COMPR_CS_8K

#define VCCAPS_COMPR_CS_8K   0x00000002

Definition at line 217 of file settings_types.h.

◆ VCCAPS_COMPR_SC

#define VCCAPS_COMPR_SC   0x00000001

Definition at line 216 of file settings_types.h.

◆ VCCAPS_NO_COMPR

#define VCCAPS_NO_COMPR   0x00000000

Definition at line 215 of file settings_types.h.

Enumeration Type Documentation

◆ FreeRDP_DesktopRotationFlags

enum FreeRDP_DesktopRotationFlags

Definition at line 331 of file settings_types.h.

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

◆ FreeRDP_OrderSupportFlagConstants

enum FreeRDP_OrderSupportFlagConstants

Definition at line 234 of file settings_types.h.

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

◆ FreeRDP_RDPDR_DTYP

enum FreeRDP_RDPDR_DTYP

Definition at line 442 of file settings_types.h.

446 {
447 RDPDR_DTYP_SERIAL = 0x00000001,
448 RDPDR_DTYP_PARALLEL = 0x00000002,
449 RDPDR_DTYP_PRINT = 0x00000004,

◆ rdp_settings_type

enum rdp_settings_type

Definition at line 499 of file settings_types.h.

503 {
504 RDP_SETTINGS_TYPE_BOOL,
505 RDP_SETTINGS_TYPE_UINT16,
506 RDP_SETTINGS_TYPE_INT16,
507 RDP_SETTINGS_TYPE_UINT32,
508 RDP_SETTINGS_TYPE_INT32,
509 RDP_SETTINGS_TYPE_UINT64,
510 RDP_SETTINGS_TYPE_INT64,

◆ RDP_VERSION

enum RDP_VERSION

Definition at line 106 of file settings_types.h.

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

Function Documentation

◆ freerdp_addin_argv_add_argument()

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

Definition at line 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()

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

FREERDP_API ADDIN_ARGV * freerdp_addin_argv_clone ( const ADDIN_ARGV args)

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

821{
822 union
823 {
824 char** c;
825 const char** cc;
826 } cnv;
827 if (!args)
828 return nullptr;
829 cnv.c = args->argv;
830 return freerdp_addin_argv_new(WINPR_ASSERTING_INT_CAST(uint32_t, args->argc), cnv.cc);
831}

◆ freerdp_addin_argv_del_argument()

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

Definition at line 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 const BOOL res =
85 memmove_s((void*)&args->argv[x],
86 (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x)) * sizeof(char*),
87 (void*)&args->argv[x + 1],
88 (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x - 1)) *
89 sizeof(char*)) >= 0;
90 args->argv[args->argc - 1] = nullptr;
91 args->argc--;
92 return res;
93 }
94 }
95 return FALSE;
96}

◆ freerdp_addin_argv_free()

FREERDP_API void freerdp_addin_argv_free ( ADDIN_ARGV args)

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

771{
772 if (!args)
773 return;
774
775 if (args->argv)
776 {
777 for (int index = 0; index < args->argc; index++)
778 free(args->argv[index]);
779 free((void*)args->argv);
780 }
781
782 free(args);
783}

◆ freerdp_addin_argv_new()

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

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

786{
787 if (argc > INT32_MAX)
788 return nullptr;
789
790 ADDIN_ARGV* args = calloc(1, sizeof(ADDIN_ARGV));
791 if (!args)
792 return nullptr;
793 if (argc == 0)
794 return args;
795
796 args->argc = (int)argc;
797 args->argv = (char**)calloc(argc, sizeof(char*));
798 if (!args->argv)
799 goto fail;
800
801 if (argv)
802 {
803 for (size_t x = 0; x < argc; x++)
804 {
805 args->argv[x] = _strdup(argv[x]);
806 if (!args->argv[x])
807 goto fail;
808 }
809 }
810 return args;
811
812fail:
813 WINPR_PRAGMA_DIAG_PUSH
814 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
815 freerdp_addin_argv_free(args);
816 WINPR_PRAGMA_DIAG_POP
817 return nullptr;
818}

◆ freerdp_addin_replace_argument()

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

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

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

◆ freerdp_addin_replace_argument_value()

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

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

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

◆ freerdp_addin_set_argument()

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

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

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

◆ freerdp_addin_set_argument_value()

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

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

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

◆ freerdp_capability_buffer_copy()

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

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

970{
971 WINPR_ASSERT(settings);
972 WINPR_ASSERT(src);
973
974 if (src->ReceivedCapabilitiesSize == 0)
975 return TRUE;
976
977 if (!freerdp_capability_buffer_resize(settings, src->ReceivedCapabilitiesSize, TRUE))
978 return FALSE;
979
980 for (UINT32 x = 0; x < src->ReceivedCapabilitiesSize; x++)
981 {
982 WINPR_ASSERT(settings->ReceivedCapabilities);
983 settings->ReceivedCapabilities[x] = src->ReceivedCapabilities[x];
984
985 WINPR_ASSERT(settings->ReceivedCapabilityDataSizes);
986 settings->ReceivedCapabilityDataSizes[x] = src->ReceivedCapabilityDataSizes[x];
987
988 WINPR_ASSERT(settings->ReceivedCapabilityData);
989 if (src->ReceivedCapabilityDataSizes[x] > 0)
990 {
991 void* tmp = realloc(settings->ReceivedCapabilityData[x],
992 settings->ReceivedCapabilityDataSizes[x]);
993 if (!tmp)
994 return FALSE;
995 memcpy(tmp, src->ReceivedCapabilityData[x], src->ReceivedCapabilityDataSizes[x]);
996 settings->ReceivedCapabilityData[x] = tmp;
997 }
998 else
999 {
1000 free(settings->ReceivedCapabilityData[x]);
1001 settings->ReceivedCapabilityData[x] = nullptr;
1002 }
1003 }
1004 return TRUE;
1005}

◆ freerdp_capability_buffer_free()

FREERDP_API void freerdp_capability_buffer_free ( rdpSettings *  settings)

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

875{
876 WINPR_ASSERT(settings);
877
878 freerdp_capability_data_free(settings, 0, TRUE);
879
880 free(settings->ReceivedCapabilityDataSizes);
881 settings->ReceivedCapabilityDataSizes = nullptr;
882
883 free(settings->ReceivedCapabilities);
884 settings->ReceivedCapabilities = nullptr;
885
886 settings->ReceivedCapabilitiesSize = 0;
887}

◆ freerdp_device_clone()

FREERDP_API RDPDR_DEVICE * freerdp_device_clone ( const RDPDR_DEVICE device)

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

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

◆ freerdp_device_collection_add()

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

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

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

◆ freerdp_device_collection_del()

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

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

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

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

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

◆ freerdp_device_collection_find()

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

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

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

◆ freerdp_device_collection_find_type()

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

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

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

◆ freerdp_device_collection_free()

FREERDP_API void freerdp_device_collection_free ( rdpSettings *  settings)

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

547{
548 WINPR_ASSERT(settings);
549
550 if (settings->DeviceArray)
551 {
552 for (UINT32 index = 0; index < settings->DeviceArraySize; index++)
553 {
554 const BOOL rc =
555 freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, index, nullptr);
556 if (!rc)
557 WLog_WARN(TAG,
558 "freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, "
559 "index=%" PRIu32 ", nullptr) failed",
560 index);
561 }
562 }
563
564 free((void*)settings->DeviceArray);
565
566 if (!freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, nullptr))
567 WLog_WARN(TAG,
568 "freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, nullptr) failed");
569 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0))
570 WLog_WARN(TAG, "freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0) failed");
571 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0))
572 WLog_WARN(TAG, "freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0) failed");
573}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_pointer(rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *val)
Set a pointer to value val.

◆ freerdp_device_equal()

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

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

2124{
2125 if (!what && !other)
2126 return TRUE;
2127 if (!what || !other)
2128 return FALSE;
2129
2130 if (what->Id != other->Id)
2131 return FALSE;
2132 if (what->Type != other->Type)
2133 return FALSE;
2134 if (what->Name && other->Name)
2135 {
2136 if (strcmp(what->Name, other->Name) != 0)
2137 return FALSE;
2138 }
2139 else
2140 {
2141 if (what->Name != other->Name)
2142 return FALSE;
2143 }
2144
2145 switch (what->Type)
2146 {
2147 case RDPDR_DTYP_PRINT:
2148 {
2149 const RDPDR_PRINTER* a = (const RDPDR_PRINTER*)what;
2150 const RDPDR_PRINTER* b = (const RDPDR_PRINTER*)other;
2151 if (a->DriverName && b->DriverName)
2152 return strcmp(a->DriverName, b->DriverName) == 0;
2153 return a->DriverName == b->DriverName;
2154 }
2155
2156 case RDPDR_DTYP_SERIAL:
2157 {
2158 const RDPDR_SERIAL* a = (const RDPDR_SERIAL*)what;
2159 const RDPDR_SERIAL* b = (const RDPDR_SERIAL*)other;
2160
2161 if (a->Path && b->Path)
2162 {
2163 if (strcmp(a->Path, b->Path) != 0)
2164 return FALSE;
2165 }
2166 else if (a->Path != b->Path)
2167 return FALSE;
2168
2169 if (a->Driver && b->Driver)
2170 {
2171 if (strcmp(a->Driver, b->Driver) != 0)
2172 return FALSE;
2173 }
2174 else if (a->Driver != b->Driver)
2175 return FALSE;
2176 if (a->Permissive && b->Permissive)
2177 return strcmp(a->Permissive, b->Permissive) == 0;
2178 return a->Permissive == b->Permissive;
2179 }
2180
2181 case RDPDR_DTYP_PARALLEL:
2182 {
2183 const RDPDR_PARALLEL* a = (const RDPDR_PARALLEL*)what;
2184 const RDPDR_PARALLEL* b = (const RDPDR_PARALLEL*)other;
2185 if (a->Path && b->Path)
2186 return strcmp(a->Path, b->Path) == 0;
2187 return a->Path == b->Path;
2188 }
2189
2190 case RDPDR_DTYP_SMARTCARD:
2191 break;
2192 case RDPDR_DTYP_FILESYSTEM:
2193 {
2194 const RDPDR_DRIVE* a = (const RDPDR_DRIVE*)what;
2195 const RDPDR_DRIVE* b = (const RDPDR_DRIVE*)other;
2196 if (a->automount != b->automount)
2197 return FALSE;
2198 if (a->Path && b->Path)
2199 return strcmp(a->Path, b->Path) == 0;
2200 return a->Path == b->Path;
2201 }
2202
2203 default:
2204 return FALSE;
2205 }
2206
2207 return TRUE;
2208}

◆ freerdp_device_free()

FREERDP_API void freerdp_device_free ( RDPDR_DEVICE device)

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

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

◆ freerdp_device_new()

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

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

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

◆ freerdp_dynamic_channel_collection_add()

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

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

719{
720 UINT32 count = 0;
721 UINT32 oldSize = 0;
722
723 WINPR_ASSERT(settings);
724 WINPR_ASSERT(channel);
725
726 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount) + 1;
727 oldSize = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
728 if (oldSize < count)
729 {
730
731 const size_t size = oldSize + 32;
732 ADDIN_ARGV** new_array =
733 (ADDIN_ARGV**)realloc((void*)settings->DynamicChannelArray, sizeof(ADDIN_ARGV*) * size);
734
735 if (!new_array)
736 return FALSE;
737
738 settings->DynamicChannelArray = new_array;
739 {
740 for (size_t x = oldSize; x < size; x++)
741 settings->DynamicChannelArray[x] = nullptr;
742 }
743 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize,
744 WINPR_ASSERTING_INT_CAST(uint32_t, size)))
745 return FALSE;
746 }
747
748 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
749 settings->DynamicChannelArray[count++] = channel;
750 return freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count);
751}

◆ freerdp_dynamic_channel_collection_del()

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

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

688{
689 const UINT32 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
690 if (!settings || !settings->DynamicChannelArray)
691 return FALSE;
692
693 for (UINT32 x = 0; x < count; x++)
694 {
695 ADDIN_ARGV* cur = settings->DynamicChannelArray[x];
696 if (cur && (cur->argc > 0))
697 {
698 if (strcmp(name, cur->argv[0]) == 0)
699 {
700 const BOOL success = memmove_s((void*)&settings->DynamicChannelArray[x],
701 (count - x) * sizeof(ADDIN_ARGV*),
702 (void*)&settings->DynamicChannelArray[x + 1],
703 (count - x - 1) * sizeof(ADDIN_ARGV*)) >= 0;
704 for (size_t y = count - 1; y < settings->DynamicChannelArraySize; y++)
705 settings->DynamicChannelArray[y] = nullptr;
706
707 freerdp_addin_argv_free(cur);
708 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count - 1))
709 return FALSE;
710 return success;
711 }
712 }
713 }
714
715 return FALSE;
716}

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

754{
755 WINPR_ASSERT(settings);
756 WINPR_ASSERT(name);
757
758 for (UINT32 index = 0;
759 index < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount); index++)
760 {
761 ADDIN_ARGV* channel = settings->DynamicChannelArray[index];
762
763 if (strcmp(channel->argv[0], name) == 0)
764 return channel;
765 }
766
767 return nullptr;
768}

◆ freerdp_dynamic_channel_collection_free()

FREERDP_API void freerdp_dynamic_channel_collection_free ( rdpSettings *  settings)

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

834{
835 WINPR_ASSERT(settings);
836
837 if (settings->DynamicChannelArray)
838 {
839 for (UINT32 i = 0;
840 i < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize); i++)
841 freerdp_addin_argv_free(settings->DynamicChannelArray[i]);
842 }
843
844 free((void*)settings->DynamicChannelArray);
845 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0))
846 WLog_WARN(
847 TAG,
848 "freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0) failed");
849 settings->DynamicChannelArray = nullptr;
850 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0))
851 WLog_WARN(TAG,
852 "freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0) failed");
853}

◆ freerdp_encryption_level_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_encryption_level_string ( UINT32  EncryptionLevel)

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

2382{
2383 switch (EncryptionLevel)
2384 {
2385 case ENCRYPTION_LEVEL_NONE:
2386 return "ENCRYPTION_LEVEL_NONE";
2387 case ENCRYPTION_LEVEL_LOW:
2388 return "ENCRYPTION_LEVEL_LOW";
2389 case ENCRYPTION_LEVEL_CLIENT_COMPATIBLE:
2390 return "ENCRYPTION_LEVEL_CLIENT_COMPATIBLE";
2391 case ENCRYPTION_LEVEL_HIGH:
2392 return "ENCRYPTION_LEVEL_HIGH";
2393 case ENCRYPTION_LEVEL_FIPS:
2394 return "ENCRYPTION_LEVEL_FIPS";
2395 default:
2396 return "ENCRYPTION_LEVEL_UNKNOWN";
2397 }
2398}

◆ freerdp_encryption_methods_string()

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

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

2401{
2402 if (EncryptionMethods == ENCRYPTION_METHOD_NONE)
2403 {
2404 winpr_str_append("ENCRYPTION_METHOD_NONE", buffer, size, "|");
2405 return buffer;
2406 }
2407
2408 if (EncryptionMethods & ENCRYPTION_METHOD_40BIT)
2409 {
2410 winpr_str_append("ENCRYPTION_METHOD_40BIT", buffer, size, "|");
2411 }
2412 if (EncryptionMethods & ENCRYPTION_METHOD_128BIT)
2413 {
2414 winpr_str_append("ENCRYPTION_METHOD_128BIT", buffer, size, "|");
2415 }
2416 if (EncryptionMethods & ENCRYPTION_METHOD_56BIT)
2417 {
2418 winpr_str_append("ENCRYPTION_METHOD_56BIT", buffer, size, "|");
2419 }
2420 if (EncryptionMethods & ENCRYPTION_METHOD_FIPS)
2421 {
2422 winpr_str_append("ENCRYPTION_METHOD_FIPS", buffer, size, "|");
2423 }
2424
2425 return buffer;
2426}

◆ freerdp_get_gateway_usage_method()

WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_get_gateway_usage_method ( const rdpSettings *  settings)

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

1200{
1201 if (freerdp_settings_get_bool(settings, FreeRDP_GatewayEnabled))
1202 {
1203 if (freerdp_settings_get_bool(settings, FreeRDP_GatewayBypassLocal))
1204 return TSC_PROXY_MODE_DETECT;
1205 return TSC_PROXY_MODE_DIRECT;
1206 }
1207
1208 return freerdp_settings_get_uint32(settings, FreeRDP_GatewayUsageMethod);
1209}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_get_bool(const rdpSettings *settings, FreeRDP_Settings_Keys_Bool id)
Returns a boolean settings value.

◆ freerdp_performance_flags_make()

FREERDP_API void freerdp_performance_flags_make ( rdpSettings *  settings)

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

1091{
1092 UINT32 PerformanceFlags = PERF_FLAG_NONE;
1093
1094 if (freerdp_settings_get_bool(settings, FreeRDP_AllowFontSmoothing))
1095 PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
1096
1097 if (freerdp_settings_get_bool(settings, FreeRDP_AllowDesktopComposition))
1098 PerformanceFlags |= PERF_ENABLE_DESKTOP_COMPOSITION;
1099
1100 if (freerdp_settings_get_bool(settings, FreeRDP_DisableWallpaper))
1101 PerformanceFlags |= PERF_DISABLE_WALLPAPER;
1102
1103 if (freerdp_settings_get_bool(settings, FreeRDP_DisableFullWindowDrag))
1104 PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
1105
1106 if (freerdp_settings_get_bool(settings, FreeRDP_DisableMenuAnims))
1107 PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
1108
1109 if (freerdp_settings_get_bool(settings, FreeRDP_DisableThemes))
1110 PerformanceFlags |= PERF_DISABLE_THEMING;
1111 if (!freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags))
1112 WLog_WARN(TAG,
1113 "freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, 0x%08" PRIx32
1114 ") failed",
1115 PerformanceFlags);
1116}

◆ freerdp_performance_flags_split()

FREERDP_API void freerdp_performance_flags_split ( rdpSettings *  settings)

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

1119{
1120 BOOL res =
1121 freerdp_settings_set_bool(settings, FreeRDP_AllowFontSmoothing,
1122 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1123 PERF_ENABLE_FONT_SMOOTHING) != 0);
1125 settings, FreeRDP_AllowDesktopComposition,
1126 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1127 PERF_ENABLE_DESKTOP_COMPOSITION) != 0))
1128 res = FALSE;
1130 settings, FreeRDP_DisableWallpaper,
1131 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1132 PERF_DISABLE_WALLPAPER) != 0))
1133 res = FALSE;
1135 settings, FreeRDP_DisableFullWindowDrag,
1136 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1137 PERF_DISABLE_FULLWINDOWDRAG) != 0))
1138 res = FALSE;
1140 settings, FreeRDP_DisableMenuAnims,
1141 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1142 PERF_DISABLE_MENUANIMATIONS) != 0))
1143 res = FALSE;
1145 settings, FreeRDP_DisableThemes,
1146 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1147 PERF_DISABLE_THEMING) != 0))
1148 res = FALSE;
1149 if (!res)
1150 {
1151 WLog_WARN(TAG, "freerdp_performance_flags_split() failed");
1152 }
1153}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_bool(rdpSettings *settings, FreeRDP_Settings_Keys_Bool id, BOOL val)
Sets a BOOL settings value.

◆ freerdp_rail_support_flags_to_string()

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

Returns a stringified representation of RAIL support flags.

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

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

2211{
2212 const UINT32 mask =
2213 RAIL_LEVEL_SUPPORTED | RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED |
2214 RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED | RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED |
2215 RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED | RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED |
2216 RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED | RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED;
2217
2218 if (flags & RAIL_LEVEL_SUPPORTED)
2219 winpr_str_append("RAIL_LEVEL_SUPPORTED", buffer, length, "|");
2220 if (flags & RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED)
2221 winpr_str_append("RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED", buffer, length, "|");
2222 if (flags & RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED)
2223 winpr_str_append("RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED", buffer, length, "|");
2224 if (flags & RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED)
2225 winpr_str_append("RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED", buffer, length, "|");
2226 if (flags & RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED)
2227 winpr_str_append("RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED", buffer, length, "|");
2228 if (flags & RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED)
2229 winpr_str_append("RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED", buffer, length, "|");
2230 if (flags & RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED)
2231 winpr_str_append("RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED", buffer, length, "|");
2232 if (flags & RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED)
2233 winpr_str_append("RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED", buffer, length, "|");
2234 if (flags & RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED)
2235 winpr_str_append("RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED", buffer, length, "|");
2236 if ((flags & ~mask) != 0)
2237 {
2238 char tbuffer[64] = WINPR_C_ARRAY_INIT;
2239 (void)_snprintf(tbuffer, sizeof(tbuffer), "RAIL_FLAG_UNKNOWN 0x%08" PRIx32, flags & mask);
2240 winpr_str_append(tbuffer, buffer, length, "|");
2241 }
2242 return buffer;
2243}

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

2273{
2274 switch (version)
2275 {
2276 case RDP_VERSION_4:
2277 return "RDP_VERSION_4";
2278 case RDP_VERSION_5_PLUS:
2279 return "RDP_VERSION_5_PLUS";
2280 case RDP_VERSION_10_0:
2281 return "RDP_VERSION_10_0";
2282 case RDP_VERSION_10_1:
2283 return "RDP_VERSION_10_1";
2284 case RDP_VERSION_10_2:
2285 return "RDP_VERSION_10_2";
2286 case RDP_VERSION_10_3:
2287 return "RDP_VERSION_10_3";
2288 case RDP_VERSION_10_4:
2289 return "RDP_VERSION_10_4";
2290 case RDP_VERSION_10_5:
2291 return "RDP_VERSION_10_5";
2292 case RDP_VERSION_10_6:
2293 return "RDP_VERSION_10_6";
2294 case RDP_VERSION_10_7:
2295 return "RDP_VERSION_10_7";
2296 case RDP_VERSION_10_8:
2297 return "RDP_VERSION_10_8";
2298 case RDP_VERSION_10_9:
2299 return "RDP_VERSION_10_9";
2300 case RDP_VERSION_10_10:
2301 return "RDP_VERSION_10_10";
2302 case RDP_VERSION_10_11:
2303 return "RDP_VERSION_10_11";
2304 case RDP_VERSION_10_12:
2305 return "RDP_VERSION_10_12";
2306 default:
2307 return "RDP_VERSION_UNKNOWN";
2308 }
2309}

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

2363{
2364 switch (type)
2365 {
2366 case RDPDR_DTYP_FILESYSTEM:
2367 return "RDPDR_DTYP_FILESYSTEM";
2368 case RDPDR_DTYP_PARALLEL:
2369 return "RDPDR_DTYP_PARALLEL";
2370 case RDPDR_DTYP_PRINT:
2371 return "RDPDR_DTYP_PRINT";
2372 case RDPDR_DTYP_SERIAL:
2373 return "RDPDR_DTYP_SERIAL";
2374 case RDPDR_DTYP_SMARTCARD:
2375 return "RDPDR_DTYP_SMARTCARD";
2376 default:
2377 return "RDPDR_DTYP_UNKNOWN";
2378 }
2379}

◆ freerdp_server_license_issuers_copy()

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

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

1071{
1072 WINPR_ASSERT(settings);
1073 WINPR_ASSERT(issuers || (count == 0));
1074
1075 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_ServerLicenseProductIssuers, nullptr,
1076 count))
1077 return FALSE;
1078
1079 for (UINT32 x = 0; x < count; x++)
1080 {
1081 char* issuer = _strdup(issuers[x]);
1082 if (!issuer)
1083 return FALSE;
1084 settings->ServerLicenseProductIssuers[x] = issuer;
1085 }
1086
1087 return TRUE;
1088}
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 1056 of file common/settings.c.

1057{
1058 WINPR_ASSERT(settings);
1059
1060 if (settings->ServerLicenseProductIssuers)
1061 {
1062 for (UINT32 x = 0; x < settings->ServerLicenseProductIssuersCount; x++)
1063 free(settings->ServerLicenseProductIssuers[x]);
1064 }
1065 free((void*)settings->ServerLicenseProductIssuers);
1066 settings->ServerLicenseProductIssuers = nullptr;
1067 settings->ServerLicenseProductIssuersCount = 0;
1068}

◆ freerdp_set_gateway_usage_method()

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

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

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

1156{
1157 if (!freerdp_settings_set_uint32(settings, FreeRDP_GatewayUsageMethod, GatewayUsageMethod))
1158 return FALSE;
1159
1160 if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DIRECT)
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 else if (GatewayUsageMethod == TSC_PROXY_MODE_DIRECT)
1167 {
1168 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1169 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1170 return FALSE;
1171 }
1172 else if (GatewayUsageMethod == TSC_PROXY_MODE_DETECT)
1173 {
1174 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1175 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, TRUE))
1176 return FALSE;
1177 }
1178 else if (GatewayUsageMethod == TSC_PROXY_MODE_DEFAULT)
1179 {
1185 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1186 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1187 return FALSE;
1188 }
1189 else if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DETECT)
1190 {
1191 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1192 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1193 return FALSE;
1194 }
1195
1196 return TRUE;
1197}

References freerdp_settings_set_bool(), and freerdp_settings_set_uint32().

Here is the call graph for this function:

◆ freerdp_settings_append_string()

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

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

<old value><separator><param>

is created

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

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

2455{
2456 const char* old = freerdp_settings_get_string(settings, id);
2457
2458 size_t len = 0;
2459 char* str = nullptr;
2460
2461 if (!old)
2462 winpr_asprintf(&str, &len, "%s", param);
2463 else if (!separator)
2464 winpr_asprintf(&str, &len, "%s%s", old, param);
2465 else
2466 winpr_asprintf(&str, &len, "%s%s%s", old, separator, param);
2467
2468 const BOOL rc = freerdp_settings_set_string_len(settings, id, str, len);
2469 free(str);
2470 return rc;
2471}
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_string(const rdpSettings *settings, FreeRDP_Settings_Keys_String id)
Returns a immutable string settings value.
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_string_len(rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *val, size_t len)
Sets a string settings value. The val is copied.

References freerdp_settings_get_string(), and freerdp_settings_set_string_len().

Here is the call graph for this function:

◆ freerdp_settings_are_valid()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_are_valid ( const rdpSettings *  settings)

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

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

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

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

2474{
2475 return settings != nullptr;
2476}

◆ freerdp_settings_clone()

FREERDP_API rdpSettings * freerdp_settings_clone ( const rdpSettings *  settings)

Creates a deep copy of settings.

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

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

1615{
1616 rdpSettings* dst = (rdpSettings*)calloc(1, sizeof(rdpSettings));
1617
1618 if (!freerdp_settings_copy(dst, settings))
1619 goto out_fail;
1620
1621 return dst;
1622out_fail:
1623 WINPR_PRAGMA_DIAG_PUSH
1624 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1626 WINPR_PRAGMA_DIAG_POP
1627 return nullptr;
1628}
BOOL freerdp_settings_copy(rdpSettings *dst, const rdpSettings *src)
Deep copies settings from src to dst.
void freerdp_settings_free(rdpSettings *settings)
Free a settings struct with all data in it.

References freerdp_settings_copy(), and freerdp_settings_free().

Here is the call graph for this function:

◆ freerdp_settings_copy()

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

Deep copies settings from src to dst.

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

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

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

1589{
1590 BOOL rc = 0;
1591
1592 if (!dst || !src)
1593 return FALSE;
1594
1595 /* This is required to free all non string buffers */
1596 freerdp_settings_free_internal(dst);
1597
1598 /* This copies everything except allocated non string buffers. reset all allocated buffers to
1599 * nullptr to fix issues during cleanup */
1600 rc = freerdp_settings_clone_keys(dst, src);
1601 if (!rc)
1602 goto out_fail;
1603 freerdp_settings_free_internal_ensure_reset(dst);
1604
1605 /* Begin copying */
1606 if (!freerdp_settings_int_buffer_copy(dst, src))
1607 goto out_fail;
1608 return TRUE;
1609out_fail:
1610 freerdp_settings_free_internal(dst);
1611 return FALSE;
1612}

Referenced by freerdp_settings_clone().

Here is the caller graph for this function:

◆ freerdp_settings_copy_item()

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

copies one setting identified by id from src to dst

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

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

Definition at line 443 of file settings_str.c.

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

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

Here is the call graph for this function:

◆ freerdp_settings_deserialize()

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

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

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

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

4361{
4362 WINPR_JSON* json = WINPR_JSON_ParseWithLength(jstr, length);
4363 if (!json)
4364 return nullptr;
4365
4366 WINPR_JSON* jbool = WINPR_JSON_GetObjectItemCaseSensitive(
4367 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_BOOL));
4368 WINPR_JSON* juint16 = WINPR_JSON_GetObjectItemCaseSensitive(
4369 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT16));
4370 WINPR_JSON* jint16 = WINPR_JSON_GetObjectItemCaseSensitive(
4371 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT16));
4372 WINPR_JSON* juint32 = WINPR_JSON_GetObjectItemCaseSensitive(
4373 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT32));
4374 WINPR_JSON* jint32 = WINPR_JSON_GetObjectItemCaseSensitive(
4375 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT32));
4376 WINPR_JSON* juint64 = WINPR_JSON_GetObjectItemCaseSensitive(
4377 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT64));
4378 WINPR_JSON* jint64 = WINPR_JSON_GetObjectItemCaseSensitive(
4379 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT64));
4380 WINPR_JSON* jstring = WINPR_JSON_GetObjectItemCaseSensitive(
4381 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_STRING));
4382 WINPR_JSON* jpointer = WINPR_JSON_GetObjectItemCaseSensitive(
4383 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_POINTER));
4384
4385 rdpSettings* settings = freerdp_settings_new(0);
4386 if (!settings)
4387 goto fail;
4388 if (!jbool || !juint16 || !jint16 || !juint32 || !jint32 || !juint64 || !jint64 || !jstring ||
4389 !jpointer)
4390 goto fail;
4391
4392 for (int x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
4393 {
4394 union
4395 {
4396
4397 int s;
4398 FreeRDP_Settings_Keys_Bool b;
4399 FreeRDP_Settings_Keys_Int16 i16;
4400 FreeRDP_Settings_Keys_UInt16 u16;
4401 FreeRDP_Settings_Keys_Int32 i32;
4402 FreeRDP_Settings_Keys_UInt32 u32;
4403 FreeRDP_Settings_Keys_Int64 i64;
4404 FreeRDP_Settings_Keys_UInt64 u64;
4405 FreeRDP_Settings_Keys_String str;
4406 FreeRDP_Settings_Keys_Pointer ptr;
4407 } iter;
4408 iter.s = x;
4409
4410 SSIZE_T type = freerdp_settings_get_type_for_key(iter.s);
4411 switch (type)
4412 {
4413 case RDP_SETTINGS_TYPE_POINTER:
4414 if (!deserialize_pointer(jpointer, settings, iter.ptr))
4415 goto fail;
4416 break;
4417 default:
4418 break;
4419 }
4420 }
4421
4422 for (int x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
4423 {
4424 union
4425 {
4426
4427 int s;
4428 FreeRDP_Settings_Keys_Bool b;
4429 FreeRDP_Settings_Keys_Int16 i16;
4430 FreeRDP_Settings_Keys_UInt16 u16;
4431 FreeRDP_Settings_Keys_Int32 i32;
4432 FreeRDP_Settings_Keys_UInt32 u32;
4433 FreeRDP_Settings_Keys_Int64 i64;
4434 FreeRDP_Settings_Keys_UInt64 u64;
4435 FreeRDP_Settings_Keys_String str;
4436 FreeRDP_Settings_Keys_Pointer ptr;
4437 } iter;
4438 iter.s = x;
4439
4440 const char* name = freerdp_settings_get_name_for_key(iter.s);
4441 SSIZE_T type = freerdp_settings_get_type_for_key(iter.s);
4442 switch (type)
4443 {
4444 case RDP_SETTINGS_TYPE_BOOL:
4445 {
4446 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(jbool, name);
4447 if (!item)
4448 goto fail;
4449 if (!WINPR_JSON_IsBool(item))
4450 goto fail;
4451 const BOOL val = WINPR_JSON_IsTrue(item);
4452 if (!freerdp_settings_set_bool(settings, iter.b, val))
4453 goto fail;
4454 }
4455 break;
4456 case RDP_SETTINGS_TYPE_UINT16:
4457 {
4458 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(juint16, name);
4459 const uint16_t val = (uint16_t)uint_from_json_item(item, UINT16_MAX);
4460 if (errno != 0)
4461 goto fail;
4462 if (!freerdp_settings_set_uint16(settings, iter.u16, val))
4463 goto fail;
4464 }
4465 break;
4466 case RDP_SETTINGS_TYPE_INT16:
4467 {
4468 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(jint16, name);
4469 const int16_t val = (int16_t)int_from_json_item(item, INT16_MIN, INT16_MAX);
4470 if (errno != 0)
4471 goto fail;
4472 if (!freerdp_settings_set_int16(settings, iter.i16, val))
4473 goto fail;
4474 }
4475 break;
4476 case RDP_SETTINGS_TYPE_UINT32:
4477 {
4478 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(juint32, name);
4479 const uint32_t val = (uint32_t)uint_from_json_item(item, UINT32_MAX);
4480 if (errno != 0)
4481 goto fail;
4482 if (!freerdp_settings_set_uint32(settings, iter.u32, val))
4483 goto fail;
4484 }
4485 break;
4486 case RDP_SETTINGS_TYPE_INT32:
4487 {
4488 const int64_t val = int_from_json(jint32, name, INT32_MIN, INT32_MAX);
4489 if (errno != 0)
4490 goto fail;
4491 if (!freerdp_settings_set_int32(settings, iter.i32, (int32_t)val))
4492 goto fail;
4493 }
4494 break;
4495 case RDP_SETTINGS_TYPE_UINT64:
4496 {
4497 const uint64_t val = uint_from_json(juint64, name, UINT64_MAX);
4498 if (errno != 0)
4499 goto fail;
4500 if (!freerdp_settings_set_uint64(settings, iter.u64, val))
4501 goto fail;
4502 }
4503 break;
4504 case RDP_SETTINGS_TYPE_INT64:
4505 {
4506 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(jint64, name);
4507 const int64_t val = int_from_json_item(item, INT64_MIN, INT64_MAX);
4508 if (errno != 0)
4509 goto fail;
4510 if (!freerdp_settings_set_int64(settings, iter.i64, val))
4511 goto fail;
4512 }
4513 break;
4514 case RDP_SETTINGS_TYPE_STRING:
4515 {
4516 const char* val = nullptr;
4517 WINPR_JSON* item = WINPR_JSON_GetObjectItemCaseSensitive(jstring, name);
4518 if (item && !WINPR_JSON_IsNull(item))
4519 {
4520 if (!WINPR_JSON_IsString(item))
4521 goto fail;
4522 val = WINPR_JSON_GetStringValue(item);
4523 if (!val)
4524 goto fail;
4525 }
4526 if (!freerdp_settings_set_string(settings, iter.str, val))
4527 goto fail;
4528 }
4529 break;
4530 case RDP_SETTINGS_TYPE_POINTER:
4531 default:
4532 break;
4533 }
4534 }
4535
4536 WINPR_JSON_Delete(json);
4537 return settings;
4538
4539fail:
4540 freerdp_settings_free(settings);
4541 WINPR_JSON_Delete(json);
4542 return nullptr;
4543}
WINPR_ATTR_NODISCARD WINPR_API BOOL WINPR_JSON_IsNull(const WINPR_JSON *item)
Check if JSON item is Null.
Definition c-json.c:172
WINPR_ATTR_NODISCARD WINPR_API BOOL WINPR_JSON_IsBool(const WINPR_JSON *item)
Check if JSON item is of type BOOL.
Definition c-json.c:167
WINPR_ATTR_NODISCARD 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 WINPR_API WINPR_JSON * WINPR_JSON_GetObjectItemCaseSensitive(const WINPR_JSON *object, const char *string)
Same as WINPR_JSON_GetObjectItem but with case sensitive matching.
Definition c-json.c:127
WINPR_API WINPR_JSON * WINPR_JSON_ParseWithLength(const char *value, size_t buffer_length)
Parse a JSON string.
Definition c-json.c:98
WINPR_ATTR_NODISCARD 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 void WINPR_JSON_Delete(WINPR_JSON *item)
Delete a WinPR JSON wrapper object.
Definition c-json.c:103
WINPR_ATTR_NODISCARD WINPR_API const char * WINPR_JSON_GetStringValue(WINPR_JSON *item)
Return the String value of a JSON item.
Definition c-json.c:142
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_type(SSIZE_T type)
Returns the type name for a type.
FREERDP_API rdpSettings * freerdp_settings_new(DWORD flags)
creates a new setting struct
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_name_for_key(SSIZE_T key)
Returns the type name for a key.

References freerdp_settings_free(), freerdp_settings_get_name_for_key(), freerdp_settings_get_type_for_key(), freerdp_settings_get_type_name_for_type(), freerdp_settings_new(), 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 nullptr
levelThe WLog level to use for the log entries
settingsA pointer to the settings to dump. May be nullptr.

Definition at line 249 of file settings_str.c.

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

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

Here is the call graph for this function:

◆ freerdp_settings_free()

FREERDP_API void freerdp_settings_free ( rdpSettings *  settings)

Free a settings struct with all data in it.

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

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

1373{
1374 if (!settings)
1375 return;
1376
1377 freerdp_settings_free_internal(settings);
1378 free(settings);
1379}

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

Here is the caller graph for this function:

◆ freerdp_settings_get_bool()

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

Returns a boolean settings value.

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

Referenced by freerdp_settings_copy_item(), freerdp_settings_dump(), freerdp_settings_new(), freerdp_settings_print_diff(), freerdp_settings_serialize(), 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 2064 of file common/settings.c.

2065{
2066 UINT32 flags = FREERDP_CODEC_ALL;
2067 if (settings->RemoteFxCodec == FALSE)
2068 {
2069 flags &= (uint32_t)~FREERDP_CODEC_REMOTEFX;
2070 }
2071 if (settings->NSCodec == FALSE)
2072 {
2073 flags &= (uint32_t)~FREERDP_CODEC_NSCODEC;
2074 }
2075 /*TODO: check other codecs flags */
2076 return flags;
2077}

◆ freerdp_settings_get_config_path()

WINPR_ATTR_NODISCARD FREERDP_API char * freerdp_settings_get_config_path ( void  )

return the configuration directory for the library

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

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

809{
810 return freerdp_GetConfigFilePath(FALSE, "");
811}

Referenced by freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_get_int16()

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

Returns a INT16 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_int32()

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

Returns a INT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_int64()

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

Returns a INT64 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_key_for_name()

WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_key_for_name ( const char *  value)

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

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

Definition at line 362 of file settings_str.c.

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

◆ freerdp_settings_get_name_for_key()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_name_for_key ( SSIZE_T  key)

Returns the type name for a key.

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

Definition at line 432 of file settings_str.c.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_pointer()

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

Returns a immutable pointer settings value.

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

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

1477{
1478 union
1479 {
1480 const rdpSettings* pc;
1481 rdpSettings* p;
1482 } cnv;
1483 cnv.pc = settings;
1484 return freerdp_settings_get_pointer_writable(cnv.p, id);
1485}
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 2058 of file common/settings.c.

2060{
2061 return freerdp_settings_get_pointer_array_writable(settings, id, offset);
2062}

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

1711{
1712 size_t max = 0;
1713 if (!settings)
1714 return nullptr;
1715 switch (id)
1716 {
1717 case FreeRDP_ClientAutoReconnectCookie:
1718 max = 1;
1719 if ((offset >= max) || !settings->ClientAutoReconnectCookie)
1720 goto fail;
1721 return &settings->ClientAutoReconnectCookie[offset];
1722 case FreeRDP_ServerAutoReconnectCookie:
1723 max = 1;
1724 if ((offset >= max) || !settings->ServerAutoReconnectCookie)
1725 goto fail;
1726 return &settings->ServerAutoReconnectCookie[offset];
1727 case FreeRDP_ServerCertificate:
1728 max = freerdp_settings_get_uint32(settings, FreeRDP_ServerCertificateLength);
1729 if (offset >= max)
1730 goto fail;
1731 return &settings->ServerCertificate[offset];
1732 case FreeRDP_ServerRandom:
1733 max = freerdp_settings_get_uint32(settings, FreeRDP_ServerRandomLength);
1734 if (offset >= max)
1735 goto fail;
1736 return &settings->ServerRandom[offset];
1737 case FreeRDP_ClientRandom:
1738 max = freerdp_settings_get_uint32(settings, FreeRDP_ClientRandomLength);
1739 if (offset >= max)
1740 goto fail;
1741 return &settings->ClientRandom[offset];
1742 case FreeRDP_LoadBalanceInfo:
1743 max = freerdp_settings_get_uint32(settings, FreeRDP_LoadBalanceInfoLength);
1744 if (offset >= max)
1745 goto fail;
1746 return &settings->LoadBalanceInfo[offset];
1747
1748 case FreeRDP_RedirectionTsvUrl:
1749 max = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionTsvUrlLength);
1750 if (offset >= max)
1751 goto fail;
1752 return &settings->RedirectionTsvUrl[offset];
1753
1754 case FreeRDP_RedirectionPassword:
1755 max = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionPasswordLength);
1756 if (offset >= max)
1757 goto fail;
1758 return &settings->RedirectionPassword[offset];
1759
1760 case FreeRDP_OrderSupport:
1761 max = 32;
1762 if (offset >= max)
1763 goto fail;
1764 return &settings->OrderSupport[offset];
1765 case FreeRDP_MonitorIds:
1766 max = freerdp_settings_get_uint32(settings, FreeRDP_NumMonitorIds);
1767 if (offset >= max)
1768 goto fail;
1769 return &settings->MonitorIds[offset];
1770 case FreeRDP_MonitorDefArray:
1771 max = freerdp_settings_get_uint32(settings, FreeRDP_MonitorDefArraySize);
1772 if (offset >= max)
1773 goto fail;
1774 return &settings->MonitorDefArray[offset];
1775 case FreeRDP_ChannelDefArray:
1776 max = freerdp_settings_get_uint32(settings, FreeRDP_ChannelDefArraySize);
1777 if (offset >= max)
1778 goto fail;
1779 return &settings->ChannelDefArray[offset];
1780 case FreeRDP_DeviceArray:
1781 max = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
1782 if (offset >= max)
1783 goto fail;
1784 return settings->DeviceArray[offset];
1785 case FreeRDP_StaticChannelArray:
1786 max = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
1787 if (offset >= max)
1788 goto fail;
1789 return settings->StaticChannelArray[offset];
1790 case FreeRDP_DynamicChannelArray:
1791 max = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
1792 if (offset >= max)
1793 goto fail;
1794 return settings->DynamicChannelArray[offset];
1795 case FreeRDP_FragCache:
1796 max = 1;
1797 if (offset >= max)
1798 goto fail;
1799 return &settings->FragCache[offset];
1800 case FreeRDP_GlyphCache:
1801 max = 10;
1802 if (offset >= max)
1803 goto fail;
1804 return &settings->GlyphCache[offset];
1805 case FreeRDP_BitmapCacheV2CellInfo:
1806 max = freerdp_settings_get_uint32(settings, FreeRDP_BitmapCacheV2NumCells);
1807 if (offset >= max)
1808 goto fail;
1809 return &settings->BitmapCacheV2CellInfo[offset];
1810 case FreeRDP_ReceivedCapabilities:
1811 max = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
1812 if (offset >= max)
1813 goto fail;
1814 return &settings->ReceivedCapabilities[offset];
1815 case FreeRDP_TargetNetAddresses:
1816 max = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1817 if (offset >= max)
1818 goto fail;
1819 WINPR_ASSERT(settings->TargetNetAddresses);
1820 return settings->TargetNetAddresses[offset];
1821 case FreeRDP_TargetNetPorts:
1822 max = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1823 if (offset >= max)
1824 goto fail;
1825 WINPR_ASSERT(settings->TargetNetPorts);
1826 return &settings->TargetNetPorts[offset];
1827 case FreeRDP_ClientTimeZone:
1828 max = 1;
1829 if (offset >= max)
1830 goto fail;
1831 return settings->ClientTimeZone;
1832 case FreeRDP_RdpServerCertificate:
1833 max = 1;
1834 if (offset >= max)
1835 goto fail;
1836 return settings->RdpServerCertificate;
1837 case FreeRDP_RdpServerRsaKey:
1838 max = 1;
1839 if (offset >= max)
1840 goto fail;
1841 return settings->RdpServerRsaKey;
1842 case FreeRDP_ServerLicenseProductIssuers:
1843 max = freerdp_settings_get_uint32(settings, FreeRDP_ServerLicenseProductIssuersCount);
1844 if (offset >= max)
1845 goto fail;
1846 return settings->ServerLicenseProductIssuers[offset];
1847 case FreeRDP_ReceivedCapabilityData:
1848 max = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
1849 if (offset >= max)
1850 goto fail;
1851 WINPR_ASSERT(settings->ReceivedCapabilityData);
1852 return settings->ReceivedCapabilityData[offset];
1853
1854 case FreeRDP_ReceivedCapabilityDataSizes:
1855 max = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
1856 if (offset >= max)
1857 goto fail;
1858 WINPR_ASSERT(settings->ReceivedCapabilityDataSizes);
1859 return &settings->ReceivedCapabilityDataSizes[offset];
1860 default:
1861 WLog_WARN(TAG, "Invalid id %s [%d]", freerdp_settings_get_name_for_key(id), id);
1862 return nullptr;
1863 }
1864
1865fail:
1866 WLog_WARN(TAG, "Invalid offset for %s [%d]: size=%" PRIuz ", offset=%" PRIuz,
1867 freerdp_settings_get_name_for_key(id), id, max, offset);
1868 return nullptr;
1869}

◆ freerdp_settings_get_pointer_writable()

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

Returns a mutable pointer settings value.

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

Definition at line 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 nullptr;
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 nullptr.
Returns
A string pointer or nullptr in case of failure.

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

2080{
2081 WINPR_ASSERT(settings);
2082 const char* hostname = settings->ServerHostname;
2083
2084 if (settings->UserSpecifiedServerName)
2085 hostname = settings->UserSpecifiedServerName;
2086
2087 return hostname;
2088}

◆ freerdp_settings_get_string()

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

Returns a immutable string settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_string_as_utf16()

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

Return an allocated UTF16 string.

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

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

2353{
2354 const char* str = freerdp_settings_get_string(settings, id);
2355 if (pCharLen)
2356 *pCharLen = 0;
2357 if (!str)
2358 return nullptr;
2359 return ConvertUtf8ToWCharAlloc(str, pCharLen);
2360}

References freerdp_settings_get_string().

Here is the call graph for this function:

◆ freerdp_settings_get_string_writable()

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

Returns a string settings value.

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

Definition at line 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 nullptr;
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 421 of file settings_str.c.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_type_for_name()

WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_name ( const char *  value)

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

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

Definition at line 375 of file settings_str.c.

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

◆ freerdp_settings_get_type_name_for_key()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_key ( SSIZE_T  key)

Returns the type name for a key.

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

Definition at line 388 of file settings_str.c.

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

References freerdp_settings_get_type_for_key(), and freerdp_settings_get_type_name_for_type().

Referenced by freerdp_settings_get_pointer_writable(), and freerdp_settings_get_string_writable().

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

◆ freerdp_settings_get_type_name_for_type()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_type ( SSIZE_T  type)

Returns the type name for a type.

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

Definition at line 394 of file settings_str.c.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_uint16()

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

Returns a UINT16 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_uint32()

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

Returns a UINT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_uint64()

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

Returns a UINT64 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_new()

FREERDP_API rdpSettings * freerdp_settings_new ( DWORD  flags)

creates a new setting struct

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

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

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

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

Referenced by freerdp_settings_deserialize().

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

◆ freerdp_settings_print_diff()

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

Dumps the difference between two settings structs to a WLog.

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

Definition at line 99 of file settings_str.c.

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

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

Here is the call graph for this function:

◆ freerdp_settings_serialize()

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

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

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

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

3755{
3756 char* str = nullptr;
3757
3758 if (plength)
3759 *plength = 0;
3760
3761 if (!settings)
3762 return nullptr;
3763
3764 WINPR_JSON* json = WINPR_JSON_CreateObject();
3765 if (!json)
3766 return nullptr;
3767
3768 WINPR_JSON* jbool = WINPR_JSON_AddObjectToObject(
3769 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_BOOL));
3770 WINPR_JSON* juint16 = WINPR_JSON_AddObjectToObject(
3771 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT16));
3772 WINPR_JSON* jint16 = WINPR_JSON_AddObjectToObject(
3773 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT16));
3774 WINPR_JSON* juint32 = WINPR_JSON_AddObjectToObject(
3775 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT32));
3776 WINPR_JSON* jint32 = WINPR_JSON_AddObjectToObject(
3777 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT32));
3778 WINPR_JSON* juint64 = WINPR_JSON_AddObjectToObject(
3779 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT64));
3780 WINPR_JSON* jint64 = WINPR_JSON_AddObjectToObject(
3781 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT64));
3782 WINPR_JSON* jstring = WINPR_JSON_AddObjectToObject(
3783 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_STRING));
3784 WINPR_JSON* jpointer = WINPR_JSON_AddObjectToObject(
3785 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_POINTER));
3786 if (!jbool || !juint16 || !jint16 || !juint32 || !jint32 || !juint64 || !jint64 || !jstring ||
3787 !jpointer)
3788 goto fail;
3789
3790 for (int x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
3791 {
3792 union
3793 {
3794
3795 int s;
3796 FreeRDP_Settings_Keys_Bool b;
3797 FreeRDP_Settings_Keys_Int16 i16;
3798 FreeRDP_Settings_Keys_UInt16 u16;
3799 FreeRDP_Settings_Keys_Int32 i32;
3800 FreeRDP_Settings_Keys_UInt32 u32;
3801 FreeRDP_Settings_Keys_Int64 i64;
3802 FreeRDP_Settings_Keys_UInt64 u64;
3803 FreeRDP_Settings_Keys_String str;
3804 FreeRDP_Settings_Keys_Pointer ptr;
3805 } iter;
3806 iter.s = x;
3807
3808 const char* name = freerdp_settings_get_name_for_key(iter.s);
3809 SSIZE_T type = freerdp_settings_get_type_for_key(iter.s);
3810 switch (type)
3811 {
3812 case RDP_SETTINGS_TYPE_BOOL:
3813 {
3814 const BOOL val = freerdp_settings_get_bool(settings, iter.b);
3815 if (!WINPR_JSON_AddBoolToObject(jbool, name, val))
3816 goto fail;
3817 }
3818 break;
3819 case RDP_SETTINGS_TYPE_UINT16:
3820 {
3821 const uint16_t val = freerdp_settings_get_uint16(settings, iter.u16);
3822 if (!WINPR_JSON_AddNumberToObject(juint16, name, (double)val))
3823 goto fail;
3824 }
3825 break;
3826 case RDP_SETTINGS_TYPE_INT16:
3827 {
3828 const int16_t val = freerdp_settings_get_int16(settings, iter.i16);
3829 if (!WINPR_JSON_AddNumberToObject(jint16, name, (double)val))
3830 goto fail;
3831 }
3832 break;
3833 case RDP_SETTINGS_TYPE_UINT32:
3834 {
3835 const uint32_t val = freerdp_settings_get_uint32(settings, iter.u32);
3836 if (!WINPR_JSON_AddNumberToObject(juint32, name, (double)val))
3837 goto fail;
3838 }
3839 break;
3840 case RDP_SETTINGS_TYPE_INT32:
3841 {
3842 const int32_t val = freerdp_settings_get_int32(settings, iter.i32);
3843 if (!WINPR_JSON_AddNumberToObject(jint32, name, (double)val))
3844 goto fail;
3845 }
3846 break;
3847 case RDP_SETTINGS_TYPE_UINT64:
3848 {
3849 const uint64_t val = freerdp_settings_get_uint64(settings, iter.u64);
3850 if (!WINPR_JSON_AddNumberToObject(juint64, name, (double)val))
3851 goto fail;
3852 }
3853 break;
3854 case RDP_SETTINGS_TYPE_INT64:
3855 {
3856 const int64_t val = freerdp_settings_get_int64(settings, iter.i64);
3857 if (!WINPR_JSON_AddNumberToObject(jint64, name, (double)val))
3858 goto fail;
3859 }
3860 break;
3861 case RDP_SETTINGS_TYPE_STRING:
3862 {
3863 const char* val = freerdp_settings_get_string(settings, iter.str);
3864 if (val)
3865 {
3866 if (!WINPR_JSON_AddStringToObject(jstring, name, val))
3867 goto fail;
3868 }
3869 else
3870 {
3871 (void)WINPR_JSON_AddNullToObject(jstring, name);
3872 }
3873 }
3874 break;
3875 case RDP_SETTINGS_TYPE_POINTER:
3876 if (!serialize_pointer(settings, jpointer, iter.ptr))
3877 goto fail;
3878 break;
3879 default:
3880 break;
3881 }
3882 }
3883
3884 if (pretty)
3885 str = WINPR_JSON_Print(json);
3886 else
3887 str = WINPR_JSON_PrintUnformatted(json);
3888
3889 if (!str)
3890 goto fail;
3891 if (plength)
3892 *plength = strlen(str);
3893
3894fail:
3895 WINPR_JSON_Delete(json);
3896 return str;
3897}
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_AddObjectToObject(WINPR_JSON *object, const char *name)
WINPR_JSON_AddObjectToObject.
Definition c-json.c:274
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_CreateObject(void)
WINPR_JSON_CreateObject.
Definition c-json.c:232
WINPR_API char * WINPR_JSON_Print(WINPR_JSON *item)
Serialize a JSON instance to string for minimal size without formatting see WINPR_JSON_PrintUnformatt...
Definition c-json.c:296
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_AddNumberToObject(WINPR_JSON *object, const char *name, double number)
WINPR_JSON_AddNumberToObject.
Definition c-json.c:257
WINPR_API char * WINPR_JSON_PrintUnformatted(WINPR_JSON *item)
Serialize a JSON instance to string without formatting for human readable formatted output see WINPR_...
Definition c-json.c:301
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_AddNullToObject(WINPR_JSON *object, const char *name)
WINPR_JSON_AddNullToObject.
Definition c-json.c:237
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_AddStringToObject(WINPR_JSON *object, const char *name, const char *string)
WINPR_JSON_AddStringToObject.
Definition c-json.c:269
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_AddBoolToObject(WINPR_JSON *object, const char *name, BOOL boolean)
WINPR_JSON_AddBoolToObject.
Definition c-json.c:252

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

Here is the call graph for this function:

◆ freerdp_settings_set_bool()

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

Sets a BOOL settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_int16()

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

Sets a INT16 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

Here is the caller graph for this function:

◆ freerdp_settings_set_int32()

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

Sets a INT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_int64()

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

Sets a INT64 settings value.

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

Referenced by freerdp_settings_copy_item(), 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 2502 of file common/settings.c.

2504{
2505 WINPR_ASSERT(monitors || (count == 0));
2506 if (count == 0)
2507 {
2508 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftX, 0))
2509 return FALSE;
2510 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftY, 0))
2511 return FALSE;
2512 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_MonitorDefArray, nullptr, 0))
2513 return FALSE;
2514 return freerdp_settings_set_uint32(settings, FreeRDP_MonitorCount, 0);
2515 }
2516
2517 // Find primary or alternatively the monitor at 0/0
2518 const rdpMonitor* primary = nullptr;
2519 for (size_t x = 0; x < count; x++)
2520 {
2521 const rdpMonitor* cur = &monitors[x];
2522 if (cur->is_primary)
2523 {
2524 primary = cur;
2525 break;
2526 }
2527 }
2528 if (!primary)
2529 {
2530 for (size_t x = 0; x < count; x++)
2531 {
2532 const rdpMonitor* cur = &monitors[x];
2533 if ((cur->x == 0) && (cur->y == 0))
2534 {
2535 primary = cur;
2536 break;
2537 }
2538 }
2539 }
2540
2541 if (!primary)
2542 {
2543 WLog_ERR(TAG, "Could not find primary monitor, aborting");
2544 return FALSE;
2545 }
2546
2547 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_MonitorDefArray, nullptr, count))
2548 return FALSE;
2549 rdpMonitor* sorted = freerdp_settings_get_pointer_writable(settings, FreeRDP_MonitorDefArray);
2550 WINPR_ASSERT(sorted);
2551
2552 size_t sortpos = 0;
2553
2554 /* Set primary. Ensure left/top is at 0/0 and flags contains MONITOR_PRIMARY */
2555 sorted[sortpos] = *primary;
2556 sorted[sortpos].x = 0;
2557 sorted[sortpos].y = 0;
2558 sorted[sortpos].is_primary = TRUE;
2559 sortpos++;
2560
2561 /* Set monitor shift to original layout */
2562 const INT32 offsetX = primary->x;
2563 const INT32 offsetY = primary->y;
2564 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftX, offsetX))
2565 return FALSE;
2566 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftY, offsetY))
2567 return FALSE;
2568
2569 for (size_t x = 0; x < count; x++)
2570 {
2571 const rdpMonitor* cur = &monitors[x];
2572 if (cur == primary)
2573 continue;
2574
2575 rdpMonitor m = monitors[x];
2576 m.x -= offsetX;
2577 m.y -= offsetY;
2578 sorted[sortpos++] = m;
2579 }
2580
2581 // Sort remaining monitors by x/y ?
2582 qsort(sorted, count, sizeof(rdpMonitor), sort_monitor_fn);
2583
2584 return freerdp_settings_set_uint32(settings, FreeRDP_MonitorCount,
2585 WINPR_ASSERTING_INT_CAST(uint32_t, count));
2586}

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

Here is the call graph for this function:

◆ freerdp_settings_set_pointer()

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

Set a pointer to value val.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_set_pointer_len().

Here is the caller graph for this function:

◆ freerdp_settings_set_pointer_array()

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

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

1873{
1874 size_t maxOffset = 0;
1875 if (!settings)
1876 return FALSE;
1877 switch (id)
1878 {
1879 case FreeRDP_ClientAutoReconnectCookie:
1880 maxOffset = 1;
1881 if ((offset >= maxOffset) || !data || !settings->ClientAutoReconnectCookie)
1882 goto fail;
1883 settings->ClientAutoReconnectCookie[offset] = *(const ARC_CS_PRIVATE_PACKET*)data;
1884 return TRUE;
1885 case FreeRDP_ServerAutoReconnectCookie:
1886 maxOffset = 1;
1887 if ((offset >= maxOffset) || !data || !settings->ServerAutoReconnectCookie)
1888 goto fail;
1889 settings->ServerAutoReconnectCookie[offset] = *(const ARC_SC_PRIVATE_PACKET*)data;
1890 return TRUE;
1891 case FreeRDP_ServerCertificate:
1892 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ServerCertificateLength);
1893 if ((offset >= maxOffset) || !data)
1894 goto fail;
1895 settings->ServerCertificate[offset] = *(const BYTE*)data;
1896 return TRUE;
1897 case FreeRDP_DeviceArray:
1898 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
1899 if (offset >= maxOffset)
1900 goto fail;
1901 freerdp_device_free(settings->DeviceArray[offset]);
1902 settings->DeviceArray[offset] = freerdp_device_clone(data);
1903 return TRUE;
1904 case FreeRDP_TargetNetAddresses:
1905 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1906 if ((offset >= maxOffset) || !data)
1907 goto fail;
1908 WINPR_ASSERT(settings->TargetNetAddresses);
1909 free(settings->TargetNetAddresses[offset]);
1910 settings->TargetNetAddresses[offset] = _strdup((const char*)data);
1911 return settings->TargetNetAddresses[offset] != nullptr;
1912 case FreeRDP_TargetNetPorts:
1913 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1914 if ((offset >= maxOffset) || !data)
1915 goto fail;
1916 WINPR_ASSERT(settings->TargetNetPorts);
1917 settings->TargetNetPorts[offset] = *((const UINT32*)data);
1918 return TRUE;
1919 case FreeRDP_StaticChannelArray:
1920 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
1921 if ((offset >= maxOffset) || !data)
1922 goto fail;
1923 freerdp_addin_argv_free(settings->StaticChannelArray[offset]);
1924 settings->StaticChannelArray[offset] = freerdp_addin_argv_clone(data);
1925 return TRUE;
1926 case FreeRDP_DynamicChannelArray:
1927 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
1928 if ((offset >= maxOffset) || !data)
1929 goto fail;
1930 freerdp_addin_argv_free(settings->DynamicChannelArray[offset]);
1931 settings->DynamicChannelArray[offset] = freerdp_addin_argv_clone(data);
1932 return TRUE;
1933 case FreeRDP_BitmapCacheV2CellInfo:
1934 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_BitmapCacheV2NumCells);
1935 if ((offset >= maxOffset) || !data)
1936 goto fail;
1937 {
1938 const BITMAP_CACHE_V2_CELL_INFO* cdata = (const BITMAP_CACHE_V2_CELL_INFO*)data;
1939 settings->BitmapCacheV2CellInfo[offset] = *cdata;
1940 }
1941 return TRUE;
1942 case FreeRDP_ServerRandom:
1943 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ServerRandomLength);
1944 if ((offset >= maxOffset) || !data)
1945 goto fail;
1946 settings->ServerRandom[offset] = *(const BYTE*)data;
1947 return TRUE;
1948 case FreeRDP_ClientRandom:
1949 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ClientRandomLength);
1950 if ((offset >= maxOffset) || !data)
1951 goto fail;
1952 settings->ClientRandom[offset] = *(const BYTE*)data;
1953 return TRUE;
1954 case FreeRDP_LoadBalanceInfo:
1955 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_LoadBalanceInfoLength);
1956 if ((offset >= maxOffset) || !data)
1957 goto fail;
1958 settings->LoadBalanceInfo[offset] = *(const BYTE*)data;
1959 return TRUE;
1960 case FreeRDP_RedirectionTsvUrl:
1961 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionTsvUrlLength);
1962 if ((offset >= maxOffset) || !data)
1963 goto fail;
1964 settings->RedirectionTsvUrl[offset] = *(const BYTE*)data;
1965 return TRUE;
1966 case FreeRDP_RedirectionPassword:
1967 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionPasswordLength);
1968 if ((offset >= maxOffset) || !data)
1969 goto fail;
1970 settings->RedirectionPassword[offset] = *(const BYTE*)data;
1971 return TRUE;
1972 case FreeRDP_OrderSupport:
1973 maxOffset = 32;
1974 if (!settings->OrderSupport)
1975 goto fail;
1976 if ((offset >= maxOffset) || !data)
1977 goto fail;
1978 settings->OrderSupport[offset] = *(const BOOL*)data ? 1 : 0;
1979 return TRUE;
1980 case FreeRDP_GlyphCache:
1981 maxOffset = 10;
1982 if (!settings->GlyphCache)
1983 goto fail;
1984 if ((offset >= maxOffset) || !data)
1985 goto fail;
1986 settings->GlyphCache[offset] = *(const GLYPH_CACHE_DEFINITION*)data;
1987 return TRUE;
1988 case FreeRDP_FragCache:
1989 maxOffset = 1;
1990 if (!settings->FragCache)
1991 goto fail;
1992 if ((offset >= maxOffset) || !data)
1993 goto fail;
1994 settings->FragCache[offset] = *(const GLYPH_CACHE_DEFINITION*)data;
1995 return TRUE;
1996 case FreeRDP_MonitorIds:
1997 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_NumMonitorIds);
1998 if ((offset >= maxOffset) || !data)
1999 goto fail;
2000 settings->MonitorIds[offset] = *(const UINT32*)data;
2001 return TRUE;
2002 case FreeRDP_ChannelDefArray:
2003 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ChannelDefArraySize);
2004 if ((offset >= maxOffset) || !data)
2005 goto fail;
2006 settings->ChannelDefArray[offset] = *(const CHANNEL_DEF*)data;
2007 return TRUE;
2008 case FreeRDP_MonitorDefArray:
2009 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_MonitorDefArraySize);
2010 if ((offset >= maxOffset) || !data)
2011 goto fail;
2012 settings->MonitorDefArray[offset] = *(const rdpMonitor*)data;
2013 return TRUE;
2014
2015 case FreeRDP_ClientTimeZone:
2016 maxOffset = 1;
2017 if ((offset >= maxOffset) || !data || !settings->ClientTimeZone)
2018 goto fail;
2019 settings->ClientTimeZone[offset] = *(const TIME_ZONE_INFORMATION*)data;
2020 return TRUE;
2021
2022 case FreeRDP_ServerLicenseProductIssuers:
2023 maxOffset =
2024 freerdp_settings_get_uint32(settings, FreeRDP_ServerLicenseProductIssuersCount);
2025 if ((offset >= maxOffset) || !settings->ServerLicenseProductIssuers)
2026 goto fail;
2027 free(settings->ServerLicenseProductIssuers[offset]);
2028 settings->ServerLicenseProductIssuers[offset] = nullptr;
2029 if (data)
2030 settings->ServerLicenseProductIssuers[offset] = _strdup((const char*)data);
2031 return TRUE;
2032
2033 case FreeRDP_ReceivedCapabilityData:
2034 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
2035 if (offset >= maxOffset)
2036 goto fail;
2037 WINPR_ASSERT(settings->ReceivedCapabilityData);
2038 settings->ReceivedCapabilityData[offset] = WINPR_CAST_CONST_PTR_AWAY(data, BYTE*);
2039 return TRUE;
2040 case FreeRDP_ReceivedCapabilityDataSizes:
2041 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
2042 if (offset >= maxOffset)
2043 goto fail;
2044 WINPR_ASSERT(settings->ReceivedCapabilityDataSizes);
2045 settings->ReceivedCapabilityDataSizes[offset] = *(const uint32_t*)data;
2046 return TRUE;
2047 default:
2048 WLog_WARN(TAG, "Invalid id %s [%d]", freerdp_settings_get_name_for_key(id), id);
2049 return FALSE;
2050 }
2051
2052fail:
2053 WLog_WARN(TAG, "[%s] Invalid offset=%" PRIuz " [%" PRIuz "] or nullptr data=%p",
2054 freerdp_settings_get_name_for_key(id), offset, maxOffset, data);
2055 return FALSE;
2056}

◆ freerdp_settings_set_pointer_len()

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

Set a pointer to value data.

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

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

1489{
1490 union
1491 {
1492 const void* cv;
1493 void* v;
1494 } cnv;
1495
1496 cnv.cv = data;
1497 if (!settings)
1498 return FALSE;
1499
1500 switch (id)
1501 {
1502 case FreeRDP_instance:
1503 if ((len != 0) && (len != sizeof(void*)))
1504 {
1505 WLog_ERR(TAG, "FreeRDP_instance::len must be 0 or %" PRIuz, sizeof(void*));
1506 return FALSE;
1507 }
1508 settings->instance = cnv.v;
1509 return TRUE;
1510 case FreeRDP_RdpServerCertificate:
1511 freerdp_certificate_free(settings->RdpServerCertificate);
1512
1513 if (len > 1)
1514 {
1515 WLog_ERR(TAG, "FreeRDP_RdpServerCertificate::len must be 0 or 1");
1516 return FALSE;
1517 }
1518 settings->RdpServerCertificate = cnv.v;
1519 if (!settings->RdpServerCertificate && (len > 0))
1520 {
1521 settings->RdpServerCertificate = freerdp_certificate_new();
1522 if (!settings->RdpServerCertificate)
1523 return FALSE;
1524 }
1525 return TRUE;
1526 case FreeRDP_RdpServerRsaKey:
1527 freerdp_key_free(settings->RdpServerRsaKey);
1528 if (len > 1)
1529 {
1530 WLog_ERR(TAG, "FreeRDP_RdpServerRsaKey::len must be 0 or 1");
1531 return FALSE;
1532 }
1533 settings->RdpServerRsaKey = (rdpPrivateKey*)cnv.v;
1534 if (!settings->RdpServerRsaKey && (len > 0))
1535 {
1536 settings->RdpServerRsaKey = freerdp_key_new();
1537 if (!settings->RdpServerRsaKey)
1538 return FALSE;
1539 }
1540 return TRUE;
1541 case FreeRDP_RedirectionPassword:
1542 return freerdp_settings_set_pointer_len_(
1543 settings, id, FreeRDP_RedirectionPasswordLength, data, len, sizeof(char));
1544 case FreeRDP_RedirectionTsvUrl:
1545 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_RedirectionTsvUrlLength,
1546 data, len, sizeof(char));
1547 case FreeRDP_RedirectionTargetCertificate:
1548 freerdp_certificate_free(settings->RedirectionTargetCertificate);
1549
1550 if (len > 1)
1551 {
1552 WLog_ERR(TAG, "FreeRDP_RedirectionTargetCertificate::len must be 0 or 1");
1553 return FALSE;
1554 }
1555 settings->RedirectionTargetCertificate = cnv.v;
1556 if (!settings->RedirectionTargetCertificate && (len > 0))
1557 {
1558 settings->RedirectionTargetCertificate = freerdp_certificate_new();
1559 if (!settings->RedirectionTargetCertificate)
1560 return FALSE;
1561 }
1562 return TRUE;
1563 case FreeRDP_RedirectionGuid:
1564 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_RedirectionGuidLength,
1565 data, len, sizeof(BYTE));
1566 case FreeRDP_LoadBalanceInfo:
1567 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_LoadBalanceInfoLength,
1568 data, len, sizeof(char));
1569 case FreeRDP_ServerRandom:
1570 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ServerRandomLength, data,
1571 len, sizeof(char));
1572 case FreeRDP_ClientRandom:
1573 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ClientRandomLength, data,
1574 len, sizeof(char));
1575 case FreeRDP_ServerCertificate:
1576 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ServerCertificateLength,
1577 data, len, sizeof(char));
1578 case FreeRDP_TargetNetAddresses:
1579 if (!freerdp_target_net_addresses_resize(settings, len))
1580 return FALSE;
1581 if (data == nullptr)
1582 target_net_addresses_free(settings, 0);
1583 return TRUE;
1584 case FreeRDP_ServerLicenseProductIssuers:
1585 if (data == nullptr)
1586 freerdp_server_license_issuers_free(settings);
1587 return freerdp_settings_set_pointer_len_(
1588 settings, id, FreeRDP_ServerLicenseProductIssuersCount, data, len, sizeof(char*));
1589 case FreeRDP_TargetNetPorts:
1590 if (!freerdp_target_net_addresses_resize(settings, len))
1591 return FALSE;
1592 if (data == nullptr)
1593 {
1594 for (size_t x = 0; x < len; x++)
1595 settings->TargetNetPorts[x] = 0;
1596 }
1597 return TRUE;
1598 case FreeRDP_DeviceArray:
1599 if (data == nullptr)
1600 freerdp_device_collection_free(settings);
1601 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_DeviceArraySize, data,
1602 len, sizeof(RDPDR_DEVICE*));
1603 case FreeRDP_ChannelDefArray:
1604 if ((len > 0) && (len < CHANNEL_MAX_COUNT))
1605 WLog_WARN(TAG,
1606 "FreeRDP_ChannelDefArray::len expected to be >= %d, but have %" PRIuz,
1607 CHANNEL_MAX_COUNT, len);
1608 return freerdp_settings_set_pointer_len_(settings, FreeRDP_ChannelDefArray,
1609 FreeRDP_ChannelDefArraySize, data, len,
1610 sizeof(CHANNEL_DEF));
1611 case FreeRDP_MonitorDefArray:
1612 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_MonitorDefArraySize,
1613 data, len, sizeof(rdpMonitor));
1614 case FreeRDP_ClientAutoReconnectCookie:
1615 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1616 sizeof(ARC_CS_PRIVATE_PACKET));
1617 case FreeRDP_ServerAutoReconnectCookie:
1618 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1619 sizeof(ARC_SC_PRIVATE_PACKET));
1620 case FreeRDP_ClientTimeZone:
1621 if (len > 1)
1622 {
1623 WLog_ERR(TAG, "FreeRDP_ClientTimeZone::len must be 0 or 1");
1624 return FALSE;
1625 }
1626 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1627 sizeof(TIME_ZONE_INFORMATION));
1628 case FreeRDP_BitmapCacheV2CellInfo:
1629 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_BitmapCacheV2NumCells,
1630 data, len, sizeof(BITMAP_CACHE_V2_CELL_INFO));
1631 case FreeRDP_GlyphCache:
1632 if ((len != 0) && (len != 10))
1633 {
1634 WLog_ERR(TAG, "FreeRDP_GlyphCache::len must be 0 or 10");
1635 return FALSE;
1636 }
1637 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1638 sizeof(GLYPH_CACHE_DEFINITION));
1639 case FreeRDP_FragCache:
1640 if (len > 1)
1641 {
1642 WLog_ERR(TAG, "FreeRDP_FragCache::len must be 0 or 1");
1643 return FALSE;
1644 }
1645 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1646 sizeof(GLYPH_CACHE_DEFINITION));
1647 case FreeRDP_StaticChannelArray:
1648 if (data == nullptr)
1649 freerdp_static_channel_collection_free(settings);
1650 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_StaticChannelArraySize,
1651 data, len, sizeof(ADDIN_ARGV*));
1652 case FreeRDP_DynamicChannelArray:
1653 if (data == nullptr)
1654 freerdp_dynamic_channel_collection_free(settings);
1655 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_DynamicChannelArraySize,
1656 data, len, sizeof(ADDIN_ARGV*));
1657 case FreeRDP_ReceivedCapabilityData:
1658 if (!freerdp_capability_buffer_resize(settings, len, FALSE))
1659 return FALSE;
1660 if (data == nullptr)
1661 {
1662 freerdp_capability_data_free(settings, 0, FALSE);
1663 }
1664 return TRUE;
1665 case FreeRDP_ReceivedCapabilities:
1666 if (!freerdp_capability_buffer_resize(settings, len, FALSE))
1667 return FALSE;
1668 if (data == nullptr)
1669 {
1670 for (size_t x = 0; x < settings->ReceivedCapabilitiesSize; x++)
1671 {
1672 settings->ReceivedCapabilities[x] = 0;
1673 }
1674 }
1675 return TRUE;
1676 case FreeRDP_OrderSupport:
1677 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1678 sizeof(char));
1679
1680 case FreeRDP_MonitorIds:
1681 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_NumMonitorIds, data, len,
1682 sizeof(UINT32));
1683
1684 case FreeRDP_ReceivedCapabilityDataSizes:
1685 if (!freerdp_capability_buffer_resize(settings, len, FALSE))
1686 return FALSE;
1687 if (data == nullptr)
1688 {
1689 for (size_t x = 0; x < settings->ReceivedCapabilitiesSize; x++)
1690 settings->ReceivedCapabilityDataSizes[x] = 0;
1691 }
1692 return TRUE;
1693
1694 case FreeRDP_Password51:
1695 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_Password51Length, data,
1696 len, sizeof(char));
1697 default:
1698 if ((data == nullptr) && (len == 0))
1699 {
1700 if (!freerdp_settings_set_pointer(settings, id, nullptr))
1701 return FALSE;
1702 }
1703 else
1704 WLog_WARN(TAG, "Invalid id %d", id);
1705 return FALSE;
1706 }
1707}

References freerdp_settings_set_pointer().

Referenced by freerdp_settings_new(), and freerdp_settings_set_monitor_def_array_sorted().

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

◆ freerdp_settings_set_string()

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

Sets a string settings value. The param is copied.

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

Definition at line 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()

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

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

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

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

2313{
2314 WINPR_ASSERT(settings);
2315
2316 if (!param)
2317 return freerdp_settings_set_string_copy_(settings, id, nullptr, 0, TRUE);
2318
2319 size_t len = 0;
2320
2321 char* str = ConvertWCharToUtf8Alloc(param, &len);
2322 if (!str && (len != 0))
2323 return FALSE;
2324
2325 return freerdp_settings_set_string_(settings, id, str, len);
2326}

◆ freerdp_settings_set_string_from_utf16N()

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

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

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

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

2330{
2331 size_t len = 0;
2332
2333 WINPR_ASSERT(settings);
2334
2335 if (!param)
2336 return freerdp_settings_set_string_copy_(settings, id, nullptr, length, TRUE);
2337
2338 char* str = ConvertWCharNToUtf8Alloc(param, length, &len);
2339 if (!str && (length != 0))
2340 {
2341 /* If the input string is an empty string, but length > 0
2342 * consider the conversion a success */
2343 const size_t wlen = _wcsnlen(param, length);
2344 if (wlen != 0)
2345 return FALSE;
2346 }
2347
2348 return freerdp_settings_set_string_(settings, id, str, len);
2349}

Referenced by freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_string_len()

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

Sets a string settings value. The val is copied.

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

Definition at line 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()

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

Sets a UINT16 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_uint32()

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

Sets a UINT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_uint64()

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

Sets a UINT64 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

Here is the caller graph for this function:

◆ freerdp_settings_set_value_for_name()

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

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

1338{
1339 ULONGLONG uval = 0;
1340 LONGLONG ival = 0;
1341 SSIZE_T type = 0;
1342
1343 if (!settings || !name)
1344 return FALSE;
1345
1346 const SSIZE_T i = freerdp_settings_get_key_for_name(name);
1347 if (i < 0)
1348 {
1349 WLog_ERR(TAG, "Invalid settings key [%s]", name);
1350 return FALSE;
1351 }
1352
1353 const SSIZE_T index = i;
1354
1356 switch (type)
1357 {
1358
1359 case RDP_SETTINGS_TYPE_BOOL:
1360 {
1361 const BOOL val = (_strnicmp(value, "TRUE", 5) == 0) || (_strnicmp(value, "ON", 5) == 0);
1362 const BOOL nval =
1363 (_strnicmp(value, "FALSE", 6) == 0) || (_strnicmp(value, "OFF", 6) == 0);
1364 if (!val && !nval)
1365 return parsing_fail(name, "BOOL", value);
1366
1367 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1368 return freerdp_settings_set_bool(settings, (FreeRDP_Settings_Keys_Bool)index, val);
1369 }
1370 case RDP_SETTINGS_TYPE_UINT16:
1371 if (!value_to_uint(value, &uval, 0, UINT16_MAX))
1372 return parsing_fail(name, "UINT16", value);
1373
1374 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1375 if (!freerdp_settings_set_uint16(settings, (FreeRDP_Settings_Keys_UInt16)index,
1376 (UINT16)uval))
1377 return parsing_fail(name, "UINT16", value);
1378 return TRUE;
1379
1380 case RDP_SETTINGS_TYPE_INT16:
1381 if (!value_to_int(value, &ival, INT16_MIN, INT16_MAX))
1382 return parsing_fail(name, "INT16", value);
1383
1384 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1385 if (!freerdp_settings_set_int16(settings, (FreeRDP_Settings_Keys_Int16)index,
1386 (INT16)ival))
1387 return parsing_fail(name, "INT16", value);
1388 return TRUE;
1389 case RDP_SETTINGS_TYPE_UINT32:
1390 if (!value_to_uint(value, &uval, 0, UINT32_MAX))
1391 return parsing_fail(name, "UINT32", value);
1392
1393 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1394 if (!freerdp_settings_set_uint32(settings, (FreeRDP_Settings_Keys_UInt32)index,
1395 (UINT32)uval))
1396 return parsing_fail(name, "UINT32", value);
1397 return TRUE;
1398 case RDP_SETTINGS_TYPE_INT32:
1399 if (!value_to_int(value, &ival, INT32_MIN, INT32_MAX))
1400 return parsing_fail(name, "INT32", value);
1401
1402 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1403 if (!freerdp_settings_set_int32(settings, (FreeRDP_Settings_Keys_Int32)index,
1404 (INT32)ival))
1405 return parsing_fail(name, "INT32", value);
1406 return TRUE;
1407 case RDP_SETTINGS_TYPE_UINT64:
1408 if (!value_to_uint(value, &uval, 0, UINT64_MAX))
1409 return parsing_fail(name, "UINT64", value);
1410
1411 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1412 if (!freerdp_settings_set_uint64(settings, (FreeRDP_Settings_Keys_UInt64)index, uval))
1413 return parsing_fail(name, "UINT64", value);
1414 return TRUE;
1415 case RDP_SETTINGS_TYPE_INT64:
1416 if (!value_to_int(value, &ival, INT64_MIN, INT64_MAX))
1417 return parsing_fail(name, "INT64", value);
1418
1419 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1420 if (!freerdp_settings_set_int64(settings, (FreeRDP_Settings_Keys_Int64)index, ival))
1421 return parsing_fail(name, "INT64", value);
1422 return TRUE;
1423
1424 case RDP_SETTINGS_TYPE_STRING:
1425 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1426 return freerdp_settings_set_string(settings, (FreeRDP_Settings_Keys_String)index,
1427 value);
1428 case RDP_SETTINGS_TYPE_POINTER:
1429 return parsing_fail(name, "POINTER", value);
1430 default:
1431 return FALSE;
1432 }
1433 return FALSE;
1434}
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 2245 of file common/settings.c.

2248{
2249 WINPR_ASSERT(settings);
2250 WINPR_ASSERT(capsFlags || (capsCount == 0));
2251 WINPR_ASSERT(capsData || (capsCount == 0));
2252 WINPR_ASSERT(capsSizes || (capsCount == 0));
2253 WINPR_ASSERT(capsCount <= UINT16_MAX);
2254
2255 wLog* log = WLog_Get(TAG);
2256
2257 for (UINT32 x = 0; x < capsCount; x++)
2258 {
2259 if (capsFlags[x])
2260 {
2261 wStream buffer = WINPR_C_ARRAY_INIT;
2262 wStream* sub = Stream_StaticConstInit(&buffer, capsData[x], capsSizes[x]);
2263
2264 if (!rdp_read_capability_set(log, sub, (UINT16)x, settings, serverReceivedCaps))
2265 return FALSE;
2266 }
2267 }
2268
2269 return TRUE;
2270}

◆ freerdp_static_channel_collection_add()

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

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

610{
611 UINT32 count = 0;
612
613 WINPR_ASSERT(settings);
614 WINPR_ASSERT(channel);
615
616 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount) + 1;
617 if (freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize) < count)
618 {
619 const UINT32 oldSize =
620 freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
621 const size_t new_size = oldSize + 32ul;
622 ADDIN_ARGV** new_array = (ADDIN_ARGV**)realloc((void*)settings->StaticChannelArray,
623 new_size * sizeof(ADDIN_ARGV*));
624
625 if (!new_array)
626 return FALSE;
627
628 settings->StaticChannelArray = new_array;
629 {
630 for (size_t x = oldSize; x < new_size; x++)
631 settings->StaticChannelArray[x] = nullptr;
632 }
633 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize,
634 WINPR_ASSERTING_INT_CAST(uint32_t, new_size)))
635 return FALSE;
636 }
637
638 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
639
640 ADDIN_ARGV** cur = &settings->StaticChannelArray[count++];
641 freerdp_addin_argv_free(*cur);
642 *cur = channel;
643 return freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count);
644}

◆ freerdp_static_channel_collection_del()

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

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

576{
577 const UINT32 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
578 if (!settings || !settings->StaticChannelArray)
579 return FALSE;
580
581 for (UINT32 x = 0; x < count; x++)
582 {
583 ADDIN_ARGV* cur = settings->StaticChannelArray[x];
584 if (cur && (cur->argc > 0))
585 {
586 if (strcmp(name, cur->argv[0]) == 0)
587 {
588 const BOOL success = memmove_s((void*)&settings->StaticChannelArray[x],
589 (count - x) * sizeof(ADDIN_ARGV*),
590 (void*)&settings->StaticChannelArray[x + 1],
591 (count - x - 1) * sizeof(ADDIN_ARGV*)) >= 0;
592 for (size_t y = count - 1; y < settings->StaticChannelArraySize; y++)
593 settings->StaticChannelArray[y] = nullptr;
594
595 freerdp_addin_argv_free(cur);
596 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count - 1))
597 return FALSE;
598 return success;
599 }
600 }
601 }
602 {
603 for (size_t x = count; x < settings->StaticChannelArraySize; x++)
604 settings->StaticChannelArray[x] = nullptr;
605 }
606 return FALSE;
607}

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

647{
648 ADDIN_ARGV* channel = nullptr;
649
650 WINPR_ASSERT(settings);
651 WINPR_ASSERT(name);
652
653 for (UINT32 index = 0;
654 index < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount); index++)
655 {
656 channel = settings->StaticChannelArray[index];
657
658 if (strcmp(channel->argv[0], name) == 0)
659 return channel;
660 }
661
662 return nullptr;
663}

◆ freerdp_static_channel_collection_free()

FREERDP_API void freerdp_static_channel_collection_free ( rdpSettings *  settings)

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

666{
667 if (!settings)
668 return;
669
670 if (settings->StaticChannelArray)
671 {
672 for (UINT32 i = 0;
673 i < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize); i++)
674 freerdp_addin_argv_free(settings->StaticChannelArray[i]);
675 }
676
677 free((void*)settings->StaticChannelArray);
678 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0))
679 WLog_WARN(
680 TAG, "freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0) failed");
681 settings->StaticChannelArray = nullptr;
682 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0))
683 WLog_WARN(TAG,
684 "freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0) failed");
685}

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

2429{
2430 const UINT32 invalid = mask & ~(RNS_UD_32BPP_SUPPORT | RNS_UD_24BPP_SUPPORT |
2431 RNS_UD_16BPP_SUPPORT | RNS_UD_15BPP_SUPPORT);
2432
2433 if (mask & RNS_UD_32BPP_SUPPORT)
2434 winpr_str_append("RNS_UD_32BPP_SUPPORT", buffer, size, "|");
2435 if (mask & RNS_UD_24BPP_SUPPORT)
2436 winpr_str_append("RNS_UD_24BPP_SUPPORT", buffer, size, "|");
2437 if (mask & RNS_UD_16BPP_SUPPORT)
2438 winpr_str_append("RNS_UD_16BPP_SUPPORT", buffer, size, "|");
2439 if (mask & RNS_UD_15BPP_SUPPORT)
2440 winpr_str_append("RNS_UD_15BPP_SUPPORT", buffer, size, "|");
2441
2442 if (invalid != 0)
2443 {
2444 char str[32] = WINPR_C_ARRAY_INIT;
2445 (void)_snprintf(str, sizeof(str), "RNS_UD_INVALID[0x%04" PRIx32 "]", invalid);
2446 winpr_str_append(str, buffer, size, "|");
2447 }
2448 char hex[32] = WINPR_C_ARRAY_INIT;
2449 (void)_snprintf(hex, sizeof(hex), "[0x%04" PRIx16 "]", mask);
2450 return buffer;
2451}

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

2103{
2104 WINPR_ASSERT(settings);
2105 WINPR_ASSERT(addresses);
2106
2107 if (!freerdp_target_net_adresses_reset(settings, count))
2108 return FALSE;
2109
2110 for (UINT32 i = 0; i < settings->TargetNetAddressCount; i++)
2111 {
2112 const char* address = addresses[i];
2113 if (!freerdp_settings_set_pointer_array(settings, FreeRDP_TargetNetAddresses, i, address))
2114 {
2115 freerdp_target_net_addresses_free(settings);
2116 return FALSE;
2117 }
2118 }
2119
2120 return TRUE;
2121}

◆ freerdp_target_net_addresses_free()

FREERDP_API void freerdp_target_net_addresses_free ( rdpSettings *  settings)

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

1022{
1023 WINPR_ASSERT(settings);
1024
1025 target_net_addresses_free(settings, 0);
1026
1027 free((void*)settings->TargetNetAddresses);
1028 settings->TargetNetAddresses = nullptr;
1029
1030 free(settings->TargetNetPorts);
1031 settings->TargetNetPorts = nullptr;
1032
1033 settings->TargetNetAddressCount = 0;
1034}

◆ freerdp_update_gateway_usage_method()

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

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

1213{
1214 UINT32 GatewayUsageMethod = 0;
1215
1216 if (!GatewayEnabled && !GatewayBypassLocal)
1217 GatewayUsageMethod = TSC_PROXY_MODE_NONE_DIRECT;
1218 else if (GatewayEnabled && !GatewayBypassLocal)
1219 GatewayUsageMethod = TSC_PROXY_MODE_DIRECT;
1220 else if (GatewayEnabled && GatewayBypassLocal)
1221 GatewayUsageMethod = TSC_PROXY_MODE_DETECT;
1222
1223 if (!freerdp_set_gateway_usage_method(settings, GatewayUsageMethod))
1224 WLog_WARN(TAG,
1225 "freerdp_set_gateway_usage_method(settings, GatewayUsageMethod=%" PRIu32
1226 ") failed)",
1227 GatewayUsageMethod);
1228}
BOOL freerdp_set_gateway_usage_method(rdpSettings *settings, UINT32 GatewayUsageMethod)