mirror of
https://github.com/tun2proxy/tun2proxy.git
synced 2025-04-23 23:39:10 +00:00
Refactor
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:
parent
e6e6c70006
commit
20dc6f78f1
7 changed files with 57 additions and 57 deletions
12
src/error.rs
12
src/error.rs
|
@ -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),
|
||||||
|
|
|
@ -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>,
|
||||||
}
|
}
|
||||||
|
|
44
src/lib.rs
44
src/lib.rs
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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"];
|
||||||
|
|
Loading…
Add table
Reference in a new issue