20#ifndef FREERDP_LIB_CORE_UPDATE_H
21#define FREERDP_LIB_CORE_UPDATE_H
26#include <freerdp/types.h>
27#include <freerdp/update.h>
28#include <freerdp/freerdp.h>
29#include <freerdp/api.h>
31#include <winpr/stream.h>
33#include "../cache/bitmap.h"
34#include "../cache/palette.h"
35#include "../cache/pointer.h"
37#define UPDATE_TYPE_ORDERS 0x0000
38#define UPDATE_TYPE_BITMAP 0x0001
39#define UPDATE_TYPE_PALETTE 0x0002
40#define UPDATE_TYPE_SYNCHRONIZE 0x0003
42#define BITMAP_COMPRESSION 0x0001
43#define NO_BITMAP_COMPRESSION_HDR 0x0400
47 RDP_STATS_SURFACE_BITS = 0,
48 RDP_STATS_SURFACE_BITS_RFX,
49 RDP_STATS_SURFACE_BITS_RFX_IMAGE,
50 RDP_STATS_SURFACE_BITS_NSC,
51 RDP_STATS_SURFACE_BITS_NONE,
52 RDP_STATS_SURFACE_BITS_UNKNOWN,
53 RDP_STATS_BEGIN_PAINT,
58 RDP_STATS_BITMAP_UPDATE,
60 RDP_STATS_REFRESH_RECT,
61 RDP_STATS_SUPPRESS_OUTPUT,
62 RDP_STATS_SURFACE_COMMAND,
63 RDP_STATS_SURFACE_FRAME_MARKER,
64 RDP_STATS_SURFACE_FRAME_ACK,
65 RDP_STATS_POINTER_SYSTEM,
66 RDP_STATS_POINTER_DEFAULT,
67 RDP_STATS_POINTER_POSITION,
68 RDP_STATS_POINTER_COLOR,
69 RDP_STATS_POINTER_CACHED,
70 RDP_STATS_POINTER_NEW,
71 RDP_STATS_POINTER_LARGE
76 uint64_t primary[0x100];
77 uint64_t secondary[0x100];
78 uint64_t altsec[0x100];
94 rdpUpdateProxy* proxy;
101 rdpBounds currentBounds;
102 rdpBounds previousBounds;
104 BOOL withinBeginEndPaint;
111 rdpAltSecUpdate common;
129 rdpPrimaryUpdate common;
158 rdpSecondaryUpdate common;
171 WINPR_ASSERT(update);
181 rdpAltSecUpdate* pub;
185 WINPR_ASSERT(update);
195 rdpPrimaryUpdate* pub;
199 WINPR_ASSERT(update);
209 rdpSecondaryUpdate* pub;
213 WINPR_ASSERT(update);
218FREERDP_LOCAL
void update_free(rdpUpdate* update);
220WINPR_ATTR_MALLOC(update_free, 1)
221FREERDP_LOCAL rdpUpdate* update_new(rdpRdp* rdp);
223FREERDP_LOCAL
void update_reset_state(rdpUpdate* update);
226FREERDP_LOCAL BOOL update_post_connect(rdpUpdate* update);
228FREERDP_LOCAL
void update_post_disconnect(rdpUpdate* update);
231FREERDP_LOCAL BOOL update_recv_play_sound(rdpUpdate* update,
wStream* s);
234FREERDP_LOCAL BOOL update_recv_pointer(rdpUpdate* update,
wStream* s);
237FREERDP_LOCAL BOOL update_recv(rdpUpdate* update,
wStream* s);
239WINPR_ATTR_MALLOC(free_bitmap_update, 2)
242WINPR_ATTR_MALLOC(free_palette_update, 2)
245WINPR_ATTR_MALLOC(free_pointer_system_update, 2)
248WINPR_ATTR_MALLOC(free_pointer_position_update, 2)
251WINPR_ATTR_MALLOC(free_pointer_color_update, 2)
255WINPR_ATTR_MALLOC(free_pointer_large_update, 2)
258WINPR_ATTR_MALLOC(free_pointer_new_update, 2)
261WINPR_ATTR_MALLOC(free_pointer_cached_update, 2)
265FREERDP_LOCAL BOOL update_read_refresh_rect(rdpUpdate* update,
wStream* s);
268FREERDP_LOCAL BOOL update_read_suppress_output(rdpUpdate* update,
wStream* s);
270FREERDP_LOCAL
void update_register_server_callbacks(rdpUpdate* update);
271FREERDP_LOCAL
void update_register_client_callbacks(rdpUpdate* update);
274FREERDP_LOCAL
int update_process_messages(rdpUpdate* update);
277FREERDP_LOCAL BOOL update_begin_paint(rdpUpdate* update);
280FREERDP_LOCAL BOOL update_end_paint(rdpUpdate* update);
282FREERDP_LOCAL
void update_dump_stats(rdpUpdate* update);