wip nattraversal

This commit is contained in:
TIBERGHIEN corentin
2026-01-16 01:12:52 +01:00
parent 29c67e340c
commit 14fa256f9c
3 changed files with 18 additions and 10 deletions

View File

@@ -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<u8> {
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, ':');

View File

@@ -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);

View File

@@ -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);
}