cscg24-guacamole

CSCG 2024 Challenge 'Guacamole Mashup'
git clone https://git.sinitax.com/sinitax/cscg24-guacamole
Log | Files | Refs | sfeed.txt

update.h (7925B)


      1/**
      2 * FreeRDP: A Remote Desktop Protocol Implementation
      3 * Update Interface API
      4 *
      5 * Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com>
      6 *
      7 * Licensed under the Apache License, Version 2.0 (the "License");
      8 * you may not use this file except in compliance with the License.
      9 * You may obtain a copy of the License at
     10 *
     11 *     http://www.apache.org/licenses/LICENSE-2.0
     12 *
     13 * Unless required by applicable law or agreed to in writing, software
     14 * distributed under the License is distributed on an "AS IS" BASIS,
     15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16 * See the License for the specific language governing permissions and
     17 * limitations under the License.
     18 */
     19
     20#ifndef FREERDP_UPDATE_H
     21#define FREERDP_UPDATE_H
     22
     23typedef struct rdp_update rdpUpdate;
     24
     25#include <winpr/crt.h>
     26#include <winpr/wlog.h>
     27#include <winpr/synch.h>
     28#include <winpr/thread.h>
     29#include <winpr/stream.h>
     30#include <winpr/collections.h>
     31
     32#include <freerdp/rail.h>
     33#include <freerdp/types.h>
     34#include <freerdp/freerdp.h>
     35#include <freerdp/graphics.h>
     36#include <freerdp/utils/pcap.h>
     37
     38#include <freerdp/primary.h>
     39#include <freerdp/secondary.h>
     40#include <freerdp/altsec.h>
     41#include <freerdp/window.h>
     42#include <freerdp/pointer.h>
     43
     44/* Bitmap Updates */
     45#define EX_COMPRESSED_BITMAP_HEADER_PRESENT 0x01
     46
     47struct _BITMAP_DATA
     48{
     49	UINT32 destLeft;
     50	UINT32 destTop;
     51	UINT32 destRight;
     52	UINT32 destBottom;
     53	UINT32 width;
     54	UINT32 height;
     55	UINT32 bitsPerPixel;
     56	UINT32 flags;
     57	UINT32 bitmapLength;
     58	UINT32 cbCompFirstRowSize;
     59	UINT32 cbCompMainBodySize;
     60	UINT32 cbScanWidth;
     61	UINT32 cbUncompressedSize;
     62	BYTE* bitmapDataStream;
     63	BOOL compressed;
     64};
     65typedef struct _BITMAP_DATA BITMAP_DATA;
     66
     67struct _BITMAP_UPDATE
     68{
     69	UINT32 count;
     70	UINT32 number;
     71	BITMAP_DATA* rectangles;
     72	BOOL skipCompression;
     73};
     74typedef struct _BITMAP_UPDATE BITMAP_UPDATE;
     75
     76/* Palette Updates */
     77
     78struct _PALETTE_UPDATE
     79{
     80	UINT32 number;
     81	PALETTE_ENTRY entries[256];
     82};
     83typedef struct _PALETTE_UPDATE PALETTE_UPDATE;
     84
     85/* Play Sound (System Beep) Updates */
     86
     87struct _PLAY_SOUND_UPDATE
     88{
     89	UINT32 duration;
     90	UINT32 frequency;
     91};
     92typedef struct _PLAY_SOUND_UPDATE PLAY_SOUND_UPDATE;
     93
     94/* Surface Command Updates */
     95struct _TS_COMPRESSED_BITMAP_HEADER_EX
     96{
     97	UINT32 highUniqueId;
     98	UINT32 lowUniqueId;
     99	UINT64 tmMilliseconds;
    100	UINT64 tmSeconds;
    101};
    102typedef struct _TS_COMPRESSED_BITMAP_HEADER_EX TS_COMPRESSED_BITMAP_HEADER_EX;
    103
    104struct _TS_BITMAP_DATA_EX
    105{
    106	BYTE bpp;
    107	BYTE flags;
    108	UINT16 codecID;
    109	UINT16 width;
    110	UINT16 height;
    111	UINT32 bitmapDataLength;
    112	TS_COMPRESSED_BITMAP_HEADER_EX exBitmapDataHeader;
    113	BYTE* bitmapData;
    114};
    115typedef struct _TS_BITMAP_DATA_EX TS_BITMAP_DATA_EX;
    116
    117enum SURFCMD_CMDTYPE
    118{
    119	CMDTYPE_SET_SURFACE_BITS = 0x0001,
    120	CMDTYPE_FRAME_MARKER = 0x0004,
    121	CMDTYPE_STREAM_SURFACE_BITS = 0x0006
    122};
    123
    124struct _SURFACE_BITS_COMMAND
    125{
    126	UINT32 cmdType;
    127	UINT32 destLeft;
    128	UINT32 destTop;
    129	UINT32 destRight;
    130	UINT32 destBottom;
    131	TS_BITMAP_DATA_EX bmp;
    132	BOOL skipCompression;
    133};
    134typedef struct _SURFACE_BITS_COMMAND SURFACE_BITS_COMMAND;
    135
    136struct _SURFACE_FRAME_MARKER
    137{
    138	UINT32 frameAction;
    139	UINT32 frameId;
    140};
    141typedef struct _SURFACE_FRAME_MARKER SURFACE_FRAME_MARKER;
    142
    143enum SURFCMD_FRAMEACTION
    144{
    145	SURFACECMD_FRAMEACTION_BEGIN = 0x0000,
    146	SURFACECMD_FRAMEACTION_END = 0x0001
    147};
    148
    149/** @brief status code as in 2.2.5.2 Server Status Info PDU */
    150enum
    151{
    152	TS_STATUS_FINDING_DESTINATION = 0x00000401,
    153	TS_STATUS_LOADING_DESTINATION = 0x00000402,
    154	TS_STATUS_BRINGING_SESSION_ONLINE = 0x00000403,
    155	TS_STATUS_REDIRECTING_TO_DESTINATION = 0x00000404,
    156	TS_STATUS_VM_LOADING = 0x00000501,
    157	TS_STATUS_VM_WAKING = 0x00000502,
    158	TS_STATUS_VM_STARTING = 0x00000503,
    159	TS_STATUS_VM_STARTING_MONITORING = 0x00000504,
    160	TS_STATUS_VM_RETRYING_MONITORING = 0x00000505
    161};
    162
    163struct _SURFACE_FRAME
    164{
    165	UINT32 frameId;
    166	UINT32 commandCount;
    167	SURFACE_BITS_COMMAND* commands;
    168};
    169typedef struct _SURFACE_FRAME SURFACE_FRAME;
    170
    171/* defined inside libfreerdp-core */
    172typedef struct rdp_update_proxy rdpUpdateProxy;
    173
    174/* Update Interface */
    175
    176typedef BOOL (*pBeginPaint)(rdpContext* context);
    177typedef BOOL (*pEndPaint)(rdpContext* context);
    178typedef BOOL (*pSetBounds)(rdpContext* context, const rdpBounds* bounds);
    179
    180typedef BOOL (*pSynchronize)(rdpContext* context);
    181typedef BOOL (*pDesktopResize)(rdpContext* context);
    182typedef BOOL (*pBitmapUpdate)(rdpContext* context, const BITMAP_UPDATE* bitmap);
    183typedef BOOL (*pPalette)(rdpContext* context, const PALETTE_UPDATE* palette);
    184typedef BOOL (*pPlaySound)(rdpContext* context, const PLAY_SOUND_UPDATE* play_sound);
    185typedef BOOL (*pSetKeyboardIndicators)(rdpContext* context, UINT16 led_flags);
    186
    187typedef BOOL (*pRefreshRect)(rdpContext* context, BYTE count, const RECTANGLE_16* areas);
    188typedef BOOL (*pSuppressOutput)(rdpContext* context, BYTE allow, const RECTANGLE_16* area);
    189typedef BOOL (*pRemoteMonitors)(rdpContext* context, UINT32 count, const MONITOR_DEF* monitors);
    190
    191typedef BOOL (*pSurfaceCommand)(rdpContext* context, wStream* s);
    192typedef BOOL (*pSurfaceBits)(rdpContext* context, const SURFACE_BITS_COMMAND* surfaceBitsCommand);
    193typedef BOOL (*pSurfaceFrameMarker)(rdpContext* context,
    194                                    const SURFACE_FRAME_MARKER* surfaceFrameMarker);
    195typedef BOOL (*pSurfaceFrameBits)(rdpContext* context, const SURFACE_BITS_COMMAND* cmd, BOOL first,
    196                                  BOOL last, UINT32 frameId);
    197typedef BOOL (*pSurfaceFrameAcknowledge)(rdpContext* context, UINT32 frameId);
    198
    199typedef BOOL (*pSaveSessionInfo)(rdpContext* context, UINT32 type, void* data);
    200typedef BOOL (*pSetKeyboardImeStatus)(rdpContext* context, UINT16 imeId, UINT32 imeState,
    201                                      UINT32 imeConvMode);
    202typedef BOOL (*pServerStatusInfo)(rdpContext* context, UINT32 status);
    203
    204struct rdp_update
    205{
    206	rdpContext* context;     /* 0 */
    207	UINT32 paddingA[16 - 1]; /* 1 */
    208
    209	pBeginPaint BeginPaint;                       /* 16 */
    210	pEndPaint EndPaint;                           /* 17 */
    211	pSetBounds SetBounds;                         /* 18 */
    212	pSynchronize Synchronize;                     /* 19 */
    213	pDesktopResize DesktopResize;                 /* 20 */
    214	pBitmapUpdate BitmapUpdate;                   /* 21 */
    215	pPalette Palette;                             /* 22 */
    216	pPlaySound PlaySound;                         /* 23 */
    217	pSetKeyboardIndicators SetKeyboardIndicators; /* 24 */
    218	pSetKeyboardImeStatus SetKeyboardImeStatus;   /* 25 */
    219	UINT32 paddingB[32 - 26];                     /* 26 */
    220
    221	rdpPointerUpdate* pointer;     /* 32 */
    222	rdpPrimaryUpdate* primary;     /* 33 */
    223	rdpSecondaryUpdate* secondary; /* 34 */
    224	rdpAltSecUpdate* altsec;       /* 35 */
    225	rdpWindowUpdate* window;       /* 36 */
    226	UINT32 paddingC[48 - 37];      /* 37 */
    227
    228	pRefreshRect RefreshRect;       /* 48 */
    229	pSuppressOutput SuppressOutput; /* 49 */
    230	pRemoteMonitors RemoteMonitors; /* 50 */
    231	UINT32 paddingD[64 - 51];       /* 51 */
    232
    233	pSurfaceCommand SurfaceCommand;                   /* 64 */
    234	pSurfaceBits SurfaceBits;                         /* 65 */
    235	pSurfaceFrameMarker SurfaceFrameMarker;           /* 66 */
    236	pSurfaceFrameBits SurfaceFrameBits;               /* 67 */
    237	pSurfaceFrameAcknowledge SurfaceFrameAcknowledge; /* 68 */
    238	pSaveSessionInfo SaveSessionInfo;                 /* 69 */
    239	pServerStatusInfo ServerStatusInfo;               /* 70 */
    240	UINT32 paddingE[80 - 71];                         /* 71 */
    241
    242	/* internal */
    243
    244	wLog* log;
    245
    246	BOOL dump_rfx;
    247	BOOL play_rfx;
    248	rdpPcap* pcap_rfx;
    249	BOOL initialState;
    250
    251	BOOL asynchronous;
    252	rdpUpdateProxy* proxy;
    253	wMessageQueue* queue;
    254
    255	wStream* us;
    256	UINT16 numberOrders;
    257	BOOL combineUpdates;
    258	rdpBounds currentBounds;
    259	rdpBounds previousBounds;
    260	CRITICAL_SECTION mux;
    261
    262	/* if autoCalculateBitmapData is set to TRUE, the server automatically
    263	 * fills BITMAP_DATA struct members: flags, cbCompMainBodySize and cbCompFirstRowSize.
    264	 */
    265	BOOL autoCalculateBitmapData;
    266	size_t offsetOrders; /* the offset to patch numberOrders in the stream */
    267};
    268
    269#endif /* FREERDP_UPDATE_H */