From 6bc6aea2d0a73d866092d7cfb318caf5ff351437 Mon Sep 17 00:00:00 2001
From: "Jason A. Donenfeld"
Date: Mon, 27 Nov 2017 04:28:48 +0100
Subject: [PATCH] NotSupported: check if the module exists
Signed-off-by: Jason A. Donenfeld
---
app/src/main/AndroidManifest.xml | 5 ++
.../android/NotSupportedActivity.java | 26 ++++++++++
.../android/backends/VpnService.java | 51 +++++++++++++++----
.../res/layout/not_supported_activity.xml | 9 ++++
app/src/main/res/values/strings.xml | 7 ++-
5 files changed, 86 insertions(+), 12 deletions(-)
create mode 100644 app/src/main/java/com/wireguard/android/NotSupportedActivity.java
create mode 100644 app/src/main/res/layout/not_supported_activity.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ee47f46d..7520a622 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -26,6 +26,11 @@
+
+
= Build.VERSION_CODES.N)
+ messageText = Html.fromHtml(messageHtml, Html.FROM_HTML_MODE_COMPACT);
+ else
+ messageText = Html.fromHtml(messageHtml);
+ binding.notSupportedMessage.setText(messageText);
+ }
+}
diff --git a/app/src/main/java/com/wireguard/android/backends/VpnService.java b/app/src/main/java/com/wireguard/android/backends/VpnService.java
index 8f4ba5a6..b97f532c 100644
--- a/app/src/main/java/com/wireguard/android/backends/VpnService.java
+++ b/app/src/main/java/com/wireguard/android/backends/VpnService.java
@@ -17,7 +17,9 @@ import android.service.quicksettings.TileService;
import android.util.Log;
import android.widget.Toast;
+import com.wireguard.android.NotSupportedActivity;
import com.wireguard.android.QuickTileService;
+import com.wireguard.android.R;
import com.wireguard.android.bindings.ObservableSortedMap;
import com.wireguard.android.bindings.ObservableTreeMap;
import com.wireguard.config.Config;
@@ -245,8 +247,11 @@ public class VpnService extends Service
@Override
protected void onPostExecute(final Boolean result) {
config.setIsEnabled(!result);
- if (!result)
+ if (!result) {
+ Toast.makeText(getApplicationContext(), getString(R.string.error_down),
+ Toast.LENGTH_SHORT).show();
return;
+ }
enabledConfigs.remove(config.getName());
preferences.edit().putStringSet(KEY_ENABLED_CONFIGS, enabledConfigs).apply();
if (config.getName().equals(primaryName))
@@ -254,7 +259,7 @@ public class VpnService extends Service
}
}
- private class ConfigEnabler extends AsyncTask {
+ private class ConfigEnabler extends AsyncTask {
private final Config config;
private ConfigEnabler(final Config config) {
@@ -262,17 +267,43 @@ public class VpnService extends Service
}
@Override
- protected Boolean doInBackground(final Void... voids) {
+ protected Integer doInBackground(final Void... voids) {
+ if (!new File("/sys/module/wireguard").exists())
+ return -0xfff0001;
+ if (!existsInUsualSuspects("wg") || !existsInUsualSuspects("wg-quick"))
+ return -0xfff0002;
Log.i(TAG, "Running wg-quick up for " + config.getName());
final File configFile = new File(getFilesDir(), config.getName() + ".conf");
- return rootShell.run(null, "wg-quick up '" + configFile.getPath() + "'") == 0;
+ return rootShell.run(null, "wg-quick up '" + configFile.getPath() + "'");
+ }
+
+ private boolean existsInUsualSuspects(final String file) {
+ return new File("/system/bin/" + file).exists() ||
+ new File("/system/xbin/" + file).exists() ||
+ new File("/system/sbin/" + file).exists() ||
+ new File("/bin/" + file).exists() ||
+ new File("/xbin/" + file).exists() ||
+ new File("/sbin/" + file).exists() ||
+ new File("/usr/bin/" + file).exists() ||
+ new File("/usr/xbin/" + file).exists() ||
+ new File("/usr/sbin/" + file).exists();
}
@Override
- protected void onPostExecute(final Boolean result) {
- config.setIsEnabled(result);
- if (!result)
+ protected void onPostExecute(final Integer ret) {
+ config.setIsEnabled(ret == 0);
+ if (ret != 0) {
+ if (ret == -0xfff0001) {
+ startActivity(new Intent(getApplicationContext(), NotSupportedActivity.class));
+ } else if (ret == -0xfff0002) {
+ Toast.makeText(getApplicationContext(), getString(R.string.error_missing),
+ Toast.LENGTH_LONG).show();
+ } else {
+ Toast.makeText(getApplicationContext(), getString(R.string.error_up),
+ Toast.LENGTH_SHORT).show();
+ }
return;
+ }
enabledConfigs.add(config.getName());
preferences.edit().putStringSet(KEY_ENABLED_CONFIGS, enabledConfigs).apply();
if (config.getName().equals(primaryName))
@@ -378,10 +409,8 @@ public class VpnService extends Service
config.setName(configName);
configs.add(config);
} catch (IllegalArgumentException | IOException e) {
- try {
- file.delete();
- } catch (Exception e2) {
- Log.w(TAG, "Could not remove " + fileName, e2);
+ if (!file.delete()) {
+ Log.e(TAG, "Could not delete configuration for config " + configName);
}
Log.w(TAG, "Failed to load config from " + fileName, e);
publishProgress(fileName + ": " + e.getMessage());
diff --git a/app/src/main/res/layout/not_supported_activity.xml b/app/src/main/res/layout/not_supported_activity.xml
new file mode 100644
index 00000000..8e093279
--- /dev/null
+++ b/app/src/main/res/layout/not_supported_activity.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 232dfc56..be537ac1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -16,15 +16,21 @@
Edit
Enabled
Endpoint
+ Error bringing down WireGuard tunnel
+ Missing wg(8) and/or wg-quick(8) in PATH
+ Error bringing up WireGuard tunnel
Generate
(auto)
(generated)
(optional)
(random)
Interface
+ Import
Listen port
MTU
Name
+ WireGuard Not Supported
+ Your Android device does not currently support the WireGuard kernel module. Please talk to the manufacturer of your Android device or the author of your device\'s ROM about supporting the WireGuard kernel module.
Fortunately, the WireGuard development team is currently in the process of implementing support for WireGuard in a way that will work on all Android devices. This means that while you may not be able to use WireGuard today, in several weeks, things may very well be available for you.
]]>
Peer
Persistent keepalive
No configuration selected
@@ -41,5 +47,4 @@
Settings
Status
Toggle
- Import