Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
let _ = tx_queue.pop_front();
},
- data = ipif.tx.next_segment(),
+ data = Ipif::next_frame(&mut ipif.tx),
if tx_queue.is_empty() =>
{
- let data = (||{
- data?.ok_or_else(|| io::Error::from(io::ErrorKind::UnexpectedEof))
- })().context("read from ipif")?;
+ let data = data?;
//eprintln!("data={:?}", DumpHex(&data));
match check1(Slip2Mime, ic.mtu, &data, |header| {
use crate::prelude::*;
+type Tx = t_io::Split<t_io::BufReader<t_proc::ChildStdout>>;
+
pub struct Ipif {
- pub tx: t_io::Split<t_io::BufReader<t_proc::ChildStdout>>,
+ pub tx: Tx,
pub rx: t_proc::ChildStdin,
stderr_task: JoinHandle<io::Result<()>>,
child: t_proc::Child,
drop(self.tx);
}
+
+ #[throws(AE)]
+ pub async fn next_frame(tx: &mut Tx) -> Vec<u8> {
+ let data = tx.next_segment().await;
+ (||{
+ data?.ok_or_else(|| io::Error::from(io::ErrorKind::UnexpectedEof))
+ })().context("read from ipif")?
+ }
}