[feature] better socket address fetching logic
This commit is contained in:
@@ -340,9 +340,53 @@ pub fn start_p2p_executor(
|
||||
sd.messages_list(),
|
||||
sd.handshake_peers.get_username_peerinfo_map(),
|
||||
);
|
||||
let server_address = {
|
||||
match get_server_address(username.to_owned(), ip.to_owned()).await {
|
||||
Some(addr) => addr.to_string(),
|
||||
None => {
|
||||
match event_tx.send(NetworkEvent::Error(
|
||||
"Couldn't fetch server socket address.".to_owned(),
|
||||
username.to_owned(),
|
||||
)) {
|
||||
Ok(_) => {}
|
||||
Err(e) => {
|
||||
println!("Network Event Error : {}", e.to_string());
|
||||
}
|
||||
}
|
||||
"".to_owned()
|
||||
}
|
||||
}
|
||||
};
|
||||
if server_address.to_owned().eq(&"".to_owned()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let res =
|
||||
perform_handshake(&sd, username, ip, event_tx.clone(), true).await;
|
||||
sd.set_servername(username.to_owned());
|
||||
sd.set_serveraddress(server_address.to_string());
|
||||
println!("SET SERVERADDRESS");
|
||||
|
||||
match perform_handshake(
|
||||
&sd,
|
||||
username.to_owned(),
|
||||
ip,
|
||||
event_tx.clone(),
|
||||
(true, server_address.to_string()),
|
||||
)
|
||||
.await
|
||||
{
|
||||
true => {
|
||||
match event_tx.send(NetworkEvent::Success(
|
||||
"Handshake established ✔️".to_string(),
|
||||
username.to_owned(),
|
||||
)) {
|
||||
Ok(_) => {}
|
||||
Err(err) => {
|
||||
println!("Network Event Error : {}", err.to_string());
|
||||
}
|
||||
};
|
||||
}
|
||||
false => {}
|
||||
};
|
||||
} else {
|
||||
println!("no shared data");
|
||||
}
|
||||
@@ -360,7 +404,9 @@ pub fn start_p2p_executor(
|
||||
NetworkCommand::Discover(username, hash, ip) => {
|
||||
// envoie un handshake au peer, puis un root request
|
||||
if let Some(sd) = shared_data.as_ref() {
|
||||
let res = sd.handshake_peers.get_peer_info_username(username.clone());
|
||||
let res = sd
|
||||
.handshake_peers
|
||||
.get_peer_info_username(username.to_owned());
|
||||
match res {
|
||||
Some(peerinfo) => {
|
||||
let id = generate_id();
|
||||
@@ -395,14 +441,31 @@ pub fn start_p2p_executor(
|
||||
}
|
||||
None => {
|
||||
// envoyer un handshake
|
||||
let res = perform_handshake(
|
||||
match perform_handshake(
|
||||
&sd,
|
||||
username,
|
||||
username.to_owned(),
|
||||
ip,
|
||||
event_tx.clone(),
|
||||
false,
|
||||
(false, "".to_string()),
|
||||
)
|
||||
.await;
|
||||
.await
|
||||
{
|
||||
true => {
|
||||
match event_tx.send(NetworkEvent::Success(
|
||||
"Handshake established ✔️".to_string(),
|
||||
username.to_owned(),
|
||||
)) {
|
||||
Ok(_) => {}
|
||||
Err(err) => {
|
||||
println!(
|
||||
"Network Event Error : {}",
|
||||
err.to_string()
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
false => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -756,7 +819,16 @@ pub async fn get_socket_address(
|
||||
}
|
||||
};
|
||||
|
||||
let addresses = parse_addresses(&s); // assumes parse_addresses: &str -> Vec<SocketAddr>
|
||||
let addresses: Vec<SocketAddr> = {
|
||||
let temp = parse_addresses(&s);
|
||||
temp.iter()
|
||||
.filter_map(|a| match a {
|
||||
SocketAddr::V4(_) => Some(*a),
|
||||
SocketAddr::V6(_) => None,
|
||||
})
|
||||
.collect()
|
||||
};
|
||||
|
||||
if addresses.is_empty() {
|
||||
return Err(FetchSocketAddressError::NoRegisteredAddresses);
|
||||
} else if !addresses.iter().any(|a| matches!(a, SocketAddr::V4(_))) {
|
||||
|
||||
Reference in New Issue
Block a user