mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-16 20:59:54 +01:00
Use non-default obfs4 bridges in countries that use DPI.
This commit is contained in:
@@ -27,7 +27,7 @@ public interface CircumventionProvider {
|
|||||||
* Countries where bridge connections are likely to work.
|
* Countries where bridge connections are likely to work.
|
||||||
* Should be a subset of {@link #BLOCKED} and the union of
|
* Should be a subset of {@link #BLOCKED} and the union of
|
||||||
* {@link #DEFAULT_BRIDGES}, {@link #NON_DEFAULT_BRIDGES} and
|
* {@link #DEFAULT_BRIDGES}, {@link #NON_DEFAULT_BRIDGES} and
|
||||||
* {@link #MEEK_BRIDGES}.
|
* {@link #DPI_BRIDGES}.
|
||||||
*/
|
*/
|
||||||
String[] BRIDGES = {"BY", "CN", "EG", "IR", "RU", "TM", "VE"};
|
String[] BRIDGES = {"BY", "CN", "EG", "IR", "RU", "TM", "VE"};
|
||||||
|
|
||||||
@@ -44,10 +44,10 @@ public interface CircumventionProvider {
|
|||||||
String[] NON_DEFAULT_BRIDGES = {"BY", "RU", "TM"};
|
String[] NON_DEFAULT_BRIDGES = {"BY", "RU", "TM"};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Countries where obfs4 and vanilla bridges won't work and meek is needed.
|
* Countries where vanilla bridges are blocked via DPI but non-default
|
||||||
* Should be a subset of {@link #BRIDGES}.
|
* obfs4 bridges and meek may work. Should be a subset of {@link #BRIDGES}.
|
||||||
*/
|
*/
|
||||||
String[] MEEK_BRIDGES = {"CN", "IR"};
|
String[] DPI_BRIDGES = {"CN", "IR"};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if vanilla Tor connections are blocked in the given country.
|
* Returns true if vanilla Tor connections are blocked in the given country.
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import javax.annotation.concurrent.Immutable;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import static java.util.Arrays.asList;
|
import static java.util.Arrays.asList;
|
||||||
import static java.util.Collections.singletonList;
|
|
||||||
import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull;
|
import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull;
|
||||||
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.DEFAULT_OBFS4;
|
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.DEFAULT_OBFS4;
|
||||||
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.MEEK;
|
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.MEEK;
|
||||||
@@ -35,8 +34,8 @@ class CircumventionProviderImpl implements CircumventionProvider {
|
|||||||
new HashSet<>(asList(DEFAULT_BRIDGES));
|
new HashSet<>(asList(DEFAULT_BRIDGES));
|
||||||
private static final Set<String> NON_DEFAULT_BRIDGE_COUNTRIES =
|
private static final Set<String> NON_DEFAULT_BRIDGE_COUNTRIES =
|
||||||
new HashSet<>(asList(NON_DEFAULT_BRIDGES));
|
new HashSet<>(asList(NON_DEFAULT_BRIDGES));
|
||||||
private static final Set<String> MEEK_COUNTRIES =
|
private static final Set<String> DPI_COUNTRIES =
|
||||||
new HashSet<>(asList(MEEK_BRIDGES));
|
new HashSet<>(asList(DPI_BRIDGES));
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
CircumventionProviderImpl() {
|
CircumventionProviderImpl() {
|
||||||
@@ -58,8 +57,8 @@ class CircumventionProviderImpl implements CircumventionProvider {
|
|||||||
return asList(DEFAULT_OBFS4, VANILLA);
|
return asList(DEFAULT_OBFS4, VANILLA);
|
||||||
} else if (NON_DEFAULT_BRIDGE_COUNTRIES.contains(countryCode)) {
|
} else if (NON_DEFAULT_BRIDGE_COUNTRIES.contains(countryCode)) {
|
||||||
return asList(NON_DEFAULT_OBFS4, VANILLA);
|
return asList(NON_DEFAULT_OBFS4, VANILLA);
|
||||||
} else if (MEEK_COUNTRIES.contains(countryCode)) {
|
} else if (DPI_COUNTRIES.contains(countryCode)) {
|
||||||
return singletonList(MEEK);
|
return asList(NON_DEFAULT_OBFS4, MEEK);
|
||||||
} else {
|
} else {
|
||||||
return asList(DEFAULT_OBFS4, VANILLA);
|
return asList(DEFAULT_OBFS4, VANILLA);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import java.util.HashSet;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static java.util.Arrays.asList;
|
import static java.util.Arrays.asList;
|
||||||
import static java.util.Collections.singletonList;
|
|
||||||
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BLOCKED;
|
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BLOCKED;
|
||||||
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BRIDGES;
|
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BRIDGES;
|
||||||
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.DEFAULT_OBFS4;
|
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.DEFAULT_OBFS4;
|
||||||
@@ -15,7 +14,7 @@ import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeTy
|
|||||||
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.NON_DEFAULT_OBFS4;
|
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.NON_DEFAULT_OBFS4;
|
||||||
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.VANILLA;
|
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.VANILLA;
|
||||||
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.DEFAULT_BRIDGES;
|
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.DEFAULT_BRIDGES;
|
||||||
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.MEEK_BRIDGES;
|
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.DPI_BRIDGES;
|
||||||
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.NON_DEFAULT_BRIDGES;
|
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.NON_DEFAULT_BRIDGES;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
@@ -32,18 +31,18 @@ public class CircumventionProviderTest extends BrambleTestCase {
|
|||||||
Set<String> defaultBridges = new HashSet<>(asList(DEFAULT_BRIDGES));
|
Set<String> defaultBridges = new HashSet<>(asList(DEFAULT_BRIDGES));
|
||||||
Set<String> nonDefaultBridges =
|
Set<String> nonDefaultBridges =
|
||||||
new HashSet<>(asList(NON_DEFAULT_BRIDGES));
|
new HashSet<>(asList(NON_DEFAULT_BRIDGES));
|
||||||
Set<String> meekBridges = new HashSet<>(asList(MEEK_BRIDGES));
|
Set<String> dpiBridges = new HashSet<>(asList(DPI_BRIDGES));
|
||||||
// BRIDGES should be a subset of BLOCKED
|
// BRIDGES should be a subset of BLOCKED
|
||||||
assertTrue(blocked.containsAll(bridges));
|
assertTrue(blocked.containsAll(bridges));
|
||||||
// BRIDGES should be the union of the bridge type sets
|
// BRIDGES should be the union of the bridge type sets
|
||||||
Set<String> union = new HashSet<>(defaultBridges);
|
Set<String> union = new HashSet<>(defaultBridges);
|
||||||
union.addAll(nonDefaultBridges);
|
union.addAll(nonDefaultBridges);
|
||||||
union.addAll(meekBridges);
|
union.addAll(dpiBridges);
|
||||||
assertEquals(bridges, union);
|
assertEquals(bridges, union);
|
||||||
// The bridge type sets should not overlap
|
// The bridge type sets should not overlap
|
||||||
assertEmptyIntersection(defaultBridges, nonDefaultBridges);
|
assertEmptyIntersection(defaultBridges, nonDefaultBridges);
|
||||||
assertEmptyIntersection(defaultBridges, meekBridges);
|
assertEmptyIntersection(defaultBridges, dpiBridges);
|
||||||
assertEmptyIntersection(nonDefaultBridges, meekBridges);
|
assertEmptyIntersection(nonDefaultBridges, dpiBridges);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -56,8 +55,8 @@ public class CircumventionProviderTest extends BrambleTestCase {
|
|||||||
assertEquals(asList(NON_DEFAULT_OBFS4, VANILLA),
|
assertEquals(asList(NON_DEFAULT_OBFS4, VANILLA),
|
||||||
provider.getSuitableBridgeTypes(country));
|
provider.getSuitableBridgeTypes(country));
|
||||||
}
|
}
|
||||||
for (String country : MEEK_BRIDGES) {
|
for (String country : DPI_BRIDGES) {
|
||||||
assertEquals(singletonList(MEEK),
|
assertEquals(asList(NON_DEFAULT_OBFS4, MEEK),
|
||||||
provider.getSuitableBridgeTypes(country));
|
provider.getSuitableBridgeTypes(country));
|
||||||
}
|
}
|
||||||
assertEquals(asList(DEFAULT_OBFS4, VANILLA),
|
assertEquals(asList(DEFAULT_OBFS4, VANILLA),
|
||||||
|
|||||||
Reference in New Issue
Block a user