diff --git a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProvider.java b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProvider.java index c437a424ad6ea236d7eba46b8f8f104e7ecad5f2..78f14f3ada2954466e73e82b81dc9abee8806d93 100644 --- a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProvider.java +++ b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProvider.java @@ -50,6 +50,11 @@ public interface CircumventionProvider { */ String[] COUNTRIES_SNOWFLAKE = {"BY", "CN", "EG", "HK", "IR", "RU", "TM"}; + /** + * Returns true if bridges should be used by default in the given country. + */ + boolean shouldUseBridges(String countryCode); + /** * Returns the types of bridge connection that are suitable for the given country, or * {@link BridgeType#DEFAULT_OBFS4} and {@link BridgeType#VANILLA} if we don't have any @@ -57,17 +62,6 @@ public interface CircumventionProvider { */ List<BridgeType> getSuitableBridgeTypes(String countryCode); - /** - * Returns bridges of the given type that are usable in the given country. - * - * @param letsEncrypt Specifies whether the client is able to verify Let's Encrypt TLS - * certificates signed with the IdentTrust DST Root X3 certificate. Versions of Android - * older than 7.1 consider the certificate to have expired at the end of September 2021. - * This parameter is currently ignored, as no domain-fronted bridges use Let's Encrypt - * certificates. - */ - List<String> getBridges(BridgeType type, String countryCode, boolean letsEncrypt); - /** * Returns bridges of the given type that are usable in the given country. */ diff --git a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProviderImpl.java b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProviderImpl.java index 4b53217c32be00a36d41f2b8d2ba9b88e3e13c5d..1c33da752182622adef8eaad0a2b9fffb5d28282 100644 --- a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProviderImpl.java +++ b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProviderImpl.java @@ -39,6 +39,15 @@ class CircumventionProviderImpl implements CircumventionProvider { CircumventionProviderImpl() { } + @Override + public boolean shouldUseBridges(String countryCode) { + return USE_DEFAULT_OBFS4.contains(countryCode) || + USE_NON_DEFAULT_OBFS4.contains(countryCode) || + USE_VANILLA.contains(countryCode) || + USE_MEEK.contains(countryCode) || + USE_SNOWFLAKE.contains(countryCode); + } + @Override public List<BridgeType> getSuitableBridgeTypes(String countryCode) { List<BridgeType> types = new ArrayList<>(); @@ -55,12 +64,6 @@ class CircumventionProviderImpl implements CircumventionProvider { return types; } - @Override - public List<String> getBridges(BridgeType type, String countryCode, boolean letsEncrypt) { - // The `letsEncrypt` parameter is ignored, as no domain-fronted bridges use Let's Encrypt - return getBridges(type, countryCode); - } - @Override public List<String> getBridges(BridgeType type, String countryCode) { ClassLoader cl = getClass().getClassLoader(); diff --git a/onionwrapper-core/src/test/java/org/briarproject/onionwrapper/CircumventionProviderImplTest.java b/onionwrapper-core/src/test/java/org/briarproject/onionwrapper/CircumventionProviderImplTest.java index 83b899104a47813f9d28db4627ce1da98d73c15b..0f5c6fe7c7cc30c40bf3c4156fc81ca931910978 100644 --- a/onionwrapper-core/src/test/java/org/briarproject/onionwrapper/CircumventionProviderImplTest.java +++ b/onionwrapper-core/src/test/java/org/briarproject/onionwrapper/CircumventionProviderImplTest.java @@ -21,6 +21,27 @@ public class CircumventionProviderImplTest extends BaseTest { private final CircumventionProviderImpl provider = new CircumventionProviderImpl(); + @Test + public void testShouldUseBridges() { + for (String countryCode : COUNTRIES_DEFAULT_OBFS4) { + assertTrue(provider.shouldUseBridges(countryCode)); + } + for (String countryCode : COUNTRIES_NON_DEFAULT_OBFS4) { + assertTrue(provider.shouldUseBridges(countryCode)); + } + for (String countryCode : COUNTRIES_VANILLA) { + assertTrue(provider.shouldUseBridges(countryCode)); + } + for (String countryCode : COUNTRIES_MEEK) { + assertTrue(provider.shouldUseBridges(countryCode)); + } + for (String countryCode : COUNTRIES_SNOWFLAKE) { + assertTrue(provider.shouldUseBridges(countryCode)); + } + assertFalse(provider.shouldUseBridges("US")); + assertFalse(provider.shouldUseBridges("ZZ")); + } + @Test public void testGetSuitableBridgeTypes() { for (String countryCode : COUNTRIES_DEFAULT_OBFS4) {