simplified common utils
This commit is contained in:
parent
a592528fee
commit
572c1e7468
@ -1,74 +0,0 @@
|
||||
use std::{collections::HashMap, error::Error, net::SocketAddr, path::PathBuf};
|
||||
|
||||
use aes_gcm::{aead::consts::U12, aes::Aes256, AesGcm};
|
||||
use rand::rngs::OsRng;
|
||||
use tokio::{
|
||||
io::{BufReader, BufWriter},
|
||||
net::{
|
||||
tcp::{ReadHalf, WriteHalf},
|
||||
TcpStream,
|
||||
},
|
||||
};
|
||||
|
||||
use crate::crypto;
|
||||
|
||||
const PUBLIC_IPV4: &str = "https://ipinfo.io/ip";
|
||||
const PUBLIC_IPV6: &str = "https://ipv6.icanhazip.com";
|
||||
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
pub enum Message {
|
||||
Error(String),
|
||||
Files(Vec<PathBuf>),
|
||||
Metadata(HashMap<String, (u64, String)>),
|
||||
ClientConnect(SocketAddr),
|
||||
ClientDisconnect(SocketAddr),
|
||||
ClientReq(String),
|
||||
ConnectionReady,
|
||||
Shutdown,
|
||||
}
|
||||
|
||||
pub struct Connection<'a> {
|
||||
pub reader: BufReader<ReadHalf<'a>>,
|
||||
pub writer: BufWriter<WriteHalf<'a>>,
|
||||
pub cipher: AesGcm<Aes256, U12>,
|
||||
pub rng: OsRng,
|
||||
}
|
||||
|
||||
impl<'a> Connection<'a> {
|
||||
pub async fn new(
|
||||
socket: &'a mut TcpStream,
|
||||
) -> Result<Connection<'a>, Box<dyn Error + Send + Sync>> {
|
||||
let (reader, writer) = socket.split();
|
||||
let mut reader = BufReader::new(reader);
|
||||
let mut writer = BufWriter::new(writer);
|
||||
let cipher = crypto::aes_cipher(&mut reader, &mut writer, true).await?;
|
||||
let rng = OsRng;
|
||||
|
||||
Ok(Self {
|
||||
reader,
|
||||
writer,
|
||||
cipher,
|
||||
rng,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq)]
|
||||
pub enum Ip {
|
||||
V4,
|
||||
V6,
|
||||
}
|
||||
|
||||
impl Ip {
|
||||
pub fn fetch(self) -> Result<SocketAddr, Box<dyn Error>> {
|
||||
let addr = match self {
|
||||
Ip::V4 => PUBLIC_IPV4,
|
||||
Ip::V6 => PUBLIC_IPV6,
|
||||
};
|
||||
|
||||
let res = ureq::get(addr).call()?.into_string()?;
|
||||
let addr: SocketAddr = res.trim().parse()?;
|
||||
|
||||
Ok(addr)
|
||||
}
|
||||
}
|
@ -1,8 +1,7 @@
|
||||
pub mod cli;
|
||||
pub mod common;
|
||||
pub mod connector;
|
||||
pub mod crypto;
|
||||
pub mod listener;
|
||||
pub mod parsers;
|
||||
pub mod parser;
|
||||
pub mod sockets;
|
||||
pub mod util;
|
||||
|
32
src/util.rs
32
src/util.rs
@ -1,6 +1,34 @@
|
||||
use std::{error::Error, fs, path::PathBuf};
|
||||
use std::{error::Error, fs, net::SocketAddr, path::PathBuf};
|
||||
|
||||
fn get_filepaths(
|
||||
const PUBLIC_IPV4: &str = "https://ipinfo.io/ip";
|
||||
const PUBLIC_IPV6: &str = "https://ipv6.icanhazip.com";
|
||||
|
||||
#[derive(PartialEq, Eq)]
|
||||
pub enum Ip {
|
||||
V4,
|
||||
V6,
|
||||
Local,
|
||||
}
|
||||
|
||||
impl Ip {
|
||||
pub fn fetch(self, port: u16) -> Result<SocketAddr, Box<dyn Error + Send + Sync>> {
|
||||
let addr = match self {
|
||||
Ip::V4 => PUBLIC_IPV4,
|
||||
Ip::V6 => PUBLIC_IPV6,
|
||||
Local => {
|
||||
let addr_str = format!("127.0.0.1:{}", port);
|
||||
return addr_str.parse::<SocketAddr>();
|
||||
}
|
||||
};
|
||||
|
||||
let res = format!("{}:{}", ureq::get(addr).call()?.into_string()?.trim(), port);
|
||||
let addr = res.parse::<SocketAddr>()?;
|
||||
|
||||
Ok(addr)
|
||||
}
|
||||
}
|
||||
|
||||
fn filepaths(
|
||||
infile: Option<PathBuf>,
|
||||
files: Option<Vec<PathBuf>>,
|
||||
) -> Result<Vec<PathBuf>, Box<dyn Error>> {
|
||||
|
Loading…
Reference in New Issue
Block a user