21 #include <freerdp/config.h>
23 #include <winpr/crt.h>
24 #include <winpr/stream.h>
26 #include "rdpei_common.h"
28 #include <freerdp/log.h>
30 #define TAG FREERDP_TAG("channels.rdpei.common")
32 BOOL rdpei_read_2byte_unsigned(
wStream* s, UINT16* value)
36 if (!Stream_CheckAndLogRequiredLength(TAG, s, 1))
39 Stream_Read_UINT8(s,
byte);
43 if (!Stream_CheckAndLogRequiredLength(TAG, s, 1))
46 *value = (
byte & 0x7F) << 8;
47 Stream_Read_UINT8(s,
byte);
52 *value = (
byte & 0x7F);
58 BOOL rdpei_write_2byte_unsigned(
wStream* s, UINT16 value)
62 if (!Stream_EnsureRemainingCapacity(s, 2))
70 byte = ((value & 0x7F00) >> 8);
71 Stream_Write_UINT8(s,
byte | 0x80);
72 byte = (value & 0xFF);
73 Stream_Write_UINT8(s,
byte);
77 byte = (value & 0x7F);
78 Stream_Write_UINT8(s,
byte);
84 BOOL rdpei_read_2byte_signed(
wStream* s, INT16* value)
89 if (!Stream_CheckAndLogRequiredLength(TAG, s, 1))
92 Stream_Read_UINT8(s,
byte);
94 negative = (
byte & 0x40) ? TRUE : FALSE;
96 const BYTE val = (
byte & 0x3F);
100 if (!Stream_CheckAndLogRequiredLength(TAG, s, 1))
103 Stream_Read_UINT8(s,
byte);
104 *value = (INT16)((val << 8) | byte);
115 BOOL rdpei_write_2byte_signed(
wStream* s, INT16 value)
118 BOOL negative = FALSE;
120 if (!Stream_EnsureRemainingCapacity(s, 2))
134 byte = ((value & 0x3F00) >> 8);
139 Stream_Write_UINT8(s,
byte | 0x80);
140 byte = (value & 0xFF);
141 Stream_Write_UINT8(s,
byte);
145 byte = (value & 0x3F);
150 Stream_Write_UINT8(s,
byte);
156 BOOL rdpei_read_4byte_unsigned(
wStream* s, UINT32* value)
161 if (!Stream_CheckAndLogRequiredLength(TAG, s, 1))
164 Stream_Read_UINT8(s,
byte);
166 count = (
byte & 0xC0) >> 6;
168 if (!Stream_CheckAndLogRequiredLength(TAG, s, count))
174 *value = (
byte & 0x3F);
178 *value = (
byte & 0x3F) << 8;
179 Stream_Read_UINT8(s,
byte);
184 *value = (
byte & 0x3F) << 16;
185 Stream_Read_UINT8(s,
byte);
186 *value |= (
byte << 8);
187 Stream_Read_UINT8(s,
byte);
192 *value = (
byte & 0x3F) << 24;
193 Stream_Read_UINT8(s,
byte);
194 *value |= (
byte << 16);
195 Stream_Read_UINT8(s,
byte);
196 *value |= (
byte << 8);
197 Stream_Read_UINT8(s,
byte);
208 BOOL rdpei_write_4byte_unsigned(
wStream* s, UINT32 value)
212 if (!Stream_EnsureRemainingCapacity(s, 4))
217 Stream_Write_UINT8(s, value);
219 else if (value <= 0x3FFFUL)
221 byte = (value >> 8) & 0x3F;
222 Stream_Write_UINT8(s,
byte | 0x40);
223 byte = (value & 0xFF);
224 Stream_Write_UINT8(s,
byte);
226 else if (value <= 0x3FFFFFUL)
228 byte = (value >> 16) & 0x3F;
229 Stream_Write_UINT8(s,
byte | 0x80);
230 byte = (value >> 8) & 0xFF;
231 Stream_Write_UINT8(s,
byte);
232 byte = (value & 0xFF);
233 Stream_Write_UINT8(s,
byte);
235 else if (value <= 0x3FFFFFFFUL)
237 byte = (value >> 24) & 0x3F;
238 Stream_Write_UINT8(s,
byte | 0xC0);
239 byte = (value >> 16) & 0xFF;
240 Stream_Write_UINT8(s,
byte);
241 byte = (value >> 8) & 0xFF;
242 Stream_Write_UINT8(s,
byte);
243 byte = (value & 0xFF);
244 Stream_Write_UINT8(s,
byte);
254 BOOL rdpei_read_4byte_signed(
wStream* s, INT32* value)
260 if (!Stream_CheckAndLogRequiredLength(TAG, s, 1))
263 Stream_Read_UINT8(s,
byte);
265 count = (
byte & 0xC0) >> 6;
266 negative = (
byte & 0x20) ? TRUE : FALSE;
268 if (!Stream_CheckAndLogRequiredLength(TAG, s, count))
274 *value = (
byte & 0x1F);
278 *value = (
byte & 0x1F) << 8;
279 Stream_Read_UINT8(s,
byte);
284 *value = (
byte & 0x1F) << 16;
285 Stream_Read_UINT8(s,
byte);
286 *value |= (
byte << 8);
287 Stream_Read_UINT8(s,
byte);
292 *value = (
byte & 0x1F) << 24;
293 Stream_Read_UINT8(s,
byte);
294 *value |= (
byte << 16);
295 Stream_Read_UINT8(s,
byte);
296 *value |= (
byte << 8);
297 Stream_Read_UINT8(s,
byte);
311 BOOL rdpei_write_4byte_signed(
wStream* s, INT32 value)
314 BOOL negative = FALSE;
316 if (!Stream_EnsureRemainingCapacity(s, 4))
332 Stream_Write_UINT8(s,
byte);
334 else if (value <= 0x1FFFL)
336 byte = (value >> 8) & 0x1F;
341 Stream_Write_UINT8(s,
byte | 0x40);
342 byte = (value & 0xFF);
343 Stream_Write_UINT8(s,
byte);
345 else if (value <= 0x1FFFFFL)
347 byte = (value >> 16) & 0x1F;
352 Stream_Write_UINT8(s,
byte | 0x80);
353 byte = (value >> 8) & 0xFF;
354 Stream_Write_UINT8(s,
byte);
355 byte = (value & 0xFF);
356 Stream_Write_UINT8(s,
byte);
358 else if (value <= 0x1FFFFFFFL)
360 byte = (value >> 24) & 0x1F;
365 Stream_Write_UINT8(s,
byte | 0xC0);
366 byte = (value >> 16) & 0xFF;
367 Stream_Write_UINT8(s,
byte);
368 byte = (value >> 8) & 0xFF;
369 Stream_Write_UINT8(s,
byte);
370 byte = (value & 0xFF);
371 Stream_Write_UINT8(s,
byte);
381 BOOL rdpei_read_8byte_unsigned(
wStream* s, UINT64* value)
386 if (!Stream_CheckAndLogRequiredLength(TAG, s, 1))
389 Stream_Read_UINT8(s,
byte);
391 count = (
byte & 0xE0) >> 5;
393 if (!Stream_CheckAndLogRequiredLength(TAG, s, count))
399 *value = (
byte & 0x1F);
403 *value = (
byte & 0x1FU) << 8U;
404 Stream_Read_UINT8(s,
byte);
409 *value = (
byte & 0x1FU) << 16U;
410 Stream_Read_UINT8(s,
byte);
411 *value |= (
byte << 8U);
412 Stream_Read_UINT8(s,
byte);
417 *value = (
byte & 0x1FU) << 24U;
418 Stream_Read_UINT8(s,
byte);
419 *value |= (
byte << 16U);
420 Stream_Read_UINT8(s,
byte);
421 *value |= (
byte << 8U);
422 Stream_Read_UINT8(s,
byte);
427 *value = ((
byte & 0x1FU)) << 32U;
428 Stream_Read_UINT8(s,
byte);
429 *value |= (
byte << 24U);
430 Stream_Read_UINT8(s,
byte);
431 *value |= (
byte << 16U);
432 Stream_Read_UINT8(s,
byte);
433 *value |= (
byte << 8U);
434 Stream_Read_UINT8(s,
byte);
439 *value = ((
byte & 0x1FU)) << 40U;
440 Stream_Read_UINT8(s,
byte);
441 *value |= ((byte) << 32U);
442 Stream_Read_UINT8(s,
byte);
443 *value |= (
byte << 24U);
444 Stream_Read_UINT8(s,
byte);
445 *value |= (
byte << 16U);
446 Stream_Read_UINT8(s,
byte);
447 *value |= (
byte << 8U);
448 Stream_Read_UINT8(s,
byte);
453 *value = ((
byte & 0x1FU)) << 48U;
454 Stream_Read_UINT8(s,
byte);
455 *value |= ((byte) << 40U);
456 Stream_Read_UINT8(s,
byte);
457 *value |= ((byte) << 32U);
458 Stream_Read_UINT8(s,
byte);
459 *value |= (
byte << 24U);
460 Stream_Read_UINT8(s,
byte);
461 *value |= (
byte << 16U);
462 Stream_Read_UINT8(s,
byte);
463 *value |= (
byte << 8U);
464 Stream_Read_UINT8(s,
byte);
469 *value = ((
byte & 0x1FU)) << 56U;
470 Stream_Read_UINT8(s,
byte);
471 *value |= ((byte) << 48U);
472 Stream_Read_UINT8(s,
byte);
473 *value |= ((byte) << 40U);
474 Stream_Read_UINT8(s,
byte);
475 *value |= ((byte) << 32U);
476 Stream_Read_UINT8(s,
byte);
477 *value |= (
byte << 24U);
478 Stream_Read_UINT8(s,
byte);
479 *value |= (
byte << 16U);
480 Stream_Read_UINT8(s,
byte);
481 *value |= (
byte << 8U);
482 Stream_Read_UINT8(s,
byte);
493 BOOL rdpei_write_8byte_unsigned(
wStream* s, UINT64 value)
497 if (!Stream_EnsureRemainingCapacity(s, 8))
500 if (value <= 0x1FULL)
503 Stream_Write_UINT8(s,
byte);
505 else if (value <= 0x1FFFULL)
507 byte = (value >> 8) & 0x1F;
509 Stream_Write_UINT8(s,
byte);
510 byte = (value & 0xFF);
511 Stream_Write_UINT8(s,
byte);
513 else if (value <= 0x1FFFFFULL)
515 byte = (value >> 16) & 0x1F;
517 Stream_Write_UINT8(s,
byte);
518 byte = (value >> 8) & 0xFF;
519 Stream_Write_UINT8(s,
byte);
520 byte = (value & 0xFF);
521 Stream_Write_UINT8(s,
byte);
523 else if (value <= 0x1FFFFFFFULL)
525 byte = (value >> 24) & 0x1F;
527 Stream_Write_UINT8(s,
byte);
528 byte = (value >> 16) & 0xFF;
529 Stream_Write_UINT8(s,
byte);
530 byte = (value >> 8) & 0xFF;
531 Stream_Write_UINT8(s,
byte);
532 byte = (value & 0xFF);
533 Stream_Write_UINT8(s,
byte);
535 else if (value <= 0x1FFFFFFFFFULL)
537 byte = (value >> 32) & 0x1F;
539 Stream_Write_UINT8(s,
byte);
540 byte = (value >> 24) & 0x1F;
541 Stream_Write_UINT8(s,
byte);
542 byte = (value >> 16) & 0xFF;
543 Stream_Write_UINT8(s,
byte);
544 byte = (value >> 8) & 0xFF;
545 Stream_Write_UINT8(s,
byte);
546 byte = (value & 0xFF);
547 Stream_Write_UINT8(s,
byte);
549 else if (value <= 0x1FFFFFFFFFFFULL)
551 byte = (value >> 40) & 0x1F;
553 Stream_Write_UINT8(s,
byte);
554 byte = (value >> 32) & 0x1F;
555 Stream_Write_UINT8(s,
byte);
556 byte = (value >> 24) & 0x1F;
557 Stream_Write_UINT8(s,
byte);
558 byte = (value >> 16) & 0xFF;
559 Stream_Write_UINT8(s,
byte);
560 byte = (value >> 8) & 0xFF;
561 Stream_Write_UINT8(s,
byte);
562 byte = (value & 0xFF);
563 Stream_Write_UINT8(s,
byte);
565 else if (value <= 0x1FFFFFFFFFFFFFULL)
567 byte = (value >> 48) & 0x1F;
569 Stream_Write_UINT8(s,
byte);
570 byte = (value >> 40) & 0x1F;
571 Stream_Write_UINT8(s,
byte);
572 byte = (value >> 32) & 0x1F;
573 Stream_Write_UINT8(s,
byte);
574 byte = (value >> 24) & 0x1F;
575 Stream_Write_UINT8(s,
byte);
576 byte = (value >> 16) & 0xFF;
577 Stream_Write_UINT8(s,
byte);
578 byte = (value >> 8) & 0xFF;
579 Stream_Write_UINT8(s,
byte);
580 byte = (value & 0xFF);
581 Stream_Write_UINT8(s,
byte);
583 else if (value <= 0x1FFFFFFFFFFFFFFFULL)
585 byte = (value >> 56) & 0x1F;
587 Stream_Write_UINT8(s,
byte);
588 byte = (value >> 48) & 0x1F;
589 Stream_Write_UINT8(s,
byte);
590 byte = (value >> 40) & 0x1F;
591 Stream_Write_UINT8(s,
byte);
592 byte = (value >> 32) & 0x1F;
593 Stream_Write_UINT8(s,
byte);
594 byte = (value >> 24) & 0x1F;
595 Stream_Write_UINT8(s,
byte);
596 byte = (value >> 16) & 0xFF;
597 Stream_Write_UINT8(s,
byte);
598 byte = (value >> 8) & 0xFF;
599 Stream_Write_UINT8(s,
byte);
600 byte = (value & 0xFF);
601 Stream_Write_UINT8(s,
byte);
613 for (UINT16 i = 0; i <
event->frameCount; i++)
614 touch_frame_reset(&event->frames[i]);
617 event->frames = NULL;
618 event->frameCount = 0;
623 free(frame->contacts);
624 frame->contacts = NULL;
625 frame->contactCount = 0;
630 for (UINT16 i = 0; i <
event->frameCount; i++)
631 pen_frame_reset(&event->frames[i]);
634 event->frames = NULL;
635 event->frameCount = 0;
640 free(frame->contacts);
641 frame->contacts = NULL;
642 frame->contactCount = 0;