46 lines
1.1 KiB
Rust
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)
|
|
}
|
|
}
|
|
|