Merge pull request #12180 from akallabeth/new-api

new stringify functions & touch API defines
This commit is contained in:
akallabeth
2026-01-25 09:52:34 +01:00
committed by GitHub
17 changed files with 314 additions and 155 deletions

View File

@@ -106,25 +106,6 @@ static const char* rdpdr_state_str(enum RDPDR_CHANNEL_STATE state)
}
}
static const char* rdpdr_device_type_string(UINT32 type)
{
switch (type)
{
case RDPDR_DTYP_SERIAL:
return "serial";
case RDPDR_DTYP_PRINT:
return "printer";
case RDPDR_DTYP_FILESYSTEM:
return "drive";
case RDPDR_DTYP_SMARTCARD:
return "smartcard";
case RDPDR_DTYP_PARALLEL:
return "parallel";
default:
return "UNKNOWN";
}
}
static const char* support_str(BOOL val)
{
if (val)

View File

@@ -569,26 +569,6 @@ static int xf_input_handle_event_local(xfContext* xfc, const XEvent* event)
return 0;
}
#ifdef WITH_DEBUG_X11
static char* xf_input_touch_state_string(DWORD flags)
{
if (flags & RDPINPUT_CONTACT_FLAG_DOWN)
return "RDPINPUT_CONTACT_FLAG_DOWN";
else if (flags & RDPINPUT_CONTACT_FLAG_UPDATE)
return "RDPINPUT_CONTACT_FLAG_UPDATE";
else if (flags & RDPINPUT_CONTACT_FLAG_UP)
return "RDPINPUT_CONTACT_FLAG_UP";
else if (flags & RDPINPUT_CONTACT_FLAG_INRANGE)
return "RDPINPUT_CONTACT_FLAG_INRANGE";
else if (flags & RDPINPUT_CONTACT_FLAG_INCONTACT)
return "RDPINPUT_CONTACT_FLAG_INCONTACT";
else if (flags & RDPINPUT_CONTACT_FLAG_CANCELED)
return "RDPINPUT_CONTACT_FLAG_CANCELED";
else
return "RDPINPUT_CONTACT_FLAG_UNKNOWN";
}
#endif
static void xf_input_hide_cursor(xfContext* xfc)
{
#ifdef WITH_XCURSOR

View File

@@ -1993,6 +1993,42 @@ static BOOL freerdp_handle_touch_motion(rdpClientContext* cctx, const FreeRDP_To
#endif
}
static BOOL freerdp_handle_touch_cancel(rdpClientContext* cctx, const FreeRDP_TouchContact* contact)
{
WINPR_ASSERT(cctx);
WINPR_ASSERT(contact);
#if defined(CHANNEL_RDPEI_CLIENT)
RdpeiClientContext* rdpei = cctx->rdpei;
if (!rdpei)
return freerdp_handle_touch_to_mouse(cctx, false, contact);
int contactId = 0;
if (rdpei->TouchRawEvent)
{
const UINT32 flags = RDPINPUT_CONTACT_FLAG_UPDATE | RDPINPUT_CONTACT_FLAG_CANCELED;
const UINT32 contactFlags = ((contact->flags & FREERDP_TOUCH_HAS_PRESSURE) != 0)
? CONTACT_DATA_PRESSURE_PRESENT
: 0;
rdpei->TouchRawEvent(rdpei, contact->id, contact->x, contact->y, &contactId, flags,
contactFlags, contact->pressure);
}
else
{
WINPR_ASSERT(rdpei->TouchUpdate);
rdpei->TouchEnd(rdpei, contact->id, contact->x, contact->y, &contactId);
}
return TRUE;
#else
WLog_WARN(TAG, "Touch event detected but RDPEI support not compiled in. Recompile with "
"-DCHANNEL_RDPEI_CLIENT=ON");
return freerdp_handle_touch_to_mouse(cctx, false, contact);
#endif
}
static BOOL freerdp_client_touch_update(rdpClientContext* cctx, UINT32 flags, INT32 touchId,
UINT32 pressure, INT32 x, INT32 y,
FreeRDP_TouchContact* pcontact)
@@ -2047,6 +2083,8 @@ BOOL freerdp_client_handle_touch(rdpClientContext* cctx, UINT32 flags, INT32 fin
return freerdp_handle_touch_up(cctx, &contact);
case FREERDP_TOUCH_MOTION:
return freerdp_handle_touch_motion(cctx, &contact);
case FREERDP_TOUCH_CANCEL:
return freerdp_handle_touch_cancel(cctx, &contact);
default:
WLog_WARN(TAG, "Unhandled FreeRDPTouchEventType %" PRIu32 ", ignoring", flags);
return FALSE;

View File

@@ -30,10 +30,6 @@
#define DISP_CHANNEL_NAME "disp"
#define DISP_DVC_CHANNEL_NAME "Microsoft::Windows::RDS::DisplayControl"
#define ORIENTATION_LANDSCAPE 0
#define ORIENTATION_PORTRAIT 90
#define ORIENTATION_LANDSCAPE_FLIPPED 180
#define ORIENTATION_PORTRAIT_FLIPPED 270
#define DISPLAY_CONTROL_MONITOR_PRIMARY 0x00000001
#define DISPLAY_CONTROL_HEADER_LENGTH 0x00000008

View File

@@ -264,6 +264,7 @@ extern "C"
FREERDP_TOUCH_DOWN = 0x01,
FREERDP_TOUCH_UP = 0x02,
FREERDP_TOUCH_MOTION = 0x04,
FREERDP_TOUCH_CANCEL = 0x08, /** @since version 3.22.0 */
FREERDP_TOUCH_HAS_PRESSURE = 0x100
} FreeRDPTouchEventType;

View File

@@ -28,7 +28,8 @@ extern "C"
{
#endif
/** @enum Hotplug event types.
/** @enum RdpdrHotplugEventType
* @brief Hotplug event types.
*
* @since version 3.16.0
*/
@@ -75,7 +76,8 @@ extern "C"
*/
typedef UINT (*pcRdpdrHotplugDevice)(RdpdrClientContext* context, RdpdrHotplugEventType type);
/** @struct rdpdr channel client context
/** @struct s_rdpdr_client_context
* @brief rdpdr channel client context
*
* @since version 3.16.0
*/

View File

@@ -31,18 +31,18 @@ extern "C"
#endif
// NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int _der_skip_length(int length));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int der_write_length(wStream* s, int length));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int der_get_content_length(int length));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int der_skip_octet_string(int length));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int der_skip_sequence_tag(int length));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int _der_skip_length(int length));
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int der_write_length(wStream* s, int length));
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int der_get_content_length(int length));
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int der_skip_octet_string(int length));
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int der_skip_sequence_tag(int length));
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API int der_write_sequence_tag(wStream* s, int length));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int der_skip_contextual_tag(int length));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int der_skip_contextual_tag(int length));
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API int der_write_contextual_tag(wStream* s, BYTE tag, int length,
BOOL pc));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API void der_write_octet_string(wStream* s, BYTE* oct_str,
int length));

View File

@@ -63,65 +63,65 @@ extern "C"
{
#endif
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API void er_read_length(wStream* s, int* length));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API void er_read_length(wStream* s, int* length));
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API int er_write_length(wStream* s, int length, BOOL flag));
// NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int _er_skip_length(int length));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int er_get_content_length(int length));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int _er_skip_length(int length));
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int er_get_content_length(int length));
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API BOOL er_read_universal_tag(wStream* s, BYTE tag, BOOL pc));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API void er_write_universal_tag(wStream* s, BYTE tag, BOOL pc));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API BOOL er_read_application_tag(wStream* s, BYTE tag,
int* length));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API void er_write_application_tag(wStream* s, BYTE tag, int length,
BOOL flag));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API BOOL er_read_enumerated(wStream* s, BYTE* enumerated,
BYTE count));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API void er_write_enumerated(wStream* s, BYTE enumerated,
BYTE count, BOOL flag));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API BOOL er_read_contextual_tag(wStream* s, BYTE tag, int* length,
BOOL pc));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API int er_write_contextual_tag(wStream* s, BYTE tag, int length,
BOOL pc, BOOL flag));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int er_skip_contextual_tag(int length));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int er_skip_contextual_tag(int length));
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API BOOL er_read_sequence_tag(wStream* s, int* length));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API int er_write_sequence_tag(wStream* s, int length, BOOL flag));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int er_skip_sequence(int length));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int er_skip_sequence_tag(int length));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int er_skip_sequence(int length));
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int er_skip_sequence_tag(int length));
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API BOOL er_read_bit_string(wStream* s, int* length,
BYTE* padding));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API BOOL er_write_bit_string_tag(wStream* s, UINT32 length,
BYTE padding, BOOL flag));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API BOOL er_read_octet_string(wStream* s, int* length));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API void er_write_octet_string(wStream* s, BYTE* oct_str,
int length, BOOL flag));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API int er_write_octet_string_tag(wStream* s, int length,
BOOL flag));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int er_skip_octet_string(int length));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API BOOL er_read_BOOL(wStream* s, BOOL* value));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API void er_write_BOOL(wStream* s, BOOL value));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int er_skip_octet_string(int length));
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API BOOL er_read_BOOL(wStream* s, BOOL* value));
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API void er_write_BOOL(wStream* s, BOOL value));
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API BOOL er_read_integer(wStream* s, UINT32* value));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int er_write_integer(wStream* s, INT32 value));
WINPR_DEPRECATED_VAR("since 3.21.1",
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int er_write_integer(wStream* s, INT32 value));
WINPR_DEPRECATED_VAR("since 3.22.0",
FREERDP_API BOOL er_read_integer_length(wStream* s, int* length));
WINPR_DEPRECATED_VAR("since 3.21.1", FREERDP_API int er_skip_integer(INT32 value));
WINPR_DEPRECATED_VAR("since 3.22.0", FREERDP_API int er_skip_integer(INT32 value));
#ifdef __cplusplus
}

View File

@@ -738,9 +738,12 @@ extern "C"
FREERDP_API const char* freerdp_encryption_methods_string(UINT32 EncryptionLevel, char* buffer,
size_t size);
/** \brief returns a string representation of \b RNS_UD_XXBPP_SUPPORT values
/** @brief returns a string representation of \b RNS_UD_XXBPP_SUPPORT values
* @param mask A bitmask of supported color dephts \b RNS_UD_*
* @param buffer A pointer to a buffer of \b size bytes
* @param size The size of the buffer in bytes
*
* return A string reprenentation of the bitmask.
* @return A string reprenentation of the bitmask.
*/
FREERDP_API const char* freerdp_supported_color_depths_string(UINT16 mask, char* buffer,
size_t size);
@@ -748,7 +751,7 @@ extern "C"
/** \brief return the configuration directory for the library
* @return The current configuration path or \b NULL
* @since version 3.6.0
* @note Since 3.17.1 this is a wrapper for \ref freerdp_GetConfigFilePath(FALSE, "")
* @note Since 3.17.1 this is a wrapper for \b freerdp_GetConfigFilePath(FALSE, "")
*/
WINPR_ATTR_MALLOC(free, 1)
FREERDP_API char* freerdp_settings_get_config_path(void);

View File

@@ -233,39 +233,42 @@ extern "C"
/* General capability set */
#define TS_CAPS_PROTOCOLVERSION 0x200 /** @since version 3.6.0 */
/* Order Support */
#define NEG_DSTBLT_INDEX 0x00
#define NEG_PATBLT_INDEX 0x01
#define NEG_SCRBLT_INDEX 0x02
#define NEG_MEMBLT_INDEX 0x03
#define NEG_MEM3BLT_INDEX 0x04
#define NEG_ATEXTOUT_INDEX 0x05
#define NEG_AEXTTEXTOUT_INDEX 0x06 /* Must be ignored */
#define NEG_DRAWNINEGRID_INDEX 0x07 /* Must be ignored */
#define NEG_LINETO_INDEX 0x08
#define NEG_MULTI_DRAWNINEGRID_INDEX 0x09
#define NEG_OPAQUE_RECT_INDEX 0x0A /* Must be ignored */
#define NEG_SAVEBITMAP_INDEX 0x0B
#define NEG_WTEXTOUT_INDEX 0x0C /* Must be ignored */
#define NEG_MEMBLT_V2_INDEX 0x0D /* Must be ignored */
#define NEG_MEM3BLT_V2_INDEX 0x0E /* Must be ignored */
#define NEG_MULTIDSTBLT_INDEX 0x0F
#define NEG_MULTIPATBLT_INDEX 0x10
#define NEG_MULTISCRBLT_INDEX 0x11
#define NEG_MULTIOPAQUERECT_INDEX 0x12
#define NEG_FAST_INDEX_INDEX 0x13
#define NEG_POLYGON_SC_INDEX 0x14
#define NEG_POLYGON_CB_INDEX 0x15
#define NEG_POLYLINE_INDEX 0x16
#define NEG_UNUSED23_INDEX 0x17 /* Must be ignored */
#define NEG_FAST_GLYPH_INDEX 0x18
#define NEG_ELLIPSE_SC_INDEX 0x19
#define NEG_ELLIPSE_CB_INDEX 0x1A
#define NEG_GLYPH_INDEX_INDEX 0x1B
#define NEG_GLYPH_WEXTTEXTOUT_INDEX 0x1C /* Must be ignored */
#define NEG_GLYPH_WLONGTEXTOUT_INDEX 0x1D /* Must be ignored */
#define NEG_GLYPH_WLONGEXTTEXTOUT_INDEX 0x1E /* Must be ignored */
#define NEG_UNUSED31_INDEX 0x1F /* Must be ignored */
/* Order Support */
typedef enum
{
NEG_DSTBLT_INDEX = 0x00,
NEG_PATBLT_INDEX = 0x01,
NEG_SCRBLT_INDEX = 0x02,
NEG_MEMBLT_INDEX = 0x03,
NEG_MEM3BLT_INDEX = 0x04,
NEG_ATEXTOUT_INDEX = 0x05,
NEG_AEXTTEXTOUT_INDEX = 0x06, /* Must be ignored */
NEG_DRAWNINEGRID_INDEX = 0x07, /* Must be ignored */
NEG_LINETO_INDEX = 0x08,
NEG_MULTI_DRAWNINEGRID_INDEX = 0x09,
NEG_OPAQUE_RECT_INDEX = 0x0A, /* Must be ignored */
NEG_SAVEBITMAP_INDEX = 0x0B,
NEG_WTEXTOUT_INDEX = 0x0C, /* Must be ignored */
NEG_MEMBLT_V2_INDEX = 0x0D, /* Must be ignored */
NEG_MEM3BLT_V2_INDEX = 0x0E, /* Must be ignored */
NEG_MULTIDSTBLT_INDEX = 0x0F,
NEG_MULTIPATBLT_INDEX = 0x10,
NEG_MULTISCRBLT_INDEX = 0x11,
NEG_MULTIOPAQUERECT_INDEX = 0x12,
NEG_FAST_INDEX_INDEX = 0x13,
NEG_POLYGON_SC_INDEX = 0x14,
NEG_POLYGON_CB_INDEX = 0x15,
NEG_POLYLINE_INDEX = 0x16,
NEG_UNUSED23_INDEX = 0x17, /* Must be ignored */
NEG_FAST_GLYPH_INDEX = 0x18,
NEG_ELLIPSE_SC_INDEX = 0x19,
NEG_ELLIPSE_CB_INDEX = 0x1A,
NEG_GLYPH_INDEX_INDEX = 0x1B,
NEG_GLYPH_WEXTTEXTOUT_INDEX = 0x1C, /* Must be ignored */
NEG_GLYPH_WLONGTEXTOUT_INDEX = 0x1D, /* Must be ignored */
NEG_GLYPH_WLONGEXTTEXTOUT_INDEX = 0x1E, /* Must be ignored */
NEG_UNUSED31_INDEX = 0x1F /* Must be ignored */
} FreeRDP_OrderSupportFlagConstants;
/* Glyph Support Level */
#define GLYPH_SUPPORT_NONE 0x0000
@@ -326,10 +329,13 @@ extern "C"
#define PACKET_COMPR_TYPE_RDP8 0x04
/* Desktop Rotation Flags */
#define ORIENTATION_LANDSCAPE 0
#define ORIENTATION_PORTRAIT 90
#define ORIENTATION_LANDSCAPE_FLIPPED 180
#define ORIENTATION_PORTRAIT_FLIPPED 270
enum FreeRDP_DesktopRotationFlags
{
ORIENTATION_LANDSCAPE = 0,
ORIENTATION_PORTRAIT = 90,
ORIENTATION_LANDSCAPE_FLIPPED = 180,
ORIENTATION_PORTRAIT_FLIPPED = 270
};
/* Clipboard feature mask */
#define CLIPRDR_FLAG_LOCAL_TO_REMOTE 0x01
@@ -433,12 +439,15 @@ extern "C"
MONITOR_ATTRIBUTES attributes;
} rdpMonitor;
/* Device Redirection */
#define RDPDR_DTYP_SERIAL 0x00000001
#define RDPDR_DTYP_PARALLEL 0x00000002
#define RDPDR_DTYP_PRINT 0x00000004
#define RDPDR_DTYP_FILESYSTEM 0x00000008
#define RDPDR_DTYP_SMARTCARD 0x00000020
/* Device Redirection */
typedef enum
{
RDPDR_DTYP_SERIAL = 0x00000001,
RDPDR_DTYP_PARALLEL = 0x00000002,
RDPDR_DTYP_PRINT = 0x00000004,
RDPDR_DTYP_FILESYSTEM = 0x00000008,
RDPDR_DTYP_SMARTCARD = 0x00000020
} FreeRDP_RDPDR_DTYP;
typedef struct
{

View File

@@ -36,7 +36,8 @@ extern "C"
{
#endif
/** @enum Expected wellknown fields to be supported
/** @enum AAD_WELLKNOWN_VALUES
* @brief Expected wellknown fields to be supported
* @since version 3.10.0
*/
typedef enum

View File

@@ -45,10 +45,10 @@ extern "C"
UINT32 Version;
} RDPDR_CAPABILITY_HEADER;
FREERDP_API const char* rdpdr_component_string(UINT16 component);
FREERDP_API const char* rdpdr_packetid_string(UINT16 packetid);
FREERDP_API const char* rdpdr_irp_string(UINT32 major);
FREERDP_API const char* rdpdr_cap_type_string(UINT16 capability);
FREERDP_API WINPR_ATTR_NODISCARD const char* rdpdr_component_string(UINT16 component);
FREERDP_API WINPR_ATTR_NODISCARD const char* rdpdr_packetid_string(UINT16 packetid);
FREERDP_API WINPR_ATTR_NODISCARD const char* rdpdr_irp_string(UINT32 major);
FREERDP_API WINPR_ATTR_NODISCARD const char* rdpdr_cap_type_string(UINT16 capability);
FREERDP_API LONG scard_log_status_error(const char* tag, const char* what, LONG status);
@@ -62,19 +62,22 @@ extern "C"
* @since version 3.16.0
*/
FREERDP_API LONG scard_log_status_error_wlog(wLog* log, const char* what, LONG status);
FREERDP_API const char* scard_get_ioctl_string(UINT32 ioControlCode, BOOL funcName);
FREERDP_API WINPR_ATTR_NODISCARD const char* scard_get_ioctl_string(UINT32 ioControlCode,
BOOL funcName);
FREERDP_API BOOL rdpdr_write_iocompletion_header(wStream* out, UINT32 DeviceId,
UINT32 CompletionId, NTSTATUS ioStatus);
FREERDP_API WINPR_ATTR_NODISCARD BOOL rdpdr_write_iocompletion_header(wStream* out,
UINT32 DeviceId,
UINT32 CompletionId,
NTSTATUS ioStatus);
FREERDP_API void rdpdr_dump_received_packet(wLog* log, DWORD lvl, wStream* out,
const char* custom);
FREERDP_API void rdpdr_dump_send_packet(wLog* log, DWORD lvl, wStream* out, const char* custom);
FREERDP_API UINT rdpdr_read_capset_header(wLog* log, wStream* s,
RDPDR_CAPABILITY_HEADER* header);
FREERDP_API UINT rdpdr_write_capset_header(wLog* log, wStream* s,
const RDPDR_CAPABILITY_HEADER* header);
FREERDP_API WINPR_ATTR_NODISCARD UINT rdpdr_read_capset_header(wLog* log, wStream* s,
RDPDR_CAPABILITY_HEADER* header);
FREERDP_API WINPR_ATTR_NODISCARD UINT
rdpdr_write_capset_header(wLog* log, wStream* s, const RDPDR_CAPABILITY_HEADER* header);
/** @brief convert a constant of type \ref RDPDR_CAPS_IRP_MJ to string
*
@@ -84,7 +87,7 @@ extern "C"
*
* @since version 3.21.0
*/
FREERDP_API const char* rdpdr_irp_val2str(UINT32 ioCode1);
FREERDP_API WINPR_ATTR_NODISCARD const char* rdpdr_irp_val2str(UINT32 ioCode1);
/** @brief convert a mask of \ref RDPDR_CAPS_IRP_MJ type values to string
*
@@ -96,7 +99,17 @@ extern "C"
*
* @since version 3.21.0
*/
FREERDP_API const char* rdpdr_irp_mask2str(UINT32 ioCode1Mask, char* buffer, size_t len);
FREERDP_API WINPR_ATTR_NODISCARD const char* rdpdr_irp_mask2str(UINT32 ioCode1Mask,
char* buffer, size_t len);
/** @brief Convert a single \ref FreeRDP_RDPDR_DTYP to string
*
* @param type The value to convert
* @return A constant string representation of \ref type or the string \b
* UNKNOWN for an invalid value
* @since verstion 3.22.0
*/
FREERDP_API WINPR_ATTR_NODISCARD const char* rdpdr_device_type_string(UINT32 type);
#ifdef __cplusplus
}

View File

@@ -47,6 +47,34 @@ extern "C"
*/
FREERDP_API BOOL freerdp_extract_key_value(const char* str, UINT32* pkey, UINT32* pvalue);
/** @brief Convert \ref FreeRDP_DesktopRotationFlags to string
*
* @param flags The value to convert
* @return A constant string representation of \ref flags or the string \b ORIENTATION_UNKNOWN
* for an invalid value
* @since verstion 3.22.0
*/
FREERDP_API WINPR_ATTR_NODISCARD const char*
freerdp_desktop_rotation_flags_to_string(UINT32 flags);
/** @brief Convert a single \ref RDPINPUT_CONTACT_FLAGS to string
*
* @param flags The value to convert
* @return A constant string representation of \ref flag or the string \b
* RDPINPUT_CONTACT_FLAG_UNKNOWN for an invalid value
* @since verstion 3.22.0
*/
FREERDP_API WINPR_ATTR_NODISCARD const char* freerdp_input_touch_state_string(DWORD flags);
/** @brief Convert a single \ref FreeRDP_OrderSupportFlags to string
*
* @param type The value to convert
* @return A constant string representation of \ref type or the string \b
* UNKNOWN for an invalid value
* @since verstion 3.22.0
*/
FREERDP_API WINPR_ATTR_NODISCARD const char* freerdp_order_support_flags_string(UINT8 type);
#ifdef __cplusplus
}
#endif

View File

@@ -667,3 +667,22 @@ const char* rdpdr_irp_mask2str(UINT32 ioCode1Mask, char* buffer, size_t len)
return NULL;
return buffer;
}
const char* rdpdr_device_type_string(UINT32 type)
{
switch (type)
{
case RDPDR_DTYP_SERIAL:
return "serial";
case RDPDR_DTYP_PRINT:
return "printer";
case RDPDR_DTYP_FILESYSTEM:
return "drive";
case RDPDR_DTYP_SMARTCARD:
return "smartcard";
case RDPDR_DTYP_PARALLEL:
return "parallel";
default:
return "UNKNOWN";
}
}

View File

@@ -24,6 +24,10 @@
#include <freerdp/utils/string.h>
#include <freerdp/settings.h>
#if defined(CHANNEL_RDPEI)
#include <freerdp/channels/rdpei.h>
#endif
const char* rdp_redirection_flags_to_string(UINT32 flags, char* buffer, size_t size)
{
struct map_t
@@ -126,3 +130,89 @@ BOOL freerdp_extract_key_value(const char* str, UINT32* pkey, UINT32* pvalue)
*pvalue = (UINT32)val;
return TRUE;
}
const char* freerdp_desktop_rotation_flags_to_string(UINT32 flags)
{
#define ENTRY(x) \
case x: \
return #x
switch (flags)
{
ENTRY(ORIENTATION_LANDSCAPE);
ENTRY(ORIENTATION_PORTRAIT);
ENTRY(ORIENTATION_LANDSCAPE_FLIPPED);
ENTRY(ORIENTATION_PORTRAIT_FLIPPED);
default:
return "ORIENTATION_UNKNOWN";
}
#undef ENTRY
}
const char* freerdp_input_touch_state_string(DWORD flags)
{
#if defined(CHANNEL_RDPEI)
if (flags & RDPINPUT_CONTACT_FLAG_DOWN)
return "RDPINPUT_CONTACT_FLAG_DOWN";
else if (flags & RDPINPUT_CONTACT_FLAG_UPDATE)
return "RDPINPUT_CONTACT_FLAG_UPDATE";
else if (flags & RDPINPUT_CONTACT_FLAG_UP)
return "RDPINPUT_CONTACT_FLAG_UP";
else if (flags & RDPINPUT_CONTACT_FLAG_INRANGE)
return "RDPINPUT_CONTACT_FLAG_INRANGE";
else if (flags & RDPINPUT_CONTACT_FLAG_INCONTACT)
return "RDPINPUT_CONTACT_FLAG_INCONTACT";
else if (flags & RDPINPUT_CONTACT_FLAG_CANCELED)
return "RDPINPUT_CONTACT_FLAG_CANCELED";
else
return "RDPINPUT_CONTACT_FLAG_UNKNOWN";
#else
return "CHANNEL_RDPEI not supported";
#endif
}
const char* freerdp_order_support_flags_string(UINT8 type)
{
#define ENTRY(x) \
case x: \
return #x
switch (type)
{
ENTRY(NEG_DSTBLT_INDEX);
ENTRY(NEG_PATBLT_INDEX);
ENTRY(NEG_SCRBLT_INDEX);
ENTRY(NEG_MEMBLT_INDEX);
ENTRY(NEG_MEM3BLT_INDEX);
ENTRY(NEG_ATEXTOUT_INDEX);
ENTRY(NEG_AEXTTEXTOUT_INDEX);
ENTRY(NEG_DRAWNINEGRID_INDEX);
ENTRY(NEG_LINETO_INDEX);
ENTRY(NEG_MULTI_DRAWNINEGRID_INDEX);
ENTRY(NEG_OPAQUE_RECT_INDEX);
ENTRY(NEG_SAVEBITMAP_INDEX);
ENTRY(NEG_WTEXTOUT_INDEX);
ENTRY(NEG_MEMBLT_V2_INDEX);
ENTRY(NEG_MEM3BLT_V2_INDEX);
ENTRY(NEG_MULTIDSTBLT_INDEX);
ENTRY(NEG_MULTIPATBLT_INDEX);
ENTRY(NEG_MULTISCRBLT_INDEX);
ENTRY(NEG_MULTIOPAQUERECT_INDEX);
ENTRY(NEG_FAST_INDEX_INDEX);
ENTRY(NEG_POLYGON_SC_INDEX);
ENTRY(NEG_POLYGON_CB_INDEX);
ENTRY(NEG_POLYLINE_INDEX);
ENTRY(NEG_UNUSED23_INDEX);
ENTRY(NEG_FAST_GLYPH_INDEX);
ENTRY(NEG_ELLIPSE_SC_INDEX);
ENTRY(NEG_ELLIPSE_CB_INDEX);
ENTRY(NEG_GLYPH_INDEX_INDEX);
ENTRY(NEG_GLYPH_WEXTTEXTOUT_INDEX);
ENTRY(NEG_GLYPH_WLONGTEXTOUT_INDEX);
ENTRY(NEG_GLYPH_WLONGEXTTEXTOUT_INDEX);
ENTRY(NEG_UNUSED31_INDEX);
default:
return "UNKNOWN";
}
#undef ENTRY
}

View File

@@ -47,19 +47,16 @@ extern "C"
/** @struct wObject
* @brief This struct contains function pointer to initialize/free objects
*
* @var fnObjectNew A new function that creates a clone of the input
* @var fnObjectInit A function initializing an object, but not allocating it
* @var fnObjectUninit A function to deinitialize an object, but not free it
* @var fnObjectFree A function freeing an object
* @var fnObjectEquals A function to compare two objects
*/
typedef struct
{
OBJECT_NEW_FN fnObjectNew;
OBJECT_INIT_FN fnObjectInit;
OBJECT_UNINIT_FN fnObjectUninit;
OBJECT_FREE_FN fnObjectFree;
OBJECT_EQUALS_FN fnObjectEquals;
OBJECT_NEW_FN fnObjectNew; /**< A new function that creates a clone of the input */
OBJECT_INIT_FN
fnObjectInit; /**< A function initializing an object, but not allocating it */
OBJECT_UNINIT_FN
fnObjectUninit; /**< A function to deinitialize an object, but not free it */
OBJECT_FREE_FN fnObjectFree; /**< A function freeing an object */
OBJECT_EQUALS_FN fnObjectEquals; /**< A function to compare two objects */
} wObject;
/* utility function with compatible arguments for string data */

View File

@@ -120,7 +120,8 @@ extern "C"
* @brief Return a pointer to an JSON object item
* @param object the JSON object
* @param string the name of the object (case is ignored)
* @return A pointer to the object identified by @ref string or \b NULL
*
* @return A pointer to the object identified by \b string or \b NULL
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_GetObjectItem(const WINPR_JSON* object, const char* string);
@@ -130,7 +131,7 @@ extern "C"
*
* @param object the JSON instance to query
* @param string the name of the object
* @return A pointer to the object identified by @ref string or \b NULL
* @return A pointer to the object identified by \b string or \b NULL
* @since version 3.6.0
*/
WINPR_API WINPR_JSON* WINPR_JSON_GetObjectItemCaseSensitive(const WINPR_JSON* object,