nat_transversal #3

Merged
wikano merged 5 commits from nat_transversal into master 2026-01-16 10:20:02 +00:00
2 changed files with 31 additions and 5 deletions
Showing only changes of commit 29c67e340c - Show all commits

View File

@@ -19,7 +19,10 @@ use crate::{
registration::{parse_addresses, perform_handshake, 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},
@@ -35,6 +38,7 @@ pub struct P2PSharedData {
}
use bytes::Bytes;
use p256::pkcs8::der::pem::Base64Encoder;
impl P2PSharedData {
pub fn new(
@@ -362,10 +366,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(),
);
@@ -407,6 +417,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);
}