Better, faster and stronger errors.

This commit is contained in:
CosminPerRam 2022-11-24 23:38:51 +02:00
parent b988b51cff
commit 304b8340d2
7 changed files with 75 additions and 69 deletions

View file

@ -3,6 +3,7 @@ use crate::protocols::minecraft::{LegacyGroup, Response, Server};
use crate::protocols::types::TimeoutSettings;
use crate::socket::{Socket, TcpSocket};
use crate::utils::buffer::{get_string_utf16_be, get_u16_be, get_u8};
use crate::utils::error_by_expected_size;
pub struct LegacyV1_6 {
socket: TcpSocket
@ -48,18 +49,16 @@ impl LegacyV1_6 {
let packet_string = get_string_utf16_be(&buf, pos)?;
let split: Vec<&str> = packet_string.split("\x00").collect();
if split.len() != 5 {
return Err(GDError::PacketBad("Not right split size".to_string()));
}
error_by_expected_size(5, split.len())?;
let version_protocol = split[0].parse()
.map_err(|_| GDError::PacketBad("Expected int".to_string()))?;
.map_err(|_| GDError::PacketBad("Failed to parse to expected int."))?;
let version_name = split[1].to_string();
let description = split[2].to_string();
let max_players = split[3].parse()
.map_err(|_| GDError::PacketBad("Expected int".to_string()))?;
.map_err(|_| GDError::PacketBad("Failed to parse to expected int."))?;
let online_players = split[4].parse()
.map_err(|_| GDError::PacketBad("Expected int".to_string()))?;
.map_err(|_| GDError::PacketBad("Failed to parse to expected int."))?;
Ok(Response {
version_name,
@ -82,16 +81,14 @@ impl LegacyV1_6 {
let mut pos = 0;
if get_u8(&buf, &mut pos)? != 0xFF {
return Err(GDError::PacketBad("Expected 0xFF".to_string()));
return Err(GDError::ProtocolRule("Expected a certain byte (0xFF) at the begin of the packet."));
}
let length = get_u16_be(&buf, &mut pos)? * 2;
if buf.len() != (length + 3) as usize { //+ 3 because of the first byte and the u16
return Err(GDError::PacketBad("Not right size".to_string()));
}
error_by_expected_size((length + 3) as usize, buf.len())?;
if !LegacyV1_6::is_protocol(&buf, &mut pos)? {
return Err(GDError::PacketBad("Not good".to_string()));
return Err(GDError::ProtocolRule("Expected certain bytes at the beginning of the packet."));
}
LegacyV1_6::get_response(&buf, &mut pos)