diff --git a/src/main.rs b/src/main.rs index 9eee371..fc677e5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,7 @@ use serde_derive::Deserialize; //mod server; mod tcp_client; mod tcp_server; +mod util; #[derive(Serialize, Deserialize)] struct VpnPacket { diff --git a/src/tcp_client.rs b/src/tcp_client.rs index eac6a6a..df1fba4 100644 --- a/src/tcp_client.rs +++ b/src/tcp_client.rs @@ -11,6 +11,8 @@ use std::collections::HashMap; use std::process::Command; use tokio::io::AsyncReadExt; +use crate::VpnPacket; + fn configure_routes() { let ip_output = Command::new("ip") .arg("addr") @@ -101,14 +103,17 @@ pub async fn client_mode(remote_addr: String) { let mut buf = vec![0; 2048]; loop { if let Ok(n) = sock_reader.read(&mut buf).await { - tx.send(buf[..n].to_vec()).unwrap(); + let vpn_packet: VpnPacket = bincode::deserialize(&buf[..n]).unwrap(); + tx.send(vpn_packet.data).unwrap(); } } }); loop { if let Ok(bytes) = mx.recv() { - sock_writer.write(&bytes).await.unwrap(); + let vpn_packet = VpnPacket{ data: bytes }; + let serialized_data = bincode::serialize(&vpn_packet).unwrap(); + sock_writer.write(&serialized_data).await.unwrap(); info!("Wrote to sock"); } } diff --git a/src/tcp_server.rs b/src/tcp_server.rs index 18c17e8..b10c020 100644 --- a/src/tcp_server.rs +++ b/src/tcp_server.rs @@ -10,6 +10,8 @@ use std::net::SocketAddr; use std::collections::HashMap; use tokio::io::AsyncReadExt; +use crate::VpnPacket; + pub async fn server_mode() { info!("Starting server..."); @@ -54,7 +56,9 @@ pub async fn server_mode() { tokio::spawn(async move { loop { if let Ok(bytes) = thread_mx.recv() { - sock_writer.write(&bytes).await.unwrap(); + let vpn_packet = VpnPacket{ data: bytes }; + let serialized_data = bincode::serialize(&vpn_packet).unwrap(); + sock_writer.write_all(&serialized_data).await.unwrap(); info!("Wrote to sock"); } } @@ -64,7 +68,8 @@ pub async fn server_mode() { let mut buf = vec![0; 2048]; loop { if let Ok(n) = sock_reader.read(&mut buf).await { - thread_tx.send(buf[..n].to_vec()).unwrap(); + let vpn_packet: VpnPacket = bincode::deserialize(&buf[..n]).unwrap(); + thread_tx.send(vpn_packet.data).unwrap(); } } }); diff --git a/src/util.rs b/src/util.rs new file mode 100644 index 0000000..36d4887 --- /dev/null +++ b/src/util.rs @@ -0,0 +1,7 @@ +use serde_derive::Serialize; +use serde_derive::Deserialize; + +#[derive(Serialize, Deserialize)] +struct VpnPacket { + data: Vec, +} \ No newline at end of file