.ok_or_else(|| io::Error::from(io::ErrorKind::UnexpectedEof))?;
// eprintln!("packet={:x?}", &packet);
if let Ok(()) = check_checkmtu_mimeswap
- ::<true>(&ic, &mut packet)
+ ::<true>(ic.mtu, &mut packet)
{
match upbound.add(ic.max_batch_up, packet) {
Err(packet) => {
#[throws(AE)]
pub fn check_checkmtu_mimeswap<const TO_MIME: bool>
- (ic: &InstanceConfig, data: &mut [u8])
+ (mtu: u32, data: &mut [u8])
{
// eprintln!("before: {}", DumpHex(data));
for mut packet in data.split_mut(|&c| c == SLIP_END) {
- if packet.len() > ic.mtu.sat() {
- throw!(anyhow!("mtu exceeded ({} > {})", packet.len(), ic.mtu));
+ if packet.len() > mtu.sat() {
+ throw!(anyhow!("mtu exceeded ({} > {})", packet.len(), mtu));
}
while let Some((i, _)) = packet.iter().enumerate().find(
for v in self.0 { write!(f, "{:02x}", v)?; }
}
}
+
+#[test]
+fn mime_slip_to_mime() {
+ fn chk(i: &[u8], exp: Result<&[u8], &str>) {
+ let mut p = i.to_owned();
+ match (exp, check_checkmtu_mimeswap::<true>(10, p.as_mut())) {
+ (Ok(exp), Ok(())) => assert_eq!( exp, &p ),
+ (Err(exp), Err(got)) => assert!( got.to_string().contains(exp) ),
+ x => panic!("? {:?}", x),
+ }
+ }
+
+ chk( &[ SLIP_END, SLIP_ESC, SLIP_ESC_END, b'-', b'X' ],
+ Ok(&[ SLIP_END, b'-', SLIP_ESC_END, SLIP_ESC, b'X' ]) );
+
+ chk( &[ SLIP_END, SLIP_ESC, b'y' ], Err("SLIP escape") );
+}