31 lines
869 B
Rust
31 lines
869 B
Rust
use std::collections::VecDeque;
|
|
use crate::varint::varint_read;
|
|
|
|
pub struct Handshake {
|
|
pub protocol_version: i32,
|
|
pub server_address: String,
|
|
pub server_port: u16,
|
|
pub intent: i32
|
|
}
|
|
|
|
impl Handshake {
|
|
pub fn parse(mut packet: &mut VecDeque<u8>) -> Result<Self, String> {
|
|
let protocol_version = varint_read(&mut packet)?;
|
|
|
|
let str_len = varint_read(&mut packet)? as usize;
|
|
let server_address : String = String::from_utf8(packet.drain(..str_len).collect::<Vec<u8>>()).expect("Invalid UTF-8");
|
|
|
|
let bytes: [u8; 2] = [packet[0], packet[1]];
|
|
let server_port : u16 = u16::from_be_bytes(bytes);
|
|
packet.drain(..2);
|
|
|
|
let intent : i32 = varint_read(&mut packet)?;
|
|
Ok(Self {
|
|
protocol_version,
|
|
server_address,
|
|
server_port,
|
|
intent
|
|
})
|
|
}
|
|
}
|