ironrdp_pdu/rdp/capability_sets/
surface_commands.rs1#[cfg(test)]
2mod tests;
3
4use bitflags::bitflags;
5use ironrdp_core::{ensure_fixed_part_size, Decode, DecodeResult, Encode, EncodeResult, ReadCursor, WriteCursor};
6
7const SURFACE_COMMANDS_LENGTH: usize = 8;
8
9bitflags! {
10 #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
11 pub struct CmdFlags: u32 {
12 const SET_SURFACE_BITS = 0x02;
13 const FRAME_MARKER = 0x10;
14 const STREAM_SURFACE_BITS = 0x40;
15 }
16}
17
18#[derive(Debug, PartialEq, Eq, Clone)]
19pub struct SurfaceCommands {
20 pub flags: CmdFlags,
21}
22
23impl SurfaceCommands {
24 const NAME: &'static str = "SurfaceCommands";
25
26 const FIXED_PART_SIZE: usize = SURFACE_COMMANDS_LENGTH;
27}
28
29impl Encode for SurfaceCommands {
30 fn encode(&self, dst: &mut WriteCursor<'_>) -> EncodeResult<()> {
31 ensure_fixed_part_size!(in: dst);
32
33 dst.write_u32(self.flags.bits());
34 dst.write_u32(0); Ok(())
37 }
38
39 fn name(&self) -> &'static str {
40 Self::NAME
41 }
42
43 fn size(&self) -> usize {
44 Self::FIXED_PART_SIZE
45 }
46}
47
48impl<'de> Decode<'de> for SurfaceCommands {
49 fn decode(src: &mut ReadCursor<'de>) -> DecodeResult<Self> {
50 ensure_fixed_part_size!(in: src);
51
52 let flags = CmdFlags::from_bits_truncate(src.read_u32());
53 let _reserved = src.read_u32();
54
55 Ok(SurfaceCommands { flags })
56 }
57}