raknet_rust/handshake/
offline.rs1use bytes::{Buf, Bytes};
2
3use crate::error::DecodeError;
4use crate::protocol::codec::RaknetCodec;
5use crate::protocol::constants::Magic;
6
7#[derive(Debug, Clone)]
8pub struct UnconnectedPing {
9 pub ping_time: i64,
10 pub client_guid: u64,
11 pub magic: Magic,
12}
13
14#[derive(Debug, Clone)]
15pub struct UnconnectedPong {
16 pub ping_time: i64,
17 pub server_guid: u64,
18 pub magic: Magic,
19 pub motd: Bytes,
20}
21
22pub(super) fn decode_ping(
23 src: &mut impl Buf,
24 expected_magic: Magic,
25) -> Result<UnconnectedPing, DecodeError> {
26 let ping_time = i64::decode_raknet(src)?;
27 let magic = super::validate_magic(Magic::decode_raknet(src)?, expected_magic)?;
28 let client_guid = u64::decode_raknet(src)?;
29
30 Ok(UnconnectedPing {
31 ping_time,
32 client_guid,
33 magic,
34 })
35}
36
37pub(super) fn decode_pong(
38 src: &mut impl Buf,
39 expected_magic: Magic,
40) -> Result<UnconnectedPong, DecodeError> {
41 let ping_time = i64::decode_raknet(src)?;
42 let server_guid = u64::decode_raknet(src)?;
43 let magic = super::validate_magic(Magic::decode_raknet(src)?, expected_magic)?;
44 let motd_len = u16::decode_raknet(src)? as usize;
45 if src.remaining() < motd_len {
46 return Err(DecodeError::UnexpectedEof);
47 }
48 let motd = src.copy_to_bytes(motd_len);
49
50 Ok(UnconnectedPong {
51 ping_time,
52 server_guid,
53 magic,
54 motd,
55 })
56}