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 NEG_DSTBLT_INDEX   0x00
 
#define NEG_PATBLT_INDEX   0x01
 
#define NEG_SCRBLT_INDEX   0x02
 
#define NEG_MEMBLT_INDEX   0x03
 
#define NEG_MEM3BLT_INDEX   0x04
 
#define NEG_ATEXTOUT_INDEX   0x05
 
#define NEG_AEXTTEXTOUT_INDEX   0x06 /* Must be ignored */
 
#define NEG_DRAWNINEGRID_INDEX   0x07 /* Must be ignored */
 
#define NEG_LINETO_INDEX   0x08
 
#define NEG_MULTI_DRAWNINEGRID_INDEX   0x09
 
#define NEG_OPAQUE_RECT_INDEX   0x0A /* Must be ignored */
 
#define NEG_SAVEBITMAP_INDEX   0x0B
 
#define NEG_WTEXTOUT_INDEX   0x0C /* Must be ignored */
 
#define NEG_MEMBLT_V2_INDEX   0x0D /* Must be ignored */
 
#define NEG_MEM3BLT_V2_INDEX   0x0E /* Must be ignored */
 
#define NEG_MULTIDSTBLT_INDEX   0x0F
 
#define NEG_MULTIPATBLT_INDEX   0x10
 
#define NEG_MULTISCRBLT_INDEX   0x11
 
#define NEG_MULTIOPAQUERECT_INDEX   0x12
 
#define NEG_FAST_INDEX_INDEX   0x13
 
#define NEG_POLYGON_SC_INDEX   0x14
 
#define NEG_POLYGON_CB_INDEX   0x15
 
#define NEG_POLYLINE_INDEX   0x16
 
#define NEG_UNUSED23_INDEX   0x17 /* Must be ignored */
 
#define NEG_FAST_GLYPH_INDEX   0x18
 
#define NEG_ELLIPSE_SC_INDEX   0x19
 
#define NEG_ELLIPSE_CB_INDEX   0x1A
 
#define NEG_GLYPH_INDEX_INDEX   0x1B
 
#define NEG_GLYPH_WEXTTEXTOUT_INDEX   0x1C /* Must be ignored */
 
#define NEG_GLYPH_WLONGTEXTOUT_INDEX   0x1D /* Must be ignored */
 
#define NEG_GLYPH_WLONGEXTTEXTOUT_INDEX   0x1E /* Must be ignored */
 
#define NEG_UNUSED31_INDEX   0x1F /* Must be ignored */
 
#define GLYPH_SUPPORT_NONE   0x0000
 
#define GLYPH_SUPPORT_PARTIAL   0x0001
 
#define GLYPH_SUPPORT_FULL   0x0002
 
#define GLYPH_SUPPORT_ENCODE   0x0003
 
#define TSC_PROXY_MODE_NONE_DIRECT   0x0
 
#define TSC_PROXY_MODE_DIRECT   0x1
 
#define TSC_PROXY_MODE_DETECT   0x2
 
#define TSC_PROXY_MODE_DEFAULT   0x3
 
#define TSC_PROXY_MODE_NONE_DETECT   0x4
 
#define TSC_PROXY_CREDS_MODE_USERPASS   0x0
 
#define TSC_PROXY_CREDS_MODE_SMARTCARD   0x1
 
#define TSC_PROXY_CREDS_MODE_ANY   0x2
 
#define KEYBOARD_HOOK_LOCAL   0
 
#define KEYBOARD_HOOK_REMOTE   1
 
#define KEYBOARD_HOOK_FULLSCREEN_ONLY   2
 
#define LOGON_MSG_DISCONNECT_REFUSED   0xFFFFFFF9
 
#define LOGON_MSG_NO_PERMISSION   0xFFFFFFFA
 
#define LOGON_MSG_BUMP_OPTIONS   0xFFFFFFFB
 
#define LOGON_MSG_RECONNECT_OPTIONS   0xFFFFFFFC
 
#define LOGON_MSG_SESSION_TERMINATE   0xFFFFFFFD
 
#define LOGON_MSG_SESSION_CONTINUE   0xFFFFFFFE
 
#define LOGON_FAILED_BAD_PASSWORD   0x00000000
 
#define LOGON_FAILED_UPDATE_PASSWORD   0x00000001
 
#define LOGON_FAILED_OTHER   0x00000002
 
#define LOGON_WARNING   0x00000003
 
#define STATUS_FINDING_DESTINATION   0x00000401
 
#define STATUS_LOADING_DESTINATION   0x00000402
 
#define STATUS_BRINGING_SESSION_ONLINE   0x00000403
 
#define STATUS_REDIRECTING_TO_DESTINATION   0x00000404
 
#define STATUS_VM_LOADING   0x00000501
 
#define STATUS_VM_WAKING   0x00000502
 
#define STATUS_VM_BOOTING   0x00000503
 
#define PACKET_COMPR_TYPE_8K   0x00
 
#define PACKET_COMPR_TYPE_64K   0x01
 
#define PACKET_COMPR_TYPE_RDP6   0x02
 
#define PACKET_COMPR_TYPE_RDP61   0x03
 
#define PACKET_COMPR_TYPE_RDP8   0x04
 
#define ORIENTATION_LANDSCAPE   0
 
#define ORIENTATION_PORTRAIT   90
 
#define ORIENTATION_LANDSCAPE_FLIPPED   180
 
#define ORIENTATION_PORTRAIT_FLIPPED   270
 
#define CLIPRDR_FLAG_LOCAL_TO_REMOTE   0x01
 
#define CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES   0x02
 
#define CLIPRDR_FLAG_REMOTE_TO_LOCAL   0x10
 
#define CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES   0x20
 
#define CLIPRDR_FLAG_DEFAULT_MASK
 
#define FREERDP_MONITOR_OVERRIDE_ORIENTATION   (1 << 0) /** @since version 3.15.0 */
 
#define FREERDP_MONITOR_OVERRIDE_DESKTOP_SCALE   (1 << 1) /** @since version 3.15.0 */
 
#define FREERDP_MONITOR_OVERRIDE_DEVICE_SCALE   (1 << 2) /** @since version 3.15.0 */
 
#define RDPDR_DTYP_SERIAL   0x00000001
 
#define RDPDR_DTYP_PARALLEL   0x00000002
 
#define RDPDR_DTYP_PRINT   0x00000004
 
#define RDPDR_DTYP_FILESYSTEM   0x00000008
 
#define RDPDR_DTYP_SMARTCARD   0x00000020
 
#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  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.
 
FREERDP_API BOOL freerdp_settings_copy (rdpSettings *dst, const rdpSettings *src)
 Deep copies settings from src to dst.
 
FREERDP_API BOOL freerdp_settings_copy_item (rdpSettings *dst, const rdpSettings *src, SSIZE_T id)
 copies one setting identified by id from src to dst
 
FREERDP_API void freerdp_settings_dump (wLog *log, DWORD level, const rdpSettings *settings)
 Dumps the contents of a settings struct to a WLog logger.
 
FREERDP_API BOOL freerdp_settings_print_diff (wLog *log, DWORD level, const rdpSettings *src, const rdpSettings *other)
 Dumps the difference between two settings structs to a WLog.
 
FREERDP_API void freerdp_addin_argv_free (ADDIN_ARGV *args)
 
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)
 
FREERDP_API BOOL freerdp_addin_argv_add_argument (ADDIN_ARGV *args, const char *argument)
 
FREERDP_API BOOL freerdp_addin_argv_add_argument_ex (ADDIN_ARGV *args, const char *argument, size_t len)
 
FREERDP_API BOOL freerdp_addin_argv_del_argument (ADDIN_ARGV *args, const char *argument)
 
FREERDP_API int freerdp_addin_set_argument (ADDIN_ARGV *args, const char *argument)
 
FREERDP_API int freerdp_addin_replace_argument (ADDIN_ARGV *args, const char *previous, const char *argument)
 
FREERDP_API int freerdp_addin_set_argument_value (ADDIN_ARGV *args, const char *option, const char *value)
 
FREERDP_API int freerdp_addin_replace_argument_value (ADDIN_ARGV *args, const char *previous, const char *option, const char *value)
 
FREERDP_API BOOL freerdp_device_collection_add (rdpSettings *settings, RDPDR_DEVICE *device)
 
FREERDP_API BOOL freerdp_device_collection_del (rdpSettings *settings, const RDPDR_DEVICE *device)
 Removed a device from the settings, returns ownership of the allocated device to caller.
 
FREERDP_API RDPDR_DEVICEfreerdp_device_collection_find (rdpSettings *settings, const char *name)
 
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)
 
FREERDP_API BOOL freerdp_device_equal (const RDPDR_DEVICE *one, const RDPDR_DEVICE *other)
 
FREERDP_API void freerdp_device_collection_free (rdpSettings *settings)
 
FREERDP_API BOOL freerdp_static_channel_collection_add (rdpSettings *settings, ADDIN_ARGV *channel)
 
FREERDP_API BOOL freerdp_static_channel_collection_del (rdpSettings *settings, const char *name)
 
FREERDP_API ADDIN_ARGVfreerdp_static_channel_collection_find (rdpSettings *settings, const char *name)
 
FREERDP_API void freerdp_static_channel_collection_free (rdpSettings *settings)
 
FREERDP_API BOOL freerdp_dynamic_channel_collection_add (rdpSettings *settings, ADDIN_ARGV *channel)
 
FREERDP_API BOOL freerdp_dynamic_channel_collection_del (rdpSettings *settings, const char *name)
 
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)
 
FREERDP_API BOOL freerdp_capability_buffer_copy (rdpSettings *settings, const rdpSettings *src)
 
FREERDP_API void freerdp_server_license_issuers_free (rdpSettings *settings)
 
FREERDP_API BOOL freerdp_server_license_issuers_copy (rdpSettings *settings, char **addresses, UINT32 count)
 
FREERDP_API void freerdp_target_net_addresses_free (rdpSettings *settings)
 
FREERDP_API BOOL freerdp_target_net_addresses_copy (rdpSettings *settings, char **addresses, UINT32 count)
 
FREERDP_API void freerdp_performance_flags_make (rdpSettings *settings)
 
FREERDP_API void freerdp_performance_flags_split (rdpSettings *settings)
 
FREERDP_API BOOL freerdp_set_gateway_usage_method (rdpSettings *settings, UINT32 GatewayUsageMethod)
 
FREERDP_API void freerdp_update_gateway_usage_method (rdpSettings *settings, UINT32 GatewayEnabled, UINT32 GatewayBypassLocal)
 
FREERDP_API BOOL freerdp_settings_are_valid (const rdpSettings *settings)
 Returns TRUE if settings are in a valid state, FALSE otherwise.
 
FREERDP_API BOOL freerdp_settings_get_bool (const rdpSettings *settings, FreeRDP_Settings_Keys_Bool id)
 Returns a boolean settings value.
 
FREERDP_API BOOL freerdp_settings_set_bool (rdpSettings *settings, FreeRDP_Settings_Keys_Bool id, BOOL param)
 Sets a BOOL settings value.
 
FREERDP_API INT16 freerdp_settings_get_int16 (const rdpSettings *settings, FreeRDP_Settings_Keys_Int16 id)
 Returns a INT16 settings value.
 
FREERDP_API BOOL freerdp_settings_set_int16 (rdpSettings *settings, FreeRDP_Settings_Keys_Int16 id, INT16 param)
 Sets a INT16 settings value.
 
FREERDP_API UINT16 freerdp_settings_get_uint16 (const rdpSettings *settings, FreeRDP_Settings_Keys_UInt16 id)
 Returns a UINT16 settings value.
 
FREERDP_API BOOL freerdp_settings_set_uint16 (rdpSettings *settings, FreeRDP_Settings_Keys_UInt16 id, UINT16 param)
 Sets a UINT16 settings value.
 
FREERDP_API INT32 freerdp_settings_get_int32 (const rdpSettings *settings, FreeRDP_Settings_Keys_Int32 id)
 Returns a INT32 settings value.
 
FREERDP_API BOOL freerdp_settings_set_int32 (rdpSettings *settings, FreeRDP_Settings_Keys_Int32 id, INT32 param)
 Sets a INT32 settings value.
 
FREERDP_API UINT32 freerdp_settings_get_uint32 (const rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id)
 Returns a UINT32 settings value.
 
FREERDP_API BOOL freerdp_settings_set_uint32 (rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id, UINT32 param)
 Sets a UINT32 settings value.
 
FREERDP_API INT64 freerdp_settings_get_int64 (const rdpSettings *settings, FreeRDP_Settings_Keys_Int64 id)
 Returns a INT64 settings value.
 
FREERDP_API BOOL freerdp_settings_set_int64 (rdpSettings *settings, FreeRDP_Settings_Keys_Int64 id, INT64 param)
 Sets a INT64 settings value.
 
FREERDP_API UINT64 freerdp_settings_get_uint64 (const rdpSettings *settings, FreeRDP_Settings_Keys_UInt64 id)
 Returns a UINT64 settings value.
 
FREERDP_API BOOL freerdp_settings_set_uint64 (rdpSettings *settings, FreeRDP_Settings_Keys_UInt64 id, UINT64 param)
 Sets a UINT64 settings value.
 
FREERDP_API const char * freerdp_settings_get_string (const rdpSettings *settings, FreeRDP_Settings_Keys_String id)
 Returns a immutable string settings value.
 
FREERDP_API char * freerdp_settings_get_string_writable (rdpSettings *settings, FreeRDP_Settings_Keys_String id)
 Returns a string settings value.
 
FREERDP_API BOOL freerdp_settings_set_string_len (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *param, size_t len)
 Sets a string settings value. The param is copied.
 
FREERDP_API BOOL freerdp_settings_set_string (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *param)
 Sets a string settings value. The param is copied.
 
FREERDP_API BOOL freerdp_settings_append_string (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *separator, const char *param)
 appends a string to a settings value. The param is copied. If the initial value of the setting was not empty,
 
FREERDP_API BOOL freerdp_settings_set_string_from_utf16 (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const WCHAR *param)
 Sets a string settings value. The param is converted to UTF-8 and the copy stored.
 
FREERDP_API BOOL freerdp_settings_set_string_from_utf16N (rdpSettings *settings, FreeRDP_Settings_Keys_String id, const WCHAR *param, size_t length)
 Sets a string settings value. The param is converted to UTF-8 and the copy stored.
 
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.
 
FREERDP_API const void * freerdp_settings_get_pointer (const rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id)
 Returns a immutable pointer settings value.
 
FREERDP_API void * freerdp_settings_get_pointer_writable (rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id)
 Returns a mutable pointer settings value.
 
FREERDP_API BOOL freerdp_settings_set_pointer (rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *data)
 Set a pointer to value data.
 
FREERDP_API BOOL freerdp_settings_set_pointer_len (rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *data, size_t len)
 Set a pointer to value data.
 
FREERDP_API const void * freerdp_settings_get_pointer_array (const rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, size_t offset)
 
FREERDP_API void * freerdp_settings_get_pointer_array_writable (const rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, size_t offset)
 
FREERDP_API BOOL freerdp_settings_set_pointer_array (rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, size_t offset, const void *data)
 

to value \b value

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

The value will be checked internally:

  • Integer types must be within boundaries
  • BOOL must be any of {'true', 'false', 'on', 'off', '0', '1'} (case insensitive)
  • Strings are passed on as is
  • Pointers are also passed as is
Parameters
settingsThe settings instance to set the value, must not be NULL
nameThe name of the settings key (like 'FreeRDP_Domain', same as output of freerdp_settings_get_name_for_key ) Must not be NULL
valueThe value of the setting. Must not be NULL
Note
If the function fails check wLog output for details
Since
version 3.0.0
Returns
TRUE in case of success, FALSE otherwise.
FREERDP_API BOOL freerdp_settings_set_value_for_name (rdpSettings *settings, const char *name, const char *value)
 
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_API SSIZE_T freerdp_settings_get_type_for_name (const char *value)
 Get a key type for the name string of that key.
 
FREERDP_API SSIZE_T freerdp_settings_get_type_for_key (SSIZE_T key)
 Get a key type for the key index.
 
FREERDP_API const char * freerdp_settings_get_type_name_for_key (SSIZE_T key)
 Returns the type name for a key.
 
FREERDP_API const char * freerdp_settings_get_type_name_for_type (SSIZE_T type)
 Returns the type name for a type.
 
FREERDP_API const char * freerdp_settings_get_name_for_key (SSIZE_T key)
 Returns the type name for a key.
 
FREERDP_API UINT32 freerdp_settings_get_codecs_flags (const rdpSettings *settings)
 helper function to get a mask of supported codec flags.
 
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.
 
FREERDP_API const char * freerdp_settings_get_server_name (const rdpSettings *settings)
 A helper function to return the correct server name.
 
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.
 
FREERDP_API const char * freerdp_rdp_version_string (UINT32 version)
 Returns a stringified representation of the RDP protocol version.
 
FREERDP_API const char * freerdp_rdpdr_dtyp_string (UINT32 type)
 Returns a string representation of RDPDR_DTYP_*.
 
FREERDP_API const char * freerdp_encryption_level_string (UINT32 EncryptionLevel)
 
FREERDP_API const char * freerdp_encryption_methods_string (UINT32 EncryptionLevel, char *buffer, size_t size)
 
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
 
FREERDP_API char * freerdp_settings_get_config_path (void)
 return the configuration directory for the library
 
FREERDP_API BOOL freerdp_settings_set_monitor_def_array_sorted (rdpSettings *settings, const rdpMonitor *monitors, size_t count)
 Sort monitor array according to:
 
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.
 
FREERDP_API rdpSettings * freerdp_settings_deserialize (const char *json, size_t length)
 A function that converts a JSON string to a rdpSettings struct.
 

Detailed Description

This is the FreeRDP settings module.

FreeRDP: A Remote Desktop Protocol Implementation RDP Settings

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

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

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

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

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

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

The lifetime of the settings is as follows:

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

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

FreeRDP: A Remote Desktop Protocol Implementation RDP Settings

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

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

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

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

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

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

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

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

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


Data Structure Documentation

◆ TARGET_NET_ADDRESS

struct TARGET_NET_ADDRESS

Definition at line 290 of file settings_types.h.

Data Fields
LPWSTR Address
UINT32 Length

◆ ARC_CS_PRIVATE_PACKET

struct ARC_CS_PRIVATE_PACKET

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

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

◆ ADDIN_ARGV

struct ADDIN_ARGV

Definition at line 366 of file settings_types.h.

Data Fields
int argc
char ** argv

◆ rdp_ext_set

struct rdp_ext_set

Definition at line 374 of file settings_types.h.

Data Fields
void * data
char name[256]

◆ BITMAP_CACHE_CELL_INFO

struct BITMAP_CACHE_CELL_INFO

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

Data Fields
UINT32 numEntries
BOOL persistent

◆ GLYPH_CACHE_DEFINITION

struct GLYPH_CACHE_DEFINITION

Definition at line 396 of file settings_types.h.

Data Fields
UINT16 cacheEntries
UINT16 cacheMaximumCellSize

◆ MONITOR_DEF

struct MONITOR_DEF

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

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

◆ rdpMonitor

struct rdpMonitor

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

Data Fields
UINT32 Id
char * Name
UINT32 Type

◆ RDPDR_DRIVE

struct RDPDR_DRIVE

Definition at line 447 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 454 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 461 of file settings_types.h.

Collaboration diagram for RDPDR_SMARTCARD:
Data Fields
RDPDR_DEVICE device

◆ RDPDR_SERIAL

struct RDPDR_SERIAL

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

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

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE   0x01

Definition at line 332 of file settings_types.h.

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES   0x02

Definition at line 333 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL   0x10

Definition at line 334 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES   0x20

Definition at line 335 of file settings_types.h.

◆ CONNECTION_TYPE_AUTODETECT

#define CONNECTION_TYPE_AUTODETECT   0x07

Definition at line 82 of file settings_types.h.

◆ CONNECTION_TYPE_BROADBAND_HIGH

#define CONNECTION_TYPE_BROADBAND_HIGH   0x04

Definition at line 79 of file settings_types.h.

◆ CONNECTION_TYPE_BROADBAND_LOW

#define CONNECTION_TYPE_BROADBAND_LOW   0x02

Definition at line 77 of file settings_types.h.

◆ CONNECTION_TYPE_INVALID

#define CONNECTION_TYPE_INVALID
Value:
0x00

Definition at line 74 of file settings_types.h.

◆ CONNECTION_TYPE_LAN

#define CONNECTION_TYPE_LAN   0x06

Definition at line 81 of file settings_types.h.

◆ CONNECTION_TYPE_MODEM

#define CONNECTION_TYPE_MODEM   0x01

Definition at line 76 of file settings_types.h.

◆ CONNECTION_TYPE_SATELLITE

#define CONNECTION_TYPE_SATELLITE   0x03

Definition at line 78 of file settings_types.h.

◆ CONNECTION_TYPE_WAN

#define CONNECTION_TYPE_WAN   0x05

Definition at line 80 of file settings_types.h.

◆ CS_CLUSTER

#define CS_CLUSTER   0xC004

Definition at line 88 of file settings_types.h.

◆ CS_CORE

#define CS_CORE   0xC001

Definition at line 85 of file settings_types.h.

◆ CS_MCS_MSGCHANNEL

#define CS_MCS_MSGCHANNEL   0xC006

Definition at line 90 of file settings_types.h.

◆ CS_MONITOR

#define CS_MONITOR   0xC005

Definition at line 89 of file settings_types.h.

◆ CS_MONITOR_EX

#define CS_MONITOR_EX   0xC008

Definition at line 91 of file settings_types.h.

◆ CS_MULTITRANSPORT

#define CS_MULTITRANSPORT   0xC00A

Definition at line 93 of file settings_types.h.

◆ CS_NET

#define CS_NET   0xC003

Definition at line 87 of file settings_types.h.

◆ CS_SECURITY

#define CS_SECURITY   0xC002

Definition at line 86 of file settings_types.h.

◆ CS_UNUSED1

#define CS_UNUSED1   0xC00C

Definition at line 92 of file settings_types.h.

◆ DEFAULT_COOKIE_MAX_LENGTH

#define DEFAULT_COOKIE_MAX_LENGTH   0xFF

Definition at line 228 of file settings_types.h.

◆ ENCRYPTION_LEVEL_CLIENT_COMPATIBLE

#define ENCRYPTION_LEVEL_CLIENT_COMPATIBLE   0x00000002

Definition at line 191 of file settings_types.h.

◆ ENCRYPTION_LEVEL_FIPS

#define ENCRYPTION_LEVEL_FIPS   0x00000004

Definition at line 193 of file settings_types.h.

◆ ENCRYPTION_LEVEL_HIGH

#define ENCRYPTION_LEVEL_HIGH   0x00000003

Definition at line 192 of file settings_types.h.

◆ ENCRYPTION_LEVEL_LOW

#define ENCRYPTION_LEVEL_LOW   0x00000001

Definition at line 190 of file settings_types.h.

◆ ENCRYPTION_LEVEL_NONE

#define ENCRYPTION_LEVEL_NONE   0x00000000

Definition at line 189 of file settings_types.h.

◆ ENCRYPTION_METHOD_128BIT

#define ENCRYPTION_METHOD_128BIT   0x00000002

Definition at line 184 of file settings_types.h.

◆ ENCRYPTION_METHOD_40BIT

#define ENCRYPTION_METHOD_40BIT   0x00000001

Definition at line 183 of file settings_types.h.

◆ ENCRYPTION_METHOD_56BIT

#define ENCRYPTION_METHOD_56BIT   0x00000008

Definition at line 185 of file settings_types.h.

◆ ENCRYPTION_METHOD_FIPS

#define ENCRYPTION_METHOD_FIPS   0x00000010

Definition at line 186 of file settings_types.h.

◆ ENCRYPTION_METHOD_NONE

#define ENCRYPTION_METHOD_NONE   0x00000000

Definition at line 182 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_DESKTOP_SCALE

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

Definition at line 343 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_DEVICE_SCALE

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

Definition at line 344 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_ORIENTATION

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

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

◆ GLYPH_SUPPORT_ENCODE

#define GLYPH_SUPPORT_ENCODE   0x0003

Definition at line 271 of file settings_types.h.

◆ GLYPH_SUPPORT_FULL

#define GLYPH_SUPPORT_FULL   0x0002

Definition at line 270 of file settings_types.h.

◆ GLYPH_SUPPORT_NONE

#define GLYPH_SUPPORT_NONE   0x0000

Definition at line 268 of file settings_types.h.

◆ GLYPH_SUPPORT_PARTIAL

#define GLYPH_SUPPORT_PARTIAL   0x0001

Definition at line 269 of file settings_types.h.

◆ KEYBOARD_HOOK_FULLSCREEN_ONLY

#define KEYBOARD_HOOK_FULLSCREEN_ONLY   2

Definition at line 288 of file settings_types.h.

◆ KEYBOARD_HOOK_LOCAL

#define KEYBOARD_HOOK_LOCAL   0

Definition at line 286 of file settings_types.h.

◆ KEYBOARD_HOOK_REMOTE

#define KEYBOARD_HOOK_REMOTE   1

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

◆ LOGON_FAILED_OTHER

#define LOGON_FAILED_OTHER   0x00000002

Definition at line 306 of file settings_types.h.

◆ LOGON_FAILED_UPDATE_PASSWORD

#define LOGON_FAILED_UPDATE_PASSWORD   0x00000001

Definition at line 305 of file settings_types.h.

◆ LOGON_MSG_BUMP_OPTIONS

#define LOGON_MSG_BUMP_OPTIONS   0xFFFFFFFB

Definition at line 299 of file settings_types.h.

◆ LOGON_MSG_DISCONNECT_REFUSED

#define LOGON_MSG_DISCONNECT_REFUSED   0xFFFFFFF9

Definition at line 297 of file settings_types.h.

◆ LOGON_MSG_NO_PERMISSION

#define LOGON_MSG_NO_PERMISSION   0xFFFFFFFA

Definition at line 298 of file settings_types.h.

◆ LOGON_MSG_RECONNECT_OPTIONS

#define LOGON_MSG_RECONNECT_OPTIONS   0xFFFFFFFC

Definition at line 300 of file settings_types.h.

◆ LOGON_MSG_SESSION_CONTINUE

#define LOGON_MSG_SESSION_CONTINUE   0xFFFFFFFE

Definition at line 302 of file settings_types.h.

◆ LOGON_MSG_SESSION_TERMINATE

#define LOGON_MSG_SESSION_TERMINATE   0xFFFFFFFD

Definition at line 301 of file settings_types.h.

◆ LOGON_WARNING

#define LOGON_WARNING   0x00000003

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

◆ NEG_AEXTTEXTOUT_INDEX

#define NEG_AEXTTEXTOUT_INDEX   0x06 /* Must be ignored */

Definition at line 240 of file settings_types.h.

◆ NEG_ATEXTOUT_INDEX

#define NEG_ATEXTOUT_INDEX   0x05

Definition at line 239 of file settings_types.h.

◆ NEG_DRAWNINEGRID_INDEX

#define NEG_DRAWNINEGRID_INDEX   0x07 /* Must be ignored */

Definition at line 241 of file settings_types.h.

◆ NEG_DSTBLT_INDEX

#define NEG_DSTBLT_INDEX   0x00

Definition at line 234 of file settings_types.h.

◆ NEG_ELLIPSE_CB_INDEX

#define NEG_ELLIPSE_CB_INDEX   0x1A

Definition at line 260 of file settings_types.h.

◆ NEG_ELLIPSE_SC_INDEX

#define NEG_ELLIPSE_SC_INDEX   0x19

Definition at line 259 of file settings_types.h.

◆ NEG_FAST_GLYPH_INDEX

#define NEG_FAST_GLYPH_INDEX   0x18

Definition at line 258 of file settings_types.h.

◆ NEG_FAST_INDEX_INDEX

#define NEG_FAST_INDEX_INDEX   0x13

Definition at line 253 of file settings_types.h.

◆ NEG_GLYPH_INDEX_INDEX

#define NEG_GLYPH_INDEX_INDEX   0x1B

Definition at line 261 of file settings_types.h.

◆ NEG_GLYPH_WEXTTEXTOUT_INDEX

#define NEG_GLYPH_WEXTTEXTOUT_INDEX   0x1C /* Must be ignored */

Definition at line 262 of file settings_types.h.

◆ NEG_GLYPH_WLONGEXTTEXTOUT_INDEX

#define NEG_GLYPH_WLONGEXTTEXTOUT_INDEX   0x1E /* Must be ignored */

Definition at line 264 of file settings_types.h.

◆ NEG_GLYPH_WLONGTEXTOUT_INDEX

#define NEG_GLYPH_WLONGTEXTOUT_INDEX   0x1D /* Must be ignored */

Definition at line 263 of file settings_types.h.

◆ NEG_LINETO_INDEX

#define NEG_LINETO_INDEX   0x08

Definition at line 242 of file settings_types.h.

◆ NEG_MEM3BLT_INDEX

#define NEG_MEM3BLT_INDEX   0x04

Definition at line 238 of file settings_types.h.

◆ NEG_MEM3BLT_V2_INDEX

#define NEG_MEM3BLT_V2_INDEX   0x0E /* Must be ignored */

Definition at line 248 of file settings_types.h.

◆ NEG_MEMBLT_INDEX

#define NEG_MEMBLT_INDEX   0x03

Definition at line 237 of file settings_types.h.

◆ NEG_MEMBLT_V2_INDEX

#define NEG_MEMBLT_V2_INDEX   0x0D /* Must be ignored */

Definition at line 247 of file settings_types.h.

◆ NEG_MULTI_DRAWNINEGRID_INDEX

#define NEG_MULTI_DRAWNINEGRID_INDEX   0x09

Definition at line 243 of file settings_types.h.

◆ NEG_MULTIDSTBLT_INDEX

#define NEG_MULTIDSTBLT_INDEX   0x0F

Definition at line 249 of file settings_types.h.

◆ NEG_MULTIOPAQUERECT_INDEX

#define NEG_MULTIOPAQUERECT_INDEX   0x12

Definition at line 252 of file settings_types.h.

◆ NEG_MULTIPATBLT_INDEX

#define NEG_MULTIPATBLT_INDEX   0x10

Definition at line 250 of file settings_types.h.

◆ NEG_MULTISCRBLT_INDEX

#define NEG_MULTISCRBLT_INDEX   0x11

Definition at line 251 of file settings_types.h.

◆ NEG_OPAQUE_RECT_INDEX

#define NEG_OPAQUE_RECT_INDEX   0x0A /* Must be ignored */

Definition at line 244 of file settings_types.h.

◆ NEG_PATBLT_INDEX

#define NEG_PATBLT_INDEX   0x01

Definition at line 235 of file settings_types.h.

◆ NEG_POLYGON_CB_INDEX

#define NEG_POLYGON_CB_INDEX   0x15

Definition at line 255 of file settings_types.h.

◆ NEG_POLYGON_SC_INDEX

#define NEG_POLYGON_SC_INDEX   0x14

Definition at line 254 of file settings_types.h.

◆ NEG_POLYLINE_INDEX

#define NEG_POLYLINE_INDEX   0x16

Definition at line 256 of file settings_types.h.

◆ NEG_SAVEBITMAP_INDEX

#define NEG_SAVEBITMAP_INDEX   0x0B

Definition at line 245 of file settings_types.h.

◆ NEG_SCRBLT_INDEX

#define NEG_SCRBLT_INDEX   0x02

Definition at line 236 of file settings_types.h.

◆ NEG_UNUSED23_INDEX

#define NEG_UNUSED23_INDEX   0x17 /* Must be ignored */

Definition at line 257 of file settings_types.h.

◆ NEG_UNUSED31_INDEX

#define NEG_UNUSED31_INDEX   0x1F /* Must be ignored */

Definition at line 265 of file settings_types.h.

◆ NEG_WTEXTOUT_INDEX

#define NEG_WTEXTOUT_INDEX   0x0C /* Must be ignored */

Definition at line 246 of file settings_types.h.

◆ ORIENTATION_LANDSCAPE

#define ORIENTATION_LANDSCAPE   0

Definition at line 326 of file settings_types.h.

◆ ORIENTATION_LANDSCAPE_FLIPPED

#define ORIENTATION_LANDSCAPE_FLIPPED   180

Definition at line 328 of file settings_types.h.

◆ ORIENTATION_PORTRAIT

#define ORIENTATION_PORTRAIT   90

Definition at line 327 of file settings_types.h.

◆ ORIENTATION_PORTRAIT_FLIPPED

#define ORIENTATION_PORTRAIT_FLIPPED   270

Definition at line 329 of file settings_types.h.

◆ PACKET_COMPR_TYPE_64K

#define PACKET_COMPR_TYPE_64K   0x01

Definition at line 320 of file settings_types.h.

◆ PACKET_COMPR_TYPE_8K

#define PACKET_COMPR_TYPE_8K   0x00

Definition at line 319 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP6

#define PACKET_COMPR_TYPE_RDP6   0x02

Definition at line 321 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP61

#define PACKET_COMPR_TYPE_RDP61   0x03

Definition at line 322 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP8

#define PACKET_COMPR_TYPE_RDP8   0x04

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

◆ PROXY_TYPE_IGNORE

#define PROXY_TYPE_IGNORE   0xFFFF

Definition at line 483 of file settings_types.h.

◆ PROXY_TYPE_NONE

#define PROXY_TYPE_NONE   0

Definition at line 480 of file settings_types.h.

◆ PROXY_TYPE_SOCKS

#define PROXY_TYPE_SOCKS   2

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

◆ RDPDR_DTYP_FILESYSTEM

#define RDPDR_DTYP_FILESYSTEM   0x00000008

Definition at line 437 of file settings_types.h.

◆ RDPDR_DTYP_PARALLEL

#define RDPDR_DTYP_PARALLEL   0x00000002

Definition at line 435 of file settings_types.h.

◆ RDPDR_DTYP_PRINT

#define RDPDR_DTYP_PRINT   0x00000004

Definition at line 436 of file settings_types.h.

◆ RDPDR_DTYP_SERIAL

#define RDPDR_DTYP_SERIAL   0x00000001

Definition at line 434 of file settings_types.h.

◆ RDPDR_DTYP_SMARTCARD

#define RDPDR_DTYP_SMARTCARD   0x00000020

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

◆ STATUS_FINDING_DESTINATION

#define STATUS_FINDING_DESTINATION   0x00000401

Definition at line 310 of file settings_types.h.

◆ STATUS_LOADING_DESTINATION

#define STATUS_LOADING_DESTINATION   0x00000402

Definition at line 311 of file settings_types.h.

◆ STATUS_REDIRECTING_TO_DESTINATION

#define STATUS_REDIRECTING_TO_DESTINATION   0x00000404

Definition at line 313 of file settings_types.h.

◆ STATUS_VM_BOOTING

#define STATUS_VM_BOOTING   0x00000503

Definition at line 316 of file settings_types.h.

◆ STATUS_VM_LOADING

#define STATUS_VM_LOADING   0x00000501

Definition at line 314 of file settings_types.h.

◆ STATUS_VM_WAKING

#define STATUS_VM_WAKING   0x00000502

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

◆ TSC_PROXY_CREDS_MODE_SMARTCARD

#define TSC_PROXY_CREDS_MODE_SMARTCARD   0x1

Definition at line 282 of file settings_types.h.

◆ TSC_PROXY_CREDS_MODE_USERPASS

#define TSC_PROXY_CREDS_MODE_USERPASS   0x0

Definition at line 281 of file settings_types.h.

◆ TSC_PROXY_MODE_DEFAULT

#define TSC_PROXY_MODE_DEFAULT   0x3

Definition at line 277 of file settings_types.h.

◆ TSC_PROXY_MODE_DETECT

#define TSC_PROXY_MODE_DETECT   0x2

Definition at line 276 of file settings_types.h.

◆ TSC_PROXY_MODE_DIRECT

#define TSC_PROXY_MODE_DIRECT   0x1

Definition at line 275 of file settings_types.h.

◆ TSC_PROXY_MODE_NONE_DETECT

#define TSC_PROXY_MODE_NONE_DETECT   0x4

Definition at line 278 of file settings_types.h.

◆ TSC_PROXY_MODE_NONE_DIRECT

#define TSC_PROXY_MODE_NONE_DIRECT   0x0

Definition at line 274 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

◆ rdp_settings_type

enum rdp_settings_type

Definition at line 488 of file settings_types.h.

492 {
493 RDP_SETTINGS_TYPE_BOOL,
494 RDP_SETTINGS_TYPE_UINT16,
495 RDP_SETTINGS_TYPE_INT16,
496 RDP_SETTINGS_TYPE_UINT32,
497 RDP_SETTINGS_TYPE_INT32,
498 RDP_SETTINGS_TYPE_UINT64,
499 RDP_SETTINGS_TYPE_INT64,

◆ RDP_VERSION

enum RDP_VERSION

Definition at line 106 of file settings_types.h.

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

Function Documentation

◆ freerdp_addin_argv_add_argument()

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

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

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

◆ freerdp_addin_argv_add_argument_ex()

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

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

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

◆ freerdp_addin_argv_clone()

FREERDP_API ADDIN_ARGV * freerdp_addin_argv_clone ( const ADDIN_ARGV args)

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

816{
817 union
818 {
819 char** c;
820 const char** cc;
821 } cnv;
822 if (!args)
823 return NULL;
824 cnv.c = args->argv;
825 return freerdp_addin_argv_new(WINPR_ASSERTING_INT_CAST(uint32_t, args->argc), cnv.cc);
826}

◆ freerdp_addin_argv_del_argument()

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

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

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

◆ freerdp_addin_argv_free()

FREERDP_API void freerdp_addin_argv_free ( ADDIN_ARGV args)

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

766{
767 if (!args)
768 return;
769
770 if (args->argv)
771 {
772 for (int index = 0; index < args->argc; index++)
773 free(args->argv[index]);
774 free((void*)args->argv);
775 }
776
777 free(args);
778}

◆ freerdp_addin_argv_new()

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

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

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

◆ freerdp_addin_replace_argument()

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

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

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

◆ freerdp_addin_replace_argument_value()

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

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

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

◆ freerdp_addin_set_argument()

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

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

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

◆ freerdp_addin_set_argument_value()

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

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

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

◆ freerdp_capability_buffer_copy()

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

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

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

◆ freerdp_capability_buffer_free()

FREERDP_API void freerdp_capability_buffer_free ( rdpSettings *  settings)

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

865{
866 WINPR_ASSERT(settings);
867
868 freerdp_capability_data_free(settings, 0, TRUE);
869
870 free(settings->ReceivedCapabilityDataSizes);
871 settings->ReceivedCapabilityDataSizes = NULL;
872
873 free(settings->ReceivedCapabilities);
874 settings->ReceivedCapabilities = NULL;
875
876 settings->ReceivedCapabilitiesSize = 0;
877}

◆ freerdp_device_clone()

FREERDP_API RDPDR_DEVICE * freerdp_device_clone ( const RDPDR_DEVICE device)

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

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

◆ freerdp_device_collection_add()

FREERDP_API BOOL freerdp_device_collection_add ( rdpSettings *  settings,
RDPDR_DEVICE device 
)

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

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

◆ freerdp_device_collection_del()

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

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

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

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

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

◆ freerdp_device_collection_find()

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

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

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

◆ freerdp_device_collection_find_type()

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

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

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

◆ freerdp_device_collection_free()

FREERDP_API void freerdp_device_collection_free ( rdpSettings *  settings)

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

561{
562 WINPR_ASSERT(settings);
563
564 if (settings->DeviceArray)
565 {
566 for (UINT32 index = 0; index < settings->DeviceArraySize; index++)
567 (void)freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, index, NULL);
568 }
569
570 free((void*)settings->DeviceArray);
571
572 (void)freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, NULL);
573 (void)freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0);
574 (void)freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0);
575}
FREERDP_API BOOL freerdp_settings_set_pointer(rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *data)
Set a pointer to value data.

◆ freerdp_device_equal()

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

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

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

◆ freerdp_device_free()

FREERDP_API void freerdp_device_free ( RDPDR_DEVICE device)

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

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

◆ freerdp_device_new()

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

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

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

◆ freerdp_dynamic_channel_collection_add()

FREERDP_API BOOL freerdp_dynamic_channel_collection_add ( rdpSettings *  settings,
ADDIN_ARGV channel 
)

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

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

◆ freerdp_dynamic_channel_collection_del()

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

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

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

◆ freerdp_dynamic_channel_collection_find()

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

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

749{
750 WINPR_ASSERT(settings);
751 WINPR_ASSERT(name);
752
753 for (UINT32 index = 0;
754 index < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount); index++)
755 {
756 ADDIN_ARGV* channel = settings->DynamicChannelArray[index];
757
758 if (strcmp(channel->argv[0], name) == 0)
759 return channel;
760 }
761
762 return NULL;
763}

◆ freerdp_dynamic_channel_collection_free()

FREERDP_API void freerdp_dynamic_channel_collection_free ( rdpSettings *  settings)

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

829{
830 WINPR_ASSERT(settings);
831
832 if (settings->DynamicChannelArray)
833 {
834 for (UINT32 i = 0;
835 i < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize); i++)
836 freerdp_addin_argv_free(settings->DynamicChannelArray[i]);
837 }
838
839 free((void*)settings->DynamicChannelArray);
840 (void)freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0);
841 settings->DynamicChannelArray = NULL;
842 (void)freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0);
843}

◆ freerdp_encryption_level_string()

FREERDP_API const char * freerdp_encryption_level_string ( UINT32  EncryptionLevel)

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

2318{
2319 switch (EncryptionLevel)
2320 {
2321 case ENCRYPTION_LEVEL_NONE:
2322 return "ENCRYPTION_LEVEL_NONE";
2323 case ENCRYPTION_LEVEL_LOW:
2324 return "ENCRYPTION_LEVEL_LOW";
2325 case ENCRYPTION_LEVEL_CLIENT_COMPATIBLE:
2326 return "ENCRYPTION_LEVEL_CLIENT_COMPATIBLE";
2327 case ENCRYPTION_LEVEL_HIGH:
2328 return "ENCRYPTION_LEVEL_HIGH";
2329 case ENCRYPTION_LEVEL_FIPS:
2330 return "ENCRYPTION_LEVEL_FIPS";
2331 default:
2332 return "ENCRYPTION_LEVEL_UNKNOWN";
2333 }
2334}

◆ freerdp_encryption_methods_string()

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

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

2337{
2338 if (EncryptionMethods == ENCRYPTION_METHOD_NONE)
2339 {
2340 winpr_str_append("ENCRYPTION_METHOD_NONE", buffer, size, "|");
2341 return buffer;
2342 }
2343
2344 if (EncryptionMethods & ENCRYPTION_METHOD_40BIT)
2345 {
2346 winpr_str_append("ENCRYPTION_METHOD_40BIT", buffer, size, "|");
2347 }
2348 if (EncryptionMethods & ENCRYPTION_METHOD_128BIT)
2349 {
2350 winpr_str_append("ENCRYPTION_METHOD_128BIT", buffer, size, "|");
2351 }
2352 if (EncryptionMethods & ENCRYPTION_METHOD_56BIT)
2353 {
2354 winpr_str_append("ENCRYPTION_METHOD_56BIT", buffer, size, "|");
2355 }
2356 if (EncryptionMethods & ENCRYPTION_METHOD_FIPS)
2357 {
2358 winpr_str_append("ENCRYPTION_METHOD_FIPS", buffer, size, "|");
2359 }
2360
2361 return buffer;
2362}

◆ freerdp_performance_flags_make()

FREERDP_API void freerdp_performance_flags_make ( rdpSettings *  settings)

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

1054{
1055 UINT32 PerformanceFlags = PERF_FLAG_NONE;
1056
1057 if (freerdp_settings_get_bool(settings, FreeRDP_AllowFontSmoothing))
1058 PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
1059
1060 if (freerdp_settings_get_bool(settings, FreeRDP_AllowDesktopComposition))
1061 PerformanceFlags |= PERF_ENABLE_DESKTOP_COMPOSITION;
1062
1063 if (freerdp_settings_get_bool(settings, FreeRDP_DisableWallpaper))
1064 PerformanceFlags |= PERF_DISABLE_WALLPAPER;
1065
1066 if (freerdp_settings_get_bool(settings, FreeRDP_DisableFullWindowDrag))
1067 PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
1068
1069 if (freerdp_settings_get_bool(settings, FreeRDP_DisableMenuAnims))
1070 PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
1071
1072 if (freerdp_settings_get_bool(settings, FreeRDP_DisableThemes))
1073 PerformanceFlags |= PERF_DISABLE_THEMING;
1074 (void)freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags);
1075}
FREERDP_API BOOL freerdp_settings_get_bool(const rdpSettings *settings, FreeRDP_Settings_Keys_Bool id)
Returns a boolean settings value.

◆ freerdp_performance_flags_split()

FREERDP_API void freerdp_performance_flags_split ( rdpSettings *  settings)

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

1078{
1080 settings, FreeRDP_AllowFontSmoothing,
1081 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1082 PERF_ENABLE_FONT_SMOOTHING)
1083 ? TRUE
1084 : FALSE);
1086 settings, FreeRDP_AllowDesktopComposition,
1087 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1088 PERF_ENABLE_DESKTOP_COMPOSITION)
1089 ? TRUE
1090 : FALSE);
1092 settings, FreeRDP_DisableWallpaper,
1093 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_WALLPAPER)
1094 ? TRUE
1095 : FALSE);
1097 settings, FreeRDP_DisableFullWindowDrag,
1098 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1099 PERF_DISABLE_FULLWINDOWDRAG)
1100 ? TRUE
1101 : FALSE);
1103 settings, FreeRDP_DisableMenuAnims,
1104 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1105 PERF_DISABLE_MENUANIMATIONS)
1106 ? TRUE
1107 : FALSE);
1109 settings, FreeRDP_DisableThemes,
1110 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_THEMING)
1111 ? TRUE
1112 : FALSE);
1113}
FREERDP_API BOOL freerdp_settings_set_bool(rdpSettings *settings, FreeRDP_Settings_Keys_Bool id, BOOL param)
Sets a BOOL settings value.

◆ freerdp_rail_support_flags_to_string()

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

Returns a stringified representation of RAIL support flags.

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

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

2147{
2148 const UINT32 mask =
2149 RAIL_LEVEL_SUPPORTED | RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED |
2150 RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED | RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED |
2151 RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED | RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED |
2152 RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED | RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED;
2153
2154 if (flags & RAIL_LEVEL_SUPPORTED)
2155 winpr_str_append("RAIL_LEVEL_SUPPORTED", buffer, length, "|");
2156 if (flags & RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED)
2157 winpr_str_append("RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED", buffer, length, "|");
2158 if (flags & RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED)
2159 winpr_str_append("RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED", buffer, length, "|");
2160 if (flags & RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED)
2161 winpr_str_append("RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED", buffer, length, "|");
2162 if (flags & RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED)
2163 winpr_str_append("RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED", buffer, length, "|");
2164 if (flags & RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED)
2165 winpr_str_append("RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED", buffer, length, "|");
2166 if (flags & RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED)
2167 winpr_str_append("RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED", buffer, length, "|");
2168 if (flags & RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED)
2169 winpr_str_append("RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED", buffer, length, "|");
2170 if (flags & RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED)
2171 winpr_str_append("RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED", buffer, length, "|");
2172 if ((flags & ~mask) != 0)
2173 {
2174 char tbuffer[64] = { 0 };
2175 (void)_snprintf(tbuffer, sizeof(tbuffer), "RAIL_FLAG_UNKNOWN 0x%08" PRIx32, flags & mask);
2176 winpr_str_append(tbuffer, buffer, length, "|");
2177 }
2178 return buffer;
2179}

◆ freerdp_rdp_version_string()

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

2209{
2210 switch (version)
2211 {
2212 case RDP_VERSION_4:
2213 return "RDP_VERSION_4";
2214 case RDP_VERSION_5_PLUS:
2215 return "RDP_VERSION_5_PLUS";
2216 case RDP_VERSION_10_0:
2217 return "RDP_VERSION_10_0";
2218 case RDP_VERSION_10_1:
2219 return "RDP_VERSION_10_1";
2220 case RDP_VERSION_10_2:
2221 return "RDP_VERSION_10_2";
2222 case RDP_VERSION_10_3:
2223 return "RDP_VERSION_10_3";
2224 case RDP_VERSION_10_4:
2225 return "RDP_VERSION_10_4";
2226 case RDP_VERSION_10_5:
2227 return "RDP_VERSION_10_5";
2228 case RDP_VERSION_10_6:
2229 return "RDP_VERSION_10_6";
2230 case RDP_VERSION_10_7:
2231 return "RDP_VERSION_10_7";
2232 case RDP_VERSION_10_8:
2233 return "RDP_VERSION_10_8";
2234 case RDP_VERSION_10_9:
2235 return "RDP_VERSION_10_9";
2236 case RDP_VERSION_10_10:
2237 return "RDP_VERSION_10_10";
2238 case RDP_VERSION_10_11:
2239 return "RDP_VERSION_10_11";
2240 case RDP_VERSION_10_12:
2241 return "RDP_VERSION_10_12";
2242 default:
2243 return "RDP_VERSION_UNKNOWN";
2244 }
2245}

◆ freerdp_rdpdr_dtyp_string()

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

2299{
2300 switch (type)
2301 {
2302 case RDPDR_DTYP_FILESYSTEM:
2303 return "RDPDR_DTYP_FILESYSTEM";
2304 case RDPDR_DTYP_PARALLEL:
2305 return "RDPDR_DTYP_PARALLEL";
2306 case RDPDR_DTYP_PRINT:
2307 return "RDPDR_DTYP_PRINT";
2308 case RDPDR_DTYP_SERIAL:
2309 return "RDPDR_DTYP_SERIAL";
2310 case RDPDR_DTYP_SMARTCARD:
2311 return "RDPDR_DTYP_SMARTCARD";
2312 default:
2313 return "RDPDR_DTYP_UNKNOWN";
2314 }
2315}

◆ freerdp_server_license_issuers_copy()

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

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

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

1020{
1021 WINPR_ASSERT(settings);
1022
1023 if (settings->ServerLicenseProductIssuers)
1024 {
1025 for (UINT32 x = 0; x < settings->ServerLicenseProductIssuersCount; x++)
1026 free(settings->ServerLicenseProductIssuers[x]);
1027 }
1028 free((void*)settings->ServerLicenseProductIssuers);
1029 settings->ServerLicenseProductIssuers = NULL;
1030 settings->ServerLicenseProductIssuersCount = 0;
1031}

◆ freerdp_set_gateway_usage_method()

FREERDP_API BOOL freerdp_set_gateway_usage_method ( rdpSettings *  settings,
UINT32  GatewayUsageMethod 
)

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

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

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

References freerdp_settings_set_bool(), and freerdp_settings_set_uint32().

Here is the call graph for this function:

◆ freerdp_settings_append_string()

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

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

<old value><separator><param>

is created

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

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

2391{
2392 const char* old = freerdp_settings_get_string(settings, id);
2393
2394 size_t len = 0;
2395 char* str = NULL;
2396
2397 if (!old)
2398 winpr_asprintf(&str, &len, "%s", param);
2399 else if (!separator)
2400 winpr_asprintf(&str, &len, "%s%s", old, param);
2401 else
2402 winpr_asprintf(&str, &len, "%s%s%s", old, separator, param);
2403
2404 const BOOL rc = freerdp_settings_set_string_len(settings, id, str, len);
2405 free(str);
2406 return rc;
2407}
FREERDP_API BOOL freerdp_settings_set_string_len(rdpSettings *settings, FreeRDP_Settings_Keys_String id, const char *param, size_t len)
Sets a string settings value. The param is copied.
FREERDP_API const char * freerdp_settings_get_string(const rdpSettings *settings, FreeRDP_Settings_Keys_String id)
Returns a immutable string settings value.

References freerdp_settings_get_string(), and freerdp_settings_set_string_len().

Here is the call graph for this function:

◆ freerdp_settings_are_valid()

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

2410{
2411 return settings != NULL;
2412}

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

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

1520{
1521 rdpSettings* _settings = (rdpSettings*)calloc(1, sizeof(rdpSettings));
1522
1523 if (!freerdp_settings_copy(_settings, settings))
1524 goto out_fail;
1525
1526 return _settings;
1527out_fail:
1528 WINPR_PRAGMA_DIAG_PUSH
1529 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1530 freerdp_settings_free(_settings);
1531 WINPR_PRAGMA_DIAG_POP
1532 return NULL;
1533}
void freerdp_settings_free(rdpSettings *settings)
Free a settings struct with all data in it.
BOOL freerdp_settings_copy(rdpSettings *_settings, const rdpSettings *settings)
Deep copies settings from src to dst.

References freerdp_settings_copy(), and freerdp_settings_free().

Here is the call graph for this function:

◆ freerdp_settings_copy()

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

Deep copies settings from src to dst.

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

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

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

1492{
1493 BOOL rc = 0;
1494
1495 if (!settings || !_settings)
1496 return FALSE;
1497
1498 /* This is required to free all non string buffers */
1499 freerdp_settings_free_internal(_settings);
1500 /* This copies everything except allocated non string buffers. reset all allocated buffers to
1501 * NULL to fix issues during cleanup */
1502 rc = freerdp_settings_clone_keys(_settings, settings);
1503
1504 _settings->ServerLicenseProductIssuersCount = 0;
1505 _settings->ServerLicenseProductIssuers = NULL;
1506
1507 if (!rc)
1508 goto out_fail;
1509
1510 /* Begin copying */
1511 if (!freerdp_settings_int_buffer_copy(_settings, settings))
1512 goto out_fail;
1513 return TRUE;
1514out_fail:
1515 freerdp_settings_free_internal(_settings);
1516 return FALSE;
1517}

Referenced by freerdp_settings_clone().

Here is the caller graph for this function:

◆ freerdp_settings_copy_item()

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

copies one setting identified by id from src to dst

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

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

Definition at line 432 of file settings_str.c.

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

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

FREERDP_API rdpSettings * freerdp_settings_deserialize ( const char *  json,
size_t  length 
)

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

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

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

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

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_GetObjectItem(), WINPR_JSON_GetStringValue(), WINPR_JSON_IsBool(), WINPR_JSON_IsNull(), WINPR_JSON_IsString(), WINPR_JSON_IsTrue(), and WINPR_JSON_ParseWithLength().

Here is the call graph for this function:

◆ freerdp_settings_dump()

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

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

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

Definition at line 249 of file settings_str.c.

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

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

Here is the call graph for this function:

◆ freerdp_settings_free()

FREERDP_API void freerdp_settings_free ( rdpSettings *  settings)

Free a settings struct with all data in it.

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

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

1279{
1280 if (!settings)
1281 return;
1282
1283 freerdp_settings_free_internal(settings);
1284 free(settings);
1285}

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

Here is the caller graph for this function:

◆ freerdp_settings_get_bool()

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

Returns a boolean settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_codecs_flags()

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

2001{
2002 UINT32 flags = FREERDP_CODEC_ALL;
2003 if (settings->RemoteFxCodec == FALSE)
2004 {
2005 flags &= (uint32_t)~FREERDP_CODEC_REMOTEFX;
2006 }
2007 if (settings->NSCodec == FALSE)
2008 {
2009 flags &= (uint32_t)~FREERDP_CODEC_NSCODEC;
2010 }
2011 /*TODO: check other codecs flags */
2012 return flags;
2013}

◆ freerdp_settings_get_config_path()

FREERDP_API char * freerdp_settings_get_config_path ( void  )

return the configuration directory for the library

Returns
The current configuration path or NULL
Since
version 3.6.0

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

768{
769 char* path = NULL;
770 /* For default FreeRDP continue using same config directory
771 * as in old releases.
772 * Custom builds use <Vendor>/<Product> as config folder. */
773#if !defined(WITH_FULL_CONFIG_PATH)
774 if (_stricmp(FREERDP_VENDOR_STRING, FREERDP_PRODUCT_STRING) == 0)
775 return freerdp_settings_get_legacy_config_path();
776#endif
777
778 char* base = GetKnownSubPath(KNOWN_PATH_XDG_CONFIG_HOME, FREERDP_VENDOR_STRING);
779 if (base)
780 path = GetCombinedPath(base, FREERDP_PRODUCT_STRING);
781 free(base);
782
783 return path;
784}

Referenced by freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_get_int16()

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

Returns a INT16 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_int32()

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

Returns a INT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_int64()

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

Returns a INT64 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_key_for_name()

FREERDP_API SSIZE_T freerdp_settings_get_key_for_name ( const char *  value)

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

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

Definition at line 351 of file settings_str.c.

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

◆ freerdp_settings_get_name_for_key()

FREERDP_API const char * freerdp_settings_get_name_for_key ( SSIZE_T  key)

Returns the type name for a key.

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

Definition at line 421 of file settings_str.c.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_pointer()

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

Returns a immutable pointer settings value.

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

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

1421{
1422 union
1423 {
1424 const rdpSettings* pc;
1425 rdpSettings* p;
1426 } cnv;
1427 cnv.pc = settings;
1428 return freerdp_settings_get_pointer_writable(cnv.p, id);
1429}
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()

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

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

1996{
1997 return freerdp_settings_get_pointer_array_writable(settings, id, offset);
1998}

◆ freerdp_settings_get_pointer_array_writable()

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

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

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

◆ freerdp_settings_get_pointer_writable()

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

Returns a mutable pointer settings value.

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

Definition at line 4024 of file settings_getters.c.

4025{
4026 WINPR_ASSERT(settings);
4027
4028 switch (id)
4029 {
4030 case FreeRDP_BitmapCacheV2CellInfo:
4031 return (void*)settings->BitmapCacheV2CellInfo;
4032
4033 case FreeRDP_ChannelDefArray:
4034 return (void*)settings->ChannelDefArray;
4035
4036 case FreeRDP_ClientAutoReconnectCookie:
4037 return (void*)settings->ClientAutoReconnectCookie;
4038
4039 case FreeRDP_ClientRandom:
4040 return (void*)settings->ClientRandom;
4041
4042 case FreeRDP_ClientTimeZone:
4043 return (void*)settings->ClientTimeZone;
4044
4045 case FreeRDP_DeviceArray:
4046 return (void*)settings->DeviceArray;
4047
4048 case FreeRDP_DynamicChannelArray:
4049 return (void*)settings->DynamicChannelArray;
4050
4051 case FreeRDP_FragCache:
4052 return (void*)settings->FragCache;
4053
4054 case FreeRDP_GlyphCache:
4055 return (void*)settings->GlyphCache;
4056
4057 case FreeRDP_LoadBalanceInfo:
4058 return (void*)settings->LoadBalanceInfo;
4059
4060 case FreeRDP_MonitorDefArray:
4061 return (void*)settings->MonitorDefArray;
4062
4063 case FreeRDP_MonitorIds:
4064 return (void*)settings->MonitorIds;
4065
4066 case FreeRDP_OrderSupport:
4067 return (void*)settings->OrderSupport;
4068
4069 case FreeRDP_Password51:
4070 return (void*)settings->Password51;
4071
4072 case FreeRDP_RdpServerCertificate:
4073 return (void*)settings->RdpServerCertificate;
4074
4075 case FreeRDP_RdpServerRsaKey:
4076 return (void*)settings->RdpServerRsaKey;
4077
4078 case FreeRDP_ReceivedCapabilities:
4079 return (void*)settings->ReceivedCapabilities;
4080
4081 case FreeRDP_ReceivedCapabilityData:
4082 return (void*)settings->ReceivedCapabilityData;
4083
4084 case FreeRDP_ReceivedCapabilityDataSizes:
4085 return (void*)settings->ReceivedCapabilityDataSizes;
4086
4087 case FreeRDP_RedirectionGuid:
4088 return (void*)settings->RedirectionGuid;
4089
4090 case FreeRDP_RedirectionPassword:
4091 return (void*)settings->RedirectionPassword;
4092
4093 case FreeRDP_RedirectionTargetCertificate:
4094 return (void*)settings->RedirectionTargetCertificate;
4095
4096 case FreeRDP_RedirectionTsvUrl:
4097 return (void*)settings->RedirectionTsvUrl;
4098
4099 case FreeRDP_ServerAutoReconnectCookie:
4100 return (void*)settings->ServerAutoReconnectCookie;
4101
4102 case FreeRDP_ServerCertificate:
4103 return (void*)settings->ServerCertificate;
4104
4105 case FreeRDP_ServerLicenseProductIssuers:
4106 return (void*)settings->ServerLicenseProductIssuers;
4107
4108 case FreeRDP_ServerRandom:
4109 return (void*)settings->ServerRandom;
4110
4111 case FreeRDP_StaticChannelArray:
4112 return (void*)settings->StaticChannelArray;
4113
4114 case FreeRDP_TargetNetAddresses:
4115 return (void*)settings->TargetNetAddresses;
4116
4117 case FreeRDP_TargetNetPorts:
4118 return (void*)settings->TargetNetPorts;
4119
4120 case FreeRDP_instance:
4121 return settings->instance;
4122
4123 default:
4124 WLog_ERR(TAG, "Invalid key index %" PRIuz " [%s|%s]", id,
4127 WINPR_ASSERT(FALSE);
4128 return NULL;
4129 }
4130}
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()

FREERDP_API const char * freerdp_settings_get_server_name ( const rdpSettings *  settings)

A helper function to return the correct server name.

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

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

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

2016{
2017 WINPR_ASSERT(settings);
2018 const char* hostname = settings->ServerHostname;
2019
2020 if (settings->UserSpecifiedServerName)
2021 hostname = settings->UserSpecifiedServerName;
2022
2023 return hostname;
2024}

◆ freerdp_settings_get_string()

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

Returns a immutable string settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_string_as_utf16()

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

Return an allocated UTF16 string.

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

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

2289{
2290 const char* str = freerdp_settings_get_string(settings, id);
2291 if (pCharLen)
2292 *pCharLen = 0;
2293 if (!str)
2294 return NULL;
2295 return ConvertUtf8ToWCharAlloc(str, pCharLen);
2296}

References freerdp_settings_get_string().

Here is the call graph for this function:

◆ freerdp_settings_get_string_writable()

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

Returns a string settings value.

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

Definition at line 3036 of file settings_getters.c.

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

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

FREERDP_API SSIZE_T freerdp_settings_get_type_for_key ( SSIZE_T  key)

Get a key type for the key index.

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

Definition at line 410 of file settings_str.c.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_type_for_name()

FREERDP_API SSIZE_T freerdp_settings_get_type_for_name ( const char *  value)

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

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

Definition at line 364 of file settings_str.c.

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

◆ freerdp_settings_get_type_name_for_key()

FREERDP_API const char * freerdp_settings_get_type_name_for_key ( SSIZE_T  key)

Returns the type name for a key.

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

Definition at line 377 of file settings_str.c.

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

References freerdp_settings_get_type_for_key(), and freerdp_settings_get_type_name_for_type().

Referenced by freerdp_settings_get_pointer_writable(), and freerdp_settings_get_string_writable().

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

◆ freerdp_settings_get_type_name_for_type()

FREERDP_API const char * freerdp_settings_get_type_name_for_type ( SSIZE_T  type)

Returns the type name for a type.

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

Definition at line 383 of file settings_str.c.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_uint16()

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

Returns a UINT16 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_uint32()

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

Returns a UINT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_uint64()

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

Returns a UINT64 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_new()

FREERDP_API rdpSettings * freerdp_settings_new ( DWORD  flags)

creates a new setting struct

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

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

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

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

Referenced by freerdp_settings_deserialize().

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

◆ freerdp_settings_print_diff()

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

Dumps the difference between two settings structs to a WLog.

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

Definition at line 99 of file settings_str.c.

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

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

Here is the call graph for this function:

◆ freerdp_settings_serialize()

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

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

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

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

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

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

Here is the call graph for this function:

◆ freerdp_settings_set_bool()

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

Sets a BOOL settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_int16()

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

Sets a INT16 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

Here is the caller graph for this function:

◆ freerdp_settings_set_int32()

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

Sets a INT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_int64()

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

Sets a INT64 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

Here is the caller graph for this function:

◆ freerdp_settings_set_monitor_def_array_sorted()

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

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

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

Here is the call graph for this function:

◆ freerdp_settings_set_pointer()

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

Set a pointer to value data.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_set_pointer_len().

Here is the caller graph for this function:

◆ freerdp_settings_set_pointer_array()

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

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

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

◆ freerdp_settings_set_pointer_len()

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

Set a pointer to value data.

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

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

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

References freerdp_settings_set_pointer().

Referenced by freerdp_settings_new(), and freerdp_settings_set_monitor_def_array_sorted().

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

◆ freerdp_settings_set_string()

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

Sets a string settings value. The param is copied.

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

Definition at line 3683 of file settings_getters.c.

3685{
3686 size_t len = 0;
3687 if (val)
3688 len = strlen(val);
3689 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3690}

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

Here is the caller graph for this function:

◆ freerdp_settings_set_string_from_utf16()

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

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

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

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

2249{
2250 WINPR_ASSERT(settings);
2251
2252 if (!param)
2253 return freerdp_settings_set_string_copy_(settings, id, NULL, 0, TRUE);
2254
2255 size_t len = 0;
2256
2257 char* str = ConvertWCharToUtf8Alloc(param, &len);
2258 if (!str && (len != 0))
2259 return FALSE;
2260
2261 return freerdp_settings_set_string_(settings, id, str, len);
2262}

◆ freerdp_settings_set_string_from_utf16N()

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

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

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

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

2266{
2267 size_t len = 0;
2268
2269 WINPR_ASSERT(settings);
2270
2271 if (!param)
2272 return freerdp_settings_set_string_copy_(settings, id, NULL, length, TRUE);
2273
2274 char* str = ConvertWCharNToUtf8Alloc(param, length, &len);
2275 if (!str && (length != 0))
2276 {
2277 /* If the input string is an empty string, but length > 0
2278 * consider the conversion a success */
2279 const size_t wlen = _wcsnlen(param, length);
2280 if (wlen != 0)
2281 return FALSE;
2282 }
2283
2284 return freerdp_settings_set_string_(settings, id, str, len);
2285}

Referenced by freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_string_len()

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

Sets a string settings value. The param is copied.

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

Definition at line 3677 of file settings_getters.c.

3679{
3680 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3681}

Referenced by freerdp_settings_append_string(), and freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_uint16()

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

Sets a UINT16 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_uint32()

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

Sets a UINT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_uint64()

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

Sets a UINT64 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

Here is the caller graph for this function:

◆ freerdp_settings_set_value_for_name()

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

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

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

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

2184{
2185 WINPR_ASSERT(settings);
2186 WINPR_ASSERT(capsFlags || (capsCount == 0));
2187 WINPR_ASSERT(capsData || (capsCount == 0));
2188 WINPR_ASSERT(capsSizes || (capsCount == 0));
2189 WINPR_ASSERT(capsCount <= UINT16_MAX);
2190
2191 wLog* log = WLog_Get(TAG);
2192
2193 for (UINT32 x = 0; x < capsCount; x++)
2194 {
2195 if (capsFlags[x])
2196 {
2197 wStream buffer = { 0 };
2198 wStream* sub = Stream_StaticConstInit(&buffer, capsData[x], capsSizes[x]);
2199
2200 if (!rdp_read_capability_set(log, sub, (UINT16)x, settings, serverReceivedCaps))
2201 return FALSE;
2202 }
2203 }
2204
2205 return TRUE;
2206}

◆ freerdp_static_channel_collection_add()

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] = NULL;
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 577 of file common/settings.c.

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

◆ freerdp_static_channel_collection_find()

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 = NULL;
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 NULL;
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 (void)freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0);
679 settings->StaticChannelArray = NULL;
680 (void)freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0);
681}

◆ freerdp_supported_color_depths_string()

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

return A string reprenentation of the bitmask.

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

2365{
2366 const UINT32 invalid = mask & ~(RNS_UD_32BPP_SUPPORT | RNS_UD_24BPP_SUPPORT |
2367 RNS_UD_16BPP_SUPPORT | RNS_UD_15BPP_SUPPORT);
2368
2369 if (mask & RNS_UD_32BPP_SUPPORT)
2370 winpr_str_append("RNS_UD_32BPP_SUPPORT", buffer, size, "|");
2371 if (mask & RNS_UD_24BPP_SUPPORT)
2372 winpr_str_append("RNS_UD_24BPP_SUPPORT", buffer, size, "|");
2373 if (mask & RNS_UD_16BPP_SUPPORT)
2374 winpr_str_append("RNS_UD_16BPP_SUPPORT", buffer, size, "|");
2375 if (mask & RNS_UD_15BPP_SUPPORT)
2376 winpr_str_append("RNS_UD_15BPP_SUPPORT", buffer, size, "|");
2377
2378 if (invalid != 0)
2379 {
2380 char str[32] = { 0 };
2381 (void)_snprintf(str, sizeof(str), "RNS_UD_INVALID[0x%04" PRIx32 "]", invalid);
2382 winpr_str_append(str, buffer, size, "|");
2383 }
2384 char hex[32] = { 0 };
2385 (void)_snprintf(hex, sizeof(hex), "[0x%04" PRIx16 "]", mask);
2386 return buffer;
2387}

◆ freerdp_target_net_addresses_copy()

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

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

2039{
2040 WINPR_ASSERT(settings);
2041 WINPR_ASSERT(addresses);
2042
2043 if (!freerdp_target_net_adresses_reset(settings, count))
2044 return FALSE;
2045
2046 for (UINT32 i = 0; i < settings->TargetNetAddressCount; i++)
2047 {
2048 const char* address = addresses[i];
2049 if (!freerdp_settings_set_pointer_array(settings, FreeRDP_TargetNetAddresses, i, address))
2050 {
2051 freerdp_target_net_addresses_free(settings);
2052 return FALSE;
2053 }
2054 }
2055
2056 return TRUE;
2057}

◆ freerdp_target_net_addresses_free()

FREERDP_API void freerdp_target_net_addresses_free ( rdpSettings *  settings)

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

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

◆ freerdp_update_gateway_usage_method()

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

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

1161{
1162 UINT32 GatewayUsageMethod = 0;
1163
1164 if (!GatewayEnabled && !GatewayBypassLocal)
1165 GatewayUsageMethod = TSC_PROXY_MODE_NONE_DIRECT;
1166 else if (GatewayEnabled && !GatewayBypassLocal)
1167 GatewayUsageMethod = TSC_PROXY_MODE_DIRECT;
1168 else if (GatewayEnabled && GatewayBypassLocal)
1169 GatewayUsageMethod = TSC_PROXY_MODE_DETECT;
1170
1171 freerdp_set_gateway_usage_method(settings, GatewayUsageMethod);
1172}
BOOL freerdp_set_gateway_usage_method(rdpSettings *settings, UINT32 GatewayUsageMethod)