FreeRDP
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Modules Pages
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:
 

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

72{
73 return freerdp_addin_argv_add_argument_ex(args, argument, 0);
74}

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

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

◆ freerdp_addin_argv_clone()

FREERDP_API ADDIN_ARGV * freerdp_addin_argv_clone ( const ADDIN_ARGV args)

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

828{
829 union
830 {
831 char** c;
832 const char** cc;
833 } cnv;
834 if (!args)
835 return NULL;
836 cnv.c = args->argv;
837 return freerdp_addin_argv_new(WINPR_ASSERTING_INT_CAST(uint32_t, args->argc), cnv.cc);
838}

◆ freerdp_addin_argv_del_argument()

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

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

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

◆ freerdp_addin_argv_free()

FREERDP_API void freerdp_addin_argv_free ( ADDIN_ARGV args)

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

778{
779 if (!args)
780 return;
781
782 if (args->argv)
783 {
784 for (int index = 0; index < args->argc; index++)
785 free(args->argv[index]);
786 free((void*)args->argv);
787 }
788
789 free(args);
790}

◆ freerdp_addin_argv_new()

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

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

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

◆ freerdp_addin_replace_argument()

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

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

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

◆ freerdp_addin_replace_argument_value()

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

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

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

◆ freerdp_addin_set_argument()

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

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

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

◆ freerdp_addin_set_argument_value()

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

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

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

◆ freerdp_capability_buffer_copy()

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

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

881{
882 WINPR_ASSERT(settings);
883 WINPR_ASSERT(src);
884
885 if (src->ReceivedCapabilitiesSize == 0)
886 return TRUE;
887
888 if (!freerdp_capability_buffer_allocate(settings, src->ReceivedCapabilitiesSize))
889 return FALSE;
890
891 for (UINT32 x = 0; x < src->ReceivedCapabilitiesSize; x++)
892 {
893 WINPR_ASSERT(settings->ReceivedCapabilities);
894 settings->ReceivedCapabilities[x] = src->ReceivedCapabilities[x];
895
896 WINPR_ASSERT(settings->ReceivedCapabilityDataSizes);
897 settings->ReceivedCapabilityDataSizes[x] = src->ReceivedCapabilityDataSizes[x];
898
899 WINPR_ASSERT(settings->ReceivedCapabilityData);
900 if (src->ReceivedCapabilityDataSizes[x] > 0)
901 {
902 void* tmp = realloc(settings->ReceivedCapabilityData[x],
903 settings->ReceivedCapabilityDataSizes[x]);
904 if (!tmp)
905 return FALSE;
906 memcpy(tmp, src->ReceivedCapabilityData[x], src->ReceivedCapabilityDataSizes[x]);
907 settings->ReceivedCapabilityData[x] = tmp;
908 }
909 else
910 {
911 free(settings->ReceivedCapabilityData[x]);
912 settings->ReceivedCapabilityData[x] = NULL;
913 }
914 }
915 return TRUE;
916}

◆ freerdp_capability_buffer_free()

FREERDP_API void freerdp_capability_buffer_free ( rdpSettings *  settings)

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

858{
859 WINPR_ASSERT(settings);
860
861 if (settings->ReceivedCapabilityData)
862 {
863 for (UINT32 x = 0; x < settings->ReceivedCapabilitiesSize; x++)
864 {
865 free(settings->ReceivedCapabilityData[x]);
866 settings->ReceivedCapabilityData[x] = NULL;
867 }
868 }
869 settings->ReceivedCapabilitiesSize = 0;
870
871 free(settings->ReceivedCapabilityDataSizes);
872 settings->ReceivedCapabilityDataSizes = NULL;
873
874 free((void*)settings->ReceivedCapabilityData);
875 settings->ReceivedCapabilityData = NULL;
876 free(settings->ReceivedCapabilities);
877 settings->ReceivedCapabilities = NULL;
878}

◆ freerdp_device_clone()

FREERDP_API RDPDR_DEVICE * freerdp_device_clone ( const RDPDR_DEVICE device)

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

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

◆ freerdp_device_collection_add()

FREERDP_API BOOL freerdp_device_collection_add ( rdpSettings *  settings,
RDPDR_DEVICE device 
)

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

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

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

◆ freerdp_device_collection_find()

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

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

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

◆ freerdp_device_collection_find_type()

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

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

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

◆ freerdp_device_collection_free()

FREERDP_API void freerdp_device_collection_free ( rdpSettings *  settings)

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

566{
567 WINPR_ASSERT(settings);
568
569 if (settings->DeviceArray)
570 {
571 for (UINT32 index = 0; index < settings->DeviceArraySize; index++)
572 (void)freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, index, NULL);
573 }
574
575 free((void*)settings->DeviceArray);
576
577 (void)freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, NULL);
578 (void)freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0);
579 (void)freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0);
580}
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 1911 of file common/settings.c.

1912{
1913 if (!what && !expect)
1914 return TRUE;
1915 if (!what || !expect)
1916 return FALSE;
1917
1918 if (what->Id != expect->Id)
1919 return FALSE;
1920 if (what->Type != expect->Type)
1921 return FALSE;
1922 if (what->Name && expect->Name)
1923 {
1924 if (strcmp(what->Name, expect->Name) != 0)
1925 return FALSE;
1926 }
1927 else
1928 {
1929 if (what->Name != expect->Name)
1930 return FALSE;
1931 }
1932
1933 switch (what->Type)
1934 {
1935 case RDPDR_DTYP_PRINT:
1936 {
1937 const RDPDR_PRINTER* a = (const RDPDR_PRINTER*)what;
1938 const RDPDR_PRINTER* b = (const RDPDR_PRINTER*)expect;
1939 if (a->DriverName && b->DriverName)
1940 return strcmp(a->DriverName, b->DriverName) == 0;
1941 return a->DriverName == b->DriverName;
1942 }
1943
1944 case RDPDR_DTYP_SERIAL:
1945 {
1946 const RDPDR_SERIAL* a = (const RDPDR_SERIAL*)what;
1947 const RDPDR_SERIAL* b = (const RDPDR_SERIAL*)expect;
1948
1949 if (a->Path && b->Path)
1950 {
1951 if (strcmp(a->Path, b->Path) != 0)
1952 return FALSE;
1953 }
1954 else if (a->Path != b->Path)
1955 return FALSE;
1956
1957 if (a->Driver && b->Driver)
1958 {
1959 if (strcmp(a->Driver, b->Driver) != 0)
1960 return FALSE;
1961 }
1962 else if (a->Driver != b->Driver)
1963 return FALSE;
1964 if (a->Permissive && b->Permissive)
1965 return strcmp(a->Permissive, b->Permissive) == 0;
1966 return a->Permissive == b->Permissive;
1967 }
1968
1969 case RDPDR_DTYP_PARALLEL:
1970 {
1971 const RDPDR_PARALLEL* a = (const RDPDR_PARALLEL*)what;
1972 const RDPDR_PARALLEL* b = (const RDPDR_PARALLEL*)expect;
1973 if (a->Path && b->Path)
1974 return strcmp(a->Path, b->Path) == 0;
1975 return a->Path == b->Path;
1976 }
1977
1978 case RDPDR_DTYP_SMARTCARD:
1979 break;
1980 case RDPDR_DTYP_FILESYSTEM:
1981 {
1982 const RDPDR_DRIVE* a = (const RDPDR_DRIVE*)what;
1983 const RDPDR_DRIVE* b = (const RDPDR_DRIVE*)expect;
1984 if (a->automount != b->automount)
1985 return FALSE;
1986 if (a->Path && b->Path)
1987 return strcmp(a->Path, b->Path) == 0;
1988 return a->Path == b->Path;
1989 }
1990
1991 default:
1992 return FALSE;
1993 }
1994
1995 return TRUE;
1996}

◆ freerdp_device_free()

FREERDP_API void freerdp_device_free ( RDPDR_DEVICE device)

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

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

◆ freerdp_device_new()

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

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

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

◆ freerdp_dynamic_channel_collection_add()

FREERDP_API BOOL freerdp_dynamic_channel_collection_add ( rdpSettings *  settings,
ADDIN_ARGV channel 
)

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

724{
725 UINT32 count = 0;
726 UINT32 oldSize = 0;
727
728 WINPR_ASSERT(settings);
729 WINPR_ASSERT(channel);
730
731 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount) + 1;
732 oldSize = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
733 if (oldSize < count)
734 {
735 ADDIN_ARGV** new_array = NULL;
736 UINT32 size = oldSize * 2;
737 if (size == 0)
738 size = count * 2;
739
740 new_array =
741 (ADDIN_ARGV**)realloc((void*)settings->DynamicChannelArray, sizeof(ADDIN_ARGV*) * size);
742
743 if (!new_array)
744 return FALSE;
745
746 settings->DynamicChannelArray = new_array;
747 {
748 const size_t rem = size - oldSize;
749 memset((void*)&settings->DynamicChannelArray[oldSize], 0, sizeof(ADDIN_ARGV*) * rem);
750 }
751 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, size))
752 return FALSE;
753 }
754
755 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
756 settings->DynamicChannelArray[count++] = channel;
757 return freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count);
758}

◆ freerdp_dynamic_channel_collection_del()

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

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

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

◆ freerdp_dynamic_channel_collection_find()

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

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

761{
762 WINPR_ASSERT(settings);
763 WINPR_ASSERT(name);
764
765 for (UINT32 index = 0;
766 index < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount); index++)
767 {
768 ADDIN_ARGV* channel = settings->DynamicChannelArray[index];
769
770 if (strcmp(channel->argv[0], name) == 0)
771 return channel;
772 }
773
774 return NULL;
775}

◆ freerdp_dynamic_channel_collection_free()

FREERDP_API void freerdp_dynamic_channel_collection_free ( rdpSettings *  settings)

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

841{
842 WINPR_ASSERT(settings);
843
844 if (settings->DynamicChannelArray)
845 {
846 for (UINT32 i = 0;
847 i < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize); i++)
848 freerdp_addin_argv_free(settings->DynamicChannelArray[i]);
849 }
850
851 free((void*)settings->DynamicChannelArray);
852 (void)freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0);
853 settings->DynamicChannelArray = NULL;
854 (void)freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0);
855}

◆ freerdp_encryption_level_string()

FREERDP_API const char * freerdp_encryption_level_string ( UINT32  EncryptionLevel)

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

2170{
2171 switch (EncryptionLevel)
2172 {
2173 case ENCRYPTION_LEVEL_NONE:
2174 return "ENCRYPTION_LEVEL_NONE";
2175 case ENCRYPTION_LEVEL_LOW:
2176 return "ENCRYPTION_LEVEL_LOW";
2177 case ENCRYPTION_LEVEL_CLIENT_COMPATIBLE:
2178 return "ENCRYPTION_LEVEL_CLIENT_COMPATIBLE";
2179 case ENCRYPTION_LEVEL_HIGH:
2180 return "ENCRYPTION_LEVEL_HIGH";
2181 case ENCRYPTION_LEVEL_FIPS:
2182 return "ENCRYPTION_LEVEL_FIPS";
2183 default:
2184 return "ENCRYPTION_LEVEL_UNKNOWN";
2185 }
2186}

◆ freerdp_encryption_methods_string()

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

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

2189{
2190 if (EncryptionMethods == ENCRYPTION_METHOD_NONE)
2191 {
2192 winpr_str_append("ENCRYPTION_METHOD_NONE", buffer, size, "|");
2193 return buffer;
2194 }
2195
2196 if (EncryptionMethods & ENCRYPTION_METHOD_40BIT)
2197 {
2198 winpr_str_append("ENCRYPTION_METHOD_40BIT", buffer, size, "|");
2199 }
2200 if (EncryptionMethods & ENCRYPTION_METHOD_128BIT)
2201 {
2202 winpr_str_append("ENCRYPTION_METHOD_128BIT", buffer, size, "|");
2203 }
2204 if (EncryptionMethods & ENCRYPTION_METHOD_56BIT)
2205 {
2206 winpr_str_append("ENCRYPTION_METHOD_56BIT", buffer, size, "|");
2207 }
2208 if (EncryptionMethods & ENCRYPTION_METHOD_FIPS)
2209 {
2210 winpr_str_append("ENCRYPTION_METHOD_FIPS", buffer, size, "|");
2211 }
2212
2213 return buffer;
2214}

◆ freerdp_performance_flags_make()

FREERDP_API void freerdp_performance_flags_make ( rdpSettings *  settings)

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

970{
971 UINT32 PerformanceFlags = PERF_FLAG_NONE;
972
973 if (freerdp_settings_get_bool(settings, FreeRDP_AllowFontSmoothing))
974 PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
975
976 if (freerdp_settings_get_bool(settings, FreeRDP_AllowDesktopComposition))
977 PerformanceFlags |= PERF_ENABLE_DESKTOP_COMPOSITION;
978
979 if (freerdp_settings_get_bool(settings, FreeRDP_DisableWallpaper))
980 PerformanceFlags |= PERF_DISABLE_WALLPAPER;
981
982 if (freerdp_settings_get_bool(settings, FreeRDP_DisableFullWindowDrag))
983 PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
984
985 if (freerdp_settings_get_bool(settings, FreeRDP_DisableMenuAnims))
986 PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
987
988 if (freerdp_settings_get_bool(settings, FreeRDP_DisableThemes))
989 PerformanceFlags |= PERF_DISABLE_THEMING;
990 (void)freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags);
991}
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 993 of file common/settings.c.

994{
996 settings, FreeRDP_AllowFontSmoothing,
997 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
998 PERF_ENABLE_FONT_SMOOTHING)
999 ? TRUE
1000 : FALSE);
1002 settings, FreeRDP_AllowDesktopComposition,
1003 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1004 PERF_ENABLE_DESKTOP_COMPOSITION)
1005 ? TRUE
1006 : FALSE);
1008 settings, FreeRDP_DisableWallpaper,
1009 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_WALLPAPER)
1010 ? TRUE
1011 : FALSE);
1013 settings, FreeRDP_DisableFullWindowDrag,
1014 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1015 PERF_DISABLE_FULLWINDOWDRAG)
1016 ? TRUE
1017 : FALSE);
1019 settings, FreeRDP_DisableMenuAnims,
1020 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1021 PERF_DISABLE_MENUANIMATIONS)
1022 ? TRUE
1023 : FALSE);
1025 settings, FreeRDP_DisableThemes,
1026 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) & PERF_DISABLE_THEMING)
1027 ? TRUE
1028 : FALSE);
1029}
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 1998 of file common/settings.c.

1999{
2000 const UINT32 mask =
2001 RAIL_LEVEL_SUPPORTED | RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED |
2002 RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED | RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED |
2003 RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED | RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED |
2004 RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED | RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED;
2005
2006 if (flags & RAIL_LEVEL_SUPPORTED)
2007 winpr_str_append("RAIL_LEVEL_SUPPORTED", buffer, length, "|");
2008 if (flags & RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED)
2009 winpr_str_append("RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED", buffer, length, "|");
2010 if (flags & RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED)
2011 winpr_str_append("RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED", buffer, length, "|");
2012 if (flags & RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED)
2013 winpr_str_append("RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED", buffer, length, "|");
2014 if (flags & RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED)
2015 winpr_str_append("RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED", buffer, length, "|");
2016 if (flags & RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED)
2017 winpr_str_append("RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED", buffer, length, "|");
2018 if (flags & RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED)
2019 winpr_str_append("RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED", buffer, length, "|");
2020 if (flags & RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED)
2021 winpr_str_append("RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED", buffer, length, "|");
2022 if (flags & RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED)
2023 winpr_str_append("RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED", buffer, length, "|");
2024 if ((flags & ~mask) != 0)
2025 {
2026 char tbuffer[64] = { 0 };
2027 (void)_snprintf(tbuffer, sizeof(tbuffer), "RAIL_FLAG_UNKNOWN 0x%08" PRIx32, flags & mask);
2028 winpr_str_append(tbuffer, buffer, length, "|");
2029 }
2030 return buffer;
2031}

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

2061{
2062 switch (version)
2063 {
2064 case RDP_VERSION_4:
2065 return "RDP_VERSION_4";
2066 case RDP_VERSION_5_PLUS:
2067 return "RDP_VERSION_5_PLUS";
2068 case RDP_VERSION_10_0:
2069 return "RDP_VERSION_10_0";
2070 case RDP_VERSION_10_1:
2071 return "RDP_VERSION_10_1";
2072 case RDP_VERSION_10_2:
2073 return "RDP_VERSION_10_2";
2074 case RDP_VERSION_10_3:
2075 return "RDP_VERSION_10_3";
2076 case RDP_VERSION_10_4:
2077 return "RDP_VERSION_10_4";
2078 case RDP_VERSION_10_5:
2079 return "RDP_VERSION_10_5";
2080 case RDP_VERSION_10_6:
2081 return "RDP_VERSION_10_6";
2082 case RDP_VERSION_10_7:
2083 return "RDP_VERSION_10_7";
2084 case RDP_VERSION_10_8:
2085 return "RDP_VERSION_10_8";
2086 case RDP_VERSION_10_9:
2087 return "RDP_VERSION_10_9";
2088 case RDP_VERSION_10_10:
2089 return "RDP_VERSION_10_10";
2090 case RDP_VERSION_10_11:
2091 return "RDP_VERSION_10_11";
2092 case RDP_VERSION_10_12:
2093 return "RDP_VERSION_10_12";
2094 default:
2095 return "RDP_VERSION_UNKNOWN";
2096 }
2097}

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

2151{
2152 switch (type)
2153 {
2154 case RDPDR_DTYP_FILESYSTEM:
2155 return "RDPDR_DTYP_FILESYSTEM";
2156 case RDPDR_DTYP_PARALLEL:
2157 return "RDPDR_DTYP_PARALLEL";
2158 case RDPDR_DTYP_PRINT:
2159 return "RDPDR_DTYP_PRINT";
2160 case RDPDR_DTYP_SERIAL:
2161 return "RDPDR_DTYP_SERIAL";
2162 case RDPDR_DTYP_SMARTCARD:
2163 return "RDPDR_DTYP_SMARTCARD";
2164 default:
2165 return "RDPDR_DTYP_UNKNOWN";
2166 }
2167}

◆ freerdp_server_license_issuers_copy()

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

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

950{
951 WINPR_ASSERT(settings);
952 WINPR_ASSERT(issuers || (count == 0));
953
954 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_ServerLicenseProductIssuers, NULL,
955 count))
956 return FALSE;
957
958 for (UINT32 x = 0; x < count; x++)
959 {
960 char* issuer = _strdup(issuers[x]);
961 if (!issuer)
962 return FALSE;
963 settings->ServerLicenseProductIssuers[x] = issuer;
964 }
965
966 return TRUE;
967}
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 935 of file common/settings.c.

936{
937 WINPR_ASSERT(settings);
938
939 if (settings->ServerLicenseProductIssuers)
940 {
941 for (UINT32 x = 0; x < settings->ServerLicenseProductIssuersCount; x++)
942 free(settings->ServerLicenseProductIssuers[x]);
943 }
944 free((void*)settings->ServerLicenseProductIssuers);
945 settings->ServerLicenseProductIssuers = NULL;
946 settings->ServerLicenseProductIssuersCount = 0;
947}

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

1032{
1033 if (!freerdp_settings_set_uint32(settings, FreeRDP_GatewayUsageMethod, GatewayUsageMethod))
1034 return FALSE;
1035
1036 if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DIRECT)
1037 {
1038 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1039 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1040 return FALSE;
1041 }
1042 else if (GatewayUsageMethod == TSC_PROXY_MODE_DIRECT)
1043 {
1044 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1045 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1046 return FALSE;
1047 }
1048 else if (GatewayUsageMethod == TSC_PROXY_MODE_DETECT)
1049 {
1050 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1051 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, TRUE))
1052 return FALSE;
1053 }
1054 else if (GatewayUsageMethod == TSC_PROXY_MODE_DEFAULT)
1055 {
1061 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1062 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1063 return FALSE;
1064 }
1065 else if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DETECT)
1066 {
1067 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1068 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1069 return FALSE;
1070 }
1071
1072 return TRUE;
1073}

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

2243{
2244 const char* old = freerdp_settings_get_string(settings, id);
2245
2246 size_t len = 0;
2247 char* str = NULL;
2248
2249 if (!old)
2250 winpr_asprintf(&str, &len, "%s", param);
2251 else if (!separator)
2252 winpr_asprintf(&str, &len, "%s%s", old, param);
2253 else
2254 winpr_asprintf(&str, &len, "%s%s%s", old, separator, param);
2255
2256 const BOOL rc = freerdp_settings_set_string_len(settings, id, str, len);
2257 free(str);
2258 return rc;
2259}
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 2261 of file common/settings.c.

2262{
2263 return settings != NULL;
2264}

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

1573{
1574 rdpSettings* _settings = (rdpSettings*)calloc(1, sizeof(rdpSettings));
1575
1576 if (!freerdp_settings_copy(_settings, settings))
1577 goto out_fail;
1578
1579 return _settings;
1580out_fail:
1581 WINPR_PRAGMA_DIAG_PUSH
1582 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1583 freerdp_settings_free(_settings);
1584 WINPR_PRAGMA_DIAG_POP
1585 return NULL;
1586}
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 1516 of file core/settings.c.

1517{
1518 BOOL rc = 0;
1519
1520 if (!settings || !_settings)
1521 return FALSE;
1522
1523 /* This is required to free all non string buffers */
1524 freerdp_settings_free_internal(_settings);
1525 /* This copies everything except allocated non string buffers. reset all allocated buffers to
1526 * NULL to fix issues during cleanup */
1527 rc = freerdp_settings_clone_keys(_settings, settings);
1528
1529 _settings->LoadBalanceInfo = NULL;
1530 _settings->ServerRandom = NULL;
1531 _settings->ClientRandom = NULL;
1532 _settings->ServerCertificate = NULL;
1533 _settings->RdpServerCertificate = NULL;
1534 _settings->RdpServerRsaKey = NULL;
1535 _settings->ChannelDefArray = NULL;
1536 _settings->MonitorDefArray = NULL;
1537 _settings->MonitorIds = NULL;
1538 _settings->OrderSupport = NULL;
1539 _settings->BitmapCacheV2CellInfo = NULL;
1540 _settings->GlyphCache = NULL;
1541 _settings->FragCache = NULL;
1542 _settings->ClientAutoReconnectCookie = NULL;
1543 _settings->ServerAutoReconnectCookie = NULL;
1544 _settings->ClientTimeZone = NULL;
1545 _settings->RedirectionPassword = NULL;
1546 _settings->RedirectionTsvUrl = NULL;
1547 _settings->TargetNetAddresses = NULL;
1548 _settings->TargetNetPorts = NULL;
1549 _settings->RedirectionGuid = NULL;
1550 _settings->DeviceArray = NULL;
1551 _settings->StaticChannelArray = NULL;
1552 _settings->DynamicChannelArray = NULL;
1553 _settings->ReceivedCapabilities = NULL;
1554 _settings->ReceivedCapabilityData = NULL;
1555 _settings->ReceivedCapabilityDataSizes = NULL;
1556
1557 _settings->ServerLicenseProductIssuersCount = 0;
1558 _settings->ServerLicenseProductIssuers = NULL;
1559
1560 if (!rc)
1561 goto out_fail;
1562
1563 /* Begin copying */
1564 if (!freerdp_settings_int_buffer_copy(_settings, settings))
1565 goto out_fail;
1566 return TRUE;
1567out_fail:
1568 freerdp_settings_free_internal(_settings);
1569 return FALSE;
1570}

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

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

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

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

1311{
1312 if (!settings)
1313 return;
1314
1315 freerdp_settings_free_internal(settings);
1316 free(settings);
1317}

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

1853{
1854 UINT32 flags = FREERDP_CODEC_ALL;
1855 if (settings->RemoteFxCodec == FALSE)
1856 {
1857 flags &= (uint32_t)~FREERDP_CODEC_REMOTEFX;
1858 }
1859 if (settings->NSCodec == FALSE)
1860 {
1861 flags &= (uint32_t)~FREERDP_CODEC_NSCODEC;
1862 }
1863 /*TODO: check other codecs flags */
1864 return flags;
1865}

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

800{
801 char* path = NULL;
802 /* For default FreeRDP continue using same config directory
803 * as in old releases.
804 * Custom builds use <Vendor>/<Product> as config folder. */
805#if !defined(WITH_FULL_CONFIG_PATH)
806 if (_stricmp(FREERDP_VENDOR_STRING, FREERDP_PRODUCT_STRING) == 0)
807 return freerdp_settings_get_legacy_config_path();
808#endif
809
810 char* base = GetKnownSubPath(KNOWN_PATH_XDG_CONFIG_HOME, FREERDP_VENDOR_STRING);
811 if (base)
812 path = GetCombinedPath(base, FREERDP_PRODUCT_STRING);
813 free(base);
814
815 return path;
816}

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(), and freerdp_settings_print_diff().

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(), and freerdp_settings_print_diff().

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(), and freerdp_settings_print_diff().

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

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

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

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

Referenced by freerdp_settings_get_pointer_writable(), and freerdp_settings_get_string_writable().

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

1337{
1338 union
1339 {
1340 const rdpSettings* pc;
1341 rdpSettings* p;
1342 } cnv;
1343 cnv.pc = settings;
1344 return freerdp_settings_get_pointer_writable(cnv.p, id);
1345}
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 1846 of file common/settings.c.

1848{
1849 return freerdp_settings_get_pointer_array_writable(settings, id, offset);
1850}

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

1546{
1547 size_t max = 0;
1548 if (!settings)
1549 return NULL;
1550 switch (id)
1551 {
1552 case FreeRDP_ClientAutoReconnectCookie:
1553 max = 1;
1554 if ((offset >= max) || !settings->ClientAutoReconnectCookie)
1555 goto fail;
1556 return &settings->ClientAutoReconnectCookie[offset];
1557 case FreeRDP_ServerAutoReconnectCookie:
1558 max = 1;
1559 if ((offset >= max) || !settings->ServerAutoReconnectCookie)
1560 goto fail;
1561 return &settings->ServerAutoReconnectCookie[offset];
1562 case FreeRDP_ServerCertificate:
1563 max = freerdp_settings_get_uint32(settings, FreeRDP_ServerCertificateLength);
1564 if (offset >= max)
1565 goto fail;
1566 return &settings->ServerCertificate[offset];
1567 case FreeRDP_ServerRandom:
1568 max = freerdp_settings_get_uint32(settings, FreeRDP_ServerRandomLength);
1569 if (offset >= max)
1570 goto fail;
1571 return &settings->ServerRandom[offset];
1572 case FreeRDP_ClientRandom:
1573 max = freerdp_settings_get_uint32(settings, FreeRDP_ClientRandomLength);
1574 if (offset >= max)
1575 goto fail;
1576 return &settings->ClientRandom[offset];
1577 case FreeRDP_LoadBalanceInfo:
1578 max = freerdp_settings_get_uint32(settings, FreeRDP_LoadBalanceInfoLength);
1579 if (offset >= max)
1580 goto fail;
1581 return &settings->LoadBalanceInfo[offset];
1582
1583 case FreeRDP_RedirectionTsvUrl:
1584 max = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionTsvUrlLength);
1585 if (offset >= max)
1586 goto fail;
1587 return &settings->RedirectionTsvUrl[offset];
1588
1589 case FreeRDP_RedirectionPassword:
1590 max = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionPasswordLength);
1591 if (offset >= max)
1592 goto fail;
1593 return &settings->RedirectionPassword[offset];
1594
1595 case FreeRDP_OrderSupport:
1596 max = 32;
1597 if (offset >= max)
1598 goto fail;
1599 return &settings->OrderSupport[offset];
1600 case FreeRDP_MonitorIds:
1601 max = freerdp_settings_get_uint32(settings, FreeRDP_NumMonitorIds);
1602 if (offset >= max)
1603 goto fail;
1604 return &settings->MonitorIds[offset];
1605 case FreeRDP_MonitorDefArray:
1606 max = freerdp_settings_get_uint32(settings, FreeRDP_MonitorDefArraySize);
1607 if (offset >= max)
1608 goto fail;
1609 return &settings->MonitorDefArray[offset];
1610 case FreeRDP_ChannelDefArray:
1611 max = freerdp_settings_get_uint32(settings, FreeRDP_ChannelDefArraySize);
1612 if (offset >= max)
1613 goto fail;
1614 return &settings->ChannelDefArray[offset];
1615 case FreeRDP_DeviceArray:
1616 max = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
1617 if (offset >= max)
1618 goto fail;
1619 return settings->DeviceArray[offset];
1620 case FreeRDP_StaticChannelArray:
1621 max = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
1622 if (offset >= max)
1623 goto fail;
1624 return settings->StaticChannelArray[offset];
1625 case FreeRDP_DynamicChannelArray:
1626 max = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
1627 if (offset >= max)
1628 goto fail;
1629 return settings->DynamicChannelArray[offset];
1630 case FreeRDP_FragCache:
1631 max = 1;
1632 if (offset >= max)
1633 goto fail;
1634 return &settings->FragCache[offset];
1635 case FreeRDP_GlyphCache:
1636 max = 10;
1637 if (offset >= max)
1638 goto fail;
1639 return &settings->GlyphCache[offset];
1640 case FreeRDP_BitmapCacheV2CellInfo:
1641 max = freerdp_settings_get_uint32(settings, FreeRDP_BitmapCacheV2NumCells);
1642 if (offset >= max)
1643 goto fail;
1644 return &settings->BitmapCacheV2CellInfo[offset];
1645 case FreeRDP_ReceivedCapabilities:
1646 max = freerdp_settings_get_uint32(settings, FreeRDP_ReceivedCapabilitiesSize);
1647 if (offset >= max)
1648 goto fail;
1649 return &settings->ReceivedCapabilities[offset];
1650 case FreeRDP_TargetNetAddresses:
1651 max = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1652 if (offset >= max)
1653 goto fail;
1654 return settings->TargetNetAddresses[offset];
1655 case FreeRDP_TargetNetPorts:
1656 max = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1657 if (offset >= max)
1658 goto fail;
1659 return &settings->TargetNetPorts[offset];
1660 case FreeRDP_ClientTimeZone:
1661 max = 1;
1662 if (offset >= max)
1663 goto fail;
1664 return settings->ClientTimeZone;
1665 case FreeRDP_RdpServerCertificate:
1666 max = 1;
1667 if (offset >= max)
1668 goto fail;
1669 return settings->RdpServerCertificate;
1670 case FreeRDP_RdpServerRsaKey:
1671 max = 1;
1672 if (offset >= max)
1673 goto fail;
1674 return settings->RdpServerRsaKey;
1675 default:
1676 WLog_WARN(TAG, "Invalid id %s [%" PRIuz "]", freerdp_settings_get_name_for_key(id), id);
1677 return NULL;
1678 }
1679
1680fail:
1681 WLog_WARN(TAG, "Invalid offset for %s [%" PRIuz "]: size=%" PRIuz ", offset=%" PRIuz,
1682 freerdp_settings_get_name_for_key(id), id, max, offset);
1683 return NULL;
1684}
FREERDP_API const char * freerdp_settings_get_name_for_key(SSIZE_T key)
Returns the type name for a key.

◆ freerdp_settings_get_pointer_writable()

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

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

1868{
1869 WINPR_ASSERT(settings);
1870 const char* hostname = settings->ServerHostname;
1871
1872 if (settings->UserSpecifiedServerName)
1873 hostname = settings->UserSpecifiedServerName;
1874
1875 return hostname;
1876}

◆ 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(), and freerdp_settings_print_diff().

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

2141{
2142 const char* str = freerdp_settings_get_string(settings, id);
2143 if (pCharLen)
2144 *pCharLen = 0;
2145 if (!str)
2146 return NULL;
2147 return ConvertUtf8ToWCharAlloc(str, pCharLen);
2148}

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

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

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

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_get_type_name_for_key().

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

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

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

375{
376 const SSIZE_T type = freerdp_settings_get_type_for_key(key);
378}
const char * freerdp_settings_get_type_name_for_type(SSIZE_T type)
Returns the type name for a type.

References freerdp_settings_get_type_for_key(), and freerdp_settings_get_type_name_for_type().

Referenced by freerdp_settings_get_pointer_writable(), and freerdp_settings_get_string_writable().

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

◆ freerdp_settings_get_type_name_for_type()

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

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

Referenced by freerdp_settings_get_type_name_for_key().

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(), and freerdp_settings_print_diff().

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(), 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(), and freerdp_settings_print_diff().

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

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

Here is the call 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 96 of file settings_str.c.

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

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_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(), 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().

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

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

2292{
2293 WINPR_ASSERT(monitors || (count == 0));
2294 if (count == 0)
2295 {
2296 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftX, 0))
2297 return FALSE;
2298 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftY, 0))
2299 return FALSE;
2300 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_MonitorDefArray, NULL, 0))
2301 return FALSE;
2302 return freerdp_settings_set_uint32(settings, FreeRDP_MonitorCount, 0);
2303 return TRUE;
2304 }
2305
2306 // Find primary or alternatively the monitor at 0/0
2307 const rdpMonitor* primary = NULL;
2308 for (size_t x = 0; x < count; x++)
2309 {
2310 const rdpMonitor* cur = &monitors[x];
2311 if (cur->is_primary)
2312 {
2313 primary = cur;
2314 break;
2315 }
2316 }
2317 if (!primary)
2318 {
2319 for (size_t x = 0; x < count; x++)
2320 {
2321 const rdpMonitor* cur = &monitors[x];
2322 if ((cur->x == 0) && (cur->y == 0))
2323 {
2324 primary = cur;
2325 break;
2326 }
2327 }
2328 }
2329
2330 if (!primary)
2331 {
2332 WLog_ERR(TAG, "Could not find primary monitor, aborting");
2333 return FALSE;
2334 }
2335
2336 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_MonitorDefArray, NULL, count))
2337 return FALSE;
2338 rdpMonitor* sorted = freerdp_settings_get_pointer_writable(settings, FreeRDP_MonitorDefArray);
2339 WINPR_ASSERT(sorted);
2340
2341 size_t sortpos = 0;
2342
2343 /* Set primary. Ensure left/top is at 0/0 and flags contains MONITOR_PRIMARY */
2344 sorted[sortpos] = *primary;
2345 sorted[sortpos].x = 0;
2346 sorted[sortpos].y = 0;
2347 sorted[sortpos].is_primary = TRUE;
2348 sortpos++;
2349
2350 /* Set monitor shift to original layout */
2351 const INT32 offsetX = primary->x;
2352 const INT32 offsetY = primary->y;
2353 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftX, offsetX))
2354 return FALSE;
2355 if (!freerdp_settings_set_int32(settings, FreeRDP_MonitorLocalShiftY, offsetY))
2356 return FALSE;
2357
2358 for (size_t x = 0; x < count; x++)
2359 {
2360 const rdpMonitor* cur = &monitors[x];
2361 if (cur == primary)
2362 continue;
2363
2364 rdpMonitor m = monitors[x];
2365 m.x -= offsetX;
2366 m.y -= offsetY;
2367 sorted[sortpos++] = m;
2368 }
2369
2370 // Sort remaining monitors by x/y ?
2371 qsort(sorted, count, sizeof(rdpMonitor), sort_monitor_fn);
2372
2373 return freerdp_settings_set_uint32(settings, FreeRDP_MonitorCount,
2374 WINPR_ASSERTING_INT_CAST(uint32_t, count));
2375}

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

1688{
1689 size_t maxOffset = 0;
1690 if (!settings)
1691 return FALSE;
1692 switch (id)
1693 {
1694 case FreeRDP_ClientAutoReconnectCookie:
1695 maxOffset = 1;
1696 if ((offset >= maxOffset) || !data || !settings->ClientAutoReconnectCookie)
1697 goto fail;
1698 settings->ClientAutoReconnectCookie[offset] = *(const ARC_CS_PRIVATE_PACKET*)data;
1699 return TRUE;
1700 case FreeRDP_ServerAutoReconnectCookie:
1701 maxOffset = 1;
1702 if ((offset >= maxOffset) || !data || !settings->ServerAutoReconnectCookie)
1703 goto fail;
1704 settings->ServerAutoReconnectCookie[offset] = *(const ARC_SC_PRIVATE_PACKET*)data;
1705 return TRUE;
1706 case FreeRDP_ServerCertificate:
1707 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ServerCertificateLength);
1708 if ((offset >= maxOffset) || !data)
1709 goto fail;
1710 settings->ServerCertificate[offset] = *(const BYTE*)data;
1711 return TRUE;
1712 case FreeRDP_DeviceArray:
1713 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
1714 if (offset >= maxOffset)
1715 goto fail;
1716 freerdp_device_free(settings->DeviceArray[offset]);
1717 settings->DeviceArray[offset] = freerdp_device_clone(data);
1718 return TRUE;
1719 case FreeRDP_TargetNetAddresses:
1720 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1721 if ((offset >= maxOffset) || !data)
1722 goto fail;
1723 free(settings->TargetNetAddresses[offset]);
1724 settings->TargetNetAddresses[offset] = _strdup((const char*)data);
1725 return settings->TargetNetAddresses[offset] != NULL;
1726 case FreeRDP_TargetNetPorts:
1727 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_TargetNetAddressCount);
1728 if ((offset >= maxOffset) || !data)
1729 goto fail;
1730 settings->TargetNetPorts[offset] = *((const UINT32*)data);
1731 return TRUE;
1732 case FreeRDP_StaticChannelArray:
1733 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
1734 if ((offset >= maxOffset) || !data)
1735 goto fail;
1736 freerdp_addin_argv_free(settings->StaticChannelArray[offset]);
1737 settings->StaticChannelArray[offset] = freerdp_addin_argv_clone(data);
1738 return TRUE;
1739 case FreeRDP_DynamicChannelArray:
1740 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
1741 if ((offset >= maxOffset) || !data)
1742 goto fail;
1743 freerdp_addin_argv_free(settings->DynamicChannelArray[offset]);
1744 settings->DynamicChannelArray[offset] = freerdp_addin_argv_clone(data);
1745 return TRUE;
1746 case FreeRDP_BitmapCacheV2CellInfo:
1747 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_BitmapCacheV2NumCells);
1748 if ((offset >= maxOffset) || !data)
1749 goto fail;
1750 {
1751 const BITMAP_CACHE_V2_CELL_INFO* cdata = (const BITMAP_CACHE_V2_CELL_INFO*)data;
1752 settings->BitmapCacheV2CellInfo[offset] = *cdata;
1753 }
1754 return TRUE;
1755 case FreeRDP_ServerRandom:
1756 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ServerRandomLength);
1757 if ((offset >= maxOffset) || !data)
1758 goto fail;
1759 settings->ServerRandom[offset] = *(const BYTE*)data;
1760 return TRUE;
1761 case FreeRDP_ClientRandom:
1762 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ClientRandomLength);
1763 if ((offset >= maxOffset) || !data)
1764 goto fail;
1765 settings->ClientRandom[offset] = *(const BYTE*)data;
1766 return TRUE;
1767 case FreeRDP_LoadBalanceInfo:
1768 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_LoadBalanceInfoLength);
1769 if ((offset >= maxOffset) || !data)
1770 goto fail;
1771 settings->LoadBalanceInfo[offset] = *(const BYTE*)data;
1772 return TRUE;
1773 case FreeRDP_RedirectionTsvUrl:
1774 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionTsvUrlLength);
1775 if ((offset >= maxOffset) || !data)
1776 goto fail;
1777 settings->RedirectionTsvUrl[offset] = *(const BYTE*)data;
1778 return TRUE;
1779 case FreeRDP_RedirectionPassword:
1780 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_RedirectionPasswordLength);
1781 if ((offset >= maxOffset) || !data)
1782 goto fail;
1783 settings->RedirectionPassword[offset] = *(const BYTE*)data;
1784 return TRUE;
1785 case FreeRDP_OrderSupport:
1786 maxOffset = 32;
1787 if (!settings->OrderSupport)
1788 goto fail;
1789 if ((offset >= maxOffset) || !data)
1790 goto fail;
1791 settings->OrderSupport[offset] = *(const BOOL*)data ? 1 : 0;
1792 return TRUE;
1793 case FreeRDP_GlyphCache:
1794 maxOffset = 10;
1795 if (!settings->GlyphCache)
1796 goto fail;
1797 if ((offset >= maxOffset) || !data)
1798 goto fail;
1799 settings->GlyphCache[offset] = *(const GLYPH_CACHE_DEFINITION*)data;
1800 return TRUE;
1801 case FreeRDP_FragCache:
1802 maxOffset = 1;
1803 if (!settings->FragCache)
1804 goto fail;
1805 if ((offset >= maxOffset) || !data)
1806 goto fail;
1807 settings->FragCache[offset] = *(const GLYPH_CACHE_DEFINITION*)data;
1808 return TRUE;
1809 case FreeRDP_MonitorIds:
1810 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_NumMonitorIds);
1811 if ((offset >= maxOffset) || !data)
1812 goto fail;
1813 settings->MonitorIds[offset] = *(const UINT32*)data;
1814 return TRUE;
1815 case FreeRDP_ChannelDefArray:
1816 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_ChannelDefArraySize);
1817 if ((offset >= maxOffset) || !data)
1818 goto fail;
1819 settings->ChannelDefArray[offset] = *(const CHANNEL_DEF*)data;
1820 return TRUE;
1821 case FreeRDP_MonitorDefArray:
1822 maxOffset = freerdp_settings_get_uint32(settings, FreeRDP_MonitorDefArraySize);
1823 if ((offset >= maxOffset) || !data)
1824 goto fail;
1825 settings->MonitorDefArray[offset] = *(const rdpMonitor*)data;
1826 return TRUE;
1827
1828 case FreeRDP_ClientTimeZone:
1829 maxOffset = 1;
1830 if ((offset >= maxOffset) || !data || !settings->ClientTimeZone)
1831 goto fail;
1832 settings->ClientTimeZone[0] = *(const TIME_ZONE_INFORMATION*)data;
1833 return TRUE;
1834
1835 default:
1836 WLog_WARN(TAG, "Invalid id %s [%" PRIuz "]", freerdp_settings_get_name_for_key(id), id);
1837 return FALSE;
1838 }
1839
1840fail:
1841 WLog_WARN(TAG, "[%s] Invalid offset=%" PRIuz " [%" PRIuz "] or NULL data=%p",
1842 freerdp_settings_get_name_for_key(id), offset, maxOffset, data);
1843 return FALSE;
1844}

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

1349{
1350 union
1351 {
1352 const void* cv;
1353 void* v;
1354 } cnv;
1355
1356 cnv.cv = data;
1357 if (!settings)
1358 return FALSE;
1359
1360 switch (id)
1361 {
1362 case FreeRDP_RdpServerCertificate:
1363 freerdp_certificate_free(settings->RdpServerCertificate);
1364
1365 if (len > 1)
1366 {
1367 WLog_ERR(TAG, "FreeRDP_RdpServerCertificate::len must be 0 or 1");
1368 return FALSE;
1369 }
1370 settings->RdpServerCertificate = cnv.v;
1371 if (!settings->RdpServerCertificate && (len > 0))
1372 {
1373 settings->RdpServerCertificate = freerdp_certificate_new();
1374 if (!settings->RdpServerCertificate)
1375 return FALSE;
1376 }
1377 return TRUE;
1378 case FreeRDP_RdpServerRsaKey:
1379 freerdp_key_free(settings->RdpServerRsaKey);
1380 if (len > 1)
1381 {
1382 WLog_ERR(TAG, "FreeRDP_RdpServerRsaKey::len must be 0 or 1");
1383 return FALSE;
1384 }
1385 settings->RdpServerRsaKey = (rdpPrivateKey*)cnv.v;
1386 if (!settings->RdpServerRsaKey && (len > 0))
1387 {
1388 settings->RdpServerRsaKey = freerdp_key_new();
1389 if (!settings->RdpServerRsaKey)
1390 return FALSE;
1391 }
1392 return TRUE;
1393 case FreeRDP_RedirectionPassword:
1394 return freerdp_settings_set_pointer_len_(
1395 settings, id, FreeRDP_RedirectionPasswordLength, data, len, sizeof(char));
1396 case FreeRDP_RedirectionTsvUrl:
1397 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_RedirectionTsvUrlLength,
1398 data, len, sizeof(char));
1399 case FreeRDP_RedirectionTargetCertificate:
1400 freerdp_certificate_free(settings->RedirectionTargetCertificate);
1401
1402 if (len > 1)
1403 {
1404 WLog_ERR(TAG, "FreeRDP_RedirectionTargetCertificate::len must be 0 or 1");
1405 return FALSE;
1406 }
1407 settings->RedirectionTargetCertificate = cnv.v;
1408 if (!settings->RedirectionTargetCertificate && (len > 0))
1409 {
1410 settings->RedirectionTargetCertificate = freerdp_certificate_new();
1411 if (!settings->RedirectionTargetCertificate)
1412 return FALSE;
1413 }
1414 return TRUE;
1415 case FreeRDP_RedirectionGuid:
1416 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_RedirectionGuidLength,
1417 data, len, sizeof(BYTE));
1418 case FreeRDP_LoadBalanceInfo:
1419 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_LoadBalanceInfoLength,
1420 data, len, sizeof(char));
1421 case FreeRDP_ServerRandom:
1422 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ServerRandomLength, data,
1423 len, sizeof(char));
1424 case FreeRDP_ClientRandom:
1425 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ClientRandomLength, data,
1426 len, sizeof(char));
1427 case FreeRDP_ServerCertificate:
1428 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ServerCertificateLength,
1429 data, len, sizeof(char));
1430 case FreeRDP_TargetNetAddresses:
1431 if ((data == NULL) && (len == 0))
1432 {
1433 freerdp_target_net_addresses_free(settings);
1434 return TRUE;
1435 }
1436 WLog_WARN(
1437 TAG,
1438 "[BUG] FreeRDP_TargetNetAddresses must not be resized from outside the library!");
1439 return FALSE;
1440 case FreeRDP_ServerLicenseProductIssuers:
1441 if (data == NULL)
1442 freerdp_server_license_issuers_free(settings);
1443 return freerdp_settings_set_pointer_len_(settings, FreeRDP_ServerLicenseProductIssuers,
1444 FreeRDP_ServerLicenseProductIssuersCount, data,
1445 len, sizeof(char*));
1446 case FreeRDP_TargetNetPorts:
1447 if ((data == NULL) && (len == 0))
1448 {
1449 freerdp_target_net_addresses_free(settings);
1450 return TRUE;
1451 }
1452 WLog_WARN(TAG,
1453 "[BUG] FreeRDP_TargetNetPorts must not be resized from outside the library!");
1454 return FALSE;
1455 case FreeRDP_DeviceArray:
1456 if (data == NULL)
1457 freerdp_device_collection_free(settings);
1458 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_DeviceArraySize, data,
1459 len, sizeof(ADDIN_ARGV*));
1460 case FreeRDP_ChannelDefArray:
1461 if ((len > 0) && (len < CHANNEL_MAX_COUNT))
1462 WLog_WARN(TAG,
1463 "FreeRDP_ChannelDefArray::len expected to be >= %" PRIu32
1464 ", but have %" PRIu32,
1465 CHANNEL_MAX_COUNT, len);
1466 return freerdp_settings_set_pointer_len_(settings, FreeRDP_ChannelDefArray,
1467 FreeRDP_ChannelDefArraySize, data, len,
1468 sizeof(CHANNEL_DEF));
1469 case FreeRDP_MonitorDefArray:
1470 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_MonitorDefArraySize,
1471 data, len, sizeof(rdpMonitor));
1472 case FreeRDP_ClientAutoReconnectCookie:
1473 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1474 sizeof(ARC_CS_PRIVATE_PACKET));
1475 case FreeRDP_ServerAutoReconnectCookie:
1476 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1477 sizeof(ARC_SC_PRIVATE_PACKET));
1478 case FreeRDP_ClientTimeZone:
1479 if (len > 1)
1480 {
1481 WLog_ERR(TAG, "FreeRDP_ClientTimeZone::len must be 0 or 1");
1482 return FALSE;
1483 }
1484 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1485 sizeof(TIME_ZONE_INFORMATION));
1486 case FreeRDP_BitmapCacheV2CellInfo:
1487 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_BitmapCacheV2NumCells,
1488 data, len, sizeof(BITMAP_CACHE_V2_CELL_INFO));
1489 case FreeRDP_GlyphCache:
1490 if ((len != 0) && (len != 10))
1491 {
1492 WLog_ERR(TAG, "FreeRDP_GlyphCache::len must be 0 or 10");
1493 return FALSE;
1494 }
1495 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1496 sizeof(GLYPH_CACHE_DEFINITION));
1497 case FreeRDP_FragCache:
1498 if (len > 1)
1499 {
1500 WLog_ERR(TAG, "FreeRDP_FragCache::len must be 0 or 1");
1501 return FALSE;
1502 }
1503 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1504 sizeof(GLYPH_CACHE_DEFINITION));
1505 case FreeRDP_StaticChannelArray:
1506 if (data == NULL)
1507 freerdp_static_channel_collection_free(settings);
1508 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_StaticChannelArraySize,
1509 data, len, sizeof(ADDIN_ARGV*));
1510 case FreeRDP_DynamicChannelArray:
1511 if (data == NULL)
1512 freerdp_dynamic_channel_collection_free(settings);
1513 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_DynamicChannelArraySize,
1514 data, len, sizeof(ADDIN_ARGV*));
1515 case FreeRDP_ReceivedCapabilityData:
1516 if (data == NULL)
1517 freerdp_capability_buffer_free(settings);
1518 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ReceivedCapabilitiesSize,
1519 data, len, sizeof(BYTE*));
1520 case FreeRDP_ReceivedCapabilities:
1521 if (data == NULL)
1522 freerdp_capability_buffer_free(settings);
1523 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_ReceivedCapabilitiesSize,
1524 data, len, sizeof(char));
1525 case FreeRDP_OrderSupport:
1526 return freerdp_settings_set_pointer_len_(settings, id, FreeRDP_UINT32_UNUSED, data, len,
1527 sizeof(char));
1528
1529 case FreeRDP_MonitorIds:
1530 return freerdp_settings_set_pointer_len_(
1531 settings, FreeRDP_MonitorIds, FreeRDP_NumMonitorIds, data, len, sizeof(UINT32));
1532
1533 default:
1534 if ((data == NULL) && (len == 0))
1535 {
1536 freerdp_settings_set_pointer(settings, id, NULL);
1537 }
1538 else
1539 WLog_WARN(TAG, "Invalid id %" PRIuz, id);
1540 return FALSE;
1541 }
1542}

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

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

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

2101{
2102 WINPR_ASSERT(settings);
2103
2104 if (!param)
2105 return freerdp_settings_set_string_copy_(settings, id, NULL, 0, TRUE);
2106
2107 size_t len = 0;
2108
2109 char* str = ConvertWCharToUtf8Alloc(param, &len);
2110 if (!str && (len != 0))
2111 return FALSE;
2112
2113 return freerdp_settings_set_string_(settings, id, str, len);
2114}

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

2118{
2119 size_t len = 0;
2120
2121 WINPR_ASSERT(settings);
2122
2123 if (!param)
2124 return freerdp_settings_set_string_copy_(settings, id, NULL, length, TRUE);
2125
2126 char* str = ConvertWCharNToUtf8Alloc(param, length, &len);
2127 if (!str && (length != 0))
2128 {
2129 /* If the input string is an empty string, but length > 0
2130 * consider the conversion a success */
2131 const size_t wlen = _wcsnlen(param, length);
2132 if (wlen != 0)
2133 return FALSE;
2134 }
2135
2136 return freerdp_settings_set_string_(settings, id, str, len);
2137}

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

3681{
3682 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3683}

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(), 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_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().

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

1198{
1199 ULONGLONG uval = 0;
1200 LONGLONG ival = 0;
1201 SSIZE_T type = 0;
1202
1203 if (!settings || !name)
1204 return FALSE;
1205
1206 const SSIZE_T i = freerdp_settings_get_key_for_name(name);
1207 if (i < 0)
1208 {
1209 WLog_ERR(TAG, "Invalid settings key [%s]", name);
1210 return FALSE;
1211 }
1212
1213 const SSIZE_T index = i;
1214
1216 switch (type)
1217 {
1218
1219 case RDP_SETTINGS_TYPE_BOOL:
1220 {
1221 const BOOL val = (_strnicmp(value, "TRUE", 5) == 0) || (_strnicmp(value, "ON", 5) == 0);
1222 const BOOL nval =
1223 (_strnicmp(value, "FALSE", 6) == 0) || (_strnicmp(value, "OFF", 6) == 0);
1224 if (!val && !nval)
1225 return parsing_fail(name, "BOOL", value);
1226
1227 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1228 return freerdp_settings_set_bool(settings, (FreeRDP_Settings_Keys_Bool)index, val);
1229 }
1230 case RDP_SETTINGS_TYPE_UINT16:
1231 if (!value_to_uint(value, &uval, 0, UINT16_MAX))
1232 return parsing_fail(name, "UINT16", value);
1233
1234 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1235 if (!freerdp_settings_set_uint16(settings, (FreeRDP_Settings_Keys_UInt16)index,
1236 (UINT16)uval))
1237 return parsing_fail(name, "UINT16", value);
1238 return TRUE;
1239
1240 case RDP_SETTINGS_TYPE_INT16:
1241 if (!value_to_int(value, &ival, INT16_MIN, INT16_MAX))
1242 return parsing_fail(name, "INT16", value);
1243
1244 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1245 if (!freerdp_settings_set_int16(settings, (FreeRDP_Settings_Keys_Int16)index,
1246 (INT16)ival))
1247 return parsing_fail(name, "INT16", value);
1248 return TRUE;
1249 case RDP_SETTINGS_TYPE_UINT32:
1250 if (!value_to_uint(value, &uval, 0, UINT32_MAX))
1251 return parsing_fail(name, "UINT32", value);
1252
1253 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1254 if (!freerdp_settings_set_uint32(settings, (FreeRDP_Settings_Keys_UInt32)index,
1255 (UINT32)uval))
1256 return parsing_fail(name, "UINT32", value);
1257 return TRUE;
1258 case RDP_SETTINGS_TYPE_INT32:
1259 if (!value_to_int(value, &ival, INT32_MIN, INT32_MAX))
1260 return parsing_fail(name, "INT32", value);
1261
1262 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1263 if (!freerdp_settings_set_int32(settings, (FreeRDP_Settings_Keys_Int32)index,
1264 (INT32)ival))
1265 return parsing_fail(name, "INT32", value);
1266 return TRUE;
1267 case RDP_SETTINGS_TYPE_UINT64:
1268 if (!value_to_uint(value, &uval, 0, UINT64_MAX))
1269 return parsing_fail(name, "UINT64", value);
1270
1271 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1272 if (!freerdp_settings_set_uint64(settings, (FreeRDP_Settings_Keys_UInt64)index, uval))
1273 return parsing_fail(name, "UINT64", value);
1274 return TRUE;
1275 case RDP_SETTINGS_TYPE_INT64:
1276 if (!value_to_int(value, &ival, INT64_MIN, INT64_MAX))
1277 return parsing_fail(name, "INT64", value);
1278
1279 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1280 if (!freerdp_settings_set_int64(settings, (FreeRDP_Settings_Keys_Int64)index, ival))
1281 return parsing_fail(name, "INT64", value);
1282 return TRUE;
1283
1284 case RDP_SETTINGS_TYPE_STRING:
1285 // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)
1286 return freerdp_settings_set_string(settings, (FreeRDP_Settings_Keys_String)index,
1287 value);
1288 case RDP_SETTINGS_TYPE_POINTER:
1289 return parsing_fail(name, "POINTER", value);
1290 default:
1291 return FALSE;
1292 }
1293 return FALSE;
1294}
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 2033 of file common/settings.c.

2036{
2037 WINPR_ASSERT(settings);
2038 WINPR_ASSERT(capsFlags || (capsCount == 0));
2039 WINPR_ASSERT(capsData || (capsCount == 0));
2040 WINPR_ASSERT(capsSizes || (capsCount == 0));
2041 WINPR_ASSERT(capsCount <= UINT16_MAX);
2042
2043 wLog* log = WLog_Get(TAG);
2044
2045 for (UINT32 x = 0; x < capsCount; x++)
2046 {
2047 if (capsFlags[x])
2048 {
2049 wStream buffer = { 0 };
2050 wStream* sub = Stream_StaticConstInit(&buffer, capsData[x], capsSizes[x]);
2051
2052 if (!rdp_read_capability_set(log, sub, (UINT16)x, settings, serverReceivedCaps))
2053 return FALSE;
2054 }
2055 }
2056
2057 return TRUE;
2058}

◆ freerdp_static_channel_collection_add()

FREERDP_API BOOL freerdp_static_channel_collection_add ( rdpSettings *  settings,
ADDIN_ARGV channel 
)

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

616{
617 UINT32 count = 0;
618
619 WINPR_ASSERT(settings);
620 WINPR_ASSERT(channel);
621
622 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount) + 1;
623 if (freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize) < count)
624 {
625 const UINT32 oldSize =
626 freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
627 UINT32 new_size = oldSize * 2ul;
628 ADDIN_ARGV** new_array = NULL;
629 if (new_size == 0)
630 new_size = count * 2ul;
631
632 new_array = (ADDIN_ARGV**)realloc((void*)settings->StaticChannelArray,
633 new_size * sizeof(ADDIN_ARGV*));
634
635 if (!new_array)
636 return FALSE;
637
638 settings->StaticChannelArray = new_array;
639 {
640 const size_t rem = new_size - oldSize;
641 memset((void*)&settings->StaticChannelArray[oldSize], 0, sizeof(ADDIN_ARGV*) * rem);
642 }
643 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, new_size))
644 return FALSE;
645 }
646
647 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
648
649 ADDIN_ARGV** cur = &settings->StaticChannelArray[count++];
650 freerdp_addin_argv_free(*cur);
651 *cur = channel;
652 return freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count);
653}

◆ freerdp_static_channel_collection_del()

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

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

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

◆ freerdp_static_channel_collection_find()

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

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

656{
657 ADDIN_ARGV* channel = NULL;
658
659 WINPR_ASSERT(settings);
660 WINPR_ASSERT(name);
661
662 for (UINT32 index = 0;
663 index < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount); index++)
664 {
665 channel = settings->StaticChannelArray[index];
666
667 if (strcmp(channel->argv[0], name) == 0)
668 return channel;
669 }
670
671 return NULL;
672}

◆ freerdp_static_channel_collection_free()

FREERDP_API void freerdp_static_channel_collection_free ( rdpSettings *  settings)

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

675{
676 if (!settings)
677 return;
678
679 if (settings->StaticChannelArray)
680 {
681 for (UINT32 i = 0;
682 i < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize); i++)
683 freerdp_addin_argv_free(settings->StaticChannelArray[i]);
684 }
685
686 free((void*)settings->StaticChannelArray);
687 (void)freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0);
688 settings->StaticChannelArray = NULL;
689 (void)freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0);
690}

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

2217{
2218 const UINT32 invalid = mask & ~(RNS_UD_32BPP_SUPPORT | RNS_UD_24BPP_SUPPORT |
2219 RNS_UD_16BPP_SUPPORT | RNS_UD_15BPP_SUPPORT);
2220
2221 if (mask & RNS_UD_32BPP_SUPPORT)
2222 winpr_str_append("RNS_UD_32BPP_SUPPORT", buffer, size, "|");
2223 if (mask & RNS_UD_24BPP_SUPPORT)
2224 winpr_str_append("RNS_UD_24BPP_SUPPORT", buffer, size, "|");
2225 if (mask & RNS_UD_16BPP_SUPPORT)
2226 winpr_str_append("RNS_UD_16BPP_SUPPORT", buffer, size, "|");
2227 if (mask & RNS_UD_15BPP_SUPPORT)
2228 winpr_str_append("RNS_UD_15BPP_SUPPORT", buffer, size, "|");
2229
2230 if (invalid != 0)
2231 {
2232 char str[32] = { 0 };
2233 (void)_snprintf(str, sizeof(str), "RNS_UD_INVALID[0x%04" PRIx32 "]", invalid);
2234 winpr_str_append(str, buffer, size, "|");
2235 }
2236 char hex[32] = { 0 };
2237 (void)_snprintf(hex, sizeof(hex), "[0x%04" PRIx16 "]", mask);
2238 return buffer;
2239}

◆ freerdp_target_net_addresses_copy()

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

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

1891{
1892 WINPR_ASSERT(settings);
1893 WINPR_ASSERT(addresses);
1894
1895 if (!freerdp_target_net_adresses_reset(settings, count))
1896 return FALSE;
1897
1898 for (UINT32 i = 0; i < settings->TargetNetAddressCount; i++)
1899 {
1900 if (!freerdp_settings_set_pointer_array(settings, FreeRDP_TargetNetAddresses, i,
1901 addresses[i]))
1902 {
1903 freerdp_target_net_addresses_free(settings);
1904 return FALSE;
1905 }
1906 }
1907
1908 return TRUE;
1909}

◆ freerdp_target_net_addresses_free()

FREERDP_API void freerdp_target_net_addresses_free ( rdpSettings *  settings)

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

919{
920 WINPR_ASSERT(settings);
921
922 if (settings->TargetNetAddresses)
923 {
924 for (UINT32 index = 0; index < settings->TargetNetAddressCount; index++)
925 free(settings->TargetNetAddresses[index]);
926 }
927
928 free((void*)settings->TargetNetAddresses);
929 free(settings->TargetNetPorts);
930 settings->TargetNetAddressCount = 0;
931 settings->TargetNetAddresses = NULL;
932 settings->TargetNetPorts = NULL;
933}

◆ freerdp_update_gateway_usage_method()

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

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

1077{
1078 UINT32 GatewayUsageMethod = 0;
1079
1080 if (!GatewayEnabled && !GatewayBypassLocal)
1081 GatewayUsageMethod = TSC_PROXY_MODE_NONE_DIRECT;
1082 else if (GatewayEnabled && !GatewayBypassLocal)
1083 GatewayUsageMethod = TSC_PROXY_MODE_DIRECT;
1084 else if (GatewayEnabled && GatewayBypassLocal)
1085 GatewayUsageMethod = TSC_PROXY_MODE_DETECT;
1086
1087 freerdp_set_gateway_usage_method(settings, GatewayUsageMethod);
1088}
BOOL freerdp_set_gateway_usage_method(rdpSettings *settings, UINT32 GatewayUsageMethod)