packet errors for unknown packets
This commit is contained in:
parent
415794794a
commit
7f32af6729
@ -160,7 +160,7 @@ fn generate_psopacket_impl(pkt_cmd: u16, name: syn::Ident, attrs: &Vec<AttrType>
|
|||||||
else { 0 };
|
else { 0 };
|
||||||
|
|
||||||
if cmd != #pkt_cmd {
|
if cmd != #pkt_cmd {
|
||||||
return Err(PacketParseError::WrongPacketCommand);
|
return Err(PacketParseError::WrongPacketCommand {expected: #pkt_cmd, got: cmd});
|
||||||
}
|
}
|
||||||
|
|
||||||
if len as usize != data.len() {
|
if len as usize != data.len() {
|
||||||
@ -422,7 +422,7 @@ fn generate_psomessage_impl(msg_cmd: u8, name: syn::Ident, attrs: &Vec<AttrType>
|
|||||||
let len = cur.read(&mut subbuf).unwrap();
|
let len = cur.read(&mut subbuf).unwrap();
|
||||||
|
|
||||||
if cmd != #msg_cmd {
|
if cmd != #msg_cmd {
|
||||||
return Err(PacketParseError::WrongPacketCommand);
|
return Err(PacketParseError::WrongMessageCommand {expected: #msg_cmd, got: cmd});
|
||||||
}
|
}
|
||||||
|
|
||||||
if len != size as usize * 4 - 2 {
|
if len != size as usize * 4 - 2 {
|
||||||
|
@ -12,9 +12,12 @@ use std::io::{Read, Seek};
|
|||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub enum PacketParseError {
|
pub enum PacketParseError {
|
||||||
NotEnoughBytes,
|
NotEnoughBytes,
|
||||||
WrongPacketCommand,
|
WrongPacketCommand {expected: u16, got: u16},
|
||||||
WrongPacketForServerType(u16, Vec<u8>),
|
WrongPacketForServerType(u16, Vec<u8>),
|
||||||
|
UnknownPacket(u16, Vec<u8>),
|
||||||
WrongPacketSize(u16, usize),
|
WrongPacketSize(u16, usize),
|
||||||
|
WrongMessageCommand {expected: u8, got: u8},
|
||||||
|
UnknownMessage(u8, Vec<u8>),
|
||||||
DataStructNotLargeEnough(u64, usize),
|
DataStructNotLargeEnough(u64, usize),
|
||||||
InvalidValue,
|
InvalidValue,
|
||||||
ReadError,
|
ReadError,
|
||||||
@ -336,7 +339,7 @@ mod test {
|
|||||||
let mut bytes = test.as_bytes();
|
let mut bytes = test.as_bytes();
|
||||||
bytes[2] = 17;
|
bytes[2] = 17;
|
||||||
let test2 = Test::from_bytes(&bytes);
|
let test2 = Test::from_bytes(&bytes);
|
||||||
assert!(test2 == Err(PacketParseError::WrongPacketCommand));
|
assert!(test2 == Err(PacketParseError::WrongPacketCommand { expected: 0x23, got: 17}));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -110,7 +110,13 @@ impl PSOPacketData for GameMessage {
|
|||||||
PlayerDoneChangingMap::CMD => Ok(GameMessage::PlayerDoneChangingMap(PlayerDoneChangingMap::from_bytes(&mut cur)?)),
|
PlayerDoneChangingMap::CMD => Ok(GameMessage::PlayerDoneChangingMap(PlayerDoneChangingMap::from_bytes(&mut cur)?)),
|
||||||
TellOtherPlayerMyLocation::CMD => Ok(GameMessage::TellOtherPlayerMyLocation(TellOtherPlayerMyLocation::from_bytes(&mut cur)?)),
|
TellOtherPlayerMyLocation::CMD => Ok(GameMessage::TellOtherPlayerMyLocation(TellOtherPlayerMyLocation::from_bytes(&mut cur)?)),
|
||||||
UnknownAE::CMD => Ok(GameMessage::UnknownAE(UnknownAE::from_bytes(&mut cur)?)),
|
UnknownAE::CMD => Ok(GameMessage::UnknownAE(UnknownAE::from_bytes(&mut cur)?)),
|
||||||
_ => Err(PacketParseError::WrongPacketCommand),
|
_ => Err(PacketParseError::UnknownMessage(byte[0],
|
||||||
|
{
|
||||||
|
let mut b = vec![0; len[0] as usize * 4];
|
||||||
|
cur.read(&mut b).unwrap();
|
||||||
|
b.to_vec()
|
||||||
|
}
|
||||||
|
)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn as_bytes(&self) -> Vec<u8> {
|
fn as_bytes(&self) -> Vec<u8> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user