From 88cf839c90e59823c4fee1e70e5525b943287a10 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 23 Apr 2018 16:37:42 +0200 Subject: Update application state based on wg-quick Signed-off-by: Jason A. Donenfeld --- .../java/com/wireguard/android/backend/WgQuickBackend.java | 11 +++++++++++ .../main/java/com/wireguard/android/model/TunnelManager.java | 9 +++++++++ app/src/main/java/com/wireguard/android/util/RootShell.java | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) (limited to 'app/src/main/java/com/wireguard') diff --git a/app/src/main/java/com/wireguard/android/backend/WgQuickBackend.java b/app/src/main/java/com/wireguard/android/backend/WgQuickBackend.java index 760aac85..a0371842 100644 --- a/app/src/main/java/com/wireguard/android/backend/WgQuickBackend.java +++ b/app/src/main/java/com/wireguard/android/backend/WgQuickBackend.java @@ -1,8 +1,11 @@ package com.wireguard.android.backend; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; import android.util.Log; +import com.wireguard.android.Application; import com.wireguard.android.model.Tunnel; import com.wireguard.android.model.Tunnel.State; import com.wireguard.android.model.Tunnel.Statistics; @@ -111,4 +114,12 @@ public final class WgQuickBackend implements Backend { if (result != 0) throw new Exception("Unable to configure tunnel (wg-quick returned " + result + ')'); } + + public final static class WgQuickChangeReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + Log.d(TAG, "Refreshing tunnel states"); + Application.getComponent().getTunnelManager().refreshTunnelStates(); + } + } } diff --git a/app/src/main/java/com/wireguard/android/model/TunnelManager.java b/app/src/main/java/com/wireguard/android/model/TunnelManager.java index 381e7f77..61468920 100644 --- a/app/src/main/java/com/wireguard/android/model/TunnelManager.java +++ b/app/src/main/java/com/wireguard/android/model/TunnelManager.java @@ -128,6 +128,15 @@ public final class TunnelManager extends BaseObservable { return tunnels; } + public void refreshTunnelStates() { + asyncWorker.supplyAsync(backend::enumerate) + .thenAccept(running -> { + for (final Tunnel tunnel : tunnels) + tunnel.onStateChanged(running.contains(tunnel.getName()) ? State.UP : State.DOWN); + }) + .whenComplete(ExceptionLoggers.E); + } + public void onCreate() { asyncWorker.supplyAsync(configStore::enumerate) .thenAcceptBoth(asyncWorker.supplyAsync(backend::enumerate), this::onTunnelsLoaded) diff --git a/app/src/main/java/com/wireguard/android/util/RootShell.java b/app/src/main/java/com/wireguard/android/util/RootShell.java index 9e487a31..d24f6051 100644 --- a/app/src/main/java/com/wireguard/android/util/RootShell.java +++ b/app/src/main/java/com/wireguard/android/util/RootShell.java @@ -44,7 +44,7 @@ public class RootShell { final File cacheDir = context.getCacheDir(); localBinaryDir = new File(cacheDir, "bin"); localTemporaryDir = new File(cacheDir, "tmp"); - preamble = String.format("export PATH=\"%s:$PATH\" TMPDIR='%s'; id -u\n", + preamble = String.format("export CALLING_PACKAGE=com.wireguard.android; export PATH=\"%s:$PATH\" TMPDIR='%s'; id -u\n", localBinaryDir, localTemporaryDir); } -- cgit v1.2.3