From 0a59263d2cb00e79a206bf267c7c9c271e9fcf03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kalle=20Lindstr=C3=B6m?= Date: Wed, 2 Apr 2025 18:40:42 +0200 Subject: [PATCH] Add product flavor to in app logs --- Cargo.lock | 5 +++-- .../mullvadvpn/service/MullvadDaemon.kt | 2 ++ .../mullvadvpn/service/MullvadVpnService.kt | 1 + mullvad-jni/Cargo.toml | 1 + mullvad-jni/src/classes.rs | 1 + mullvad-jni/src/lib.rs | 4 ++++ talpid-core/Cargo.toml | 2 +- talpid-platform-metadata/src/android.rs | 20 +++++++++++++++---- talpid-platform-metadata/src/lib.rs | 2 ++ 9 files changed, 31 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 43d8a8624f..ba0020c920 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2198,9 +2198,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jnix" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "542b2072131a62ec940ee161ff0a01e7a1c2a129796b30143efc952cb6e0f28f" +checksum = "63c460f1b7afbfcb0810208d3b0efc6ac1d7574f5e379fa2c19fb957bb57678a" dependencies = [ "jni", "jnix-macros", @@ -2783,6 +2783,7 @@ dependencies = [ "mullvad-types", "nix 0.23.2", "rand 0.8.5", + "talpid-platform-metadata", "talpid-tunnel", "talpid-types", "thiserror 2.0.9", diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt index d95892305b..f08b3fd4d6 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt @@ -7,12 +7,14 @@ object MullvadDaemon { System.loadLibrary("mullvad_jni") } + @Suppress("LongParameterList") external fun initialize( vpnService: MullvadVpnService, rpcSocketPath: String, filesDirectory: String, cacheDirectory: String, apiEndpointOverride: ApiEndpointOverride?, + extraMetadata: Map, ) external fun shutdown() diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt index 3c26ad89de..44e256cdb5 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -170,6 +170,7 @@ class MullvadVpnService : TalpidVpnService() { filesDirectory = filesDir.absolutePath, cacheDirectory = cacheDir.absolutePath, apiEndpointOverride = apiEndpointOverride, + extraMetadata = mapOf("flavor" to BuildConfig.FLAVOR), ) Logger.i("MullvadVpnService: Daemon initialized") } diff --git a/mullvad-jni/Cargo.toml b/mullvad-jni/Cargo.toml index 65e47b26d9..3919719a82 100644 --- a/mullvad-jni/Cargo.toml +++ b/mullvad-jni/Cargo.toml @@ -35,3 +35,4 @@ mullvad-problem-report = { path = "../mullvad-problem-report" } mullvad-types = { path = "../mullvad-types" } talpid-tunnel = { path = "../talpid-tunnel" } talpid-types = { path = "../talpid-types" } +talpid-platform-metadata = { path = "../talpid-platform-metadata" } diff --git a/mullvad-jni/src/classes.rs b/mullvad-jni/src/classes.rs index 780fcc9724..53af058a86 100644 --- a/mullvad-jni/src/classes.rs +++ b/mullvad-jni/src/classes.rs @@ -3,6 +3,7 @@ pub const CLASSES: &[&str] = &[ "java/net/InetAddress", "java/net/InetSocketAddress", "java/util/ArrayList", + "java/util/HashMap", "net/mullvad/mullvadvpn/service/MullvadDaemon", "net/mullvad/mullvadvpn/service/MullvadVpnService", "net/mullvad/talpid/model/InetNetwork", diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index a82acd3628..389323ce38 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -16,6 +16,7 @@ use mullvad_daemon::{ cleanup_old_rpc_socket, exception_logging, logging, runtime::new_multi_thread, version, Daemon, DaemonCommandChannel, DaemonCommandSender, DaemonConfig, }; +use std::collections::HashMap; use std::{ ffi::CString, io, @@ -84,6 +85,7 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_initial files_directory: JObject<'_>, cache_directory: JObject<'_>, api_endpoint: JObject<'_>, + extra_metadata: JObject<'_>, ) { let mut ctx = DAEMON_CONTEXT.lock().unwrap(); assert!(ctx.is_none(), "multiple calls to MullvadDaemon.initialize"); @@ -99,6 +101,8 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_initial LOAD_CLASSES.call_once(|| env.preload_classes(classes::CLASSES.iter().cloned())); log::info!("Done loading classes"); + talpid_platform_metadata::set_extra_metadata(HashMap::from_java(&env, extra_metadata)); + let rpc_socket = pathbuf_from_java(&env, rpc_socket_path); let cache_dir = pathbuf_from_java(&env, cache_directory); diff --git a/talpid-core/Cargo.toml b/talpid-core/Cargo.toml index 4daf4814ca..f22cdc50fa 100644 --- a/talpid-core/Cargo.toml +++ b/talpid-core/Cargo.toml @@ -104,4 +104,4 @@ tonic-build = { workspace = true, default-features = false, features = ["transpo [dev-dependencies] -tokio = { workspace = true, features = [ "io-util", "test-util", "time" ] } +tokio = { workspace = true, features = ["io-util", "test-util", "time"] } diff --git a/talpid-platform-metadata/src/android.rs b/talpid-platform-metadata/src/android.rs index 94a8e4e979..1709223aa4 100644 --- a/talpid-platform-metadata/src/android.rs +++ b/talpid-platform-metadata/src/android.rs @@ -1,4 +1,5 @@ -use std::collections::HashMap; +use std::collections::{BTreeMap, HashMap}; +use std::sync::{LazyLock, RwLock}; mod command; use command::command_stdout_lossy; @@ -27,15 +28,26 @@ fn os_version() -> String { get_prop("ro.build.version.release").unwrap_or_else(|| "N/A".to_owned()) } -pub fn extra_metadata() -> HashMap { - let mut metadata = HashMap::new(); +pub fn extra_metadata() -> impl Iterator { + let mut metadata = BTreeMap::new(); metadata.insert( "abi".to_owned(), get_prop("ro.product.cpu.abilist").unwrap_or_else(|| "N/A".to_owned()), ); - metadata + let extra = EXTRA_METADATA.read().unwrap(); + for (k, v) in extra.iter() { + metadata.insert(k.clone(), v.clone()); + } + metadata.into_iter() } fn get_prop(property: &str) -> Option { command_stdout_lossy("getprop", &[property]).ok() } + +pub fn set_extra_metadata(extra: HashMap) { + *EXTRA_METADATA.write().unwrap() = extra; +} + +static EXTRA_METADATA: LazyLock>> = + LazyLock::new(|| RwLock::new(HashMap::new())); diff --git a/talpid-platform-metadata/src/lib.rs b/talpid-platform-metadata/src/lib.rs index 98640fabef..913d98300c 100644 --- a/talpid-platform-metadata/src/lib.rs +++ b/talpid-platform-metadata/src/lib.rs @@ -15,6 +15,8 @@ mod imp; #[path = "android.rs"] mod imp; +#[cfg(target_os = "android")] +pub use self::imp::set_extra_metadata; #[cfg(target_os = "macos")] pub use self::imp::MacosVersion; #[cfg(windows)]