Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- while !*stop_stream.lock().unwrap() {
- let ch = stream.read_exact(&mut buffer[..]);
- if ch.is_ok() {
- let ch = buffer[0];
- in_buf.push_back(ch);
- let dlen = in_buf.len();
- match mode {
- ParseMode::Preamble => {
- if dlen >= 8 {
- let mut buf = Cursor::new(vec![0; 8]);
- for i in 0..8 {
- buf.put_u8(*in_buf.get(i).unwrap());
- }
- buf.seek(SeekFrom::Start(0));
- if buf.get_u64_be() == PREAMBLE {
- in_buf.clear();
- mode = ParseMode::Header;
- }
- }
- },
- ParseMode::Header => {
- if dlen >= 7 {
- let mut buf = Cursor::new(vec![0; 7]);
- for i in 0..7 {
- buf.put_u8(*in_buf.get(i).unwrap());
- }
- buf.seek(SeekFrom::Start(0));
- id = buf.get_u32_be();
- buf.seek(SeekFrom::Start(4));
- opm = buf.get_u8();
- buf.seek(SeekFrom::Start(5));
- length = buf.get_u16_be();
- in_buf.clear();
- mode = ParseMode::Body;
- }
- },
- ParseMode::Body => {
- if dlen >= length as usize {
- let mut buf = vec![];
- for i in 0..length {
- buf.put_u8(*in_buf.get(i as usize).unwrap());
- }
- let packet = Packet::new(id, opm, length, buf);
- sender.send(packet);
- in_buf.clear();
- mode = ParseMode::Preamble;
- }
- }
- }
- } else {
- error!("IO error while reading stream");
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement