wip nattraversal
This commit is contained in:
@@ -21,7 +21,7 @@ use crate::{
|
|||||||
};
|
};
|
||||||
use std::{
|
use std::{
|
||||||
io::Error,
|
io::Error,
|
||||||
net::{Ipv4Addr, UdpSocket},
|
net::{IpAddr, Ipv4Addr, UdpSocket},
|
||||||
};
|
};
|
||||||
use std::{
|
use std::{
|
||||||
net::SocketAddr,
|
net::SocketAddr,
|
||||||
@@ -366,15 +366,13 @@ 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 =
|
let payload = socket_addr_to_vec(server_addr);
|
||||||
parse_pack(peer_addr.clone().to_string().as_str())
|
|
||||||
.expect("couldnt create payload");
|
|
||||||
|
|
||||||
print!("{:?}", payload.clone());
|
print!("{:?}", payload.clone());
|
||||||
|
|
||||||
let natreq = construct_message(
|
let natreq = construct_message(
|
||||||
NATTRAVERSALREQUEST,
|
NATTRAVERSALREQUEST,
|
||||||
payload.clone().to_vec(),
|
server_addr.to_string().into_bytes(),
|
||||||
generate_id(),
|
generate_id(),
|
||||||
&sd.cryptopair(),
|
&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]> {
|
fn parse_pack(s: &str) -> Option<[u8; 6]> {
|
||||||
// split into "ip" and "port"
|
// split into "ip" and "port"
|
||||||
let mut parts = s.rsplitn(2, ':');
|
let mut parts = s.rsplitn(2, ':');
|
||||||
|
|||||||
@@ -290,8 +290,7 @@ pub fn parse_message(
|
|||||||
constructed_message = construct_message(OK, Vec::new(), id, crypto_pair);
|
constructed_message = construct_message(OK, Vec::new(), id, crypto_pair);
|
||||||
|
|
||||||
let ilength = u16::from_be_bytes(length_bytes);
|
let ilength = u16::from_be_bytes(length_bytes);
|
||||||
let received_address =
|
let received_address = &received_message[LENGTH..LENGTH + ilength as usize];
|
||||||
&received_message[LENGTH + EXTENSIONS..LENGTH + ilength as usize];
|
|
||||||
let address = String::from_utf8(received_address.to_vec()).expect("wrong name");
|
let address = String::from_utf8(received_address.to_vec()).expect("wrong name");
|
||||||
|
|
||||||
let pingreq = construct_message(PING, Vec::new(), id, crypto_pair);
|
let pingreq = construct_message(PING, Vec::new(), id, crypto_pair);
|
||||||
|
|||||||
@@ -53,10 +53,12 @@ pub fn construct_message(
|
|||||||
return Some(message);
|
return Some(message);
|
||||||
}
|
}
|
||||||
ROOTREPLY | NODATUM | DATUM | NATTRAVERSALREQUEST => {
|
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);
|
message.extend_from_slice(&payload);
|
||||||
//let signature = sign_message(crypto_pair, &message);
|
println!("payload:{:?}", &message);
|
||||||
//message.extend_from_slice(&signature);
|
let signature = sign_message(crypto_pair, &message);
|
||||||
|
message.extend_from_slice(&signature);
|
||||||
return Some(message);
|
return Some(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user