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