use crate::internal_alloc::Vec;
use crate::record::TlsRecordDeframer;
use super::stream_async::AsyncByteStream;
use super::TransportError;
pub async fn noxtls_read_record_async<S: AsyncByteStream>(
stream: &mut S,
deframer: &mut TlsRecordDeframer,
) -> Result<Vec<u8>, TransportError> {
loop {
if let Some(packet) = deframer
.pop_packet()
.map_err(|_| TransportError::IoFailed("tls record deframer rejected length"))?
{
return Ok(packet);
}
let mut chunk = [0_u8; 4096];
let n = stream.read_async(&mut chunk).await?;
if n == 0 {
return Err(TransportError::UnexpectedEof);
}
deframer.push(&chunk[..n]);
}
}
pub async fn noxtls_write_all_async<S: AsyncByteStream>(
stream: &mut S,
data: &[u8],
) -> Result<(), TransportError> {
stream.write_all_async(data).await
}