2025-01-22 20:40:18 +01:00
|
|
|
use std::io::Write;
|
2025-01-19 15:56:36 +01:00
|
|
|
use std::net::SocketAddrV4;
|
2025-01-22 20:40:18 +01:00
|
|
|
use hmac::{Hmac, Mac};
|
2025-06-13 10:05:38 +02:00
|
|
|
use macros::RmcSerialize;
|
2025-01-19 15:56:36 +01:00
|
|
|
use crate::prudp::packet::VirtualPort;
|
|
|
|
|
|
2025-01-22 20:40:18 +01:00
|
|
|
type Md5Hmac = Hmac<md5::Md5>;
|
|
|
|
|
|
2025-06-13 10:05:38 +02:00
|
|
|
#[derive(Eq, PartialEq, Hash, Debug, Copy, Clone, Ord, PartialOrd, RmcSerialize)]
|
|
|
|
|
#[rmc_struct(0)]
|
2025-01-19 15:56:36 +01:00
|
|
|
pub struct PRUDPSockAddr{
|
|
|
|
|
pub regular_socket_addr: SocketAddrV4,
|
|
|
|
|
pub virtual_port: VirtualPort
|
2025-01-22 20:40:18 +01:00
|
|
|
}
|
|
|
|
|
|
2025-02-18 22:55:33 +01:00
|
|
|
|
|
|
|
|
|
2025-01-22 20:40:18 +01:00
|
|
|
impl PRUDPSockAddr{
|
2025-02-18 22:55:33 +01:00
|
|
|
|
|
|
|
|
pub fn new(regular_socket_addr: SocketAddrV4, virtual_port: VirtualPort) -> Self{
|
|
|
|
|
Self{
|
|
|
|
|
regular_socket_addr,
|
|
|
|
|
virtual_port
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub(super) fn calculate_connection_signature(&self) -> [u8; 16] {
|
2025-01-22 20:40:18 +01:00
|
|
|
let mut hmac = Md5Hmac::new_from_slice(&[0; 16]).expect("fuck");
|
|
|
|
|
|
|
|
|
|
let mut data = self.regular_socket_addr.ip().octets().to_vec();
|
2025-03-25 22:53:43 +01:00
|
|
|
//data.extend_from_slice(&self.regular_socket_addr.port().to_be_bytes());
|
2025-01-22 20:40:18 +01:00
|
|
|
|
|
|
|
|
hmac.write_all(&data).expect("figuring this out was complete ass");
|
|
|
|
|
let result: [u8; 16] = hmac.finalize().into_bytes()[0..16].try_into().expect("fuck");
|
|
|
|
|
result
|
|
|
|
|
}
|
2025-01-19 15:56:36 +01:00
|
|
|
}
|