From 4be31a42ea91bbacadf93c5f2d0edd6d18d3a95e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20H=C3=A4ggblad?= Date: Fri, 12 May 2023 15:38:59 +0200 Subject: [PATCH] android jni function --- socks5-c/Cargo.lock | 125 ++++++++++++++++++++++++++++++++------------ socks5-c/Cargo.toml | 4 +- socks5-c/src/lib.rs | 43 +++++++++++++++ 3 files changed, 137 insertions(+), 35 deletions(-) diff --git a/socks5-c/Cargo.lock b/socks5-c/Cargo.lock index 74dcebb7d4..ec2b3cea9b 100644 --- a/socks5-c/Cargo.lock +++ b/socks5-c/Cargo.lock @@ -129,6 +129,12 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +[[package]] +name = "ascii" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae7d751998c189c1d4468cf0a39bb2eae052a9c58d50ebb3b9591ee3813ad50" + [[package]] name = "async-trait" version = "0.1.68" @@ -376,6 +382,12 @@ dependencies = [ "jobserver", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cfg-if" version = "1.0.0" @@ -514,6 +526,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "combine" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1645a65a99c7c8d345761f4b75a6ffe5be3b3b27a93ee731fccc5050ba6be97c" +dependencies = [ + "ascii", + "byteorder", +] + [[package]] name = "const-oid" version = "0.7.1" @@ -1050,7 +1072,7 @@ checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" dependencies = [ "atty", "humantime 1.3.0", - "log", + "log 0.4.17", "regex", "termcolor", ] @@ -1076,6 +1098,12 @@ dependencies = [ "libc", ] +[[package]] +name = "error-chain" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8" + [[package]] name = "event-listener" version = "2.5.3" @@ -1361,7 +1389,7 @@ dependencies = [ "bitflags", "libc", "libgit2-sys", - "log", + "log 0.4.17", "url", ] @@ -1426,7 +1454,7 @@ version = "3.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" dependencies = [ - "log", + "log 0.4.17", "pest", "pest_derive", "quick-error 2.0.1", @@ -1689,7 +1717,7 @@ dependencies = [ "ct-logs", "futures-util", "hyper", - "log", + "log 0.4.17", "rustls 0.19.1", "rustls-native-certs", "tokio", @@ -1812,6 +1840,25 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +[[package]] +name = "jni" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cffc930ce6a38a4013e30567b559bdc79f601013ba4a81e65dbda9207263efd4" +dependencies = [ + "cesu8", + "combine", + "error-chain", + "jni-sys", + "log 0.3.9", +] + +[[package]] +name = "jni-sys" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de0aaaba8809ab8d83a53fe2b313b996b79e8632b855eae9f70ad4323dca91b8" + [[package]] name = "jobserver" version = "0.1.26" @@ -1940,6 +1987,15 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "log" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +dependencies = [ + "log 0.4.17", +] + [[package]] name = "log" version = "0.4.17" @@ -1992,7 +2048,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", - "log", + "log 0.4.17", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.45.0", ] @@ -2005,7 +2061,7 @@ checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" dependencies = [ "lazy_static", "libc", - "log", + "log 0.4.17", "openssl", "openssl-probe", "openssl-sys", @@ -2094,7 +2150,7 @@ dependencies = [ "clap", "clap_complete", "clap_complete_fig", - "log", + "log 0.4.17", "pretty_env_logger", "semver 0.11.0", "serde", @@ -2111,7 +2167,7 @@ dependencies = [ "futures", "gloo-timers", "humantime-serde", - "log", + "log 0.4.17", "nym-bandwidth-controller", "nym-config", "nym-credential-storage", @@ -2201,7 +2257,7 @@ version = "0.1.0" dependencies = [ "cfg-if", "handlebars", - "log", + "log 0.4.17", "nym-network-defaults", "serde", "toml", @@ -2224,7 +2280,7 @@ name = "nym-credential-storage" version = "0.1.0" dependencies = [ "async-trait", - "log", + "log 0.4.17", "sqlx 0.5.13", "thiserror", "tokio", @@ -2292,7 +2348,7 @@ version = "0.1.0" dependencies = [ "futures", "getrandom 0.2.9", - "log", + "log 0.4.17", "nym-bandwidth-controller", "nym-coconut-interface", "nym-credential-storage", @@ -2323,7 +2379,7 @@ version = "0.1.0" dependencies = [ "bs58", "futures", - "log", + "log 0.4.17", "nym-coconut-interface", "nym-credentials", "nym-crypto", @@ -2352,7 +2408,7 @@ dependencies = [ "bs58", "cosmwasm-std", "humantime-serde", - "log", + "log 0.4.17", "nym-contracts-common", "schemars", "serde", @@ -2413,7 +2469,7 @@ dependencies = [ name = "nym-ordered-buffer" version = "0.1.0" dependencies = [ - "log", + "log 0.4.17", "thiserror", ] @@ -2453,7 +2509,7 @@ name = "nym-service-providers-common" version = "0.1.0" dependencies = [ "async-trait", - "log", + "log 0.4.17", "nym-bin-common", "nym-sphinx-anonymous-replies", "serde", @@ -2467,7 +2523,7 @@ version = "0.1.0" dependencies = [ "dirs", "futures", - "log", + "log 0.4.17", "nym-bandwidth-controller", "nym-client-core", "nym-config", @@ -2493,7 +2549,7 @@ version = "0.1.0" dependencies = [ "bytes", "futures", - "log", + "log 0.4.17", "nym-ordered-buffer", "nym-socks5-requests", "nym-task", @@ -2516,7 +2572,7 @@ dependencies = [ name = "nym-sphinx" version = "0.1.0" dependencies = [ - "log", + "log 0.4.17", "nym-crypto", "nym-outfox", "nym-sphinx-acknowledgements", @@ -2580,7 +2636,7 @@ dependencies = [ name = "nym-sphinx-chunking" version = "0.1.0" dependencies = [ - "log", + "log 0.4.17", "nym-sphinx-addressing", "nym-sphinx-params", "nym-sphinx-types", @@ -2656,7 +2712,7 @@ name = "nym-task" version = "0.1.0" dependencies = [ "futures", - "log", + "log 0.4.17", "thiserror", "tokio", "wasm-bindgen", @@ -2669,7 +2725,7 @@ version = "0.1.0" dependencies = [ "async-trait", "bs58", - "log", + "log 0.4.17", "nym-bin-common", "nym-crypto", "nym-mixnet-contract-common", @@ -2696,7 +2752,7 @@ dependencies = [ "flate2", "futures", "itertools", - "log", + "log 0.4.17", "nym-api-requests", "nym-coconut-bandwidth-contract-common", "nym-coconut-dkg-common", @@ -3036,7 +3092,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" dependencies = [ "env_logger", - "log", + "log 0.4.17", ] [[package]] @@ -3299,7 +3355,7 @@ dependencies = [ "hyper-tls", "ipnet", "js-sys", - "log", + "log 0.4.17", "mime", "native-tls", "once_cell", @@ -3385,7 +3441,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ "base64 0.13.1", - "log", + "log 0.4.17", "ring", "sct 0.6.1", "webpki 0.21.4", @@ -3397,7 +3453,7 @@ version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" dependencies = [ - "log", + "log 0.4.17", "ring", "sct 0.7.0", "webpki 0.22.0", @@ -3757,6 +3813,7 @@ name = "socks5-c" version = "0.1.0" dependencies = [ "anyhow", + "jni", "nym-client-core", "nym-config", "nym-credential-storage", @@ -3783,7 +3840,7 @@ dependencies = [ "hkdf 0.11.0", "hmac 0.11.0", "lioness", - "log", + "log 0.4.17", "rand 0.7.3", "rand_distr", "sha2 0.9.9", @@ -3806,7 +3863,7 @@ dependencies = [ "hkdf 0.11.0", "hmac 0.11.0", "lioness", - "log", + "log 0.4.17", "rand 0.7.3", "rand_distr", "sha2 0.9.9", @@ -3907,7 +3964,7 @@ dependencies = [ "itoa", "libc", "libsqlite3-sys", - "log", + "log 0.4.17", "memchr", "once_cell", "paste", @@ -3953,7 +4010,7 @@ dependencies = [ "itoa", "libc", "libsqlite3-sys", - "log", + "log 0.4.17", "memchr", "once_cell", "paste", @@ -4363,7 +4420,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e96bb520beab540ab664bd5a9cfeaa1fcd846fa68c830b42e2c8963071251d2" dependencies = [ "futures-util", - "log", + "log 0.4.17", "pin-project", "tokio", "tungstenite", @@ -4437,7 +4494,7 @@ dependencies = [ "http", "httparse", "input_buffer", - "log", + "log 0.4.17", "rand 0.8.5", "sha-1", "thiserror", @@ -4593,7 +4650,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ - "log", + "log 0.4.17", "try-lock", ] @@ -4626,7 +4683,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", - "log", + "log 0.4.17", "once_cell", "proc-macro2", "quote", diff --git a/socks5-c/Cargo.toml b/socks5-c/Cargo.toml index 8d1718cd71..ade9f1ed1a 100644 --- a/socks5-c/Cargo.toml +++ b/socks5-c/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [lib] name = "socks5_c" -crate-type = ["staticlib"] +crate-type = ["dylib", "staticlib"] [dependencies] anyhow = "1.0" @@ -19,3 +19,5 @@ nym-socks5-client-core = { path = "../common/socks5-client-core", default-featur openssl = { version = "0.10", features = ["vendored"] } tokio = { version = "1.24.1", features = ["sync", "time"] } +[target.'cfg(target_os="android")'.dependencies] +jni = { version = "0.5", default-features = false } diff --git a/socks5-c/src/lib.rs b/socks5-c/src/lib.rs index 13b15d8b13..48ed006dea 100644 --- a/socks5-c/src/lib.rs +++ b/socks5-c/src/lib.rs @@ -9,6 +9,49 @@ use std::os::raw::c_char; static SOCKS5_CONFIG_ID: &str = "mobile-socks5-test"; +#[cfg(target_os = "android")] +#[allow(non_snake_case)] +pub mod android { + extern crate jni; + + use std::ffi::CString; + + use self::jni::objects::{JClass, JString}; + use self::jni::sys::jstring; + use self::jni::JNIEnv; + use super::*; + + #[no_mangle] + pub unsafe extern fn Java_net_nymtech_nyms5_MyClass_runclient( + env: JNIEnv, + _: JClass, + java_pattern: JString, + ) { + setup_env(None); + + // TODO: does that leak memory and do we have to have a separate free method? + // I'd assume not because the allocation came from the caller + //let c_str = unsafe { CStr::from_ptr(service_provider) }; + let c_str = CString::new("https://testnet-gateway.nymtech.net").unwrap(); + let service_provider = c_str + .to_str() + .expect("invalid service provider string value provided") + .to_string(); + + let rt = tokio::runtime::Runtime::new().unwrap(); + + rt.block_on(async move { + let (config, keys) = init_dummy_socks5_config(service_provider).await.unwrap(); + let socks5_client = Socks5NymClient::new_with_keys(config, Some(keys)); + let mut shutdown_handle = socks5_client.start().await?; + shutdown_handle.wait_for_shutdown().await; + + Ok::<(), anyhow::Error>(()) + }) + .unwrap(); + } +} + /// # Safety /// /// TODO