if packet.len() == 0 {
throw!(PacketError::Empty)
}
- if packet.len() > mtu.sat() {
- throw!(PacketError::MTU { len: packet.len(), mtu });
- }
let mut packet: Box<[u8]> = packet.to_owned().into();
let mut walk: &mut [u8] = &mut packet;
let mut header = [0u8; HEADER_FOR_ADDR];
let mut wheader = &mut header[..];
+ let mut escapes = 0;
while let Some((i, was_mime)) = walk.iter().enumerate().find_map(
|(i,&c)| match c {
};
let _ = wheader.write(&[c]);
walk = &mut walk[i+2 ..];
+ escapes += 1;
} else {
let _ = wheader.write(&[SLIP_MIME_ESC]);
walk = &mut walk[i+1 ..];
let wheader_len = wheader.len();
let header = &header[0.. header.len() - wheader_len];
+ let decoded_len = packet.len() - escapes;
+ if decoded_len > mtu.sat() {
+ throw!(PacketError::MTU { len: decoded_len, mtu });
+ }
+
addr_chk(&header)?;
packet