1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
use std::io; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use crate::{rdp::CapabilitySetsError, PduParsing}; #[derive(Debug, PartialEq, Clone)] pub struct MultifragmentUpdate { pub max_request_size: u32, } impl PduParsing for MultifragmentUpdate { type Error = CapabilitySetsError; fn from_buffer(mut buffer: impl io::Read) -> Result<Self, Self::Error> { let max_request_size = buffer.read_u32::<LittleEndian>()?; Ok(Self { max_request_size }) } fn to_buffer(&self, mut buffer: impl io::Write) -> Result<(), Self::Error> { buffer.write_u32::<LittleEndian>(self.max_request_size)?; Ok(()) } fn buffer_length(&self) -> usize { 4 } } #[cfg(test)] mod test { use super::*; const MULTIFRAGMENT_UPDATE_PDU_BUFFER: [u8; 4] = [0xf4, 0xf3, 0xf2, 0xf1]; const MULTIFRAGMENT_UPDATE_PDU: MultifragmentUpdate = MultifragmentUpdate { max_request_size: 0xf1f2_f3f4, }; #[test] fn from_buffer_correctly_parses_multifragment_update() { assert_eq!( MULTIFRAGMENT_UPDATE_PDU, MultifragmentUpdate::from_buffer(MULTIFRAGMENT_UPDATE_PDU_BUFFER.as_ref()).unwrap() ); } #[test] fn to_buffer_correctly_serializes_multifragment_update() { let expected = MULTIFRAGMENT_UPDATE_PDU_BUFFER.as_ref(); let mut buffer = Vec::with_capacity(expected.len()); MULTIFRAGMENT_UPDATE_PDU.to_buffer(&mut buffer).unwrap(); assert_eq!(expected, buffer.as_slice()); } #[test] fn buffer_length_is_correct_for_multifragment_update() { assert_eq!( MULTIFRAGMENT_UPDATE_PDU_BUFFER.len(), MULTIFRAGMENT_UPDATE_PDU.buffer_length() ); } }