diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-01-10 03:16:42 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-01-10 03:16:42 +0100 |
commit | dfa4a2eb9d15e609cdd22fd1720f49ebbecfdbe6 (patch) | |
tree | 16b43b67a65ce141d920412d22331e8e1b2385b6 | |
parent | df3062c7ad591a963d4c3cbb58797a0af4d56f33 (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.java | 21 | ||||
-rw-r--r-- | app/src/main/java/com/wireguard/android/fragment/TunnelController.java | 7 |
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) |