Break: decode the players packet

This commit is contained in:
eigenein committed 2023-04-30 22:13:51 +02:00
1 parent e48fe1dd0d
commit 72165ae52c
5 files changed
+114 -16

No files matched your search

+19 -6
View File
@@ -1,16 +1,23 @@
use std::io::Read;
use byteorder::{LittleEndian, ReadBytesExt};
use prost::encoding::decode_varint;
use prost::Message;
use serde::Serialize;
use serde_with::serde_as;
use crate::models::data::read_quirky_length;
use crate::models::data::subtype_2f::Subtype2F;
use crate::result::Result;
#[serde_as]
#[derive(Debug, Serialize)]
pub enum EntityMethod {
Subtype2F {
// prefix: [u8; 9],
field_number: u64,
sub_type_2f: Subtype2F,
/// Original payload for investigation.
#[serde_as(as = "serde_with::hex::Hex")]
payload: Vec<u8>,
},
/// Default variant when subtype is not known by the parser.
@@ -32,9 +39,15 @@ impl EntityMethod {
let this = match sub_type {
0x2F => {
// let mut prefix = [0; 9];
// reader.read_exact(&mut prefix)?;
Self::Subtype2F {}
let _inner_length = reader.read_u32::<LittleEndian>()?;
let field_number = decode_varint(&mut reader)?;
let message_length = read_quirky_length(&mut reader)?;
Self::Subtype2F {
field_number,
sub_type_2f: Subtype2F::decode(&reader[..message_length])?,
payload,
}
}
_ => Self::Unknown { sub_type, payload },