summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/tor
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/tor')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/tor/ClientTransportPlugin.java7
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java10
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/tor/TorStatusObservable.java12
3 files changed, 24 insertions, 5 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/tor/ClientTransportPlugin.java b/app/src/main/java/se/leap/bitmaskclient/tor/ClientTransportPlugin.java
index 0b481780..59c1290a 100644
--- a/app/src/main/java/se/leap/bitmaskclient/tor/ClientTransportPlugin.java
+++ b/app/src/main/java/se/leap/bitmaskclient/tor/ClientTransportPlugin.java
@@ -113,13 +113,16 @@ public class ClientTransportPlugin implements ClientTransportPluginInterface {
@Override
public void stop() {
IPtProxy.stopSnowflake();
- try {
+ try {
TorStatusObservable.waitUntil(this::isSnowflakeOff, 10);
} catch (InterruptedException | TimeoutException e) {
e.printStackTrace();
}
snowflakePort = -1;
- logFileObserver.stopWatching();
+ if (logFileObserver != null) {
+ logFileObserver.stopWatching();
+ logFileObserver = null;
+ }
}
private boolean isSnowflakeOff() {
diff --git a/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java b/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java
index 68988b67..b99abb3d 100644
--- a/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java
+++ b/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java
@@ -42,7 +42,9 @@ public class TorServiceCommand {
public static boolean startTorService(Context context, String action) throws InterruptedException {
Log.d(TAG, "startTorService");
try {
- waitUntil(TorServiceCommand::isNotCancelled, 30);
+ if (TorStatusObservable.isCancelled()) {
+ waitUntil(TorServiceCommand::isNotCancelled, 30);
+ }
} catch (TimeoutException e) {
e.printStackTrace();
}
@@ -79,7 +81,8 @@ public class TorServiceCommand {
@WorkerThread
public static void stopTorService(Context context) {
- if (TorStatusObservable.getStatus() == TorStatusObservable.TorStatus.OFF) {
+ if (TorStatusObservable.getStatus() == TorStatusObservable.TorStatus.STOPPING ||
+ TorStatusObservable.getStatus() == TorStatusObservable.TorStatus.OFF) {
return;
}
TorStatusObservable.markCancelled();
@@ -100,6 +103,9 @@ public class TorServiceCommand {
}
public static void stopTorServiceAsync(Context context) {
+ if (!TorStatusObservable.isRunning()) {
+ return;
+ }
TorStatusObservable.markCancelled();
new Thread(() -> stopTorService(context)).start();
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/tor/TorStatusObservable.java b/app/src/main/java/se/leap/bitmaskclient/tor/TorStatusObservable.java
index c924caee..7eee1a9d 100644
--- a/app/src/main/java/se/leap/bitmaskclient/tor/TorStatusObservable.java
+++ b/app/src/main/java/se/leap/bitmaskclient/tor/TorStatusObservable.java
@@ -178,7 +178,6 @@ public class TorStatusObservable extends Observable {
if (getInstance().status == TorStatus.OFF) {
getInstance().torNotificationManager.cancelNotifications(context);
getInstance().cancelled = false;
- getInstance().port = -1;
} else {
if (logKey != null) {
getInstance().lastTorLog = getStringFor(context, logKey);
@@ -264,6 +263,10 @@ public class TorStatusObservable extends Observable {
}
public static String getStringForCurrentStatus(Context context) {
+ if (context == null) {
+ return "";
+ }
+
switch (getInstance().status) {
case ON:
return context.getString(R.string.tor_started);
@@ -280,6 +283,8 @@ public class TorStatusObservable extends Observable {
public static void markCancelled() {
if (!getInstance().cancelled) {
getInstance().cancelled = true;
+ getInstance().port = -1;
+ getInstance().setChanged();
getInstance().notifyObservers();
}
}
@@ -287,4 +292,9 @@ public class TorStatusObservable extends Observable {
public static boolean isCancelled() {
return getInstance().cancelled;
}
+
+ public static boolean isRunning() {
+ return !TorStatusObservable.isCancelled() &&
+ TorStatusObservable.getStatus() != TorStatusObservable.TorStatus.OFF;
+ }
}