summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2021-10-02 13:31:36 +0200
committercyBerta <cyberta@riseup.net>2021-10-02 13:32:30 +0200
commit80bf751141c85316c22a0d16c1e4d6fa0f473f44 (patch)
tree08802373b1a0c24f5f83fe3f9a295141df3ae8b1 /app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
parent9e131a6ae3456c6b8daa99dbd5b38dc5ef5d8592 (diff)
* refactor startTorProxy()
* fix setting http proxy port correctly * snowflake+tor does currently only work when being connected to a wifi, not a cellular network. For now, we check if the device is connected to a wifi, before attempting to start tor
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java41
1 files changed, 26 insertions, 15 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
index 9ca4c746..780ecaed 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
@@ -51,6 +51,8 @@ import java.util.NoSuchElementException;
import java.util.Observer;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicBoolean;
import javax.net.ssl.SSLHandshakeException;
import javax.net.ssl.SSLPeerUnverifiedException;
@@ -149,7 +151,9 @@ public abstract class ProviderApiManagerBase {
public interface ProviderApiServiceCallback {
void broadcastEvent(Intent intent);
+ void startTorService();
int getTorHttpTunnelPort();
+ boolean isConnectedToWifi();
}
private final ProviderApiServiceCallback serviceCallback;
@@ -188,7 +192,11 @@ public abstract class ProviderApiManagerBase {
}
// uncomment for testing --v
- TorStatusObservable.setProxyPort(startTorProxy());
+ /* try {
+ startTorProxy();
+ } catch (InterruptedException | TimeoutException e) {
+ e.printStackTrace();
+ } */
Bundle result = new Bundle();
switch (action) {
@@ -287,35 +295,38 @@ public abstract class ProviderApiManagerBase {
}
}
- protected int startTorProxy() {
- int port = -1;
- if (PreferenceHelper.useTor(preferences) && EipStatus.getInstance().isDisconnected() ) {
- port = serviceCallback.getTorHttpTunnelPort();
- if (port != -1) {
- try {
- waitForTorCircuits();
- } catch (InterruptedException e) {
- e.printStackTrace();
- port = -1;
- }
- }
+ protected boolean startTorProxy() throws InterruptedException, TimeoutException {
+ if (PreferenceHelper.useTor(preferences) &&
+ EipStatus.getInstance().isDisconnected() &&
+ serviceCallback.isConnectedToWifi()
+ ) {
+ serviceCallback.startTorService();
+ waitForTorCircuits();
+ int port = serviceCallback.getTorHttpTunnelPort();
+ TorStatusObservable.setProxyPort(port);
+ return port != -1;
}
- return port;
+ return false;
}
- private void waitForTorCircuits() throws InterruptedException {
+ private void waitForTorCircuits() throws InterruptedException, TimeoutException {
if (TorStatusObservable.getStatus() == ON) {
return;
}
CountDownLatch countDownLatch = new CountDownLatch(1);
+ AtomicBoolean successfulSetup = new AtomicBoolean(false);
Observer observer = (o, arg) -> {
if (TorStatusObservable.getStatus() == ON) {
+ successfulSetup.set(true);
countDownLatch.countDown();
}
};
TorStatusObservable.getInstance().addObserver(observer);
countDownLatch.await(180, TimeUnit.SECONDS);
TorStatusObservable.getInstance().deleteObserver(observer);
+ if (!successfulSetup.get()) {
+ throw new TimeoutException("Timeout reached");
+ }
}
void resetProviderDetails(Provider provider) {