From a93093182d824316b712747fcedece3d8a4aaca8 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 12 Oct 2018 16:02:20 -0300 Subject: [PATCH] Disable TorPlugin before applying changed settings The is necessary for two reasons: 1. Since Tor 0.3.4.8, it doesn't reconnect when changing the value of UseBridges via the control connection without also resetting DisableNetwork 2. The TorPlugin needs to set itself to a disconnected state for the UI to properly reflect this new state Fixes #1420 --- .../briarproject/bramble/plugin/tor/TorPlugin.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java index 550c60d35..7c80ebffd 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java @@ -627,6 +627,9 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { if (s.getNamespace().equals(ID.getString())) { LOG.info("Tor settings updated"); settings = s.getSettings(); + // Works around a bug introduced in Tor 0.3.4.8. Could be + // replaced with callback.transportDisabled() when fixed. + disableNetwork(); updateConnectionStatus(networkManager.getNetworkStatus()); } } else if (e instanceof NetworkStatusEvent) { @@ -634,6 +637,16 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { } } + private void disableNetwork() { + connectionStatusExecutor.execute(() -> { + try { + enableNetwork(false); + } catch (IOException ex) { + logException(LOG, WARNING, ex); + } + }); + } + private void updateConnectionStatus(NetworkStatus status) { connectionStatusExecutor.execute(() -> { if (!running) return;