From 35d1b406f75803bc2756e441dae4a59409fc54c8 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 1 Jun 2020 14:44:21 +0100 Subject: [PATCH] Refactor transport preferences. --- .../bramble/api/plugin/PluginConfig.java | 9 ++++---- .../connection/ConnectionRegistryImpl.java | 22 +++---------------- .../ConnectionRegistryImplTest.java | 19 ++++++++-------- .../bramble/test/TestPluginConfigModule.java | 10 ++++----- .../bramble/plugin/DesktopPluginModule.java | 9 ++++---- .../briarproject/briar/android/AppModule.java | 10 ++++----- .../briar/headless/HeadlessModule.kt | 8 +++---- .../briar/headless/HeadlessTestModule.kt | 8 +++---- 8 files changed, 41 insertions(+), 54 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/PluginConfig.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/PluginConfig.java index 4da41d6d2..61063030c 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/PluginConfig.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/PluginConfig.java @@ -1,12 +1,12 @@ package org.briarproject.bramble.api.plugin; -import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; import java.util.Collection; import java.util.List; +import java.util.Map; @NotNullByDefault public interface PluginConfig { @@ -18,8 +18,9 @@ public interface PluginConfig { boolean shouldPoll(); /** - * Returns a list of transport preferences. For each pair in the list, - * the first transport is preferred to the second. + * Returns a map representing transport preferences. For each entry in the + * map, connections via the transports identified by the value are + * preferred to connections via the transport identified by the key. */ - List> getTransportPreferences(); + Map> getTransportPreferences(); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/connection/ConnectionRegistryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/connection/ConnectionRegistryImpl.java index e88bdf5b4..d735a7c2f 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/connection/ConnectionRegistryImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/connection/ConnectionRegistryImpl.java @@ -1,7 +1,6 @@ package org.briarproject.bramble.connection; import org.briarproject.bramble.api.Bytes; -import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.connection.ConnectionRegistry; import org.briarproject.bramble.api.connection.InterruptibleConnection; import org.briarproject.bramble.api.contact.ContactId; @@ -45,7 +44,7 @@ class ConnectionRegistryImpl implements ConnectionRegistry { getLogger(ConnectionRegistryImpl.class.getName()); private final EventBus eventBus; - private final Map> betterTransports; + private final Map> transportPrefs; private final Object lock = new Object(); @GuardedBy("lock") @@ -56,26 +55,11 @@ class ConnectionRegistryImpl implements ConnectionRegistry { @Inject ConnectionRegistryImpl(EventBus eventBus, PluginConfig pluginConfig) { this.eventBus = eventBus; - betterTransports = new HashMap<>(); - initTransportPreferences(pluginConfig.getTransportPreferences()); + transportPrefs = pluginConfig.getTransportPreferences(); contactConnections = new HashMap<>(); connectedPendingContacts = new HashSet<>(); } - private void initTransportPreferences( - List> prefs) { - for (Pair pair : prefs) { - TransportId better = pair.getFirst(); - TransportId worse = pair.getSecond(); - List betterList = betterTransports.get(worse); - if (betterList == null) { - betterList = new ArrayList<>(); - betterTransports.put(worse, betterList); - } - betterList.add(better); - } - } - @Override public void registerConnection(ContactId c, TransportId t, InterruptibleConnection conn, boolean incoming) { @@ -146,7 +130,7 @@ class ConnectionRegistryImpl implements ConnectionRegistry { } private List getBetterTransports(TransportId t) { - List better = betterTransports.get(t); + List better = transportPrefs.get(t); return better == null ? emptyList() : better; } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/connection/ConnectionRegistryImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/connection/ConnectionRegistryImplTest.java index cb63a9fc7..1a1fbc6b1 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/connection/ConnectionRegistryImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/connection/ConnectionRegistryImplTest.java @@ -1,6 +1,5 @@ package org.briarproject.bramble.connection; -import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.connection.ConnectionRegistry; import org.briarproject.bramble.api.connection.InterruptibleConnection; import org.briarproject.bramble.api.contact.ContactId; @@ -22,7 +21,9 @@ import org.junit.Test; import java.util.Collection; import static java.util.Collections.emptyList; +import static java.util.Collections.emptyMap; import static java.util.Collections.singletonList; +import static java.util.Collections.singletonMap; import static org.briarproject.bramble.test.TestUtils.getContactId; import static org.briarproject.bramble.test.TestUtils.getRandomId; import static org.briarproject.bramble.test.TestUtils.getTransportId; @@ -60,7 +61,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { public void testRegisterMultipleConnections() { context.checking(new Expectations() {{ allowing(pluginConfig).getTransportPreferences(); - will(returnValue(emptyList())); + will(returnValue(emptyMap())); }}); ConnectionRegistry c = @@ -141,7 +142,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { public void testRegisterMultipleContacts() { context.checking(new Expectations() {{ allowing(pluginConfig).getTransportPreferences(); - will(returnValue(emptyList())); + will(returnValue(emptyMap())); }}); ConnectionRegistry c = @@ -183,7 +184,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { context.checking(new Expectations() {{ allowing(pluginConfig).getTransportPreferences(); will(returnValue( - singletonList(new Pair<>(transportId2, transportId1)))); + singletonMap(transportId1, singletonList(transportId2)))); }}); ConnectionRegistry c = @@ -256,7 +257,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { context.checking(new Expectations() {{ allowing(pluginConfig).getTransportPreferences(); will(returnValue( - singletonList(new Pair<>(transportId1, transportId2)))); + singletonMap(transportId2, singletonList(transportId1)))); }}); ConnectionRegistry c = @@ -357,7 +358,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { context.checking(new Expectations() {{ allowing(pluginConfig).getTransportPreferences(); will(returnValue( - singletonList(new Pair<>(transportId2, transportId1)))); + singletonMap(transportId1, singletonList(transportId2)))); }}); ConnectionRegistry c = @@ -452,7 +453,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { public void testNewConnectionIsInterruptedIfOldConnectionHasHigherPriority() { context.checking(new Expectations() {{ allowing(pluginConfig).getTransportPreferences(); - will(returnValue(emptyList())); + will(returnValue(emptyMap())); }}); ConnectionRegistry c = @@ -517,7 +518,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { public void testOldConnectionIsInterruptedIfNewConnectionHasHigherPriority() { context.checking(new Expectations() {{ allowing(pluginConfig).getTransportPreferences(); - will(returnValue(emptyList())); + will(returnValue(emptyMap())); }}); ConnectionRegistry c = @@ -567,7 +568,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { public void testRegisterAndUnregisterPendingContacts() { context.checking(new Expectations() {{ allowing(pluginConfig).getTransportPreferences(); - will(returnValue(emptyList())); + will(returnValue(emptyMap())); }}); ConnectionRegistry c = diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/TestPluginConfigModule.java b/bramble-core/src/test/java/org/briarproject/bramble/test/TestPluginConfigModule.java index f081d887f..4b3347884 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/test/TestPluginConfigModule.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/TestPluginConfigModule.java @@ -1,6 +1,5 @@ package org.briarproject.bramble.test; -import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.plugin.PluginConfig; @@ -12,13 +11,14 @@ import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; import java.util.Collection; import java.util.List; +import java.util.Map; import javax.annotation.Nullable; import dagger.Module; import dagger.Provides; -import static java.util.Collections.emptyList; +import static java.util.Collections.emptyMap; import static java.util.Collections.singletonList; import static org.briarproject.bramble.test.TestUtils.getTransportId; @@ -89,11 +89,11 @@ public class TestPluginConfigModule { return false; } - @Override - public List> getTransportPreferences() { - return emptyList(); + public Map> getTransportPreferences() { + return emptyMap(); } + }; return pluginConfig; } diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java index 05e28499d..53578ccc4 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/DesktopPluginModule.java @@ -1,6 +1,5 @@ package org.briarproject.bramble.plugin; -import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.io.TimeoutMonitor; import org.briarproject.bramble.api.lifecycle.IoExecutor; @@ -22,6 +21,7 @@ import org.briarproject.bramble.plugin.tcp.WanTcpPluginFactory; import java.security.SecureRandom; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.concurrent.Executor; import dagger.Module; @@ -30,6 +30,7 @@ import dagger.Provides; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; +import static java.util.Collections.singletonMap; @Module public class DesktopPluginModule extends PluginModule { @@ -69,10 +70,10 @@ public class DesktopPluginModule extends PluginModule { } @Override - public List> getTransportPreferences() { + public Map> getTransportPreferences() { // Prefer LAN to Bluetooth - return singletonList( - new Pair<>(LanTcpConstants.ID, BluetoothConstants.ID)); + return singletonMap(BluetoothConstants.ID, + singletonList(LanTcpConstants.ID)); } }; return pluginConfig; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java index d2dace83c..27a720d7f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java @@ -8,7 +8,6 @@ import android.os.StrictMode; import com.vanniktech.emoji.RecentEmoji; import org.briarproject.bramble.api.FeatureFlags; -import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.battery.BatteryManager; import org.briarproject.bramble.api.crypto.CryptoComponent; import org.briarproject.bramble.api.crypto.KeyStrengthener; @@ -53,6 +52,7 @@ import java.security.GeneralSecurityException; import java.security.SecureRandom; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; @@ -68,6 +68,7 @@ import static android.os.Build.VERSION.SDK_INT; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; +import static java.util.Collections.singletonMap; import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_ONION_ADDRESS; import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX; import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD; @@ -160,12 +161,11 @@ public class AppModule { return true; } - @Override - public List> getTransportPreferences() { + public Map> getTransportPreferences() { // Prefer LAN to Bluetooth - return singletonList( - new Pair<>(LanTcpConstants.ID, BluetoothConstants.ID)); + return singletonMap(BluetoothConstants.ID, + singletonList(LanTcpConstants.ID)); } }; return pluginConfig; diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt index f1b354192..5cfdac462 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper import dagger.Module import dagger.Provides import org.briarproject.bramble.api.FeatureFlags -import org.briarproject.bramble.api.Pair import org.briarproject.bramble.api.battery.BatteryManager import org.briarproject.bramble.api.db.DatabaseConfig import org.briarproject.bramble.api.event.EventBus @@ -33,7 +32,7 @@ import org.briarproject.briar.headless.forums.HeadlessForumModule import org.briarproject.briar.headless.messaging.HeadlessMessagingModule import java.io.File import java.util.Collections.emptyList -import java.util.Collections.singletonList +import java.util.Collections.singletonMap import java.util.concurrent.Executor import javax.inject.Singleton import javax.net.SocketFactory @@ -89,8 +88,9 @@ internal class HeadlessModule(private val appDir: File) { override fun getDuplexFactories(): Collection = duplex override fun getSimplexFactories(): Collection = emptyList() override fun shouldPoll(): Boolean = true - override fun getTransportPreferences(): List> = - singletonList(Pair(LanTcpConstants.ID, BluetoothConstants.ID)) + // Prefer LAN to Bluetooth + override fun getTransportPreferences(): Map> = + singletonMap(BluetoothConstants.ID, listOf(LanTcpConstants.ID)) } } diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt index 4d4bee12c..f02dc5799 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper import dagger.Module import dagger.Provides import org.briarproject.bramble.api.FeatureFlags -import org.briarproject.bramble.api.Pair import org.briarproject.bramble.api.db.DatabaseConfig import org.briarproject.bramble.api.plugin.BluetoothConstants import org.briarproject.bramble.api.plugin.LanTcpConstants @@ -22,8 +21,8 @@ import org.briarproject.briar.headless.event.HeadlessEventModule import org.briarproject.briar.headless.forums.HeadlessForumModule import org.briarproject.briar.headless.messaging.HeadlessMessagingModule import java.io.File +import java.util.* import java.util.Collections.emptyList -import java.util.Collections.singletonList import javax.inject.Singleton @Module( @@ -60,8 +59,9 @@ internal class HeadlessTestModule(private val appDir: File) { override fun getDuplexFactories(): Collection = emptyList() override fun getSimplexFactories(): Collection = emptyList() override fun shouldPoll(): Boolean = false - override fun getTransportPreferences(): List> = - singletonList(Pair(LanTcpConstants.ID, BluetoothConstants.ID)) + // Prefer LAN to Bluetooth + override fun getTransportPreferences(): Map> = + Collections.singletonMap(BluetoothConstants.ID, listOf(LanTcpConstants.ID)) } }