ctf_pwn/io/pipe/
interactive.rs

1use crate::io::{NcursesTerminalBridge, PipeError, ShellTerminalBridge, TerminalBridge};
2use tokio::io::{split, AsyncRead, AsyncWrite};
3
4impl<T: AsyncRead + AsyncWrite + Unpin + Send> PipeInteractiveExt for T {}
5
6pub trait PipeInteractiveExt: AsyncRead + AsyncWrite + Unpin + Send {
7    async fn interactive_shell(&mut self) -> Result<(), PipeError> {
8        let (mut reader, mut writer) = split(self);
9        ShellTerminalBridge::bridge(&mut reader, &mut writer).await;
10        Ok(())
11    }
12
13    async fn interactive_ansi(&mut self) -> Result<(), PipeError> {
14        let (mut reader, mut writer) = split(self);
15        NcursesTerminalBridge::bridge(&mut reader, &mut writer).await;
16        Ok(())
17    }
18}