| 39 | } |
| 40 | |
| 41 | fn decode_head(&mut self, src: &mut BytesMut) -> io::Result<Option<usize>> { |
| 42 | if src.is_empty() { |
| 43 | return Ok(None); |
| 44 | } |
| 45 | let head_len = ((src[0] & 0x3) + 1) as usize; |
| 46 | if src.len() < head_len { |
| 47 | return Ok(None); |
| 48 | } |
| 49 | let mut n = src[0] as usize; |
| 50 | if head_len > 1 { |
| 51 | n |= (src[1] as usize) << 8; |
| 52 | } |
| 53 | if head_len > 2 { |
| 54 | n |= (src[2] as usize) << 16; |
| 55 | } |
| 56 | if head_len > 3 { |
| 57 | n |= (src[3] as usize) << 24; |
| 58 | } |
| 59 | n >>= 2; |
| 60 | if n > self.max_packet_length { |
| 61 | return Err(io::Error::new(io::ErrorKind::InvalidData, "Too big packet")); |
| 62 | } |
| 63 | src.advance(head_len); |
| 64 | src.reserve(n); |
| 65 | Ok(Some(n)) |
| 66 | } |
| 67 | |
| 68 | fn decode_data(&self, n: usize, src: &mut BytesMut) -> io::Result<Option<BytesMut>> { |
| 69 | if src.len() < n { |