replace temp solution with Arc<T>
This commit is contained in:
parent
34cf303964
commit
2349a74985
2092
Cargo.lock
generated
2092
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "contego"
|
||||
description = "GUI tool for secure file transfer"
|
||||
description = "Dynamic CLI tool for secure file transfer"
|
||||
version = "0.3.0"
|
||||
edition = "2021"
|
||||
|
||||
@ -8,14 +8,13 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
tokio = { version = "1.20.4", features = ["full"] }
|
||||
local-ip-address = "0.4.4"
|
||||
rand = "0.7.0"
|
||||
eframe = "0.21.3"
|
||||
egui = "0.21.0"
|
||||
x25519-dalek = "1.2.0"
|
||||
aes-gcm = "0.10.1"
|
||||
base64 = "0.21.0"
|
||||
sha256 = "1.1.2"
|
||||
inquire = "0.6.1"
|
||||
ureq = "2.6.2"
|
||||
|
||||
[dev-dependencies]
|
||||
tokio-test = "0.4.2"
|
||||
|
@ -23,6 +23,7 @@ pub enum Message {
|
||||
ConnectionReady,
|
||||
Shutdown,
|
||||
}
|
||||
|
||||
pub struct Connection<'a> {
|
||||
pub reader: BufReader<ReadHalf<'a>>,
|
||||
pub writer: BufWriter<WriteHalf<'a>>,
|
||||
|
@ -27,12 +27,12 @@ impl Request {
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Connector {
|
||||
target_addr: SocketAddr,
|
||||
access_key: &'static str,
|
||||
access_key: String,
|
||||
output_path: PathBuf,
|
||||
}
|
||||
|
||||
impl Connector {
|
||||
pub fn new(target_addr: SocketAddr, access_key: &'static str, output_path: PathBuf) -> Self {
|
||||
pub fn new(target_addr: SocketAddr, access_key: String, output_path: PathBuf) -> Self {
|
||||
Self {
|
||||
target_addr,
|
||||
access_key,
|
||||
|
@ -2,7 +2,9 @@ use crate::{
|
||||
common::{Connection, Message},
|
||||
comms, crypto,
|
||||
};
|
||||
use std::{collections::HashMap, error::Error, net::SocketAddr, path::PathBuf, str::FromStr};
|
||||
use std::{
|
||||
collections::HashMap, error::Error, net::SocketAddr, path::PathBuf, str::FromStr, sync::Arc,
|
||||
};
|
||||
use tokio::{
|
||||
fs::File,
|
||||
io::AsyncReadExt,
|
||||
@ -10,17 +12,17 @@ use tokio::{
|
||||
sync::mpsc,
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Listener {
|
||||
host_addr: SocketAddr,
|
||||
access_key: &'static str,
|
||||
access_key: String,
|
||||
chunksize: usize,
|
||||
}
|
||||
|
||||
// TODO: impl Drop (?)
|
||||
|
||||
impl Listener {
|
||||
pub fn new(host_addr: SocketAddr, access_key: &'static str, chunksize: usize) -> Self {
|
||||
pub fn new(host_addr: SocketAddr, access_key: String, chunksize: usize) -> Self {
|
||||
Self {
|
||||
host_addr,
|
||||
access_key,
|
||||
@ -29,7 +31,7 @@ impl Listener {
|
||||
}
|
||||
|
||||
pub async fn start(
|
||||
self,
|
||||
self: Arc<Self>,
|
||||
tx: mpsc::Sender<Message>,
|
||||
mut kill: mpsc::Receiver<Message>,
|
||||
files: Vec<String>,
|
||||
@ -41,7 +43,7 @@ impl Listener {
|
||||
}
|
||||
|
||||
async fn listen(
|
||||
self,
|
||||
self: Arc<Self>,
|
||||
tx: mpsc::Sender<Message>,
|
||||
files: Vec<String>,
|
||||
) -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
@ -52,9 +54,12 @@ impl Listener {
|
||||
let (mut socket, addr) = listener.accept().await?;
|
||||
tx.send(Message::ClientConnect(addr)).await?;
|
||||
let this_tx = tx.clone();
|
||||
let this_self = Arc::clone(&self);
|
||||
|
||||
tokio::spawn(async move {
|
||||
self.connection(&mut socket, addr, this_tx, &files).await?;
|
||||
this_self
|
||||
.connection(&mut socket, addr, this_tx, &files)
|
||||
.await?;
|
||||
Ok::<(), Box<dyn Error + Send + Sync>>(())
|
||||
});
|
||||
}
|
||||
@ -120,7 +125,7 @@ impl Listener {
|
||||
let mut index = HashMap::new();
|
||||
|
||||
for path in files {
|
||||
let split: Vec<&str> = path.split('/').collect(); // TODO: different path delimiters?
|
||||
let split: Vec<&str> = path.split('/').collect();
|
||||
let name = split[split.len() - 1].to_string();
|
||||
let handle = File::open(PathBuf::from_str(path)?).await?;
|
||||
let size = handle.metadata().await?.len();
|
||||
|
@ -6,6 +6,7 @@ use std::{
|
||||
io::{BufWriter, Write},
|
||||
net::SocketAddr,
|
||||
path::PathBuf,
|
||||
sync::Arc,
|
||||
thread,
|
||||
};
|
||||
use tokio::sync::mpsc;
|
||||
@ -39,8 +40,8 @@ fn filesync_signals() {
|
||||
let (client_tx, mut local_client_rx) = mpsc::channel::<Message>(10);
|
||||
|
||||
let server_handle = thread::spawn(move || {
|
||||
let listener = Listener::new(server_addr, "xyz", 8192usize);
|
||||
block_on(listener.start(server_tx, server_rx, paths)).unwrap();
|
||||
let listener = Listener::new(server_addr, String::from("xyz"), 8192usize);
|
||||
block_on(Arc::new(listener).start(server_tx, server_rx, paths)).unwrap();
|
||||
});
|
||||
|
||||
let server_channel_handle = thread::spawn(move || {
|
||||
@ -52,7 +53,7 @@ fn filesync_signals() {
|
||||
|
||||
let client_handle = thread::spawn(move || {
|
||||
let output_path = output_path.clone();
|
||||
let connector = Connector::new(server_addr, "xyz", output_path);
|
||||
let connector = Connector::new(server_addr, String::from("xyz"), output_path);
|
||||
block_on(connector.connect(client_tx, client_rx)).unwrap()
|
||||
});
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user