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

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

◆ freerdp_addin_argv_del_argument()

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

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

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

◆ freerdp_addin_argv_free()

FREERDP_API void freerdp_addin_argv_free ( ADDIN_ARGV args)

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

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

◆ freerdp_addin_argv_new()

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

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

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

◆ freerdp_addin_replace_argument()

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

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

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

◆ freerdp_addin_replace_argument_value()

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

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

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

◆ freerdp_addin_set_argument()

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

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

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

◆ freerdp_addin_set_argument_value()

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

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

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

◆ freerdp_capability_buffer_copy()

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

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

911{
912 WINPR_ASSERT(settings);
913 WINPR_ASSERT(src);
914
915 if (src->ReceivedCapabilitiesSize == 0)
916 return TRUE;
917
918 if (!freerdp_capability_buffer_resize(settings, src->ReceivedCapabilitiesSize))
919 return FALSE;
920
921 for (UINT32 x = 0; x < src->ReceivedCapabilitiesSize; x++)
922 {
923 WINPR_ASSERT(settings->ReceivedCapabilities);
924 settings->ReceivedCapabilities[x] = src->ReceivedCapabilities[x];
925
926 WINPR_ASSERT(settings->ReceivedCapabilityDataSizes);
927 settings->ReceivedCapabilityDataSizes[x] = src->ReceivedCapabilityDataSizes[x];
928
929 WINPR_ASSERT(settings->ReceivedCapabilityData);
930 if (src->ReceivedCapabilityDataSizes[x] > 0)
931 {
932 void* tmp = realloc(settings->ReceivedCapabilityData[x],
933 settings->ReceivedCapabilityDataSizes[x]);
934 if (!tmp)
935 return FALSE;
936 memcpy(tmp, src->ReceivedCapabilityData[x], src->ReceivedCapabilityDataSizes[x]);
937 settings->ReceivedCapabilityData[x] = tmp;
938 }
939 else
940 {
941 free(settings->ReceivedCapabilityData[x]);
942 settings->ReceivedCapabilityData[x] = NULL;
943 }
944 }
945 return TRUE;
946}

◆ freerdp_capability_buffer_free()

FREERDP_API void freerdp_capability_buffer_free ( rdpSettings *  settings)

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

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

◆ freerdp_device_clone()

FREERDP_API RDPDR_DEVICE * freerdp_device_clone ( const RDPDR_DEVICE device)

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

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

◆ freerdp_device_collection_add()

FREERDP_API BOOL freerdp_device_collection_add ( rdpSettings *  settings,
RDPDR_DEVICE device 
)

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

210{
211 UINT32 count = 0;
212 UINT32 old = 0;
213 WINPR_ASSERT(settings);
214 WINPR_ASSERT(device);
215
216 count = freerdp_settings_get_uint32(settings, FreeRDP_DeviceCount) + 1;
217 old = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
218 if (old < count)
219 {
220 const size_t new_size = (old + 32);
221 RDPDR_DEVICE** new_array =
222 (RDPDR_DEVICE**)realloc((void*)settings->DeviceArray, new_size * sizeof(RDPDR_DEVICE*));
223
224 if (!new_array)
225 return FALSE;
226
227 settings->DeviceArray = new_array;
228 for (size_t x = old; x < new_size; x++)
229 settings->DeviceArray[x] = NULL;
230
231 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize,
232 WINPR_ASSERTING_INT_CAST(uint32_t, new_size)))
233 return FALSE;
234 }
235
236 settings->DeviceArray[settings->DeviceCount++] = device;
237 return TRUE;
238}
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 544 of file common/settings.c.

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

◆ freerdp_device_equal()

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

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

2044{
2045 if (!what && !expect)
2046 return TRUE;
2047 if (!what || !expect)
2048 return FALSE;
2049
2050 if (what->Id != expect->Id)
2051 return FALSE;
2052 if (what->Type != expect->Type)
2053 return FALSE;
2054 if (what->Name && expect->Name)
2055 {
2056 if (strcmp(what->Name, expect->Name) != 0)
2057 return FALSE;
2058 }
2059 else
2060 {
2061 if (what->Name != expect->Name)
2062 return FALSE;
2063 }
2064
2065 switch (what->Type)
2066 {
2067 case RDPDR_DTYP_PRINT:
2068 {
2069 const RDPDR_PRINTER* a = (const RDPDR_PRINTER*)what;
2070 const RDPDR_PRINTER* b = (const RDPDR_PRINTER*)expect;
2071 if (a->DriverName && b->DriverName)
2072 return strcmp(a->DriverName, b->DriverName) == 0;
2073 return a->DriverName == b->DriverName;
2074 }
2075
2076 case RDPDR_DTYP_SERIAL:
2077 {
2078 const RDPDR_SERIAL* a = (const RDPDR_SERIAL*)what;
2079 const RDPDR_SERIAL* b = (const RDPDR_SERIAL*)expect;
2080
2081 if (a->Path && b->Path)
2082 {
2083 if (strcmp(a->Path, b->Path) != 0)
2084 return FALSE;
2085 }
2086 else if (a->Path != b->Path)
2087 return FALSE;
2088
2089 if (a->Driver && b->Driver)
2090 {
2091 if (strcmp(a->Driver, b->Driver) != 0)
2092 return FALSE;
2093 }
2094 else if (a->Driver != b->Driver)
2095 return FALSE;
2096 if (a->Permissive && b->Permissive)
2097 return strcmp(a->Permissive, b->Permissive) == 0;
2098 return a->Permissive == b->Permissive;
2099 }
2100
2101 case RDPDR_DTYP_PARALLEL:
2102 {
2103 const RDPDR_PARALLEL* a = (const RDPDR_PARALLEL*)what;
2104 const RDPDR_PARALLEL* b = (const RDPDR_PARALLEL*)expect;
2105 if (a->Path && b->Path)
2106 return strcmp(a->Path, b->Path) == 0;
2107 return a->Path == b->Path;
2108 }
2109
2110 case RDPDR_DTYP_SMARTCARD:
2111 break;
2112 case RDPDR_DTYP_FILESYSTEM:
2113 {
2114 const RDPDR_DRIVE* a = (const RDPDR_DRIVE*)what;
2115 const RDPDR_DRIVE* b = (const RDPDR_DRIVE*)expect;
2116 if (a->automount != b->automount)
2117 return FALSE;
2118 if (a->Path && b->Path)
2119 return strcmp(a->Path, b->Path) == 0;
2120 return a->Path == b->Path;
2121 }
2122
2123 default:
2124 return FALSE;
2125 }
2126
2127 return TRUE;
2128}

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

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

◆ freerdp_dynamic_channel_collection_del()

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

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

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

◆ freerdp_dynamic_channel_collection_find()

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

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

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

◆ freerdp_dynamic_channel_collection_free()

FREERDP_API void freerdp_dynamic_channel_collection_free ( rdpSettings *  settings)

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

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

◆ freerdp_encryption_level_string()

FREERDP_API const char * freerdp_encryption_level_string ( UINT32  EncryptionLevel)

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

2302{
2303 switch (EncryptionLevel)
2304 {
2305 case ENCRYPTION_LEVEL_NONE:
2306 return "ENCRYPTION_LEVEL_NONE";
2307 case ENCRYPTION_LEVEL_LOW:
2308 return "ENCRYPTION_LEVEL_LOW";
2309 case ENCRYPTION_LEVEL_CLIENT_COMPATIBLE:
2310 return "ENCRYPTION_LEVEL_CLIENT_COMPATIBLE";
2311 case ENCRYPTION_LEVEL_HIGH:
2312 return "ENCRYPTION_LEVEL_HIGH";
2313 case ENCRYPTION_LEVEL_FIPS:
2314 return "ENCRYPTION_LEVEL_FIPS";
2315 default:
2316 return "ENCRYPTION_LEVEL_UNKNOWN";
2317 }
2318}

◆ freerdp_encryption_methods_string()

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

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

2321{
2322 if (EncryptionMethods == ENCRYPTION_METHOD_NONE)
2323 {
2324 winpr_str_append("ENCRYPTION_METHOD_NONE", buffer, size, "|");
2325 return buffer;
2326 }
2327
2328 if (EncryptionMethods & ENCRYPTION_METHOD_40BIT)
2329 {
2330 winpr_str_append("ENCRYPTION_METHOD_40BIT", buffer, size, "|");
2331 }
2332 if (EncryptionMethods & ENCRYPTION_METHOD_128BIT)
2333 {
2334 winpr_str_append("ENCRYPTION_METHOD_128BIT", buffer, size, "|");
2335 }
2336 if (EncryptionMethods & ENCRYPTION_METHOD_56BIT)
2337 {
2338 winpr_str_append("ENCRYPTION_METHOD_56BIT", buffer, size, "|");
2339 }
2340 if (EncryptionMethods & ENCRYPTION_METHOD_FIPS)
2341 {
2342 winpr_str_append("ENCRYPTION_METHOD_FIPS", buffer, size, "|");
2343 }
2344
2345 return buffer;
2346}

◆ freerdp_performance_flags_make()

FREERDP_API void freerdp_performance_flags_make ( rdpSettings *  settings)

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

1038{
1039 UINT32 PerformanceFlags = PERF_FLAG_NONE;
1040
1041 if (freerdp_settings_get_bool(settings, FreeRDP_AllowFontSmoothing))
1042 PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
1043
1044 if (freerdp_settings_get_bool(settings, FreeRDP_AllowDesktopComposition))
1045 PerformanceFlags |= PERF_ENABLE_DESKTOP_COMPOSITION;
1046
1047 if (freerdp_settings_get_bool(settings, FreeRDP_DisableWallpaper))
1048 PerformanceFlags |= PERF_DISABLE_WALLPAPER;
1049
1050 if (freerdp_settings_get_bool(settings, FreeRDP_DisableFullWindowDrag))
1051 PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
1052
1053 if (freerdp_settings_get_bool(settings, FreeRDP_DisableMenuAnims))
1054 PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
1055
1056 if (freerdp_settings_get_bool(settings, FreeRDP_DisableThemes))
1057 PerformanceFlags |= PERF_DISABLE_THEMING;
1058 (void)freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags);
1059}
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 1061 of file common/settings.c.

1062{
1064 settings, FreeRDP_AllowFontSmoothing,
1065 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1066 PERF_ENABLE_FONT_SMOOTHING)
1067 ? TRUE
1068 : FALSE);
1070 settings, FreeRDP_AllowDesktopComposition,
1071 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1072 PERF_ENABLE_DESKTOP_COMPOSITION)
1073 ? TRUE
1074 : FALSE);
1076 settings, FreeRDP_DisableWallpaper,
1077 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_WALLPAPER)
1078 ? TRUE
1079 : FALSE);
1081 settings, FreeRDP_DisableFullWindowDrag,
1082 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1083 PERF_DISABLE_FULLWINDOWDRAG)
1084 ? TRUE
1085 : FALSE);
1087 settings, FreeRDP_DisableMenuAnims,
1088 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1089 PERF_DISABLE_MENUANIMATIONS)
1090 ? TRUE
1091 : FALSE);
1093 settings, FreeRDP_DisableThemes,
1094 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_THEMING)
1095 ? TRUE
1096 : FALSE);
1097}
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 2130 of file common/settings.c.

2131{
2132 const UINT32 mask =
2133 RAIL_LEVEL_SUPPORTED | RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED |
2134 RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED | RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED |
2135 RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED | RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED |
2136 RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED | RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED;
2137
2138 if (flags & RAIL_LEVEL_SUPPORTED)
2139 winpr_str_append("RAIL_LEVEL_SUPPORTED", buffer, length, "|");
2140 if (flags & RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED)
2141 winpr_str_append("RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED", buffer, length, "|");
2142 if (flags & RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED)
2143 winpr_str_append("RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED", buffer, length, "|");
2144 if (flags & RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED)
2145 winpr_str_append("RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED", buffer, length, "|");
2146 if (flags & RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED)
2147 winpr_str_append("RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED", buffer, length, "|");
2148 if (flags & RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED)
2149 winpr_str_append("RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED", buffer, length, "|");
2150 if (flags & RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED)
2151 winpr_str_append("RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED", buffer, length, "|");
2152 if (flags & RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED)
2153 winpr_str_append("RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED", buffer, length, "|");
2154 if (flags & RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED)
2155 winpr_str_append("RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED", buffer, length, "|");
2156 if ((flags & ~mask) != 0)
2157 {
2158 char tbuffer[64] = { 0 };
2159 (void)_snprintf(tbuffer, sizeof(tbuffer), "RAIL_FLAG_UNKNOWN 0x%08" PRIx32, flags & mask);
2160 winpr_str_append(tbuffer, buffer, length, "|");
2161 }
2162 return buffer;
2163}

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

2193{
2194 switch (version)
2195 {
2196 case RDP_VERSION_4:
2197 return "RDP_VERSION_4";
2198 case RDP_VERSION_5_PLUS:
2199 return "RDP_VERSION_5_PLUS";
2200 case RDP_VERSION_10_0:
2201 return "RDP_VERSION_10_0";
2202 case RDP_VERSION_10_1:
2203 return "RDP_VERSION_10_1";
2204 case RDP_VERSION_10_2:
2205 return "RDP_VERSION_10_2";
2206 case RDP_VERSION_10_3:
2207 return "RDP_VERSION_10_3";
2208 case RDP_VERSION_10_4:
2209 return "RDP_VERSION_10_4";
2210 case RDP_VERSION_10_5:
2211 return "RDP_VERSION_10_5";
2212 case RDP_VERSION_10_6:
2213 return "RDP_VERSION_10_6";
2214 case RDP_VERSION_10_7:
2215 return "RDP_VERSION_10_7";
2216 case RDP_VERSION_10_8:
2217 return "RDP_VERSION_10_8";
2218 case RDP_VERSION_10_9:
2219 return "RDP_VERSION_10_9";
2220 case RDP_VERSION_10_10:
2221 return "RDP_VERSION_10_10";
2222 case RDP_VERSION_10_11:
2223 return "RDP_VERSION_10_11";
2224 case RDP_VERSION_10_12:
2225 return "RDP_VERSION_10_12";
2226 default:
2227 return "RDP_VERSION_UNKNOWN";
2228 }
2229}

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

2283{
2284 switch (type)
2285 {
2286 case RDPDR_DTYP_FILESYSTEM:
2287 return "RDPDR_DTYP_FILESYSTEM";
2288 case RDPDR_DTYP_PARALLEL:
2289 return "RDPDR_DTYP_PARALLEL";
2290 case RDPDR_DTYP_PRINT:
2291 return "RDPDR_DTYP_PRINT";
2292 case RDPDR_DTYP_SERIAL:
2293 return "RDPDR_DTYP_SERIAL";
2294 case RDPDR_DTYP_SMARTCARD:
2295 return "RDPDR_DTYP_SMARTCARD";
2296 default:
2297 return "RDPDR_DTYP_UNKNOWN";
2298 }
2299}

◆ freerdp_server_license_issuers_copy()

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

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

1018{
1019 WINPR_ASSERT(settings);
1020 WINPR_ASSERT(issuers || (count == 0));
1021
1022 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_ServerLicenseProductIssuers, NULL,
1023 count))
1024 return FALSE;
1025
1026 for (UINT32 x = 0; x < count; x++)
1027 {
1028 char* issuer = _strdup(issuers[x]);
1029 if (!issuer)
1030 return FALSE;
1031 settings->ServerLicenseProductIssuers[x] = issuer;
1032 }
1033
1034 return TRUE;
1035}
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 1003 of file common/settings.c.

1004{
1005 WINPR_ASSERT(settings);
1006
1007 if (settings->ServerLicenseProductIssuers)
1008 {
1009 for (UINT32 x = 0; x < settings->ServerLicenseProductIssuersCount; x++)
1010 free(settings->ServerLicenseProductIssuers[x]);
1011 }
1012 free((void*)settings->ServerLicenseProductIssuers);
1013 settings->ServerLicenseProductIssuers = NULL;
1014 settings->ServerLicenseProductIssuersCount = 0;
1015}

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

1100{
1101 if (!freerdp_settings_set_uint32(settings, FreeRDP_GatewayUsageMethod, GatewayUsageMethod))
1102 return FALSE;
1103
1104 if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DIRECT)
1105 {
1106 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1107 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1108 return FALSE;
1109 }
1110 else if (GatewayUsageMethod == TSC_PROXY_MODE_DIRECT)
1111 {
1112 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1113 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1114 return FALSE;
1115 }
1116 else if (GatewayUsageMethod == TSC_PROXY_MODE_DETECT)
1117 {
1118 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1119 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, TRUE))
1120 return FALSE;
1121 }
1122 else if (GatewayUsageMethod == TSC_PROXY_MODE_DEFAULT)
1123 {
1129 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1130 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1131 return FALSE;
1132 }
1133 else if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DETECT)
1134 {
1135 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1136 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1137 return FALSE;
1138 }
1139
1140 return TRUE;
1141}

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

2375{
2376 const char* old = freerdp_settings_get_string(settings, id);
2377
2378 size_t len = 0;
2379 char* str = NULL;
2380
2381 if (!old)
2382 winpr_asprintf(&str, &len, "%s", param);
2383 else if (!separator)
2384 winpr_asprintf(&str, &len, "%s%s", old, param);
2385 else
2386 winpr_asprintf(&str, &len, "%s%s%s", old, separator, param);
2387
2388 const BOOL rc = freerdp_settings_set_string_len(settings, id, str, len);
2389 free(str);
2390 return rc;
2391}
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 2393 of file common/settings.c.

2394{
2395 return settings != NULL;
2396}

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

1534{
1535 rdpSettings* _settings = (rdpSettings*)calloc(1, sizeof(rdpSettings));
1536
1537 if (!freerdp_settings_copy(_settings, settings))
1538 goto out_fail;
1539
1540 return _settings;
1541out_fail:
1542 WINPR_PRAGMA_DIAG_PUSH
1543 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1544 freerdp_settings_free(_settings);
1545 WINPR_PRAGMA_DIAG_POP
1546 return NULL;
1547}
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 1505 of file core/settings.c.

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

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

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

1293{
1294 if (!settings)
1295 return;
1296
1297 freerdp_settings_free_internal(settings);
1298 free(settings);
1299}

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

1985{
1986 UINT32 flags = FREERDP_CODEC_ALL;
1987 if (settings->RemoteFxCodec == FALSE)
1988 {
1989 flags &= (uint32_t)~FREERDP_CODEC_REMOTEFX;
1990 }
1991 if (settings->NSCodec == FALSE)
1992 {
1993 flags &= (uint32_t)~FREERDP_CODEC_NSCODEC;
1994 }
1995 /*TODO: check other codecs flags */
1996 return flags;
1997}

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

1405{
1406 union
1407 {
1408 const rdpSettings* pc;
1409 rdpSettings* p;
1410 } cnv;
1411 cnv.pc = settings;
1412 return freerdp_settings_get_pointer_writable(cnv.p, id);
1413}
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 1978 of file common/settings.c.

1980{
1981 return freerdp_settings_get_pointer_array_writable(settings, id, offset);
1982}

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

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

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

4069{
4070 WINPR_ASSERT(settings);
4071
4072 switch (id)
4073 {
4074 case FreeRDP_BitmapCacheV2CellInfo:
4075 return (void*)settings->BitmapCacheV2CellInfo;
4076
4077 case FreeRDP_ChannelDefArray:
4078 return (void*)settings->ChannelDefArray;
4079
4080 case FreeRDP_ClientAutoReconnectCookie:
4081 return (void*)settings->ClientAutoReconnectCookie;
4082
4083 case FreeRDP_ClientRandom:
4084 return (void*)settings->ClientRandom;
4085
4086 case FreeRDP_ClientTimeZone:
4087 return (void*)settings->ClientTimeZone;
4088
4089 case FreeRDP_DeviceArray:
4090 return (void*)settings->DeviceArray;
4091
4092 case FreeRDP_DynamicChannelArray:
4093 return (void*)settings->DynamicChannelArray;
4094
4095 case FreeRDP_FragCache:
4096 return (void*)settings->FragCache;
4097
4098 case FreeRDP_GlyphCache:
4099 return (void*)settings->GlyphCache;
4100
4101 case FreeRDP_LoadBalanceInfo:
4102 return (void*)settings->LoadBalanceInfo;
4103
4104 case FreeRDP_MonitorDefArray:
4105 return (void*)settings->MonitorDefArray;
4106
4107 case FreeRDP_MonitorIds:
4108 return (void*)settings->MonitorIds;
4109
4110 case FreeRDP_OrderSupport:
4111 return (void*)settings->OrderSupport;
4112
4113 case FreeRDP_Password51:
4114 return (void*)settings->Password51;
4115
4116 case FreeRDP_RdpServerCertificate:
4117 return (void*)settings->RdpServerCertificate;
4118
4119 case FreeRDP_RdpServerRsaKey:
4120 return (void*)settings->RdpServerRsaKey;
4121
4122 case FreeRDP_ReceivedCapabilities:
4123 return (void*)settings->ReceivedCapabilities;
4124
4125 case FreeRDP_ReceivedCapabilityData:
4126 return (void*)settings->ReceivedCapabilityData;
4127
4128 case FreeRDP_ReceivedCapabilityDataSizes:
4129 return (void*)settings->ReceivedCapabilityDataSizes;
4130
4131 case FreeRDP_RedirectionGuid:
4132 return (void*)settings->RedirectionGuid;
4133
4134 case FreeRDP_RedirectionPassword:
4135 return (void*)settings->RedirectionPassword;
4136
4137 case FreeRDP_RedirectionTargetCertificate:
4138 return (void*)settings->RedirectionTargetCertificate;
4139
4140 case FreeRDP_RedirectionTsvUrl:
4141 return (void*)settings->RedirectionTsvUrl;
4142
4143 case FreeRDP_ServerAutoReconnectCookie:
4144 return (void*)settings->ServerAutoReconnectCookie;
4145
4146 case FreeRDP_ServerCertificate:
4147 return (void*)settings->ServerCertificate;
4148
4149 case FreeRDP_ServerLicenseProductIssuers:
4150 return (void*)settings->ServerLicenseProductIssuers;
4151
4152 case FreeRDP_ServerRandom:
4153 return (void*)settings->ServerRandom;
4154
4155 case FreeRDP_StaticChannelArray:
4156 return (void*)settings->StaticChannelArray;
4157
4158 case FreeRDP_TargetNetAddresses:
4159 return (void*)settings->TargetNetAddresses;
4160
4161 case FreeRDP_TargetNetPorts:
4162 return (void*)settings->TargetNetPorts;
4163
4164 case FreeRDP_instance:
4165 return settings->instance;
4166
4167 default:
4168 WLog_ERR(TAG, "Invalid key index %" PRIuz " [%s|%s]", id,
4171 WINPR_ASSERT(FALSE);
4172 return NULL;
4173 }
4174}
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 1999 of file common/settings.c.

2000{
2001 WINPR_ASSERT(settings);
2002 const char* hostname = settings->ServerHostname;
2003
2004 if (settings->UserSpecifiedServerName)
2005 hostname = settings->UserSpecifiedServerName;
2006
2007 return hostname;
2008}

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

2273{
2274 const char* str = freerdp_settings_get_string(settings, id);
2275 if (pCharLen)
2276 *pCharLen = 0;
2277 if (!str)
2278 return NULL;
2279 return ConvertUtf8ToWCharAlloc(str, pCharLen);
2280}

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

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

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

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

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

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

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

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

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

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

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

3719{
3720 size_t len = 0;
3721 if (val)
3722 len = strlen(val);
3723 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3724}

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

2233{
2234 WINPR_ASSERT(settings);
2235
2236 if (!param)
2237 return freerdp_settings_set_string_copy_(settings, id, NULL, 0, TRUE);
2238
2239 size_t len = 0;
2240
2241 char* str = ConvertWCharToUtf8Alloc(param, &len);
2242 if (!str && (len != 0))
2243 return FALSE;
2244
2245 return freerdp_settings_set_string_(settings, id, str, len);
2246}

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

2250{
2251 size_t len = 0;
2252
2253 WINPR_ASSERT(settings);
2254
2255 if (!param)
2256 return freerdp_settings_set_string_copy_(settings, id, NULL, length, TRUE);
2257
2258 char* str = ConvertWCharNToUtf8Alloc(param, length, &len);
2259 if (!str && (length != 0))
2260 {
2261 /* If the input string is an empty string, but length > 0
2262 * consider the conversion a success */
2263 const size_t wlen = _wcsnlen(param, length);
2264 if (wlen != 0)
2265 return FALSE;
2266 }
2267
2268 return freerdp_settings_set_string_(settings, id, str, len);
2269}

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

3713{
3714 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3715}

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

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

2168{
2169 WINPR_ASSERT(settings);
2170 WINPR_ASSERT(capsFlags || (capsCount == 0));
2171 WINPR_ASSERT(capsData || (capsCount == 0));
2172 WINPR_ASSERT(capsSizes || (capsCount == 0));
2173 WINPR_ASSERT(capsCount <= UINT16_MAX);
2174
2175 wLog* log = WLog_Get(TAG);
2176
2177 for (UINT32 x = 0; x < capsCount; x++)
2178 {
2179 if (capsFlags[x])
2180 {
2181 wStream buffer = { 0 };
2182 wStream* sub = Stream_StaticConstInit(&buffer, capsData[x], capsSizes[x]);
2183
2184 if (!rdp_read_capability_set(log, sub, (UINT16)x, settings, serverReceivedCaps))
2185 return FALSE;
2186 }
2187 }
2188
2189 return TRUE;
2190}

◆ freerdp_static_channel_collection_add()

FREERDP_API BOOL freerdp_static_channel_collection_add ( rdpSettings *  settings,
ADDIN_ARGV channel 
)

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

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

◆ freerdp_static_channel_collection_del()

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

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

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

◆ freerdp_static_channel_collection_find()

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

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

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

◆ freerdp_static_channel_collection_free()

FREERDP_API void freerdp_static_channel_collection_free ( rdpSettings *  settings)

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

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

◆ freerdp_supported_color_depths_string()

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

2349{
2350 const UINT32 invalid = mask & ~(RNS_UD_32BPP_SUPPORT | RNS_UD_24BPP_SUPPORT |
2351 RNS_UD_16BPP_SUPPORT | RNS_UD_15BPP_SUPPORT);
2352
2353 if (mask & RNS_UD_32BPP_SUPPORT)
2354 winpr_str_append("RNS_UD_32BPP_SUPPORT", buffer, size, "|");
2355 if (mask & RNS_UD_24BPP_SUPPORT)
2356 winpr_str_append("RNS_UD_24BPP_SUPPORT", buffer, size, "|");
2357 if (mask & RNS_UD_16BPP_SUPPORT)
2358 winpr_str_append("RNS_UD_16BPP_SUPPORT", buffer, size, "|");
2359 if (mask & RNS_UD_15BPP_SUPPORT)
2360 winpr_str_append("RNS_UD_15BPP_SUPPORT", buffer, size, "|");
2361
2362 if (invalid != 0)
2363 {
2364 char str[32] = { 0 };
2365 (void)_snprintf(str, sizeof(str), "RNS_UD_INVALID[0x%04" PRIx32 "]", invalid);
2366 winpr_str_append(str, buffer, size, "|");
2367 }
2368 char hex[32] = { 0 };
2369 (void)_snprintf(hex, sizeof(hex), "[0x%04" PRIx16 "]", mask);
2370 return buffer;
2371}

◆ freerdp_target_net_addresses_copy()

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

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

2023{
2024 WINPR_ASSERT(settings);
2025 WINPR_ASSERT(addresses);
2026
2027 if (!freerdp_target_net_adresses_reset(settings, count))
2028 return FALSE;
2029
2030 for (UINT32 i = 0; i < settings->TargetNetAddressCount; i++)
2031 {
2032 const char* address = addresses[i];
2033 if (!freerdp_settings_set_pointer_array(settings, FreeRDP_TargetNetAddresses, i, address))
2034 {
2035 freerdp_target_net_addresses_free(settings);
2036 return FALSE;
2037 }
2038 }
2039
2040 return TRUE;
2041}

◆ freerdp_target_net_addresses_free()

FREERDP_API void freerdp_target_net_addresses_free ( rdpSettings *  settings)

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

963{
964 WINPR_ASSERT(settings);
965
966 target_net_addresses_free(settings, 0);
967
968 free((void*)settings->TargetNetAddresses);
969 settings->TargetNetAddresses = NULL;
970
971 free(settings->TargetNetPorts);
972 settings->TargetNetPorts = NULL;
973
974 settings->TargetNetAddressCount = 0;
975}

◆ freerdp_update_gateway_usage_method()

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

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

1145{
1146 UINT32 GatewayUsageMethod = 0;
1147
1148 if (!GatewayEnabled && !GatewayBypassLocal)
1149 GatewayUsageMethod = TSC_PROXY_MODE_NONE_DIRECT;
1150 else if (GatewayEnabled && !GatewayBypassLocal)
1151 GatewayUsageMethod = TSC_PROXY_MODE_DIRECT;
1152 else if (GatewayEnabled && GatewayBypassLocal)
1153 GatewayUsageMethod = TSC_PROXY_MODE_DETECT;
1154
1155 freerdp_set_gateway_usage_method(settings, GatewayUsageMethod);
1156}
BOOL freerdp_set_gateway_usage_method(rdpSettings *settings, UINT32 GatewayUsageMethod)