Advertisement
Guest User

Untitled

a guest
Jul 11th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.95 KB | None | 0 0
  1. while !*stop_stream.lock().unwrap() {
  2.     let ch = stream.read_exact(&mut buffer[..]);
  3.  
  4.     if ch.is_ok() {
  5.         let ch = buffer[0];
  6.         in_buf.push_back(ch);
  7.         let dlen = in_buf.len();
  8.  
  9.         match mode {
  10.             ParseMode::Preamble => {
  11.                 if dlen >= 8 {
  12.                     let mut buf = Cursor::new(vec![0; 8]);
  13.                     for i in 0..8 {
  14.                         buf.put_u8(*in_buf.get(i).unwrap());
  15.                     }
  16.  
  17.                     buf.seek(SeekFrom::Start(0));
  18.  
  19.                     if buf.get_u64_be() == PREAMBLE {
  20.                         in_buf.clear();
  21.                         mode = ParseMode::Header;
  22.                     }
  23.                 }
  24.             },
  25.             ParseMode::Header => {
  26.                 if dlen >= 7 {
  27.                     let mut buf = Cursor::new(vec![0; 7]);
  28.                     for i in 0..7 {
  29.                         buf.put_u8(*in_buf.get(i).unwrap());
  30.                     }
  31.  
  32.                     buf.seek(SeekFrom::Start(0));
  33.                     id = buf.get_u32_be();
  34.                     buf.seek(SeekFrom::Start(4));
  35.                     opm = buf.get_u8();
  36.                     buf.seek(SeekFrom::Start(5));
  37.                     length = buf.get_u16_be();
  38.  
  39.                     in_buf.clear();
  40.                     mode = ParseMode::Body;
  41.                 }
  42.             },
  43.             ParseMode::Body => {
  44.                 if dlen >= length as usize {
  45.                     let mut buf = vec![];
  46.  
  47.                     for i in 0..length {
  48.                         buf.put_u8(*in_buf.get(i as usize).unwrap());
  49.                     }
  50.  
  51.                     let packet = Packet::new(id, opm, length, buf);
  52.                     sender.send(packet);
  53.                     in_buf.clear();
  54.                     mode = ParseMode::Preamble;
  55.                 }
  56.             }
  57.         }
  58.  
  59.     } else {
  60.         error!("IO error while reading stream");
  61.  
  62.         break;
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement