From 20a24fe36eaaf52ef9e643e9db03a81d610c0a22 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Mon, 16 Feb 2026 10:54:24 +0100 Subject: [PATCH] [freerdp,api] mark API functions [[nodiscard]] Mark (most) of the API functions returning a value [[nodiscard]]. This will assist application developers spotting bad return checks. --- include/freerdp/addin.h | 11 +++ include/freerdp/assistance.h | 7 ++ include/freerdp/autodetect.h | 2 + include/freerdp/cache/persistent.h | 8 ++ include/freerdp/channels/channels.h | 18 +++- include/freerdp/channels/wtsvc.h | 32 +++++++ include/freerdp/client.h | 52 +++++++++-- include/freerdp/client/channels.h | 7 ++ include/freerdp/client/client_cliprdr_file.h | 12 +++ include/freerdp/client/cmdline.h | 24 +++++ include/freerdp/client/file.h | 20 ++++ include/freerdp/client/rail.h | 1 + include/freerdp/client/rdpsnd.h | 1 + include/freerdp/client/video.h | 1 + include/freerdp/codec/audio.h | 8 ++ include/freerdp/codec/bitmap.h | 1 + include/freerdp/codec/clear.h | 3 + include/freerdp/codec/color.h | 65 ++++++++----- include/freerdp/codec/dsp.h | 6 ++ include/freerdp/codec/h264.h | 10 ++ include/freerdp/codec/interleaved.h | 3 + include/freerdp/codec/jpeg.h | 1 + include/freerdp/codec/nsc.h | 17 ++-- include/freerdp/codec/planar.h | 5 +- include/freerdp/codec/progressive.h | 6 ++ include/freerdp/codec/region.h | 12 +++ include/freerdp/codec/rfx.h | 20 ++++ include/freerdp/codec/yuv.h | 7 ++ include/freerdp/codec/zgfx.h | 5 + include/freerdp/codecs.h | 4 + include/freerdp/crypto/ber.h | 56 +++++++++++ include/freerdp/crypto/certificate.h | 6 ++ include/freerdp/crypto/certificate_data.h | 13 +++ include/freerdp/crypto/certificate_store.h | 7 ++ include/freerdp/crypto/crypto.h | 6 ++ include/freerdp/crypto/per.h | 43 +++++++++ include/freerdp/crypto/privatekey.h | 4 + include/freerdp/display.h | 1 + include/freerdp/dvc.h | 7 +- .../freerdp/emulate/scard/smartcard_emulate.h | 80 ++++++++++++++++ include/freerdp/error.h | 15 +++ include/freerdp/freerdp.h | 93 ++++++++++++++++++- include/freerdp/gdi/bitmap.h | 10 ++ include/freerdp/gdi/dc.h | 8 ++ include/freerdp/gdi/gdi.h | 17 ++++ include/freerdp/gdi/gfx.h | 1 + include/freerdp/gdi/pen.h | 3 + include/freerdp/gdi/region.h | 35 +++++++ include/freerdp/gdi/shape.h | 9 ++ include/freerdp/heartbeat.h | 1 + include/freerdp/input.h | 10 ++ include/freerdp/license.h | 5 + include/freerdp/locale/keyboard.h | 18 ++-- include/freerdp/locale/locale.h | 8 ++ include/freerdp/metrics.h | 1 + include/freerdp/peer.h | 7 ++ include/freerdp/primitives.h | 78 +++++++++------- include/freerdp/rail.h | 31 ++++--- include/freerdp/redirection.h | 10 ++ include/freerdp/server/audin.h | 2 + include/freerdp/server/proxy/proxy_config.h | 8 ++ include/freerdp/server/proxy/proxy_context.h | 7 +- include/freerdp/server/proxy/proxy_server.h | 5 + include/freerdp/server/rail.h | 1 + include/freerdp/server/rdpei.h | 10 ++ include/freerdp/server/rdpgfx.h | 5 + include/freerdp/server/rdpsnd.h | 3 + include/freerdp/server/server-common.h | 3 + include/freerdp/server/shadow.h | 24 ++++- include/freerdp/settings.h | 33 ++++++- include/freerdp/timer.h | 1 + include/freerdp/transport_io.h | 12 +++ include/freerdp/utils/pcap.h | 4 + include/freerdp/utils/signal.h | 1 + include/freerdp/utils/smartcard_call.h | 2 + include/freerdp/utils/smartcard_pack.h | 3 + 76 files changed, 967 insertions(+), 109 deletions(-) diff --git a/include/freerdp/addin.h b/include/freerdp/addin.h index cec491aa6..18c5fa462 100644 --- a/include/freerdp/addin.h +++ b/include/freerdp/addin.h @@ -56,19 +56,30 @@ extern "C" LPCSTR pszType, DWORD dwFlags); + WINPR_ATTR_NODISCARD FREERDP_API LPSTR freerdp_get_library_install_path(void); + + WINPR_ATTR_NODISCARD FREERDP_API LPSTR freerdp_get_dynamic_addin_install_path(void); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_register_addin_provider(FREERDP_LOAD_CHANNEL_ADDIN_ENTRY_FN provider, DWORD dwFlags); + + WINPR_ATTR_NODISCARD FREERDP_API FREERDP_LOAD_CHANNEL_ADDIN_ENTRY_FN freerdp_get_current_addin_provider(void); + WINPR_ATTR_NODISCARD FREERDP_API PVIRTUALCHANNELENTRY freerdp_load_dynamic_addin(LPCSTR pszFileName, LPCSTR pszPath, LPCSTR pszEntryName); + + WINPR_ATTR_NODISCARD FREERDP_API PVIRTUALCHANNELENTRY freerdp_load_dynamic_channel_addin_entry(LPCSTR pszName, LPCSTR pszSubsystem, LPCSTR pszType, DWORD dwFlags); + + WINPR_ATTR_NODISCARD FREERDP_API PVIRTUALCHANNELENTRY freerdp_load_channel_addin_entry(LPCSTR pszName, LPCSTR pszSubsystem, LPCSTR pszType, diff --git a/include/freerdp/assistance.h b/include/freerdp/assistance.h index 8034d782a..c336bf27d 100644 --- a/include/freerdp/assistance.h +++ b/include/freerdp/assistance.h @@ -53,18 +53,25 @@ extern "C" const char* passStub, size_t* pEncryptedSize); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_assistance_set_connection_string2(rdpAssistanceFile* file, const char* string, const char* password); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_assistance_parse_file_buffer(rdpAssistanceFile* file, const char* buffer, size_t size, const char* password); + + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_assistance_parse_file(rdpAssistanceFile* file, const char* name, const char* password); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_assistance_populate_settings_from_assistance_file( rdpAssistanceFile* file, rdpSettings* settings); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_assistance_get_encrypted_pass_stub(rdpAssistanceFile* file, const char** pwd, size_t* size); diff --git a/include/freerdp/autodetect.h b/include/freerdp/autodetect.h index 4260c9424..a1090ab82 100644 --- a/include/freerdp/autodetect.h +++ b/include/freerdp/autodetect.h @@ -139,6 +139,8 @@ extern "C" OnConnectTimeAutoDetectProgress; /* 28 */ UINT64 paddingB[32 - 29]; /* 29 */ }; + + WINPR_ATTR_NODISCARD FREERDP_API rdpAutoDetect* autodetect_get(rdpContext* context); #ifdef __cplusplus diff --git a/include/freerdp/cache/persistent.h b/include/freerdp/cache/persistent.h index bc31ec3f3..c2ae4edaf 100644 --- a/include/freerdp/cache/persistent.h +++ b/include/freerdp/cache/persistent.h @@ -76,16 +76,24 @@ extern "C" BYTE* data; } PERSISTENT_CACHE_ENTRY; + WINPR_ATTR_NODISCARD FREERDP_API int persistent_cache_get_version(rdpPersistentCache* persistent); + + WINPR_ATTR_NODISCARD FREERDP_API int persistent_cache_get_count(rdpPersistentCache* persistent); + WINPR_ATTR_NODISCARD FREERDP_API int persistent_cache_read_entry(rdpPersistentCache* persistent, PERSISTENT_CACHE_ENTRY* entry); + + WINPR_ATTR_NODISCARD FREERDP_API int persistent_cache_write_entry(rdpPersistentCache* persistent, const PERSISTENT_CACHE_ENTRY* entry); + WINPR_ATTR_NODISCARD FREERDP_API int persistent_cache_open(rdpPersistentCache* persistent, const char* filename, BOOL write, UINT32 version); + FREERDP_API int persistent_cache_close(rdpPersistentCache* persistent); FREERDP_API void persistent_cache_free(rdpPersistentCache* persistent); diff --git a/include/freerdp/channels/channels.h b/include/freerdp/channels/channels.h index 9b860c5fa..15715a892 100644 --- a/include/freerdp/channels/channels.h +++ b/include/freerdp/channels/channels.h @@ -36,20 +36,27 @@ extern "C" /** @since version 3.9.0 */ typedef BOOL (*freerdp_channel_handle_fkt_t)(rdpContext* context, void* userdata); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_channels_client_load(rdpChannels* channels, rdpSettings* settings, PVIRTUALCHANNELENTRY entry, void* data); + + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_channels_client_load_ex(rdpChannels* channels, rdpSettings* settings, PVIRTUALCHANNELENTRYEX entryEx, void* data); + + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_channels_load_plugin(rdpChannels* channels, rdpSettings* settings, const char* name, void* data); #if defined(WITH_FREERDP_DEPRECATED) WINPR_DEPRECATED_VAR("Use freerdp_channels_get_event_handle", - FREERDP_API BOOL freerdp_channels_get_fds( + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_channels_get_fds( rdpChannels* channels, freerdp* instance, void** read_fds, int* read_count, void** write_fds, int* write_count)); #endif + FREERDP_API BOOL freerdp_channels_check_fds(rdpChannels* channels, freerdp* instance); + WINPR_ATTR_NODISCARD FREERDP_API void* freerdp_channels_get_static_channel_interface(rdpChannels* channels, const char* name); @@ -73,6 +80,7 @@ extern "C" * * @return \b TRUE if successful, \b FALSE if any error occurs. * @since version 3.9.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_channel_register(rdpChannels* channels, HANDLE handle, freerdp_channel_handle_fkt_t fkt, void* userdata); @@ -87,15 +95,23 @@ extern "C" * @since version 3.9.0 */ FREERDP_API BOOL freerdp_client_channel_unregister(rdpChannels* channels, HANDLE handle); + WINPR_ATTR_NODISCARD FREERDP_API HANDLE freerdp_channels_get_event_handle(freerdp* instance); + + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_channels_process_pending_messages(freerdp* instance); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_channels_data(freerdp* instance, UINT16 channelId, const BYTE* data, size_t dataSize, UINT32 flags, size_t totalSize); + WINPR_ATTR_NODISCARD FREERDP_API UINT16 freerdp_channels_get_id_by_name(freerdp* instance, const char* channel_name); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_channels_get_name_by_id(freerdp* instance, UINT16 channelId); + WINPR_ATTR_NODISCARD FREERDP_API const WtsApiFunctionTable* FreeRDP_InitWtsApi(void); #ifdef __cplusplus diff --git a/include/freerdp/channels/wtsvc.h b/include/freerdp/channels/wtsvc.h index e8011a2f3..a577016e0 100644 --- a/include/freerdp/channels/wtsvc.h +++ b/include/freerdp/channels/wtsvc.h @@ -63,12 +63,24 @@ extern "C" FREERDP_API void WTSVirtualChannelManagerGetFileDescriptor( HANDLE hServer, void** fds, int* fds_count)); #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL WTSVirtualChannelManagerOpen(HANDLE hServer); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL WTSVirtualChannelManagerCheckFileDescriptor(HANDLE hServer); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL WTSVirtualChannelManagerCheckFileDescriptorEx(HANDLE hServer, BOOL autoOpen); + + WINPR_ATTR_NODISCARD FREERDP_API HANDLE WTSVirtualChannelManagerGetEventHandle(HANDLE hServer); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL WTSVirtualChannelManagerIsChannelJoined(HANDLE hServer, const char* name); + + WINPR_ATTR_NODISCARD FREERDP_API BYTE WTSVirtualChannelManagerGetDrdynvcState(HANDLE hServer); + FREERDP_API void WTSVirtualChannelManagerSetDVCCreationCallback(HANDLE hServer, psDVCCreationStatusCallback cb, void* userdata); @@ -76,18 +88,38 @@ extern "C" /** * Extended FreeRDP WTS functions for channel handling */ + WINPR_ATTR_NODISCARD FREERDP_API UINT16 WTSChannelGetId(freerdp_peer* client, const char* channel_name); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL WTSIsChannelJoinedByName(freerdp_peer* client, const char* channel_name); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL WTSIsChannelJoinedById(freerdp_peer* client, UINT16 channel_id); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL WTSChannelSetHandleByName(freerdp_peer* client, const char* channel_name, void* handle); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL WTSChannelSetHandleById(freerdp_peer* client, UINT16 channel_id, void* handle); + + WINPR_ATTR_NODISCARD FREERDP_API void* WTSChannelGetHandleByName(freerdp_peer* client, const char* channel_name); + + WINPR_ATTR_NODISCARD FREERDP_API void* WTSChannelGetHandleById(freerdp_peer* client, UINT16 channel_id); + + WINPR_ATTR_NODISCARD FREERDP_API const char* WTSChannelGetName(freerdp_peer* client, UINT16 channel_id); + + WINPR_ATTR_NODISCARD FREERDP_API char** WTSGetAcceptedChannelNames(freerdp_peer* client, size_t* count); + + WINPR_ATTR_NODISCARD FREERDP_API INT64 WTSChannelGetOptions(freerdp_peer* client, UINT16 channel_id); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 WTSChannelGetIdByHandle(HANDLE hChannelHandle); #ifdef __cplusplus diff --git a/include/freerdp/client.h b/include/freerdp/client.h index 467e5ff2c..f3362ab2c 100644 --- a/include/freerdp/client.h +++ b/include/freerdp/client.h @@ -156,12 +156,18 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API rdpContext* freerdp_client_context_new(const RDP_CLIENT_ENTRY_POINTS* pEntryPoints); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_start(rdpContext* context); + FREERDP_API int freerdp_client_stop(rdpContext* context); + WINPR_ATTR_NODISCARD FREERDP_API freerdp* freerdp_client_get_instance(rdpContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API HANDLE freerdp_client_get_thread(rdpContext* context); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_settings_parse_command_line(rdpSettings* settings, int argc, char** argv, BOOL allowUnknown); @@ -178,36 +184,50 @@ extern "C" * @return >=0 for success, <0 in case of parsing failures * @since version 3.9.0 */ + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_settings_parse_command_line_ex( rdpSettings* settings, int argc, char** argv, BOOL allowUnknown, COMMAND_LINE_ARGUMENT_A* args, size_t count, freerdp_command_line_handle_option_t handle_option, void* handle_userdata); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_settings_parse_connection_file(rdpSettings* settings, const char* filename); + + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_settings_parse_connection_file_buffer(rdpSettings* settings, const BYTE* buffer, size_t size); + + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_settings_write_connection_file(const rdpSettings* settings, const char* filename, BOOL unicode); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_settings_parse_assistance_file(rdpSettings* settings, int argc, char* argv[]); + WINPR_ATTR_NODISCARD FREERDP_API BOOL client_cli_authenticate_ex(freerdp* instance, char** username, char** password, char** domain, rdp_auth_reason reason); + WINPR_ATTR_NODISCARD FREERDP_API BOOL client_cli_choose_smartcard(freerdp* instance, SmartcardCertInfo** cert_list, DWORD count, DWORD* choice, BOOL gateway); + WINPR_ATTR_NODISCARD FREERDP_API int client_cli_logon_error_info(freerdp* instance, UINT32 data, UINT32 type); + WINPR_ATTR_NODISCARD FREERDP_API BOOL client_cli_get_access_token(freerdp* instance, AccessTokenType tokenType, char** token, size_t count, ...); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL client_common_get_access_token(freerdp* instance, const char* request, char** token); + WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T client_common_retry_dialog(freerdp* instance, const char* what, size_t current, void* userarg); @@ -220,43 +240,49 @@ extern "C" #if defined(WITH_FREERDP_DEPRECATED) WINPR_DEPRECATED_VAR("Use client_cli_authenticate_ex", - FREERDP_API BOOL client_cli_authenticate(freerdp* instance, - char** username, char** password, - char** domain)); + WINPR_ATTR_NODISCARD FREERDP_API BOOL client_cli_authenticate( + freerdp* instance, char** username, char** password, char** domain)); WINPR_DEPRECATED_VAR("Use client_cli_authenticate_ex", - FREERDP_API BOOL client_cli_gw_authenticate( + WINPR_ATTR_NODISCARD FREERDP_API BOOL client_cli_gw_authenticate( freerdp* instance, char** username, char** password, char** domain)); WINPR_DEPRECATED_VAR("Use client_cli_verify_certificate_ex", - FREERDP_API DWORD client_cli_verify_certificate( + WINPR_ATTR_NODISCARD FREERDP_API DWORD client_cli_verify_certificate( freerdp* instance, const char* common_name, const char* subject, const char* issuer, const char* fingerprint, BOOL host_mismatch)); #endif + WINPR_ATTR_NODISCARD FREERDP_API DWORD client_cli_verify_certificate_ex(freerdp* instance, const char* host, UINT16 port, const char* common_name, const char* subject, const char* issuer, const char* fingerprint, DWORD flags); #if defined(WITH_FREERDP_DEPRECATED) - WINPR_DEPRECATED_VAR("Use client_cli_verify_changed_certificate_ex", - FREERDP_API DWORD client_cli_verify_changed_certificate( - freerdp* instance, const char* common_name, const char* subject, - const char* issuer, const char* fingerprint, const char* old_subject, - const char* old_issuer, const char* old_fingerprint)); + WINPR_DEPRECATED_VAR( + "Use client_cli_verify_changed_certificate_ex", + WINPR_ATTR_NODISCARD FREERDP_API DWORD client_cli_verify_changed_certificate( + freerdp* instance, const char* common_name, const char* subject, const char* issuer, + const char* fingerprint, const char* old_subject, const char* old_issuer, + const char* old_fingerprint)); #endif + WINPR_ATTR_NODISCARD FREERDP_API DWORD client_cli_verify_changed_certificate_ex( freerdp* instance, const char* host, UINT16 port, const char* common_name, const char* subject, const char* issuer, const char* fingerprint, const char* old_subject, const char* old_issuer, const char* old_fingerprint, DWORD flags); + WINPR_ATTR_NODISCARD FREERDP_API BOOL client_cli_present_gateway_message(freerdp* instance, UINT32 type, BOOL isDisplayMandatory, BOOL isConsentMandatory, size_t length, const WCHAR* message); + WINPR_ATTR_NODISCARD FREERDP_API BOOL client_auto_reconnect(freerdp* instance); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL client_auto_reconnect_ex(freerdp* instance, BOOL (*window_events)(freerdp* instance)); @@ -289,6 +315,7 @@ extern "C" FREERDP_API BOOL freerdp_client_handle_pen(rdpClientContext* cctx, UINT32 flags, INT32 deviceid, ...); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_is_pen(rdpClientContext* cctx, INT32 deviceid); FREERDP_API BOOL freerdp_client_pen_cancel_all(rdpClientContext* cctx); @@ -302,6 +329,7 @@ extern "C" * * @return \b TRUE if relative mouse events are to be sent, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_use_relative_mouse_events(rdpClientContext* cctx); FREERDP_API BOOL freerdp_client_send_button_event(rdpClientContext* cctx, BOOL relative, @@ -311,12 +339,16 @@ extern "C" BOOL relative, UINT16 mflags, INT32 x, INT32 y); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_common_stop(rdpContext* context); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_load_channels(freerdp* instance); #if defined(CHANNEL_ENCOMSP_CLIENT) FREERDP_API BOOL freerdp_client_encomsp_toggle_control(EncomspClientContext* encomsp); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_encomsp_set_control(EncomspClientContext* encomsp, BOOL control); #endif diff --git a/include/freerdp/client/channels.h b/include/freerdp/client/channels.h index cfdc86616..981450b36 100644 --- a/include/freerdp/client/channels.h +++ b/include/freerdp/client/channels.h @@ -68,18 +68,25 @@ extern "C" }; #if defined(WITH_CHANNELS) + WINPR_ATTR_NODISCARD FREERDP_API void* freerdp_channels_client_find_static_entry(const char* name, const char* identifier); + + WINPR_ATTR_NODISCARD FREERDP_API PVIRTUALCHANNELENTRY freerdp_channels_load_static_addin_entry(LPCSTR pszName, LPCSTR pszSubsystem, LPCSTR pszType, DWORD dwFlags); + WINPR_ATTR_NODISCARD FREERDP_API FREERDP_ADDIN** freerdp_channels_list_addins(LPCSTR lpName, LPCSTR lpSubsystem, LPCSTR lpType, DWORD dwFlags); FREERDP_API void freerdp_channels_addin_list_free(FREERDP_ADDIN** ppAddins); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_initialize_generic_dynvc_plugin(GENERIC_DYNVC_PLUGIN* plugin); + + WINPR_ATTR_NODISCARD FREERDP_API UINT freerdp_generic_DVCPluginEntry( IDRDYNVC_ENTRY_POINTS* pEntryPoints, const char* logTag, const char* name, size_t pluginSize, size_t channelCallbackSize, diff --git a/include/freerdp/client/client_cliprdr_file.h b/include/freerdp/client/client_cliprdr_file.h index 526b52e19..1cce53950 100644 --- a/include/freerdp/client/client_cliprdr_file.h +++ b/include/freerdp/client/client_cliprdr_file.h @@ -44,6 +44,7 @@ extern "C" * * \return \b TRUE if files can be pasted locally, \b FALSE if not (e.g. no FUSE, ...) */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL cliprdr_file_context_has_local_support(CliprdrFileContext* file); /**! \brief sets state of local file paste support @@ -54,25 +55,35 @@ extern "C" * * \return \b TRUE for success, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL cliprdr_file_context_set_locally_available(CliprdrFileContext* file, BOOL available); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL cliprdr_file_context_remote_set_flags(CliprdrFileContext* file, UINT32 flags); + + WINPR_ATTR_NODISCARD FREERDP_API UINT32 cliprdr_file_context_remote_get_flags(CliprdrFileContext* file); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 cliprdr_file_context_current_flags(CliprdrFileContext* file); + WINPR_ATTR_NODISCARD FREERDP_API void* cliprdr_file_context_get_context(CliprdrFileContext* file); FREERDP_API BOOL cliprdr_file_context_init(CliprdrFileContext* file, CliprdrClientContext* cliprdr); + FREERDP_API BOOL cliprdr_file_context_uninit(CliprdrFileContext* file, CliprdrClientContext* cliprdr); FREERDP_API BOOL cliprdr_file_context_clear(CliprdrFileContext* file); + WINPR_ATTR_NODISCARD FREERDP_API UINT cliprdr_file_context_notify_new_server_format_list(CliprdrFileContext* file_context); + WINPR_ATTR_NODISCARD FREERDP_API UINT cliprdr_file_context_notify_new_client_format_list(CliprdrFileContext* file_context); @@ -95,6 +106,7 @@ extern "C" * * \return \b TRUE for success, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL cliprdr_file_context_update_server_data(CliprdrFileContext* file, wClipboard* clip, const void* data, size_t size); diff --git a/include/freerdp/client/cmdline.h b/include/freerdp/client/cmdline.h index 4e0121274..018c481df 100644 --- a/include/freerdp/client/cmdline.h +++ b/include/freerdp/client/cmdline.h @@ -52,6 +52,7 @@ extern "C" * * \return \b 0 in case of success, a negative number in case of failure. */ + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings, int argc, char** argv, BOOL allowUnknown); @@ -72,18 +73,24 @@ extern "C" * * \return \b 0 in case of success, a negative number in case of failure. */ + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_settings_parse_command_line_arguments_ex( rdpSettings* settings, int argc, char** argv, BOOL allowUnknown, COMMAND_LINE_ARGUMENT_A* args, size_t count, freerdp_command_line_handle_option_t handle_option, void* handle_userdata); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_settings_command_line_status_print(rdpSettings* settings, int status, int argc, char** argv); + + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_settings_command_line_status_print_ex(rdpSettings* settings, int status, int argc, char** argv, const COMMAND_LINE_ARGUMENT_A* custom); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_load_addins(rdpChannels* channels, rdpSettings* settings); /** Print a command line warning about the component being unmaintained. @@ -116,6 +123,7 @@ extern "C" * @since version 3.10.0 */ FREERDP_API BOOL freerdp_client_print_version_ex(int argc, char** argv); + FREERDP_API BOOL freerdp_client_print_buildconfig(void); /** @brief prints the buidconfiguration of the client including the binary name extracted from @@ -129,21 +137,37 @@ extern "C" * @since version 3.10.0 */ FREERDP_API BOOL freerdp_client_print_buildconfig_ex(int argc, char** argv); + FREERDP_API BOOL freerdp_client_print_command_line_help(int argc, char** argv); + FREERDP_API BOOL freerdp_client_print_command_line_help_ex( int argc, char** argv, const COMMAND_LINE_ARGUMENT_A* custom); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_parse_username(const char* username, char** user, char** domain); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_parse_hostname(const char* hostname, char** host, int* port); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_set_connection_type(rdpSettings* settings, UINT32 type); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_add_device_channel(rdpSettings* settings, size_t count, const char* const* params); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_add_static_channel(rdpSettings* settings, size_t count, const char* const* params); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_del_static_channel(rdpSettings* settings, const char* name); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_add_dynamic_channel(rdpSettings* settings, size_t count, const char* const* params); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_del_dynamic_channel(rdpSettings* settings, const char* name); #ifdef __cplusplus diff --git a/include/freerdp/client/file.h b/include/freerdp/client/file.h index d22e2af5b..89f222ede 100644 --- a/include/freerdp/client/file.h +++ b/include/freerdp/client/file.h @@ -40,11 +40,18 @@ extern "C" * set the context for the callback with this function. */ FREERDP_API void freerdp_client_rdp_file_set_callback_context(rdpFile* file, void* context); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_parse_rdp_file(rdpFile* file, const char* name); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_parse_rdp_file_ex(rdpFile* file, const char* name, rdp_file_fkt_parse parse); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_parse_rdp_file_buffer(rdpFile* file, const BYTE* buffer, size_t size); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_parse_rdp_file_buffer_ex(rdpFile* file, const BYTE* buffer, size_t size, rdp_file_fkt_parse parse); @@ -57,6 +64,7 @@ extern "C" * @return \b TRUE for success, \b FALSE otherwise * @version since 3.17.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_populate_settings_from_rdp_file_unchecked( const rdpFile* file, rdpSettings* settings); @@ -67,23 +75,35 @@ extern "C" * * @return \b TRUE for success, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_populate_settings_from_rdp_file(const rdpFile* file, rdpSettings* settings); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_populate_rdp_file_from_settings(rdpFile* file, const rdpSettings* settings); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_write_rdp_file(const rdpFile* file, const char* name, BOOL unicode); + + WINPR_ATTR_NODISCARD FREERDP_API size_t freerdp_client_write_rdp_file_buffer(const rdpFile* file, char* buffer, size_t size); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_rdp_file_set_string_option(rdpFile* file, const char* name, const char* value); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_client_rdp_file_get_string_option(const rdpFile* file, const char* name); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_rdp_file_set_integer_option(rdpFile* file, const char* name, int value); + + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_client_rdp_file_get_integer_option(const rdpFile* file, const char* name); diff --git a/include/freerdp/client/rail.h b/include/freerdp/client/rail.h index b06cf83fe..da1f10639 100644 --- a/include/freerdp/client/rail.h +++ b/include/freerdp/client/rail.h @@ -134,6 +134,7 @@ extern "C" WINPR_ATTR_NODISCARD pcRailClientCaretBlinkRate ClientCaretBlinkRate; }; + WINPR_ATTR_NODISCARD FREERDP_API UINT client_rail_server_start_cmd(RailClientContext* context); #ifdef __cplusplus diff --git a/include/freerdp/client/rdpsnd.h b/include/freerdp/client/rdpsnd.h index 9697a8859..a1c582b71 100644 --- a/include/freerdp/client/rdpsnd.h +++ b/include/freerdp/client/rdpsnd.h @@ -83,6 +83,7 @@ typedef FREERDP_RDPSND_DEVICE_ENTRY_POINTS* PFREERDP_RDPSND_DEVICE_ENTRY_POINTS; typedef UINT(VCAPITYPE* PFREERDP_RDPSND_DEVICE_ENTRY)( PFREERDP_RDPSND_DEVICE_ENTRY_POINTS pEntryPoints); +WINPR_ATTR_NODISCARD FREERDP_API rdpContext* freerdp_rdpsnd_get_context(rdpsndPlugin* plugin); #ifdef __cplusplus diff --git a/include/freerdp/client/video.h b/include/freerdp/client/video.h index 840664465..f2bc4d855 100644 --- a/include/freerdp/client/video.h +++ b/include/freerdp/client/video.h @@ -63,6 +63,7 @@ extern "C" pcVideoDeleteSurface deleteSurface; }; + WINPR_ATTR_NODISCARD FREERDP_API VideoSurface* VideoClient_CreateCommonContext(size_t size, UINT32 x, UINT32 y, UINT32 w, UINT32 h); FREERDP_API void VideoClient_DestroyCommonContext(VideoSurface* surface); diff --git a/include/freerdp/codec/audio.h b/include/freerdp/codec/audio.h index 7c824ed83..57de3c55d 100644 --- a/include/freerdp/codec/audio.h +++ b/include/freerdp/codec/audio.h @@ -203,18 +203,26 @@ extern "C" * Audio Format Functions */ + WINPR_ATTR_NODISCARD FREERDP_API UINT32 audio_format_compute_time_length(const AUDIO_FORMAT* format, size_t size); + WINPR_ATTR_NODISCARD FREERDP_API const char* audio_format_get_tag_string(UINT16 wFormatTag); FREERDP_API void audio_format_print(wLog* log, DWORD level, const AUDIO_FORMAT* format); FREERDP_API void audio_formats_print(wLog* log, DWORD level, const AUDIO_FORMAT* formats, UINT16 count); + WINPR_ATTR_NODISCARD FREERDP_API BOOL audio_format_read(wStream* s, AUDIO_FORMAT* format); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL audio_format_write(wStream* s, const AUDIO_FORMAT* format); + FREERDP_API BOOL audio_format_copy(const AUDIO_FORMAT* WINPR_RESTRICT srcFormat, AUDIO_FORMAT* WINPR_RESTRICT dstFormat); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL audio_format_compatible(const AUDIO_FORMAT* with, const AUDIO_FORMAT* what); FREERDP_API void audio_format_free(AUDIO_FORMAT* format); diff --git a/include/freerdp/codec/bitmap.h b/include/freerdp/codec/bitmap.h index 86fecf96e..1cd0496f5 100644 --- a/include/freerdp/codec/bitmap.h +++ b/include/freerdp/codec/bitmap.h @@ -33,6 +33,7 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T freerdp_bitmap_compress(const void* WINPR_RESTRICT srcData, UINT32 width, UINT32 height, wStream* WINPR_RESTRICT s, UINT32 bpp, UINT32 byte_limit, UINT32 start_line, diff --git a/include/freerdp/codec/clear.h b/include/freerdp/codec/clear.h index 8e6fa87e7..eb60c1cc5 100644 --- a/include/freerdp/codec/clear.h +++ b/include/freerdp/codec/clear.h @@ -33,11 +33,13 @@ extern "C" typedef struct S_CLEAR_CONTEXT CLEAR_CONTEXT; + WINPR_ATTR_NODISCARD FREERDP_API int clear_compress(CLEAR_CONTEXT* WINPR_RESTRICT clear, const BYTE* WINPR_RESTRICT pSrcData, UINT32 SrcSize, BYTE** WINPR_RESTRICT ppDstData, UINT32* WINPR_RESTRICT pDstSize); + WINPR_ATTR_NODISCARD FREERDP_API INT32 clear_decompress(CLEAR_CONTEXT* WINPR_RESTRICT clear, const BYTE* WINPR_RESTRICT pSrcData, UINT32 SrcSize, UINT32 nWidth, UINT32 nHeight, BYTE* WINPR_RESTRICT pDstData, @@ -45,6 +47,7 @@ extern "C" UINT32 nYDst, UINT32 nDstWidth, UINT32 nDstHeight, const gdiPalette* WINPR_RESTRICT palette); + WINPR_ATTR_NODISCARD FREERDP_API BOOL clear_context_reset(CLEAR_CONTEXT* WINPR_RESTRICT clear); FREERDP_API void clear_context_free(CLEAR_CONTEXT* WINPR_RESTRICT clear); diff --git a/include/freerdp/codec/color.h b/include/freerdp/codec/color.h index 4d41c3c9c..e7f90b94e 100644 --- a/include/freerdp/codec/color.h +++ b/include/freerdp/codec/color.h @@ -117,21 +117,23 @@ typedef struct gdi_palette gdiPalette; /* Compare two color formats but ignore differences in alpha channel. */ - FREERDP_API DWORD FreeRDPAreColorFormatsEqualNoAlpha(DWORD first, DWORD second); +WINPR_ATTR_NODISCARD +FREERDP_API DWORD FreeRDPAreColorFormatsEqualNoAlpha(DWORD first, DWORD second); - /* Color Space Conversions: http://msdn.microsoft.com/en-us/library/ff566496/ */ +/* Color Space Conversions: http://msdn.microsoft.com/en-us/library/ff566496/ */ - /*** - * - * Get a string representation of a color - * - * @param format The pixel color format - * - * @return A string representation of format - */ +/*** + * + * Get a string representation of a color + * + * @param format The pixel color format + * + * @return A string representation of format + */ #if defined(WITH_FREERDP_DEPRECATED) #define GetColorFormatName(...) FreeRDPGetColorFormatName(__VA_ARGS__) #endif + WINPR_ATTR_NODISCARD FREERDP_API const char* FreeRDPGetColorFormatName(UINT32 format); /** @brief convert a string to a \ref PIXEL_FORMAT @@ -141,21 +143,22 @@ typedef struct gdi_palette gdiPalette; * @return the \ref PIXEL_FORMAT value or \b 0 for failure * @since version 3.18.0 */ + WINPR_ATTR_NODISCARD FREERDP_API uint32_t FreeRDPGetColorFromatFromName(const char* name); - /*** - * - * Converts a pixel color in internal representation to its red, green, blue - * and alpha components. - * - * @param color The color in format internal representation - * @param format one of PIXEL_FORMAT_* color format defines - * @param _r red color value - * @param _g green color value - * @param _b blue color value - * @param _a alpha color value - * @param palette palette to use (only used for 8 bit color!) - */ +/*** + * + * Converts a pixel color in internal representation to its red, green, blue + * and alpha components. + * + * @param color The color in format internal representation + * @param format one of PIXEL_FORMAT_* color format defines + * @param _r red color value + * @param _g green color value + * @param _b blue color value + * @param _a alpha color value + * @param palette palette to use (only used for 8 bit color!) + */ #if defined(WITH_FREERDP_DEPRECATED) #define SplitColor(...) FreeRDPSplitColor(__VA_ARGS__) #endif @@ -178,6 +181,7 @@ typedef struct gdi_palette gdiPalette; #if defined(WITH_FREERDP_DEPRECATED) #define GetColor(...) FreeRDPGetColor(__VA_ARGS__) #endif + WINPR_ATTR_NODISCARD FREERDP_API UINT32 FreeRDPGetColor(UINT32 format, BYTE r, BYTE g, BYTE b, BYTE a); /*** @@ -191,6 +195,7 @@ typedef struct gdi_palette gdiPalette; #if defined(WITH_FREERDP_DEPRECATED) #define GetBitsPerPixel(...) FreeRDPGetBitsPerPixel(__VA_ARGS__) #endif + WINPR_ATTR_NODISCARD static inline UINT32 FreeRDPGetBitsPerPixel(UINT32 format) { return (((format) >> 24) & 0x3F); @@ -204,6 +209,7 @@ typedef struct gdi_palette gdiPalette; #if defined(WITH_FREERDP_DEPRECATED) #define ColorHasAlpha(...) FreeRDPColorHasAlpha(__VA_ARGS__) #endif + WINPR_ATTR_NODISCARD static inline BOOL FreeRDPColorHasAlpha(UINT32 format) { UINT32 alpha = (((format) >> 12) & 0x0F); @@ -226,6 +232,7 @@ typedef struct gdi_palette gdiPalette; #if defined(WITH_FREERDP_DEPRECATED) #define ReadColor(...) FreeRDPReadColor(__VA_ARGS__) #endif + WINPR_ATTR_NODISCARD FREERDP_API UINT32 FreeRDPReadColor(const BYTE* WINPR_RESTRICT src, UINT32 format); /*** @@ -243,6 +250,7 @@ typedef struct gdi_palette gdiPalette; #define WriteColorIgnoreAlpha(...) FreeRDPWriteColorIgnoreAlpha(__VA_ARGS__) #endif FREERDP_API BOOL FreeRDPWriteColor(BYTE* WINPR_RESTRICT dst, UINT32 format, UINT32 color); + FREERDP_API BOOL FreeRDPWriteColorIgnoreAlpha(BYTE* WINPR_RESTRICT dst, UINT32 format, UINT32 color); @@ -261,6 +269,7 @@ typedef struct gdi_palette gdiPalette; #if defined(WITH_FREERDP_DEPRECATED) #define ConvertColor(...) FreeRDPConvertColor(__VA_ARGS__) #endif + WINPR_ATTR_NODISCARD static inline UINT32 FreeRDPConvertColor(UINT32 color, UINT32 srcFormat, UINT32 dstFormat, const gdiPalette* palette) { @@ -283,6 +292,7 @@ typedef struct gdi_palette gdiPalette; #if defined(WITH_FREERDP_DEPRECATED) #define GetBytesPerPixel(...) FreeRDPGetBytesPerPixel(__VA_ARGS__) #endif + WINPR_ATTR_NODISCARD static inline UINT32 FreeRDPGetBytesPerPixel(UINT32 format) { return (FreeRDPGetBitsPerPixel(format) + 7) / 8; @@ -337,6 +347,7 @@ typedef struct gdi_palette gdiPalette; * * @return TRUE if success, FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_image_copy_from_monochrome( BYTE* WINPR_RESTRICT pDstData, UINT32 DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst, UINT32 nWidth, UINT32 nHeight, const BYTE* WINPR_RESTRICT pSrcData, @@ -361,6 +372,7 @@ typedef struct gdi_palette gdiPalette; * * @return TRUE if success, FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_image_copy_from_icon_data( BYTE* WINPR_RESTRICT pDstData, UINT32 DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst, UINT16 nWidth, UINT16 nHeight, const BYTE* WINPR_RESTRICT bitsColor, @@ -385,6 +397,7 @@ typedef struct gdi_palette gdiPalette; * * @return TRUE if success, FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_image_copy_from_pointer_data( BYTE* WINPR_RESTRICT pDstData, UINT32 DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst, UINT32 nWidth, UINT32 nHeight, const BYTE* WINPR_RESTRICT xorMask, @@ -411,6 +424,7 @@ typedef struct gdi_palette gdiPalette; * * @return TRUE if success, FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_image_copy(BYTE* pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst, UINT32 nWidth, UINT32 nHeight, const BYTE* pSrcData, DWORD SrcFormat, UINT32 nSrcStep, @@ -421,6 +435,7 @@ typedef struct gdi_palette gdiPalette; * @brief Same as @ref freerdp_image_copy but only for overlapping source and destination * @since version 3.6.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_image_copy_overlap( BYTE* pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst, UINT32 nWidth, UINT32 nHeight, const BYTE* pSrcData, DWORD SrcFormat, UINT32 nSrcStep, UINT32 nXSrc, @@ -429,6 +444,7 @@ typedef struct gdi_palette gdiPalette; /*** Same as @ref freerdp_image_copy but only for non overlapping source and destination * @since version 3.6.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_image_copy_no_overlap( BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst, UINT32 nWidth, UINT32 nHeight, const BYTE* WINPR_RESTRICT pSrcData, DWORD SrcFormat, @@ -454,6 +470,7 @@ typedef struct gdi_palette gdiPalette; * * @return TRUE if success, FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_image_scale(BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst, UINT32 nDstWidth, UINT32 nDstHeight, @@ -475,6 +492,7 @@ typedef struct gdi_palette gdiPalette; * * @return TRUE if success, FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_image_fill(BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst, UINT32 nWidth, UINT32 nHeight, UINT32 color); @@ -499,6 +517,7 @@ typedef struct gdi_palette gdiPalette; * * @since version 3.13.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_image_fill_ex(BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst, UINT32 nWidth, UINT32 nHeight, UINT32 color, diff --git a/include/freerdp/codec/dsp.h b/include/freerdp/codec/dsp.h index c23857c26..c531599c1 100644 --- a/include/freerdp/codec/dsp.h +++ b/include/freerdp/codec/dsp.h @@ -38,17 +38,23 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API FREERDP_DSP_CONTEXT* freerdp_dsp_context_new(BOOL encoder); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_dsp_supports_format(const AUDIO_FORMAT* WINPR_RESTRICT format, BOOL encode); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_dsp_encode(FREERDP_DSP_CONTEXT* WINPR_RESTRICT context, const AUDIO_FORMAT* WINPR_RESTRICT srcFormat, const BYTE* WINPR_RESTRICT data, size_t length, wStream* WINPR_RESTRICT out); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_dsp_decode(FREERDP_DSP_CONTEXT* WINPR_RESTRICT context, const AUDIO_FORMAT* WINPR_RESTRICT srcFormat, const BYTE* WINPR_RESTRICT data, size_t length, wStream* WINPR_RESTRICT out); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_dsp_context_reset(FREERDP_DSP_CONTEXT* WINPR_RESTRICT context, const AUDIO_FORMAT* WINPR_RESTRICT targetFormat, UINT32 FramesPerPacket); diff --git a/include/freerdp/codec/h264.h b/include/freerdp/codec/h264.h index 4974c1a75..16fc8cc5d 100644 --- a/include/freerdp/codec/h264.h +++ b/include/freerdp/codec/h264.h @@ -67,10 +67,14 @@ extern "C" FREERDP_API void free_h264_metablock(RDPGFX_H264_METABLOCK* meta); + WINPR_ATTR_NODISCARD FREERDP_API BOOL h264_context_set_option(H264_CONTEXT* h264, H264_CONTEXT_OPTION option, UINT32 value); + + WINPR_ATTR_NODISCARD FREERDP_API UINT32 h264_context_get_option(H264_CONTEXT* h264, H264_CONTEXT_OPTION option); + WINPR_ATTR_NODISCARD FREERDP_API INT32 avc420_compress(H264_CONTEXT* h264, const BYTE* pSrcData, DWORD SrcFormat, UINT32 nSrcStep, UINT32 nSrcWidth, UINT32 nSrcHeight, const RECTANGLE_16* regionRect, BYTE** ppDstData, @@ -87,6 +91,7 @@ extern "C" * @return \b >= 0 for success, \b <0 for an error * @since version 3.6.0 */ + WINPR_ATTR_NODISCARD FREERDP_API INT32 h264_get_yuv_buffer(H264_CONTEXT* h264, UINT32 nSrcStride, UINT32 nSrcWidth, UINT32 nSrcHeight, BYTE* YUVData[3], UINT32 stride[3]); @@ -99,13 +104,16 @@ extern "C" * @return \b >= 0 for success, \b <0 for an error * @since version 3.6.0 */ + WINPR_ATTR_NODISCARD FREERDP_API INT32 h264_compress(H264_CONTEXT* h264, BYTE** ppDstData, UINT32* pDstSize); + WINPR_ATTR_NODISCARD FREERDP_API INT32 avc420_decompress(H264_CONTEXT* h264, const BYTE* pSrcData, UINT32 SrcSize, BYTE* pDstData, DWORD DstFormat, UINT32 nDstStep, UINT32 nDstWidth, UINT32 nDstHeight, const RECTANGLE_16* regionRects, UINT32 numRegionRect); + WINPR_ATTR_NODISCARD FREERDP_API INT32 avc444_compress(H264_CONTEXT* h264, const BYTE* pSrcData, DWORD SrcFormat, UINT32 nSrcStep, UINT32 nSrcWidth, UINT32 nSrcHeight, BYTE version, const RECTANGLE_16* regionRect, BYTE* op, @@ -113,6 +121,7 @@ extern "C" UINT32* pAuxDstSize, RDPGFX_H264_METABLOCK* meta, RDPGFX_H264_METABLOCK* auxMeta); + WINPR_ATTR_NODISCARD FREERDP_API INT32 avc444_decompress(H264_CONTEXT* h264, BYTE op, const RECTANGLE_16* regionRects, UINT32 numRegionRect, const BYTE* pSrcData, UINT32 SrcSize, @@ -121,6 +130,7 @@ extern "C" DWORD DstFormat, UINT32 nDstStep, UINT32 nDstWidth, UINT32 nDstHeight, UINT32 codecId); + WINPR_ATTR_NODISCARD FREERDP_API BOOL h264_context_reset(H264_CONTEXT* h264, UINT32 width, UINT32 height); FREERDP_API void h264_context_free(H264_CONTEXT* h264); diff --git a/include/freerdp/codec/interleaved.h b/include/freerdp/codec/interleaved.h index 16b8f92f8..e454f132e 100644 --- a/include/freerdp/codec/interleaved.h +++ b/include/freerdp/codec/interleaved.h @@ -33,6 +33,7 @@ extern "C" typedef struct S_BITMAP_INTERLEAVED_CONTEXT BITMAP_INTERLEAVED_CONTEXT; + WINPR_ATTR_NODISCARD FREERDP_API BOOL interleaved_decompress(BITMAP_INTERLEAVED_CONTEXT* WINPR_RESTRICT interleaved, const BYTE* WINPR_RESTRICT pSrcData, UINT32 SrcSize, UINT32 nSrcWidth, UINT32 nSrcHeight, UINT32 bpp, @@ -41,6 +42,7 @@ extern "C" UINT32 nDstWidth, UINT32 nDstHeight, const gdiPalette* WINPR_RESTRICT palette); + WINPR_ATTR_NODISCARD FREERDP_API BOOL interleaved_compress(BITMAP_INTERLEAVED_CONTEXT* WINPR_RESTRICT interleaved, BYTE* WINPR_RESTRICT pDstData, UINT32* WINPR_RESTRICT pDstSize, UINT32 nWidth, @@ -49,6 +51,7 @@ extern "C" UINT32 nYSrc, const gdiPalette* WINPR_RESTRICT palette, UINT32 bpp); + WINPR_ATTR_NODISCARD FREERDP_API BOOL bitmap_interleaved_context_reset(BITMAP_INTERLEAVED_CONTEXT* WINPR_RESTRICT interleaved); diff --git a/include/freerdp/codec/jpeg.h b/include/freerdp/codec/jpeg.h index b9621fd99..7a0b6511c 100644 --- a/include/freerdp/codec/jpeg.h +++ b/include/freerdp/codec/jpeg.h @@ -28,6 +28,7 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL jpeg_decompress(const BYTE* input, BYTE* output, int width, int height, int size, int bpp); diff --git a/include/freerdp/codec/nsc.h b/include/freerdp/codec/nsc.h index c28d79f6d..6c201eb2f 100644 --- a/include/freerdp/codec/nsc.h +++ b/include/freerdp/codec/nsc.h @@ -48,8 +48,8 @@ extern "C" #if defined(WITH_FREERDP_DEPRECATED) WINPR_DEPRECATED_VAR("Use nsc_context_set_parameters(NSC_COLOR_FORMAT)", - FREERDP_API BOOL nsc_context_set_pixel_format(NSC_CONTEXT* context, - UINT32 pixel_format)); + WINPR_ATTR_NODISCARD FREERDP_API BOOL nsc_context_set_pixel_format( + NSC_CONTEXT* context, UINT32 pixel_format)); #endif /** @brief Set a \ref NSC_PARAMETER for a \ref NSC_CONTEXT @@ -60,6 +60,7 @@ extern "C" * * @return \b TRUE if successful, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL nsc_context_set_parameters(NSC_CONTEXT* WINPR_RESTRICT context, NSC_PARAMETER what, UINT32 value); @@ -84,6 +85,7 @@ extern "C" * * @return \b TRUE in case of success, \b FALSE for any error. Check WLog for details. */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL nsc_process_message(NSC_CONTEXT* WINPR_RESTRICT context, UINT16 bpp, UINT32 width, UINT32 height, const BYTE* data, UINT32 length, BYTE* WINPR_RESTRICT pDstData, @@ -102,6 +104,7 @@ extern "C" * * @bug Versions < 3.23.0 do not support \b 0 for scanlines and abort. */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL nsc_compose_message(NSC_CONTEXT* WINPR_RESTRICT context, wStream* WINPR_RESTRICT s, const BYTE* WINPR_RESTRICT bmpdata, UINT32 width, @@ -111,11 +114,10 @@ extern "C" WINPR_DEPRECATED_VAR( "[since 3.23.0] deprecated, insecure! missing length checks. use nsc_process_message", - FREERDP_API BOOL nsc_decompose_message(NSC_CONTEXT* WINPR_RESTRICT context, - wStream* WINPR_RESTRICT s, - BYTE* WINPR_RESTRICT bmpdata, UINT32 x, UINT32 y, - UINT32 width, UINT32 height, UINT32 rowstride, - UINT32 format, UINT32 flip)); + WINPR_ATTR_NODISCARD FREERDP_API BOOL + nsc_decompose_message(NSC_CONTEXT* WINPR_RESTRICT context, wStream* WINPR_RESTRICT s, + BYTE* WINPR_RESTRICT bmpdata, UINT32 x, UINT32 y, UINT32 width, + UINT32 height, UINT32 rowstride, UINT32 format, UINT32 flip)); #endif /** @brief This function resets a \ref NSC_CONTEXT to a new resolution @@ -126,6 +128,7 @@ extern "C" * * @return \b TRUE if successful, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL nsc_context_reset(NSC_CONTEXT* WINPR_RESTRICT context, UINT32 width, UINT32 height); diff --git a/include/freerdp/codec/planar.h b/include/freerdp/codec/planar.h index 4fc75e26c..2cd8cafe6 100644 --- a/include/freerdp/codec/planar.h +++ b/include/freerdp/codec/planar.h @@ -41,12 +41,14 @@ extern "C" typedef struct S_BITMAP_PLANAR_CONTEXT BITMAP_PLANAR_CONTEXT; + WINPR_ATTR_NODISCARD FREERDP_API BYTE* freerdp_bitmap_compress_planar(BITMAP_PLANAR_CONTEXT* WINPR_RESTRICT context, const BYTE* WINPR_RESTRICT data, UINT32 format, UINT32 width, UINT32 height, UINT32 scanline, BYTE* WINPR_RESTRICT dstData, UINT32* WINPR_RESTRICT pDstSize); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_bitmap_planar_context_reset( BITMAP_PLANAR_CONTEXT* WINPR_RESTRICT context, UINT32 width, UINT32 height); @@ -64,7 +66,7 @@ extern "C" #if !defined(WITHOUT_FREERDP_3x_DEPRECATED) WINPR_DEPRECATED_VAR("use freerdp_bitmap_decompress_planar instead", - FREERDP_API BOOL planar_decompress( + WINPR_ATTR_NODISCARD FREERDP_API BOOL planar_decompress( BITMAP_PLANAR_CONTEXT* WINPR_RESTRICT planar, const BYTE* WINPR_RESTRICT pSrcData, UINT32 SrcSize, UINT32 nSrcWidth, UINT32 nSrcHeight, BYTE* WINPR_RESTRICT pDstData, UINT32 DstFormat, @@ -72,6 +74,7 @@ extern "C" UINT32 nDstHeight, BOOL vFlip)); #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_bitmap_decompress_planar( BITMAP_PLANAR_CONTEXT* WINPR_RESTRICT planar, const BYTE* WINPR_RESTRICT pSrcData, UINT32 SrcSize, UINT32 nSrcWidth, UINT32 nSrcHeight, BYTE* WINPR_RESTRICT pDstData, diff --git a/include/freerdp/codec/progressive.h b/include/freerdp/codec/progressive.h index 95c25f445..90223805e 100644 --- a/include/freerdp/codec/progressive.h +++ b/include/freerdp/codec/progressive.h @@ -37,6 +37,7 @@ extern "C" typedef struct S_PROGRESSIVE_CONTEXT PROGRESSIVE_CONTEXT; + WINPR_ATTR_NODISCARD FREERDP_API int progressive_compress(PROGRESSIVE_CONTEXT* WINPR_RESTRICT progressive, const BYTE* WINPR_RESTRICT pSrcData, UINT32 SrcSize, UINT32 SrcFormat, UINT32 Width, UINT32 Height, @@ -45,6 +46,7 @@ extern "C" BYTE** WINPR_RESTRICT ppDstData, UINT32* WINPR_RESTRICT pDstSize); + WINPR_ATTR_NODISCARD FREERDP_API INT32 progressive_decompress(PROGRESSIVE_CONTEXT* WINPR_RESTRICT progressive, const BYTE* WINPR_RESTRICT pSrcData, UINT32 SrcSize, BYTE* WINPR_RESTRICT pDstData, UINT32 DstFormat, @@ -52,13 +54,16 @@ extern "C" REGION16* WINPR_RESTRICT invalidRegion, UINT16 surfaceId, UINT32 frameId); + WINPR_ATTR_NODISCARD FREERDP_API INT32 progressive_create_surface_context(PROGRESSIVE_CONTEXT* WINPR_RESTRICT progressive, UINT16 surfaceId, UINT32 width, UINT32 height); + FREERDP_API int progressive_delete_surface_context(PROGRESSIVE_CONTEXT* WINPR_RESTRICT progressive, UINT16 surfaceId); + WINPR_ATTR_NODISCARD FREERDP_API BOOL progressive_context_reset(PROGRESSIVE_CONTEXT* WINPR_RESTRICT progressive); FREERDP_API void progressive_context_free(PROGRESSIVE_CONTEXT* progressive); @@ -81,6 +86,7 @@ extern "C" * @since version 3.0.0 * @return \b TRUE in case of success, \b FALSE for any error */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL progressive_rfx_write_message_progressive_simple( PROGRESSIVE_CONTEXT* WINPR_RESTRICT progressive, wStream* WINPR_RESTRICT s, const RFX_MESSAGE* WINPR_RESTRICT msg); diff --git a/include/freerdp/codec/region.h b/include/freerdp/codec/region.h index 19239b634..632e68407 100644 --- a/include/freerdp/codec/region.h +++ b/include/freerdp/codec/region.h @@ -45,6 +45,7 @@ extern "C" * @param r2 second rectangle * @return if the two rectangles are equal */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL rectangles_equal(const RECTANGLE_16* r1, const RECTANGLE_16* r2); /** computes if two rectangles intersect @@ -52,6 +53,7 @@ extern "C" * @param r2 second rectangle * @return if the two rectangles intersect */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL rectangles_intersects(const RECTANGLE_16* r1, const RECTANGLE_16* r2); /** computes the intersection of two rectangles @@ -60,6 +62,7 @@ extern "C" * @param dst resulting intersection * @return if the two rectangles intersect */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL rectangles_intersection(const RECTANGLE_16* r1, const RECTANGLE_16* r2, RECTANGLE_16* dst); @@ -69,6 +72,7 @@ extern "C" FREERDP_API void region16_init(REGION16* region); /** @return the number of rectangles of this region16 */ + WINPR_ATTR_NODISCARD FREERDP_API int region16_n_rects(const REGION16* region); /** returns a pointer to rectangles and the number of rectangles in this region. @@ -77,21 +81,25 @@ extern "C" * @param nbRects if non-NULL returns the number of rectangles * @return a pointer on the rectangles */ + WINPR_ATTR_NODISCARD FREERDP_API const RECTANGLE_16* region16_rects(const REGION16* region, UINT32* nbRects); /** @return the extents rectangle of this region */ + WINPR_ATTR_NODISCARD FREERDP_API const RECTANGLE_16* region16_extents(const REGION16* region); /** returns if the rectangle is empty * @param rect the rectangle to check * @return if the rectangle is empty */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL rectangle_is_empty(const RECTANGLE_16* rect); /** returns if the region is empty * @param region the region to check * @return if the region is empty */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL region16_is_empty(const REGION16* region); /** clears the region, the region is reset to a (0,0,0,0) region @@ -109,6 +117,7 @@ extern "C" * @param src source region * @return if the operation was successful (false meaning out-of-memory) */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL region16_copy(REGION16* dst, const REGION16* src); /** adds a rectangle in src and stores the resulting region in dst @@ -117,6 +126,7 @@ extern "C" * @param rect the rectangle to add * @return if the operation was successful (false meaning out-of-memory) */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL region16_union_rect(REGION16* dst, const REGION16* src, const RECTANGLE_16* rect); @@ -125,6 +135,7 @@ extern "C" * @param arg2 the rectangle * @return if region and rectangle intersect */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL region16_intersects_rect(const REGION16* src, const RECTANGLE_16* arg2); /** computes the intersection between a region and a rectangle @@ -133,6 +144,7 @@ extern "C" * @param arg2 the rectangle that intersects * @return if the operation was successful (false meaning out-of-memory) */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL region16_intersect_rect(REGION16* dst, const REGION16* src, const RECTANGLE_16* arg2); diff --git a/include/freerdp/codec/rfx.h b/include/freerdp/codec/rfx.h index 671960e4b..1ce6a3ee4 100644 --- a/include/freerdp/codec/rfx.h +++ b/include/freerdp/codec/rfx.h @@ -75,27 +75,38 @@ extern "C" typedef struct S_RFX_MESSAGE RFX_MESSAGE; typedef struct S_RFX_CONTEXT RFX_CONTEXT; + WINPR_ATTR_NODISCARD FREERDP_API BOOL rfx_process_message(RFX_CONTEXT* WINPR_RESTRICT context, const BYTE* WINPR_RESTRICT data, UINT32 length, UINT32 left, UINT32 top, BYTE* WINPR_RESTRICT dst, UINT32 dstFormat, UINT32 dstStride, UINT32 dstHeight, REGION16* WINPR_RESTRICT invalidRegion); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 rfx_message_get_frame_idx(const RFX_MESSAGE* WINPR_RESTRICT message); + + WINPR_ATTR_NODISCARD FREERDP_API const UINT32* rfx_message_get_quants(const RFX_MESSAGE* WINPR_RESTRICT message, UINT16* WINPR_RESTRICT numQuantVals); + WINPR_ATTR_NODISCARD FREERDP_API const RFX_TILE** rfx_message_get_tiles(const RFX_MESSAGE* WINPR_RESTRICT message, UINT16* WINPR_RESTRICT numTiles); + + WINPR_ATTR_NODISCARD FREERDP_API UINT16 rfx_message_get_tile_count(const RFX_MESSAGE* WINPR_RESTRICT message); + WINPR_ATTR_NODISCARD FREERDP_API const RFX_RECT* rfx_message_get_rects(const RFX_MESSAGE* WINPR_RESTRICT message, UINT16* WINPR_RESTRICT numRects); + + WINPR_ATTR_NODISCARD FREERDP_API UINT16 rfx_message_get_rect_count(const RFX_MESSAGE* WINPR_RESTRICT message); FREERDP_API void rfx_message_free(RFX_CONTEXT* WINPR_RESTRICT context, RFX_MESSAGE* WINPR_RESTRICT message); + WINPR_ATTR_NODISCARD FREERDP_API BOOL rfx_compose_message(RFX_CONTEXT* WINPR_RESTRICT context, wStream* WINPR_RESTRICT s, const RFX_RECT* WINPR_RESTRICT rects, size_t num_rects, @@ -119,9 +130,11 @@ extern "C" UINT32 height, UINT32 scanline, size_t* WINPR_RESTRICT numMessages, size_t maxDataSize); + WINPR_ATTR_NODISCARD FREERDP_API const RFX_MESSAGE* rfx_message_list_get(const RFX_MESSAGE_LIST* WINPR_RESTRICT messages, size_t idx); + WINPR_ATTR_NODISCARD FREERDP_API BOOL rfx_write_message(RFX_CONTEXT* WINPR_RESTRICT context, wStream* WINPR_RESTRICT s, const RFX_MESSAGE* WINPR_RESTRICT message); @@ -136,9 +149,11 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API RFX_CONTEXT* rfx_context_new(BOOL encoder); + WINPR_ATTR_NODISCARD FREERDP_API BOOL rfx_context_reset(RFX_CONTEXT* WINPR_RESTRICT context, UINT32 width, UINT32 height); + WINPR_ATTR_NODISCARD FREERDP_API BOOL rfx_context_set_mode(RFX_CONTEXT* WINPR_RESTRICT context, RLGR_MODE mode); /** Getter for RFX mode @@ -148,6 +163,7 @@ extern "C" * * @return The RFX mode that is currently in use */ + WINPR_ATTR_NODISCARD FREERDP_API RLGR_MODE rfx_context_get_mode(RFX_CONTEXT* WINPR_RESTRICT context); FREERDP_API void rfx_context_set_pixel_format(RFX_CONTEXT* WINPR_RESTRICT context, @@ -160,6 +176,7 @@ extern "C" * * @return The RFX pixel format that is currently in use */ + WINPR_ATTR_NODISCARD FREERDP_API UINT32 rfx_context_get_pixel_format(RFX_CONTEXT* WINPR_RESTRICT context); FREERDP_API void rfx_context_set_palette(RFX_CONTEXT* WINPR_RESTRICT context, @@ -172,8 +189,10 @@ extern "C" * * @return The RFX palette that is currently in use or \b NULL */ + WINPR_ATTR_NODISCARD FREERDP_API const BYTE* rfx_context_get_palette(RFX_CONTEXT* WINPR_RESTRICT context); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 rfx_context_get_frame_idx(const RFX_CONTEXT* WINPR_RESTRICT context); /** Write a RFX message as simple progressive message to a stream. @@ -185,6 +204,7 @@ extern "C" * @since version 3.0.0 * @return \b TRUE in case of success, \b FALSE for any error */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL rfx_write_message_progressive_simple(RFX_CONTEXT* WINPR_RESTRICT rfx, wStream* WINPR_RESTRICT s, const RFX_MESSAGE* WINPR_RESTRICT msg); diff --git a/include/freerdp/codec/yuv.h b/include/freerdp/codec/yuv.h index dddf553e9..74ade5d03 100644 --- a/include/freerdp/codec/yuv.h +++ b/include/freerdp/codec/yuv.h @@ -31,10 +31,13 @@ extern "C" typedef struct S_YUV_CONTEXT YUV_CONTEXT; + WINPR_ATTR_NODISCARD FREERDP_API BOOL yuv420_context_decode( YUV_CONTEXT* WINPR_RESTRICT context, const BYTE* WINPR_RESTRICT pYUVData[3], const UINT32 iStride[3], UINT32 yuvHeight, DWORD DstFormat, BYTE* WINPR_RESTRICT dest, UINT32 nDstStep, const RECTANGLE_16* WINPR_RESTRICT regionRects, UINT32 numRegionRects); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL yuv420_context_encode(YUV_CONTEXT* WINPR_RESTRICT context, const BYTE* WINPR_RESTRICT rgbData, UINT32 srcStep, UINT32 srcFormat, const UINT32 iStride[3], @@ -42,11 +45,14 @@ extern "C" const RECTANGLE_16* WINPR_RESTRICT regionRects, UINT32 numRegionRects); + WINPR_ATTR_NODISCARD FREERDP_API BOOL yuv444_context_decode( YUV_CONTEXT* WINPR_RESTRICT context, BYTE type, const BYTE* WINPR_RESTRICT pYUVData[3], const UINT32 iStride[3], UINT32 srcYuvHeight, BYTE* WINPR_RESTRICT pYUVDstData[3], const UINT32 iDstStride[3], DWORD DstFormat, BYTE* WINPR_RESTRICT dest, UINT32 nDstStep, const RECTANGLE_16* WINPR_RESTRICT regionRects, UINT32 numRegionRects); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL yuv444_context_encode(YUV_CONTEXT* WINPR_RESTRICT context, BYTE version, const BYTE* WINPR_RESTRICT pSrcData, UINT32 nSrcStep, UINT32 SrcFormat, const UINT32 iStride[3], @@ -55,6 +61,7 @@ extern "C" const RECTANGLE_16* WINPR_RESTRICT regionRects, UINT32 numRegionRects); + WINPR_ATTR_NODISCARD FREERDP_API BOOL yuv_context_reset(YUV_CONTEXT* WINPR_RESTRICT context, UINT32 width, UINT32 height); diff --git a/include/freerdp/codec/zgfx.h b/include/freerdp/codec/zgfx.h index cf822a065..64a6852a0 100644 --- a/include/freerdp/codec/zgfx.h +++ b/include/freerdp/codec/zgfx.h @@ -39,14 +39,19 @@ extern "C" typedef struct S_ZGFX_CONTEXT ZGFX_CONTEXT; + WINPR_ATTR_NODISCARD FREERDP_API int zgfx_decompress(ZGFX_CONTEXT* WINPR_RESTRICT zgfx, const BYTE* WINPR_RESTRICT pSrcData, UINT32 SrcSize, BYTE** WINPR_RESTRICT ppDstData, UINT32* WINPR_RESTRICT pDstSize, UINT32 flags); + + WINPR_ATTR_NODISCARD FREERDP_API int zgfx_compress(ZGFX_CONTEXT* WINPR_RESTRICT zgfx, const BYTE* WINPR_RESTRICT pSrcData, UINT32 SrcSize, BYTE** WINPR_RESTRICT ppDstData, UINT32* WINPR_RESTRICT pDstSize, UINT32* WINPR_RESTRICT pFlags); + + WINPR_ATTR_NODISCARD FREERDP_API int zgfx_compress_to_stream(ZGFX_CONTEXT* WINPR_RESTRICT zgfx, wStream* WINPR_RESTRICT sDst, const BYTE* WINPR_RESTRICT pUncompressed, diff --git a/include/freerdp/codecs.h b/include/freerdp/codecs.h index 61cb80e26..9badb73ab 100644 --- a/include/freerdp/codecs.h +++ b/include/freerdp/codecs.h @@ -66,8 +66,11 @@ extern "C" }; typedef struct rdp_codecs rdpCodecs; + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_codecs_prepare(rdpCodecs* codecs, UINT32 flags, UINT32 width, UINT32 height); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags, UINT32 width, UINT32 height); @@ -102,6 +105,7 @@ extern "C" * @return The name of the codecid * @since version 3.18.0 */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_codec_id_to_str(UINT32 id); #ifdef __cplusplus diff --git a/include/freerdp/crypto/ber.h b/include/freerdp/crypto/ber.h index 5d4f2f53b..018e98594 100644 --- a/include/freerdp/crypto/ber.h +++ b/include/freerdp/crypto/ber.h @@ -57,48 +57,104 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_length(wStream* s, size_t* length); + FREERDP_API size_t ber_write_length(wStream* s, size_t length); // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp) + + WINPR_ATTR_NODISCARD FREERDP_API size_t _ber_sizeof_length(size_t length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_universal_tag(wStream* s, BYTE tag, BOOL pc); + FREERDP_API size_t ber_write_universal_tag(wStream* s, BYTE tag, BOOL pc); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_application_tag(wStream* s, BYTE tag, size_t* length); + FREERDP_API void ber_write_application_tag(wStream* s, BYTE tag, size_t length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_enumerated(wStream* s, BYTE* enumerated, BYTE count); + FREERDP_API void ber_write_enumerated(wStream* s, BYTE enumerated, BYTE count); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_contextual_tag(wStream* s, BYTE tag, size_t* length, BOOL pc); + FREERDP_API size_t ber_write_contextual_tag(wStream* s, BYTE tag, size_t length, BOOL pc); + + WINPR_ATTR_NODISCARD FREERDP_API size_t ber_sizeof_contextual_tag(size_t length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_sequence_tag(wStream* s, size_t* length); + FREERDP_API size_t ber_write_sequence_tag(wStream* s, size_t length); + + WINPR_ATTR_NODISCARD FREERDP_API size_t ber_sizeof_sequence(size_t length); + + WINPR_ATTR_NODISCARD FREERDP_API size_t ber_sizeof_sequence_tag(size_t length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_bit_string(wStream* s, size_t* length, BYTE* padding); + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_octet_string_tag(wStream* s, size_t* length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_octet_string(wStream* s, BYTE** content, size_t* length); + FREERDP_API size_t ber_write_octet_string_tag(wStream* s, size_t length); + + WINPR_ATTR_NODISCARD FREERDP_API size_t ber_sizeof_octet_string(size_t length); + + WINPR_ATTR_NODISCARD FREERDP_API size_t ber_sizeof_contextual_octet_string(size_t length); + FREERDP_API size_t ber_write_char_to_unicode_octet_string(wStream* s, const char* str); + FREERDP_API size_t ber_write_contextual_char_to_unicode_octet_string(wStream* s, BYTE tag, const char* oct_str); + FREERDP_API size_t ber_write_octet_string(wStream* s, const BYTE* oct_str, size_t length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_char_from_unicode_octet_string(wStream* s, char** str); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_unicode_octet_string(wStream* s, LPWSTR* str); + FREERDP_API size_t ber_write_contextual_octet_string(wStream* s, BYTE tag, const BYTE* oct_str, size_t length); + FREERDP_API size_t ber_write_contextual_unicode_octet_string(wStream* s, BYTE tag, LPWSTR str); + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_BOOL(wStream* s, BOOL* value); + FREERDP_API void ber_write_BOOL(wStream* s, BOOL value); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_integer(wStream* s, UINT32* value); + FREERDP_API size_t ber_write_integer(wStream* s, UINT32 value); + FREERDP_API size_t ber_write_contextual_integer(wStream* s, BYTE tag, UINT32 value); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL ber_read_integer_length(wStream* s, size_t* length); + + WINPR_ATTR_NODISCARD FREERDP_API size_t ber_sizeof_integer(UINT32 value); + + WINPR_ATTR_NODISCARD FREERDP_API size_t ber_sizeof_contextual_integer(UINT32 value); #ifdef __cplusplus diff --git a/include/freerdp/crypto/certificate.h b/include/freerdp/crypto/certificate.h index 41bf97327..0a007caf5 100644 --- a/include/freerdp/crypto/certificate.h +++ b/include/freerdp/crypto/certificate.h @@ -56,6 +56,7 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API rdpCertificate* freerdp_certificate_new_from_der(const BYTE* data, size_t length); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_certificate_is_rsa(const rdpCertificate* certificate); WINPR_ATTR_MALLOC(free, 1) @@ -130,6 +131,7 @@ extern "C" FREERDP_API char* freerdp_certificate_get_validity(const rdpCertificate* certificate, BOOL startDate); + WINPR_ATTR_NODISCARD FREERDP_API WINPR_MD_TYPE freerdp_certificate_get_signature_alg(const rdpCertificate* cert); WINPR_ATTR_MALLOC(free, 1) @@ -144,14 +146,18 @@ extern "C" FREERDP_API void freerdp_certificate_free_dns_names(size_t count, size_t* lengths, char** names); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_certificate_check_eku(const rdpCertificate* certificate, int nid); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_certificate_get_public_key(const rdpCertificate* cert, BYTE** PublicKey, DWORD* PublicKeyLength); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_certificate_verify(const rdpCertificate* cert, const char* certificate_store_path); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_certificate_is_rdp_security_compatible(const rdpCertificate* cert); WINPR_ATTR_MALLOC(free, 1) diff --git a/include/freerdp/crypto/certificate_data.h b/include/freerdp/crypto/certificate_data.h index 0aa1996ca..380ad2b1f 100644 --- a/include/freerdp/crypto/certificate_data.h +++ b/include/freerdp/crypto/certificate_data.h @@ -56,19 +56,32 @@ extern "C" FREERDP_API rdpCertificateData* freerdp_certificate_data_new_from_file(const char* hostname, UINT16 port, const char* file); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_certificate_data_equal(const rdpCertificateData* a, const rdpCertificateData* b); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_certificate_data_get_hash(const rdpCertificateData* cert); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_certificate_data_get_host(const rdpCertificateData* cert); + + WINPR_ATTR_NODISCARD FREERDP_API UINT16 freerdp_certificate_data_get_port(const rdpCertificateData* cert); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_certificate_data_get_pem(const rdpCertificateData* cert); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_certificate_data_get_pem_ex(const rdpCertificateData* cert, BOOL withFullChain); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_certificate_data_get_subject(const rdpCertificateData* cert); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_certificate_data_get_issuer(const rdpCertificateData* cert); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_certificate_data_get_fingerprint(const rdpCertificateData* cert); diff --git a/include/freerdp/crypto/certificate_store.h b/include/freerdp/crypto/certificate_store.h index d3ec0b2c0..4454fdf91 100644 --- a/include/freerdp/crypto/certificate_store.h +++ b/include/freerdp/crypto/certificate_store.h @@ -46,6 +46,7 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API rdpCertificateStore* freerdp_certificate_store_new(const rdpSettings* settings); + WINPR_ATTR_NODISCARD FREERDP_API freerdp_certificate_store_result freerdp_certificate_store_contains_data( rdpCertificateStore* store, const rdpCertificateData* data); @@ -54,13 +55,19 @@ extern "C" FREERDP_API rdpCertificateData* freerdp_certificate_store_load_data(rdpCertificateStore* store, const char* host, UINT16 port); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_certificate_store_save_data(rdpCertificateStore* store, const rdpCertificateData* data); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_certificate_store_remove_data(rdpCertificateStore* store, const rdpCertificateData* data); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_certificate_store_get_certs_path(const rdpCertificateStore* store); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_certificate_store_get_hosts_path(const rdpCertificateStore* store); diff --git a/include/freerdp/crypto/crypto.h b/include/freerdp/crypto/crypto.h index c052db82e..0588736f3 100644 --- a/include/freerdp/crypto/crypto.h +++ b/include/freerdp/crypto/crypto.h @@ -38,6 +38,7 @@ extern "C" }; typedef struct rdp_CertInfo rdpCertInfo; + WINPR_ATTR_NODISCARD FREERDP_API char* crypto_base64_encode(const BYTE* WINPR_RESTRICT data, size_t length); /** BASE64 encode data @@ -50,6 +51,7 @@ extern "C" * * @return The encoded BASE64 string or \b NULL if failed */ + WINPR_ATTR_NODISCARD FREERDP_API char* crypto_base64_encode_ex(const BYTE* WINPR_RESTRICT data, size_t length, BOOL withCrLf); @@ -57,13 +59,17 @@ extern "C" BYTE** WINPR_RESTRICT dec_data, size_t* WINPR_RESTRICT res_length); + WINPR_ATTR_NODISCARD FREERDP_API char* crypto_base64url_encode(const BYTE* WINPR_RESTRICT data, size_t length); FREERDP_API void crypto_base64url_decode(const char* WINPR_RESTRICT enc_data, size_t length, BYTE** WINPR_RESTRICT dec_data, size_t* WINPR_RESTRICT res_length); + WINPR_ATTR_NODISCARD FREERDP_API char* crypto_read_pem(const char* WINPR_RESTRICT filename, size_t* WINPR_RESTRICT plength); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL crypto_write_pem(const char* WINPR_RESTRICT filename, const char* WINPR_RESTRICT pem, size_t length); diff --git a/include/freerdp/crypto/per.h b/include/freerdp/crypto/per.h index 087a17fe2..095323646 100644 --- a/include/freerdp/crypto/per.h +++ b/include/freerdp/crypto/per.h @@ -29,29 +29,72 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_length(wStream* s, UINT16* length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_length(wStream* s, UINT16 length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_choice(wStream* s, BYTE* choice); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_choice(wStream* s, BYTE choice); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_selection(wStream* s, BYTE* selection); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_selection(wStream* s, BYTE selection); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_number_of_sets(wStream* s, BYTE* number); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_number_of_sets(wStream* s, BYTE number); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_padding(wStream* s, UINT16 length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_padding(wStream* s, UINT16 length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_integer(wStream* s, UINT32* integer); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_integer16(wStream* s, UINT16* integer, UINT16 min); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_integer(wStream* s, UINT32 integer); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_integer16(wStream* s, UINT16 integer, UINT16 min); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_enumerated(wStream* s, BYTE* enumerated, BYTE count); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_enumerated(wStream* s, BYTE enumerated, BYTE count); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_object_identifier(wStream* s, const BYTE oid[6]); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_object_identifier(wStream* s, const BYTE oid[6]); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_octet_string(wStream* s, const BYTE* oct_str, UINT16 length, UINT16 min); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_octet_string(wStream* s, const BYTE* oct_str, UINT16 length, UINT16 min); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_read_numeric_string(wStream* s, UINT16 min); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL per_write_numeric_string(wStream* s, const BYTE* num_str, UINT16 length, UINT16 min); diff --git a/include/freerdp/crypto/privatekey.h b/include/freerdp/crypto/privatekey.h index 1f6247d9e..ebc18780b 100644 --- a/include/freerdp/crypto/privatekey.h +++ b/include/freerdp/crypto/privatekey.h @@ -36,6 +36,7 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API rdpPrivateKey* freerdp_key_new(void); + WINPR_ATTR_NODISCARD FREERDP_API rdpPrivateKey* freerdp_key_new_from_file(const char* keyfile); WINPR_ATTR_MALLOC(freerdp_key_free, 1) @@ -65,8 +66,10 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API rdpPrivateKey* freerdp_key_new_from_pem_enc(const char* pem, const char* password); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_key_is_rsa(const rdpPrivateKey* key); + WINPR_ATTR_NODISCARD FREERDP_API size_t freerdp_key_get_bits(const rdpPrivateKey* key); /** @brief Create a PEM from a private key @@ -91,6 +94,7 @@ extern "C" * @return \b TRUE for success, \b FALSE otherwise * @since version 3.16.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_key_generate(rdpPrivateKey* key, const char* type, size_t count, ...); #ifdef __cplusplus diff --git a/include/freerdp/display.h b/include/freerdp/display.h index 33ae6c79e..157f24835 100644 --- a/include/freerdp/display.h +++ b/include/freerdp/display.h @@ -29,6 +29,7 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_display_send_monitor_layout(rdpContext* context, UINT32 monitorCount, const MONITOR_DEF* monitorDefArray); diff --git a/include/freerdp/dvc.h b/include/freerdp/dvc.h index 32f9736d0..f8047b87e 100644 --- a/include/freerdp/dvc.h +++ b/include/freerdp/dvc.h @@ -173,9 +173,10 @@ extern "C" typedef WINPR_ATTR_NODISCARD UINT(VCAPITYPE* PDVC_PLUGIN_ENTRY)(IDRDYNVC_ENTRY_POINTS*); - void* get_callback_by_name(const char* name, void** context); - void add_callback_by_name(const char* name, void* fkt, void* context); - void remove_callback_by_name(const char* name, void* context); + WINPR_ATTR_NODISCARD + FREERDP_API void* get_callback_by_name(const char* name, void** context); + FREERDP_API void add_callback_by_name(const char* name, void* fkt, void* context); + FREERDP_API void remove_callback_by_name(const char* name, void* context); #ifdef __cplusplus } diff --git a/include/freerdp/emulate/scard/smartcard_emulate.h b/include/freerdp/emulate/scard/smartcard_emulate.h index 7a12c1304..4d8742a0e 100644 --- a/include/freerdp/emulate/scard/smartcard_emulate.h +++ b/include/freerdp/emulate/scard/smartcard_emulate.h @@ -40,320 +40,400 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API SmartcardEmulationContext* Emulate_New(const rdpSettings* settings); + WINPR_ATTR_NODISCARD FREERDP_API BOOL Emulate_IsConfigured(SmartcardEmulationContext* context); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardEstablishContext(SmartcardEmulationContext* smartcard, DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardReleaseContext(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardIsValidContext(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardListReaderGroupsA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPSTR mszGroups, LPDWORD pcchGroups); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardListReaderGroupsW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPWSTR mszGroups, LPDWORD pcchGroups); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardListReadersA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardListReadersW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR mszGroups, LPWSTR mszReaders, LPDWORD pcchReaders); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardListCardsA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCBYTE pbAtr, LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount, CHAR* mszCards, LPDWORD pcchCards); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardListCardsW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCBYTE pbAtr, LPCGUID rgquidInterfaces, DWORD cguidInterfaceCount, WCHAR* mszCards, LPDWORD pcchCards); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardListInterfacesA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCard, LPGUID pguidInterfaces, LPDWORD pcguidInterfaces); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardListInterfacesW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCard, LPGUID pguidInterfaces, LPDWORD pcguidInterfaces); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetProviderIdA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCard, LPGUID pguidProviderId); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetProviderIdW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCard, LPGUID pguidProviderId); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetCardTypeProviderNameA( SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCardName, DWORD dwProviderId, CHAR* szProvider, LPDWORD pcchProvider); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetCardTypeProviderNameW( SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName, DWORD dwProviderId, WCHAR* szProvider, LPDWORD pcchProvider); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderGroupA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szGroupName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderGroupW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szGroupName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardForgetReaderGroupA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szGroupName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardForgetReaderGroupW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szGroupName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPCSTR szDeviceName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardIntroduceReaderW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPCWSTR szDeviceName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardForgetReaderA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardForgetReaderW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardAddReaderToGroupA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPCSTR szGroupName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardAddReaderToGroupW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPCWSTR szGroupName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardRemoveReaderFromGroupA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPCSTR szGroupName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardRemoveReaderFromGroupW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPCWSTR szGroupName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardIntroduceCardTypeA( SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCardName, LPCGUID pguidPrimaryProvider, LPCGUID rgguidInterfaces, DWORD dwInterfaceCount, LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardIntroduceCardTypeW( SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName, LPCGUID pguidPrimaryProvider, LPCGUID rgguidInterfaces, DWORD dwInterfaceCount, LPCBYTE pbAtr, LPCBYTE pbAtrMask, DWORD cbAtrLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardSetCardTypeProviderNameA( SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCardName, DWORD dwProviderId, LPCSTR szProvider); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardSetCardTypeProviderNameW( SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName, DWORD dwProviderId, LPCWSTR szProvider); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardForgetCardTypeA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szCardName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardForgetCardTypeW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szCardName); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardFreeMemory(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPVOID pvMem); + WINPR_ATTR_NODISCARD FREERDP_API HANDLE WINAPI Emulate_SCardAccessStartedEvent(SmartcardEmulationContext* smartcard); FREERDP_API void WINAPI Emulate_SCardReleaseStartedEvent(SmartcardEmulationContext* smartcard); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardLocateCardsA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR mszCards, LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardLocateCardsW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR mszCards, LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardLocateCardsByATRA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPSCARD_ATRMASK rgAtrMasks, DWORD cAtrs, LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardLocateCardsByATRW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPSCARD_ATRMASK rgAtrMasks, DWORD cAtrs, LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetStatusChangeA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, DWORD dwTimeout, LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetStatusChangeW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, DWORD dwTimeout, LPSCARD_READERSTATEW rgReaderStates, DWORD cReaders); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardCancel(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardConnectA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardConnectW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardReconnect(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, DWORD dwShareMode, DWORD dwPreferredProtocols, DWORD dwInitialization, LPDWORD pdwActiveProtocol); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardDisconnect(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, DWORD dwDisposition); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardBeginTransaction(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardEndTransaction(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, DWORD dwDisposition); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardCancelTransaction(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardState(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardStatusA(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, LPSTR mszReaderNames, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardStatusW(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, LPWSTR mszReaderNames, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardTransmit(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetTransmitCount(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, LPDWORD pcTransmitCount); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardControl(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID lpInBuffer, DWORD cbInBufferSize, LPVOID lpOutBuffer, DWORD cbOutBufferSize, LPDWORD lpBytesReturned); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetAttrib(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE pbAttr, LPDWORD pcbAttrLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardSetAttrib(SmartcardEmulationContext* smartcard, SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr, DWORD cbAttrLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardUIDlgSelectCardA(SmartcardEmulationContext* smartcard, LPOPENCARDNAMEA_EX pDlgStruc); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardUIDlgSelectCardW(SmartcardEmulationContext* smartcard, LPOPENCARDNAMEW_EX pDlgStruc); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_GetOpenCardNameA(SmartcardEmulationContext* smartcard, LPOPENCARDNAMEA pDlgStruc); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_GetOpenCardNameW(SmartcardEmulationContext* smartcard, LPOPENCARDNAMEW pDlgStruc); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardDlgExtendedError(SmartcardEmulationContext* smartcard); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardReadCacheA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, UUID* CardIdentifier, DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data, DWORD* DataLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardReadCacheW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, UUID* CardIdentifier, DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data, DWORD* DataLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardWriteCacheA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, UUID* CardIdentifier, DWORD FreshnessCounter, LPSTR LookupName, PBYTE Data, DWORD DataLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardWriteCacheW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, UUID* CardIdentifier, DWORD FreshnessCounter, LPWSTR LookupName, PBYTE Data, DWORD DataLen); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetReaderIconA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPBYTE pbIcon, LPDWORD pcbIcon); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetReaderIconW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPBYTE pbIcon, LPDWORD pcbIcon); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetDeviceTypeIdA(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPDWORD pdwDeviceTypeId); + + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetDeviceTypeIdW(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPDWORD pdwDeviceTypeId); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdA( SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szReaderName, LPSTR szDeviceInstanceId, LPDWORD pcchDeviceInstanceId); + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardGetReaderDeviceInstanceIdW( SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szReaderName, LPWSTR szDeviceInstanceId, LPDWORD pcchDeviceInstanceId); + + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdA( SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCSTR szDeviceInstanceId, LPSTR mszReaders, LPDWORD pcchReaders); + + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardListReadersWithDeviceInstanceIdW( SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, LPCWSTR szDeviceInstanceId, LPWSTR mszReaders, LPDWORD pcchReaders); + + WINPR_ATTR_NODISCARD FREERDP_API LONG WINAPI Emulate_SCardAudit(SmartcardEmulationContext* smartcard, SCARDCONTEXT hContext, DWORD dwEvent); diff --git a/include/freerdp/error.h b/include/freerdp/error.h index 0b64c9ddc..1b0d03de2 100644 --- a/include/freerdp/error.h +++ b/include/freerdp/error.h @@ -173,8 +173,13 @@ extern "C" #define ERRINFO_SUCCESS 0x00000000 #define ERRINFO_NONE 0xFFFFFFFF + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_error_info_string(UINT32 code); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_error_info_name(UINT32 code); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_error_info_category(UINT32 code); /** @@ -199,8 +204,13 @@ extern "C" #define ERRBASE_SUCCESS ERRINFO_SUCCESS #define ERRBASE_NONE ERRINFO_NONE + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_error_base_string(UINT32 code); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_error_base_name(UINT32 code); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_error_base_category(UINT32 code); #define FREERDP_ERROR_SUCCESS ERRINFO_SUCCESS @@ -275,8 +285,13 @@ extern "C" #define ERRCONNECT_SUCCESS ERRINFO_SUCCESS #define ERRCONNECT_NONE ERRINFO_NONE + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_error_connect_string(UINT32 code); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_error_connect_name(UINT32 code); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_error_connect_category(UINT32 code); #define FREERDP_ERROR_CONNECT_CLASS (FREERDP_ERROR_BASE + 2) diff --git a/include/freerdp/freerdp.h b/include/freerdp/freerdp.h index 7cb59e601..c030a0c69 100644 --- a/include/freerdp/freerdp.h +++ b/include/freerdp/freerdp.h @@ -617,11 +617,16 @@ owned by rdpRdp */ FREERDP_API void freerdp_context_free(freerdp* instance); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_context_new(freerdp* instance); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_context_new_ex(freerdp* instance, rdpSettings* settings); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_context_reset(freerdp* instance); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_connect(freerdp* instance); #if !defined(WITHOUT_FREERDP_3x_DEPRECATED) @@ -630,14 +635,19 @@ owned by rdpRdp */ #endif FREERDP_API BOOL freerdp_abort_connect_context(rdpContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API HANDLE freerdp_abort_event(rdpContext* context); #if !defined(WITHOUT_FREERDP_3x_DEPRECATED) WINPR_DEPRECATED_VAR("use freerdp_shall_disconnect_context instead", - FREERDP_API BOOL freerdp_shall_disconnect(const freerdp* instance)); + WINPR_ATTR_NODISCARD FREERDP_API BOOL + freerdp_shall_disconnect(const freerdp* instance)); #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_shall_disconnect_context(const rdpContext* context); + FREERDP_API BOOL freerdp_disconnect(freerdp* instance); /** @brief stringify disconnect reason of type Disconnect_Ultimatum @@ -648,46 +658,77 @@ owned by rdpRdp */ * * @since version 3.13.0 */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_disconnect_reason_string(int reason); #if !defined(WITHOUT_FREERDP_3x_DEPRECATED) WINPR_DEPRECATED_VAR("use freerdp_disconnect_before_reconnect_context instead", - FREERDP_API BOOL freerdp_disconnect_before_reconnect(freerdp* instance)); + WINPR_ATTR_NODISCARD FREERDP_API BOOL + freerdp_disconnect_before_reconnect(freerdp* instance)); #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_disconnect_before_reconnect_context(rdpContext* context); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_reconnect(freerdp* instance); + WINPR_ATTR_NODISCARD FREERDP_API UINT freerdp_channels_attach(freerdp* instance); + + WINPR_ATTR_NODISCARD FREERDP_API UINT freerdp_channels_detach(freerdp* instance); #if defined(WITH_FREERDP_DEPRECATED) WINPR_DEPRECATED_VAR("Use freerdp_get_event_handles", - FREERDP_API BOOL freerdp_get_fds(freerdp* instance, void** rfds, - int* rcount, void** wfds, int* wcount)); + WINPR_ATTR_NODISCARD FREERDP_API BOOL + freerdp_get_fds(freerdp* instance, void** rfds, int* rcount, + void** wfds, int* wcount)); #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_check_fds(freerdp* instance); + WINPR_ATTR_NODISCARD FREERDP_API DWORD freerdp_get_event_handles(rdpContext* context, HANDLE* events, DWORD count); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_check_event_handles(rdpContext* context); + WINPR_ATTR_NODISCARD FREERDP_API wMessageQueue* freerdp_get_message_queue(freerdp* instance, DWORD id); + + WINPR_ATTR_NODISCARD FREERDP_API HANDLE freerdp_get_message_queue_event_handle(freerdp* instance, DWORD id); + + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_message_queue_process_message(freerdp* instance, DWORD id, wMessage* message); + + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_message_queue_process_pending_messages(freerdp* instance, DWORD id); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_error_info(const freerdp* instance); + FREERDP_API void freerdp_set_error_info(rdpRdp* rdp, UINT32 error); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_send_error_info(rdpRdp* rdp); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_get_stats(const rdpRdp* rdp, UINT64* inBytes, UINT64* outBytes, UINT64* inPackets, UINT64* outPackets); FREERDP_API void freerdp_get_version(int* major, int* minor, int* revision); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_version_string(void); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_build_revision(void); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_build_config(void); FREERDP_API void freerdp_free(freerdp* instance); @@ -696,14 +737,23 @@ owned by rdpRdp */ WINPR_ATTR_NODISCARD FREERDP_API freerdp* freerdp_new(void); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_focus_required(freerdp* instance); FREERDP_API void freerdp_set_focus(freerdp* instance); + WINPR_ATTR_NODISCARD FREERDP_API int freerdp_get_disconnect_ultimatum(const rdpContext* context); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_get_last_error(const rdpContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_last_error_name(UINT32 error); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_last_error_string(UINT32 error); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_last_error_category(UINT32 error); #define freerdp_set_last_error(context, lastError) \ @@ -721,19 +771,30 @@ owned by rdpRdp */ FREERDP_API void freerdp_set_last_error_ex(rdpContext* context, UINT32 lastError, const char* fkt, const char* file, int line); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_logon_error_info_type(UINT32 type); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_logon_error_info_type_ex(UINT32 type, char* buffer, size_t size); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_logon_error_info_data(UINT32 data); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_logon_error_info_data_ex(UINT32 data, char* buffer, size_t size); + WINPR_ATTR_NODISCARD FREERDP_API ULONG freerdp_get_transport_sent(const rdpContext* context, BOOL resetCount); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_nla_impersonate(rdpContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_nla_revert_to_self(rdpContext* context); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_get_nla_sspi_error(const rdpContext* context); /** Encrypts the provided buffer using the NLA's GSSAPI context @@ -744,6 +805,7 @@ owned by rdpRdp */ * \returns if the operation completed successfully * \since version 3.9.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_nla_encrypt(rdpContext* context, const SecBuffer* inBuffer, SecBuffer* outBuffer); @@ -755,6 +817,7 @@ owned by rdpRdp */ * \returns if the operation completed successfully * \since version 3.9.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_nla_decrypt(rdpContext* context, const SecBuffer* inBuffer, SecBuffer* outBuffer); @@ -767,6 +830,7 @@ owned by rdpRdp */ * \returns a SECURITY_STATUS indicating if the operation completed successfully * \since version 3.9.0 */ + WINPR_ATTR_NODISCARD FREERDP_API SECURITY_STATUS freerdp_nla_QueryContextAttributes(rdpContext* context, DWORD ulAttr, PVOID pBuffer); @@ -779,15 +843,26 @@ owned by rdpRdp */ * * Supported buffers are ones retrieved from SECPKG_ATTR_PACKAGE_INFO. */ + WINPR_ATTR_NODISCARD FREERDP_API SECURITY_STATUS freerdp_nla_FreeContextBuffer(rdpContext* context, PVOID pBuffer); FREERDP_API void clearChannelError(rdpContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API HANDLE getChannelErrorEventHandle(rdpContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API UINT getChannelError(const rdpContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API const char* getChannelErrorDescription(const rdpContext* context); + FREERDP_API void setChannelError(rdpContext* context, UINT errorNum, const char* format, ...); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL checkChannelErrorEvent(rdpContext* context); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_nego_get_routing_token(const rdpContext* context, DWORD* length); @@ -797,6 +872,7 @@ owned by rdpRdp */ * * \return A \b CONNECTION_STATE the context is currently in */ + WINPR_ATTR_NODISCARD FREERDP_API CONNECTION_STATE freerdp_get_state(const rdpContext* context); /** \brief returns a string representation of a \b CONNECTION_STATE @@ -805,6 +881,7 @@ owned by rdpRdp */ * * \return The string representation of the \b CONNECTION_STATE */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_state_string(CONNECTION_STATE state); /** \brief Queries if the current \b CONNECTION_STATE of the context is an active connection. @@ -816,11 +893,16 @@ owned by rdpRdp */ * * \return \b TRUE if the connection state indicates an active connection, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_is_active_state(const rdpContext* context); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_channels_from_mcs(rdpSettings* settings, const rdpContext* context); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_is_valid_mcs_create_request(const BYTE* data, size_t size); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_is_valid_mcs_create_response(const BYTE* data, size_t size); /** \brief Persist the current credentials (gateway, target server, ...) @@ -835,6 +917,7 @@ owned by rdpRdp */ * state, ...) * \since version 3.12.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_persist_credentials(rdpContext* context); /** @brief set a new function to be called when an access token is requested. @@ -845,6 +928,7 @@ owned by rdpRdp */ * @return \b TRUE for success, \b FALSE otherwise * @since version 3.16.0 */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_set_common_access_token(rdpContext* context, pGetCommonAccessToken GetCommonAccessToken); @@ -854,6 +938,7 @@ owned by rdpRdp */ * @return The current function pointer set or \b NULL * @since version 3.16.0 */ + WINPR_ATTR_NODISCARD FREERDP_API pGetCommonAccessToken freerdp_get_common_access_token(const rdpContext* context); #ifdef __cplusplus diff --git a/include/freerdp/gdi/bitmap.h b/include/freerdp/gdi/bitmap.h index 5f784f0ce..fae8c9913 100644 --- a/include/freerdp/gdi/bitmap.h +++ b/include/freerdp/gdi/bitmap.h @@ -30,16 +30,26 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API UINT32 gdi_GetPixel(HGDI_DC hdc, UINT32 nXPos, UINT32 nYPos); + FREERDP_API UINT32 gdi_SetPixel(HGDI_DC hdc, UINT32 X, UINT32 Y, UINT32 crColor); + + WINPR_ATTR_NODISCARD FREERDP_API BYTE* gdi_GetPointer(HGDI_BITMAP hBmp, UINT32 X, UINT32 Y); + WINPR_ATTR_NODISCARD FREERDP_API HGDI_BITMAP gdi_CreateBitmap(UINT32 nWidth, UINT32 nHeight, UINT32 format, BYTE* data); + + WINPR_ATTR_NODISCARD FREERDP_API HGDI_BITMAP gdi_CreateBitmapEx(UINT32 nWidth, UINT32 nHeight, UINT32 format, UINT32 stride, BYTE* data, void (*fkt_free)(void*)); + + WINPR_ATTR_NODISCARD FREERDP_API HGDI_BITMAP gdi_CreateCompatibleBitmap(HGDI_DC hdc, UINT32 nWidth, UINT32 nHeight); + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_BitBlt(HGDI_DC hdcDest, INT32 nXDest, INT32 nYDest, INT32 nWidth, INT32 nHeight, HGDI_DC hdcSrc, INT32 nXSrc, INT32 nYSrc, DWORD rop, const gdiPalette* palette); diff --git a/include/freerdp/gdi/dc.h b/include/freerdp/gdi/dc.h index d9b5c2bc2..b27b46ca8 100644 --- a/include/freerdp/gdi/dc.h +++ b/include/freerdp/gdi/dc.h @@ -30,11 +30,19 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API HGDI_DC gdi_GetDC(void); + + WINPR_ATTR_NODISCARD FREERDP_API HGDI_DC gdi_CreateDC(UINT32 format); + + WINPR_ATTR_NODISCARD FREERDP_API HGDI_DC gdi_CreateCompatibleDC(HGDI_DC hdc); + FREERDP_API HGDIOBJECT gdi_SelectObject(HGDI_DC hdc, HGDIOBJECT hgdiobject); + FREERDP_API BOOL gdi_DeleteObject(HGDIOBJECT hgdiobject); + FREERDP_API BOOL gdi_DeleteDC(HGDI_DC hdc); #ifdef __cplusplus diff --git a/include/freerdp/gdi/gdi.h b/include/freerdp/gdi/gdi.h index 7e67ea5ea..1f869b11d 100644 --- a/include/freerdp/gdi/gdi.h +++ b/include/freerdp/gdi/gdi.h @@ -523,20 +523,37 @@ extern "C" }; typedef struct rdp_gdi rdpGdi; + WINPR_ATTR_NODISCARD FREERDP_API DWORD gdi_rop3_code(BYTE code); + + WINPR_ATTR_NODISCARD FREERDP_API const char* gdi_rop3_code_string(BYTE code); + + WINPR_ATTR_NODISCARD FREERDP_API const char* gdi_rop3_string(DWORD rop); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 gdi_get_pixel_format(UINT32 bitsPerPixel); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_decode_color(rdpGdi* gdi, UINT32 srcColor, UINT32* color, UINT32* format); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_resize(rdpGdi* gdi, UINT32 width, UINT32 height); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_resize_ex(rdpGdi* gdi, UINT32 width, UINT32 height, UINT32 stride, UINT32 format, BYTE* buffer, void (*pfree)(void*)); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_init(freerdp* instance, UINT32 format); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_init_ex(freerdp* instance, UINT32 format, UINT32 stride, BYTE* buffer, void (*pfree)(void*)); FREERDP_API void gdi_free(freerdp* instance); + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_send_suppress_output(rdpGdi* gdi, BOOL suppress); #ifdef __cplusplus diff --git a/include/freerdp/gdi/gfx.h b/include/freerdp/gdi/gfx.h index 4e731b381..d048a57c2 100644 --- a/include/freerdp/gdi/gfx.h +++ b/include/freerdp/gdi/gfx.h @@ -64,6 +64,7 @@ extern "C" typedef struct gdi_gfx_cache_entry gdiGfxCacheEntry; FREERDP_API BOOL gdi_graphics_pipeline_init(rdpGdi* gdi, RdpgfxClientContext* gfx); + FREERDP_API BOOL gdi_graphics_pipeline_init_ex(rdpGdi* gdi, RdpgfxClientContext* gfx, pcRdpgfxMapWindowForSurface map, pcRdpgfxUnmapWindowForSurface unmap, diff --git a/include/freerdp/gdi/pen.h b/include/freerdp/gdi/pen.h index 880ef2536..7a1daf4f9 100644 --- a/include/freerdp/gdi/pen.h +++ b/include/freerdp/gdi/pen.h @@ -28,8 +28,11 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API HGDI_PEN gdi_CreatePen(UINT32 fnPenStyle, UINT32 nWidth, UINT32 crColor, UINT32 format, const gdiPalette* palette); + + WINPR_ATTR_NODISCARD FREERDP_API UINT32 gdi_GetPenColor(HGDI_PEN pen, UINT32 format); #ifdef __cplusplus diff --git a/include/freerdp/gdi/region.h b/include/freerdp/gdi/region.h index 9a53fe157..e91718f71 100644 --- a/include/freerdp/gdi/region.h +++ b/include/freerdp/gdi/region.h @@ -30,31 +30,66 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API HGDI_RGN gdi_CreateRectRgn(INT32 nLeftRect, INT32 nTopRect, INT32 nRightRect, INT32 nBottomRect); + + WINPR_ATTR_NODISCARD FREERDP_API GDI_RECT* gdi_CreateRect(INT32 xLeft, INT32 yTop, INT32 xRight, INT32 yBottom); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_RectToRgn(const GDI_RECT* rect, HGDI_RGN rgn); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_CRectToRgn(INT32 left, INT32 top, INT32 right, INT32 bottom, HGDI_RGN rgn); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_RectToCRgn(const GDI_RECT* rect, INT32* x, INT32* y, INT32* w, INT32* h); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_CRectToCRgn(INT32 left, INT32 top, INT32 right, INT32 bottom, INT32* x, INT32* y, INT32* w, INT32* h); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_RgnToRect(const GDI_RGN* rgn, GDI_RECT* rect); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_CRgnToRect(INT64 x, INT64 y, INT32 w, INT32 h, GDI_RECT* rect); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_RgnToCRect(const GDI_RGN* rgn, INT32* left, INT32* top, INT32* right, INT32* bottom); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_CRgnToCRect(INT32 x, INT32 y, INT32 w, INT32 h, INT32* left, INT32* top, INT32* right, INT32* bottom); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_CopyOverlap(INT32 x, INT32 y, INT32 width, INT32 height, INT32 srcx, INT32 srcy); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_SetRect(GDI_RECT* rc, INT32 xLeft, INT32 yTop, INT32 xRight, INT32 yBottom); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_SetRgn(HGDI_RGN hRgn, INT32 nXLeft, INT32 nYLeft, INT32 nWidth, INT32 nHeight); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_SetRectRgn(HGDI_RGN hRgn, INT32 nLeftRect, INT32 nTopRect, INT32 nRightRect, INT32 nBottomRect); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_EqualRgn(const GDI_RGN* hSrcRgn1, const GDI_RGN* hSrcRgn2); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_CopyRect(GDI_RECT* dst, const GDI_RECT* src); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_PtInRect(const GDI_RECT* rc, INT32 x, INT32 y); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_InvalidateRegion(HGDI_DC hdc, INT32 x, INT32 y, INT32 w, INT32 h); #ifdef __cplusplus diff --git a/include/freerdp/gdi/shape.h b/include/freerdp/gdi/shape.h index 9b3c041c1..c2f3ad0c6 100644 --- a/include/freerdp/gdi/shape.h +++ b/include/freerdp/gdi/shape.h @@ -28,12 +28,21 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_Ellipse(HGDI_DC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_FillRect(HGDI_DC hdc, const GDI_RECT* rect, HGDI_BRUSH hbr); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_Polygon(HGDI_DC hdc, GDI_POINT* lpPoints, int nCount); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_PolyPolygon(HGDI_DC hdc, GDI_POINT* lpPoints, int* lpPolyCounts, int nCount); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL gdi_Rectangle(HGDI_DC hdc, INT32 nXDst, INT32 nYDst, INT32 nWidth, INT32 nHeight); diff --git a/include/freerdp/heartbeat.h b/include/freerdp/heartbeat.h index 07dabbf0d..efadf4781 100644 --- a/include/freerdp/heartbeat.h +++ b/include/freerdp/heartbeat.h @@ -37,6 +37,7 @@ extern "C" WINPR_ATTR_NODISCARD pServerHeartbeat ServerHeartbeat; }; + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_heartbeat_send_heartbeat_pdu(freerdp_peer* peer, BYTE period, BYTE count1, BYTE count2); diff --git a/include/freerdp/input.h b/include/freerdp/input.h index 80207d162..81e990c4f 100644 --- a/include/freerdp/input.h +++ b/include/freerdp/input.h @@ -104,19 +104,28 @@ extern "C" }; FREERDP_API BOOL freerdp_input_send_synchronize_event(rdpInput* input, UINT32 flags); + FREERDP_API BOOL freerdp_input_send_keyboard_event(rdpInput* input, UINT16 flags, UINT8 code); + FREERDP_API BOOL freerdp_input_send_keyboard_event_ex(rdpInput* input, BOOL down, BOOL repeat, UINT32 rdp_scancode); + FREERDP_API BOOL freerdp_input_send_keyboard_pause_event(rdpInput* input); + FREERDP_API BOOL freerdp_input_send_unicode_keyboard_event(rdpInput* input, UINT16 flags, UINT16 code); + FREERDP_API BOOL freerdp_input_send_mouse_event(rdpInput* input, UINT16 flags, UINT16 x, UINT16 y); + FREERDP_API BOOL freerdp_input_send_rel_mouse_event(rdpInput* input, UINT16 flags, INT16 xDelta, INT16 yDelta); + FREERDP_API BOOL freerdp_input_send_qoe_timestamp(rdpInput* input, UINT32 timestampMS); + FREERDP_API BOOL freerdp_input_send_extended_mouse_event(rdpInput* input, UINT16 flags, UINT16 x, UINT16 y); + FREERDP_API BOOL freerdp_input_send_focus_in_event(rdpInput* input, UINT16 toggleStates); /** @brief stringify \b enum KBD_SYNC_FLAGS @@ -128,6 +137,7 @@ extern "C" * @return A pointer to \ref buffer or \b NULL in case of failure * @since version 3.19.0 */ + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_input_keyboard_flags_string(uint32_t flags, char* buffer, size_t len); diff --git a/include/freerdp/license.h b/include/freerdp/license.h index dc195a46b..c026a6d49 100644 --- a/include/freerdp/license.h +++ b/include/freerdp/license.h @@ -51,8 +51,13 @@ extern "C" typedef struct rdp_license rdpLicense; + WINPR_ATTR_NODISCARD FREERDP_API rdpLicense* license_get(rdpContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API LICENSE_STATE license_get_state(const rdpLicense* license); + + WINPR_ATTR_NODISCARD FREERDP_API LICENSE_TYPE license_get_type(const rdpLicense* license); #ifdef __cplusplus diff --git a/include/freerdp/locale/keyboard.h b/include/freerdp/locale/keyboard.h index 1530b342e..3f1285a33 100644 --- a/include/freerdp/locale/keyboard.h +++ b/include/freerdp/locale/keyboard.h @@ -253,6 +253,7 @@ FREERDP_API RDP_KEYBOARD_LAYOUT* freerdp_keyboard_get_layouts(DWORD types, size_ * @return The string representation of the layout or the string \b "unknown" in case there is * none. */ +WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_keyboard_get_layout_name_from_id(DWORD keyboardLayoutId); /** @brief Get a keyboard layout id from a string @@ -261,23 +262,26 @@ FREERDP_API const char* freerdp_keyboard_get_layout_name_from_id(DWORD keyboardL * * @return The keyboard layout id or \b 0 in case of no mapping */ +WINPR_ATTR_NODISCARD FREERDP_API DWORD freerdp_keyboard_get_layout_id_from_name(const char* name); #if !defined(WITHOUT_FREERDP_3x_DEPRECATED) WINPR_DEPRECATED_VAR("since 3.11.0, implement yourself in client", - FREERDP_API DWORD freerdp_keyboard_init(DWORD keyboardLayoutId)); + WINPR_ATTR_NODISCARD FREERDP_API DWORD + freerdp_keyboard_init(DWORD keyboardLayoutId)); WINPR_DEPRECATED_VAR("since 3.11.0, implement yourself in client", - FREERDP_API DWORD freerdp_keyboard_init_ex(DWORD keyboardLayoutId, - const char* keyboardRemappingList)); + WINPR_ATTR_NODISCARD FREERDP_API DWORD freerdp_keyboard_init_ex( + DWORD keyboardLayoutId, const char* keyboardRemappingList)); WINPR_DEPRECATED_VAR("since 3.11.0, implement yourself in client", - FREERDP_API DWORD + WINPR_ATTR_NODISCARD FREERDP_API DWORD freerdp_keyboard_get_rdp_scancode_from_x11_keycode(DWORD keycode)); WINPR_DEPRECATED_VAR("since 3.11.0, implement yourself in client", - FREERDP_API DWORD freerdp_keyboard_get_x11_keycode_from_rdp_scancode( - DWORD scancode, BOOL extended)); + WINPR_ATTR_NODISCARD FREERDP_API DWORD + freerdp_keyboard_get_x11_keycode_from_rdp_scancode(DWORD scancode, + BOOL extended)); #endif /** @brief deallocate a \b FREERDP_REMAP_TABLE @@ -312,6 +316,7 @@ FREERDP_API FREERDP_REMAP_TABLE* freerdp_keyboard_remap_string_to_list(const cha * * @since version 3.11.0 */ +WINPR_ATTR_NODISCARD FREERDP_API DWORD freerdp_keyboard_remap_key(const FREERDP_REMAP_TABLE* remap_table, DWORD rdpScanCode); @@ -348,6 +353,7 @@ FREERDP_API RDP_CODEPAGE* freerdp_keyboard_get_matching_codepages(DWORD column, * * @return A string describing the RDP scancode or \b NULL if it does not exist */ +WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_keyboard_scancode_name(DWORD scancode); #ifdef __cplusplus diff --git a/include/freerdp/locale/locale.h b/include/freerdp/locale/locale.h index 06013a822..01e2dfdf0 100644 --- a/include/freerdp/locale/locale.h +++ b/include/freerdp/locale/locale.h @@ -258,8 +258,12 @@ extern "C" DWORD code; /* 32-bit unsigned integer corresponding to the locale */ } SYSTEM_LOCALE; + WINPR_ATTR_NODISCARD FREERDP_API DWORD freerdp_get_system_locale_id(void); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_get_system_locale_name_from_id(DWORD localeId); + FREERDP_API int freerdp_detect_keyboard_layout_from_system_locale(DWORD* keyboardLayoutId); /** @brief Try to guess the keyboard layout ID from a given locale string (e.g. de_AT) @@ -269,6 +273,7 @@ extern "C" * @return \b negative in case of an error, or a keyboard layout id otherwise * @since version 3.14.0 */ + WINPR_ATTR_NODISCARD FREERDP_API int64_t freerdp_detect_keyboard_layout_from_locale(const char* localestr); /** @@ -277,6 +282,7 @@ extern "C" * @return A pointer to @ref SYSTEM_LOCALE or \b NULL in case none found * @since version 3.6.0 */ + WINPR_ATTR_NODISCARD FREERDP_API const SYSTEM_LOCALE* freerdp_get_system_locale_list(size_t* count); /** @@ -286,6 +292,7 @@ extern "C" * @return A locale index >= 0 in case of success, <0 for failure * @since version 3.6.0 */ + WINPR_ATTR_NODISCARD FREERDP_API INT64 freerdp_get_locale_id_from_string(const char* locale); /** @@ -294,6 +301,7 @@ extern "C" * @return The @ref keyboard-identifiers to use * @since version 3.6.0 */ + WINPR_ATTR_NODISCARD FREERDP_API DWORD freerdp_get_keyboard_default_layout_for_locale(DWORD locale); #ifdef __cplusplus diff --git a/include/freerdp/metrics.h b/include/freerdp/metrics.h index 306899475..320a26213 100644 --- a/include/freerdp/metrics.h +++ b/include/freerdp/metrics.h @@ -37,6 +37,7 @@ extern "C" }; typedef struct rdp_metrics rdpMetrics; + WINPR_ATTR_NODISCARD FREERDP_API double metrics_write_bytes(rdpMetrics* metrics, UINT32 UncompressedBytes, UINT32 CompressedBytes); diff --git a/include/freerdp/peer.h b/include/freerdp/peer.h index 19cd074cf..2dee3465a 100644 --- a/include/freerdp/peer.h +++ b/include/freerdp/peer.h @@ -221,10 +221,16 @@ extern "C" FREERDP_API void freerdp_peer_context_free(freerdp_peer* client); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_peer_context_new(freerdp_peer* client); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_peer_context_new_ex(freerdp_peer* client, const rdpSettings* settings); + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_peer_os_major_type_string(freerdp_peer* client); + + WINPR_ATTR_NODISCARD FREERDP_API const char* freerdp_peer_os_minor_type_string(freerdp_peer* client); FREERDP_API void freerdp_peer_free(freerdp_peer* client); @@ -233,6 +239,7 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API freerdp_peer* freerdp_peer_new(int sockfd); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_peer_set_local_and_hostname(freerdp_peer* client, const struct sockaddr_storage* peer_addr); diff --git a/include/freerdp/primitives.h b/include/freerdp/primitives.h index 361e5feac..b5eb9072f 100644 --- a/include/freerdp/primitives.h +++ b/include/freerdp/primitives.h @@ -312,41 +312,55 @@ typedef enum PRIMITIVES_AUTODETECT /** detect the best routines */ } primitive_hints; - FREERDP_API primitives_t* primitives_get(void); - FREERDP_API void primitives_set_hints(primitive_hints hints); - FREERDP_API primitive_hints primitives_get_hints(void); - FREERDP_API primitives_t* primitives_get_generic(void); - FREERDP_API DWORD primitives_flags(primitives_t* p); - FREERDP_API BOOL primitives_init(primitives_t* p, primitive_hints hints); - FREERDP_API void primitives_uninit(void); +WINPR_ATTR_NODISCARD +FREERDP_API primitives_t* primitives_get(void); - /** @brief get a specific primitives implementation - * - * This will try to return the primitives implementation suggested by \b type - * If that does not exist or does not work on the platform any other (e.g. usually pure - * software) is returned - * - * @param type the type of primitives desired. - * @return A primitive implementation matching the hint closest or \b NULL in case of failure. - * @since version 3.11.0 - */ - FREERDP_API primitives_t* primitives_get_by_type(primitive_hints type); +FREERDP_API void primitives_set_hints(primitive_hints hints); - /** @brief stringify a \b avc444_frame_type - * - * @param type the type to stringify - * @return A string representation of \b type - * @since version 3.11.0 - */ - FREERDP_API const char* primitives_avc444_frame_type_str(avc444_frame_type type); +WINPR_ATTR_NODISCARD +FREERDP_API primitive_hints primitives_get_hints(void); - /** @brief convert a hint to a string - * - * @param hint the hint to stringify - * @return the string representation of the hint - * @since version 3.11.0 - */ - FREERDP_API const char* primtives_hint_str(primitive_hints hint); +WINPR_ATTR_NODISCARD +FREERDP_API primitives_t* primitives_get_generic(void); + +WINPR_ATTR_NODISCARD +FREERDP_API DWORD primitives_flags(primitives_t* p); + +WINPR_ATTR_NODISCARD +FREERDP_API BOOL primitives_init(primitives_t* p, primitive_hints hints); + +FREERDP_API void primitives_uninit(void); + +/** @brief get a specific primitives implementation + * + * This will try to return the primitives implementation suggested by \b type + * If that does not exist or does not work on the platform any other (e.g. usually pure + * software) is returned + * + * @param type the type of primitives desired. + * @return A primitive implementation matching the hint closest or \b NULL in case of failure. + * @since version 3.11.0 + */ +WINPR_ATTR_NODISCARD +FREERDP_API primitives_t* primitives_get_by_type(primitive_hints type); + +/** @brief stringify a \b avc444_frame_type + * + * @param type the type to stringify + * @return A string representation of \b type + * @since version 3.11.0 + */ +WINPR_ATTR_NODISCARD +FREERDP_API const char* primitives_avc444_frame_type_str(avc444_frame_type type); + +/** @brief convert a hint to a string + * + * @param hint the hint to stringify + * @return the string representation of the hint + * @since version 3.11.0 + */ +WINPR_ATTR_NODISCARD +FREERDP_API const char* primtives_hint_str(primitive_hints hint); #ifdef __cplusplus } diff --git a/include/freerdp/rail.h b/include/freerdp/rail.h index 223aa0b4c..dabfa3766 100644 --- a/include/freerdp/rail.h +++ b/include/freerdp/rail.h @@ -579,21 +579,24 @@ typedef enum TS_RAIL_ORDER_EXEC_RESULT = 0x0080 } ORDER_TYPE; - FREERDP_API BOOL rail_read_unicode_string(wStream* s, RAIL_UNICODE_STRING* unicode_string); - FREERDP_API BOOL utf8_string_to_rail_string(const char* string, - RAIL_UNICODE_STRING* unicode_string); +WINPR_ATTR_NODISCARD +FREERDP_API BOOL rail_read_unicode_string(wStream* s, RAIL_UNICODE_STRING* unicode_string); - /** @brief convert rails handshake flags to a string representation - * - * @param flags The flags to stringify - * @param buffer a string buffer to write to - * @param len the size in bytes of the string buffer - * - * @return A pointer to buffer or \b NULL in case of failure - * @since version 3.5.0 - */ - FREERDP_API const char* rail_handshake_ex_flags_to_string(UINT32 flags, char* buffer, - size_t len); +WINPR_ATTR_NODISCARD +FREERDP_API BOOL utf8_string_to_rail_string(const char* string, + RAIL_UNICODE_STRING* unicode_string); + +/** @brief convert rails handshake flags to a string representation + * + * @param flags The flags to stringify + * @param buffer a string buffer to write to + * @param len the size in bytes of the string buffer + * + * @return A pointer to buffer or \b NULL in case of failure + * @since version 3.5.0 + */ +WINPR_ATTR_NODISCARD +FREERDP_API const char* rail_handshake_ex_flags_to_string(UINT32 flags, char* buffer, size_t len); #ifdef __cplusplus } diff --git a/include/freerdp/redirection.h b/include/freerdp/redirection.h index 8e82272f0..8df98ea38 100644 --- a/include/freerdp/redirection.h +++ b/include/freerdp/redirection.h @@ -67,14 +67,24 @@ extern "C" * * \return \b TRUE if the redirection settings are ready to use, \b FALSE otherwise. */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL redirection_settings_are_valid(rdpRedirection* redirection, UINT32* pFlags); + WINPR_ATTR_NODISCARD FREERDP_API BOOL redirection_set_flags(rdpRedirection* redirection, UINT32 flags); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL redirection_set_session_id(rdpRedirection* redirection, UINT32 session_id); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL redirection_set_byte_option(rdpRedirection* redirection, UINT32 flag, const BYTE* data, size_t length); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL redirection_set_string_option(rdpRedirection* redirection, UINT32 flag, const char* str); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL redirection_set_array_option(rdpRedirection* redirection, UINT32 flag, const char** str, size_t count); diff --git a/include/freerdp/server/audin.h b/include/freerdp/server/audin.h index d202101f6..854d9a07e 100644 --- a/include/freerdp/server/audin.h +++ b/include/freerdp/server/audin.h @@ -167,9 +167,11 @@ extern "C" * * \return \b TRUE if successful and at least one format is supported, \b FALSE otherwise. */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL audin_server_set_formats(audin_server_context* context, SSIZE_T count, const AUDIO_FORMAT* formats); + WINPR_ATTR_NODISCARD FREERDP_API const AUDIO_FORMAT* audin_server_get_negotiated_format(const audin_server_context* context); diff --git a/include/freerdp/server/proxy/proxy_config.h b/include/freerdp/server/proxy/proxy_config.h index 79ea068c5..802e1c5fd 100644 --- a/include/freerdp/server/proxy/proxy_config.h +++ b/include/freerdp/server/proxy/proxy_config.h @@ -126,6 +126,7 @@ extern "C" * @param file The file to write to. Existing files are truncated. * @return TRUE for success, FALSE if the file could not be written. */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_config_dump(const char* file); /** @@ -183,6 +184,7 @@ extern "C" * * @return The number of required plugins configured. */ + WINPR_ATTR_NODISCARD FREERDP_API size_t pf_config_required_plugins_count(const proxyConfig* config); /** @@ -192,6 +194,7 @@ extern "C" * * @return The name of the plugin or NULL. */ + WINPR_ATTR_NODISCARD FREERDP_API const char* pf_config_required_plugin(const proxyConfig* config, size_t index); /** @@ -201,6 +204,7 @@ extern "C" * * @return The number of proxy modules configured. */ + WINPR_ATTR_NODISCARD FREERDP_API size_t pf_config_modules_count(const proxyConfig* config); /** @@ -209,6 +213,7 @@ extern "C" * * @return An array of strings of size pf_config_modules_count with the module names. */ + WINPR_ATTR_NODISCARD FREERDP_API const char** pf_config_modules(const proxyConfig* config); /** @@ -218,6 +223,7 @@ extern "C" * * @return TRUE for success, FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_config_clone(proxyConfig** dst, const proxyConfig* config); /** @@ -229,6 +235,7 @@ extern "C" * * @return TRUE for success, FALSE for failure */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_config_plugin(proxyPluginsManager* plugins_manager, void* userdata); /** @@ -239,6 +246,7 @@ extern "C" * * @return A pointer to the value for \b section/key or \b NULL if not found */ + WINPR_ATTR_NODISCARD FREERDP_API const char* pf_config_get(const proxyConfig* config, const char* section, const char* key); diff --git a/include/freerdp/server/proxy/proxy_context.h b/include/freerdp/server/proxy/proxy_context.h index 22f10f32c..0e8a77384 100644 --- a/include/freerdp/server/proxy/proxy_context.h +++ b/include/freerdp/server/proxy/proxy_context.h @@ -50,6 +50,7 @@ extern "C" /* All proxy interception channels derive from this base struct * and set their cleanup function accordingly. */ FREERDP_API void intercept_context_entry_free(void* obj); + typedef PfChannelResult (*proxyChannelDataFn)(proxyData* pdata, const pServerStaticChannelContext* channel, const BYTE* xdata, size_t xsize, UINT32 flags, @@ -69,7 +70,7 @@ extern "C" void* context; }; - void StaticChannelContext_free(pServerStaticChannelContext* ctx); + FREERDP_API void StaticChannelContext_free(pServerStaticChannelContext* ctx); /** * Wraps rdpContext and holds the state for the proxy's server. @@ -165,7 +166,10 @@ extern "C" psPeerReceiveChannelData server_receive_channel_data_original; }; + WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_context_copy_settings(rdpSettings* dst, const rdpSettings* src); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_context_init_server_context(freerdp_peer* client); WINPR_ATTR_MALLOC(freerdp_client_context_free, 1) @@ -180,6 +184,7 @@ extern "C" FREERDP_API void proxy_data_set_client_context(proxyData* pdata, pClientContext* context); FREERDP_API void proxy_data_set_server_context(proxyData* pdata, pServerContext* context); + WINPR_ATTR_NODISCARD FREERDP_API BOOL proxy_data_shall_disconnect(proxyData* pdata); FREERDP_API void proxy_data_abort_connect(proxyData* pdata); diff --git a/include/freerdp/server/proxy/proxy_server.h b/include/freerdp/server/proxy/proxy_server.h index 30a6e0610..3d7bdf9b8 100644 --- a/include/freerdp/server/proxy/proxy_server.h +++ b/include/freerdp/server/proxy/proxy_server.h @@ -60,6 +60,7 @@ extern "C" * * @return TRUE for success, FALSE otherwise. */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_add_module(proxyServer* server, proxyModuleEntryPoint ep, void* userdata); @@ -70,6 +71,7 @@ extern "C" * * @return TRUE for success, FALSE on error */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_start(proxyServer* server); /** @@ -80,6 +82,7 @@ extern "C" * * @return TRUE for success, FALSE on error */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_start_from_socket(proxyServer* server, int socket); /** @@ -90,6 +93,7 @@ extern "C" * * @return TRUE for success, FALSE on error */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_start_with_peer_socket(proxyServer* server, int socket); /** @@ -107,6 +111,7 @@ extern "C" * * @return TRUE for successful termination, FALSE otherwise. */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_run(proxyServer* server); #ifdef __cplusplus diff --git a/include/freerdp/server/rail.h b/include/freerdp/server/rail.h index 3052058b7..07a2bb7e2 100644 --- a/include/freerdp/server/rail.h +++ b/include/freerdp/server/rail.h @@ -148,6 +148,7 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API RailServerContext* rail_server_context_new(HANDLE vcm); + WINPR_ATTR_NODISCARD FREERDP_API UINT rail_server_handle_messages(RailServerContext* context); FREERDP_API void rail_server_set_handshake_ex_flags(RailServerContext* context, DWORD flags); diff --git a/include/freerdp/server/rdpei.h b/include/freerdp/server/rdpei.h index 214c4e0c8..e15028118 100644 --- a/include/freerdp/server/rdpei.h +++ b/include/freerdp/server/rdpei.h @@ -86,13 +86,23 @@ extern "C" FREERDP_API void rdpei_server_context_reset(RdpeiServerContext* context); + WINPR_ATTR_NODISCARD FREERDP_API HANDLE rdpei_server_get_event_handle(RdpeiServerContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API UINT rdpei_server_init(RdpeiServerContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API UINT rdpei_server_handle_messages(RdpeiServerContext* context); + WINPR_ATTR_NODISCARD FREERDP_API UINT rdpei_server_send_sc_ready(RdpeiServerContext* context, UINT32 version, UINT32 features); + + WINPR_ATTR_NODISCARD FREERDP_API UINT rdpei_server_suspend(RdpeiServerContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API UINT rdpei_server_resume(RdpeiServerContext* context); #ifdef __cplusplus diff --git a/include/freerdp/server/rdpgfx.h b/include/freerdp/server/rdpgfx.h index a8e6c4665..8a19a3414 100644 --- a/include/freerdp/server/rdpgfx.h +++ b/include/freerdp/server/rdpgfx.h @@ -145,9 +145,14 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API RdpgfxServerContext* rdpgfx_server_context_new(HANDLE vcm); + WINPR_ATTR_NODISCARD FREERDP_API BOOL rdpgfx_server_set_own_thread(RdpgfxServerContext* context, BOOL internalThread); + + WINPR_ATTR_NODISCARD FREERDP_API HANDLE rdpgfx_server_get_event_handle(RdpgfxServerContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API UINT rdpgfx_server_handle_messages(RdpgfxServerContext* context); #ifdef __cplusplus diff --git a/include/freerdp/server/rdpsnd.h b/include/freerdp/server/rdpsnd.h index fdac4c87b..81ec7e88b 100644 --- a/include/freerdp/server/rdpsnd.h +++ b/include/freerdp/server/rdpsnd.h @@ -190,7 +190,10 @@ extern "C" FREERDP_API void rdpsnd_server_context_reset(RdpsndServerContext*); + WINPR_ATTR_NODISCARD FREERDP_API HANDLE rdpsnd_server_get_event_handle(RdpsndServerContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API UINT rdpsnd_server_handle_messages(RdpsndServerContext* context); #ifdef __cplusplus diff --git a/include/freerdp/server/server-common.h b/include/freerdp/server/server-common.h index eba831b4f..f2d06d870 100644 --- a/include/freerdp/server/server-common.h +++ b/include/freerdp/server/server-common.h @@ -30,7 +30,10 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API size_t server_audin_get_formats(AUDIO_FORMAT** dst_formats); + + WINPR_ATTR_NODISCARD FREERDP_API size_t server_rdpsnd_get_formats(AUDIO_FORMAT** dst_formats); FREERDP_API void freerdp_server_warn_unmaintained(int argc, char* argv[]); diff --git a/include/freerdp/server/shadow.h b/include/freerdp/server/shadow.h index 3cbd582d0..7ffd8487f 100644 --- a/include/freerdp/server/shadow.h +++ b/include/freerdp/server/shadow.h @@ -313,7 +313,7 @@ extern "C" #if !defined(WITHOUT_FREERDP_3x_DEPRECATED) WINPR_DEPRECATED_VAR( "[since 3.4.0] Use shadow_subsystem_pointer_convert_alpha_pointer_data_to_format instead", - FREERDP_API int shadow_subsystem_pointer_convert_alpha_pointer_data( + WINPR_ATTR_NODISCARD FREERDP_API int shadow_subsystem_pointer_convert_alpha_pointer_data( const BYTE* WINPR_RESTRICT pixels, BOOL premultiplied, UINT32 width, UINT32 height, SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE* WINPR_RESTRICT pointerColor)); #endif @@ -331,22 +331,31 @@ extern "C" * * @since version 3.4.0 */ + WINPR_ATTR_NODISCARD FREERDP_API int shadow_subsystem_pointer_convert_alpha_pointer_data_to_format( const BYTE* WINPR_RESTRICT pixels, UINT32 format, BOOL premultiplied, UINT32 width, UINT32 height, SHADOW_MSG_OUT_POINTER_ALPHA_UPDATE* WINPR_RESTRICT pointerColor); + WINPR_ATTR_NODISCARD FREERDP_API int shadow_server_parse_command_line(rdpShadowServer* server, int argc, char** argv, COMMAND_LINE_ARGUMENT_A* cargs); + + WINPR_ATTR_NODISCARD FREERDP_API int shadow_server_command_line_status_print(rdpShadowServer* server, int argc, char** argv, int status, const COMMAND_LINE_ARGUMENT_A* cargs); + WINPR_ATTR_NODISCARD FREERDP_API int shadow_server_start(rdpShadowServer* server); + FREERDP_API int shadow_server_stop(rdpShadowServer* server); + WINPR_ATTR_NODISCARD FREERDP_API int shadow_server_init(rdpShadowServer* server); + FREERDP_API int shadow_server_uninit(rdpShadowServer* server); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 shadow_enum_monitors(MONITOR_DEF* monitors, UINT32 maxMonitors); FREERDP_API void shadow_server_free(rdpShadowServer* server); @@ -355,11 +364,12 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API rdpShadowServer* shadow_server_new(void); + WINPR_ATTR_NODISCARD FREERDP_API int shadow_capture_align_clip_rect(RECTANGLE_16* rect, const RECTANGLE_16* clip); #if !defined(WITHOUT_FREERDP_3x_DEPRECATED) WINPR_DEPRECATED_VAR("[since 3.4.0] Use shadow_capture_compare_with_format", - FREERDP_API int shadow_capture_compare( + WINPR_ATTR_NODISCARD FREERDP_API int shadow_capture_compare( const BYTE* WINPR_RESTRICT pData1, UINT32 nStep1, UINT32 nWidth, UINT32 nHeight, const BYTE* WINPR_RESTRICT pData2, UINT32 nStep2, RECTANGLE_16* WINPR_RESTRICT rect)); @@ -381,6 +391,7 @@ extern "C" * * @since version 3.4.0 */ + WINPR_ATTR_NODISCARD FREERDP_API int shadow_capture_compare_with_format(const BYTE* WINPR_RESTRICT pData1, UINT32 format1, UINT32 nStep1, UINT32 nWidth, UINT32 nHeight, @@ -390,15 +401,24 @@ extern "C" FREERDP_API void shadow_subsystem_frame_update(rdpShadowSubsystem* subsystem); + WINPR_ATTR_NODISCARD FREERDP_API BOOL shadow_client_post_msg(rdpShadowClient* client, void* context, UINT32 type, SHADOW_MSG_OUT* msg, void* lParam); + + WINPR_ATTR_NODISCARD FREERDP_API int shadow_client_boardcast_msg(rdpShadowServer* server, void* context, UINT32 type, SHADOW_MSG_OUT* msg, void* lParam); + + WINPR_ATTR_NODISCARD FREERDP_API int shadow_client_boardcast_quit(rdpShadowServer* server, int nExitCode); + WINPR_ATTR_NODISCARD FREERDP_API UINT32 shadow_encoder_preferred_fps(rdpShadowEncoder* encoder); + + WINPR_ATTR_NODISCARD FREERDP_API UINT32 shadow_encoder_inflight_frames(rdpShadowEncoder* encoder); + WINPR_ATTR_NODISCARD FREERDP_API BOOL shadow_screen_resize(rdpShadowScreen* screen); #ifdef __cplusplus diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 4481bbb54..fab8f2554 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -150,6 +150,7 @@ extern "C" * * \return \b TRUE if not equal, \b FALSE otherwise */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_print_diff(wLog* log, DWORD level, const rdpSettings* src, const rdpSettings* other); @@ -163,19 +164,32 @@ extern "C" WINPR_ATTR_NODISCARD 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); /** \brief Removed a device from the settings, returns ownership of the allocated device to @@ -188,6 +202,7 @@ extern "C" * * \return \b TRUE if the device was removed, \b FALSE if device was not found or is NULL */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_device_collection_del(rdpSettings* settings, const RDPDR_DEVICE* device); WINPR_ATTR_NODISCARD @@ -213,22 +228,27 @@ extern "C" 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); #if defined(WITH_FREERDP_DEPRECATED) - WINPR_DEPRECATED(FREERDP_API ADDIN_ARGV* WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1) - WINPR_ATTR_NODISCARD freerdp_static_channel_clone(ADDIN_ARGV* channel)); + WINPR_DEPRECATED( + WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV* WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1) + WINPR_ATTR_NODISCARD freerdp_static_channel_clone(ADDIN_ARGV* channel)); #endif 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); @@ -237,8 +257,9 @@ extern "C" const char* name); #if defined(WITH_FREERDP_DEPRECATED) - WINPR_DEPRECATED(FREERDP_API ADDIN_ARGV* WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1) - WINPR_ATTR_NODISCARD freerdp_dynamic_channel_clone(ADDIN_ARGV* channel)); + WINPR_DEPRECATED( + WINPR_ATTR_NODISCARD FREERDP_API ADDIN_ARGV* WINPR_ATTR_MALLOC(freerdp_addin_argv_free, 1) + WINPR_ATTR_NODISCARD freerdp_dynamic_channel_clone(ADDIN_ARGV* channel)); #endif FREERDP_API void freerdp_dynamic_channel_collection_free(rdpSettings* settings); @@ -287,7 +308,7 @@ extern "C" FREERDP_API int freerdp_set_param_int(rdpSettings* settings, int id, int param)); - WINPR_DEPRECATED_VAR("Use freerdp_settings_set_uint32 instead", + WINPR_DEPRECATED_VAR("Use freerdp_settings_get_uint32 instead", WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_get_param_uint32(const rdpSettings* settings, int id)); WINPR_DEPRECATED_VAR("Use freerdp_settings_set_uint32 instead", @@ -533,6 +554,7 @@ extern "C" * * \return \b TRUE for success, \b FALSE for failure */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_settings_append_string(rdpSettings* settings, FreeRDP_Settings_Keys_String id, const char* separator, const char* param); @@ -788,6 +810,7 @@ extern "C" 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 EncryptionLevel, char* buffer, size_t size); diff --git a/include/freerdp/timer.h b/include/freerdp/timer.h index 63d0c058c..fd3455062 100644 --- a/include/freerdp/timer.h +++ b/include/freerdp/timer.h @@ -82,6 +82,7 @@ extern "C" * @return A new timer ID or \b 0 in case of failure * @since version 3.16.0 */ + WINPR_ATTR_NODISCARD FREERDP_API FreeRDP_TimerID freerdp_timer_add(rdpContext* context, uint64_t intervalNS, FreeRDP_TimerCallback callback, void* userdata, bool mainloop); diff --git a/include/freerdp/transport_io.h b/include/freerdp/transport_io.h index a81a046dd..9eb19856b 100644 --- a/include/freerdp/transport_io.h +++ b/include/freerdp/transport_io.h @@ -126,13 +126,20 @@ extern "C" }; typedef struct rdp_transport_io rdpTransportIo; + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_io_callback_set_event(rdpContext* context, BOOL set); + WINPR_ATTR_NODISCARD FREERDP_API const rdpTransportIo* freerdp_get_io_callbacks(rdpContext* context); + + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_set_io_callbacks(rdpContext* context, const rdpTransportIo* io_callbacks); + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_set_io_callback_context(rdpContext* context, void* usercontext); + + WINPR_ATTR_NODISCARD FREERDP_API void* freerdp_get_io_callback_context(rdpContext* context); /* PDU parser. @@ -141,8 +148,13 @@ extern "C" * >0 -> PDU header complete, length of PDU. * <0 -> Abort, an error occurred */ + WINPR_ATTR_NODISCARD FREERDP_API SSIZE_T transport_parse_pdu(rdpTransport* transport, wStream* s, BOOL* incomplete); + + WINPR_ATTR_NODISCARD FREERDP_API rdpContext* transport_get_context(rdpTransport* transport); + + WINPR_ATTR_NODISCARD FREERDP_API rdpTransport* freerdp_get_transport(rdpContext* context); /** diff --git a/include/freerdp/utils/pcap.h b/include/freerdp/utils/pcap.h index a45be4b87..e10d1a5cd 100644 --- a/include/freerdp/utils/pcap.h +++ b/include/freerdp/utils/pcap.h @@ -71,12 +71,16 @@ extern "C" WINPR_ATTR_NODISCARD FREERDP_API BOOL pcap_add_record(rdpPcap* pcap, const void* data, size_t length); + WINPR_ATTR_NODISCARD FREERDP_API BOOL pcap_has_next_record(const rdpPcap* pcap); + WINPR_ATTR_NODISCARD FREERDP_API BOOL pcap_get_next_record(rdpPcap* pcap, pcap_record* record); + WINPR_ATTR_NODISCARD FREERDP_API BOOL pcap_get_next_record_header(rdpPcap* pcap, pcap_record* record); + WINPR_ATTR_NODISCARD FREERDP_API BOOL pcap_get_next_record_content(rdpPcap* pcap, pcap_record* record); FREERDP_API void pcap_flush(rdpPcap* pcap); diff --git a/include/freerdp/utils/signal.h b/include/freerdp/utils/signal.h index ccf67d194..188099cef 100644 --- a/include/freerdp/utils/signal.h +++ b/include/freerdp/utils/signal.h @@ -42,6 +42,7 @@ extern "C" * * \return \b TRUE if registered successfully, \b FALSE otherwise. */ + WINPR_ATTR_NODISCARD FREERDP_API BOOL freerdp_add_signal_cleanup_handler(void* context, freerdp_signal_handler_t handler); diff --git a/include/freerdp/utils/smartcard_call.h b/include/freerdp/utils/smartcard_call.h index d8d2a0597..7c11c8a79 100644 --- a/include/freerdp/utils/smartcard_call.h +++ b/include/freerdp/utils/smartcard_call.h @@ -45,6 +45,7 @@ extern "C" FREERDP_API scard_call_context* smartcard_call_context_new(const rdpSettings* settings); FREERDP_API BOOL smartcard_call_context_signal_stop(scard_call_context* ctx, BOOL reset); + WINPR_ATTR_NODISCARD FREERDP_API BOOL smartcard_call_context_add(scard_call_context* ctx, const char* name); @@ -53,6 +54,7 @@ extern "C" FREERDP_API BOOL smartcard_call_cancel_all_context(scard_call_context* ctx); FREERDP_API BOOL smartcard_call_release_context(scard_call_context* ctx, SCARDCONTEXT context); + WINPR_ATTR_NODISCARD FREERDP_API BOOL smartcard_call_is_configured(scard_call_context* ctx); diff --git a/include/freerdp/utils/smartcard_pack.h b/include/freerdp/utils/smartcard_pack.h index cb413002c..4dc31b4a1 100644 --- a/include/freerdp/utils/smartcard_pack.h +++ b/include/freerdp/utils/smartcard_pack.h @@ -39,7 +39,10 @@ extern "C" { #endif + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_pack_write_size_align(wStream* s, size_t size, UINT32 alignment); + + WINPR_ATTR_NODISCARD FREERDP_API LONG smartcard_unpack_read_size_align(wStream* s, size_t size, UINT32 alignment); WINPR_ATTR_NODISCARD