android jni function

This commit is contained in:
Jon Häggblad
2023-05-12 15:38:59 +02:00
parent fe999593a2
commit 4be31a42ea
3 changed files with 137 additions and 35 deletions
+91 -34
View File
@@ -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",
+3 -1
View File
@@ -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 }
+43
View File
@@ -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