This commit moves some essential types to lib and fixes one clippy
warning: https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names
This commit is contained in:
B. Blechschmidt 2023-03-25 13:07:39 +01:00
parent e6e6c70006
commit 20dc6f78f1
7 changed files with 57 additions and 57 deletions

View file

@ -1,25 +1,25 @@
#[derive(thiserror::Error, Debug)] #[derive(thiserror::Error, Debug)]
pub enum Error { pub enum Error {
#[error("std::io::Error {0}")] #[error("std::io::Error {0}")]
IoError(#[from] std::io::Error), Io(#[from] std::io::Error),
#[error("std::net::AddrParseError {0}")] #[error("std::net::AddrParseError {0}")]
AddrParseError(#[from] std::net::AddrParseError), AddrParse(#[from] std::net::AddrParseError),
#[error("smoltcp::iface::RouteTableFull {0:?}")] #[error("smoltcp::iface::RouteTableFull {0:?}")]
RouteTableFull(#[from] smoltcp::iface::RouteTableFull), RouteTableFull(#[from] smoltcp::iface::RouteTableFull),
#[error("smoltcp::socket::tcp::RecvError {0:?}")] #[error("smoltcp::socket::tcp::RecvError {0:?}")]
RecvError(#[from] smoltcp::socket::tcp::RecvError), Recv(#[from] smoltcp::socket::tcp::RecvError),
#[error("smoltcp::socket::tcp::ListenError {0:?}")] #[error("smoltcp::socket::tcp::ListenError {0:?}")]
ListenError(#[from] smoltcp::socket::tcp::ListenError), Listen(#[from] smoltcp::socket::tcp::ListenError),
#[error("smoltcp::socket::udp::BindError {0:?}")] #[error("smoltcp::socket::udp::BindError {0:?}")]
BindError(#[from] smoltcp::socket::udp::BindError), Bind(#[from] smoltcp::socket::udp::BindError),
#[error("smoltcp::socket::tcp::SendError {0:?}")] #[error("smoltcp::socket::tcp::SendError {0:?}")]
SendError(#[from] smoltcp::socket::tcp::SendError), Send(#[from] smoltcp::socket::tcp::SendError),
#[error("&str {0}")] #[error("&str {0}")]
Str(String), Str(String),

View file

@ -1,8 +1,9 @@
use crate::error::Error; use crate::error::Error;
use crate::tun2proxy::{ use crate::tun2proxy::{
Connection, ConnectionManager, Credentials, IncomingDataEvent, IncomingDirection, Connection, ConnectionManager, IncomingDataEvent, IncomingDirection, OutgoingDataEvent,
OutgoingDataEvent, OutgoingDirection, TcpProxy, OutgoingDirection, TcpProxy,
}; };
use crate::Credentials;
use base64::Engine; use base64::Engine;
use smoltcp::wire::IpProtocol; use smoltcp::wire::IpProtocol;
use std::collections::VecDeque; use std::collections::VecDeque;
@ -161,7 +162,7 @@ impl TcpProxy for HttpConnection {
} }
} }
pub struct HttpManager { pub(crate) struct HttpManager {
server: SocketAddr, server: SocketAddr,
credentials: Option<Credentials>, credentials: Option<Credentials>,
} }

View file

@ -1,15 +1,14 @@
use crate::error::Error; use crate::error::Error;
use crate::socks5::SocksVersion; use crate::socks5::SocksVersion;
use crate::tun2proxy::{Credentials, Options};
use crate::{http::HttpManager, socks5::SocksManager, tun2proxy::TunToProxy}; use crate::{http::HttpManager, socks5::SocksManager, tun2proxy::TunToProxy};
use std::net::{SocketAddr, ToSocketAddrs}; use std::net::{SocketAddr, ToSocketAddrs};
pub mod error; mod error;
pub mod http; mod http;
pub mod socks5; mod socks5;
pub mod tun2proxy; mod tun2proxy;
pub mod virtdevice; mod virtdevice;
pub mod virtdns; mod virtdns;
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Proxy { pub struct Proxy {
@ -80,6 +79,37 @@ impl std::fmt::Display for ProxyType {
} }
} }
#[derive(Default)]
pub struct Options {
virtdns: Option<virtdns::VirtualDns>,
}
impl Options {
pub fn new() -> Self {
Default::default()
}
pub fn with_virtual_dns(mut self) -> Self {
self.virtdns = Some(virtdns::VirtualDns::new());
self
}
}
#[derive(Default, Clone, Debug)]
pub struct Credentials {
pub(crate) username: Vec<u8>,
pub(crate) password: Vec<u8>,
}
impl Credentials {
pub fn new(username: &str, password: &str) -> Self {
Self {
username: username.as_bytes().to_vec(),
password: password.as_bytes().to_vec(),
}
}
}
pub fn main_entry(tun: &str, proxy: Proxy, options: Options) -> Result<(), Error> { pub fn main_entry(tun: &str, proxy: Proxy, options: Options) -> Result<(), Error> {
let mut ttp = TunToProxy::new(tun, options)?; let mut ttp = TunToProxy::new(tun, options)?;
match proxy.proxy_type { match proxy.proxy_type {

View file

@ -1,7 +1,7 @@
use clap::Parser; use clap::Parser;
use env_logger::Env; use env_logger::Env;
use tun2proxy::tun2proxy::Options; use tun2proxy::Options;
use tun2proxy::{main_entry, Proxy}; use tun2proxy::{main_entry, Proxy};
/// Tunnel interface to proxy /// Tunnel interface to proxy

View file

@ -1,8 +1,9 @@
use crate::error::Error; use crate::error::Error;
use crate::tun2proxy::{ use crate::tun2proxy::{
Connection, ConnectionManager, Credentials, DestinationHost, IncomingDataEvent, Connection, ConnectionManager, DestinationHost, IncomingDataEvent, IncomingDirection,
IncomingDirection, OutgoingDataEvent, OutgoingDirection, TcpProxy, OutgoingDataEvent, OutgoingDirection, TcpProxy,
}; };
use crate::Credentials;
use smoltcp::wire::IpProtocol; use smoltcp::wire::IpProtocol;
use std::collections::VecDeque; use std::collections::VecDeque;
use std::net::{IpAddr, SocketAddr}; use std::net::{IpAddr, SocketAddr};

View file

@ -1,7 +1,6 @@
use crate::error::Error; use crate::error::Error;
use crate::tun2proxy::DestinationHost::Hostname;
use crate::virtdevice::VirtualTunDevice; use crate::virtdevice::VirtualTunDevice;
use crate::virtdns::VirtualDns; use crate::{Credentials, Options};
use log::{error, info}; use log::{error, info};
use mio::event::Event; use mio::event::Event;
use mio::net::TcpStream; use mio::net::TcpStream;
@ -22,7 +21,7 @@ use std::rc::Rc;
use std::str::FromStr; use std::str::FromStr;
#[derive(Hash, Clone, Eq, PartialEq)] #[derive(Hash, Clone, Eq, PartialEq)]
pub enum DestinationHost { pub(crate) enum DestinationHost {
Address(IpAddr), Address(IpAddr),
Hostname(String), Hostname(String),
} }
@ -31,7 +30,7 @@ impl std::fmt::Display for DestinationHost {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
DestinationHost::Address(addr) => addr.fmt(f), DestinationHost::Address(addr) => addr.fmt(f),
Hostname(name) => name.fmt(f), DestinationHost::Hostname(name) => name.fmt(f),
} }
} }
} }
@ -47,7 +46,7 @@ impl TryFrom<Destination> for SocketAddr {
fn try_from(value: Destination) -> Result<Self, Self::Error> { fn try_from(value: Destination) -> Result<Self, Self::Error> {
let ip = match value.host { let ip = match value.host {
DestinationHost::Address(addr) => addr, DestinationHost::Address(addr) => addr,
Hostname(e) => { DestinationHost::Hostname(e) => {
return Err(e.into()); return Err(e.into());
} }
}; };
@ -84,7 +83,7 @@ pub(crate) struct Connection {
impl Connection { impl Connection {
fn to_named(&self, name: String) -> Self { fn to_named(&self, name: String) -> Self {
let mut result = self.clone(); let mut result = self.clone();
result.dst.host = Hostname(name); result.dst.host = DestinationHost::Hostname(name);
result result
} }
} }
@ -215,21 +214,6 @@ struct ConnectionState {
smoltcp_socket_state: u8, smoltcp_socket_state: u8,
} }
#[derive(Default, Clone, Debug)]
pub struct Credentials {
pub(crate) username: Vec<u8>,
pub(crate) password: Vec<u8>,
}
impl Credentials {
pub fn new(username: &str, password: &str) -> Self {
Self {
username: username.as_bytes().to_vec(),
password: password.as_bytes().to_vec(),
}
}
}
pub(crate) trait TcpProxy { pub(crate) trait TcpProxy {
fn push_data(&mut self, event: IncomingDataEvent<'_>) -> Result<(), Error>; fn push_data(&mut self, event: IncomingDataEvent<'_>) -> Result<(), Error>;
fn consume_data(&mut self, dir: OutgoingDirection, size: usize); fn consume_data(&mut self, dir: OutgoingDirection, size: usize);
@ -249,21 +233,6 @@ pub(crate) trait ConnectionManager {
fn get_credentials(&self) -> &Option<Credentials>; fn get_credentials(&self) -> &Option<Credentials>;
} }
#[derive(Default)]
pub struct Options {
virtdns: Option<VirtualDns>,
}
impl Options {
pub fn new() -> Self {
Default::default()
}
pub fn with_virtual_dns(mut self) -> Self {
self.virtdns = Some(VirtualDns::new());
self
}
}
const TCP_TOKEN: Token = Token(0); const TCP_TOKEN: Token = Token(0);
const UDP_TOKEN: Token = Token(1); const UDP_TOKEN: Token = Token(1);

View file

@ -12,8 +12,7 @@ mod tests {
use nix::unistd::Pid; use nix::unistd::Pid;
use serial_test::serial; use serial_test::serial;
use tun2proxy::tun2proxy::Options; use tun2proxy::{main_entry, Options, Proxy, ProxyType};
use tun2proxy::{main_entry, Proxy, ProxyType};
static TUN_TEST_DEVICE: &str = "tun0"; static TUN_TEST_DEVICE: &str = "tun0";
static ALL_ROUTES: [&str; 4] = ["0.0.0.0/1", "128.0.0.0/1", "::/1", "8000::/1"]; static ALL_ROUTES: [&str; 4] = ["0.0.0.0/1", "128.0.0.0/1", "::/1", "8000::/1"];