Browse Source
- Remove embed_session_info field from Args (fixes semver breaking change) - Remove runWithSessionInfo JNI function - Detect +info suffix in username to enable session info embedding - Format: username+info becomes username|protocol|src_ip|src_portpull/245/head
4 changed files with 9 additions and 77 deletions
@ -58,58 +58,6 @@ pub unsafe extern "C" fn Java_com_github_shadowsocks_bg_Tun2proxy_run( |
|||||
.resolve::<jni::errors::LogErrorAndDefault>() |
.resolve::<jni::errors::LogErrorAndDefault>() |
||||
} |
} |
||||
|
|
||||
/// # Safety
|
|
||||
///
|
|
||||
/// Running tun2proxy with some arguments including embed_session_info option
|
|
||||
/// Parameters:
|
|
||||
/// - proxy_url: the proxy url, e.g. "socks5://user:[email protected]:1080"
|
|
||||
/// - tun_fd: the tun file descriptor, it will be owned by tun2proxy
|
|
||||
/// - close_fd_on_drop: whether close the tun_fd on drop
|
|
||||
/// - tun_mtu: the tun mtu
|
|
||||
/// - dns_strategy: the dns strategy, see ArgDns enum
|
|
||||
/// - verbosity: the verbosity level, see ArgVerbosity enum
|
|
||||
/// - embed_session_info: if true, embeds session info in SOCKS5 username field
|
|
||||
/// Format: "original_username|protocol|src_ip|src_port"
|
|
||||
/// Use this with getConnectionOwnerUid() for per-app routing on Android 10+
|
|
||||
#[unsafe(no_mangle)] |
|
||||
pub unsafe extern "C" fn Java_com_github_shadowsocks_bg_Tun2proxy_runWithSessionInfo( |
|
||||
mut env: EnvUnowned<'_>, |
|
||||
_clazz: JClass<'_>, |
|
||||
proxy_url: JString<'_>, |
|
||||
tun_fd: jint, |
|
||||
close_fd_on_drop: jboolean, |
|
||||
tun_mtu: jchar, |
|
||||
verbosity: jint, |
|
||||
dns_strategy: jint, |
|
||||
embed_session_info: jboolean, |
|
||||
) -> jint { |
|
||||
let dns = dns_strategy.try_into().unwrap(); |
|
||||
let verbosity = verbosity.try_into().unwrap(); |
|
||||
let filter_str = &format!("off,tun2proxy={verbosity}"); |
|
||||
let filter = android_logger::FilterBuilder::new().parse(filter_str).build(); |
|
||||
android_logger::init_once( |
|
||||
android_logger::Config::default() |
|
||||
.with_tag("tun2proxy") |
|
||||
.with_max_level(log::LevelFilter::Trace) |
|
||||
.with_filter(filter), |
|
||||
); |
|
||||
env.with_env(|env: &mut Env| -> Result<jint> { |
|
||||
let proxy_url = get_java_string(env, &proxy_url).unwrap(); |
|
||||
let proxy = ArgProxy::try_from(proxy_url.as_str()).unwrap(); |
|
||||
|
|
||||
let mut args = Args::default(); |
|
||||
args.proxy(proxy) |
|
||||
.tun_fd(Some(tun_fd)) |
|
||||
.close_fd_on_drop(close_fd_on_drop) |
|
||||
.dns(dns) |
|
||||
.verbosity(verbosity) |
|
||||
.embed_session_info(embed_session_info != jboolean::from(false)); |
|
||||
let v = crate::general_api::general_run_for_api(args, tun_mtu, false); |
|
||||
Ok::<jint, Error>(v) |
|
||||
}) |
|
||||
.resolve::<jni::errors::LogErrorAndDefault>() |
|
||||
} |
|
||||
|
|
||||
/// # Safety
|
/// # Safety
|
||||
///
|
///
|
||||
/// Shutdown tun2proxy
|
/// Shutdown tun2proxy
|
||||
|
|||||
Loading…
Reference in new issue