ctf_pwn/io/pipe/
interactive.rs1use 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}