FreeRDP
channels/rdpemsc.h
1 
20 #ifndef FREERDP_CHANNEL_RDPEMSC_H
21 #define FREERDP_CHANNEL_RDPEMSC_H
22 
32 #include <freerdp/api.h>
33 #include <freerdp/dvc.h>
34 #include <freerdp/types.h>
35 
40 #define RDPEMSC_CHANNEL_NAME "mousecursor"
41 #define RDPEMSC_DVC_CHANNEL_NAME "Microsoft::Windows::RDS::MouseCursor"
42 
43 #ifdef __cplusplus
44 extern "C"
45 {
46 #endif
47 
48  typedef enum
49  {
50  PDUTYPE_EMSC_RESERVED = 0x00,
51  PDUTYPE_CS_CAPS_ADVERTISE = 0x01,
52  PDUTYPE_SC_CAPS_CONFIRM = 0x02,
53  PDUTYPE_SC_MOUSEPTR_UPDATE = 0x03,
54  } RDP_MOUSE_CURSOR_PDUTYPE;
55 
56  typedef enum
57  {
58  TS_UPDATETYPE_MOUSEPTR_SYSTEM_NULL = 0x05,
59  TS_UPDATETYPE_MOUSEPTR_SYSTEM_DEFAULT = 0x06,
60  TS_UPDATETYPE_MOUSEPTR_POSITION = 0x08,
61  TS_UPDATETYPE_MOUSEPTR_CACHED = 0x0A,
62  TS_UPDATETYPE_MOUSEPTR_POINTER = 0x0B,
63  TS_UPDATETYPE_MOUSEPTR_LARGE_POINTER = 0x0C,
64  } TS_UPDATETYPE_MOUSEPTR;
65 
66 #define RDPEMSC_HEADER_SIZE 4
67 
68  typedef struct
69  {
70  RDP_MOUSE_CURSOR_PDUTYPE pduType;
71  TS_UPDATETYPE_MOUSEPTR updateType;
72  UINT16 reserved;
74 
75  typedef enum
76  {
77  RDP_MOUSE_CURSOR_CAPVERSION_INVALID = 0x00000000,
80 
81  typedef struct
82  {
83  UINT32 signature;
85  UINT32 size;
87 
88  typedef struct
89  {
90  RDP_MOUSE_CURSOR_CAPSET capsetHeader;
92 
93  typedef struct
94  {
96  wArrayList* capsSets;
98 
99  typedef struct
100  {
102  RDP_MOUSE_CURSOR_CAPSET* capsSet;
104 
105  typedef struct
106  {
107  UINT16 xPos;
108  UINT16 yPos;
109  } TS_POINT16;
110 
111  typedef struct
112  {
113  UINT16 xorBpp;
114  UINT16 cacheIndex;
115  TS_POINT16 hotSpot;
116  UINT16 width;
117  UINT16 height;
118  UINT16 lengthAndMask;
119  UINT16 lengthXorMask;
120  BYTE* xorMaskData;
121  BYTE* andMaskData;
122  BYTE pad;
124 
125  typedef struct
126  {
127  UINT16 xorBpp;
128  UINT16 cacheIndex;
129  TS_POINT16 hotSpot;
130  UINT16 width;
131  UINT16 height;
132  UINT32 lengthAndMask;
133  UINT32 lengthXorMask;
134  BYTE* xorMaskData;
135  BYTE* andMaskData;
136  BYTE pad;
138 
139  typedef struct
140  {
142  TS_POINT16* position;
143  UINT16* cachedPointerIndex;
144  TS_POINTERATTRIBUTE* pointerAttribute;
145  TS_LARGEPOINTERATTRIBUTE* largePointerAttribute;
147 
148 #ifdef __cplusplus
149 }
150 #endif
151 
154 #endif /* FREERDP_CHANNEL_RDPEMSC_H */
RDP_MOUSE_CURSOR_CAPVERSION
@ RDP_MOUSE_CURSOR_CAPVERSION_1