FreeRDP
Loading...
Searching...
No Matches
gfxredir_common.c
1
20#include <freerdp/config.h>
21
22#include <winpr/crt.h>
23#include <winpr/assert.h>
24#include <winpr/stream.h>
25#include <freerdp/channels/log.h>
26
27#define TAG CHANNELS_TAG("gfxredir.common")
28
29#include "gfxredir_common.h"
30
36UINT gfxredir_read_header(wStream* s, GFXREDIR_HEADER* header, size_t* packetLen)
37{
38 WINPR_ASSERT(header);
39 if (packetLen)
40 *packetLen = 0;
41
42 if (!Stream_CheckAndLogRequiredLength(TAG, s, 8))
43 return ERROR_INVALID_DATA;
44
45 Stream_Read_UINT32(s, header->cmdId);
46 Stream_Read_UINT32(s, header->length);
47
48 if (header->length < 8)
49 {
50 WLog_ERR(TAG, "Invalid header length %" PRIu32 ", require at least 8", header->length);
51 return ERROR_INVALID_DATA;
52 }
53
54 if (!Stream_CheckAndLogRequiredLength(TAG, s, header->length - 8))
55 return ERROR_INVALID_DATA;
56
57 if (packetLen)
58 *packetLen = header->length - 8;
59 return CHANNEL_RC_OK;
60}
61
67UINT gfxredir_write_header(wStream* s, const GFXREDIR_HEADER* header)
68{
69 WINPR_ASSERT(header);
70 Stream_Write_UINT32(s, header->cmdId);
71 Stream_Write_UINT32(s, header->length);
72 return CHANNEL_RC_OK;
73}