summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-01-10 03:16:42 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2018-01-10 03:16:42 +0100
commitdfa4a2eb9d15e609cdd22fd1720f49ebbecfdbe6 (patch)
tree16b43b67a65ce141d920412d22331e8e1b2385b6
parentdf3062c7ad591a963d4c3cbb58797a0af4d56f33 (diff)
WgQuickBackend: properly report exception so alert shows
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--app/src/main/java/com/wireguard/android/backend/WgQuickBackend.java21
-rw-r--r--app/src/main/java/com/wireguard/android/fragment/TunnelController.java7
2 files changed, 18 insertions, 10 deletions
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 33c7046f..4306b01e 100644
--- a/app/src/main/java/com/wireguard/android/backend/WgQuickBackend.java
+++ b/app/src/main/java/com/wireguard/android/backend/WgQuickBackend.java
@@ -103,18 +103,27 @@ public final class WgQuickBackend implements Backend {
state = originalState == State.UP ? State.DOWN : State.UP;
if (state == originalState)
return originalState;
+ if (state == State.UP && !new File("/sys/module/wireguard").exists())
+ throw new ModuleNotLoadedException("WireGuard module not loaded");
Log.d(TAG, "Changing tunnel " + tunnel.getName() + " to state " + state);
toolsInstaller.ensureToolsAvailable();
final int result;
- if (state == State.UP) {
- if (!new File("/sys/module/wireguard").exists())
- throw new ErrnoException("WireGuard module not loaded", OsConstants.ENODEV);
+ if (state == State.UP)
result = bringUpTunnel(tunnel, tunnel.getConfig());
- } else {
+ else
result = rootShell.run(null, "wg-quick down '" + tunnel.getName() + '\'');
- }
if (result != 0)
- throw new Exception("wg-quick failed");
+ throw new Exception("Unable to configure tunnel");
return getState(tunnel);
}
+
+ public static class ModuleNotLoadedException extends Exception {
+ public ModuleNotLoadedException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+ public ModuleNotLoadedException(final String message) {
+ super(message);
+ }
+ }
}
diff --git a/app/src/main/java/com/wireguard/android/fragment/TunnelController.java b/app/src/main/java/com/wireguard/android/fragment/TunnelController.java
index 1d1dc6b9..8b86749d 100644
--- a/app/src/main/java/com/wireguard/android/fragment/TunnelController.java
+++ b/app/src/main/java/com/wireguard/android/fragment/TunnelController.java
@@ -4,8 +4,6 @@ import android.app.AlertDialog;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
-import android.system.ErrnoException;
-import android.system.OsConstants;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.util.Log;
@@ -14,6 +12,7 @@ import android.widget.TextView;
import com.commonsware.cwac.crossport.design.widget.Snackbar;
import com.wireguard.android.R;
+import com.wireguard.android.backend.WgQuickBackend;
import com.wireguard.android.databinding.TunnelDetailFragmentBinding;
import com.wireguard.android.databinding.TunnelListItemBinding;
import com.wireguard.android.model.Tunnel;
@@ -48,8 +47,8 @@ public final class TunnelController {
if (throwable == null)
return;
final Context context = view.getContext();
- if (throwable instanceof ErrnoException
- && ((ErrnoException) throwable).errno == OsConstants.ENODEV) {
+ if (throwable instanceof WgQuickBackend.ModuleNotLoadedException ||
+ throwable.getCause() instanceof WgQuickBackend.ModuleNotLoadedException) {
final String message = context.getString(R.string.not_supported_message);
final String title = context.getString(R.string.not_supported_title);
final AlertDialog dialog = new AlertDialog.Builder(context)