Correct usage of `tokio::select!`
[?]
Nov 26, 2020, 3:30 PM
KNLLUDOIG47X7V7SMRTKBCLZ6SCKEETLNKBNS5ARCYCD2RJLIEQACDependencies
- [2]
Y5HHIQXVWait for the connection to be encrypted in `connect` - [3]
SJBZKVM5Debug messages - [4]
7FRJYUI6Reboot because of a bad change
Change contents
- replacement in thrussh/src/ssh_read.rs at line 45
r: R,pub r: R,}impl<R: AsyncRead + AsyncWrite> SshRead<R> {pub fn split(self) -> (SshRead<tokio::io::ReadHalf<R>>, tokio::io::WriteHalf<R>) {let (r, w) = tokio::io::split(self.r);(SshRead {id: self.id,r}, w)} - edit in thrussh/src/ssh_read.rs at line 58
- edit in thrussh/src/server/mod.rs at line 25
use tokio::pin; - edit in thrussh/src/server/mod.rs at line 443
}async fn start_reading<R: AsyncRead + Unpin>(mut stream_read: R, mut buffer: SSHBuffer, cipher: Arc<crate::cipher::CipherPair>) -> Result<(usize, R, SSHBuffer), anyhow::Error> {buffer.buffer.clear();let n = cipher::read(&mut stream_read, &mut buffer, &cipher).await?;Ok((n, stream_read, buffer)) - replacement in thrussh/src/server/mod.rs at line 482
let mut buffer = SSHBuffer::new();let (stream_read, mut stream_write) = stream.split();let buffer = SSHBuffer::new();let reading = start_reading(stream_read, buffer, session.common.cipher.clone());pin!(reading); - replacement in thrussh/src/server/mod.rs at line 490
_ = cipher::read(&mut stream, &mut buffer, &session.common.cipher) => {Ok((_, stream_read, buffer)) = &mut reading => { - edit in thrussh/src/server/mod.rs at line 524
reading.set(start_reading(stream_read, buffer, session.common.cipher.clone())); - replacement in thrussh/src/server/mod.rs at line 563
streamstream_write - edit in thrussh/src/server/mod.rs at line 566
buffer.buffer.clear(); - replacement in thrussh/src/server/mod.rs at line 570
stream.shutdown().await?;buffer.buffer.clear();while cipher::read(&mut stream, &mut buffer, &session.common.cipher).await? != 0 {buffer.buffer.clear();stream_write.shutdown().await?;loop {let (n, r, b) = (&mut reading).await?;if n == 0 {break} else {reading.set(start_reading(r, b, session.common.cipher.clone()))} - edit in thrussh/src/client/mod.rs at line 36
use tokio::pin; - edit in thrussh/src/client/mod.rs at line 809
async fn start_reading<R: AsyncRead + Unpin>(mut stream_read: R, mut buffer: SSHBuffer, cipher: Arc<crate::cipher::CipherPair>) -> Result<(usize, R, SSHBuffer), anyhow::Error> {buffer.buffer.clear();let n = cipher::read(&mut stream_read, &mut buffer, &cipher).await?;Ok((n, stream_read, buffer))} - replacement in thrussh/src/client/mod.rs at line 818
mut stream: R,mut stream: SshRead<R>, - edit in thrussh/src/client/mod.rs at line 829
let mut buffer = SSHBuffer::new(); - edit in thrussh/src/client/mod.rs at line 831
let (stream_read, mut stream_write) = stream.split();let buffer = SSHBuffer::new();let reading = start_reading(stream_read, buffer, self.common.cipher.clone());pin!(reading); - replacement in thrussh/src/client/mod.rs at line 839
n = cipher::read(&mut stream, &mut buffer, &self.common.cipher) => {if n.is_err() || buffer.buffer.len() < 5 {Ok((_, stream_read, buffer)) = &mut reading => {if buffer.buffer.len() < 5 { - edit in thrussh/src/client/mod.rs at line 864
reading.set(start_reading(stream_read, buffer, self.common.cipher.clone())); - replacement in thrussh/src/client/mod.rs at line 930
stream.write_all(&self.common.write_buffer.buffer).await?;stream.flush().await?;stream_write.write_all(&self.common.write_buffer.buffer).await?;stream_write.flush().await?; - edit in thrussh/src/client/mod.rs at line 933
buffer.buffer.clear(); - replacement in thrussh/src/client/mod.rs at line 943
stream.shutdown().await?;// Shutdownbuffer.buffer.clear();while cipher::read(&mut stream, &mut buffer, &self.common.cipher).await? != 0 {buffer.buffer.clear();}stream_write.shutdown().await?;