summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-22 12:40:15 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-22 16:41:56 +0000
commit453c6ef689cc704273741b1768b4e5a0da5f4ad2 (patch)
tree6a695ea6ca196e2e3a1a47df8a4a413076ab7936
parentc4b73973b33d499ee6ebb4b2334142cd1e22f6ae (diff)
downloadmullvadvpn-453c6ef689cc704273741b1768b4e5a0da5f4ad2.tar.xz
mullvadvpn-453c6ef689cc704273741b1768b4e5a0da5f4ad2.zip
Implement `MullvadDaemon::getAccountData`
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt4
-rw-r--r--mullvad-jni/src/lib.rs27
2 files changed, 29 insertions, 2 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt
index d5ab845f89..c7025ea644 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt
@@ -1,10 +1,14 @@
package net.mullvad.mullvadvpn
+import net.mullvad.mullvadvpn.model.AccountData
+
class MullvadDaemon {
init {
System.loadLibrary("mullvad_jni")
initialize()
}
+ external fun getAccountData(accountToken: String): AccountData?
+
private external fun initialize()
}
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index 5d3800fe3a..35d3825dcf 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -4,9 +4,9 @@ mod daemon_interface;
mod from_java;
mod into_java;
-use crate::daemon_interface::DaemonInterface;
+use crate::{daemon_interface::DaemonInterface, from_java::FromJava, into_java::IntoJava};
use jni::{
- objects::{GlobalRef, JObject},
+ objects::{GlobalRef, JObject, JString},
JNIEnv,
};
use lazy_static::lazy_static;
@@ -139,3 +139,26 @@ fn get_class(name: &str) -> GlobalRef {
None => panic!("Class not loaded: {}", name),
}
}
+
+#[no_mangle]
+#[allow(non_snake_case)]
+pub extern "system" fn Java_net_mullvad_mullvadvpn_MullvadDaemon_getAccountData<'env, 'this>(
+ env: JNIEnv<'env>,
+ _: JObject<'this>,
+ accountToken: JString,
+) -> JObject<'env> {
+ let daemon = DAEMON_INTERFACE.lock();
+
+ let account = String::from_java(&env, accountToken);
+
+ match daemon.get_account_data(account) {
+ Ok(data) => data.into_java(&env),
+ Err(error) => {
+ log::error!(
+ "{}",
+ error.display_chain_with_msg("Failed to get account data")
+ );
+ JObject::null()
+ }
+ }
+}