nat_transversal #3
@@ -19,7 +19,10 @@ use crate::{
|
|||||||
registration::{parse_addresses, perform_handshake, register_with_the_server},
|
registration::{parse_addresses, perform_handshake, 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},
|
||||||
@@ -35,6 +38,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(
|
||||||
@@ -362,10 +366,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(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -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
|
/// sends a get request to the server to get the socket address of the given peer
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user