24#ifndef FREERDP_SETTINGS_H
25#define FREERDP_SETTINGS_H
27#include <winpr/timezone.h>
28#include <winpr/wlog.h>
30#include <freerdp/api.h>
31#include <freerdp/config.h>
32#include <freerdp/types.h>
33#include <freerdp/redirection.h>
35#if !defined(WITH_OPAQUE_SETTINGS)
36#include <freerdp/settings_types_private.h>
39#include <freerdp/settings_keys.h>
40#include <freerdp/settings_types.h>
42#include <freerdp/crypto/certificate.h>
43#include <freerdp/crypto/privatekey.h>
80#define FREERDP_SETTINGS_SERVER_MODE 0x00000001
81#define FREERDP_SETTINGS_REMOTE_MODE 0x00000002
155 const rdpSettings* settings,
156 const rdpSettings* other);
158 FREERDP_API
void freerdp_addin_argv_free(
ADDIN_ARGV* args);
160 WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1)
162 FREERDP_API
ADDIN_ARGV* freerdp_addin_argv_new(
size_t argc, const
char* const argv[]);
164 WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1)
169 FREERDP_API BOOL freerdp_addin_argv_add_argument(
ADDIN_ARGV* args, const
char* argument);
172 FREERDP_API BOOL freerdp_addin_argv_add_argument_ex(
ADDIN_ARGV* args, const
char* argument,
176 FREERDP_API BOOL freerdp_addin_argv_del_argument(
ADDIN_ARGV* args, const
char* argument);
179 FREERDP_API
int freerdp_addin_set_argument(
ADDIN_ARGV* args, const
char* argument);
182 FREERDP_API
int freerdp_addin_replace_argument(
ADDIN_ARGV* args, const
char* previous,
183 const
char* argument);
186 FREERDP_API
int freerdp_addin_set_argument_value(
ADDIN_ARGV* args, const
char* option,
190 FREERDP_API
int freerdp_addin_replace_argument_value(
ADDIN_ARGV* args, const
char* previous,
191 const
char* option, const
char* value);
194 FREERDP_API BOOL freerdp_device_collection_add(rdpSettings* settings,
RDPDR_DEVICE* device);
210 FREERDP_API
RDPDR_DEVICE* freerdp_device_collection_find(rdpSettings* settings,
213 FREERDP_API
RDPDR_DEVICE* freerdp_device_collection_find_type(rdpSettings* settings,
216 FREERDP_API
void freerdp_device_free(
RDPDR_DEVICE* device);
218 WINPR_ATTR_MALLOC(freerdp_device_free, 1)
220 FREERDP_API
RDPDR_DEVICE* freerdp_device_new(UINT32 Type,
size_t count,
221 const
char* const args[]);
223 WINPR_ATTR_MALLOC(freerdp_device_free, 1)
230 FREERDP_API
void freerdp_device_collection_free(rdpSettings* settings);
233 FREERDP_API BOOL freerdp_static_channel_collection_add(rdpSettings* settings,
236 FREERDP_API BOOL freerdp_static_channel_collection_del(rdpSettings* settings, const
char* name);
239 FREERDP_API
ADDIN_ARGV* freerdp_static_channel_collection_find(rdpSettings* settings,
241#if defined(WITH_FREERDP_DEPRECATED)
243 WINPR_ATTR_NODISCARD FREERDP_API
ADDIN_ARGV* WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1)
244 WINPR_ATTR_NODISCARD freerdp_static_channel_clone(
ADDIN_ARGV* channel));
247 FREERDP_API
void freerdp_static_channel_collection_free(rdpSettings* settings);
250 FREERDP_API BOOL freerdp_dynamic_channel_collection_add(rdpSettings* settings,
253 FREERDP_API BOOL freerdp_dynamic_channel_collection_del(rdpSettings* settings,
257 FREERDP_API
ADDIN_ARGV* freerdp_dynamic_channel_collection_find(
const rdpSettings* settings,
260#if defined(WITH_FREERDP_DEPRECATED)
262 WINPR_ATTR_NODISCARD FREERDP_API
ADDIN_ARGV* WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1)
263 WINPR_ATTR_NODISCARD freerdp_dynamic_channel_clone(
ADDIN_ARGV* channel));
266 FREERDP_API
void freerdp_dynamic_channel_collection_free(rdpSettings* settings);
267 FREERDP_API
void freerdp_capability_buffer_free(rdpSettings* settings);
270 FREERDP_API BOOL freerdp_capability_buffer_copy(rdpSettings* settings,
const rdpSettings* src);
272 FREERDP_API
void freerdp_server_license_issuers_free(rdpSettings* settings);
275 FREERDP_API BOOL freerdp_server_license_issuers_copy(rdpSettings* settings,
char** issuers,
278 FREERDP_API
void freerdp_target_net_addresses_free(rdpSettings* settings);
281 FREERDP_API BOOL freerdp_target_net_addresses_copy(rdpSettings* settings,
char** addresses,
284 FREERDP_API
void freerdp_performance_flags_make(rdpSettings* settings);
285 FREERDP_API
void freerdp_performance_flags_split(rdpSettings* settings);
288 UINT32 GatewayUsageMethod);
289 FREERDP_API
void freerdp_update_gateway_usage_method(rdpSettings* settings,
290 UINT32 GatewayEnabled,
291 UINT32 GatewayBypassLocal);
297#if defined(WITH_FREERDP_DEPRECATED)
298 WINPR_DEPRECATED_VAR(
"Use freerdp_settings_get_bool instead",
299 WINPR_ATTR_NODISCARD FREERDP_API BOOL
300 freerdp_get_param_bool(
const rdpSettings* settings,
int id));
301 WINPR_DEPRECATED_VAR(
"Use freerdp_settings_set_bool instead",
302 FREERDP_API
int freerdp_set_param_bool(rdpSettings* settings,
int id,
305 WINPR_DEPRECATED_VAR(
"Use freerdp_settings_get_int[16|32] instead",
306 WINPR_ATTR_NODISCARD FREERDP_API
int freerdp_get_param_int(
307 const rdpSettings* settings,
int id));
308 WINPR_DEPRECATED_VAR(
"Use freerdp_settings_set_int[16|32] instead",
309 FREERDP_API
int freerdp_set_param_int(rdpSettings* settings,
int id,
312 WINPR_DEPRECATED_VAR(
"Use freerdp_settings_get_uint32 instead",
313 WINPR_ATTR_NODISCARD FREERDP_API UINT32
314 freerdp_get_param_uint32(
const rdpSettings* settings,
int id));
315 WINPR_DEPRECATED_VAR(
"Use freerdp_settings_set_uint32 instead",
316 FREERDP_API
int freerdp_set_param_uint32(rdpSettings* settings,
int id,
319 WINPR_DEPRECATED_VAR(
"Use freerdp_settings_get_uint64 instead",
320 WINPR_ATTR_NODISCARD FREERDP_API UINT64
321 freerdp_get_param_uint64(
const rdpSettings* settings,
int id));
322 WINPR_DEPRECATED_VAR(
"Use freerdp_settings_set_uint64 instead",
323 FREERDP_API
int freerdp_set_param_uint64(rdpSettings* settings,
int id,
326 WINPR_DEPRECATED_VAR(
"Use freerdp_settings_get_string instead",
327 WINPR_ATTR_NODISCARD FREERDP_API
char* freerdp_get_param_string(
328 const rdpSettings* settings,
int id));
329 WINPR_DEPRECATED_VAR(
"Use freerdp_settings_set_string instead",
330 FREERDP_API
int freerdp_set_param_string(rdpSettings* settings,
int id,
355 FreeRDP_Settings_Keys_Bool
id);
377 FreeRDP_Settings_Keys_Int16
id);
388 FreeRDP_Settings_Keys_Int16
id, INT16 val);
399 FreeRDP_Settings_Keys_UInt16
id);
410 FreeRDP_Settings_Keys_UInt16
id, UINT16 val);
421 FreeRDP_Settings_Keys_Int32
id);
432 FreeRDP_Settings_Keys_Int32
id, INT32 val);
443 FreeRDP_Settings_Keys_UInt32
id);
454 FreeRDP_Settings_Keys_UInt32
id, UINT32 val);
465 FreeRDP_Settings_Keys_Int64
id);
476 FreeRDP_Settings_Keys_Int64
id, INT64 val);
487 FreeRDP_Settings_Keys_UInt64
id);
498 FreeRDP_Settings_Keys_UInt64
id, UINT64 val);
509 FreeRDP_Settings_Keys_String
id);
520 FreeRDP_Settings_Keys_String
id);
532 FreeRDP_Settings_Keys_String
id,
533 const char* val,
size_t len);
545 FreeRDP_Settings_Keys_String
id,
const char* val);
560 FreeRDP_Settings_Keys_String
id,
561 const char* separator,
const char* param);
573 FreeRDP_Settings_Keys_String
id,
587 FreeRDP_Settings_Keys_String
id,
588 const WCHAR* param,
size_t length);
596 WINPR_ATTR_MALLOC(free, 1)
599 FreeRDP_Settings_Keys_String
id,
611 FreeRDP_Settings_Keys_Pointer
id);
622 FreeRDP_Settings_Keys_Pointer
id);
633 FreeRDP_Settings_Keys_Pointer
id,
645 FreeRDP_Settings_Keys_Pointer
id,
646 const
void* data,
size_t len);
649 FREERDP_API const
void* freerdp_settings_get_pointer_array(const rdpSettings* settings,
650 FreeRDP_Settings_Keys_Pointer
id,
654 FREERDP_API
void* freerdp_settings_get_pointer_array_writable(const rdpSettings* settings,
655 FreeRDP_Settings_Keys_Pointer
id,
658 FREERDP_API BOOL freerdp_settings_set_pointer_array(rdpSettings* settings,
659 FreeRDP_Settings_Keys_Pointer
id,
660 size_t offset, const
void* data);
682 FREERDP_API BOOL freerdp_settings_set_value_for_name(rdpSettings* settings, const
char* name,
767 const BYTE** capsData,
768 const UINT32* capsSizes, UINT32 capsCount,
769 BOOL serverReceivedCaps);
815 FREERDP_API const
char* freerdp_encryption_level_string(UINT32 EncryptionLevel);
818 FREERDP_API const
char* freerdp_encryption_methods_string(UINT32 EncryptionMethods,
819 char* buffer,
size_t size);
837 WINPR_ATTR_MALLOC(free, 1)
872 WINPR_ATTR_MALLOC(free, 1)
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 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 const char * freerdp_settings_get_type_name_for_type(SSIZE_T type)
Returns the type name for a type.
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 BOOL freerdp_settings_update_from_caps(rdpSettings *settings, const BYTE *capsFlags, const BYTE **capsData, const UINT32 *capsSizes, UINT32 capsCount, BOOL serverReceivedCaps)
Parse capability data and apply to settings.
FREERDP_API BOOL freerdp_settings_set_bool(rdpSettings *settings, FreeRDP_Settings_Keys_Bool id, BOOL val)
Sets a BOOL 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 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_settings_get_string(const rdpSettings *settings, FreeRDP_Settings_Keys_String id)
Returns a immutable string settings value.
WINPR_ATTR_NODISCARD FREERDP_API rdpSettings * freerdp_settings_clone(const rdpSettings *settings)
Creates a deep copy of settings.
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 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.
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 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 INT32 freerdp_settings_get_int32(const rdpSettings *settings, FreeRDP_Settings_Keys_Int32 id)
Returns a INT32 settings value.
WINPR_ATTR_NODISCARD FREERDP_API char * freerdp_settings_get_config_path(void)
return the configuration directory for the library
FREERDP_API BOOL freerdp_settings_set_int16(rdpSettings *settings, FreeRDP_Settings_Keys_Int16 id, INT16 val)
Sets a INT16 settings value.
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 void * freerdp_settings_get_pointer_writable(rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id)
Returns a mutable pointer settings value.
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.
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 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_copy(rdpSettings *dst, const rdpSettings *src)
Deep copies settings from src to dst.
FREERDP_API BOOL freerdp_settings_set_pointer(rdpSettings *settings, FreeRDP_Settings_Keys_Pointer id, const void *val)
Set a pointer to value val.
FREERDP_API BOOL freerdp_settings_set_uint64(rdpSettings *settings, FreeRDP_Settings_Keys_UInt64 id, UINT64 val)
Sets a UINT64 settings value.
FREERDP_API void freerdp_settings_free(rdpSettings *settings)
Free a settings struct with all data in it.
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 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 no...
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 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 rdpSettings * freerdp_settings_new(DWORD flags)
creates a new setting struct
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 INT64 freerdp_settings_get_int64(const rdpSettings *settings, FreeRDP_Settings_Keys_Int64 id)
Returns a INT64 settings value.
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 BOOL freerdp_settings_are_valid(const rdpSettings *settings)
Returns TRUE if settings are in a valid state, FALSE otherwise.
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.
FREERDP_API BOOL freerdp_settings_set_int32(rdpSettings *settings, FreeRDP_Settings_Keys_Int32 id, INT32 val)
Sets a INT32 settings value.
FREERDP_API BOOL freerdp_set_gateway_usage_method(rdpSettings *settings, UINT32 GatewayUsageMethod)
WINPR_ATTR_NODISCARD FREERDP_API WCHAR * freerdp_settings_get_string_as_utf16(const rdpSettings *settings, FreeRDP_Settings_Keys_String id, size_t *pCharLen)
Return an allocated UTF16 string.
FREERDP_API 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_monitor_def_array_sorted(rdpSettings *settings, const rdpMonitor *monitors, size_t count)
Sort monitor array according to:
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.
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 const char * freerdp_rdpdr_dtyp_string(UINT32 type)
Returns a string representation of RDPDR_DTYP_*.
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
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_get_bool(const rdpSettings *settings, FreeRDP_Settings_Keys_Bool id)
Returns a boolean settings value.
WINPR_ATTR_NODISCARD FREERDP_API const char * freerdp_settings_get_name_for_key(SSIZE_T key)
Returns the type name for a key.
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.
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_print_diff(wLog *log, DWORD level, const rdpSettings *settings, const rdpSettings *other)
Dumps the difference between two settings structs to a WLog.
WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_settings_get_type_for_key(SSIZE_T key)
Get a key type for the key index.