diff --git a/src/client.rs b/src/client.rs index d628955..003e89a 100644 --- a/src/client.rs +++ b/src/client.rs @@ -46,15 +46,6 @@ pub async fn client_mode(client_config: ClientConfiguration, fd: i32, env: &JNIE let cipher_shared: Arc>> = Arc::new(Mutex::new(None)); - let m_env = Arc::new(Mutex::new(env)); - tokio::spawn(async move { - while let Ok(bytes) = lrx.recv() { - let d_env = m_env.lock().await; - FridaLib::traceFromNative(&d_env, String::from_utf8_lossy(&bytes).to_string()); - drop(d_env); - } - }); - tokio::spawn(async move { while let Ok(bytes) = rx.recv() { ltx.send("Write to tun.".as_bytes().to_vec()); @@ -131,24 +122,30 @@ pub async fn client_mode(client_config: ClientConfiguration, fd: i32, env: &JNIE let s_cipher = cipher_shared.clone(); loop { - if let Ok(bytes) = mx.recv() { - let s_c = s_cipher.lock().await; - - if s_c.is_some() { - let aes = Aes256Gcm::new(s_c.as_ref().unwrap().as_bytes().into()); - let nonce = Aes256Gcm::generate_nonce(&mut OsRng); - let ciphered_data = aes.encrypt(&nonce, &bytes[..]); + tokio::select! { + b = lrx.recv() => { + FridaLib::traceFromNative(&env, String::from_utf8_lossy(&b.unwrap()).to_string()); + } + b = mx.recv() => { + let bytes = b.unwrap(); + let s_c = s_cipher.lock().await; - if let Ok(ciphered_d) = ciphered_data { - let vpn_packet = UDPVpnPacket{ data: ciphered_d, nonce: nonce.to_vec()}; - let serialized_data = vpn_packet.serialize(); - ltx.send("Write to socket".as_bytes().to_vec()); - sock_snd.send(&serialized_data).await.unwrap(); + if s_c.is_some() { + let aes = Aes256Gcm::new(s_c.as_ref().unwrap().as_bytes().into()); + let nonce = Aes256Gcm::generate_nonce(&mut OsRng); + let ciphered_data = aes.encrypt(&nonce, &bytes[..]); + + if let Ok(ciphered_d) = ciphered_data { + let vpn_packet = UDPVpnPacket{ data: ciphered_d, nonce: nonce.to_vec()}; + let serialized_data = vpn_packet.serialize(); + ltx.send("Write to socket".as_bytes().to_vec()); + sock_snd.send(&serialized_data).await.unwrap(); + } else { + ltx.send("Socket encryption failed.".as_bytes().to_vec()); + } } else { - ltx.send("Socket encryption failed.".as_bytes().to_vec()); + ltx.send("There is no shared_secret in main loop".as_bytes().to_vec()); } - } else { - ltx.send("There is no shared_secret in main loop".as_bytes().to_vec()); } } }