1 use super::errors::ProtocolControlMessageReaderError; 2 use crate::messages::define::SetPeerBandwidthProperties; 3 use byteorder::BigEndian; 4 use netio::bytes_reader::BytesReader; 5 6 pub struct ProtocolControlMessageReader { 7 pub reader: BytesReader, 8 } 9 10 impl ProtocolControlMessageReader { 11 pub fn new(reader: BytesReader) -> Self { 12 Self { reader: reader } 13 } 14 pub fn read_set_chunk_size(&mut self) -> Result<u32, ProtocolControlMessageReaderError> { 15 let chunk_size = self.reader.read_u32::<BigEndian>()?; 16 return Ok(chunk_size); 17 } 18 19 pub fn read_abort_message(&mut self) -> Result<u32, ProtocolControlMessageReaderError> { 20 let chunk_stream_id = self.reader.read_u32::<BigEndian>()?; 21 return Ok(chunk_stream_id); 22 } 23 24 pub fn read_acknowledgement(&mut self) -> Result<u32, ProtocolControlMessageReaderError> { 25 let sequence_number = self.reader.read_u32::<BigEndian>()?; 26 return Ok(sequence_number); 27 } 28 29 pub fn read_window_acknowledgement_size( 30 &mut self, 31 ) -> Result<u32, ProtocolControlMessageReaderError> { 32 let window_acknowledgement_size = self.reader.read_u32::<BigEndian>()?; 33 return Ok(window_acknowledgement_size); 34 } 35 36 pub fn read_set_peer_bandwidth( 37 &mut self, 38 ) -> Result<SetPeerBandwidthProperties, ProtocolControlMessageReaderError> { 39 let window_size = self.reader.read_u32::<BigEndian>()?; 40 let limit_type = self.reader.read_u8()?; 41 42 return Ok(SetPeerBandwidthProperties::new(window_size, limit_type)); 43 } 44 } 45