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>() |
|||
} |
|||
|
|||
/// # 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
|
|||
///
|
|||
/// Shutdown tun2proxy
|
|||
|
|||
Loading…
Reference in new issue