begin rework

no-dual
Avril 4 years ago
parent bea3287919
commit 2a2f59ecdc
Signed by: flanchan
GPG Key ID: 284488987C31F630

@ -27,13 +27,26 @@ struct EncryptedStreamMeta
} }
/// Writable half of `EncryptedStream`. /// Writable half of `EncryptedStream`.
#[pin_project]
pub struct WriteHalf<S> pub struct WriteHalf<S>
where S: AsyncWrite where S: AsyncWrite
{ {
meta: Arc<EncryptedStreamMeta>, meta: Arc<EncryptedStreamMeta>,
backing_write: Box<dual::DualStream<S>>, #[pin] backing_write: S,//Box<dual::DualStream<S>>,
}
//TODO: WriteHalf's AsyncWrite impl should just forward to backing_write
pub struct EncryptedWriteHalf<'a, S>
where S: AsyncWrite,
{
cipher: Crypter,
// Buffer for when `backing.poll_write()` returns `Pending`.
crypt_buffer: Vec<u8>,
backing: &'a mut WriteHalf<S>,
} }
//TODO: EncryptedWriteHalf's AsyncWrite impl should en/decrypt the input buffer into `crypt_buffer` then send it to `backing`.
/// Readable half of `EncryptedStream`. /// Readable half of `EncryptedStream`.
#[pin_project] #[pin_project]
@ -43,11 +56,23 @@ where S: AsyncRead
meta: Arc<EncryptedStreamMeta>, meta: Arc<EncryptedStreamMeta>,
/// chacha20_poly1305 decrypter for incoming reads from `S` /// chacha20_poly1305 decrypter for incoming reads from `S`
//TODO: chacha20stream: implement a read version of AsyncSink so we don't need to keep this?
cipher: Option<Crypter>, #[pin] backing_read: S,
#[pin] backing_read: Box<S>,
} }
//TODO: ReadHalf's AsyncRead impl should just forward to backing_read,
pub struct EncryptedReadHalf<'a, S>
where S: AsyncRead,
{
cipher: Crypter,
backing: &'a mut ReadHalf<S>,
}
//TODO: EncryptedReadHalf's AsyncRead impl should en/decrypt the read from backing.
//TODO: Rework everything past this point:
/*
struct ReadWriteCombined<R, W> struct ReadWriteCombined<R, W>
{ {
/// Since chacha20stream has no AsyncRead counterpart, we have to do it ourselves. /// Since chacha20stream has no AsyncRead counterpart, we have to do it ourselves.
@ -112,7 +137,7 @@ impl<R: AsyncRead, W: AsyncWrite> EncryptedStream<R, W>
todo!("Drop write's `meta`, consume read's `meta`. Move the streams into `ReadWriteCombined`") todo!("Drop write's `meta`, consume read's `meta`. Move the streams into `ReadWriteCombined`")
} }
} }
/*
impl<S: AsyncWrite> AsyncWrite for WriteHalf<S> impl<S: AsyncWrite> AsyncWrite for WriteHalf<S>
{ {
#[inline] fn poll_write(self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &[u8]) -> Poll<Result<usize, io::Error>> { #[inline] fn poll_write(self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &[u8]) -> Poll<Result<usize, io::Error>> {
@ -153,3 +178,5 @@ impl<S: AsyncRead> AsyncRead for ReadHalf<S>
} }
} }
} }
*/
*/

Loading…
Cancel
Save