This commit is contained in:
Tiago Batista Cardoso
2026-01-15 22:37:24 +01:00
parent c59ce1be55
commit 341f8f123d
2 changed files with 31 additions and 5 deletions

View File

@@ -16,7 +16,10 @@ use crate::{
registration::{parse_addresses, register_ip_addresses, register_with_the_server},
server_communication::{generate_id, get_peer_list},
};
use std::{io::Error, net::UdpSocket};
use std::{
io::Error,
net::{Ipv4Addr, UdpSocket},
};
use std::{
net::SocketAddr,
sync::{Arc, Mutex},
@@ -31,6 +34,7 @@ pub struct P2PSharedData {
}
use bytes::Bytes;
use p256::pkcs8::der::pem::Base64Encoder;
impl P2PSharedData {
pub fn new(
@@ -319,10 +323,16 @@ pub fn start_p2p_executor(
match server_addr_query.await {
Some(server_addr) => match peer_addr_query.await {
Some(peer_addr) => {
let payload =
parse_pack(peer_addr.clone().to_string().as_str())
.expect("couldnt create payload");
print!("{:?}", payload.clone());
let natreq = construct_message(
NATTRAVERSALREQUEST,
peer_addr.to_string().into_bytes(),
8,
payload.clone().to_vec(),
generate_id(),
&sd.cryptopair(),
);
@@ -363,6 +373,22 @@ pub fn start_p2p_executor(
})
}
fn parse_pack(s: &str) -> Option<[u8; 6]> {
// split into "ip" and "port"
let mut parts = s.rsplitn(2, ':');
let port_str = parts.next()?;
let ip_str = parts.next()?; // if missing, invalid
let ip: Ipv4Addr = ip_str.parse().ok()?;
let port: u16 = port_str.parse().ok()?;
let octets = ip.octets();
let port_be = port.to_be_bytes();
Some([
octets[0], octets[1], octets[2], octets[3], port_be[0], port_be[1],
])
}
///
/// sends a get request to the server to get the socket address of the given peer
///

View File

@@ -55,8 +55,8 @@ pub fn construct_message(
ROOTREPLY | NODATUM | DATUM | NATTRAVERSALREQUEST => {
message.extend_from_slice(&payload.len().to_be_bytes());
message.extend_from_slice(&payload);
let signature = sign_message(crypto_pair, &message);
message.extend_from_slice(&signature);
//let signature = sign_message(crypto_pair, &message);
//message.extend_from_slice(&signature);
return Some(message);
}