MVP for bridge support

This commit is contained in:
Torsten Grote
2018-06-26 15:48:49 -03:00
parent d16aa9e2a4
commit eac1f9ed74
3 changed files with 33 additions and 3 deletions

View File

@@ -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);
}
}

View File

@@ -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");