Browse Source

packet errors for unknown packets

pull/3/head
jake 5 years ago
parent
commit
7f32af6729
  1. 4
      psopacket/src/lib.rs
  2. 7
      src/lib.rs
  3. 8
      src/packet/messages.rs

4
psopacket/src/lib.rs

@ -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 {

7
src/lib.rs

@ -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]

8
src/packet/messages.rs

@ -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…
Cancel
Save