modified: src/client.rs

This commit is contained in:
Michael Wain 2024-11-22 17:12:05 +03:00
parent a819b20391
commit 92c29bb026

View File

@ -14,18 +14,20 @@ pub mod general {
use x25519_dalek::{PublicKey, StaticSecret}; use x25519_dalek::{PublicKey, StaticSecret};
use crate::udp::{UDPVpnPacket, UDPVpnHandshake, UDPSerializable}; use crate::udp::{UDPVpnPacket, UDPVpnHandshake, UDPSerializable};
use tun::{ DeviceReader, DeviceWriter };
pub trait ReadWrapper { pub trait ReadWrapper {
async fn read(&mut self, buf: &mut [u8]) -> Result<usize, ()>; async fn read(&mut self, buf: &mut [u8]) -> Result<usize, ()>;
} }
pub struct DevReader<R> where R: Read { pub struct DevReader {
pub dr: R pub dr: DeviceReader
} }
// TODO: implement custom Error // TODO: implement custom Error
impl<R: Read> ReadWrapper for DevReader<R> { impl ReadWrapper for DevReader {
async fn read(&mut self, buf: &mut [u8]) -> Result<usize, ()> { async fn read(&mut self, buf: &mut [u8]) -> Result<usize, ()> {
if let Ok(a) = self.dr.read(buf) { if let Ok(a) = self.dr.read(buf).await {
return Ok(a); return Ok(a);
} }
Err(()) Err(())
@ -55,17 +57,17 @@ pub mod general {
Gateway(Ipv4Addr) Gateway(Ipv4Addr)
} }
pub struct DevWriter<W> where W: Write { pub struct DevWriter {
pub dr: W, pub dr: DeviceWriter,
//pub dev: AsyncDevice //pub dev: AsyncDevice
} }
// TODO: implement custom Error // TODO: implement custom Error
impl<W: Write> WriteWrapper for DevWriter<W> { impl WriteWrapper for DevWriter {
async fn write(&mut self, msg: WriterMessage) -> Result<usize, ()> { async fn write(&mut self, msg: WriterMessage) -> Result<usize, ()> {
match msg { match msg {
WriterMessage::Plain(buf) => { WriterMessage::Plain(buf) => {
if let Ok(a) = self.dr.write(&buf) { if let Ok(a) = self.dr.write(&buf).await {
return Ok(a); return Ok(a);
} }
Err(()) Err(())
@ -272,10 +274,11 @@ pub mod desktop {
use crate::config::ClientConfiguration; use crate::config::ClientConfiguration;
use log::info; use log::info;
use tokio::net::UdpSocket; use tokio::net::UdpSocket;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
use network_interface::{NetworkInterface, NetworkInterfaceConfig}; use network_interface::{NetworkInterface, NetworkInterfaceConfig};
use tun::{ Configuration, create }; use tun::{ Configuration, create_as_async };
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
@ -361,9 +364,10 @@ pub mod desktop {
sock.connect(&self.client_config.server.endpoint).await.unwrap(); sock.connect(&self.client_config.server.endpoint).await.unwrap();
info!("AsyncDevice"); info!("AsyncDevice");
let dev = create(&config).unwrap(); let dev = create_as_async(&config).unwrap();
info!("Split device"); info!("Split device");
let (dev_reader, dev_writer) = dev.split(); let dr = dev.split();
let (dev_writer, dev_reader) = dr.unwrap();
info!("CoreVpnClient"); info!("CoreVpnClient");
let mut client = CoreVpnClient{ client_config: self.client_config.clone(), dev_reader: DevReader{ dr: dev_reader }, dev_writer: DevWriter{dr: dev_writer}, close_token: tokio_util::sync::CancellationToken::new()}; let mut client = CoreVpnClient{ client_config: self.client_config.clone(), dev_reader: DevReader{ dr: dev_reader }, dev_writer: DevWriter{dr: dev_writer}, close_token: tokio_util::sync::CancellationToken::new()};