ironrdp_pdu/gcc/
message_channel_data.rs1use 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); 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(); 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}