[doxygen] add basic documentation for new API

* Add basic documentation for new functions/structs/data types since
  3.0.0
This commit is contained in:
akallabeth 2024-09-12 14:45:02 +02:00
parent 98f22d49b9
commit fb5934007a
No known key found for this signature in database
GPG Key ID: A49454A3FC909FD5
35 changed files with 1056 additions and 175 deletions

View File

@ -14,9 +14,9 @@
#define FREERDP_SHARED_LIBRARY_SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}"
#define FREERDP_SHARED_LIBRARY_PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}"
#define FREERDP_VENDOR_STRING "${VENDOR}"
#define FREERDP_PRODUCT_STRING "${PRODUCT}"
#define FREERDP_VENDOR_STRING "${VENDOR}" /** @since version 3.3.0 */
#define FREERDP_PRODUCT_STRING "${PRODUCT}" /** @since version 3.3.0 */
#define FREERDP_PROXY_PLUGINDIR "${NATIVE_FREERDP_PROXY_PLUGINDIR}"
#define FREERDP_PROXY_PLUGINDIR "${NATIVE_FREERDP_PROXY_PLUGINDIR}" /** @since version 3.3.0 */
#endif /* FREERDP_BUILD_CONFIG_H */

View File

@ -24,11 +24,15 @@
#include <freerdp/dvc.h>
#include <freerdp/types.h>
/** @defgroup channel_location
* @{
*/
/** The command line name of the channel
*
* \since version 3.0.0
*/
#define LOCATION_CHANNEL_NAME "location"
#define LOCATION_CHANNEL_NAME "location" /** @since version 3.4.0 */
#define LOCATION_DVC_CHANNEL_NAME "Microsoft::Windows::RDS::Location"
@ -117,4 +121,6 @@ extern "C"
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* FREERDP_CHANNEL_LOCATION_H */

View File

@ -20,6 +20,10 @@
#ifndef FREERDP_CHANNEL_RDPEMSC_H
#define FREERDP_CHANNEL_RDPEMSC_H
/** @defgroup channel_rdpemsc
* @{
*/
/** \file [MS-RDPEMSC] Mouse Cursor Virtual Channel Extension
* \link
* https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpemsc/2591b507-cd5a-4537-be29-b45540543dc8
@ -70,7 +74,7 @@ extern "C"
typedef enum
{
RDP_MOUSE_CURSOR_CAPVERSION_INVALID = 0x00000000,
RDP_MOUSE_CURSOR_CAPVERSION_INVALID = 0x00000000, /** @since version 3.3.0 */
RDP_MOUSE_CURSOR_CAPVERSION_1 = 0x00000001,
} RDP_MOUSE_CURSOR_CAPVERSION;
@ -144,4 +148,7 @@ extern "C"
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* FREERDP_CHANNEL_RDPEMSC_H */

View File

@ -154,6 +154,19 @@ extern "C"
FREERDP_API int freerdp_client_settings_parse_command_line(rdpSettings* settings, int argc,
char** argv, BOOL allowUnknown);
/**
* @brief freerdp_client_settings_parse_command_line_ex
* @param settings Pointer to the settings to populate
* @param argc Number of command line arguments
* @param argv Array of command line arguments
* @param allowUnknown Skip unknown arguments instead of aborting parser
* @param args The allowed command line arguments (client specific, client-common ones are added
* internally)
* @param count Number of client specific command line arguments
* @param handle_userdata Custom user data pointer, will be passed to callback
* @return >=0 for success, <0 in case of parsing failures
* @since version 3.9.0
*/
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,

View File

@ -23,18 +23,28 @@
#include <freerdp/channels/location.h>
/** @file
* @since version 3.4.0
*/
#ifdef __cplusplus
extern "C"
{
#endif
/** @since version 3.4.0 */
typedef struct s_location_client_context LocationClientContext;
/** @since version 3.4.0 */
typedef UINT (*pcLocationStart)(LocationClientContext* context, UINT32 version, UINT32 flags);
/** @since version 3.4.0 */
typedef UINT (*pcLocationStop)(LocationClientContext* context);
/** @since version 3.4.0 */
typedef UINT (*pcLocationSend)(LocationClientContext* context, LOCATION_PDUTYPE type,
size_t count, ...);
/** @since version 3.4.0 */
struct s_location_client_context
{
void* handle;

View File

@ -38,13 +38,14 @@ extern "C"
#define FREERDP_PIXEL_FORMAT_IS_ABGR(_format) \
(FREERDP_PIXEL_FORMAT_TYPE(_format) == FREERDP_PIXEL_FORMAT_TYPE_ABGR)
enum FREERDP_IMAGE_FLAGS
{
FREERDP_FLIP_NONE = 0,
FREERDP_FLIP_VERTICAL = 1,
FREERDP_FLIP_HORIZONTAL = 2,
FREERDP_KEEP_DST_ALPHA = 4
};
/** @brief Flags for image copy operations */
enum FREERDP_IMAGE_FLAGS
{
FREERDP_FLIP_NONE = 0,
FREERDP_FLIP_VERTICAL = 1,
FREERDP_FLIP_HORIZONTAL = 2,
FREERDP_KEEP_DST_ALPHA = 4
};
#define FREERDP_PIXEL_FORMAT(_bpp, _type, _a, _r, _g, _b) \
((_bpp << 24) | (_type << 16) | (_a << 12) | (_r << 8) | (_g << 4) | (_b))
@ -65,6 +66,9 @@ enum FREERDP_IMAGE_FLAGS
* X for alpha channel denotes unused (but existing) alpha channel data.
*/
/** @defgroup PIXEL_FORMAT
* @{
*/
/* 32bpp formats */
#define PIXEL_FORMAT_ARGB32 FREERDP_PIXEL_FORMAT(32, FREERDP_PIXEL_FORMAT_TYPE_ARGB, 8, 8, 8, 8)
#define PIXEL_FORMAT_XRGB32 FREERDP_PIXEL_FORMAT(32, FREERDP_PIXEL_FORMAT_TYPE_ARGB, 0, 8, 8, 8)
@ -100,11 +104,13 @@ enum FREERDP_IMAGE_FLAGS
/* 1bpp formats */
#define PIXEL_FORMAT_MONO FREERDP_PIXEL_FORMAT(1, FREERDP_PIXEL_FORMAT_TYPE_A, 1, 0, 0, 0)
struct gdi_palette
{
UINT32 format;
UINT32 palette[256];
};
/** @} */
struct gdi_palette
{
UINT32 format;
UINT32 palette[256];
};
typedef struct gdi_palette gdiPalette;
/* Compare two color formats but ignore differences in alpha channel.
@ -379,21 +385,24 @@ typedef struct gdi_palette gdiPalette;
UINT32 nXSrc, UINT32 nYSrc,
const gdiPalette* WINPR_RESTRICT palette, UINT32 flags);
/*** Same as freerdp_image_copy() but only for overlapping source and destination
/*** Same as @freerdp_image_copy but only for overlapping source and destination
* @since version 3.6.0
*/
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,
UINT32 nYSrc, const gdiPalette* WINPR_RESTRICT palette, UINT32 flags);
/*** Same as freerdp_image_copy() but only for non overlapping source and destination
/*** Same as @freerdp_image_copy but only for non overlapping source and destination
* @since version 3.6.0
*/
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,
UINT32 nSrcStep, UINT32 nXSrc, UINT32 nYSrc, const gdiPalette* WINPR_RESTRICT palette,
UINT32 flags);
/***
/*** Scale an image to destination
*
* @param pDstData destination buffer
* @param DstFormat destination buffer format

View File

@ -41,6 +41,10 @@ extern "C"
H264_RATECONTROL_CQP
} H264_RATECONTROL_MODE;
/**
* @brief The usage types for H264 encoding
* @since version 3.6.0
*/
typedef enum
{
H264_SCREEN_CONTENT_REAL_TIME = 0,
@ -56,7 +60,7 @@ extern "C"
H264_CONTEXT_OPTION_BITRATE,
H264_CONTEXT_OPTION_FRAMERATE,
H264_CONTEXT_OPTION_QP,
H264_CONTEXT_OPTION_USAGETYPE,
H264_CONTEXT_OPTION_USAGETYPE, /** @since version 3.6.0 */
} H264_CONTEXT_OPTION;
FREERDP_API void free_h264_metablock(RDPGFX_H264_METABLOCK* meta);
@ -70,9 +74,29 @@ extern "C"
const RECTANGLE_16* regionRect, BYTE** ppDstData,
UINT32* pDstSize, RDPGFX_H264_METABLOCK* meta);
/* API for user to fill YUV I420 buffer before encoding */
/** @brief API for user to fill YUV I420 buffer before encoding
*
* @param h264 The h264 context to query
* @param nSrcStride The size of a line in bytes of the source image
* @param nSrcWidth The width of the source image in pixels
* @param nSrcHeight The height of the source image
* @param YUVData A pointer to hold the current YUV buffers
* @param stride A pointer to hold the byte length of a line in the YUV buffers
* @return \b >= 0 for success, \b <0 for an error
* @since version 3.6.0
*/
FREERDP_API INT32 h264_get_yuv_buffer(H264_CONTEXT* h264, UINT32 nSrcStride, UINT32 nSrcWidth,
UINT32 nSrcHeight, BYTE* YUVData[3], UINT32 stride[3]);
/**
* @brief Compress currently filled image data to H264 stream
*
* @param h264 The H264 context to use for compression
* @param ppDstData A pointer that will hold the allocated result buffer
* @param pDstSize A pointer for the destination buffer size in bytes
* @return \b >= 0 for success, \b <0 for an error
* @since version 3.6.0
*/
FREERDP_API INT32 h264_compress(H264_CONTEXT* h264, BYTE** ppDstData, UINT32* pDstSize);
FREERDP_API INT32 avc420_decompress(H264_CONTEXT* h264, const BYTE* pSrcData, UINT32 SrcSize,

View File

@ -54,7 +54,7 @@ extern "C"
struct rdp_codecs
{
UINT32 ThreadingFlags;
UINT32 ThreadingFlags; /** @since version 3.6.0 */
RFX_CONTEXT* rfx;
NSC_CONTEXT* nsc;
@ -71,15 +71,25 @@ extern "C"
FREERDP_API BOOL freerdp_client_codecs_reset(rdpCodecs* codecs, UINT32 flags, UINT32 width,
UINT32 height);
/**
* @brief Free a rdpCodecs instance
* @param codecs A pointer to a rdpCodecs instance or NULL
* @since version 3.6.0
*/
FREERDP_API void freerdp_client_codecs_free(rdpCodecs* codecs);
/**
* @brief Allocate a rdpCodecs instance.
* @return A newly allocated instance or \b NULL in case of failure.
* @since version 3.6.0
*/
WINPR_ATTR_MALLOC(freerdp_client_codecs_free, 1)
FREERDP_API rdpCodecs* freerdp_client_codecs_new(UINT32 TheadingFlags);
FREERDP_API WINPR_DEPRECATED_VAR("Use freerdp_client_codecs_free",
FREERDP_API WINPR_DEPRECATED_VAR("[since 3.6.0] Use freerdp_client_codecs_free",
void codecs_free(rdpCodecs* codecs));
FREERDP_API WINPR_DEPRECATED_VAR("Use freerdp_client_codecs_new",
FREERDP_API WINPR_DEPRECATED_VAR("[since 3.6.0] Use freerdp_client_codecs_new",
rdpCodecs* codecs_new(rdpContext* context));
#ifdef __cplusplus

View File

@ -65,6 +65,16 @@ extern "C"
FREERDP_API char* freerdp_certificate_get_fingerprint(const rdpCertificate* certificate);
FREERDP_API char* freerdp_certificate_get_pem(const rdpCertificate* certificate,
size_t* pLength);
/**
* @brief Get the certificate as PEM string
* @param certificate A certificate instance to query
* @param pLength A pointer to the size in bytes of the PEM string
* @param withCertChain \b TRUE to export a full chain PEM, \b FALSE for only the last
* certificate in the chain
* @return A newly allocated string containing the requested PEM (free to deallocate) or NULL
* @since version 3.8.0
*/
FREERDP_API char* freerdp_certificate_get_pem_ex(const rdpCertificate* certificate,
size_t* pLength, BOOL withCertChain);
FREERDP_API BYTE* freerdp_certificate_get_der(const rdpCertificate* certificate,
@ -76,6 +86,13 @@ extern "C"
FREERDP_API char* freerdp_certificate_get_upn(const rdpCertificate* certificate);
FREERDP_API char* freerdp_certificate_get_email(const rdpCertificate* certificate);
/**
* @brief return the date string of the certificate validity
* @param certificate The certificate instance to query
* @param startDate \b TRUE return the start date, \b FALSE for the end date
* @return A newly allocated string containing the date, use \b free to deallocate
* @since version 3.8.0
*/
FREERDP_API char* freerdp_certificate_get_validity(const rdpCertificate* certificate,
BOOL startDate);

View File

@ -177,7 +177,7 @@ typedef struct
#define KBD_CZECH_PROGRAMMERS 0x00020405
#define KBD_GREEK_319 0x00020408
#define KBD_UNITED_STATES_INTERNATIONAL 0x00020409
#define KBD_HEBREW_STANDARD 0x0002040D
#define KBD_HEBREW_STANDARD 0x0002040D /** @since version 3.6.0 */
#define KBD_RUSSIAN_PHONETIC 0x00020419
#define KBD_THAI_KEDMANEE_NON_SHIFTLOCK 0x0002041E
#define KBD_BANGLA 0x00020445

View File

@ -30,6 +30,9 @@
#include <freerdp/api.h>
#include <freerdp/types.h>
/** @defgroup keyboard-identifiers
* @{
*/
#define AFRIKAANS 0x0436
#define ALBANIAN 0x041C
#define ALSATIAN 0x0484
@ -233,15 +236,20 @@
#define YI 0x0478
#define YORUBA 0x046A
#define ZULU 0x0435
/** @} */
#define LOCALE_LANGUAGE_LEN 6
#define LOCALE_COUNTRY_LEN 10
#define LOCALE_LANGUAGE_LEN 6 /** @since version 3.6.0 */
#define LOCALE_COUNTRY_LEN 10 /** @since version 3.6.0 */
#ifdef __cplusplus
extern "C"
{
#endif
/**
* @brief A SYSTEM_LOCALE holding details about a locale
* @since version 3.6.0
*/
typedef struct
{
char language[LOCALE_LANGUAGE_LEN]; /* Two or three letter language code */
@ -254,9 +262,29 @@ extern "C"
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 Query the list of supported system locales
* @param count A pointer to hold the number of locales found
* @return A pointer to @SYSTEM_LOCALE or \b NULL in case none found
* @since version 3.6.0
*/
FREERDP_API const SYSTEM_LOCALE* freerdp_get_system_locale_list(size_t* count);
/**
* @brief Query the list of system locales and return a matching one
*
* @param locale A locale string to query
* @return A locale index >= 0 in case of success, <0 for failure
* @since version 3.6.0
*/
FREERDP_API INT64 freerdp_get_locale_id_from_string(const char* locale);
/**
* @brief Return the default @keyboard-identifiers for a provided locale
* @param locale The locale to query
* @return The @keyboard-identifiers to use
* @since version 3.6.0
*/
FREERDP_API DWORD freerdp_get_keyboard_default_layout_for_locale(DWORD locale);
#ifdef __cplusplus

View File

@ -102,8 +102,37 @@ typedef pstatus_t (*__alphaComp_argb_t)(const BYTE* WINPR_RESTRICT pSrc1, UINT32
typedef pstatus_t (*__add_16s_t)(const INT16* WINPR_RESTRICT pSrc1,
const INT16* WINPR_RESTRICT pSrc2, INT16* WINPR_RESTRICT pDst,
UINT32 len);
/**
* @brief Add INT16 from pSrcDst2 to pSrcDst1 and store in both arrays
* @param pSrcDst1 A pointer to the array of INT16 to add to
* @param pSrcDst2 A pointer to the array of INT16 to add to
* @param len The number of INT16 in the arrays
* @return \b <=0 for failure, success otherwise
* @since version 3.6.0
*/
typedef pstatus_t (*__add_16s_inplace_t)(INT16* WINPR_RESTRICT pSrcDst1,
INT16* WINPR_RESTRICT pSrcDst2, UINT32 len);
/**
* @brief Copy (sub)image data without overlapping
*
* @param pDstData The destination image buffer
* @param DstFormat The destination image format @PIXEL_FORMAT
* @param nDstStep The destination image line width in bytes (including padding)
* @param nXDst The X coordinate to start copying to
* @param nYDst The Y coordinate to start copying to
* @param nWidth The width in pixels to copy
* @param nHeight The height in pixels to copy
* @param pSrcData The source image buffer
* @param SrcFormat The source image format @PIXEL_FORMAT
* @param nSrcStep The source image line with in bytes (including padding)
* @param nXSrc The X coordinate to start copying from
* @param nYSrc The Y coordinate to start copying from
* @param palette A color palette for 8 bit colors
* @param flags Copy flags @FREERDP_IMAGE_FLAGS
* @return \b <=0 for failure, success otherwise
* @since version 3.6.0
*/
typedef pstatus_t (*__copy_no_overlap_t)(BYTE* WINPR_RESTRICT pDstData, DWORD DstFormat,
UINT32 nDstStep, UINT32 nXDst, UINT32 nYDst, UINT32 nWidth,
UINT32 nHeight, const BYTE* WINPR_RESTRICT pSrcData,
@ -224,9 +253,9 @@ typedef struct
/** \brief Do vecotor addition, store result in both input buffers
* pSrcDst1 = pSrcDst2 = pSrcDst1 + pSrcDst2
*/
__add_16s_inplace_t add_16s_inplace;
__lShiftC_16s_inplace_t lShiftC_16s_inplace;
__copy_no_overlap_t copy_no_overlap;
__add_16s_inplace_t add_16s_inplace; /** @since version 3.6.0 */
__lShiftC_16s_inplace_t lShiftC_16s_inplace; /** @since version 3.6.0 */
__copy_no_overlap_t copy_no_overlap; /** @since version 3.6.0 */
} primitives_t;
typedef enum

View File

@ -583,6 +583,15 @@ typedef enum
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
*/
FREERDP_API const char* rail_handshake_ex_flags_to_string(UINT32 flags, char* buffer,
size_t len);

View File

@ -26,6 +26,11 @@
#include <freerdp/api.h>
#include <freerdp/server/proxy/proxy_modules_api.h>
/** @defgroup proxy_config
* @ingroup proxy
* @{
*/
#ifdef __cplusplus
extern "C"
{
@ -81,11 +86,11 @@ extern "C"
size_t InterceptCount;
/* clipboard specific settings */
WINPR_DEPRECATED_VAR("Unused, ignore", BOOL TextOnly);
WINPR_DEPRECATED_VAR("Unused, ignore", UINT32 MaxTextLength);
WINPR_DEPRECATED_VAR("[since 3.6.0] Unused, ignore", BOOL TextOnly);
WINPR_DEPRECATED_VAR("[since 3.6.0] Unused, ignore", UINT32 MaxTextLength);
/* gfx settings */
WINPR_DEPRECATED_VAR("Unused, ignore", BOOL DecodeGFX);
WINPR_DEPRECATED_VAR("[since 3.6.0] Unused, ignore", BOOL DecodeGFX);
/* modules */
char** Modules; /* module file names to load */
@ -111,7 +116,7 @@ extern "C"
wIniFile* ini;
/* target continued */
UINT32 TargetTlsSecLevel;
UINT32 TargetTlsSecLevel; /** @since version 3.2.0 */
};
/**
@ -232,4 +237,7 @@ extern "C"
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* FREERDP_SERVER_PROXY_CONFIG_H */

View File

@ -135,7 +135,7 @@ extern "C"
BOOL resizeRequested;
UINT32 resizeWidth;
UINT32 resizeHeight;
BOOL areGfxCapsReady;
BOOL areGfxCapsReady; /** @since version 3.3.0 */
};
struct rdp_shadow_server
@ -303,11 +303,24 @@ extern "C"
FREERDP_API void shadow_subsystem_set_entry(pfnShadowSubsystemEntry pEntry);
FREERDP_API WINPR_DEPRECATED_VAR(
"Use shadow_subsystem_pointer_convert_alpha_pointer_data_to_format instead",
"[since 3.4.0] Use shadow_subsystem_pointer_convert_alpha_pointer_data_to_format instead",
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));
/** @brief Convert a pointer image from input format to RDP specific encoding
*
* @param pixels A pointer to the pixel data
* @param format The pixel format of the pointer image
* @param premultiplied Premultiplied format, requires scaling of pixel colors
* @param width The width in pixels of the pointer
* @param height The height of the pointer
* @param pointerColor A pointer to the struct that can hold the encoded data
*
* @return \b >=0 for success, \b <0 for any failure
*
* @since version 3.4.0
*/
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);
@ -334,11 +347,27 @@ extern "C"
FREERDP_API int shadow_capture_align_clip_rect(RECTANGLE_16* rect, const RECTANGLE_16* clip);
FREERDP_API WINPR_DEPRECATED_VAR(
"Use shadow_capture_compare_with_format",
"[since 3.4.0] Use shadow_capture_compare_with_format",
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));
/** @brief Compare two framebuffer images of possibly different formats with each other
*
* @param pData1 A pointer to the data of image 1
* @param format1 The format of image 1
* @param nStep1 The line width in bytes of image 1
* @param nWidth The line width in pixels of image 1
* @param nHeight The height of image 1
* @param pData2 A pointer to the data of image 2
* @param format2 The format of image 2
* @param nStep2 The line width in bytes of image 2
* @param rect A pointer to the rectangle of the images to compare
*
* @return \b 0 if equal, \b >0 if not equal and \b <0 for any error
*
* @since version 3.4.0
*/
FREERDP_API int shadow_capture_compare_with_format(const BYTE* WINPR_RESTRICT pData1,
UINT32 format1, UINT32 nStep1, UINT32 nWidth,
UINT32 nHeight,

View File

@ -47,30 +47,32 @@ extern "C"
{
#endif
/** \file
* \brief This is the FreeRDP settings module.
*
* Settings are used to store configuration data for an RDP connection.
* There are 3 different settings for each client and server:
*
* 1. The initial connection supplied by the user
* 2. The settings sent from client or server during capability exchange
* 3. The settings merged from the capability exchange and the initial configuration.
*
* The lifetime of the settings is as follows:
* 1. Initial configuration is saved and will be valid for the whole application lifecycle
* 2. The client or server settings from the other end are valid from capability exchange until the
* connection is ended (disconnect/redirect/...)
* 3. The merged settings are created from the initial configuration and server settings and have
* the same lifetime, until the connection ends
*
*
* So, when accessing the settings always ensure to know which one you are operating on! (this is
* especially important for the proxy where you have a RDP client and RDP server in the same
* application context)
*/
/** \defgroup rdpSettings
* \brief This is the FreeRDP settings module.
*
* Settings are used to store configuration data for an RDP connection.
* There are 3 different settings for each client and server:
*
* 1. The initial connection supplied by the user
* 2. The settings sent from client or server during capability exchange
* 3. The settings merged from the capability exchange and the initial configuration.
*
* The lifetime of the settings is as follows:
* 1. Initial configuration is saved and will be valid for the whole application lifecycle
* 2. The client or server settings from the other end are valid from capability exchange until
* the connection is ended (disconnect/redirect/...)
* 3. The merged settings are created from the initial configuration and server settings and
* have the same lifetime, until the connection ends
*
*
* So, when accessing the settings always ensure to know which one you are operating on! (this
* is especially important for the proxy where you have a RDP client and RDP server in the same
* application context)
*
* @{
*/
typedef struct rdp_settings rdpSettings;
typedef struct rdp_settings rdpSettings;
/**
* rdpSettings creation flags
@ -171,6 +173,8 @@ typedef struct rdp_settings rdpSettings;
* \param settings the settings to remove the device from
* \param device the device to remove
*
* \since version 3.4.0
*
* \return \b TRUE if the device was removed, \b FALSE if device was not found or is NULL
*/
FREERDP_API BOOL freerdp_device_collection_del(rdpSettings* settings,
@ -714,6 +718,8 @@ typedef struct rdp_settings rdpSettings;
size_t size);
/** \brief return the configuration directory for the library
* @return The current configuration path or \b NULL
* @since version 3.6.0
*/
FREERDP_API char* freerdp_settings_get_config_path(void);
@ -721,4 +727,6 @@ typedef struct rdp_settings rdpSettings;
}
#endif
/** @} */
#endif /* FREERDP_SETTINGS_H */

View File

@ -40,33 +40,14 @@ extern "C"
{
#endif
/** \file
* \brief This is the FreeRDP settings module.
*
* Settings are used to store configuration data for an RDP connection.
* There are 3 different settings for each client and server:
*
* 1. The initial connection supplied by the user
* 2. The settings sent from client or server during capability exchange
* 3. The settings merged from the capability exchange and the initial configuration.
*
* The lifetime of the settings is as follows:
* 1. Initial configuration is saved and will be valid for the whole application lifecycle
* 2. The client or server settings from the other end are valid from capability exchange until the
* connection is ended (disconnect/redirect/...)
* 3. The merged settings are created from the initial configuration and server settings and have
* the same lifetime, until the connection ends
*
*
* So, when accessing the settings always ensure to know which one you are operating on! (this is
* especially important for the proxy where you have a RDP client and RDP server in the same
* application context)
*/
/** @addtogroup rdpSettings
* @{
*/
/* Surface Commands Flags */
#define SURFCMDS_SET_SURFACE_BITS 0x00000002
#define SURFCMDS_FRAME_MARKER 0x00000010
#define SURFCMDS_STREAM_SURFACE_BITS 0x00000040
#define SURFCMDS_SET_SURFACE_BITS 0x00000002 /** @since version 3.7.0 */
#define SURFCMDS_FRAME_MARKER 0x00000010 /** @since version 3.7.0 */
#define SURFCMDS_STREAM_SURFACE_BITS 0x00000040 /** @since version 3.7.0 */
/* RAIL Support Level */
#define RAIL_LEVEL_SUPPORTED 0x00000001
@ -90,9 +71,11 @@ extern "C"
#define PERF_ENABLE_DESKTOP_COMPOSITION 0x00000100
/* Connection Types */
#define CONNECTION_TYPE_INVALID \
0x00 /* synthetic, removes RNS_UD_CS_VALID_CONNECTION_TYPE from ConnectionType in \
EarlyCapabilityFlags */
#define CONNECTION_TYPE_INVALID \
0x00 /** @brief synthetic, removes RNS_UD_CS_VALID_CONNECTION_TYPE from ConnectionType in \
* EarlyCapabilityFlags \
* @since version 3.6.0 \
*/
#define CONNECTION_TYPE_MODEM 0x01
#define CONNECTION_TYPE_BROADBAND_LOW 0x02
#define CONNECTION_TYPE_SATELLITE 0x03
@ -248,7 +231,7 @@ extern "C"
#define DEFAULT_COOKIE_MAX_LENGTH 0xFF
/* General capability set */
#define TS_CAPS_PROTOCOLVERSION 0x200
#define TS_CAPS_PROTOCOLVERSION 0x200 /** @since version 3.6.0 */
/* Order Support */
#define NEG_DSTBLT_INDEX 0x00
@ -522,4 +505,6 @@ extern "C"
}
#endif
/** @} */
#endif /* FREERDP_SETTINGS_TYPES_H */

View File

@ -32,6 +32,10 @@
#include <string.h>
/** \addtogroup rdpSettings
* @{
*/
#ifdef __cplusplus
extern "C"
{
@ -71,7 +75,9 @@ struct rdp_settings
SETTINGS_DEPRECATED(ALIGN64 char* AcceptedCert); /* 27 */
SETTINGS_DEPRECATED(ALIGN64 UINT32 AcceptedCertLength); /* 28 */
SETTINGS_DEPRECATED(ALIGN64 char* UserSpecifiedServerName); /* 29 */
SETTINGS_DEPRECATED(ALIGN64 char* AadServerHostname); /* 30 */
SETTINGS_DEPRECATED(ALIGN64 char* AadServerHostname); /** 30
* @since version 3.1.0
*/
UINT64 padding0064[64 - 31]; /* 31 */
/* resource management related options */
SETTINGS_DEPRECATED(ALIGN64 UINT32 ThreadingFlags); /* 64 */
@ -213,7 +219,9 @@ struct rdp_settings
SETTINGS_DEPRECATED(ALIGN64 ARC_CS_PRIVATE_PACKET* ClientAutoReconnectCookie); /* 834 */
SETTINGS_DEPRECATED(ALIGN64 ARC_SC_PRIVATE_PACKET* ServerAutoReconnectCookie); /* 835 */
SETTINGS_DEPRECATED(ALIGN64 BOOL PrintReconnectCookie); /* 836 */
SETTINGS_DEPRECATED(ALIGN64 BOOL AutoReconnectionPacketSupported); /* 837 */
SETTINGS_DEPRECATED(ALIGN64 BOOL AutoReconnectionPacketSupported); /** 837
@since version 3.5.0
*/
UINT64 padding0896[896 - 838]; /* 838 */
/* Client Info (Time Zone) */
@ -432,7 +440,9 @@ struct rdp_settings
SETTINGS_DEPRECATED(ALIGN64 char* TransportDumpFile); /* 1861 */
SETTINGS_DEPRECATED(ALIGN64 BOOL TransportDumpReplay); /* 1862 */
SETTINGS_DEPRECATED(ALIGN64 BOOL DeactivateClientDecoding); /* 1863 */
SETTINGS_DEPRECATED(ALIGN64 BOOL TransportDumpReplayNodelay); /* 1864 */
SETTINGS_DEPRECATED(ALIGN64 BOOL TransportDumpReplayNodelay); /** 1864
* @since version 3.6.0
*/
UINT64 padding1920[1920 - 1865]; /* 1865 */
UINT64 padding1984[1984 - 1920]; /* 1920 */
@ -469,7 +479,9 @@ struct rdp_settings
SETTINGS_DEPRECATED(ALIGN64 char* GatewayAvdDiagnosticserviceurl); /* 2009 */
SETTINGS_DEPRECATED(ALIGN64 char* GatewayAvdHubdiscoverygeourl); /* 2010 */
SETTINGS_DEPRECATED(ALIGN64 char* GatewayAvdActivityhint); /* 2011 */
SETTINGS_DEPRECATED(ALIGN64 BOOL GatewayIgnoreRedirectionPolicy); /* 2012 */
SETTINGS_DEPRECATED(ALIGN64 BOOL GatewayIgnoreRedirectionPolicy); /** 2012
* @since version 3.4.0
*/
UINT64 padding2015[2015 - 2013]; /* 2013 */
/* Proxy */
@ -650,7 +662,9 @@ struct rdp_settings
SETTINGS_DEPRECATED(ALIGN64 BOOL SurfaceCommandsEnabled); /* 3520 */
SETTINGS_DEPRECATED(ALIGN64 BOOL FrameMarkerCommandEnabled); /* 3521 */
SETTINGS_DEPRECATED(ALIGN64 BOOL SurfaceFrameMarkerEnabled); /* 3522 */
SETTINGS_DEPRECATED(ALIGN64 UINT32 SurfaceCommandsSupported); /* 3523 */
SETTINGS_DEPRECATED(ALIGN64 UINT32 SurfaceCommandsSupported); /** 3523
* @since version 3.7.0
*/
UINT64 padding3584[3584 - 3524]; /* 3524 */
UINT64 padding3648[3648 - 3584]; /* 3584 */
@ -665,7 +679,9 @@ struct rdp_settings
SETTINGS_DEPRECATED(ALIGN64 UINT32 RemoteFxCodecMode); /* 3651 */
SETTINGS_DEPRECATED(ALIGN64 BOOL RemoteFxImageCodec); /* 3652 */
SETTINGS_DEPRECATED(ALIGN64 UINT32 RemoteFxCaptureFlags); /* 3653 */
SETTINGS_DEPRECATED(ALIGN64 UINT32 RemoteFxRlgrMode); /* 3654 */
SETTINGS_DEPRECATED(ALIGN64 UINT32 RemoteFxRlgrMode); /** 3654
* @since version 3.7.0
*/
UINT64 padding3712[3712 - 3655]; /* 3655 */
/* NSCodec */
@ -693,7 +709,9 @@ struct rdp_settings
SETTINGS_DEPRECATED(ALIGN64 BOOL GfxAVC444v2); /* 3847 */
SETTINGS_DEPRECATED(ALIGN64 UINT32 GfxCapsFilter); /* 3848 */
SETTINGS_DEPRECATED(ALIGN64 BOOL GfxPlanar); /* 3849 */
SETTINGS_DEPRECATED(ALIGN64 BOOL GfxSuspendFrameAck); /* 3850 */
SETTINGS_DEPRECATED(ALIGN64 BOOL GfxSuspendFrameAck); /** 3850
* @since version 3.6.0
*/
UINT64 padding3904[3904 - 3851]; /* 3851 */
/**
@ -748,7 +766,9 @@ struct rdp_settings
SETTINGS_DEPRECATED(ALIGN64 BOOL RedirectSerialPorts); /* 4672 */
SETTINGS_DEPRECATED(ALIGN64 BOOL RedirectParallelPorts); /* 4673 */
SETTINGS_DEPRECATED(ALIGN64 BOOL PreferIPv6OverIPv4); /* 4674 */
SETTINGS_DEPRECATED(ALIGN64 UINT32 ForceIPvX); /* 4675 */
SETTINGS_DEPRECATED(ALIGN64 UINT32 ForceIPvX); /** 4675
* @since version 3.6.0
*/
UINT64 padding4800[4800 - 4676]; /* 4676 */
/**
@ -767,7 +787,8 @@ struct rdp_settings
SETTINGS_DEPRECATED(ALIGN64 UINT32 StaticChannelCount); /* 4928 */
SETTINGS_DEPRECATED(ALIGN64 UINT32 StaticChannelArraySize); /* 4929 */
SETTINGS_DEPRECATED(ALIGN64 ADDIN_ARGV** StaticChannelArray); /* 4930 */
SETTINGS_DEPRECATED(ALIGN64 BOOL SynchronousStaticChannels); /* 4931 */
SETTINGS_DEPRECATED(ALIGN64 BOOL SynchronousStaticChannels); /** 4931
* @since version 3.3.0 */
UINT64 padding5056[5056 - 4932]; /* 4932 */
/**
@ -778,7 +799,9 @@ struct rdp_settings
SETTINGS_DEPRECATED(ALIGN64 UINT32 DynamicChannelArraySize); /* 5057 */
SETTINGS_DEPRECATED(ALIGN64 ADDIN_ARGV** DynamicChannelArray); /* 5058 */
SETTINGS_DEPRECATED(ALIGN64 BOOL SupportDynamicChannels); /* 5059 */
SETTINGS_DEPRECATED(ALIGN64 BOOL SynchronousDynamicChannels); /* 5060 */
SETTINGS_DEPRECATED(ALIGN64 BOOL SynchronousDynamicChannels); /** 5060
* @since version 3.2.0
*/
UINT64 padding5184[5184 - 5061]; /* 5061 */
SETTINGS_DEPRECATED(ALIGN64 BOOL SupportEchoChannel); /* 5184 */
@ -810,4 +833,6 @@ struct rdp_settings
}
#endif
/** @} */
#endif /* FREERDP_SETTINGS_TYPES_PRIVATE_H */

View File

@ -32,13 +32,34 @@
extern "C"
{
#endif
/**
* @brief Read data from a transport layer
* @param userContext
* @param data a buffer to read to
* @param bytes the size of the buffer
* @return the number of bytes read or <0 for failures
* @since version 3.9.0
*/
typedef int (*pTransportLayerRead)(void* userContext, void* data, int bytes);
/**
* @brief write data to a transport layer
* @param userContext
* @param data a buffer to write
* @param bytes the size of the buffer
* @return the number of bytes written or <0 for failures
* @since version 3.9.0
*/
typedef int (*pTransportLayerWrite)(void* userContext, const void* data, int bytes);
typedef BOOL (*pTransportLayerFkt)(void* userContext);
typedef BOOL (*pTransportLayerWait)(void* userContext, BOOL waitWrite, DWORD timeout);
typedef HANDLE (*pTransportLayerGetEvent)(void* userContext);
struct rdp_transport_layer
/**
* @since version 3.9.0
*/
typedef struct
{
ALIGN64 void* userContext;
ALIGN64 pTransportLayerRead Read;
@ -47,8 +68,7 @@ extern "C"
ALIGN64 pTransportLayerWait Wait;
ALIGN64 pTransportLayerGetEvent GetEvent;
UINT64 reserved[64 - 6]; /* Reserve some space for ABI compatibility */
};
typedef struct rdp_transport_layer rdpTransportLayer;
} rdpTransportLayer;
typedef int (*pTCPConnect)(rdpContext* context, rdpSettings* settings, const char* hostname,
int port, DWORD timeout);
@ -58,10 +78,26 @@ extern "C"
typedef SSIZE_T (*pTransportRead)(rdpTransport* transport, BYTE* data, size_t bytes);
typedef BOOL (*pTransportGetPublicKey)(rdpTransport* transport, const BYTE** data,
DWORD* length);
/** @brief
*
* @param transport The transport to manipulate
* @param blocking Boolean to set the transport \b TRUE blocking and \b FALSE non-blocking
* @return \b TRUE for success, \b FALSE for any error
*
* @since version 3.3.0
*/
typedef BOOL (*pTransportSetBlockingMode)(rdpTransport* transport, BOOL blocking);
typedef rdpTransportLayer* (*pTransportConnectLayer)(rdpTransport* transport,
const char* hostname, int port,
DWORD timeout);
/** @brief Return the public key as PEM from transport layer.
* @param transport the transport to query
* @param data A pointer to hold the allocated result
* @param length A pointer to hold the length in bytes of the result
*
* @return \b TRUE for success, \b FALSE for failure
* @since version 3.2.0
*/
typedef BOOL (*pTransportAttachLayer)(rdpTransport* transport, rdpTransportLayer* layer);
struct rdp_transport_io
@ -74,10 +110,10 @@ extern "C"
pTransportRWFkt ReadPdu; /* Reads a whole PDU from the transport */
pTransportRWFkt WritePdu; /* Writes a whole PDU to the transport */
pTransportRead ReadBytes; /* Reads up to a requested amount of bytes */
pTransportGetPublicKey GetPublicKey;
pTransportSetBlockingMode SetBlockingMode;
pTransportConnectLayer ConnectLayer;
pTransportAttachLayer AttachLayer;
pTransportGetPublicKey GetPublicKey; /** @since version 3.2.0 */
pTransportSetBlockingMode SetBlockingMode; /** @since version 3.3.0 */
pTransportConnectLayer ConnectLayer; /** @since 3.9.0 */
pTransportAttachLayer AttachLayer; /** @since 3.9.0 */
UINT64 reserved[64 - 12]; /* Reserve some space for ABI compatibility */
};
typedef struct rdp_transport_io rdpTransportIo;
@ -101,9 +137,23 @@ extern "C"
FREERDP_API rdpContext* transport_get_context(rdpTransport* transport);
FREERDP_API rdpTransport* freerdp_get_transport(rdpContext* context);
FREERDP_API rdpTransportLayer* transport_layer_new(rdpTransport* transport, size_t contextSize);
/**
* @brief Free a transport layer instance
* @param layer A pointer to the layer to free or \b NULL
* @since version 3.9.0
*/
FREERDP_API void transport_layer_free(rdpTransportLayer* layer);
/**
* @brief Create new transport layer instance
* @param transport A pointer to the transport instance to use
* @param contextSize The size of the context to use
* @return A new transport layer instance or \b NULL in case of failure
* @since version 3.9.0
*/
WINPR_ATTR_MALLOC(transport_layer_free, 1)
FREERDP_API rdpTransportLayer* transport_layer_new(rdpTransport* transport, size_t contextSize);
#ifdef __cplusplus
}
#endif

View File

@ -30,6 +30,12 @@ extern "C"
{
#endif
/**
* @brief Stringification utility for rdpgfx capability versions
* @param capsVersion A capability version integer
* @return The string representation of the capabilities
* @since version 3.9.0
*/
FREERDP_API const char* rdpgfx_caps_version_str(UINT32 capsVersion);
FREERDP_API const char* rdpgfx_get_cmd_id_string(UINT16 cmdId);

View File

@ -46,8 +46,8 @@ int freerdp_interruptible_getc(rdpContext* context, FILE* f)
return read_chr(f);
}
char* freerdp_passphrase_read(rdpContext* context, const char* prompt, char* buf, size_t bufsiz,
int from_stdin)
const char* freerdp_passphrase_read(rdpContext* context, const char* prompt, char* buf,
size_t bufsiz, int from_stdin)
{
WCHAR UserNameW[CREDUI_MAX_USERNAME_LENGTH + 1] = { 'p', 'r', 'e', 'f', 'i',
'l', 'l', 'e', 'd', '\0' };
@ -127,8 +127,8 @@ static void replace_char(char* buffer, size_t buffer_len, const char* toreplace)
}
}
static char* freerdp_passphrase_read_tty(rdpContext* context, const char* prompt, char* buf,
size_t bufsiz, int from_stdin)
static const char* freerdp_passphrase_read_tty(rdpContext* context, const char* prompt, char* buf,
size_t bufsiz, int from_stdin)
{
BOOL terminal_needs_reset = FALSE;
char term_name[L_ctermid] = { 0 };
@ -271,8 +271,8 @@ int freerdp_interruptible_getc(rdpContext* context, FILE* f)
#else
char* freerdp_passphrase_read(rdpContext* context, const char* prompt, char* buf, size_t bufsiz,
int from_stdin)
const char* freerdp_passphrase_read(rdpContext* context, const char* prompt, char* buf,
size_t bufsiz, int from_stdin)
{
return NULL;
}

View File

@ -25,7 +25,7 @@
#cmakedefine WINPR_HAVE_UNWIND_H
#cmakedefine WINPR_WITH_PNG
#cmakedefine WINPR_HAVE_STRERROR_R
#cmakedefine WINPR_HAVE_STRERROR_R /** @since version 3.3.0 */
#cmakedefine WITH_EVENTFD_READ_WRITE
@ -34,15 +34,15 @@
#cmakedefine WITH_INTERNAL_MD4
#cmakedefine WITH_INTERNAL_MD5
#cmakedefine WITH_WINPR_JSON
#cmakedefine WITH_WINPR_JSON /** @since version 3.6.0 */
#cmakedefine WITH_DEBUG_NTLM
#cmakedefine WITH_DEBUG_THREADS
#cmakedefine WITH_DEBUG_EVENTS
#cmakedefine WITH_DEBUG_MUTEX
#cmakedefine WINPR_UTILS_IMAGE_WEBP
#cmakedefine WINPR_UTILS_IMAGE_PNG
#cmakedefine WINPR_UTILS_IMAGE_JPEG
#cmakedefine WINPR_UTILS_IMAGE_WEBP /** @since version 3.3.0 */
#cmakedefine WINPR_UTILS_IMAGE_PNG /** @since version 3.3.0 */
#cmakedefine WINPR_UTILS_IMAGE_JPEG /** @since version 3.3.0 */
#endif /* WINPR_CONFIG_H */

View File

@ -63,8 +63,25 @@ extern "C"
} wObject;
/* utility function with compatible arguments for string data */
/** @brief helper function to clone a string
* @param pvstr the source string to clone
* @return A clone of the source or \b NULL
* @since version 3.3.0
*/
WINPR_API void* winpr_ObjectStringClone(const void* pvstr);
/** @brief helper function to clone a WCHAR string
* @param pvstr the source string to clone
* @return A clone of the source or \b NULL
* @since version 3.3.0
*/
WINPR_API void* winpr_ObjectWStringClone(const void* pvstr);
/** @brief helper function to free a (WCHAR) string
* @param pvstr the string to free
* @since version 3.3.0
*/
WINPR_API void winpr_ObjectStringFree(void* pvstr);
/* System.Collections.Queue */

View File

@ -60,10 +60,14 @@ typedef struct
#pragma pack(pop)
/** @defgrop WINPR_IMAGE_FORMAT
* #{
*/
#define WINPR_IMAGE_BITMAP 0
#define WINPR_IMAGE_PNG 1
#define WINPR_IMAGE_JPEG 2
#define WINPR_IMAGE_WEBP 3
#define WINPR_IMAGE_JPEG 2 /** @since version 3.3.0 */
#define WINPR_IMAGE_WEBP 3 /** @since version 3.3.0 */
/** #} */
#define WINPR_IMAGE_BMP_HEADER_LEN 54
@ -78,6 +82,10 @@ typedef struct
UINT32 bytesPerPixel;
} wImage;
/** @defgroup WINPR_IMAGE_CMP_FLAGS
* @since version 3.3.0
* @{
*/
typedef enum
{
WINPR_IMAGE_CMP_NO_FLAGS = 0,
@ -86,6 +94,8 @@ typedef enum
WINPR_IMAGE_CMP_FUZZY = 4
} wImageFlags;
/** @} */
#ifdef __cplusplus
extern "C"
{
@ -93,6 +103,20 @@ extern "C"
WINPR_API int winpr_bitmap_write(const char* filename, const BYTE* data, size_t width,
size_t height, size_t bpp);
/** @brief write a bitmap to a file
*
* @param filename the name of the file to write to
* @param data the data of the bitmap without headers
* @param stride the byte size of a line in the image
* @param width the width in pixels of a line
* @param the height of the bitmap
* @param bpp the color depth of the bitmap
*
* @since version 3.3.0
*
* @return \b >=0 for success, /b <0 for an error
*/
WINPR_API int winpr_bitmap_write_ex(const char* filename, const BYTE* data, size_t stride,
size_t width, size_t height, size_t bpp);
WINPR_API BYTE* winpr_bitmap_construct_header(size_t width, size_t height, size_t bpp);
@ -101,6 +125,17 @@ extern "C"
WINPR_API int winpr_image_write_ex(wImage* image, UINT32 format, const char* filename);
WINPR_API int winpr_image_read(wImage* image, const char* filename);
/** @brief write a bitmap to a buffer and return it
*
* @param image the image to write
* @param format the format of type @WINPR_IMAGE_FORMAT
* @param size a pointer to hold the size in bytes of the allocated bitmap
*
* @since version 3.3.0
*
* @return \b NULL in case of failure, a pointer to an allocated buffer otherwise. Use \b free
* as deallocator
*/
WINPR_API void* winpr_image_write_buffer(wImage* image, UINT32 format, size_t* size);
WINPR_API int winpr_image_read_buffer(wImage* image, const BYTE* buffer, size_t size);
@ -109,9 +144,46 @@ extern "C"
WINPR_ATTR_MALLOC(winpr_image_free, 1)
WINPR_API wImage* winpr_image_new(void);
/** @brief Check if a image format is supported
*
* @param format the format of type @WINPR_IMAGE_FORMAT
*
* @since version 3.3.0
*
* @return \b TRUE if the format is supported, \b FALSE otherwise
*/
WINPR_API BOOL winpr_image_format_is_supported(UINT32 format);
/** @brief Return the file extension of a format
*
* @param format the format of type @WINPR_IMAGE_FORMAT
*
* @since version 3.3.0
*
* @return a extension string if format has one or \b NULL
*/
WINPR_API const char* winpr_image_format_extension(UINT32 format);
/** @brief Return the mime type of a format
*
* @param format the format of type @WINPR_IMAGE_FORMAT
*
* @since version 3.3.0
*
* @return a mime type string if format has one or \b NULL
*/
WINPR_API const char* winpr_image_format_mime(UINT32 format);
/** @brief Check if two images are content equal
*
* @param imageA the first image for the comparison
* @param imageB the second image for the comparison
* @param flags Comparions flags @WINPR_IMAGE_CMP_FLAGS
*
* @since version 3.3.0
*
* @return \b TRUE if they are equal, \b FALSE otherwise
*/
WINPR_API BOOL winpr_image_equal(const wImage* imageA, const wImage* imageB, UINT32 flags);
#ifdef __cplusplus

View File

@ -25,6 +25,12 @@
#include <winpr/string.h>
#include <winpr/wtypes.h>
/** @defgroup WINPR_JSON
* @since version 3.6.0
* @brief Wrapper around cJSON or JSONC libraries
* @{
*/
#ifdef __cplusplus
extern "C"
{
@ -32,64 +38,355 @@ extern "C"
typedef void WINPR_JSON;
/**
* @brief Get the library version string
*
* @param buffer a string buffer to hold the version string
* @param len the length of the buffer
* @return length of the version string in bytes or negative for error
* @since version 3.6.0
*/
WINPR_API int WINPR_JSON_version(char* buffer, size_t len);
WINPR_API WINPR_JSON* WINPR_JSON_Parse(const char* value);
WINPR_API WINPR_JSON* WINPR_JSON_ParseWithLength(const char* value, size_t buffer_length);
/**
* @brief Delete a @WINPR_JSON object
*
* @param item The instance to delete
* @since version 3.6.0
*/
WINPR_API void WINPR_JSON_Delete(WINPR_JSON* item);
/**
* @brief Parse a '\0' terminated JSON string
*
* @param value A '\0' terminated JSON string
* @return A @WINPR_JSON object holding the parsed string or \b NULL if failed
* @since version 3.6.0
*/
WINPR_ATTR_MALLOC(WINPR_JSON_Delete, 1)
WINPR_API WINPR_JSON* WINPR_JSON_Parse(const char* value);
/**
* @brief Parse a JSON string
*
* @param value A JSON string
* @param buffer_length The length in bytes of the JSON string
* @return A @WINPR_JSON object holding the parsed string or \b NULL if failed
* @since version 3.6.0
*/
WINPR_ATTR_MALLOC(WINPR_JSON_Delete, 1)
WINPR_API WINPR_JSON* WINPR_JSON_ParseWithLength(const char* value, size_t buffer_length);
/**
* @brief Get the number of arrayitems from an array
*
* @param array the JSON instance to query
* @return number of array items
* @since version 3.6.0
*/
WINPR_API size_t WINPR_JSON_GetArraySize(const WINPR_JSON* array);
/**
* @brief Return a pointer to an item in the array
*
* @param array the JSON instance to query
* @param index The index of the array item
* @return A pointer to the array item or \b NULL if failed
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_GetArrayItem(const WINPR_JSON* array, size_t index);
/**
* @brief Return a pointer to an JSON object item
* @param object the JSON object
* @param string the name of the object
* @return A pointer to the object identified by @string or \b NULL
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_GetObjectItem(const WINPR_JSON* object, const char* string);
/**
* @brief Same as @WINPR_JSON_GetObjectItem but with case insensitive matching
*
* @param object the JSON instance to query
* @param string the name of the object
* @return A pointer to the object identified by @string or \b NULL
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_GetObjectItemCaseSensitive(const WINPR_JSON* object,
const char* string);
/**
* @brief Check if JSON has an object matching the name
* @param object the JSON instance
* @param string the name of the object
* @return \b TRUE if found, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL WINPR_JSON_HasObjectItem(const WINPR_JSON* object, const char* string);
/**
* @brief Return an error string
* @return A string describing the last error that occured or \b NULL
* @since version 3.6.0
*/
WINPR_API const char* WINPR_JSON_GetErrorPtr(void);
/**
* @brief Return the String value of a JSON item
* @param item the JSON item to query
* @return The string value or \b NULL if failed
* @since version 3.6.0
*/
WINPR_API const char* WINPR_JSON_GetStringValue(WINPR_JSON* item);
/**
* @brief Return the Number value of a JSON item
* @param item the JSON item to query
* @return The Number value or \b NaN if failed
* @since version 3.6.0
*/
WINPR_API double WINPR_JSON_GetNumberValue(const WINPR_JSON* item);
/**
* @brief Check if JSON item is valid
* @param item the JSON item to query
* @return \b TRUE if valid, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL WINPR_JSON_IsInvalid(const WINPR_JSON* item);
/**
* @brief Check if JSON item is BOOL value False
* @param item the JSON item to query
* @return \b TRUE if False, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL WINPR_JSON_IsFalse(const WINPR_JSON* item);
/**
* @brief Check if JSON item is BOOL value True
* @param item the JSON item to query
* @return \b TRUE if True, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL WINPR_JSON_IsTrue(const WINPR_JSON* item);
/**
* @brief Check if JSON item is of type BOOL
* @param item the JSON item to query
* @return \b TRUE if the type is BOOL, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL WINPR_JSON_IsBool(const WINPR_JSON* item);
/**
* @brief Check if JSON item is Null
* @param item the JSON item to query
* @return \b TRUE if it is Null, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL WINPR_JSON_IsNull(const WINPR_JSON* item);
/**
* @brief Check if JSON item is of type Number
* @param item the JSON item to query
* @return \b TRUE if the type is Number, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL WINPR_JSON_IsNumber(const WINPR_JSON* item);
/**
* @brief Check if JSON item is of type String
* @param item the JSON item to query
* @return \b TRUE if the type is String, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL WINPR_JSON_IsString(const WINPR_JSON* item);
/**
* @brief Check if JSON item is of type Array
* @param item the JSON item to query
* @return \b TRUE if the type is Array, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL WINPR_JSON_IsArray(const WINPR_JSON* item);
/**
* @brief Check if JSON item is of type Object
* @param item the JSON item to query
* @return \b TRUE if the type is Object, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL WINPR_JSON_IsObject(const WINPR_JSON* item);
/**
* @brief WINPR_JSON_CreateNull
* @return a new JSON item of type and value Null
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_CreateNull(void);
/**
* @brief WINPR_JSON_CreateTrue
* @return a new JSON item of type Bool and value True
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_CreateTrue(void);
/**
* @brief WINPR_JSON_CreateFalse
* @return a new JSON item of type Bool and value False
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_CreateFalse(void);
/**
* @brief WINPR_JSON_CreateBool
* @param boolean the value the JSON item should have
* @return a new JSON item of type Bool
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_CreateBool(BOOL boolean);
/**
* @brief WINPR_JSON_CreateNumber
* @param num the number value of the new item
* @return a new JSON item of type Number
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_CreateNumber(double num);
/**
* @brief WINPR_JSON_CreateString
* @param string The string value of the new item
* @return a new JSON item of type String
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_CreateString(const char* string);
/**
* @brief WINPR_JSON_CreateArray
* @return a new JSON item of type array, empty
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_CreateArray(void);
/**
* @brief WINPR_JSON_CreateObject
* @return a new JSON item of type Object
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_CreateObject(void);
/**
* @brief WINPR_JSON_AddNullToObject
* @param object The JSON object the new item is added to
* @param name The name of the object
* @return the new JSON item added
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_AddNullToObject(WINPR_JSON* object, const char* name);
/**
* @brief WINPR_JSON_AddTrueToObject
* @param object The JSON object the new item is added to
* @param name The name of the object
* @return the new JSON item added
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_AddTrueToObject(WINPR_JSON* object, const char* name);
/**
* @brief WINPR_JSON_AddFalseToObject
* @param object The JSON object the new item is added to
* @param name The name of the object
* @return the new JSON item added
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_AddFalseToObject(WINPR_JSON* object, const char* name);
/**
* @brief WINPR_JSON_AddBoolToObject
* @param object The JSON object the new item is added to
* @param name The name of the object
* @return the new JSON item added
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_AddBoolToObject(WINPR_JSON* object, const char* name,
BOOL boolean);
/**
* @brief WINPR_JSON_AddNumberToObject
* @param object The JSON object the new item is added to
* @param name The name of the object
* @return the new JSON item added
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_AddNumberToObject(WINPR_JSON* object, const char* name,
double number);
/**
* @brief WINPR_JSON_AddStringToObject
* @param object The JSON object the new item is added to
* @param name The name of the object
* @return the new JSON item added
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_AddStringToObject(WINPR_JSON* object, const char* name,
const char* string);
/**
* @brief WINPR_JSON_AddObjectToObject
* @param object The JSON object the new item is added to
* @param name The name of the object
* @return the new JSON item added
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_AddObjectToObject(WINPR_JSON* object, const char* name);
/**
* @brief WINPR_JSON_AddArrayToObject
* @param object The JSON object the new item is added to
* @param name The name of the object
* @return the new JSON item added
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_AddArrayToObject(WINPR_JSON* object, const char* name);
/**
* @brief Add an item to an existing array
* @param array An array to add to, must not be \b NULL
* @param item An item to add, must not be \b NULL
* @return \b TRUE for success, \b FALSE for failure
* @since version 3.7.0
*/
WINPR_API BOOL WINPR_JSON_AddItemToArray(WINPR_JSON* array, WINPR_JSON* item);
/**
* @brief Serialize a JSON instance to string
* for minimal size without formatting see @WINPR_JSON_PrintUnformatted
*
* @param item The JSON instance to serialize
* @return A string representation of the JSON instance or \b NULL
* @since version 3.6.0
*/
WINPR_API char* WINPR_JSON_Print(WINPR_JSON* item);
/**
* @brief Serialize a JSON instance to string without formatting
* for human readable formatted output see @WINPR_JSON_Print
*
* @param item The JSON instance to serialize
* @return A string representation of the JSON instance or \b NULL
* @since version 3.6.0
*/
WINPR_API char* WINPR_JSON_PrintUnformatted(WINPR_JSON* item);
#ifdef __cplusplus
}
#endif
/** @} */
#endif

View File

@ -85,6 +85,14 @@ extern "C"
}
#endif
/**
* @brief A macro to get a function pointer from a library handle
* @param module The library handle
* @param name The name of the function
* @param type The type of the function pointer
* @since version 3.9.0
* @return A new function pointer or \b NULL
*/
#define GetProcAddressAs(module, name, type) WINPR_FUNC_PTR_CAST(GetProcAddress(module, name), type)
#if !defined(_WIN32) && !defined(__CYGWIN__)

View File

@ -217,6 +217,7 @@ extern "C"
*
* @param phProvider [in] provider handle
* @return module path
* @since version 3.6.0
*/
WINPR_API const char* winpr_NCryptGetModulePath(NCRYPT_PROV_HANDLE phProvider);

View File

@ -25,9 +25,9 @@
#if defined(__clang__)
#define WINPR_PRAGMA_DIAG_PUSH _Pragma("clang diagnostic push")
#define WINPR_PRAGMA_DIAG_IGNORED_OVERLENGTH_STRINGS \
_Pragma("clang diagnostic ignored \"-Woverlength-strings\"")
_Pragma("clang diagnostic ignored \"-Woverlength-strings\"") /** @since version 3.9.0 */
#define WINPR_PRAGMA_DIAG_IGNORED_QUALIFIERS \
_Pragma("clang diagnostic ignored \"-Wdiscarded-qualifiers\"")
_Pragma("clang diagnostic ignored \"-Wdiscarded-qualifiers\"") /** @since version 3.9.0 */
#define WINPR_PRAGMA_DIAG_IGNORED_PEDANTIC _Pragma("clang diagnostic ignored \"-Wpedantic\"")
#define WINPR_PRAGMA_DIAG_IGNORED_MISSING_PROTOTYPES \
_Pragma("clang diagnostic ignored \"-Wmissing-prototypes\"")
@ -46,17 +46,18 @@
#define WINPR_PRAGMA_DIAG_IGNORED_FORMAT_SECURITY \
_Pragma("clang diagnostic ignored \"-Wformat-security\"")
#define WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL \
_Pragma("clang diagnostic ignored \"-Wformat-nonliteral\"")
#define WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC /* not supported \
_Pragma("clang diagnostic ignored \"-Wformat-nonliteral\"") /** @since version 3.9.0 */
#define WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC /** @since version 3.3.0 */ /* not supported \
_Pragma("clang diagnostic ignored \"-Wmismatched-dealloc\"") */
#define WINPR_PRAGMA_DIAG_POP _Pragma("clang diagnostic pop")
#define WINPR_PRAGMA_UNROLL_LOOP _Pragma("clang loop vectorize_width(8) interleave_count(8)")
#define WINPR_PRAGMA_UNROLL_LOOP \
_Pragma("clang loop vectorize_width(8) interleave_count(8)") /** @since version 3.6.0 */
#elif defined(__GNUC__)
#define WINPR_PRAGMA_DIAG_PUSH _Pragma("GCC diagnostic push")
#define WINPR_PRAGMA_DIAG_IGNORED_OVERLENGTH_STRINGS \
_Pragma("GCC diagnostic ignored \"-Woverlength-strings\"")
_Pragma("GCC diagnostic ignored \"-Woverlength-strings\"") /** @since version 3.9.0 */
#define WINPR_PRAGMA_DIAG_IGNORED_QUALIFIERS \
_Pragma("GCC diagnostic ignored \"-Wdiscarded-qualifiers\"")
_Pragma("GCC diagnostic ignored \"-Wdiscarded-qualifiers\"") /** @since version 3.9.0 */
#define WINPR_PRAGMA_DIAG_IGNORED_PEDANTIC _Pragma("GCC diagnostic ignored \"-Wpedantic\"")
#define WINPR_PRAGMA_DIAG_IGNORED_MISSING_PROTOTYPES \
_Pragma("GCC diagnostic ignored \"-Wmissing-prototypes\"")
@ -76,20 +77,21 @@
#define WINPR_PRAGMA_DIAG_IGNORED_FORMAT_SECURITY \
_Pragma("GCC diagnostic ignored \"-Wformat-security\"")
#define WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL \
_Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\"")
_Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\"") /** @since version 3.9.0 */
#if __GNUC__ >= 11
#define WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC \
_Pragma("GCC diagnostic ignored \"-Wmismatched-dealloc\"")
_Pragma("GCC diagnostic ignored \"-Wmismatched-dealloc\"") /** @since version 3.3.0 */
#else
#define WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
#endif
#define WINPR_PRAGMA_DIAG_POP _Pragma("GCC diagnostic pop")
#define WINPR_PRAGMA_UNROLL_LOOP _Pragma("GCC unroll 8") _Pragma("GCC ivdep")
#define WINPR_PRAGMA_UNROLL_LOOP \
_Pragma("GCC unroll 8") _Pragma("GCC ivdep") /** @since version 3.6.0 */
#else
#define WINPR_PRAGMA_DIAG_PUSH
#define WINPR_PRAGMA_DIAG_IGNORED_PEDANTIC
#define WINPR_PRAGMA_DIAG_IGNORED_QUALIFIERS
#define WINPR_PRAGMA_DIAG_IGNORED_OVERLENGTH_STRINGS
#define WINPR_PRAGMA_DIAG_IGNORED_QUALIFIERS /** @since version 3.9.0 */
#define WINPR_PRAGMA_DIAG_IGNORED_OVERLENGTH_STRINGS /** @since version 3.9.0 */
#define WINPR_PRAGMA_DIAG_IGNORED_MISSING_PROTOTYPES
#define WINPR_PRAGMA_DIAG_IGNORED_STRICT_PROTOTYPES
#define WINPR_PRAGMA_DIAG_IGNORED_RESERVED_ID_MACRO
@ -98,15 +100,15 @@
#define WINPR_PRAGMA_DIAG_IGNORED_ATOMIC_SEQ_CST
#define WINPR_PRAGMA_DIAG_IGNORED_UNUSED_CONST_VAR
#define WINPR_PRAGMA_DIAG_IGNORED_FORMAT_SECURITY
#define WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL
#define WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
#define WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL /** @since version 3.9.0 */
#define WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC /** @since version 3.3.0 */
#define WINPR_PRAGMA_DIAG_POP
#define WINPR_PRAGMA_UNROLL_LOOP
#define WINPR_PRAGMA_UNROLL_LOOP /** @since version 3.6.0 */
#endif
#if defined(MSVC)
#undef WINPR_PRAGMA_UNROLL_LOOP
#define WINPR_PRAGMA_UNROLL_LOOP _Pragma("loop ( ivdep )")
#define WINPR_PRAGMA_UNROLL_LOOP _Pragma("loop ( ivdep )") /** @since version 3.6.0 */
#endif
WINPR_PRAGMA_DIAG_PUSH

View File

@ -29,7 +29,7 @@
typedef enum _KERB_LOGON_SUBMIT_TYPE
{
KerbInvalidValue = 0,
KerbInvalidValue = 0, /** @since version 3.9.0 */
KerbInteractiveLogon = 2,
KerbSmartCardLogon = 6,
KerbWorkstationUnlockLogon = 7,

View File

@ -348,141 +348,309 @@ extern "C"
return v;
}
/**
* @brief Stream_Get_UINT8
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT8 Stream_Get_UINT8(wStream* _s)
{
return stream_read_u8(_s, TRUE);
}
/**
* @brief Stream_Get_INT8
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT8 Stream_Get_INT8(wStream* _s)
{
return stream_read_i8(_s, TRUE);
}
/**
* @brief Stream_Get_UINT16
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT16 Stream_Get_UINT16(wStream* _s)
{
return stream_read_u16_le(_s, TRUE);
}
/**
* @brief Stream_Get_INT16
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT16 Stream_Get_INT16(wStream* _s)
{
return stream_read_i16_le(_s, TRUE);
}
/**
* @brief Stream_Get_UINT16 big endian
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT16 Stream_Get_UINT16_BE(wStream* _s)
{
return stream_read_u16_be(_s, TRUE);
}
/**
* @brief Stream_Get_INT16 big endian
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT16 Stream_Get_INT16_BE(wStream* _s)
{
return stream_read_i16_be(_s, TRUE);
}
/**
* @brief Stream_Get_UINT32
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT32 Stream_Get_UINT32(wStream* _s)
{
return stream_read_u32_le(_s, TRUE);
}
/**
* @brief Stream_Get_INT32
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT32 Stream_Get_INT32(wStream* _s)
{
return stream_read_i32_le(_s, TRUE);
}
/**
* @brief Stream_Get_UINT32 big endian
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT32 Stream_Get_UINT32_BE(wStream* _s)
{
return stream_read_u32_be(_s, TRUE);
}
/**
* @brief Stream_Get_INT32 big endian
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT32 Stream_Get_INT32_BE(wStream* _s)
{
return stream_read_i32_be(_s, TRUE);
}
/**
* @brief Stream_Get_UINT64
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT64 Stream_Get_UINT64(wStream* _s)
{
return stream_read_u64_le(_s, TRUE);
}
/**
* @brief Stream_Get_INT64
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT64 Stream_Get_INT64(wStream* _s)
{
return stream_read_i64_le(_s, TRUE);
}
/**
* @brief Stream_Get_UINT64 big endian
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT64 Stream_Get_UINT64_BE(wStream* _s)
{
return stream_read_u64_be(_s, TRUE);
}
/**
* @brief Stream_Get_INT64 big endian
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT64 Stream_Get_INT64_BE(wStream* _s)
{
return stream_read_i64_be(_s, TRUE);
}
/**
* @brief Read a UINT8 from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT8 Stream_Peek_Get_UINT8(wStream* _s)
{
return stream_read_u8(_s, FALSE);
}
/**
* @brief Read a INT8 from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT8 Stream_Peek_Get_INT8(wStream* _s)
{
return stream_read_i8(_s, FALSE);
}
/**
* @brief Read a UINT16 from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT16 Stream_Peek_Get_UINT16(wStream* _s)
{
return stream_read_u16_le(_s, FALSE);
}
/**
* @brief Read a INT16 from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT16 Stream_Peek_Get_INT16(wStream* _s)
{
return stream_read_i16_le(_s, FALSE);
}
/**
* @brief Read a UINT16 big endian from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT16 Stream_Peek_Get_UINT16_BE(wStream* _s)
{
return stream_read_u16_be(_s, FALSE);
}
/**
* @brief Read a INT16 big endian from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT16 Stream_Peek_Get_INT16_BE(wStream* _s)
{
return stream_read_i16_be(_s, FALSE);
}
/**
* @brief Read a UINT32 from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT32 Stream_Peek_Get_UINT32(wStream* _s)
{
return stream_read_u32_le(_s, FALSE);
}
/**
* @brief Read a INT32 from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT32 Stream_Peek_Get_INT32(wStream* _s)
{
return stream_read_i32_le(_s, FALSE);
}
/**
* @brief Read a UINT32 big endian from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT32 Stream_Peek_Get_UINT32_BE(wStream* _s)
{
return stream_read_u32_be(_s, FALSE);
}
/**
* @brief Read a INT32 big endian from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT32 Stream_Peek_Get_INT32_BE(wStream* _s)
{
return stream_read_i32_be(_s, FALSE);
}
/**
* @brief Read a UINT64 from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT64 Stream_Peek_Get_UINT64(wStream* _s)
{
return stream_read_u64_le(_s, FALSE);
}
/**
* @brief Read a INT64 from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT64 Stream_Peek_Get_INT64(wStream* _s)
{
return stream_read_i64_le(_s, FALSE);
}
/**
* @brief Read a UINT64 big endian from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE UINT64 Stream_Peek_Get_UINT64_BE(wStream* _s)
{
return stream_read_u64_be(_s, FALSE);
}
/**
* @brief Read a INT64 big endian from the stream, do not increment stream position
* @param _s The stream to read from
* @return an integer
* @since version 3.9.0
*/
static INLINE INT64 Stream_Peek_Get_INT64_BE(wStream* _s)
{
return stream_read_i64_be(_s, FALSE);

View File

@ -227,19 +227,19 @@ extern "C"
#define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
#define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
#define PF_SSSE3_INSTRUCTIONS_AVAILABLE 36
#define PF_SSE4_1_INSTRUCTIONS_AVAILABLE 37
#define PF_SSE4_2_INSTRUCTIONS_AVAILABLE 38
#define PF_AVX_INSTRUCTIONS_AVAILABLE 39
#define PF_AVX2_INSTRUCTIONS_AVAILABLE 40
#define PF_AVX512F_INSTRUCTIONS_AVAILABLE 41
#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
#define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34
#define PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE 43
#define PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE 44
#define PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE 45
#define PF_SSSE3_INSTRUCTIONS_AVAILABLE 36 /** @since version 3.3.0 */
#define PF_SSE4_1_INSTRUCTIONS_AVAILABLE 37 /** @since version 3.3.0 */
#define PF_SSE4_2_INSTRUCTIONS_AVAILABLE 38 /** @since version 3.3.0 */
#define PF_AVX_INSTRUCTIONS_AVAILABLE 39 /** @since version 3.3.0 */
#define PF_AVX2_INSTRUCTIONS_AVAILABLE 40 /** @since version 3.3.0 */
#define PF_AVX512F_INSTRUCTIONS_AVAILABLE 41 /** @since version 3.3.0 */
#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29 /** @since version 3.3.0 */
#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30 /** @since version 3.3.0 */
#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31 /** @since version 3.3.0 */
#define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34 /** @since version 3.3.0 */
#define PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE 43 /** @since version 3.3.0 */
#define PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE 44 /** @since version 3.3.0 */
#define PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE 45 /** @since version 3.3.0 */
#define PF_ARM_V4 0x80000001
#define PF_ARM_V5 0x80000002
@ -335,15 +335,24 @@ extern "C"
#endif
#define WINPR_TIME_NS_TO_S(ns) ((ns) / 1000000000ull)
#define WINPR_TIME_NS_TO_MS(ns) ((ns) / 1000000ull)
#define WINPR_TIME_NS_TO_US(ns) ((ns) / 1000ull)
#define WINPR_TIME_NS_TO_S(ns) ((ns) / 1000000000ull) /** @since version 3.4.0 */
#define WINPR_TIME_NS_TO_MS(ns) ((ns) / 1000000ull) /** @since version 3.4.0 */
#define WINPR_TIME_NS_TO_US(ns) ((ns) / 1000ull) /** @since version 3.4.0 */
#define WINPR_TIME_NS_REM_NS(ns) ((ns) % 1000000000ull)
#define WINPR_TIME_NS_REM_US(ns) (WINPR_TIME_NS_REM_NS(ns) / 1000ull)
#define WINPR_TIME_NS_REM_MS(ns) (WINPR_TIME_NS_REM_US(ns) / 1000ull)
#define WINPR_TIME_NS_REM_NS(ns) ((ns) % 1000000000ull) /** @since version 3.4.0 */
#define WINPR_TIME_NS_REM_US(ns) (WINPR_TIME_NS_REM_NS(ns) / 1000ull) /** @since version 3.4.0 */
#define WINPR_TIME_NS_REM_MS(ns) (WINPR_TIME_NS_REM_US(ns) / 1000ull) /** @since version 3.4.0 */
/** @brief get current tick count in nano second resolution
* @since version 3.4.0
* @return The tick count in nanosecond resolution since a undefined reference data
*/
WINPR_API UINT64 winpr_GetTickCount64NS(void);
/** @brief the the current time in nano second resolution
* @since version 3.4.0
* @return The nano seconds since 1.1.1970
*/
WINPR_API UINT64 winpr_GetUnixTimeNS(void);
WINPR_API DWORD GetTickCountPrecise(void);

View File

@ -194,16 +194,29 @@ extern "C"
#endif
/* Thread */
#define THREAD_MODE_BACKGROUND_BEGIN 0x00010000
#define THREAD_MODE_BACKGROUND_END 0x00020000
#define THREAD_PRIORITY_ABOVE_NORMAL 1
#define THREAD_PRIORITY_BELOW_NORMAL -1
#define THREAD_PRIORITY_HIGHEST 2
#define THREAD_PRIORITY_IDLE -15
#define THREAD_PRIORITY_LOWEST -2
#define THREAD_PRIORITY_NORMAL 0
#define THREAD_PRIORITY_TIME_CRITICAL 15
#define THREAD_MODE_BACKGROUND_BEGIN 0x00010000 /** @since version 3.6.0 */
#define THREAD_MODE_BACKGROUND_END 0x00020000 /** @since version 3.6.0 */
/** @defgroup THREAD_PRIORITY
* @since version 3.6.0
* @{
*/
#define THREAD_PRIORITY_ABOVE_NORMAL 1 /** @since version 3.6.0 */
#define THREAD_PRIORITY_BELOW_NORMAL -1 /** @since version 3.6.0 */
#define THREAD_PRIORITY_HIGHEST 2 /** @since version 3.6.0 */
#define THREAD_PRIORITY_IDLE -15 /** @since version 3.6.0 */
#define THREAD_PRIORITY_LOWEST -2 /** @since version 3.6.0 */
#define THREAD_PRIORITY_NORMAL 0 /** @since version 3.6.0 */
#define THREAD_PRIORITY_TIME_CRITICAL 15 /** @since version 3.6.0 */
/** @} */
/** @brief Change the thread priority
*
* @param hThread the thhread handle to manipulate
* @param nPriority The priority to set, see @THREAD_PRIORITY
* @return \b TRUE for success, \b FALSE otherwise
* @since version 3.6.0
*/
WINPR_API BOOL SetThreadPriority(HANDLE hThread, int nPriority);
#define CREATE_SUSPENDED 0x00000004

View File

@ -57,9 +57,14 @@ extern "C"
} DYNAMIC_TIME_ZONE_INFORMATION, *PDYNAMIC_TIME_ZONE_INFORMATION,
*LPDYNAMIC_TIME_ZONE_INFORMATION;
/** @defgroup TIME_ZONE_ID
* @since version 3.6.0
* @{
*/
#define TIME_ZONE_ID_UNKNOWN 0
#define TIME_ZONE_ID_STANDARD 1
#define TIME_ZONE_ID_DAYLIGHT 2
/** @} */
WINPR_API DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION lpTimeZoneInformation);
WINPR_API BOOL SetTimeZoneInformation(const TIME_ZONE_INFORMATION* lpTimeZoneInformation);

View File

@ -48,12 +48,13 @@
#endif
#if defined(__clang__) || defined(__GNUC__) && (__GNUC__ <= 10)
#define WINPR_ATTR_MALLOC(deallocator, ptrindex) __attribute__((malloc, warn_unused_result))
#define WINPR_ATTR_MALLOC(deallocator, ptrindex) \
__attribute__((malloc, warn_unused_result)) /** @since version 3.3.0 */
#elif defined(__GNUC__)
#define WINPR_ATTR_MALLOC(deallocator, ptrindex) \
__attribute__((malloc(deallocator, ptrindex), warn_unused_result))
__attribute__((malloc(deallocator, ptrindex), warn_unused_result)) /** @since version 3.3.0 */
#else
#define WINPR_ATTR_MALLOC(deallocator, ptrindex)
#define WINPR_ATTR_MALLOC(deallocator, ptrindex) /** @since version 3.3.0 */
#endif
#if defined(__GNUC__) || defined(__clang__)
@ -120,12 +121,12 @@
#endif
#if defined(__GNUC__) || defined(__clang__)
#define WINPR_ALIGN64 __attribute__((aligned(8)))
#define WINPR_ALIGN64 __attribute__((aligned(8))) /** @since version 3.4.0 */
#else
#ifdef _WIN32
#define WINPR_ALIGN64 __declspec(align(8))
#define WINPR_ALIGN64 __declspec(align(8)) /** @since version 3.4.0 */
#else
#define WINPR_ALIGN64
#define WINPR_ALIGN64 /** @since version 3.4.0 */
#endif
#endif
@ -137,6 +138,13 @@ WINPR_API const char* winpr_get_build_config(void);
#define WINPR_UNUSED(x) (void)(x)
#if defined(__GNUC__) || defined(__clang__)
/**
* @brief A macro to do dirty casts. Do not use without a good justification!
* @param ptr The pointer to cast
* @param dstType The data type to cast to
* @return The casted pointer
* @since version 3.9.0
*/
#define WINPR_CAST_CONST_PTR_AWAY(ptr, dstType) \
({ \
union \
@ -148,6 +156,13 @@ WINPR_API const char* winpr_get_build_config(void);
cnv.dst; \
})
/**
* @brief A macro to do function pointer casts. Do not use without a good justification!
* @param ptr The pointer to cast
* @param dstType The data type to cast to
* @return The casted pointer
* @since version 3.9.0
*/
#define WINPR_FUNC_PTR_CAST(ptr, dstType) \
({ \
union \

View File

@ -336,6 +336,7 @@ int winpr_bitmap_write_ex(const char* filename, const BYTE* data, size_t stride,
if (fwrite(bmpdata, bmpsize, 1, fp) != 1)
goto fail;
ret = 0;
fail:
if (fp)
(void)fclose(fp);