bigfix #5
@@ -240,6 +240,7 @@ impl eframe::App for P2PClientApp {
|
||||
if let Some(addr) = &self.active_peer {
|
||||
if let Some(roottree) = self.loaded_fs.get(addr) {
|
||||
if let Some(root) = roottree.data.get(&hash) {
|
||||
self.current_downloading_file_map.root = hash;
|
||||
self.root_downloading_file = name;
|
||||
let _ = self
|
||||
.current_downloading_file_map
|
||||
@@ -278,6 +279,34 @@ impl eframe::App for P2PClientApp {
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
println!("remaining chunks size: {}", self.remaining_chunks.len());
|
||||
if self.remaining_chunks.is_empty() {
|
||||
let file = OpenOptions::new().append(true).create(true).open(
|
||||
"./Download/".to_string()
|
||||
+ &remove_null_bytes(&self.root_downloading_file.clone()),
|
||||
);
|
||||
|
||||
if let Some(current) = self
|
||||
.current_downloading_file_map
|
||||
.data
|
||||
.get(&self.current_downloading_file_map.root)
|
||||
{
|
||||
match file {
|
||||
Ok(mut fileok) => {
|
||||
big_or_chunk_to_file(
|
||||
&self.current_downloading_file_map,
|
||||
current,
|
||||
&mut fileok,
|
||||
);
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("error creaation file: {}", e);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
eprintln!("error root absent");
|
||||
}
|
||||
println!("bigfile téléchargé {}", self.root_downloading_file);
|
||||
|
||||
if let Some(total) = self.current_total_chunks {
|
||||
// recompute received (safer than incrementing)
|
||||
@@ -291,6 +320,7 @@ impl eframe::App for P2PClientApp {
|
||||
println!("bigfile téléchargé");
|
||||
}
|
||||
}
|
||||
}
|
||||
NetworkEvent::Success(msg, peer_username) => {
|
||||
self.loading_peers.retain(|s| s != peer_username.as_str());
|
||||
self.show_success(msg, peer_username);
|
||||
|
||||
@@ -473,8 +473,15 @@ pub fn big_or_chunk_to_file(tree: &MerkleTree, node: &MerkleNode, file: &mut Fil
|
||||
}
|
||||
}
|
||||
MerkleNode::Chunk(chunk) => {
|
||||
println!("wrote data");
|
||||
let _ = file.write_all(&chunk.data);
|
||||
if !chunk.data.is_empty() {
|
||||
// Enlève le premier élément
|
||||
let mut data = chunk.data.clone(); // Clone pour éviter de modifier l'original
|
||||
data.remove(0); // Enlève le premier élément
|
||||
println!("wrote data {:?}", data);
|
||||
let _ = file.write(&data);
|
||||
} else {
|
||||
println!("chunk.data is empty, nothing to write");
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
println!("invalid type of file");
|
||||
|
||||
@@ -11,9 +11,27 @@ pub fn parse_received_datum(
|
||||
datum_length: usize,
|
||||
) -> Option<([u8; 32], MerkleNode)> {
|
||||
let hash_name: [u8; 32] = recevied_datum[..32].try_into().expect("error");
|
||||
let value = &recevied_datum[32..recevied_datum.len()];
|
||||
let value = &recevied_datum[32..datum_length];
|
||||
let value_slice = value.to_vec();
|
||||
println!("valueslice: {:?}, {}", value_slice, value_slice.len());
|
||||
|
||||
println!(
|
||||
"((value_slice.len() - 1) / 32) {} ",
|
||||
((value_slice.len() - 1) / 32)
|
||||
);
|
||||
// Créer une instance de Sha256
|
||||
let mut hasher = Sha256::new();
|
||||
|
||||
// Alimenter le hasher avec les données
|
||||
hasher.update(value_slice.clone());
|
||||
|
||||
// Obtention du résultat
|
||||
let result = hasher.finalize();
|
||||
if result.to_vec() != hash_name.to_vec() {
|
||||
println!("{:?},{:?}", result.to_vec(), hash_name.to_vec());
|
||||
None
|
||||
} else {
|
||||
println!("hashes equals!");
|
||||
let datum_type = value_slice[0];
|
||||
match datum_type {
|
||||
CHUNK => Some((
|
||||
@@ -91,4 +109,5 @@ pub fn parse_received_datum(
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ impl P2PSharedData {
|
||||
|
||||
let mut threads = Vec::new();
|
||||
|
||||
let senders = MultipleSenders::new(1, &shared_socket, cmd_tx, &mut threads);
|
||||
let senders = MultipleSenders::new(5, &shared_socket, cmd_tx, &mut threads);
|
||||
let shared_senders = Arc::new(senders);
|
||||
let server_name = Arc::new(Mutex::new("".to_string()));
|
||||
let server_address = Arc::new(Mutex::new("".to_string()));
|
||||
|
||||
@@ -370,14 +370,11 @@ pub fn parse_message(
|
||||
// envoyer la root request
|
||||
let _ = &guard.remove_entry(&id);
|
||||
println!("message {} retiré de la liste", id);
|
||||
|
||||
let rootrequest = construct_message(
|
||||
ROOTREQUEST,
|
||||
Vec::new(),
|
||||
generate_id(),
|
||||
crypto_pair,
|
||||
);
|
||||
//&guard.insert(, v)
|
||||
let new_id = generate_id();
|
||||
let rootrequest =
|
||||
construct_message(ROOTREQUEST, Vec::new(), new_id, crypto_pair);
|
||||
let _ = &guard.insert(new_id, EventType::RootRequest);
|
||||
println!("root requesst sent");
|
||||
return rootrequest;
|
||||
}
|
||||
EventType::Hello => {
|
||||
@@ -392,6 +389,7 @@ pub fn parse_message(
|
||||
}
|
||||
ROOTREPLY => {
|
||||
// recuperer le pseudo du peers ayant repondu
|
||||
println!("root reply received");
|
||||
let peers_exist = handhsake_history.get_peer_info_ip(ip.to_string());
|
||||
match peers_exist {
|
||||
Some(peerinfo) => {
|
||||
@@ -429,7 +427,9 @@ pub fn parse_message(
|
||||
constructed_message = datumreqest;
|
||||
guard.insert(new_id, EventType::DatumRequest);
|
||||
}
|
||||
_ => {}
|
||||
_ => {
|
||||
println!("event not prensent");
|
||||
}
|
||||
}
|
||||
}
|
||||
None => {}
|
||||
@@ -468,7 +468,6 @@ pub fn parse_message(
|
||||
}
|
||||
}
|
||||
EventType::DatumRequestBig => {
|
||||
let _ = &guard.remove_entry(&id);
|
||||
println!("message {} retiré de la liste", id);
|
||||
let received_length = u16::from_be_bytes(
|
||||
received_message[TYPE..LENGTH]
|
||||
@@ -481,6 +480,7 @@ pub fn parse_message(
|
||||
parse_received_datum(received_datum.to_vec(), received_length as usize);
|
||||
match parsed_node {
|
||||
Some(tuple) => {
|
||||
let _ = &guard.remove_entry(&id);
|
||||
let _ = cmd_tx.send(NetworkEvent::DataReceived(
|
||||
tuple.0,
|
||||
tuple.1,
|
||||
@@ -488,7 +488,9 @@ pub fn parse_message(
|
||||
));
|
||||
println!("datareceived event sent");
|
||||
}
|
||||
None => {}
|
||||
None => {
|
||||
println!("message corrompu, nouvelle tentative");
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
|
||||
@@ -234,7 +234,8 @@ pub fn start_retry_thread(
|
||||
);
|
||||
let base: u64 = 2;
|
||||
|
||||
let backoff = base.saturating_pow(attempt as u32); // 2^1 == 2 seconds
|
||||
// let backoff = base.saturating_pow(attempt as u32); // 2^1 == 2 seconds
|
||||
let backoff = 1;
|
||||
let newretry = RetryMessage {
|
||||
next_try: SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
@@ -272,7 +273,7 @@ pub fn start_receving_thread(
|
||||
let messages_received_clone = shared_data.messages_received();
|
||||
let servername_clone = shared_data.servername();
|
||||
let thread = thread::spawn(move || {
|
||||
let mut buf = [0u8; 1024];
|
||||
let mut buf = [0u8; 1500];
|
||||
loop {
|
||||
match sock_clone.recv_from(&mut buf) {
|
||||
Ok((amt, src)) => {
|
||||
|
||||
@@ -51,6 +51,7 @@ pub fn parse_addresses(input: &String) -> Vec<SocketAddr> {
|
||||
///
|
||||
/// registers the IP addresses by sending a Hello request to the server.
|
||||
///
|
||||
|
||||
pub async fn perform_handshake(
|
||||
sd: &P2PSharedData,
|
||||
username: String,
|
||||
@@ -139,36 +140,3 @@ pub async fn perform_handshake(
|
||||
//TODO
|
||||
return true;
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
/*///
|
||||
/// does the procedure to register with the server
|
||||
///
|
||||
#[tokio::test]
|
||||
async fn registering_with_server() {
|
||||
let username = String::from("gameixtreize");
|
||||
let server_uri = String::from("https://jch.irif.fr:8443");
|
||||
let crypto_pair = CryptographicSignature::new(username);
|
||||
if let Err(e) = register_with_the_server(crypto_pair, server_uri).await {
|
||||
eprintln!("Error during registration: {}", e);
|
||||
}
|
||||
}*/
|
||||
|
||||
/*///
|
||||
/// retreives the socket address of a given peer
|
||||
///
|
||||
#[tokio::test]
|
||||
async fn retreive_socket_addr() {
|
||||
let username = String::from("ipjkndqfshjldfsjlbsdfjhhj");
|
||||
match get_socket_address(username).await {
|
||||
Ok(body) => {
|
||||
println!("{:?}", body);
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("Erreur HTTP: {}", e);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user