46 lines
1.1 KiB
Rust

pub struct HandShake<'a> {
len_pack: u8,
len_dom: u8,
port_pos: usize,
datagram: &'a mut [u8],
}
impl<'a> HandShake<'a>{
pub fn new(data: &'a mut[u8]) -> Self {
let len_pack = data[0];
let len_dom = data[4];
Self {
len_pack: len_pack,
len_dom: len_dom,
datagram: data,
port_pos: (len_pack - 2) as usize,
}
}
pub fn get_host_name(&self) -> String {
String::from_utf8(self.datagram[5 .. ((self.len_dom+5) as usize)].to_vec()).unwrap()
}
pub fn get_port(&self) -> u16 {
u16::from_be_bytes([(self.datagram[(self.len_pack - 2) as usize]),
(self.datagram[(self.len_pack - 1) as usize])])
}
pub fn replace_port(&mut self, n_port: u16){
let s_port = n_port.to_ne_bytes();
self.datagram[self.port_pos]=s_port[1];
self.datagram[self.port_pos+1]=s_port[0];
}
pub fn get_raw(&self) -> &[u8]{
self.datagram
}
pub fn is_handshake(&self) -> bool {
(self.datagram[0] == self.len_pack) &&
(self.len_dom + 7 == self.len_pack)
}
}