From 14fa256f9ca5f4acbb140c91aaeb120647b701f3 Mon Sep 17 00:00:00 2001 From: TIBERGHIEN corentin Date: Fri, 16 Jan 2026 01:12:52 +0100 Subject: [PATCH] wip nattraversal --- client-network/src/lib.rs | 17 ++++++++++++----- client-network/src/message_handling.rs | 3 +-- client-network/src/messages_structure.rs | 8 +++++--- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/client-network/src/lib.rs b/client-network/src/lib.rs index e06965f..6b7f9d2 100644 --- a/client-network/src/lib.rs +++ b/client-network/src/lib.rs @@ -21,7 +21,7 @@ use crate::{ }; use std::{ io::Error, - net::{Ipv4Addr, UdpSocket}, + net::{IpAddr, Ipv4Addr, UdpSocket}, }; use std::{ net::SocketAddr, @@ -366,15 +366,13 @@ 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"); + let payload = socket_addr_to_vec(server_addr); print!("{:?}", payload.clone()); let natreq = construct_message( NATTRAVERSALREQUEST, - payload.clone().to_vec(), + server_addr.to_string().into_bytes(), generate_id(), &sd.cryptopair(), ); @@ -417,6 +415,15 @@ pub fn start_p2p_executor( }) } +fn socket_addr_to_vec(addr: SocketAddr) -> Vec { + let mut v = match addr.ip() { + IpAddr::V4(v4) => v4.octets().to_vec(), + IpAddr::V6(v6) => v6.octets().to_vec(), + }; + v.extend(&addr.port().to_be_bytes()); + v +} + fn parse_pack(s: &str) -> Option<[u8; 6]> { // split into "ip" and "port" let mut parts = s.rsplitn(2, ':'); diff --git a/client-network/src/message_handling.rs b/client-network/src/message_handling.rs index 00f338d..dcbea93 100644 --- a/client-network/src/message_handling.rs +++ b/client-network/src/message_handling.rs @@ -290,8 +290,7 @@ pub fn parse_message( constructed_message = construct_message(OK, Vec::new(), id, crypto_pair); let ilength = u16::from_be_bytes(length_bytes); - let received_address = - &received_message[LENGTH + EXTENSIONS..LENGTH + ilength as usize]; + let received_address = &received_message[LENGTH..LENGTH + ilength as usize]; let address = String::from_utf8(received_address.to_vec()).expect("wrong name"); let pingreq = construct_message(PING, Vec::new(), id, crypto_pair); diff --git a/client-network/src/messages_structure.rs b/client-network/src/messages_structure.rs index f913fe4..115b19c 100644 --- a/client-network/src/messages_structure.rs +++ b/client-network/src/messages_structure.rs @@ -53,10 +53,12 @@ pub fn construct_message( return Some(message); } ROOTREPLY | NODATUM | DATUM | NATTRAVERSALREQUEST => { - message.extend_from_slice(&payload.len().to_be_bytes()); + println!("payload:{:?}", &payload); + message.extend_from_slice(&(payload.len() as u16).to_be_bytes()); message.extend_from_slice(&payload); - //let signature = sign_message(crypto_pair, &message); - //message.extend_from_slice(&signature); + println!("payload:{:?}", &message); + let signature = sign_message(crypto_pair, &message); + message.extend_from_slice(&signature); return Some(message); }