FreeRDP
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Modules Pages
libfreerdp/core/update.h
1
20#ifndef FREERDP_LIB_CORE_UPDATE_H
21#define FREERDP_LIB_CORE_UPDATE_H
22
23#include "rdp.h"
24#include "orders.h"
25
26#include <freerdp/types.h>
27#include <freerdp/update.h>
28#include <freerdp/freerdp.h>
29#include <freerdp/api.h>
30
31#include <winpr/stream.h>
32
33#include "../cache/bitmap.h"
34#include "../cache/palette.h"
35#include "../cache/pointer.h"
36
37#define UPDATE_TYPE_ORDERS 0x0000
38#define UPDATE_TYPE_BITMAP 0x0001
39#define UPDATE_TYPE_PALETTE 0x0002
40#define UPDATE_TYPE_SYNCHRONIZE 0x0003
41
42#define BITMAP_COMPRESSION 0x0001
43#define NO_BITMAP_COMPRESSION_HDR 0x0400
44
45typedef struct
46{
47 rdpUpdate common;
48
49 wLog* log;
50
51 BOOL dump_rfx;
52 BOOL play_rfx;
53 rdpPcap* pcap_rfx;
54 BOOL initialState;
55
56 BOOL asynchronous;
57 rdpUpdateProxy* proxy;
58 wMessageQueue* queue;
59
60 wStream* us;
61 UINT16 numberOrders;
62 size_t offsetOrders; /* the offset to patch numberOrders in the stream */
63 BOOL combineUpdates;
64 rdpBounds currentBounds;
65 rdpBounds previousBounds;
67 BOOL withinBeginEndPaint;
69
70typedef struct
71{
72 rdpAltSecUpdate common;
73
74 CREATE_OFFSCREEN_BITMAP_ORDER create_offscreen_bitmap;
75 SWITCH_SURFACE_ORDER switch_surface;
76 CREATE_NINE_GRID_BITMAP_ORDER create_nine_grid_bitmap;
77 FRAME_MARKER_ORDER frame_marker;
78 STREAM_BITMAP_FIRST_ORDER stream_bitmap_first;
79 STREAM_BITMAP_NEXT_ORDER stream_bitmap_next;
80 DRAW_GDIPLUS_CACHE_FIRST_ORDER draw_gdiplus_cache_first;
81 DRAW_GDIPLUS_CACHE_NEXT_ORDER draw_gdiplus_cache_next;
82 DRAW_GDIPLUS_CACHE_END_ORDER draw_gdiplus_cache_end;
83 DRAW_GDIPLUS_FIRST_ORDER draw_gdiplus_first;
84 DRAW_GDIPLUS_NEXT_ORDER draw_gdiplus_next;
85 DRAW_GDIPLUS_END_ORDER draw_gdiplus_end;
87
88typedef struct
89{
90 rdpPrimaryUpdate common;
91
92 ORDER_INFO order_info;
93 DSTBLT_ORDER dstblt;
94 PATBLT_ORDER patblt;
95 SCRBLT_ORDER scrblt;
96 OPAQUE_RECT_ORDER opaque_rect;
97 DRAW_NINE_GRID_ORDER draw_nine_grid;
98 MULTI_DSTBLT_ORDER multi_dstblt;
99 MULTI_PATBLT_ORDER multi_patblt;
100 MULTI_SCRBLT_ORDER multi_scrblt;
101 MULTI_OPAQUE_RECT_ORDER multi_opaque_rect;
102 MULTI_DRAW_NINE_GRID_ORDER multi_draw_nine_grid;
103 LINE_TO_ORDER line_to;
104 POLYLINE_ORDER polyline;
105 MEMBLT_ORDER memblt;
106 MEM3BLT_ORDER mem3blt;
107 SAVE_BITMAP_ORDER save_bitmap;
108 GLYPH_INDEX_ORDER glyph_index;
109 FAST_INDEX_ORDER fast_index;
110 FAST_GLYPH_ORDER fast_glyph;
111 POLYGON_SC_ORDER polygon_sc;
112 POLYGON_CB_ORDER polygon_cb;
113 ELLIPSE_SC_ORDER ellipse_sc;
114 ELLIPSE_CB_ORDER ellipse_cb;
116
117typedef struct
118{
119 rdpSecondaryUpdate common;
120 BOOL glyph_v2;
122
123static INLINE rdp_update_internal* update_cast(rdpUpdate* update)
124{
125 union
126 {
127 rdpUpdate* pub;
128 rdp_update_internal* internal;
129 } cnv;
130
131 WINPR_ASSERT(update);
132 cnv.pub = update;
133 return cnv.internal;
134}
135
136static INLINE rdp_altsec_update_internal* altsec_update_cast(rdpAltSecUpdate* update)
137{
138 union
139 {
140 rdpAltSecUpdate* pub;
142 } cnv;
143
144 WINPR_ASSERT(update);
145 cnv.pub = update;
146 return cnv.internal;
147}
148
149static INLINE rdp_primary_update_internal* primary_update_cast(rdpPrimaryUpdate* update)
150{
151 union
152 {
153 rdpPrimaryUpdate* pub;
155 } cnv;
156
157 WINPR_ASSERT(update);
158 cnv.pub = update;
159 return cnv.internal;
160}
161
162static INLINE rdp_secondary_update_internal* secondary_update_cast(rdpSecondaryUpdate* update)
163{
164 union
165 {
166 rdpSecondaryUpdate* pub;
168 } cnv;
169
170 WINPR_ASSERT(update);
171 cnv.pub = update;
172 return cnv.internal;
173}
174
175FREERDP_LOCAL void update_free(rdpUpdate* update);
176
177WINPR_ATTR_MALLOC(update_free, 1)
178FREERDP_LOCAL rdpUpdate* update_new(rdpRdp* rdp);
179
180FREERDP_LOCAL void update_reset_state(rdpUpdate* update);
181FREERDP_LOCAL BOOL update_post_connect(rdpUpdate* update);
182FREERDP_LOCAL void update_post_disconnect(rdpUpdate* update);
183
184FREERDP_LOCAL BOOL update_recv_play_sound(rdpUpdate* update, wStream* s);
185FREERDP_LOCAL BOOL update_recv_pointer(rdpUpdate* update, wStream* s);
186FREERDP_LOCAL BOOL update_recv(rdpUpdate* update, wStream* s);
187
188WINPR_ATTR_MALLOC(free_bitmap_update, 2)
189FREERDP_LOCAL BITMAP_UPDATE* update_read_bitmap_update(rdpUpdate* update, wStream* s);
190
191WINPR_ATTR_MALLOC(free_palette_update, 2)
192FREERDP_LOCAL PALETTE_UPDATE* update_read_palette(rdpUpdate* update, wStream* s);
193
194WINPR_ATTR_MALLOC(free_pointer_system_update, 2)
195FREERDP_LOCAL POINTER_SYSTEM_UPDATE* update_read_pointer_system(rdpUpdate* update, wStream* s);
196
197WINPR_ATTR_MALLOC(free_pointer_position_update, 2)
198FREERDP_LOCAL POINTER_POSITION_UPDATE* update_read_pointer_position(rdpUpdate* update, wStream* s);
199
200WINPR_ATTR_MALLOC(free_pointer_color_update, 2)
201FREERDP_LOCAL POINTER_COLOR_UPDATE* update_read_pointer_color(rdpUpdate* update, wStream* s,
202 BYTE xorBpp);
203
204WINPR_ATTR_MALLOC(free_pointer_large_update, 2)
205FREERDP_LOCAL POINTER_LARGE_UPDATE* update_read_pointer_large(rdpUpdate* update, wStream* s);
206
207WINPR_ATTR_MALLOC(free_pointer_new_update, 2)
208FREERDP_LOCAL POINTER_NEW_UPDATE* update_read_pointer_new(rdpUpdate* update, wStream* s);
209
210WINPR_ATTR_MALLOC(free_pointer_cached_update, 2)
211FREERDP_LOCAL POINTER_CACHED_UPDATE* update_read_pointer_cached(rdpUpdate* update, wStream* s);
212
213FREERDP_LOCAL BOOL update_read_refresh_rect(rdpUpdate* update, wStream* s);
214FREERDP_LOCAL BOOL update_read_suppress_output(rdpUpdate* update, wStream* s);
215FREERDP_LOCAL void update_register_server_callbacks(rdpUpdate* update);
216FREERDP_LOCAL void update_register_client_callbacks(rdpUpdate* update);
217FREERDP_LOCAL int update_process_messages(rdpUpdate* update);
218
219FREERDP_LOCAL BOOL update_begin_paint(rdpUpdate* update);
220FREERDP_LOCAL BOOL update_end_paint(rdpUpdate* update);
221
222#endif /* FREERDP_LIB_CORE_UPDATE_H */