update
This commit is contained in:
@@ -16,7 +16,10 @@ use crate::{
|
||||
registration::{parse_addresses, register_ip_addresses, 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},
|
||||
@@ -31,6 +34,7 @@ pub struct P2PSharedData {
|
||||
}
|
||||
|
||||
use bytes::Bytes;
|
||||
use p256::pkcs8::der::pem::Base64Encoder;
|
||||
|
||||
impl P2PSharedData {
|
||||
pub fn new(
|
||||
@@ -319,10 +323,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(),
|
||||
);
|
||||
|
||||
@@ -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
|
||||
///
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user