mirror of
https://github.com/tun2proxy/tun2proxy.git
synced 2025-05-14 05:52:48 +00:00
refactor FFI
This commit is contained in:
parent
8067394003
commit
8a67915388
9 changed files with 84 additions and 31 deletions
60
src/args.rs
60
src/args.rs
|
@ -81,9 +81,10 @@ impl Args {
|
|||
}
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, clap::ValueEnum)]
|
||||
pub enum ArgVerbosity {
|
||||
Off,
|
||||
Off = 0,
|
||||
Error,
|
||||
Warn,
|
||||
#[default]
|
||||
|
@ -92,6 +93,47 @@ pub enum ArgVerbosity {
|
|||
Trace,
|
||||
}
|
||||
|
||||
#[cfg(target_os = "android")]
|
||||
impl TryFrom<jni::sys::jint> for ArgVerbosity {
|
||||
type Error = Error;
|
||||
fn try_from(value: jni::sys::jint) -> Result<Self> {
|
||||
match value {
|
||||
0 => Ok(ArgVerbosity::Off),
|
||||
1 => Ok(ArgVerbosity::Error),
|
||||
2 => Ok(ArgVerbosity::Warn),
|
||||
3 => Ok(ArgVerbosity::Info),
|
||||
4 => Ok(ArgVerbosity::Debug),
|
||||
5 => Ok(ArgVerbosity::Trace),
|
||||
_ => Err(Error::from("Invalid verbosity level")),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ArgVerbosity> for log::LevelFilter {
|
||||
fn from(verbosity: ArgVerbosity) -> Self {
|
||||
match verbosity {
|
||||
ArgVerbosity::Off => log::LevelFilter::Off,
|
||||
ArgVerbosity::Error => log::LevelFilter::Error,
|
||||
ArgVerbosity::Warn => log::LevelFilter::Warn,
|
||||
ArgVerbosity::Info => log::LevelFilter::Info,
|
||||
ArgVerbosity::Debug => log::LevelFilter::Debug,
|
||||
ArgVerbosity::Trace => log::LevelFilter::Trace,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<log::Level> for ArgVerbosity {
|
||||
fn from(level: log::Level) -> Self {
|
||||
match level {
|
||||
log::Level::Error => ArgVerbosity::Error,
|
||||
log::Level::Warn => ArgVerbosity::Warn,
|
||||
log::Level::Info => ArgVerbosity::Info,
|
||||
log::Level::Debug => ArgVerbosity::Debug,
|
||||
log::Level::Trace => ArgVerbosity::Trace,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for ArgVerbosity {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
match self {
|
||||
|
@ -109,14 +151,28 @@ impl std::fmt::Display for ArgVerbosity {
|
|||
/// - Virtual: Use a virtual DNS server to handle DNS queries, also known as Fake-IP mode
|
||||
/// - OverTcp: Use TCP to send DNS queries to the DNS server
|
||||
/// - Direct: Do not handle DNS by relying on DNS server bypassing
|
||||
#[repr(C)]
|
||||
#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, clap::ValueEnum)]
|
||||
pub enum ArgDns {
|
||||
Virtual,
|
||||
Virtual = 0,
|
||||
OverTcp,
|
||||
#[default]
|
||||
Direct,
|
||||
}
|
||||
|
||||
#[cfg(target_os = "android")]
|
||||
impl TryFrom<jni::sys::jint> for ArgDns {
|
||||
type Error = Error;
|
||||
fn try_from(value: jni::sys::jint) -> Result<Self> {
|
||||
match value {
|
||||
0 => Ok(ArgDns::Virtual),
|
||||
1 => Ok(ArgDns::OverTcp),
|
||||
2 => Ok(ArgDns::Direct),
|
||||
_ => Err(Error::from("Invalid DNS strategy")),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct ArgProxy {
|
||||
pub proxy_type: ProxyType,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue