From 4defde5d715a526f91e1bde4f8e9091e138d7c28 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Mon, 16 Aug 2021 17:37:15 +0200
Subject: [PATCH] Don't start Tor when architecture is not supported

---
 .../org/briarproject/mailbox/core/tor/AndroidTorModule.kt    | 4 ++--
 .../org/briarproject/mailbox/core/tor/AndroidTorPlugin.java  | 4 +++-
 .../java/org/briarproject/mailbox/core/tor/JavaTorModule.kt  | 4 ++--
 .../org/briarproject/mailbox/core/tor/JavaTorPlugin.java     | 4 +++-
 .../mailbox/core/lifecycle/ServiceException.java             | 4 ++++
 .../java/org/briarproject/mailbox/core/tor/TorPlugin.java    | 5 ++++-
 6 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt
index b44156e1..d6072aba 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt
@@ -64,7 +64,7 @@ internal class AndroidTorModule {
         app.getDir("tor", Context.MODE_PRIVATE),
     ).also { lifecycleManager.registerService(it) }
 
-    private val architecture: String
+    private val architecture: String?
         get() {
             for (abi in AndroidTorPlugin.getSupportedArchitectures()) {
                 return when {
@@ -76,7 +76,7 @@ internal class AndroidTorModule {
                 }
             }
             LOG.info("Tor is not supported on this architecture")
-            return "" // TODO
+            return null
         }
 
 }
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java
index b23a4d32..4c46231e 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java
@@ -29,6 +29,8 @@ import java.util.concurrent.Executor;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
+import javax.annotation.Nullable;
+
 public class AndroidTorPlugin extends TorPlugin {
 
     private static final List<String> LIBRARY_ARCHITECTURES =
@@ -52,7 +54,7 @@ public class AndroidTorPlugin extends TorPlugin {
                      CircumventionProvider circumventionProvider,
                      AndroidWakeLockManager wakeLockManager,
                      Backoff backoff,
-                     String architecture,
+                     @Nullable String architecture,
                      File torDirectory) {
         super(ioExecutor, networkManager, locationUtils, clock, resourceProvider, circumventionProvider, backoff, architecture, torDirectory);
         this.ctx = ctx;
diff --git a/mailbox-cli/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt b/mailbox-cli/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt
index f8421ef6..c70b23b7 100644
--- a/mailbox-cli/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt
+++ b/mailbox-cli/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt
@@ -59,7 +59,7 @@ internal class JavaTorModule {
         ).also { lifecycleManager.registerService(it) }
     }
 
-    private val architecture: String
+    private val architecture: String?
         get() {
             if (isLinux()) {
                 if (LOG.isInfoEnabled) {
@@ -78,7 +78,7 @@ internal class JavaTorModule {
                 }
             }
             LOG.info("Tor is not supported on this architecture")
-            return "" // TODO
+            return null
         }
 
 }
diff --git a/mailbox-cli/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java b/mailbox-cli/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java
index 0ecdd95f..c9ce0a9e 100644
--- a/mailbox-cli/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java
+++ b/mailbox-cli/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java
@@ -13,6 +13,8 @@ import java.net.URISyntaxException;
 import java.security.CodeSource;
 import java.util.concurrent.Executor;
 
+import javax.annotation.Nullable;
+
 public class JavaTorPlugin extends TorPlugin {
 
     JavaTorPlugin(Executor ioExecutor,
@@ -22,7 +24,7 @@ public class JavaTorPlugin extends TorPlugin {
                   ResourceProvider resourceProvider,
                   CircumventionProvider circumventionProvider,
                   Backoff backoff,
-                  String architecture,
+                  @Nullable String architecture,
                   File torDirectory) {
         super(ioExecutor, networkManager, locationUtils, clock, resourceProvider,
                 circumventionProvider, backoff, architecture, torDirectory);
diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/lifecycle/ServiceException.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/lifecycle/ServiceException.java
index adaec28c..fbd05bb6 100644
--- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/lifecycle/ServiceException.java
+++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/lifecycle/ServiceException.java
@@ -9,6 +9,10 @@ public class ServiceException extends Exception {
         super();
     }
 
+    public ServiceException(String msg) {
+        super(msg);
+    }
+
     public ServiceException(Throwable cause) {
         super(cause);
     }
diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPlugin.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPlugin.java
index 5adf98dd..9f73da2e 100644
--- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPlugin.java
+++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/TorPlugin.java
@@ -70,6 +70,7 @@ abstract class TorPlugin implements Service, EventHandler {
     private final LocationUtils locationUtils;
     private final Clock clock;
     private final Backoff backoff;
+    @Nullable
     private final String architecture;
     private final CircumventionProvider circumventionProvider;
     private final ResourceProvider resourceProvider;
@@ -93,7 +94,7 @@ abstract class TorPlugin implements Service, EventHandler {
               ResourceProvider resourceProvider,
               CircumventionProvider circumventionProvider,
               Backoff backoff,
-              String architecture,
+              @Nullable String architecture,
               File torDirectory) {
         this.ioExecutor = ioExecutor;
         this.networkManager = networkManager;
@@ -222,6 +223,8 @@ abstract class TorPlugin implements Service, EventHandler {
     }
 
     private void installAssets() throws ServiceException {
+        if (architecture == null)
+            throw new ServiceException("Tor not supported on this architecture");
         try {
             // The done file may already exist from a previous installation
             //noinspection ResultOfMethodCallIgnored
-- 
GitLab