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:
parent
3c07869868
commit
3ec92b2e81
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user