ironrdp_pdu/gcc/
message_channel_data.rs

1use ironrdp_core::{ensure_fixed_part_size, Decode, DecodeResult, Encode, EncodeResult, ReadCursor, WriteCursor};
2
3const CLIENT_FLAGS_SIZE: usize = 4;
4const SERVER_MCS_MESSAGE_CHANNEL_ID_SIZE: usize = 2;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct ClientMessageChannelData;
8
9impl ClientMessageChannelData {
10    const NAME: &'static str = "ClientMessageChannelData";
11
12    const FIXED_PART_SIZE: usize = CLIENT_FLAGS_SIZE;
13}
14
15impl Encode for ClientMessageChannelData {
16    fn encode(&self, dst: &mut WriteCursor<'_>) -> EncodeResult<()> {
17        ensure_fixed_part_size!(in: dst);
18
19        dst.write_u32(0); // flags
20
21        Ok(())
22    }
23
24    fn name(&self) -> &'static str {
25        Self::NAME
26    }
27
28    fn size(&self) -> usize {
29        Self::FIXED_PART_SIZE
30    }
31}
32
33impl<'de> Decode<'de> for ClientMessageChannelData {
34    fn decode(src: &mut ReadCursor<'de>) -> DecodeResult<Self> {
35        ensure_fixed_part_size!(in: src);
36
37        let _flags = src.read_u32(); // is unused
38
39        Ok(Self)
40    }
41}
42
43#[derive(Debug, Clone, PartialEq, Eq)]
44pub struct ServerMessageChannelData {
45    pub mcs_message_channel_id: u16,
46}
47
48impl ServerMessageChannelData {
49    const NAME: &'static str = "ServerMessageChannelData";
50
51    const FIXED_PART_SIZE: usize = SERVER_MCS_MESSAGE_CHANNEL_ID_SIZE;
52}
53
54impl Encode for ServerMessageChannelData {
55    fn encode(&self, dst: &mut WriteCursor<'_>) -> EncodeResult<()> {
56        ensure_fixed_part_size!(in: dst);
57
58        dst.write_u16(self.mcs_message_channel_id);
59
60        Ok(())
61    }
62
63    fn name(&self) -> &'static str {
64        Self::NAME
65    }
66
67    fn size(&self) -> usize {
68        Self::FIXED_PART_SIZE
69    }
70}
71
72impl<'de> Decode<'de> for ServerMessageChannelData {
73    fn decode(src: &mut ReadCursor<'de>) -> DecodeResult<Self> {
74        ensure_fixed_part_size!(in: src);
75
76        let mcs_message_channel_id = src.read_u16();
77
78        Ok(Self { mcs_message_channel_id })
79    }
80}