Fix packet decoding for cases of dropped connection and decoding of ping responses (#22)

* Report network error when receiving packet with zero len

* Fix receiving packets with zero payload length
This commit is contained in:
Matous Hybl 2022-09-13 10:06:27 +02:00 committed by GitHub
parent 3c07869868
commit 3ec92b2e81
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -558,6 +558,10 @@ async fn receive_packet<'c, T: Read + Write>(
.receive(&mut recv_buffer[writer.position..(writer.position + 1)]) .receive(&mut recv_buffer[writer.position..(writer.position + 1)])
.await?; .await?;
trace!(" Received data!"); trace!(" Received data!");
if len == 0 {
trace!("Zero byte len packet received, dropping connection.");
return Err(NetworkError);
}
i = i + len; i = i + len;
if let Err(_e) = writer.insert_ref(len, &recv_buffer[writer.position..i]) { if let Err(_e) = writer.insert_ref(len, &recv_buffer[writer.position..i]) {
error!("Error occurred during write to buffer!"); error!("Error occurred during write to buffer!");
@ -586,6 +590,10 @@ async fn receive_packet<'c, T: Read + Write>(
} }
loop { loop {
if writer.position == target_len + rem_len_len {
trace!("Received packet with len: {}", (target_len + rem_len_len));
return Ok(target_len + rem_len_len);
}
let len: usize = conn let len: usize = conn
.receive(&mut recv_buffer[writer.position..writer.position + (target_len - i)]) .receive(&mut recv_buffer[writer.position..writer.position + (target_len - i)])
.await?; .await?;
@ -596,10 +604,6 @@ async fn receive_packet<'c, T: Read + Write>(
error!("Error occurred during write to buffer!"); error!("Error occurred during write to buffer!");
return Err(BuffError); return Err(BuffError);
} }
if writer.position == target_len + rem_len_len {
trace!("Received packet with len: {}", (target_len + rem_len_len));
return Ok(target_len + rem_len_len);
}
} }
} }