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

This is the FreeRDP settings module. More...

Data Structures

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

Macros

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

Enumerations

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

Functions

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

to value \b value

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

The value will be checked internally:

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

Detailed Description

This is the FreeRDP settings module.

FreeRDP: A Remote Desktop Protocol Implementation RDP Settings

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

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

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

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

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

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

The lifetime of the settings is as follows:

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

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

FreeRDP: A Remote Desktop Protocol Implementation RDP Settings

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

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

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

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

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

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

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

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

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


Data Structure Documentation

◆ TARGET_NET_ADDRESS

struct TARGET_NET_ADDRESS

Definition at line 293 of file settings_types.h.

Data Fields
LPWSTR Address
UINT32 Length

◆ ARC_CS_PRIVATE_PACKET

struct ARC_CS_PRIVATE_PACKET

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

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

◆ ADDIN_ARGV

struct ADDIN_ARGV

Definition at line 389 of file settings_types.h.

Data Fields
int argc
char ** argv

◆ rdp_ext_set

struct rdp_ext_set

Definition at line 397 of file settings_types.h.

Data Fields
void * data
char name[256]

◆ BITMAP_CACHE_CELL_INFO

struct BITMAP_CACHE_CELL_INFO

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

Data Fields
UINT32 numEntries
BOOL persistent

◆ GLYPH_CACHE_DEFINITION

struct GLYPH_CACHE_DEFINITION

Definition at line 419 of file settings_types.h.

Data Fields
UINT16 cacheEntries
UINT16 cacheMaximumCellSize

◆ MONITOR_DEF

struct MONITOR_DEF

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

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

◆ rdpMonitor

struct rdpMonitor

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

Data Fields
UINT32 Id
char * Name
UINT32 Type

◆ RDPDR_DRIVE

struct RDPDR_DRIVE

Definition at line 473 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 480 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 487 of file settings_types.h.

Collaboration diagram for RDPDR_SMARTCARD:
Data Fields
RDPDR_DEVICE device

◆ RDPDR_SERIAL

struct RDPDR_SERIAL

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

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

Macro Definition Documentation

◆ AUDIO_MODE_NONE

#define AUDIO_MODE_NONE   2 /* Do not play */

Definition at line 144 of file settings_types.h.

◆ AUDIO_MODE_PLAY_ON_SERVER

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

Definition at line 143 of file settings_types.h.

◆ AUDIO_MODE_REDIRECT

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

Definition at line 142 of file settings_types.h.

◆ AUTO_RECONNECT_VERSION_1

#define AUTO_RECONNECT_VERSION_1   0x00000001

Definition at line 224 of file settings_types.h.

◆ CHANNEL_OPTION_COMPRESS

#define CHANNEL_OPTION_COMPRESS   0x00400000

Definition at line 210 of file settings_types.h.

◆ CHANNEL_OPTION_COMPRESS_RDP

#define CHANNEL_OPTION_COMPRESS_RDP   0x00800000

Definition at line 209 of file settings_types.h.

◆ CHANNEL_OPTION_ENCRYPT_CS

#define CHANNEL_OPTION_ENCRYPT_CS   0x10000000

Definition at line 205 of file settings_types.h.

◆ CHANNEL_OPTION_ENCRYPT_RDP

#define CHANNEL_OPTION_ENCRYPT_RDP   0x40000000

Definition at line 203 of file settings_types.h.

◆ CHANNEL_OPTION_ENCRYPT_SC

#define CHANNEL_OPTION_ENCRYPT_SC   0x20000000

Definition at line 204 of file settings_types.h.

◆ CHANNEL_OPTION_INITIALIZED

#define CHANNEL_OPTION_INITIALIZED   0x80000000

Definition at line 202 of file settings_types.h.

◆ CHANNEL_OPTION_PRI_HIGH

#define CHANNEL_OPTION_PRI_HIGH   0x08000000

Definition at line 206 of file settings_types.h.

◆ CHANNEL_OPTION_PRI_LOW

#define CHANNEL_OPTION_PRI_LOW   0x02000000

Definition at line 208 of file settings_types.h.

◆ CHANNEL_OPTION_PRI_MED

#define CHANNEL_OPTION_PRI_MED   0x04000000

Definition at line 207 of file settings_types.h.

◆ CHANNEL_OPTION_SHOW_PROTOCOL

#define CHANNEL_OPTION_SHOW_PROTOCOL   0x00200000

Definition at line 211 of file settings_types.h.

◆ CHANNEL_REMOTE_CONTROL_PERSISTENT

#define CHANNEL_REMOTE_CONTROL_PERSISTENT   0x00100000

Definition at line 212 of file settings_types.h.

◆ CLIPRDR_FLAG_DEFAULT_MASK

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

Definition at line 345 of file settings_types.h.

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

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE   0x01

Definition at line 340 of file settings_types.h.

◆ CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES

#define CLIPRDR_FLAG_LOCAL_TO_REMOTE_FILES   0x02

Definition at line 341 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL   0x10

Definition at line 342 of file settings_types.h.

◆ CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES

#define CLIPRDR_FLAG_REMOTE_TO_LOCAL_FILES   0x20

Definition at line 343 of file settings_types.h.

◆ CONNECTION_TYPE_AUTODETECT

#define CONNECTION_TYPE_AUTODETECT   0x07

Definition at line 82 of file settings_types.h.

◆ CONNECTION_TYPE_BROADBAND_HIGH

#define CONNECTION_TYPE_BROADBAND_HIGH   0x04

Definition at line 79 of file settings_types.h.

◆ CONNECTION_TYPE_BROADBAND_LOW

#define CONNECTION_TYPE_BROADBAND_LOW   0x02

Definition at line 77 of file settings_types.h.

◆ CONNECTION_TYPE_INVALID

#define CONNECTION_TYPE_INVALID
Value:
0x00

Definition at line 74 of file settings_types.h.

◆ CONNECTION_TYPE_LAN

#define CONNECTION_TYPE_LAN   0x06

Definition at line 81 of file settings_types.h.

◆ CONNECTION_TYPE_MODEM

#define CONNECTION_TYPE_MODEM   0x01

Definition at line 76 of file settings_types.h.

◆ CONNECTION_TYPE_SATELLITE

#define CONNECTION_TYPE_SATELLITE   0x03

Definition at line 78 of file settings_types.h.

◆ CONNECTION_TYPE_WAN

#define CONNECTION_TYPE_WAN   0x05

Definition at line 80 of file settings_types.h.

◆ CS_CLUSTER

#define CS_CLUSTER   0xC004

Definition at line 88 of file settings_types.h.

◆ CS_CORE

#define CS_CORE   0xC001

Definition at line 85 of file settings_types.h.

◆ CS_MCS_MSGCHANNEL

#define CS_MCS_MSGCHANNEL   0xC006

Definition at line 90 of file settings_types.h.

◆ CS_MONITOR

#define CS_MONITOR   0xC005

Definition at line 89 of file settings_types.h.

◆ CS_MONITOR_EX

#define CS_MONITOR_EX   0xC008

Definition at line 91 of file settings_types.h.

◆ CS_MULTITRANSPORT

#define CS_MULTITRANSPORT   0xC00A

Definition at line 93 of file settings_types.h.

◆ CS_NET

#define CS_NET   0xC003

Definition at line 87 of file settings_types.h.

◆ CS_SECURITY

#define CS_SECURITY   0xC002

Definition at line 86 of file settings_types.h.

◆ CS_UNUSED1

#define CS_UNUSED1   0xC00C

Definition at line 92 of file settings_types.h.

◆ DEFAULT_COOKIE_MAX_LENGTH

#define DEFAULT_COOKIE_MAX_LENGTH   0xFF

Definition at line 228 of file settings_types.h.

◆ ENCRYPTION_LEVEL_CLIENT_COMPATIBLE

#define ENCRYPTION_LEVEL_CLIENT_COMPATIBLE   0x00000002

Definition at line 191 of file settings_types.h.

◆ ENCRYPTION_LEVEL_FIPS

#define ENCRYPTION_LEVEL_FIPS   0x00000004

Definition at line 193 of file settings_types.h.

◆ ENCRYPTION_LEVEL_HIGH

#define ENCRYPTION_LEVEL_HIGH   0x00000003

Definition at line 192 of file settings_types.h.

◆ ENCRYPTION_LEVEL_LOW

#define ENCRYPTION_LEVEL_LOW   0x00000001

Definition at line 190 of file settings_types.h.

◆ ENCRYPTION_LEVEL_NONE

#define ENCRYPTION_LEVEL_NONE   0x00000000

Definition at line 189 of file settings_types.h.

◆ ENCRYPTION_METHOD_128BIT

#define ENCRYPTION_METHOD_128BIT   0x00000002

Definition at line 184 of file settings_types.h.

◆ ENCRYPTION_METHOD_40BIT

#define ENCRYPTION_METHOD_40BIT   0x00000001

Definition at line 183 of file settings_types.h.

◆ ENCRYPTION_METHOD_56BIT

#define ENCRYPTION_METHOD_56BIT   0x00000008

Definition at line 185 of file settings_types.h.

◆ ENCRYPTION_METHOD_FIPS

#define ENCRYPTION_METHOD_FIPS   0x00000010

Definition at line 186 of file settings_types.h.

◆ ENCRYPTION_METHOD_NONE

#define ENCRYPTION_METHOD_NONE   0x00000000

Definition at line 182 of file settings_types.h.

◆ ERROR_CODE_ACCESS_DENIED

#define ERROR_CODE_ACCESS_DENIED   0xFFFFFFFF

Definition at line 307 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_DESKTOP_SCALE

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

Definition at line 351 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_DEVICE_SCALE

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

Definition at line 352 of file settings_types.h.

◆ FREERDP_MONITOR_OVERRIDE_ORIENTATION

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

Definition at line 350 of file settings_types.h.

◆ FREERDP_SETTINGS_REMOTE_MODE

#define FREERDP_SETTINGS_REMOTE_MODE   0x00000002

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

◆ FREERDP_SETTINGS_SERVER_MODE [1/2]

#define FREERDP_SETTINGS_SERVER_MODE   0x00000001

rdpSettings creation flags

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

◆ FREERDP_SETTINGS_SERVER_MODE [2/2]

#define FREERDP_SETTINGS_SERVER_MODE   0x00000001

rdpSettings creation flags

Definition at line 530 of file settings_types.h.

◆ GLYPH_SUPPORT_ENCODE

#define GLYPH_SUPPORT_ENCODE   0x0003

Definition at line 274 of file settings_types.h.

◆ GLYPH_SUPPORT_FULL

#define GLYPH_SUPPORT_FULL   0x0002

Definition at line 273 of file settings_types.h.

◆ GLYPH_SUPPORT_NONE

#define GLYPH_SUPPORT_NONE   0x0000

Definition at line 271 of file settings_types.h.

◆ GLYPH_SUPPORT_PARTIAL

#define GLYPH_SUPPORT_PARTIAL   0x0001

Definition at line 272 of file settings_types.h.

◆ KEYBOARD_HOOK_FULLSCREEN_ONLY

#define KEYBOARD_HOOK_FULLSCREEN_ONLY   2

Definition at line 291 of file settings_types.h.

◆ KEYBOARD_HOOK_LOCAL

#define KEYBOARD_HOOK_LOCAL   0

Definition at line 289 of file settings_types.h.

◆ KEYBOARD_HOOK_REMOTE

#define KEYBOARD_HOOK_REMOTE   1

Definition at line 290 of file settings_types.h.

◆ LARGE_POINTER_FLAG_384x384

#define LARGE_POINTER_FLAG_384x384   0x00000002

Definition at line 221 of file settings_types.h.

◆ LARGE_POINTER_FLAG_96x96

#define LARGE_POINTER_FLAG_96x96   0x00000001

Definition at line 220 of file settings_types.h.

◆ LOGON_FAILED_BAD_PASSWORD

#define LOGON_FAILED_BAD_PASSWORD   0x00000000

Definition at line 309 of file settings_types.h.

◆ LOGON_FAILED_OTHER

#define LOGON_FAILED_OTHER   0x00000002

Definition at line 311 of file settings_types.h.

◆ LOGON_FAILED_UPDATE_PASSWORD

#define LOGON_FAILED_UPDATE_PASSWORD   0x00000001

Definition at line 310 of file settings_types.h.

◆ LOGON_MSG_BUMP_OPTIONS

#define LOGON_MSG_BUMP_OPTIONS   0xFFFFFFFB

Definition at line 303 of file settings_types.h.

◆ LOGON_MSG_DISCONNECT_REFUSED

#define LOGON_MSG_DISCONNECT_REFUSED   0xFFFFFFF9

Definition at line 301 of file settings_types.h.

◆ LOGON_MSG_NO_PERMISSION

#define LOGON_MSG_NO_PERMISSION   0xFFFFFFFA

Definition at line 302 of file settings_types.h.

◆ LOGON_MSG_RECONNECT_OPTIONS

#define LOGON_MSG_RECONNECT_OPTIONS   0xFFFFFFFC

Definition at line 304 of file settings_types.h.

◆ LOGON_MSG_SESSION_BUSY_OPTIONS

#define LOGON_MSG_SESSION_BUSY_OPTIONS   0xFFFFFFF8

Definition at line 300 of file settings_types.h.

◆ LOGON_MSG_SESSION_CONTINUE

#define LOGON_MSG_SESSION_CONTINUE   0xFFFFFFFE

Definition at line 306 of file settings_types.h.

◆ LOGON_MSG_SESSION_TERMINATE

#define LOGON_MSG_SESSION_TERMINATE   0xFFFFFFFD

Definition at line 305 of file settings_types.h.

◆ LOGON_WARNING

#define LOGON_WARNING   0x00000003

Definition at line 312 of file settings_types.h.

◆ MONITOR_PRIMARY

#define MONITOR_PRIMARY   0x00000001

Definition at line 179 of file settings_types.h.

◆ MSTSC_COOKIE_MAX_LENGTH

#define MSTSC_COOKIE_MAX_LENGTH   9

Definition at line 227 of file settings_types.h.

◆ PACKET_COMPR_TYPE_64K

#define PACKET_COMPR_TYPE_64K   0x01

Definition at line 325 of file settings_types.h.

◆ PACKET_COMPR_TYPE_8K

#define PACKET_COMPR_TYPE_8K   0x00

Definition at line 324 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP6

#define PACKET_COMPR_TYPE_RDP6   0x02

Definition at line 326 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP61

#define PACKET_COMPR_TYPE_RDP61   0x03

Definition at line 327 of file settings_types.h.

◆ PACKET_COMPR_TYPE_RDP8

#define PACKET_COMPR_TYPE_RDP8   0x04

Definition at line 328 of file settings_types.h.

◆ PERF_DISABLE_CURSOR_SHADOW

#define PERF_DISABLE_CURSOR_SHADOW   0x00000020

Definition at line 68 of file settings_types.h.

◆ PERF_DISABLE_CURSORSETTINGS

#define PERF_DISABLE_CURSORSETTINGS   0x00000040

Definition at line 69 of file settings_types.h.

◆ PERF_DISABLE_FULLWINDOWDRAG

#define PERF_DISABLE_FULLWINDOWDRAG   0x00000002

Definition at line 65 of file settings_types.h.

◆ PERF_DISABLE_MENUANIMATIONS

#define PERF_DISABLE_MENUANIMATIONS   0x00000004

Definition at line 66 of file settings_types.h.

◆ PERF_DISABLE_THEMING

#define PERF_DISABLE_THEMING   0x00000008

Definition at line 67 of file settings_types.h.

◆ PERF_DISABLE_WALLPAPER

#define PERF_DISABLE_WALLPAPER   0x00000001

Definition at line 64 of file settings_types.h.

◆ PERF_ENABLE_DESKTOP_COMPOSITION

#define PERF_ENABLE_DESKTOP_COMPOSITION   0x00000100

Definition at line 71 of file settings_types.h.

◆ PERF_ENABLE_FONT_SMOOTHING

#define PERF_ENABLE_FONT_SMOOTHING   0x00000080

Definition at line 70 of file settings_types.h.

◆ PERF_FLAG_NONE

#define PERF_FLAG_NONE   0x00000000

Definition at line 63 of file settings_types.h.

◆ PROXY_TYPE_HTTP

#define PROXY_TYPE_HTTP   1

Definition at line 507 of file settings_types.h.

◆ PROXY_TYPE_IGNORE

#define PROXY_TYPE_IGNORE   0xFFFF

Definition at line 509 of file settings_types.h.

◆ PROXY_TYPE_NONE

#define PROXY_TYPE_NONE   0

Definition at line 506 of file settings_types.h.

◆ PROXY_TYPE_SOCKS

#define PROXY_TYPE_SOCKS   2

Definition at line 508 of file settings_types.h.

◆ RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED

#define RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED   0x00000002

Definition at line 54 of file settings_types.h.

◆ RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED

#define RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED   0x00000080

Definition at line 60 of file settings_types.h.

◆ RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED

#define RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED   0x00000020

Definition at line 58 of file settings_types.h.

◆ RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED

#define RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED   0x00000008

Definition at line 56 of file settings_types.h.

◆ RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED

#define RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED   0x00000010

Definition at line 57 of file settings_types.h.

◆ RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED

#define RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED   0x00000004

Definition at line 55 of file settings_types.h.

◆ RAIL_LEVEL_SUPPORTED

#define RAIL_LEVEL_SUPPORTED   0x00000001

Definition at line 53 of file settings_types.h.

◆ RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED

#define RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED   0x00000040

Definition at line 59 of file settings_types.h.

◆ REDIRECTED_SESSIONID_FIELD_VALID

#define REDIRECTED_SESSIONID_FIELD_VALID   0x00000002

Definition at line 168 of file settings_types.h.

◆ REDIRECTED_SMARTCARD

#define REDIRECTED_SMARTCARD   0x00000040

Definition at line 169 of file settings_types.h.

◆ REDIRECTION_SUPPORTED

#define REDIRECTION_SUPPORTED   0x00000001

Definition at line 167 of file settings_types.h.

◆ REDIRECTION_VERSION1

#define REDIRECTION_VERSION1   0x00

Definition at line 172 of file settings_types.h.

◆ REDIRECTION_VERSION2

#define REDIRECTION_VERSION2   0x01

Definition at line 173 of file settings_types.h.

◆ REDIRECTION_VERSION3

#define REDIRECTION_VERSION3   0x02

Definition at line 174 of file settings_types.h.

◆ REDIRECTION_VERSION4

#define REDIRECTION_VERSION4   0x03

Definition at line 175 of file settings_types.h.

◆ REDIRECTION_VERSION5

#define REDIRECTION_VERSION5   0x04

Definition at line 176 of file settings_types.h.

◆ REDIRECTION_VERSION6

#define REDIRECTION_VERSION6   0x05

Definition at line 177 of file settings_types.h.

◆ RNS_UD_15BPP_SUPPORT

#define RNS_UD_15BPP_SUPPORT   0x0004

Definition at line 138 of file settings_types.h.

◆ RNS_UD_16BPP_SUPPORT

#define RNS_UD_16BPP_SUPPORT   0x0002

Definition at line 137 of file settings_types.h.

◆ RNS_UD_24BPP_SUPPORT

#define RNS_UD_24BPP_SUPPORT   0x0001

Definition at line 136 of file settings_types.h.

◆ RNS_UD_32BPP_SUPPORT

#define RNS_UD_32BPP_SUPPORT   0x0008

Definition at line 139 of file settings_types.h.

◆ RNS_UD_COLOR_16BPP_555

#define RNS_UD_COLOR_16BPP_555   0xCA02

Definition at line 128 of file settings_types.h.

◆ RNS_UD_COLOR_16BPP_565

#define RNS_UD_COLOR_16BPP_565   0xCA03

Definition at line 129 of file settings_types.h.

◆ RNS_UD_COLOR_24BPP

#define RNS_UD_COLOR_24BPP   0xCA04

Definition at line 130 of file settings_types.h.

◆ RNS_UD_COLOR_4BPP

#define RNS_UD_COLOR_4BPP   0xCA00

Definition at line 126 of file settings_types.h.

◆ RNS_UD_COLOR_8BPP

#define RNS_UD_COLOR_8BPP   0xCA01

Definition at line 127 of file settings_types.h.

◆ RNS_UD_CS_RELATIVE_MOUSE_INPUT

#define RNS_UD_CS_RELATIVE_MOUSE_INPUT   0x0010

Definition at line 151 of file settings_types.h.

◆ RNS_UD_CS_STRONG_ASYMMETRIC_KEYS

#define RNS_UD_CS_STRONG_ASYMMETRIC_KEYS   0x0008

Definition at line 150 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE

#define RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE   0x0200

Definition at line 156 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL

#define RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL   0x0100

Definition at line 155 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_ERRINFO_PDU

#define RNS_UD_CS_SUPPORT_ERRINFO_PDU   0x0001

Definition at line 147 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_HEARTBEAT_PDU

#define RNS_UD_CS_SUPPORT_HEARTBEAT_PDU   0x0400

Definition at line 157 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU

#define RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU   0x0040

Definition at line 153 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT

#define RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT   0x0080

Definition at line 154 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN

#define RNS_UD_CS_SUPPORT_SKIP_CHANNELJOIN   0x0800

Definition at line 158 of file settings_types.h.

◆ RNS_UD_CS_SUPPORT_STATUSINFO_PDU

#define RNS_UD_CS_SUPPORT_STATUSINFO_PDU   0x0004

Definition at line 149 of file settings_types.h.

◆ RNS_UD_CS_VALID_CONNECTION_TYPE

#define RNS_UD_CS_VALID_CONNECTION_TYPE   0x0020

Definition at line 152 of file settings_types.h.

◆ RNS_UD_CS_WANT_32BPP_SESSION

#define RNS_UD_CS_WANT_32BPP_SESSION   0x0002

Definition at line 148 of file settings_types.h.

◆ RNS_UD_SAS_DEL

#define RNS_UD_SAS_DEL   0xAA03

Definition at line 133 of file settings_types.h.

◆ RNS_UD_SC_DYNAMIC_DST_SUPPORTED

#define RNS_UD_SC_DYNAMIC_DST_SUPPORTED   0x00000002

Definition at line 162 of file settings_types.h.

◆ RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V1

#define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V1   0x00000001

Definition at line 161 of file settings_types.h.

◆ RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V2

#define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED_V2   0x00000004

Definition at line 163 of file settings_types.h.

◆ RNS_UD_SC_SKIP_CHANNELJOIN_SUPPORTED

#define RNS_UD_SC_SKIP_CHANNELJOIN_SUPPORTED   0x00000008

Definition at line 164 of file settings_types.h.

◆ SC_CORE

#define SC_CORE   0x0C01

Definition at line 96 of file settings_types.h.

◆ SC_MCS_MSGCHANNEL

#define SC_MCS_MSGCHANNEL   0x0C04

Definition at line 99 of file settings_types.h.

◆ SC_MULTITRANSPORT

#define SC_MULTITRANSPORT   0x0C08

Definition at line 100 of file settings_types.h.

◆ SC_NET

#define SC_NET   0x0C03

Definition at line 98 of file settings_types.h.

◆ SC_SECURITY

#define SC_SECURITY   0x0C02

Definition at line 97 of file settings_types.h.

◆ ServerSessionRedirectionVersionMask

#define ServerSessionRedirectionVersionMask   0x0000003c

Definition at line 171 of file settings_types.h.

◆ SETTINGS_DEPRECATED

#define SETTINGS_DEPRECATED (   x)    WINPR_DEPRECATED(x)

Definition at line 45 of file settings_types_private.h.

◆ SOFTSYNC_TCP_TO_UDP

#define SOFTSYNC_TCP_TO_UDP   0x00000200

Definition at line 199 of file settings_types.h.

◆ STATUS_BRINGING_SESSION_ONLINE

#define STATUS_BRINGING_SESSION_ONLINE   0x00000403

Definition at line 317 of file settings_types.h.

◆ STATUS_FINDING_DESTINATION

#define STATUS_FINDING_DESTINATION   0x00000401

Definition at line 315 of file settings_types.h.

◆ STATUS_LOADING_DESTINATION

#define STATUS_LOADING_DESTINATION   0x00000402

Definition at line 316 of file settings_types.h.

◆ STATUS_REDIRECTING_TO_DESTINATION

#define STATUS_REDIRECTING_TO_DESTINATION   0x00000404

Definition at line 318 of file settings_types.h.

◆ STATUS_VM_BOOTING

#define STATUS_VM_BOOTING   0x00000503

Definition at line 321 of file settings_types.h.

◆ STATUS_VM_LOADING

#define STATUS_VM_LOADING   0x00000501

Definition at line 319 of file settings_types.h.

◆ STATUS_VM_WAKING

#define STATUS_VM_WAKING   0x00000502

Definition at line 320 of file settings_types.h.

◆ SURFCMDS_FRAME_MARKER

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

Definition at line 49 of file settings_types.h.

◆ SURFCMDS_SET_SURFACE_BITS

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

Definition at line 48 of file settings_types.h.

◆ SURFCMDS_STREAM_SURFACE_BITS

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

Definition at line 50 of file settings_types.h.

◆ THREADING_FLAGS_DISABLE_THREADS

#define THREADING_FLAGS_DISABLE_THREADS   0x00000001

Definition at line 512 of file settings_types.h.

◆ TRANSPORT_TYPE_UDP_FECL

#define TRANSPORT_TYPE_UDP_FECL   0x00000004

Definition at line 197 of file settings_types.h.

◆ TRANSPORT_TYPE_UDP_FECR

#define TRANSPORT_TYPE_UDP_FECR   0x00000001

Definition at line 196 of file settings_types.h.

◆ TRANSPORT_TYPE_UDP_PREFERRED

#define TRANSPORT_TYPE_UDP_PREFERRED   0x00000100

Definition at line 198 of file settings_types.h.

◆ TS_CAPS_PROTOCOLVERSION

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

Definition at line 231 of file settings_types.h.

◆ TSC_PROXY_CREDS_MODE_ANY

#define TSC_PROXY_CREDS_MODE_ANY   0x2

Definition at line 286 of file settings_types.h.

◆ TSC_PROXY_CREDS_MODE_SMARTCARD

#define TSC_PROXY_CREDS_MODE_SMARTCARD   0x1

Definition at line 285 of file settings_types.h.

◆ TSC_PROXY_CREDS_MODE_USERPASS

#define TSC_PROXY_CREDS_MODE_USERPASS   0x0

Definition at line 284 of file settings_types.h.

◆ TSC_PROXY_MODE_DEFAULT

#define TSC_PROXY_MODE_DEFAULT   0x3

Definition at line 280 of file settings_types.h.

◆ TSC_PROXY_MODE_DETECT

#define TSC_PROXY_MODE_DETECT   0x2

Definition at line 279 of file settings_types.h.

◆ TSC_PROXY_MODE_DIRECT

#define TSC_PROXY_MODE_DIRECT   0x1

Definition at line 278 of file settings_types.h.

◆ TSC_PROXY_MODE_NONE_DETECT

#define TSC_PROXY_MODE_NONE_DETECT   0x4

Definition at line 281 of file settings_types.h.

◆ TSC_PROXY_MODE_NONE_DIRECT

#define TSC_PROXY_MODE_NONE_DIRECT   0x0

Definition at line 277 of file settings_types.h.

◆ VCCAPS_COMPR_CS_8K

#define VCCAPS_COMPR_CS_8K   0x00000002

Definition at line 217 of file settings_types.h.

◆ VCCAPS_COMPR_SC

#define VCCAPS_COMPR_SC   0x00000001

Definition at line 216 of file settings_types.h.

◆ VCCAPS_NO_COMPR

#define VCCAPS_NO_COMPR   0x00000000

Definition at line 215 of file settings_types.h.

Enumeration Type Documentation

◆ FreeRDP_DesktopRotationFlags

enum FreeRDP_DesktopRotationFlags

Definition at line 331 of file settings_types.h.

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

◆ FreeRDP_OrderSupportFlagConstants

enum FreeRDP_OrderSupportFlagConstants

Definition at line 234 of file settings_types.h.

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

◆ FreeRDP_RDPDR_DTYP

enum FreeRDP_RDPDR_DTYP

Definition at line 457 of file settings_types.h.

461 {
462 RDPDR_DTYP_SERIAL = 0x00000001,
463 RDPDR_DTYP_PARALLEL = 0x00000002,
464 RDPDR_DTYP_PRINT = 0x00000004,

◆ FreeRDP_TLS_SecLevel

convenience names for https://docs.openssl.org/3.0/man3/SSL_CTX_set_security_level/#default-callback-behaviour

Since
version 3.26.1

Definition at line 359 of file settings_types.h.

363 {
364 FREERDP_TLS_SECLEVEL_0 = 0,
365 FREERDP_TLS_SECLEVEL_80BIT = 1,
366 FREERDP_TLS_SECLEVEL_112BIT = 2,
367 FREERDP_TLS_SECLEVEL_128BIT = 3,

◆ rdp_settings_type

enum rdp_settings_type

Definition at line 514 of file settings_types.h.

518 {
519 RDP_SETTINGS_TYPE_BOOL,
520 RDP_SETTINGS_TYPE_UINT16,
521 RDP_SETTINGS_TYPE_INT16,
522 RDP_SETTINGS_TYPE_UINT32,
523 RDP_SETTINGS_TYPE_INT32,
524 RDP_SETTINGS_TYPE_UINT64,
525 RDP_SETTINGS_TYPE_INT64,

◆ RDP_VERSION

enum RDP_VERSION

Definition at line 106 of file settings_types.h.

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

Function Documentation

◆ freerdp_addin_argv_add_argument()

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

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

84{
85 return freerdp_addin_argv_add_argument_ex(args, argument, 0);
86}

◆ freerdp_addin_argv_add_argument_ex()

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

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

60{
61 if (!args || !argument)
62 return FALSE;
63
64 if (len == 0)
65 len = strlen(argument);
66
67 char** new_argv = (char**)realloc(
68 (void*)args->argv, sizeof(char*) * (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc) + 1));
69
70 if (!new_argv)
71 return FALSE;
72
73 args->argv = new_argv;
74
75 char* str = calloc(len + 1, sizeof(char));
76 if (!str)
77 return FALSE;
78 memcpy(str, argument, len);
79 args->argv[args->argc++] = str;
80 return TRUE;
81}

◆ freerdp_addin_argv_clone()

FREERDP_API ADDIN_ARGV * freerdp_addin_argv_clone ( const ADDIN_ARGV args)

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

760{
761 union
762 {
763 char** c;
764 const char** cc;
765 } cnv;
766 if (!args)
767 return nullptr;
768 cnv.c = args->argv;
769 return freerdp_addin_argv_new(WINPR_ASSERTING_INT_CAST(uint32_t, args->argc), cnv.cc);
770}

◆ freerdp_addin_argv_del_argument()

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

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

89{
90 if (!args || !argument)
91 return FALSE;
92 for (int x = 0; x < args->argc; x++)
93 {
94 char* arg = args->argv[x];
95 if (strcmp(argument, arg) == 0)
96 {
97 free(arg);
98 const BOOL res =
99 memmove_s((void*)&args->argv[x],
100 (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x)) * sizeof(char*),
101 (void*)&args->argv[x + 1],
102 (WINPR_ASSERTING_INT_CAST(uint32_t, args->argc - x - 1)) *
103 sizeof(char*)) >= 0;
104 args->argv[args->argc - 1] = nullptr;
105 args->argc--;
106 return res;
107 }
108 }
109 return FALSE;
110}

◆ freerdp_addin_argv_free()

FREERDP_API void freerdp_addin_argv_free ( ADDIN_ARGV args)

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

710{
711 if (!args)
712 return;
713
714 if (args->argv)
715 {
716 for (int index = 0; index < args->argc; index++)
717 free(args->argv[index]);
718 free((void*)args->argv);
719 }
720
721 free(args);
722}

◆ freerdp_addin_argv_new()

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

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

725{
726 if (argc > INT32_MAX)
727 return nullptr;
728
729 ADDIN_ARGV* args = calloc(1, sizeof(ADDIN_ARGV));
730 if (!args)
731 return nullptr;
732 if (argc == 0)
733 return args;
734
735 args->argc = (int)argc;
736 args->argv = (char**)calloc(argc, sizeof(char*));
737 if (!args->argv)
738 goto fail;
739
740 if (argv)
741 {
742 for (size_t x = 0; x < argc; x++)
743 {
744 args->argv[x] = _strdup(argv[x]);
745 if (!args->argv[x])
746 goto fail;
747 }
748 }
749 return args;
750
751fail:
752 WINPR_PRAGMA_DIAG_PUSH
753 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
754 freerdp_addin_argv_free(args);
755 WINPR_PRAGMA_DIAG_POP
756 return nullptr;
757}

◆ freerdp_addin_replace_argument()

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

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

131{
132 if (!args || !previous || !argument)
133 return -2;
134
135 for (int i = 0; i < args->argc; i++)
136 {
137 if (strcmp(args->argv[i], previous) == 0)
138 {
139 free(args->argv[i]);
140
141 if (!(args->argv[i] = _strdup(argument)))
142 return -1;
143
144 return 1;
145 }
146 }
147
148 if (!freerdp_addin_argv_add_argument(args, argument))
149 return -1;
150 return 0;
151}

◆ freerdp_addin_replace_argument_value()

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

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

194{
195 BOOL rc = 0;
196 char* str = nullptr;
197 size_t length = 0;
198 if (!args || !previous || !option || !value)
199 return -2;
200 length = strlen(option) + strlen(value) + 1;
201 str = (char*)calloc(length + 1, sizeof(char));
202
203 if (!str)
204 return -1;
205
206 (void)sprintf_s(str, length + 1, "%s:%s", option, value);
207
208 for (int i = 0; i < args->argc; i++)
209 {
210 if (strcmp(args->argv[i], previous) == 0)
211 {
212 free(args->argv[i]);
213 args->argv[i] = str;
214 return 1;
215 }
216 }
217
218 rc = freerdp_addin_argv_add_argument(args, str);
219 free(str);
220 if (!rc)
221 return -1;
222 return 0;
223}

◆ freerdp_addin_set_argument()

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

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

113{
114 if (!args || !argument)
115 return -2;
116
117 for (int i = 0; i < args->argc; i++)
118 {
119 if (strcmp(args->argv[i], argument) == 0)
120 {
121 return 1;
122 }
123 }
124
125 if (!freerdp_addin_argv_add_argument(args, argument))
126 return -1;
127 return 0;
128}

◆ freerdp_addin_set_argument_value()

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

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

154{
155 BOOL rc = 0;
156 char* p = nullptr;
157 char* str = nullptr;
158 size_t length = 0;
159 if (!args || !option || !value)
160 return -2;
161 length = strlen(option) + strlen(value) + 1;
162 str = (char*)calloc(length + 1, sizeof(char));
163
164 if (!str)
165 return -1;
166
167 (void)sprintf_s(str, length + 1, "%s:%s", option, value);
168
169 for (int i = 0; i < args->argc; i++)
170 {
171 p = strchr(args->argv[i], ':');
172
173 if (p)
174 {
175 if (strncmp(args->argv[i], option,
176 WINPR_ASSERTING_INT_CAST(size_t, p - args->argv[i])) == 0)
177 {
178 free(args->argv[i]);
179 args->argv[i] = str;
180 return 1;
181 }
182 }
183 }
184
185 rc = freerdp_addin_argv_add_argument(args, str);
186 free(str);
187 if (!rc)
188 return -1;
189 return 0;
190}

◆ freerdp_capability_buffer_copy()

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

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

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

◆ freerdp_capability_buffer_free()

FREERDP_API void freerdp_capability_buffer_free ( rdpSettings *  settings)

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

814{
815 WINPR_ASSERT(settings);
816
817 freerdp_capability_data_free(settings, 0, TRUE);
818
819 free(settings->ReceivedCapabilityDataSizes);
820 settings->ReceivedCapabilityDataSizes = nullptr;
821
822 free(settings->ReceivedCapabilities);
823 settings->ReceivedCapabilities = nullptr;
824
825 settings->ReceivedCapabilitiesSize = 0;
826}

◆ freerdp_device_clone()

FREERDP_API RDPDR_DEVICE * freerdp_device_clone ( const RDPDR_DEVICE device)

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

461{
462 const struct RDPDR_DEVICE_EX* src = (const struct RDPDR_DEVICE_EX*)device;
463
464 if (!src)
465 return nullptr;
466
467 int argc = 0;
468 const char* const* argv = nullptr;
469 if (src->args)
470 {
471 argc = src->args->argc;
472 if (argc < 0)
473 return nullptr;
474 argv = (const char* const*)src->args->argv;
475 }
476
477 RDPDR_DEVICE* copy =
478 freerdp_device_new(device->Type, WINPR_ASSERTING_INT_CAST(size_t, argc), argv);
479 if (!copy)
480 return nullptr;
481 copy->Id = device->Id;
482 return copy;
483}

◆ freerdp_device_collection_add()

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

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

226{
227 UINT32 count = 0;
228 UINT32 old = 0;
229 WINPR_ASSERT(settings);
230 WINPR_ASSERT(device);
231
232 count = freerdp_settings_get_uint32(settings, FreeRDP_DeviceCount) + 1;
233 old = freerdp_settings_get_uint32(settings, FreeRDP_DeviceArraySize);
234 if (old < count)
235 {
236 const size_t new_size = (old + 32);
237 RDPDR_DEVICE** new_array =
238 (RDPDR_DEVICE**)realloc((void*)settings->DeviceArray, new_size * sizeof(RDPDR_DEVICE*));
239
240 if (!new_array)
241 return FALSE;
242
243 settings->DeviceArray = new_array;
244 for (size_t x = old; x < new_size; x++)
245 settings->DeviceArray[x] = nullptr;
246
247 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize,
248 WINPR_ASSERTING_INT_CAST(uint32_t, new_size)))
249 return FALSE;
250 }
251
252 settings->DeviceArray[settings->DeviceCount++] = device;
253 return TRUE;
254}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_uint32(rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id, UINT32 val)
Sets a UINT32 settings value.
WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_uint32(const rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id)
Returns a UINT32 settings value.

◆ freerdp_device_collection_del()

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

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

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

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

257{
258 WINPR_ASSERT(settings);
259
260 if (!device)
261 return FALSE;
262
263 const UINT32 count = settings->DeviceCount;
264 for (size_t x = 0; x < count; x++)
265 {
266 const RDPDR_DEVICE* cur = settings->DeviceArray[x];
267 if (cur == device)
268 {
269 for (size_t y = x + 1; y < count; y++)
270 {
271 RDPDR_DEVICE* next = settings->DeviceArray[y];
272 settings->DeviceArray[y - 1] = next;
273 }
274 settings->DeviceArray[count - 1] = nullptr;
275 settings->DeviceCount--;
276 return TRUE;
277 }
278 }
279
280 return FALSE;
281}

◆ freerdp_device_collection_find()

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

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

284{
285 RDPDR_DEVICE* device = nullptr;
286
287 WINPR_ASSERT(settings);
288 WINPR_ASSERT(name);
289 for (UINT32 index = 0; index < settings->DeviceCount; index++)
290 {
291 device = settings->DeviceArray[index];
292
293 if (!device->Name)
294 continue;
295
296 if (strcmp(device->Name, name) == 0)
297 return device;
298 }
299
300 return nullptr;
301}

◆ freerdp_device_collection_find_type()

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

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

304{
305 RDPDR_DEVICE* device = nullptr;
306 WINPR_ASSERT(settings);
307
308 for (UINT32 index = 0; index < settings->DeviceCount; index++)
309 {
310 device = settings->DeviceArray[index];
311
312 if (device->Type == type)
313 return device;
314 }
315
316 return nullptr;
317}

◆ freerdp_device_collection_free()

FREERDP_API void freerdp_device_collection_free ( rdpSettings *  settings)

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

486{
487 WINPR_ASSERT(settings);
488
489 if (settings->DeviceArray)
490 {
491 for (UINT32 index = 0; index < settings->DeviceArraySize; index++)
492 {
493 const BOOL rc =
494 freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, index, nullptr);
495 if (!rc)
496 WLog_WARN(TAG,
497 "freerdp_settings_set_pointer_array(settings, FreeRDP_DeviceArray, "
498 "index=%" PRIu32 ", nullptr) failed",
499 index);
500 }
501 }
502
503 free((void*)settings->DeviceArray);
504
505 if (!freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, nullptr))
506 WLog_WARN(TAG,
507 "freerdp_settings_set_pointer(settings, FreeRDP_DeviceArray, nullptr) failed");
508 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0))
509 WLog_WARN(TAG, "freerdp_settings_set_uint32(settings, FreeRDP_DeviceArraySize, 0) failed");
510 if (!freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0))
511 WLog_WARN(TAG, "freerdp_settings_set_uint32(settings, FreeRDP_DeviceCount, 0) failed");
512}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_pointer(rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *val)
Set a pointer to value val.

◆ freerdp_device_equal()

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

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

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

◆ freerdp_device_free()

FREERDP_API void freerdp_device_free ( RDPDR_DEVICE device)

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

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

◆ freerdp_device_get_args()

WINPR_ATTR_NODISCARD FREERDP_API const ADDIN_ARGV * freerdp_device_get_args ( const RDPDR_DEVICE device)

return the arguments passed to the device channel.

Parameters
deviceThe device to get the arguments for
Returns
A pointer to the device arguments. Might be nullptr if not supported.
Since
version 3.27.0

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

4511{
4512 if (!device)
4513 return nullptr;
4514 union
4515 {
4516 const RDPDR_DEVICE* dev;
4517 const struct RDPDR_DEVICE_EX* ex;
4518 } cnv;
4519
4520 cnv.dev = device;
4521 return cnv.ex->args;
4522}

◆ freerdp_device_new()

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

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

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

◆ freerdp_dynamic_channel_collection_add()

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

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

658{
659 UINT32 count = 0;
660 UINT32 oldSize = 0;
661
662 WINPR_ASSERT(settings);
663 WINPR_ASSERT(channel);
664
665 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount) + 1;
666 oldSize = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize);
667 if (oldSize < count)
668 {
669
670 const size_t size = oldSize + 32;
671 ADDIN_ARGV** new_array =
672 (ADDIN_ARGV**)realloc((void*)settings->DynamicChannelArray, sizeof(ADDIN_ARGV*) * size);
673
674 if (!new_array)
675 return FALSE;
676
677 settings->DynamicChannelArray = new_array;
678 {
679 for (size_t x = oldSize; x < size; x++)
680 settings->DynamicChannelArray[x] = nullptr;
681 }
682 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize,
683 WINPR_ASSERTING_INT_CAST(uint32_t, size)))
684 return FALSE;
685 }
686
687 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
688 settings->DynamicChannelArray[count++] = channel;
689 return freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count);
690}

◆ freerdp_dynamic_channel_collection_del()

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

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

627{
628 const UINT32 count = freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount);
629 if (!settings || !settings->DynamicChannelArray)
630 return FALSE;
631
632 for (UINT32 x = 0; x < count; x++)
633 {
634 ADDIN_ARGV* cur = settings->DynamicChannelArray[x];
635 if (cur && (cur->argc > 0))
636 {
637 if (strcmp(name, cur->argv[0]) == 0)
638 {
639 const BOOL success = memmove_s((void*)&settings->DynamicChannelArray[x],
640 (count - x) * sizeof(ADDIN_ARGV*),
641 (void*)&settings->DynamicChannelArray[x + 1],
642 (count - x - 1) * sizeof(ADDIN_ARGV*)) >= 0;
643 for (size_t y = count - 1; y < settings->DynamicChannelArraySize; y++)
644 settings->DynamicChannelArray[y] = nullptr;
645
646 freerdp_addin_argv_free(cur);
647 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, count - 1))
648 return FALSE;
649 return success;
650 }
651 }
652 }
653
654 return FALSE;
655}

◆ freerdp_dynamic_channel_collection_find()

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

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

693{
694 WINPR_ASSERT(settings);
695 WINPR_ASSERT(name);
696
697 for (UINT32 index = 0;
698 index < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelCount); index++)
699 {
700 ADDIN_ARGV* channel = settings->DynamicChannelArray[index];
701
702 if (strcmp(channel->argv[0], name) == 0)
703 return channel;
704 }
705
706 return nullptr;
707}

◆ freerdp_dynamic_channel_collection_free()

FREERDP_API void freerdp_dynamic_channel_collection_free ( rdpSettings *  settings)

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

773{
774 WINPR_ASSERT(settings);
775
776 if (settings->DynamicChannelArray)
777 {
778 for (UINT32 i = 0;
779 i < freerdp_settings_get_uint32(settings, FreeRDP_DynamicChannelArraySize); i++)
780 freerdp_addin_argv_free(settings->DynamicChannelArray[i]);
781 }
782
783 free((void*)settings->DynamicChannelArray);
784 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0))
785 WLog_WARN(
786 TAG,
787 "freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelArraySize, 0) failed");
788 settings->DynamicChannelArray = nullptr;
789 if (!freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0))
790 WLog_WARN(TAG,
791 "freerdp_settings_set_uint32(settings, FreeRDP_DynamicChannelCount, 0) failed");
792}

◆ freerdp_encryption_level_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_encryption_level_string ( UINT32  EncryptionLevel)

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

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

◆ freerdp_encryption_methods_string()

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

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

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

◆ freerdp_get_gateway_usage_method()

WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_get_gateway_usage_method ( const rdpSettings *  settings)

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

1139{
1140 if (freerdp_settings_get_bool(settings, FreeRDP_GatewayEnabled))
1141 {
1142 if (freerdp_settings_get_bool(settings, FreeRDP_GatewayBypassLocal))
1143 return TSC_PROXY_MODE_DETECT;
1144 return TSC_PROXY_MODE_DIRECT;
1145 }
1146
1147 return freerdp_settings_get_uint32(settings, FreeRDP_GatewayUsageMethod);
1148}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_get_bool(const rdpSettings *settings, FreeRDP_Settings_Keys_Bool id)
Returns a boolean settings value.

◆ freerdp_performance_flags_make()

FREERDP_API void freerdp_performance_flags_make ( rdpSettings *  settings)

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

1030{
1031 UINT32 PerformanceFlags = PERF_FLAG_NONE;
1032
1033 if (freerdp_settings_get_bool(settings, FreeRDP_AllowFontSmoothing))
1034 PerformanceFlags |= PERF_ENABLE_FONT_SMOOTHING;
1035
1036 if (freerdp_settings_get_bool(settings, FreeRDP_AllowDesktopComposition))
1037 PerformanceFlags |= PERF_ENABLE_DESKTOP_COMPOSITION;
1038
1039 if (freerdp_settings_get_bool(settings, FreeRDP_DisableWallpaper))
1040 PerformanceFlags |= PERF_DISABLE_WALLPAPER;
1041
1042 if (freerdp_settings_get_bool(settings, FreeRDP_DisableFullWindowDrag))
1043 PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
1044
1045 if (freerdp_settings_get_bool(settings, FreeRDP_DisableMenuAnims))
1046 PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
1047
1048 if (freerdp_settings_get_bool(settings, FreeRDP_DisableThemes))
1049 PerformanceFlags |= PERF_DISABLE_THEMING;
1050 if (!freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, PerformanceFlags))
1051 WLog_WARN(TAG,
1052 "freerdp_settings_set_uint32(settings, FreeRDP_PerformanceFlags, 0x%08" PRIx32
1053 ") failed",
1054 PerformanceFlags);
1055}

◆ freerdp_performance_flags_split()

FREERDP_API void freerdp_performance_flags_split ( rdpSettings *  settings)

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

1058{
1059 BOOL res =
1060 freerdp_settings_set_bool(settings, FreeRDP_AllowFontSmoothing,
1061 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1062 PERF_ENABLE_FONT_SMOOTHING) != 0);
1064 settings, FreeRDP_AllowDesktopComposition,
1065 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1066 PERF_ENABLE_DESKTOP_COMPOSITION) != 0))
1067 res = FALSE;
1069 settings, FreeRDP_DisableWallpaper,
1070 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1071 PERF_DISABLE_WALLPAPER) != 0))
1072 res = FALSE;
1074 settings, FreeRDP_DisableFullWindowDrag,
1075 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1076 PERF_DISABLE_FULLWINDOWDRAG) != 0))
1077 res = FALSE;
1079 settings, FreeRDP_DisableMenuAnims,
1080 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1081 PERF_DISABLE_MENUANIMATIONS) != 0))
1082 res = FALSE;
1084 settings, FreeRDP_DisableThemes,
1085 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1086 PERF_DISABLE_THEMING) != 0))
1087 res = FALSE;
1088 if (!res)
1089 {
1090 WLog_WARN(TAG, "freerdp_performance_flags_split() failed");
1091 }
1092}
WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_bool(rdpSettings *settings, FreeRDP_Settings_Keys_Bool id, BOOL val)
Sets a BOOL settings value.

◆ freerdp_rail_support_flags_to_string()

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

Returns a stringified representation of RAIL support flags.

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

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

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

◆ freerdp_rdp_version_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_rdp_version_string ( UINT32  version)

Returns a stringified representation of the RDP protocol version.

Parameters
versionThe RDP protocol version number.
Returns
A string representation of the protocol version as "RDP_VERSION_10_11" or "RDP_VERSION_UNKNOWN" for invalid/unknown versions

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

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

◆ freerdp_rdpdr_dtyp_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_rdpdr_dtyp_string ( UINT32  type)

Returns a string representation of RDPDR_DTYP_*.

Parameters
typeThe integer of the RDPDR_DTYP_* to stringify
Returns
A string representation of the RDPDR_DTYP_* or "RDPDR_DTYP_UNKNOWN"

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

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

◆ freerdp_server_license_issuers_copy()

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

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

1010{
1011 WINPR_ASSERT(settings);
1012 WINPR_ASSERT(issuers || (count == 0));
1013
1014 if (!freerdp_settings_set_pointer_len(settings, FreeRDP_ServerLicenseProductIssuers, nullptr,
1015 count))
1016 return FALSE;
1017
1018 for (UINT32 x = 0; x < count; x++)
1019 {
1020 char* issuer = _strdup(issuers[x]);
1021 if (!issuer)
1022 return FALSE;
1023 settings->ServerLicenseProductIssuers[x] = issuer;
1024 }
1025
1026 return TRUE;
1027}
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 995 of file common/settings.c.

996{
997 WINPR_ASSERT(settings);
998
999 if (settings->ServerLicenseProductIssuers)
1000 {
1001 for (UINT32 x = 0; x < settings->ServerLicenseProductIssuersCount; x++)
1002 free(settings->ServerLicenseProductIssuers[x]);
1003 }
1004 free((void*)settings->ServerLicenseProductIssuers);
1005 settings->ServerLicenseProductIssuers = nullptr;
1006 settings->ServerLicenseProductIssuersCount = 0;
1007}

◆ freerdp_set_gateway_usage_method()

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

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

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

1095{
1096 if (!freerdp_settings_set_uint32(settings, FreeRDP_GatewayUsageMethod, GatewayUsageMethod))
1097 return FALSE;
1098
1099 if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DIRECT)
1100 {
1101 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1102 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1103 return FALSE;
1104 }
1105 else if (GatewayUsageMethod == TSC_PROXY_MODE_DIRECT)
1106 {
1107 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1108 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1109 return FALSE;
1110 }
1111 else if (GatewayUsageMethod == TSC_PROXY_MODE_DETECT)
1112 {
1113 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, TRUE) ||
1114 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, TRUE))
1115 return FALSE;
1116 }
1117 else if (GatewayUsageMethod == TSC_PROXY_MODE_DEFAULT)
1118 {
1124 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1125 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1126 return FALSE;
1127 }
1128 else if (GatewayUsageMethod == TSC_PROXY_MODE_NONE_DETECT)
1129 {
1130 if (!freerdp_settings_set_bool(settings, FreeRDP_GatewayEnabled, FALSE) ||
1131 !freerdp_settings_set_bool(settings, FreeRDP_GatewayBypassLocal, FALSE))
1132 return FALSE;
1133 }
1134
1135 return TRUE;
1136}

References freerdp_settings_set_bool(), and freerdp_settings_set_uint32().

Here is the call graph for this function:

◆ freerdp_settings_append_string()

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

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

<old value><separator><param>

is created

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

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

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

References freerdp_settings_get_string(), and freerdp_settings_set_string_len().

Here is the call graph for this function:

◆ freerdp_settings_are_valid()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_are_valid ( const rdpSettings *  settings)

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

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

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

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

2412{
2413 return settings != nullptr;
2414}

◆ freerdp_settings_clone()

FREERDP_API rdpSettings * freerdp_settings_clone ( const rdpSettings *  settings)

Creates a deep copy of settings.

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

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

1623{
1624 rdpSettings* dst = (rdpSettings*)calloc(1, sizeof(rdpSettings));
1625
1626 if (!freerdp_settings_copy(dst, settings))
1627 goto out_fail;
1628
1629 return dst;
1630out_fail:
1631 WINPR_PRAGMA_DIAG_PUSH
1632 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1634 WINPR_PRAGMA_DIAG_POP
1635 return nullptr;
1636}
BOOL freerdp_settings_copy(rdpSettings *dst, const rdpSettings *src)
Deep copies settings from src to dst.
void freerdp_settings_free(rdpSettings *settings)
Free a settings struct with all data in it.

References freerdp_settings_copy(), and freerdp_settings_free().

Here is the call graph for this function:

◆ freerdp_settings_copy()

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

Deep copies settings from src to dst.

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

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

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

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

Referenced by freerdp_settings_clone().

Here is the caller graph for this function:

◆ freerdp_settings_copy_item()

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

copies one setting identified by id from src to dst

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

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

Definition at line 443 of file settings_str.c.

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

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

Here is the call graph for this function:

◆ freerdp_settings_deserialize()

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

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

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

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

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

References freerdp_settings_free(), freerdp_settings_get_name_for_key(), freerdp_settings_get_type_for_key(), freerdp_settings_get_type_name_for_type(), freerdp_settings_new(), freerdp_settings_set_bool(), freerdp_settings_set_int16(), freerdp_settings_set_int32(), freerdp_settings_set_int64(), freerdp_settings_set_string(), freerdp_settings_set_uint16(), freerdp_settings_set_uint32(), freerdp_settings_set_uint64(), WINPR_JSON_Delete(), WINPR_JSON_GetObjectItemCaseSensitive(), WINPR_JSON_GetStringValue(), WINPR_JSON_IsBool(), WINPR_JSON_IsNull(), WINPR_JSON_IsString(), WINPR_JSON_IsTrue(), and WINPR_JSON_ParseWithLength().

Here is the call graph for this function:

◆ freerdp_settings_dump()

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

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

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

Definition at line 249 of file settings_str.c.

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

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

Here is the call graph for this function:

◆ freerdp_settings_free()

FREERDP_API void freerdp_settings_free ( rdpSettings *  settings)

Free a settings struct with all data in it.

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

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

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_bool()

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

Returns a boolean settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_codecs_flags()

WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_codecs_flags ( const rdpSettings *  settings)

helper function to get a mask of supported codec flags.

This function checks various settings to create a mask of supported codecs FreeRDP_CodecFlags defines the codecs

Parameters
settingsthe settings to check
Returns
a mask of supported codecs

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

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

◆ freerdp_settings_get_config_path()

WINPR_ATTR_NODISCARD FREERDP_API char * freerdp_settings_get_config_path ( void  )

return the configuration directory for the library

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

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

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

Referenced by freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_get_int16()

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

Returns a INT16 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_int32()

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

Returns a INT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_int64()

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

Returns a INT64 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_key_for_name()

WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_key_for_name ( const char *  value)

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

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

Definition at line 362 of file settings_str.c.

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

◆ freerdp_settings_get_name_for_key()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_name_for_key ( SSIZE_T  key)

Returns the type name for a key.

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

Definition at line 432 of file settings_str.c.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_pointer()

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

Returns a immutable pointer settings value.

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

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

1416{
1417 union
1418 {
1419 const rdpSettings* pc;
1420 rdpSettings* p;
1421 } cnv;
1422 cnv.pc = settings;
1423 return freerdp_settings_get_pointer_writable(cnv.p, id);
1424}
WINPR_ATTR_NODISCARD FREERDP_API void * freerdp_settings_get_pointer_writable(rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id)
Returns a mutable pointer settings value.

References freerdp_settings_get_pointer_writable().

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

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

◆ freerdp_settings_get_pointer_array()

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

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

1999{
2000 return freerdp_settings_get_pointer_array_writable(settings, id, offset);
2001}

◆ freerdp_settings_get_pointer_array_writable()

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

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

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

◆ freerdp_settings_get_pointer_writable()

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

Returns a mutable pointer settings value.

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

Definition at line 4113 of file settings_getters.c.

4114{
4115 WINPR_ASSERT(settings);
4116
4117 switch (id)
4118 {
4119 case FreeRDP_BitmapCacheV2CellInfo:
4120 return (void*)settings->BitmapCacheV2CellInfo;
4121
4122 case FreeRDP_ChannelDefArray:
4123 return (void*)settings->ChannelDefArray;
4124
4125 case FreeRDP_ClientAutoReconnectCookie:
4126 return (void*)settings->ClientAutoReconnectCookie;
4127
4128 case FreeRDP_ClientRandom:
4129 return (void*)settings->ClientRandom;
4130
4131 case FreeRDP_ClientTimeZone:
4132 return (void*)settings->ClientTimeZone;
4133
4134 case FreeRDP_DeviceArray:
4135 return (void*)settings->DeviceArray;
4136
4137 case FreeRDP_DynamicChannelArray:
4138 return (void*)settings->DynamicChannelArray;
4139
4140 case FreeRDP_FragCache:
4141 return (void*)settings->FragCache;
4142
4143 case FreeRDP_GlyphCache:
4144 return (void*)settings->GlyphCache;
4145
4146 case FreeRDP_LoadBalanceInfo:
4147 return (void*)settings->LoadBalanceInfo;
4148
4149 case FreeRDP_MonitorDefArray:
4150 return (void*)settings->MonitorDefArray;
4151
4152 case FreeRDP_MonitorIds:
4153 return (void*)settings->MonitorIds;
4154
4155 case FreeRDP_OrderSupport:
4156 return (void*)settings->OrderSupport;
4157
4158 case FreeRDP_Password51:
4159 return (void*)settings->Password51;
4160
4161 case FreeRDP_RdpServerCertificate:
4162 return (void*)settings->RdpServerCertificate;
4163
4164 case FreeRDP_RdpServerRsaKey:
4165 return (void*)settings->RdpServerRsaKey;
4166
4167 case FreeRDP_ReceivedCapabilities:
4168 return (void*)settings->ReceivedCapabilities;
4169
4170 case FreeRDP_ReceivedCapabilityData:
4171 return (void*)settings->ReceivedCapabilityData;
4172
4173 case FreeRDP_ReceivedCapabilityDataSizes:
4174 return (void*)settings->ReceivedCapabilityDataSizes;
4175
4176 case FreeRDP_RedirectionGuid:
4177 return (void*)settings->RedirectionGuid;
4178
4179 case FreeRDP_RedirectionPassword:
4180 return (void*)settings->RedirectionPassword;
4181
4182 case FreeRDP_RedirectionTargetCertificate:
4183 return (void*)settings->RedirectionTargetCertificate;
4184
4185 case FreeRDP_RedirectionTsvUrl:
4186 return (void*)settings->RedirectionTsvUrl;
4187
4188 case FreeRDP_ServerAutoReconnectCookie:
4189 return (void*)settings->ServerAutoReconnectCookie;
4190
4191 case FreeRDP_ServerCertificate:
4192 return (void*)settings->ServerCertificate;
4193
4194 case FreeRDP_ServerLicenseProductIssuers:
4195 return (void*)settings->ServerLicenseProductIssuers;
4196
4197 case FreeRDP_ServerRandom:
4198 return (void*)settings->ServerRandom;
4199
4200 case FreeRDP_StaticChannelArray:
4201 return (void*)settings->StaticChannelArray;
4202
4203 case FreeRDP_TargetNetAddresses:
4204 return (void*)settings->TargetNetAddresses;
4205
4206 case FreeRDP_TargetNetPorts:
4207 return (void*)settings->TargetNetPorts;
4208
4209 case FreeRDP_instance:
4210 return settings->instance;
4211
4212 default:
4213 WLog_ERR(TAG, "Invalid key index %d [%s|%s]", id, freerdp_settings_get_name_for_key(id),
4215 WINPR_ASSERT(FALSE);
4216 return nullptr;
4217 }
4218}
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_key(SSIZE_T key)
Returns the type name for a key.

References freerdp_settings_get_name_for_key(), and freerdp_settings_get_type_name_for_key().

Referenced by freerdp_settings_get_pointer(), freerdp_settings_new(), and freerdp_settings_set_monitor_def_array_sorted().

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

◆ freerdp_settings_get_server_name()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_server_name ( const rdpSettings *  settings)

A helper function to return the correct server name.

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

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

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

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

◆ freerdp_settings_get_string()

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

Returns a immutable string settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_string_as_utf16()

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

Return an allocated UTF16 string.

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

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

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

References freerdp_settings_get_string().

Here is the call graph for this function:

◆ freerdp_settings_get_string_writable()

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

Returns a string settings value.

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

Definition at line 3073 of file settings_getters.c.

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

References freerdp_settings_get_name_for_key(), and freerdp_settings_get_type_name_for_key().

Here is the call graph for this function:

◆ freerdp_settings_get_type_for_key()

WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_key ( SSIZE_T  key)

Get a key type for the key index.

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

Definition at line 421 of file settings_str.c.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_type_for_name()

WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_name ( const char *  value)

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

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

Definition at line 375 of file settings_str.c.

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

◆ freerdp_settings_get_type_name_for_key()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_key ( SSIZE_T  key)

Returns the type name for a key.

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

Definition at line 388 of file settings_str.c.

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

References freerdp_settings_get_type_for_key(), and freerdp_settings_get_type_name_for_type().

Referenced by freerdp_settings_get_pointer_writable(), and freerdp_settings_get_string_writable().

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

◆ freerdp_settings_get_type_name_for_type()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_type_name_for_type ( SSIZE_T  type)

Returns the type name for a type.

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

Definition at line 394 of file settings_str.c.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_uint16()

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

Returns a UINT16 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_uint32()

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

Returns a UINT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_get_uint64()

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

Returns a UINT64 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_new()

FREERDP_API rdpSettings * freerdp_settings_new ( DWORD  flags)

creates a new setting struct

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

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

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

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

Referenced by freerdp_settings_deserialize().

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

◆ freerdp_settings_print_diff()

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

Dumps the difference between two settings structs to a WLog.

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

Definition at line 99 of file settings_str.c.

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

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

Here is the call graph for this function:

◆ freerdp_settings_serialize()

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

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

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

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

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

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

Here is the call graph for this function:

◆ freerdp_settings_set_bool()

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

Sets a BOOL settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_int16()

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

Sets a INT16 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

Here is the caller graph for this function:

◆ freerdp_settings_set_int32()

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

Sets a INT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_int64()

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

Sets a INT64 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

Here is the caller graph for this function:

◆ freerdp_settings_set_monitor_def_array_sorted()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_set_monitor_def_array_sorted ( rdpSettings *  settings,
const rdpMonitor monitors,
size_t  count 
)

Sort monitor array according to:

  1. First monitor is at x/y 0/0 and is the primary monitor
  2. The primary monitor must be at 0/0, if not set FreeRDP_MonitorLocalShiftX/FreeRDP_MonitorLocalShiftY

The FreeRDP_MonitorLocalShiftX/FreeRDP_MonitorLocalShiftY is required to map the local monitors / mouse / touch coordinates to the remote ones.

Parameters
settingsThe settings to set the monitors for
monitorsThe unsorted monitors array
countThe number of monitors in the unsorted array
Returns
TRUE if the configuration is valid (or could be corrected to a valid one), FALSE otherwise.
Version
since 3.11.0

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

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

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

Here is the call graph for this function:

◆ freerdp_settings_set_pointer()

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

Set a pointer to value val.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_set_pointer_len().

Here is the caller graph for this function:

◆ freerdp_settings_set_pointer_array()

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

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

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

◆ freerdp_settings_set_pointer_len()

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

Set a pointer to value data.

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

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

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

References freerdp_settings_set_pointer().

Referenced by freerdp_settings_new(), and freerdp_settings_set_monitor_def_array_sorted().

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

◆ freerdp_settings_set_string()

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

Sets a string settings value. The param is copied.

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

Definition at line 3754 of file settings_getters.c.

3756{
3757 size_t len = 0;
3758 if (val)
3759 len = strlen(val);
3760 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3761}

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

Here is the caller graph for this function:

◆ freerdp_settings_set_string_from_utf16()

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

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

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

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

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

◆ freerdp_settings_set_string_from_utf16N()

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

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

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

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

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

Referenced by freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_string_len()

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

Sets a string settings value. The val is copied.

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

Definition at line 3748 of file settings_getters.c.

3750{
3751 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3752}

Referenced by freerdp_settings_append_string(), and freerdp_settings_new().

Here is the caller graph for this function:

◆ freerdp_settings_set_uint16()

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

Sets a UINT16 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_uint32()

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

Sets a UINT32 settings value.

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

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

Here is the caller graph for this function:

◆ freerdp_settings_set_uint64()

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

Sets a UINT64 settings value.

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

Referenced by freerdp_settings_copy_item(), and freerdp_settings_deserialize().

Here is the caller graph for this function:

◆ freerdp_settings_set_value_for_name()

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

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

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

◆ freerdp_settings_update_from_caps()

WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_update_from_caps ( rdpSettings *  settings,
const BYTE *  capsFlags,
const BYTE **  capsData,
const UINT32 *  capsSizes,
UINT32  capsCount,
BOOL  serverReceivedCaps 
)

Parse capability data and apply to settings.

The capability message is stored in raw form in the settings, the data parsed and applied to the settings.

Parameters
settingsA pointer to the settings to use
capsFlagsA pointer to the capability flags, must have capsCount fields
capsDataA pointer array to the RAW capability data, must have capsCount fields
capsSizesA pointer to an array of RAW capability sizes, must have capsCount fields
capsCountThe number of capabilities contained in the RAW data
serverReceivedCapsIndicates if the parser should assume to be a server or client instance
Returns
TRUE for success, FALSE in case of an error

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

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

◆ freerdp_static_channel_collection_add()

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

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

549{
550 UINT32 count = 0;
551
552 WINPR_ASSERT(settings);
553 WINPR_ASSERT(channel);
554
555 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount) + 1;
556 if (freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize) < count)
557 {
558 const UINT32 oldSize =
559 freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize);
560 const size_t new_size = oldSize + 32ul;
561 ADDIN_ARGV** new_array = (ADDIN_ARGV**)realloc((void*)settings->StaticChannelArray,
562 new_size * sizeof(ADDIN_ARGV*));
563
564 if (!new_array)
565 return FALSE;
566
567 settings->StaticChannelArray = new_array;
568 {
569 for (size_t x = oldSize; x < new_size; x++)
570 settings->StaticChannelArray[x] = nullptr;
571 }
572 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize,
573 WINPR_ASSERTING_INT_CAST(uint32_t, new_size)))
574 return FALSE;
575 }
576
577 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
578
579 ADDIN_ARGV** cur = &settings->StaticChannelArray[count++];
580 freerdp_addin_argv_free(*cur);
581 *cur = channel;
582 return freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count);
583}

◆ freerdp_static_channel_collection_del()

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

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

515{
516 const UINT32 count = freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount);
517 if (!settings || !settings->StaticChannelArray)
518 return FALSE;
519
520 for (UINT32 x = 0; x < count; x++)
521 {
522 ADDIN_ARGV* cur = settings->StaticChannelArray[x];
523 if (cur && (cur->argc > 0))
524 {
525 if (strcmp(name, cur->argv[0]) == 0)
526 {
527 const BOOL success = memmove_s((void*)&settings->StaticChannelArray[x],
528 (count - x) * sizeof(ADDIN_ARGV*),
529 (void*)&settings->StaticChannelArray[x + 1],
530 (count - x - 1) * sizeof(ADDIN_ARGV*)) >= 0;
531 for (size_t y = count - 1; y < settings->StaticChannelArraySize; y++)
532 settings->StaticChannelArray[y] = nullptr;
533
534 freerdp_addin_argv_free(cur);
535 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, count - 1))
536 return FALSE;
537 return success;
538 }
539 }
540 }
541 {
542 for (size_t x = count; x < settings->StaticChannelArraySize; x++)
543 settings->StaticChannelArray[x] = nullptr;
544 }
545 return FALSE;
546}

◆ freerdp_static_channel_collection_find()

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

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

586{
587 ADDIN_ARGV* channel = nullptr;
588
589 WINPR_ASSERT(settings);
590 WINPR_ASSERT(name);
591
592 for (UINT32 index = 0;
593 index < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelCount); index++)
594 {
595 channel = settings->StaticChannelArray[index];
596
597 if (strcmp(channel->argv[0], name) == 0)
598 return channel;
599 }
600
601 return nullptr;
602}

◆ freerdp_static_channel_collection_free()

FREERDP_API void freerdp_static_channel_collection_free ( rdpSettings *  settings)

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

605{
606 if (!settings)
607 return;
608
609 if (settings->StaticChannelArray)
610 {
611 for (UINT32 i = 0;
612 i < freerdp_settings_get_uint32(settings, FreeRDP_StaticChannelArraySize); i++)
613 freerdp_addin_argv_free(settings->StaticChannelArray[i]);
614 }
615
616 free((void*)settings->StaticChannelArray);
617 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0))
618 WLog_WARN(
619 TAG, "freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelArraySize, 0) failed");
620 settings->StaticChannelArray = nullptr;
621 if (!freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0))
622 WLog_WARN(TAG,
623 "freerdp_settings_set_uint32(settings, FreeRDP_StaticChannelCount, 0) failed");
624}

◆ freerdp_supported_color_depths_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_supported_color_depths_string ( UINT16  mask,
char *  buffer,
size_t  size 
)

returns a string representation of RNS_UD_XXBPP_SUPPORT values

Parameters
maskA bitmask of supported color dephts RNS_UD_*
bufferA pointer to a buffer of size bytes
sizeThe size of the buffer in bytes
Returns
A string reprenentation of the bitmask.

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

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

◆ freerdp_target_net_addresses_copy()

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

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

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

◆ freerdp_target_net_addresses_free()

FREERDP_API void freerdp_target_net_addresses_free ( rdpSettings *  settings)

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

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

◆ freerdp_update_gateway_usage_method()

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

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

1152{
1153 UINT32 GatewayUsageMethod = 0;
1154
1155 if (!GatewayEnabled && !GatewayBypassLocal)
1156 GatewayUsageMethod = TSC_PROXY_MODE_NONE_DIRECT;
1157 else if (GatewayEnabled && !GatewayBypassLocal)
1158 GatewayUsageMethod = TSC_PROXY_MODE_DIRECT;
1159 else if (GatewayEnabled && GatewayBypassLocal)
1160 GatewayUsageMethod = TSC_PROXY_MODE_DETECT;
1161
1162 if (!freerdp_set_gateway_usage_method(settings, GatewayUsageMethod))
1163 WLog_WARN(TAG,
1164 "freerdp_set_gateway_usage_method(settings, GatewayUsageMethod=%" PRIu32
1165 ") failed)",
1166 GatewayUsageMethod);
1167}
BOOL freerdp_set_gateway_usage_method(rdpSettings *settings, UINT32 GatewayUsageMethod)