wip handling root request
This commit is contained in:
@@ -12,8 +12,10 @@ use crate::{
|
||||
cryptographic_signature::CryptographicSignature,
|
||||
message_handling::EventType,
|
||||
messages_channels::{MultipleSenders, start_receving_thread},
|
||||
messages_structure::construct_message,
|
||||
peers_refresh::HandshakeHistory,
|
||||
registration::{
|
||||
get_socket_address, parse_addresses, register_ip_addresses, register_with_the_server,
|
||||
get_socket_address, parse_addresses, perform_handshake, register_with_the_server,
|
||||
},
|
||||
server_communication::{generate_id, get_peer_list},
|
||||
};
|
||||
@@ -33,6 +35,7 @@ pub struct P2PSharedData {
|
||||
shared_messageslist: Arc<Mutex<HashMap<i32, EventType>>>,
|
||||
shared_senders: Arc<MultipleSenders>,
|
||||
server_name: Arc<Mutex<String>>,
|
||||
handshake_peers: Arc<HandshakeHistory>,
|
||||
}
|
||||
|
||||
impl P2PSharedData {
|
||||
@@ -51,12 +54,14 @@ impl P2PSharedData {
|
||||
let senders = MultipleSenders::new(1, &shared_socket, cmd_tx);
|
||||
let shared_senders = Arc::new(senders);
|
||||
let server_name = Arc::new(Mutex::new("".to_string()));
|
||||
let handhsake_peers = Arc::new(HandshakeHistory::new());
|
||||
Ok(P2PSharedData {
|
||||
shared_socket: shared_socket,
|
||||
shared_cryptopair: shared_cryptopair,
|
||||
shared_messageslist: shared_messageslist,
|
||||
shared_senders: shared_senders,
|
||||
server_name: server_name,
|
||||
handshake_peers: handhsake_peers,
|
||||
})
|
||||
}
|
||||
pub fn socket(&self) -> Arc<UdpSocket> {
|
||||
@@ -87,6 +92,9 @@ impl P2PSharedData {
|
||||
pub fn cryptopair_ref(&self) -> &CryptographicSignature {
|
||||
&*self.shared_cryptopair
|
||||
}
|
||||
pub fn handshake_ref(&self) -> &HandshakeHistory {
|
||||
&*self.handshake_peers
|
||||
}
|
||||
|
||||
pub fn messages_list_ref(&self) -> &Mutex<HashMap<i32, EventType>> {
|
||||
&*self.shared_messageslist
|
||||
@@ -115,6 +123,8 @@ pub enum NetworkCommand {
|
||||
RequestChunk(String, String),
|
||||
Disconnect(),
|
||||
ResetServerPeer(),
|
||||
Discover(String, String),
|
||||
GetChildren(String, String),
|
||||
// ...
|
||||
}
|
||||
|
||||
@@ -173,61 +183,11 @@ pub fn start_p2p_executor(
|
||||
match cmd {
|
||||
NetworkCommand::ServerHandshake(username, ip) => {
|
||||
if let Some(sd) = shared_data.as_ref() {
|
||||
println!("username:{}, ip:{}", username, ip);
|
||||
let server_addr_query = get_socket_address(username.clone(), ip);
|
||||
|
||||
match server_addr_query.await {
|
||||
Ok(sockaddr_bytes) => {
|
||||
match String::from_utf8(sockaddr_bytes.to_vec()) {
|
||||
Ok(s) => {
|
||||
let addresses = parse_addresses(&s);
|
||||
if let Some(first) = addresses.first() {
|
||||
sd.set_servername(username);
|
||||
// first: &SocketAddr
|
||||
start_receving_thread(
|
||||
sd,
|
||||
*first, // copie le SocketAddr (implémente Copy pour SocketAddr)
|
||||
event_tx.clone(), //
|
||||
);
|
||||
register_ip_addresses(
|
||||
sd.cryptopair_ref(),
|
||||
first.to_string(),
|
||||
sd.senders_ref(),
|
||||
sd.messages_list_ref(),
|
||||
generate_id(),
|
||||
);
|
||||
|
||||
//let res = event_tx
|
||||
// .send(NetworkEvent::());
|
||||
} else {
|
||||
//let res = event_tx.send(NetworkEvent::Error());
|
||||
let err_msg = format!(
|
||||
"no valid socket addresses found in: {}",
|
||||
s
|
||||
)
|
||||
.to_string();
|
||||
let res =
|
||||
event_tx.send(NetworkEvent::Error(err_msg));
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
//let res = event_tx.send(NetworkEvent::Error());
|
||||
let err_msg = format!(
|
||||
"invalid UTF-8 in socket address bytes: {}",
|
||||
e
|
||||
)
|
||||
.to_string();
|
||||
let res = event_tx.send(NetworkEvent::Error(err_msg));
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
let err_msg =
|
||||
format!("failed to retreive socket address: {}", e)
|
||||
.to_string();
|
||||
let res = event_tx.send(NetworkEvent::Error(err_msg));
|
||||
}
|
||||
}
|
||||
start_receving_thread(
|
||||
sd,
|
||||
event_tx.clone(), //
|
||||
);
|
||||
perform_handshake(&sd, username, ip, event_tx.clone());
|
||||
}
|
||||
}
|
||||
NetworkCommand::ConnectPeer(addr) => {
|
||||
@@ -240,6 +200,12 @@ pub fn start_p2p_executor(
|
||||
NetworkCommand::RequestFileTree(_) => {
|
||||
println!("[Network] RequestFileTree() called");
|
||||
}
|
||||
NetworkCommand::Discover(username, hash) => {
|
||||
// envoie un handshake au peer, puis un root request
|
||||
}
|
||||
NetworkCommand::GetChildren(username, hash) => {
|
||||
// envoie un datum request au peer
|
||||
}
|
||||
NetworkCommand::RequestDirectoryContent(_, _) => {
|
||||
println!("[Network] RequestDirectoryContent() called");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user