mirror of
https://git.mentality.rip/numas13/xash3d-master.git
synced 2025-02-02 02:04:16 +00:00
Reorg missing challenge error
This commit is contained in:
parent
33429dddc9
commit
9beefd5d6d
@ -38,7 +38,7 @@ impl<'a> Deref for Filter<'a> {
|
||||
#[derive(Debug)]
|
||||
pub enum Packet<'a> {
|
||||
Challenge(Option<u32>),
|
||||
ServerAdd(u32, ServerInfo<&'a str>),
|
||||
ServerAdd(Option<u32>, ServerInfo<&'a str>),
|
||||
ServerRemove,
|
||||
QueryServers(Region, Filter<'a>),
|
||||
}
|
||||
|
@ -39,6 +39,8 @@ pub enum Error {
|
||||
BindSocket(io::Error),
|
||||
#[error("Failed to decode packet: {0}")]
|
||||
ClientPacket(#[from] crate::client::Error),
|
||||
#[error("Missing challenge in ServerInfo")]
|
||||
MissingChallenge,
|
||||
#[error(transparent)]
|
||||
Io(#[from] io::Error),
|
||||
}
|
||||
@ -129,6 +131,10 @@ impl MasterServer {
|
||||
self.remove_outdated_challenges();
|
||||
}
|
||||
Packet::ServerAdd(challenge, info) => {
|
||||
let challenge = match challenge {
|
||||
Some(c) => c,
|
||||
None => return Err(Error::MissingChallenge),
|
||||
};
|
||||
let entry = match self.challenges.get(&from) {
|
||||
Some(e) => e,
|
||||
None => {
|
||||
|
@ -13,8 +13,6 @@ use crate::parser::{Error as ParserError, ParseValue, Parser};
|
||||
pub enum Error {
|
||||
#[error("Invalid region")]
|
||||
InvalidRegion,
|
||||
#[error("Missing challenge in ServerInfo")]
|
||||
MissingChallenge,
|
||||
#[error(transparent)]
|
||||
Parser(#[from] ParserError),
|
||||
}
|
||||
@ -182,7 +180,7 @@ impl<'a, T> ServerInfo<T>
|
||||
where
|
||||
T: 'a + Default + ParseValue<'a, Err = ParserError>,
|
||||
{
|
||||
pub fn from_bytes(src: &'a [u8]) -> Result<(u32, Self, &'a [u8]), Error> {
|
||||
pub fn from_bytes(src: &'a [u8]) -> Result<(Option<u32>, Self, &'a [u8]), Error> {
|
||||
let mut parser = Parser::new(src);
|
||||
let (challenge, info) = parser.parse()?;
|
||||
let tail = match parser.end() {
|
||||
@ -193,7 +191,7 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T> ParseValue<'a> for (u32, ServerInfo<T>)
|
||||
impl<'a, T> ParseValue<'a> for (Option<u32>, ServerInfo<T>)
|
||||
where
|
||||
T: 'a + Default + ParseValue<'a, Err = ParserError>,
|
||||
{
|
||||
@ -239,10 +237,7 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
match challenge {
|
||||
Some(challenge) => Ok((challenge, info)),
|
||||
None => Err(Error::MissingChallenge),
|
||||
}
|
||||
Ok((challenge, info))
|
||||
}
|
||||
}
|
||||
|
||||
@ -313,7 +308,7 @@ mod tests {
|
||||
assert_eq!(
|
||||
ServerInfo::from_bytes(&buf[..]),
|
||||
Ok((
|
||||
12345678,
|
||||
Some(12345678),
|
||||
ServerInfo::<&str> {
|
||||
protocol: 47,
|
||||
players: 16,
|
||||
|
Loading…
x
Reference in New Issue
Block a user