This commit is contained in:
nora 2022-03-19 21:38:27 +01:00
parent dbc577abbc
commit 504757b324
7 changed files with 52 additions and 29 deletions

View file

@ -224,7 +224,9 @@ impl TransportConnection {
}
async fn recv_method(&mut self) -> Result<Method> {
let start_ok_frame = frame::read_frame(&mut self.stream, self.max_frame_size).await?;
let start_ok_frame = frame::read_frame(&mut self.stream, self.max_frame_size)
.await
.context("read from stream, peer disconnected")?;
ensure_conn(start_ok_frame.kind == FrameType::Method)?;
@ -320,7 +322,7 @@ impl TransportConnection {
loop {
select! {
frame = frame::read_frame(&mut self.stream, self.max_frame_size) => {
let frame = frame?;
let frame = frame.context("read from stream, peer disconnected")?;
self.handle_frame(frame).await?;
}
queued_method = self.event_receiver.recv() => {

View file

@ -283,15 +283,15 @@ pub async fn read_frame<R>(r: &mut R, max_frame_size: MaxFrameSize) -> Result<Fr
where
R: AsyncReadExt + Unpin + Send,
{
let kind = r.read_u8().await.context("read type")?;
let channel = r.read_u16().await.context("read channel")?;
let kind = r.read_u8().await?;
let channel = r.read_u16().await?;
let channel = ChannelNum::new(channel);
let size = r.read_u32().await.context("read size")?;
let size = r.read_u32().await?;
let mut payload = vec![0; size.try_into().unwrap()];
r.read_exact(&mut payload).await.context("read payload")?;
r.read_exact(&mut payload).await?;
let frame_end = r.read_u8().await.context("read frame end")?;
let frame_end = r.read_u8().await?;
if frame_end != REQUIRED_FRAME_END {
return Err(ProtocolError::Fatal.into());