connectionClosedError

This commit is contained in:
MeexReay 2024-11-12 00:07:18 +03:00
parent 4ccb6487c8
commit 5f243e71fe
2 changed files with 28 additions and 8 deletions

View File

@ -204,8 +204,16 @@ pub trait DataBufferReader {
impl<R: Read> DataBufferReader for R { impl<R: Read> DataBufferReader for R {
fn read_bytes(&mut self, size: usize) -> Result<Vec<u8>, ProtocolError> { fn read_bytes(&mut self, size: usize) -> Result<Vec<u8>, ProtocolError> {
let mut buf = vec![0; size]; let mut buf = vec![0; size];
match self.read_exact(&mut buf) { match self.read(&mut buf) {
Ok(_) => Ok(buf), Ok(i) => if i == size {
Ok(buf)
} else if i == 0 {
Err(ProtocolError::ConnectionClosedError)
} else {
buf.truncate(i);
buf.append(&mut self.read_bytes(size-i)?);
Ok(buf)
},
Err(_) => Err(ProtocolError::ReadError), Err(_) => Err(ProtocolError::ReadError),
} }
} }

View File

@ -251,15 +251,27 @@ impl<T: Read + Write> MinecraftConnection<T> {
#[cfg(feature = "atomic_clone")] #[cfg(feature = "atomic_clone")]
{ {
return read_packet_atomic( return match read_packet_atomic(
&mut self.stream, &mut self.stream,
self.compression.clone(), self.compression.clone(),
Ordering::Relaxed, Ordering::Relaxed,
) ) {
Err(ProtocolError::ConnectionClosedError) => {
self.set_alive(false);
Err(ProtocolError::ConnectionClosedError)
},
i => i
};
} }
#[cfg(not(feature = "atomic_clone"))] #[cfg(not(feature = "atomic_clone"))]
read_packet(&mut self.stream, self.compression) match read_packet(&mut self.stream, self.compression) {
Err(ProtocolError::ConnectionClosedError) => {
self.set_alive(false);
Err(ProtocolError::ConnectionClosedError)
},
i => i
}
} }
/// Write [`Packet`](Packet) to connection /// Write [`Packet`](Packet) to connection