From eac1f9ed745cdf060ea9c6b12a830b4cdbb613f0 Mon Sep 17 00:00:00 2001 From: Torsten Grote <t@grobox.de> Date: Tue, 26 Jun 2018 15:48:49 -0300 Subject: [PATCH] MVP for bridge support --- .../plugin/tor/TorNetworkMetadata.java | 20 ++++++++++++++++++- .../bramble/plugin/tor/TorPlugin.java | 11 ++++++++-- bramble-android/src/main/res/raw/torrc | 5 +++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorNetworkMetadata.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorNetworkMetadata.java index e6151d5740..a6b28c19aa 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorNetworkMetadata.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorNetworkMetadata.java @@ -6,13 +6,31 @@ import java.util.Set; class TorNetworkMetadata { + /** + * Countries where Tor is blocked, i.e. vanilla Tor connection won't work. + */ + private static final String[] BLOCKED = { "CN", "IR", "EG", "SY", "VE" }; + + /** + * Countries where vanilla bridge connection are likely to work. + * Should be a subset of {@link #BLOCKED}. + */ + private static final String[] BRIDGES = { "SY", "VE" }; + // See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 // and https://trac.torproject.org/projects/tor/wiki/doc/OONI/censorshipwiki // TODO: get a more complete list private static final Set<String> BLOCKED_IN_COUNTRIES = - new HashSet<>(Arrays.asList("CN", "IR", "SY", "ZZ")); + new HashSet<>(Arrays.asList(BLOCKED)); + private static final Set<String> BRIDGES_WORK_IN_COUNTRIES = + new HashSet<>(Arrays.asList(BRIDGES)); static boolean isTorProbablyBlocked(String countryCode) { return BLOCKED_IN_COUNTRIES.contains(countryCode); } + + static boolean doBridgesWork(String countryCode) { + return BRIDGES_WORK_IN_COUNTRIES.contains(countryCode); + } + } diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java index 015056b49b..5851c385ac 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java @@ -91,6 +91,7 @@ import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK_ import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK_WIFI; import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_PORT; import static org.briarproject.bramble.api.plugin.TorConstants.PROP_ONION; +import static org.briarproject.bramble.plugin.tor.TorNetworkMetadata.doBridgesWork; import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.PrivacyUtils.scrubOnion; @@ -678,8 +679,14 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener { LOG.info("Disabling network, device is offline"); enableNetwork(false); } else if (blocked) { - LOG.info("Disabling network, country is blocked"); - enableNetwork(false); + if (doBridgesWork(country)) { + LOG.info("Enabling network, using bridges"); + controlConnection.setConf("UseBridges", "1"); + enableNetwork(true); + } else { + LOG.info("Disabling network, country is blocked"); + enableNetwork(false); + } } else if (network == PREF_TOR_NETWORK_NEVER || (network == PREF_TOR_NETWORK_WIFI && !wifi)) { LOG.info("Disabling network due to data setting"); diff --git a/bramble-android/src/main/res/raw/torrc b/bramble-android/src/main/res/raw/torrc index 3d27a7f205..d1f881dce7 100644 --- a/bramble-android/src/main/res/raw/torrc +++ b/bramble-android/src/main/res/raw/torrc @@ -4,3 +4,8 @@ DisableNetwork 1 RunAsDaemon 1 SafeSocks 1 SocksPort 59050 +UseBridges 0 +Bridge 131.252.210.150:8081 0E858AC201BF0F3FA3C462F64844CBFFC7297A42 +Bridge 128.105.214.161:8081 1E326AAFB3FCB515015250D8FCCC8E37F91A153B +Bridge 67.205.189.122:8443 12D64D5D44E20169585E7378580C0D33A872AD98 +Bridge 45.32.148.146:8443 0CE016FB2462D8BF179AE71F7D702D09DEAC3F1D -- GitLab