Refactor transport preferences.

This commit is contained in:
akwizgran
2020-06-01 14:44:21 +01:00
parent 2add63657e
commit 35d1b406f7
8 changed files with 41 additions and 54 deletions

View File

@@ -1,12 +1,12 @@
package org.briarproject.bramble.api.plugin; package org.briarproject.bramble.api.plugin;
import org.briarproject.bramble.api.Pair;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory;
import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
@NotNullByDefault @NotNullByDefault
public interface PluginConfig { public interface PluginConfig {
@@ -18,8 +18,9 @@ public interface PluginConfig {
boolean shouldPoll(); boolean shouldPoll();
/** /**
* Returns a list of transport preferences. For each pair in the list, * Returns a map representing transport preferences. For each entry in the
* the first transport is preferred to the second. * map, connections via the transports identified by the value are
* preferred to connections via the transport identified by the key.
*/ */
List<Pair<TransportId, TransportId>> getTransportPreferences(); Map<TransportId, List<TransportId>> getTransportPreferences();
} }

View File

@@ -1,7 +1,6 @@
package org.briarproject.bramble.connection; package org.briarproject.bramble.connection;
import org.briarproject.bramble.api.Bytes; 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.ConnectionRegistry;
import org.briarproject.bramble.api.connection.InterruptibleConnection; import org.briarproject.bramble.api.connection.InterruptibleConnection;
import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.contact.ContactId;
@@ -45,7 +44,7 @@ class ConnectionRegistryImpl implements ConnectionRegistry {
getLogger(ConnectionRegistryImpl.class.getName()); getLogger(ConnectionRegistryImpl.class.getName());
private final EventBus eventBus; private final EventBus eventBus;
private final Map<TransportId, List<TransportId>> betterTransports; private final Map<TransportId, List<TransportId>> transportPrefs;
private final Object lock = new Object(); private final Object lock = new Object();
@GuardedBy("lock") @GuardedBy("lock")
@@ -56,26 +55,11 @@ class ConnectionRegistryImpl implements ConnectionRegistry {
@Inject @Inject
ConnectionRegistryImpl(EventBus eventBus, PluginConfig pluginConfig) { ConnectionRegistryImpl(EventBus eventBus, PluginConfig pluginConfig) {
this.eventBus = eventBus; this.eventBus = eventBus;
betterTransports = new HashMap<>(); transportPrefs = pluginConfig.getTransportPreferences();
initTransportPreferences(pluginConfig.getTransportPreferences());
contactConnections = new HashMap<>(); contactConnections = new HashMap<>();
connectedPendingContacts = new HashSet<>(); connectedPendingContacts = new HashSet<>();
} }
private void initTransportPreferences(
List<Pair<TransportId, TransportId>> prefs) {
for (Pair<TransportId, TransportId> pair : prefs) {
TransportId better = pair.getFirst();
TransportId worse = pair.getSecond();
List<TransportId> betterList = betterTransports.get(worse);
if (betterList == null) {
betterList = new ArrayList<>();
betterTransports.put(worse, betterList);
}
betterList.add(better);
}
}
@Override @Override
public void registerConnection(ContactId c, TransportId t, public void registerConnection(ContactId c, TransportId t,
InterruptibleConnection conn, boolean incoming) { InterruptibleConnection conn, boolean incoming) {
@@ -146,7 +130,7 @@ class ConnectionRegistryImpl implements ConnectionRegistry {
} }
private List<TransportId> getBetterTransports(TransportId t) { private List<TransportId> getBetterTransports(TransportId t) {
List<TransportId> better = betterTransports.get(t); List<TransportId> better = transportPrefs.get(t);
return better == null ? emptyList() : better; return better == null ? emptyList() : better;
} }

View File

@@ -1,6 +1,5 @@
package org.briarproject.bramble.connection; package org.briarproject.bramble.connection;
import org.briarproject.bramble.api.Pair;
import org.briarproject.bramble.api.connection.ConnectionRegistry; import org.briarproject.bramble.api.connection.ConnectionRegistry;
import org.briarproject.bramble.api.connection.InterruptibleConnection; import org.briarproject.bramble.api.connection.InterruptibleConnection;
import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.contact.ContactId;
@@ -22,7 +21,9 @@ import org.junit.Test;
import java.util.Collection; import java.util.Collection;
import static java.util.Collections.emptyList; import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap;
import static java.util.Collections.singletonList; 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.getContactId;
import static org.briarproject.bramble.test.TestUtils.getRandomId; import static org.briarproject.bramble.test.TestUtils.getRandomId;
import static org.briarproject.bramble.test.TestUtils.getTransportId; import static org.briarproject.bramble.test.TestUtils.getTransportId;
@@ -60,7 +61,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase {
public void testRegisterMultipleConnections() { public void testRegisterMultipleConnections() {
context.checking(new Expectations() {{ context.checking(new Expectations() {{
allowing(pluginConfig).getTransportPreferences(); allowing(pluginConfig).getTransportPreferences();
will(returnValue(emptyList())); will(returnValue(emptyMap()));
}}); }});
ConnectionRegistry c = ConnectionRegistry c =
@@ -141,7 +142,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase {
public void testRegisterMultipleContacts() { public void testRegisterMultipleContacts() {
context.checking(new Expectations() {{ context.checking(new Expectations() {{
allowing(pluginConfig).getTransportPreferences(); allowing(pluginConfig).getTransportPreferences();
will(returnValue(emptyList())); will(returnValue(emptyMap()));
}}); }});
ConnectionRegistry c = ConnectionRegistry c =
@@ -183,7 +184,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase {
context.checking(new Expectations() {{ context.checking(new Expectations() {{
allowing(pluginConfig).getTransportPreferences(); allowing(pluginConfig).getTransportPreferences();
will(returnValue( will(returnValue(
singletonList(new Pair<>(transportId2, transportId1)))); singletonMap(transportId1, singletonList(transportId2))));
}}); }});
ConnectionRegistry c = ConnectionRegistry c =
@@ -256,7 +257,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase {
context.checking(new Expectations() {{ context.checking(new Expectations() {{
allowing(pluginConfig).getTransportPreferences(); allowing(pluginConfig).getTransportPreferences();
will(returnValue( will(returnValue(
singletonList(new Pair<>(transportId1, transportId2)))); singletonMap(transportId2, singletonList(transportId1))));
}}); }});
ConnectionRegistry c = ConnectionRegistry c =
@@ -357,7 +358,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase {
context.checking(new Expectations() {{ context.checking(new Expectations() {{
allowing(pluginConfig).getTransportPreferences(); allowing(pluginConfig).getTransportPreferences();
will(returnValue( will(returnValue(
singletonList(new Pair<>(transportId2, transportId1)))); singletonMap(transportId1, singletonList(transportId2))));
}}); }});
ConnectionRegistry c = ConnectionRegistry c =
@@ -452,7 +453,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase {
public void testNewConnectionIsInterruptedIfOldConnectionHasHigherPriority() { public void testNewConnectionIsInterruptedIfOldConnectionHasHigherPriority() {
context.checking(new Expectations() {{ context.checking(new Expectations() {{
allowing(pluginConfig).getTransportPreferences(); allowing(pluginConfig).getTransportPreferences();
will(returnValue(emptyList())); will(returnValue(emptyMap()));
}}); }});
ConnectionRegistry c = ConnectionRegistry c =
@@ -517,7 +518,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase {
public void testOldConnectionIsInterruptedIfNewConnectionHasHigherPriority() { public void testOldConnectionIsInterruptedIfNewConnectionHasHigherPriority() {
context.checking(new Expectations() {{ context.checking(new Expectations() {{
allowing(pluginConfig).getTransportPreferences(); allowing(pluginConfig).getTransportPreferences();
will(returnValue(emptyList())); will(returnValue(emptyMap()));
}}); }});
ConnectionRegistry c = ConnectionRegistry c =
@@ -567,7 +568,7 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase {
public void testRegisterAndUnregisterPendingContacts() { public void testRegisterAndUnregisterPendingContacts() {
context.checking(new Expectations() {{ context.checking(new Expectations() {{
allowing(pluginConfig).getTransportPreferences(); allowing(pluginConfig).getTransportPreferences();
will(returnValue(emptyList())); will(returnValue(emptyMap()));
}}); }});
ConnectionRegistry c = ConnectionRegistry c =

View File

@@ -1,6 +1,5 @@
package org.briarproject.bramble.test; package org.briarproject.bramble.test;
import org.briarproject.bramble.api.Pair;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.plugin.PluginCallback;
import org.briarproject.bramble.api.plugin.PluginConfig; 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.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
import static java.util.Collections.emptyList; import static java.util.Collections.emptyMap;
import static java.util.Collections.singletonList; import static java.util.Collections.singletonList;
import static org.briarproject.bramble.test.TestUtils.getTransportId; import static org.briarproject.bramble.test.TestUtils.getTransportId;
@@ -89,11 +89,11 @@ public class TestPluginConfigModule {
return false; return false;
} }
@Override @Override
public List<Pair<TransportId, TransportId>> getTransportPreferences() { public Map<TransportId, List<TransportId>> getTransportPreferences() {
return emptyList(); return emptyMap();
} }
}; };
return pluginConfig; return pluginConfig;
} }

View File

@@ -1,6 +1,5 @@
package org.briarproject.bramble.plugin; package org.briarproject.bramble.plugin;
import org.briarproject.bramble.api.Pair;
import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.event.EventBus;
import org.briarproject.bramble.api.io.TimeoutMonitor; import org.briarproject.bramble.api.io.TimeoutMonitor;
import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.lifecycle.IoExecutor;
@@ -22,6 +21,7 @@ import org.briarproject.bramble.plugin.tcp.WanTcpPluginFactory;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import dagger.Module; import dagger.Module;
@@ -30,6 +30,7 @@ import dagger.Provides;
import static java.util.Arrays.asList; import static java.util.Arrays.asList;
import static java.util.Collections.emptyList; import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList; import static java.util.Collections.singletonList;
import static java.util.Collections.singletonMap;
@Module @Module
public class DesktopPluginModule extends PluginModule { public class DesktopPluginModule extends PluginModule {
@@ -69,10 +70,10 @@ public class DesktopPluginModule extends PluginModule {
} }
@Override @Override
public List<Pair<TransportId, TransportId>> getTransportPreferences() { public Map<TransportId, List<TransportId>> getTransportPreferences() {
// Prefer LAN to Bluetooth // Prefer LAN to Bluetooth
return singletonList( return singletonMap(BluetoothConstants.ID,
new Pair<>(LanTcpConstants.ID, BluetoothConstants.ID)); singletonList(LanTcpConstants.ID));
} }
}; };
return pluginConfig; return pluginConfig;

View File

@@ -8,7 +8,6 @@ import android.os.StrictMode;
import com.vanniktech.emoji.RecentEmoji; import com.vanniktech.emoji.RecentEmoji;
import org.briarproject.bramble.api.FeatureFlags; import org.briarproject.bramble.api.FeatureFlags;
import org.briarproject.bramble.api.Pair;
import org.briarproject.bramble.api.battery.BatteryManager; import org.briarproject.bramble.api.battery.BatteryManager;
import org.briarproject.bramble.api.crypto.CryptoComponent; import org.briarproject.bramble.api.crypto.CryptoComponent;
import org.briarproject.bramble.api.crypto.KeyStrengthener; import org.briarproject.bramble.api.crypto.KeyStrengthener;
@@ -53,6 +52,7 @@ import java.security.GeneralSecurityException;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService; 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.Arrays.asList;
import static java.util.Collections.emptyList; import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList; 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_ONION_ADDRESS;
import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX; import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX;
import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD; import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD;
@@ -160,12 +161,11 @@ public class AppModule {
return true; return true;
} }
@Override @Override
public List<Pair<TransportId, TransportId>> getTransportPreferences() { public Map<TransportId, List<TransportId>> getTransportPreferences() {
// Prefer LAN to Bluetooth // Prefer LAN to Bluetooth
return singletonList( return singletonMap(BluetoothConstants.ID,
new Pair<>(LanTcpConstants.ID, BluetoothConstants.ID)); singletonList(LanTcpConstants.ID));
} }
}; };
return pluginConfig; return pluginConfig;

View File

@@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import org.briarproject.bramble.api.FeatureFlags import org.briarproject.bramble.api.FeatureFlags
import org.briarproject.bramble.api.Pair
import org.briarproject.bramble.api.battery.BatteryManager import org.briarproject.bramble.api.battery.BatteryManager
import org.briarproject.bramble.api.db.DatabaseConfig import org.briarproject.bramble.api.db.DatabaseConfig
import org.briarproject.bramble.api.event.EventBus 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 org.briarproject.briar.headless.messaging.HeadlessMessagingModule
import java.io.File import java.io.File
import java.util.Collections.emptyList import java.util.Collections.emptyList
import java.util.Collections.singletonList import java.util.Collections.singletonMap
import java.util.concurrent.Executor import java.util.concurrent.Executor
import javax.inject.Singleton import javax.inject.Singleton
import javax.net.SocketFactory import javax.net.SocketFactory
@@ -89,8 +88,9 @@ internal class HeadlessModule(private val appDir: File) {
override fun getDuplexFactories(): Collection<DuplexPluginFactory> = duplex override fun getDuplexFactories(): Collection<DuplexPluginFactory> = duplex
override fun getSimplexFactories(): Collection<SimplexPluginFactory> = emptyList() override fun getSimplexFactories(): Collection<SimplexPluginFactory> = emptyList()
override fun shouldPoll(): Boolean = true override fun shouldPoll(): Boolean = true
override fun getTransportPreferences(): List<Pair<TransportId, TransportId>> = // Prefer LAN to Bluetooth
singletonList(Pair(LanTcpConstants.ID, BluetoothConstants.ID)) override fun getTransportPreferences(): Map<TransportId, List<TransportId>> =
singletonMap(BluetoothConstants.ID, listOf(LanTcpConstants.ID))
} }
} }

View File

@@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper
import dagger.Module import dagger.Module
import dagger.Provides import dagger.Provides
import org.briarproject.bramble.api.FeatureFlags import org.briarproject.bramble.api.FeatureFlags
import org.briarproject.bramble.api.Pair
import org.briarproject.bramble.api.db.DatabaseConfig import org.briarproject.bramble.api.db.DatabaseConfig
import org.briarproject.bramble.api.plugin.BluetoothConstants import org.briarproject.bramble.api.plugin.BluetoothConstants
import org.briarproject.bramble.api.plugin.LanTcpConstants 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.forums.HeadlessForumModule
import org.briarproject.briar.headless.messaging.HeadlessMessagingModule import org.briarproject.briar.headless.messaging.HeadlessMessagingModule
import java.io.File import java.io.File
import java.util.*
import java.util.Collections.emptyList import java.util.Collections.emptyList
import java.util.Collections.singletonList
import javax.inject.Singleton import javax.inject.Singleton
@Module( @Module(
@@ -60,8 +59,9 @@ internal class HeadlessTestModule(private val appDir: File) {
override fun getDuplexFactories(): Collection<DuplexPluginFactory> = emptyList() override fun getDuplexFactories(): Collection<DuplexPluginFactory> = emptyList()
override fun getSimplexFactories(): Collection<SimplexPluginFactory> = emptyList() override fun getSimplexFactories(): Collection<SimplexPluginFactory> = emptyList()
override fun shouldPoll(): Boolean = false override fun shouldPoll(): Boolean = false
override fun getTransportPreferences(): List<Pair<TransportId, TransportId>> = // Prefer LAN to Bluetooth
singletonList(Pair(LanTcpConstants.ID, BluetoothConstants.ID)) override fun getTransportPreferences(): Map<TransportId, List<TransportId>> =
Collections.singletonMap(BluetoothConstants.ID, listOf(LanTcpConstants.ID))
} }
} }