diff --git a/crates/ironrdp-tokio/src/lib.rs b/crates/ironrdp-tokio/src/lib.rs index b966df33..039b55ac 100644 --- a/crates/ironrdp-tokio/src/lib.rs +++ b/crates/ironrdp-tokio/src/lib.rs @@ -5,10 +5,30 @@ use std::io; use std::pin::Pin; use bytes::BytesMut; -use tokio::io::{AsyncRead, AsyncWrite}; +use tokio::io::{AsyncRead, AsyncWrite, ReadHalf, WriteHalf}; pub type TokioFramed = Framed>; +pub fn split_tokio_framed(framed: TokioFramed) -> (TokioFramed>, TokioFramed>) +where + S: Sync + Unpin + AsyncRead + AsyncWrite, +{ + let (stream, leftover) = framed.into_inner(); + let (read_half, write_half) = tokio::io::split(stream); + let framed_read = TokioFramed::new_with_leftover(read_half, leftover); + let framed_write = TokioFramed::new(write_half); + (framed_read, framed_write) +} + +pub fn unsplit_tokio_framed(reader: TokioFramed>, writer: TokioFramed>) -> TokioFramed +where + S: Sync + Unpin + AsyncRead + AsyncWrite, +{ + let (reader, leftover) = reader.into_inner(); + let writer = writer.into_inner_no_leftover(); + TokioFramed::new_with_leftover(reader.unsplit(writer), leftover) +} + pub struct TokioStream { inner: S, }