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_ARGV * freerdp_addin_argv_new (size_t argc, const char *const argv[])
 
FREERDP_API ADDIN_ARGV * freerdp_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_DEVICE * freerdp_device_collection_find (rdpSettings *settings, const char *name)
 
WINPR_ATTR_NODISCARD FREERDP_API RDPDR_DEVICE * freerdp_device_collection_find_type (rdpSettings *settings, UINT32 type)
 
FREERDP_API void freerdp_device_free (RDPDR_DEVICE *device)
 
FREERDP_API RDPDR_DEVICE * freerdp_device_new (UINT32 Type, size_t count, const char *const args[])
 
FREERDP_API RDPDR_DEVICE * freerdp_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_ARGV * freerdp_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_ARGV * freerdp_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_ARGV * freerdp_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.27.0

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

766{
767 union
768 {
769 char** c;
770 const char** cc;
771 } cnv;
772 if (!args)
773 return nullptr;
774 cnv.c = args->argv;
775 return freerdp_addin_argv_new(WINPR_ASSERTING_INT_CAST(uint32_t, args->argc), cnv.cc);
776}

◆ 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 /* first argument must not be NULL, others might be */
743 if (!argv[0])
744 goto fail;
745
746 for (size_t x = 0; x < argc; x++)
747 {
748 if (!argv[x])
749 continue;
750 args->argv[x] = _strdup(argv[x]);
751 if (!args->argv[x])
752 goto fail;
753 }
754 }
755 return args;
756
757fail:
758 WINPR_PRAGMA_DIAG_PUSH
759 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
760 freerdp_addin_argv_free(args);
761 WINPR_PRAGMA_DIAG_POP
762 return nullptr;
763}

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

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

◆ freerdp_capability_buffer_free()

FREERDP_API void freerdp_capability_buffer_free ( rdpSettings *  settings)

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

820{
821 WINPR_ASSERT(settings);
822
823 freerdp_capability_data_free(settings, 0, TRUE);
824
825 free(settings->ReceivedCapabilityDataSizes);
826 settings->ReceivedCapabilityDataSizes = nullptr;
827
828 free(settings->ReceivedCapabilities);
829 settings->ReceivedCapabilities = nullptr;
830
831 settings->ReceivedCapabilitiesSize = 0;
832}

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

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

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

4669{
4670 if (!device)
4671 return nullptr;
4672 union
4673 {
4674 const RDPDR_DEVICE* dev;
4675 const struct RDPDR_DEVICE_EX* ex;
4676 } cnv;
4677
4678 cnv.dev = device;
4679 return cnv.ex->args;
4680}

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

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

◆ freerdp_encryption_level_string()

WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_encryption_level_string ( UINT32  EncryptionLevel)

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

2326{
2327 switch (EncryptionLevel)
2328 {
2329 case ENCRYPTION_LEVEL_NONE:
2330 return "ENCRYPTION_LEVEL_NONE";
2331 case ENCRYPTION_LEVEL_LOW:
2332 return "ENCRYPTION_LEVEL_LOW";
2333 case ENCRYPTION_LEVEL_CLIENT_COMPATIBLE:
2334 return "ENCRYPTION_LEVEL_CLIENT_COMPATIBLE";
2335 case ENCRYPTION_LEVEL_HIGH:
2336 return "ENCRYPTION_LEVEL_HIGH";
2337 case ENCRYPTION_LEVEL_FIPS:
2338 return "ENCRYPTION_LEVEL_FIPS";
2339 default:
2340 return "ENCRYPTION_LEVEL_UNKNOWN";
2341 }
2342}

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

2345{
2346 if (EncryptionMethods == ENCRYPTION_METHOD_NONE)
2347 {
2348 winpr_str_append("ENCRYPTION_METHOD_NONE", buffer, size, "|");
2349 return buffer;
2350 }
2351
2352 if (EncryptionMethods & ENCRYPTION_METHOD_40BIT)
2353 {
2354 winpr_str_append("ENCRYPTION_METHOD_40BIT", buffer, size, "|");
2355 }
2356 if (EncryptionMethods & ENCRYPTION_METHOD_128BIT)
2357 {
2358 winpr_str_append("ENCRYPTION_METHOD_128BIT", buffer, size, "|");
2359 }
2360 if (EncryptionMethods & ENCRYPTION_METHOD_56BIT)
2361 {
2362 winpr_str_append("ENCRYPTION_METHOD_56BIT", buffer, size, "|");
2363 }
2364 if (EncryptionMethods & ENCRYPTION_METHOD_FIPS)
2365 {
2366 winpr_str_append("ENCRYPTION_METHOD_FIPS", buffer, size, "|");
2367 }
2368
2369 return buffer;
2370}

◆ freerdp_get_gateway_usage_method()

WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_get_gateway_usage_method ( const rdpSettings *  settings)

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

1145{
1146 if (freerdp_settings_get_bool(settings, FreeRDP_GatewayEnabled))
1147 {
1148 if (freerdp_settings_get_bool(settings, FreeRDP_GatewayBypassLocal))
1149 return TSC_PROXY_MODE_DETECT;
1150 return TSC_PROXY_MODE_DIRECT;
1151 }
1152
1153 return freerdp_settings_get_uint32(settings, FreeRDP_GatewayUsageMethod);
1154}
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 1035 of file common/settings.c.

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

◆ freerdp_performance_flags_split()

FREERDP_API void freerdp_performance_flags_split ( rdpSettings *  settings)

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

1064{
1065 BOOL res =
1066 freerdp_settings_set_bool(settings, FreeRDP_AllowFontSmoothing,
1067 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1068 PERF_ENABLE_FONT_SMOOTHING) != 0);
1070 settings, FreeRDP_AllowDesktopComposition,
1071 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1072 PERF_ENABLE_DESKTOP_COMPOSITION) != 0))
1073 res = FALSE;
1075 settings, FreeRDP_DisableWallpaper,
1076 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1077 PERF_DISABLE_WALLPAPER) != 0))
1078 res = FALSE;
1080 settings, FreeRDP_DisableFullWindowDrag,
1081 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1082 PERF_DISABLE_FULLWINDOWDRAG) != 0))
1083 res = FALSE;
1085 settings, FreeRDP_DisableMenuAnims,
1086 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1087 PERF_DISABLE_MENUANIMATIONS) != 0))
1088 res = FALSE;
1090 settings, FreeRDP_DisableThemes,
1091 (freerdp_settings_get_uint32(settings, FreeRDP_PerformanceFlags) &
1092 PERF_DISABLE_THEMING) != 0))
1093 res = FALSE;
1094 if (!res)
1095 {
1096 WLog_WARN(TAG, "freerdp_performance_flags_split() failed");
1097 }
1098}
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 2155 of file common/settings.c.

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

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

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

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

2307{
2308 switch (type)
2309 {
2310 case RDPDR_DTYP_FILESYSTEM:
2311 return "RDPDR_DTYP_FILESYSTEM";
2312 case RDPDR_DTYP_PARALLEL:
2313 return "RDPDR_DTYP_PARALLEL";
2314 case RDPDR_DTYP_PRINT:
2315 return "RDPDR_DTYP_PRINT";
2316 case RDPDR_DTYP_SERIAL:
2317 return "RDPDR_DTYP_SERIAL";
2318 case RDPDR_DTYP_SMARTCARD:
2319 return "RDPDR_DTYP_SMARTCARD";
2320 default:
2321 return "RDPDR_DTYP_UNKNOWN";
2322 }
2323}

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

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

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

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

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

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

2399{
2400 const char* old = freerdp_settings_get_string(settings, id);
2401
2402 size_t len = 0;
2403 char* str = nullptr;
2404
2405 if (!old)
2406 winpr_asprintf(&str, &len, "%s", param);
2407 else if (!separator)
2408 winpr_asprintf(&str, &len, "%s%s", old, param);
2409 else
2410 winpr_asprintf(&str, &len, "%s%s%s", old, separator, param);
2411
2412 const BOOL rc = freerdp_settings_set_string_len(settings, id, str, len);
2413 free(str);
2414 return rc;
2415}
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 2417 of file common/settings.c.

2418{
2419 return settings != nullptr;
2420}

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

1649{
1650 rdpSettings* dst = (rdpSettings*)calloc(1, sizeof(rdpSettings));
1651
1652 if (!freerdp_settings_copy(dst, settings))
1653 goto out_fail;
1654
1655 return dst;
1656out_fail:
1657 WINPR_PRAGMA_DIAG_PUSH
1658 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1660 WINPR_PRAGMA_DIAG_POP
1661 return nullptr;
1662}
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 1622 of file core/settings.c.

1623{
1624 BOOL rc = 0;
1625
1626 if (!dst || !src)
1627 return FALSE;
1628
1629 /* This is required to free all non string buffers */
1630 freerdp_settings_free_internal(dst);
1631
1632 /* This copies everything except allocated non string buffers. reset all allocated buffers to
1633 * nullptr to fix issues during cleanup */
1634 rc = freerdp_settings_clone_keys(dst, src);
1635 if (!rc)
1636 goto out_fail;
1637 freerdp_settings_free_internal_ensure_reset(dst);
1638
1639 /* Begin copying */
1640 if (!freerdp_settings_int_buffer_copy(dst, src))
1641 goto out_fail;
1642 return TRUE;
1643out_fail:
1644 freerdp_settings_free_internal(dst);
1645 return FALSE;
1646}

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

4531{
4532 wLog* log = WLog_Get(TAG);
4533 WINPR_JSON* json = WINPR_JSON_ParseWithLength(jstr, length);
4534 if (!json)
4535 {
4536 WLog_Print(log, WLOG_ERROR, "JSON parsing failed");
4537 return nullptr;
4538 }
4539
4540 WINPR_JSON* jbool = WINPR_JSON_GetObjectItemCaseSensitive(
4541 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_BOOL));
4542 WINPR_JSON* juint16 = WINPR_JSON_GetObjectItemCaseSensitive(
4543 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT16));
4544 WINPR_JSON* jint16 = WINPR_JSON_GetObjectItemCaseSensitive(
4545 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT16));
4546 WINPR_JSON* juint32 = WINPR_JSON_GetObjectItemCaseSensitive(
4547 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT32));
4548 WINPR_JSON* jint32 = WINPR_JSON_GetObjectItemCaseSensitive(
4549 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT32));
4550 WINPR_JSON* juint64 = WINPR_JSON_GetObjectItemCaseSensitive(
4551 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_UINT64));
4552 WINPR_JSON* jint64 = WINPR_JSON_GetObjectItemCaseSensitive(
4553 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_INT64));
4554 WINPR_JSON* jstring = WINPR_JSON_GetObjectItemCaseSensitive(
4555 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_STRING));
4556 WINPR_JSON* jpointer = WINPR_JSON_GetObjectItemCaseSensitive(
4557 json, freerdp_settings_get_type_name_for_type(RDP_SETTINGS_TYPE_POINTER));
4558
4559 rdpSettings* settings = freerdp_settings_new(0);
4560 if (!settings)
4561 {
4562 WLog_Print(log, WLOG_ERROR, "freerdp_settings_new failed");
4563 goto fail;
4564 }
4565 if (!jbool || !juint16 || !jint16 || !juint32 || !jint32 || !juint64 || !jint64 || !jstring ||
4566 !jpointer)
4567 goto fail;
4568
4569 for (int x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
4570 {
4571 union
4572 {
4573
4574 int s;
4575 FreeRDP_Settings_Keys_Bool b;
4576 FreeRDP_Settings_Keys_Int16 i16;
4577 FreeRDP_Settings_Keys_UInt16 u16;
4578 FreeRDP_Settings_Keys_Int32 i32;
4579 FreeRDP_Settings_Keys_UInt32 u32;
4580 FreeRDP_Settings_Keys_Int64 i64;
4581 FreeRDP_Settings_Keys_UInt64 u64;
4582 FreeRDP_Settings_Keys_String str;
4583 FreeRDP_Settings_Keys_Pointer ptr;
4584 } iter;
4585 iter.s = x;
4586
4587 SSIZE_T type = freerdp_settings_get_type_for_key(iter.s);
4588 switch (type)
4589 {
4590 case RDP_SETTINGS_TYPE_POINTER:
4591 if (!deserialize_pointer(jpointer, settings, iter.ptr))
4592 goto fail;
4593 break;
4594 default:
4595 break;
4596 }
4597 }
4598
4599 for (int x = 0; x < FreeRDP_Settings_StableAPI_MAX; x++)
4600 {
4601 union
4602 {
4603
4604 int s;
4605 FreeRDP_Settings_Keys_Bool b;
4606 FreeRDP_Settings_Keys_Int16 i16;
4607 FreeRDP_Settings_Keys_UInt16 u16;
4608 FreeRDP_Settings_Keys_Int32 i32;
4609 FreeRDP_Settings_Keys_UInt32 u32;
4610 FreeRDP_Settings_Keys_Int64 i64;
4611 FreeRDP_Settings_Keys_UInt64 u64;
4612 FreeRDP_Settings_Keys_String str;
4613 FreeRDP_Settings_Keys_Pointer ptr;
4614 } iter;
4615 iter.s = x;
4616
4617 const char* name = freerdp_settings_get_name_for_key(iter.s);
4618 SSIZE_T type = freerdp_settings_get_type_for_key(iter.s);
4619 switch (type)
4620 {
4621 case RDP_SETTINGS_TYPE_BOOL:
4622 if (!settings_json_bool(log, settings, iter.b, jbool, name))
4623 goto fail;
4624 break;
4625 case RDP_SETTINGS_TYPE_UINT16:
4626 if (!settings_json_uint16(log, settings, iter.u16, juint16, name))
4627 goto fail;
4628 break;
4629 case RDP_SETTINGS_TYPE_INT16:
4630 if (!settings_json_int16(log, settings, iter.i16, jint16, name))
4631 goto fail;
4632 break;
4633 case RDP_SETTINGS_TYPE_UINT32:
4634 if (!settings_json_uint32(log, settings, iter.u32, juint32, name))
4635 goto fail;
4636 break;
4637 case RDP_SETTINGS_TYPE_INT32:
4638 if (!settings_json_int32(log, settings, iter.i32, jint32, name))
4639 goto fail;
4640 break;
4641 case RDP_SETTINGS_TYPE_UINT64:
4642 if (!settings_json_uint64(log, settings, iter.u64, juint64, name))
4643 goto fail;
4644 break;
4645 case RDP_SETTINGS_TYPE_INT64:
4646 if (!settings_json_int64(log, settings, iter.i64, jint64, name))
4647 goto fail;
4648 break;
4649 case RDP_SETTINGS_TYPE_STRING:
4650 if (!settings_json_string(log, settings, iter.str, jstring, name))
4651 goto fail;
4652 break;
4653 case RDP_SETTINGS_TYPE_POINTER:
4654 default:
4655 break;
4656 }
4657 }
4658
4659 WINPR_JSON_Delete(json);
4660 return settings;
4661
4662fail:
4663 freerdp_settings_free(settings);
4664 WINPR_JSON_Delete(json);
4665 return nullptr;
4666}
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_API void WINPR_JSON_Delete(WINPR_JSON *item)
Delete a WinPR JSON wrapper object.
Definition c-json.c:103
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(), WINPR_JSON_Delete(), WINPR_JSON_GetObjectItemCaseSensitive(), 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 1400 of file core/settings.c.

1401{
1402 if (!settings)
1403 return;
1404
1405 freerdp_settings_free_internal(settings);
1406 free(settings);
1407}

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

2010{
2011 UINT32 flags = FREERDP_CODEC_ALL;
2012 if (settings->RemoteFxCodec == FALSE)
2013 {
2014 flags &= (uint32_t)~FREERDP_CODEC_REMOTEFX;
2015 }
2016 if (settings->NSCodec == FALSE)
2017 {
2018 flags &= (uint32_t)~FREERDP_CODEC_NSCODEC;
2019 }
2020 /*TODO: check other codecs flags */
2021 return flags;
2022}

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

812{
813 return freerdp_GetConfigFilePath(FALSE, "");
814}

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

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

2005{
2006 return freerdp_settings_get_pointer_array_writable(settings, id, offset);
2007}

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

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

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

4175{
4176 WINPR_ASSERT(settings);
4177
4178 switch (id)
4179 {
4180 case FreeRDP_BitmapCacheV2CellInfo:
4181 return (void*)settings->BitmapCacheV2CellInfo;
4182
4183 case FreeRDP_ChannelDefArray:
4184 return (void*)settings->ChannelDefArray;
4185
4186 case FreeRDP_ClientAutoReconnectCookie:
4187 return (void*)settings->ClientAutoReconnectCookie;
4188
4189 case FreeRDP_ClientRandom:
4190 return (void*)settings->ClientRandom;
4191
4192 case FreeRDP_ClientTimeZone:
4193 return (void*)settings->ClientTimeZone;
4194
4195 case FreeRDP_DeviceArray:
4196 return (void*)settings->DeviceArray;
4197
4198 case FreeRDP_DynamicChannelArray:
4199 return (void*)settings->DynamicChannelArray;
4200
4201 case FreeRDP_FragCache:
4202 return (void*)settings->FragCache;
4203
4204 case FreeRDP_GlyphCache:
4205 return (void*)settings->GlyphCache;
4206
4207 case FreeRDP_LoadBalanceInfo:
4208 return (void*)settings->LoadBalanceInfo;
4209
4210 case FreeRDP_MonitorDefArray:
4211 return (void*)settings->MonitorDefArray;
4212
4213 case FreeRDP_MonitorIds:
4214 return (void*)settings->MonitorIds;
4215
4216 case FreeRDP_OrderSupport:
4217 return (void*)settings->OrderSupport;
4218
4219 case FreeRDP_Password51:
4220 return (void*)settings->Password51;
4221
4222 case FreeRDP_RdpServerCertificate:
4223 return (void*)settings->RdpServerCertificate;
4224
4225 case FreeRDP_RdpServerRsaKey:
4226 return (void*)settings->RdpServerRsaKey;
4227
4228 case FreeRDP_ReceivedCapabilities:
4229 return (void*)settings->ReceivedCapabilities;
4230
4231 case FreeRDP_ReceivedCapabilityData:
4232 return (void*)settings->ReceivedCapabilityData;
4233
4234 case FreeRDP_ReceivedCapabilityDataSizes:
4235 return (void*)settings->ReceivedCapabilityDataSizes;
4236
4237 case FreeRDP_RedirectionGuid:
4238 return (void*)settings->RedirectionGuid;
4239
4240 case FreeRDP_RedirectionPassword:
4241 return (void*)settings->RedirectionPassword;
4242
4243 case FreeRDP_RedirectionTargetCertificate:
4244 return (void*)settings->RedirectionTargetCertificate;
4245
4246 case FreeRDP_RedirectionTsvUrl:
4247 return (void*)settings->RedirectionTsvUrl;
4248
4249 case FreeRDP_ServerAutoReconnectCookie:
4250 return (void*)settings->ServerAutoReconnectCookie;
4251
4252 case FreeRDP_ServerCertificate:
4253 return (void*)settings->ServerCertificate;
4254
4255 case FreeRDP_ServerLicenseProductIssuers:
4256 return (void*)settings->ServerLicenseProductIssuers;
4257
4258 case FreeRDP_ServerRandom:
4259 return (void*)settings->ServerRandom;
4260
4261 case FreeRDP_StaticChannelArray:
4262 return (void*)settings->StaticChannelArray;
4263
4264 case FreeRDP_TargetNetAddresses:
4265 return (void*)settings->TargetNetAddresses;
4266
4267 case FreeRDP_TargetNetPorts:
4268 return (void*)settings->TargetNetPorts;
4269
4270 case FreeRDP_instance:
4271 return settings->instance;
4272
4273 default:
4274 WLog_ERR(TAG, "Invalid key index %d [%s|%s]", id, freerdp_settings_get_name_for_key(id),
4276 WINPR_ASSERT(FALSE);
4277 return nullptr;
4278 }
4279}
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 2024 of file common/settings.c.

2025{
2026 WINPR_ASSERT(settings);
2027 const char* hostname = settings->ServerHostname;
2028
2029 if (settings->UserSpecifiedServerName)
2030 hostname = settings->UserSpecifiedServerName;
2031
2032 return hostname;
2033}

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

2297{
2298 const char* str = freerdp_settings_get_string(settings, id);
2299 if (pCharLen)
2300 *pCharLen = 0;
2301 if (!str)
2302 return nullptr;
2303 return ConvertUtf8ToWCharAlloc(str, pCharLen);
2304}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3805{
3806 size_t len = 0;
3807 if (val)
3808 len = strlen(val);
3809 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3810}

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

2257{
2258 WINPR_ASSERT(settings);
2259
2260 if (!param)
2261 return freerdp_settings_set_string_copy_(settings, id, nullptr, 0, TRUE);
2262
2263 size_t len = 0;
2264
2265 char* str = ConvertWCharToUtf8Alloc(param, &len);
2266 if (!str && (len != 0))
2267 return FALSE;
2268
2269 return freerdp_settings_set_string_(settings, id, str, len);
2270}

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

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

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

3799{
3800 return freerdp_settings_set_string_copy_(settings, id, val, len, TRUE);
3801}

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

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

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

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

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

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

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

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

◆ freerdp_target_net_addresses_free()

FREERDP_API void freerdp_target_net_addresses_free ( rdpSettings *  settings)

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

967{
968 WINPR_ASSERT(settings);
969
970 target_net_addresses_free(settings, 0);
971
972 free((void*)settings->TargetNetAddresses);
973 settings->TargetNetAddresses = nullptr;
974
975 free(settings->TargetNetPorts);
976 settings->TargetNetPorts = nullptr;
977
978 settings->TargetNetAddressCount = 0;
979}

◆ freerdp_update_gateway_usage_method()

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

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

1158{
1159 UINT32 GatewayUsageMethod = 0;
1160
1161 if (!GatewayEnabled && !GatewayBypassLocal)
1162 GatewayUsageMethod = TSC_PROXY_MODE_NONE_DIRECT;
1163 else if (GatewayEnabled && !GatewayBypassLocal)
1164 GatewayUsageMethod = TSC_PROXY_MODE_DIRECT;
1165 else if (GatewayEnabled && GatewayBypassLocal)
1166 GatewayUsageMethod = TSC_PROXY_MODE_DETECT;
1167
1168 if (!freerdp_set_gateway_usage_method(settings, GatewayUsageMethod))
1169 WLog_WARN(TAG,
1170 "freerdp_set_gateway_usage_method(settings, GatewayUsageMethod=%" PRIu32
1171 ") failed)",
1172 GatewayUsageMethod);
1173}
BOOL freerdp_set_gateway_usage_method(rdpSettings *settings, UINT32 GatewayUsageMethod)