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}, registration::{parse_addresses, register_ip_addresses, register_with_the_server},
server_communication::{generate_id, get_peer_list}, server_communication::{generate_id, get_peer_list},
}; };
use std::{io::Error, net::UdpSocket}; use std::{
io::Error,
net::{Ipv4Addr, UdpSocket},
};
use std::{ use std::{
net::SocketAddr, net::SocketAddr,
sync::{Arc, Mutex}, sync::{Arc, Mutex},
@@ -31,6 +34,7 @@ pub struct P2PSharedData {
} }
use bytes::Bytes; use bytes::Bytes;
use p256::pkcs8::der::pem::Base64Encoder;
impl P2PSharedData { impl P2PSharedData {
pub fn new( pub fn new(
@@ -319,10 +323,16 @@ pub fn start_p2p_executor(
match server_addr_query.await { match server_addr_query.await {
Some(server_addr) => match peer_addr_query.await { Some(server_addr) => match peer_addr_query.await {
Some(peer_addr) => { 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( let natreq = construct_message(
NATTRAVERSALREQUEST, NATTRAVERSALREQUEST,
peer_addr.to_string().into_bytes(), payload.clone().to_vec(),
8, generate_id(),
&sd.cryptopair(), &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 /// 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 => { ROOTREPLY | NODATUM | DATUM | NATTRAVERSALREQUEST => {
message.extend_from_slice(&payload.len().to_be_bytes()); message.extend_from_slice(&payload.len().to_be_bytes());
message.extend_from_slice(&payload); message.extend_from_slice(&payload);
let signature = sign_message(crypto_pair, &message); //let signature = sign_message(crypto_pair, &message);
message.extend_from_slice(&signature); //message.extend_from_slice(&signature);
return Some(message); return Some(message);
} }