FreeRDP
Loading...
Searching...
No Matches
disp_common.c
1
20#include <freerdp/config.h>
21
22#include <winpr/crt.h>
23#include <winpr/stream.h>
24#include <freerdp/channels/log.h>
25
26#define TAG CHANNELS_TAG("disp.common")
27
28#include "disp_common.h"
29
35UINT disp_read_header(wStream* s, DISPLAY_CONTROL_HEADER* header, size_t* packetLen)
36{
37 if (packetLen)
38 *packetLen = 0;
39
40 if (!Stream_CheckAndLogRequiredLength(TAG, s, 8))
41 return ERROR_INVALID_DATA;
42
43 Stream_Read_UINT32(s, header->type);
44 Stream_Read_UINT32(s, header->length);
45 if (header->length < 8)
46 {
47 WLog_ERR(TAG, "Invalid header length %" PRIu32 ", require at least 8", header->length);
48 return ERROR_INVALID_DATA;
49 }
50 if (!Stream_CheckAndLogRequiredLength(TAG, s, header->length - 8))
51 return ERROR_INVALID_DATA;
52
53 if (packetLen)
54 *packetLen = header->length - 8;
55
56 return CHANNEL_RC_OK;
57}
58
64UINT disp_write_header(wStream* s, const DISPLAY_CONTROL_HEADER* header)
65{
66 Stream_Write_UINT32(s, header->type);
67 Stream_Write_UINT32(s, header->length);
68 return CHANNEL_RC_OK;
69}