diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java
index bbf2e2744..9ebabbd66 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/bluetooth/AndroidBluetoothPluginFactory.java
@@ -67,7 +67,7 @@ public class AndroidBluetoothPluginFactory implements DuplexPluginFactory {
@Override
public DuplexPlugin createPlugin(PluginCallback callback) {
BluetoothConnectionLimiter connectionLimiter =
- new BluetoothConnectionLimiterImpl();
+ new BluetoothConnectionLimiterImpl(eventBus);
Backoff backoff = backoffFactory.createBackoff(MIN_POLLING_INTERVAL,
MAX_POLLING_INTERVAL, BACKOFF_BASE);
AndroidBluetoothPlugin plugin = new AndroidBluetoothPlugin(
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncSessionFactory.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncSessionFactory.java
index 2107c9a1f..a19e211fb 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncSessionFactory.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncSessionFactory.java
@@ -2,6 +2,7 @@ package org.briarproject.bramble.api.sync;
import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.bramble.api.transport.StreamWriter;
import java.io.InputStream;
@@ -14,10 +15,10 @@ public interface SyncSessionFactory {
SyncSession createIncomingSession(ContactId c, InputStream in,
PriorityHandler handler);
- SyncSession createSimplexOutgoingSession(ContactId c, int maxLatency,
- StreamWriter streamWriter);
+ SyncSession createSimplexOutgoingSession(ContactId c, TransportId t,
+ int maxLatency, StreamWriter streamWriter);
- SyncSession createDuplexOutgoingSession(ContactId c, int maxLatency,
- int maxIdleTime, StreamWriter streamWriter,
+ SyncSession createDuplexOutgoingSession(ContactId c, TransportId t,
+ int maxLatency, int maxIdleTime, StreamWriter streamWriter,
@Nullable Priority priority);
}
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/event/CloseSyncConnectionsEvent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/event/CloseSyncConnectionsEvent.java
new file mode 100644
index 000000000..92d2b3c19
--- /dev/null
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/event/CloseSyncConnectionsEvent.java
@@ -0,0 +1,26 @@
+package org.briarproject.bramble.api.sync.event;
+
+import org.briarproject.bramble.api.event.Event;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+
+import javax.annotation.concurrent.Immutable;
+
+/**
+ * An event that is broadcast when all sync connections using a given
+ * transport should be closed.
+ */
+@Immutable
+@NotNullByDefault
+public class CloseSyncConnectionsEvent extends Event {
+
+ private final TransportId transportId;
+
+ public CloseSyncConnectionsEvent(TransportId transportId) {
+ this.transportId = transportId;
+ }
+
+ public TransportId getTransportId() {
+ return transportId;
+ }
+}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/connection/DuplexSyncConnection.java b/bramble-core/src/main/java/org/briarproject/bramble/connection/DuplexSyncConnection.java
index 6053b10c9..33b90c68f 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/connection/DuplexSyncConnection.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/connection/DuplexSyncConnection.java
@@ -47,20 +47,24 @@ abstract class DuplexSyncConnection extends SyncConnection
@Override
public void interruptOutgoingSession() {
+ SyncSession out = null;
synchronized (interruptLock) {
if (outgoingSession == null) interruptWaiting = true;
- else outgoingSession.interrupt();
+ else out = outgoingSession;
}
+ if (out != null) out.interrupt();
}
void setOutgoingSession(SyncSession outgoingSession) {
+ boolean interruptWasWaiting = false;
synchronized (interruptLock) {
this.outgoingSession = outgoingSession;
if (interruptWaiting) {
- outgoingSession.interrupt();
+ interruptWasWaiting = true;
interruptWaiting = false;
}
}
+ if (interruptWasWaiting) outgoingSession.interrupt();
}
DuplexSyncConnection(KeyManager keyManager,
@@ -99,6 +103,7 @@ abstract class DuplexSyncConnection extends SyncConnection
w.getOutputStream(), ctx);
ContactId c = requireNonNull(ctx.getContactId());
return syncSessionFactory.createDuplexOutgoingSession(c,
- w.getMaxLatency(), w.getMaxIdleTime(), streamWriter, priority);
+ ctx.getTransportId(), w.getMaxLatency(), w.getMaxIdleTime(),
+ streamWriter, priority);
}
}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/connection/OutgoingSimplexSyncConnection.java b/bramble-core/src/main/java/org/briarproject/bramble/connection/OutgoingSimplexSyncConnection.java
index d91d444c2..a5ad6dfc8 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/connection/OutgoingSimplexSyncConnection.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/connection/OutgoingSimplexSyncConnection.java
@@ -72,7 +72,7 @@ class OutgoingSimplexSyncConnection extends SyncConnection implements Runnable {
w.getOutputStream(), ctx);
ContactId c = requireNonNull(ctx.getContactId());
return syncSessionFactory.createSimplexOutgoingSession(c,
- w.getMaxLatency(), streamWriter);
+ ctx.getTransportId(), w.getMaxLatency(), streamWriter);
}
}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiter.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiter.java
index 548d7c398..c3b115e58 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiter.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiter.java
@@ -23,17 +23,9 @@ interface BluetoothConnectionLimiter {
boolean canOpenContactConnection();
/**
- * Informs the limiter that a contact connection has been opened. The
- * limiter may close the new connection if key agreement is in progress.
- *
- * Returns false if the limiter has closed the new connection.
+ * Informs the limiter that the given connection has been opened.
*/
- boolean contactConnectionOpened(DuplexTransportConnection conn);
-
- /**
- * Informs the limiter that a key agreement connection has been opened.
- */
- void keyAgreementConnectionOpened(DuplexTransportConnection conn);
+ void connectionOpened(DuplexTransportConnection conn);
/**
* Informs the limiter that the given connection has been closed.
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiterImpl.java
index 296afdda8..e76bbafc6 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiterImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiterImpl.java
@@ -1,46 +1,48 @@
package org.briarproject.bramble.plugin.bluetooth;
+import org.briarproject.bramble.api.event.EventBus;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
+import org.briarproject.bramble.api.sync.event.CloseSyncConnectionsEvent;
-import java.io.IOException;
-import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Logger;
+import javax.annotation.concurrent.GuardedBy;
import javax.annotation.concurrent.ThreadSafe;
import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.bramble.util.LogUtils.logException;
+import static java.util.logging.Logger.getLogger;
+import static org.briarproject.bramble.api.plugin.BluetoothConstants.ID;
@NotNullByDefault
@ThreadSafe
class BluetoothConnectionLimiterImpl implements BluetoothConnectionLimiter {
private static final Logger LOG =
- Logger.getLogger(BluetoothConnectionLimiterImpl.class.getName());
+ getLogger(BluetoothConnectionLimiterImpl.class.getName());
+
+ private final EventBus eventBus;
private final Object lock = new Object();
- // The following are locking: lock
- private final LinkedList connections =
+ @GuardedBy("lock")
+ private final List connections =
new LinkedList<>();
+ @GuardedBy("lock")
private boolean keyAgreementInProgress = false;
+ BluetoothConnectionLimiterImpl(EventBus eventBus) {
+ this.eventBus = eventBus;
+ }
+
@Override
public void keyAgreementStarted() {
- List close;
synchronized (lock) {
keyAgreementInProgress = true;
- close = new ArrayList<>(connections);
- connections.clear();
}
- if (LOG.isLoggable(INFO)) {
- LOG.info("Key agreement started, closing " + close.size() +
- " connections");
- }
- for (DuplexTransportConnection conn : close) tryToClose(conn);
+ LOG.info("Key agreement started");
+ eventBus.broadcast(new CloseSyncConnectionsEvent(ID));
}
@Override
@@ -65,35 +67,12 @@ class BluetoothConnectionLimiterImpl implements BluetoothConnectionLimiter {
}
@Override
- public boolean contactConnectionOpened(DuplexTransportConnection conn) {
- boolean accept = true;
+ public void connectionOpened(DuplexTransportConnection conn) {
synchronized (lock) {
- if (keyAgreementInProgress) {
- LOG.info("Refusing contact connection during key agreement");
- accept = false;
- } else {
- LOG.info("Accepting contact connection");
- connections.add(conn);
- }
- }
- if (!accept) tryToClose(conn);
- return accept;
- }
-
- @Override
- public void keyAgreementConnectionOpened(DuplexTransportConnection conn) {
- synchronized (lock) {
- LOG.info("Accepting key agreement connection");
connections.add(conn);
- }
- }
-
- private void tryToClose(DuplexTransportConnection conn) {
- try {
- conn.getWriter().dispose(false);
- conn.getReader().dispose(false, false);
- } catch (IOException e) {
- logException(LOG, WARNING, e);
+ if (LOG.isLoggable(INFO)) {
+ LOG.info("Connection opened, " + connections.size() + " open");
+ }
}
}
@@ -101,8 +80,9 @@ class BluetoothConnectionLimiterImpl implements BluetoothConnectionLimiter {
public void connectionClosed(DuplexTransportConnection conn) {
synchronized (lock) {
connections.remove(conn);
- if (LOG.isLoggable(INFO))
+ if (LOG.isLoggable(INFO)) {
LOG.info("Connection closed, " + connections.size() + " open");
+ }
}
}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java
index 9187c538b..d8315df38 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java
@@ -232,10 +232,9 @@ abstract class BluetoothPlugin implements DuplexPlugin, EventListener {
return;
}
LOG.info("Connection received");
- if (connectionLimiter.contactConnectionOpened(conn)) {
- backoff.reset();
- callback.handleConnection(conn);
- }
+ connectionLimiter.connectionOpened(conn);
+ backoff.reset();
+ callback.handleConnection(conn);
if (!running) return;
}
}
@@ -327,8 +326,8 @@ abstract class BluetoothPlugin implements DuplexPlugin, EventListener {
String uuid = p.get(PROP_UUID);
if (isNullOrEmpty(uuid)) return null;
DuplexTransportConnection conn = connect(address, uuid);
- if (conn == null) return null;
- return connectionLimiter.contactConnectionOpened(conn) ? conn : null;
+ if (conn != null) connectionLimiter.connectionOpened(conn);
+ return conn;
}
@Override
@@ -384,7 +383,7 @@ abstract class BluetoothPlugin implements DuplexPlugin, EventListener {
LOG.info("Connecting to key agreement UUID " + uuid);
conn = connect(address, uuid);
}
- if (conn != null) connectionLimiter.keyAgreementConnectionOpened(conn);
+ if (conn != null) connectionLimiter.connectionOpened(conn);
return conn;
}
@@ -453,7 +452,7 @@ abstract class BluetoothPlugin implements DuplexPlugin, EventListener {
public KeyAgreementConnection accept() throws IOException {
DuplexTransportConnection conn = acceptConnection(ss);
if (LOG.isLoggable(INFO)) LOG.info(ID + ": Incoming connection");
- connectionLimiter.keyAgreementConnectionOpened(conn);
+ connectionLimiter.connectionOpened(conn);
return new KeyAgreementConnection(conn, ID);
}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java
index fc007cd0f..a74302d62 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java
@@ -11,6 +11,7 @@ import org.briarproject.bramble.api.event.EventListener;
import org.briarproject.bramble.api.lifecycle.IoExecutor;
import org.briarproject.bramble.api.lifecycle.event.LifecycleEvent;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.bramble.api.sync.Ack;
import org.briarproject.bramble.api.sync.Message;
import org.briarproject.bramble.api.sync.Offer;
@@ -19,6 +20,7 @@ import org.briarproject.bramble.api.sync.Request;
import org.briarproject.bramble.api.sync.SyncRecordWriter;
import org.briarproject.bramble.api.sync.SyncSession;
import org.briarproject.bramble.api.sync.Versions;
+import org.briarproject.bramble.api.sync.event.CloseSyncConnectionsEvent;
import org.briarproject.bramble.api.sync.event.GroupVisibilityUpdatedEvent;
import org.briarproject.bramble.api.sync.event.MessageRequestedEvent;
import org.briarproject.bramble.api.sync.event.MessageSharedEvent;
@@ -73,6 +75,7 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
private final EventBus eventBus;
private final Clock clock;
private final ContactId contactId;
+ private final TransportId transportId;
private final int maxLatency, maxIdleTime;
private final StreamWriter streamWriter;
private final SyncRecordWriter recordWriter;
@@ -90,14 +93,16 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
private volatile boolean interrupted = false;
DuplexOutgoingSession(DatabaseComponent db, Executor dbExecutor,
- EventBus eventBus, Clock clock, ContactId contactId, int maxLatency,
- int maxIdleTime, StreamWriter streamWriter,
- SyncRecordWriter recordWriter, @Nullable Priority priority) {
+ EventBus eventBus, Clock clock, ContactId contactId,
+ TransportId transportId, int maxLatency, int maxIdleTime,
+ StreamWriter streamWriter, SyncRecordWriter recordWriter,
+ @Nullable Priority priority) {
this.db = db;
this.dbExecutor = dbExecutor;
this.eventBus = eventBus;
this.clock = clock;
this.contactId = contactId;
+ this.transportId = transportId;
this.maxLatency = maxLatency;
this.maxIdleTime = maxIdleTime;
this.streamWriter = streamWriter;
@@ -230,6 +235,9 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
} else if (e instanceof LifecycleEvent) {
LifecycleEvent l = (LifecycleEvent) e;
if (l.getLifecycleState() == STOPPING) interrupt();
+ } else if (e instanceof CloseSyncConnectionsEvent) {
+ CloseSyncConnectionsEvent c = (CloseSyncConnectionsEvent) e;
+ if (c.getTransportId().equals(transportId)) interrupt();
}
}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java
index 9e1e62909..2697a2cfc 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java
@@ -11,11 +11,13 @@ import org.briarproject.bramble.api.event.EventListener;
import org.briarproject.bramble.api.lifecycle.IoExecutor;
import org.briarproject.bramble.api.lifecycle.event.LifecycleEvent;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.bramble.api.sync.Ack;
import org.briarproject.bramble.api.sync.Message;
import org.briarproject.bramble.api.sync.SyncRecordWriter;
import org.briarproject.bramble.api.sync.SyncSession;
import org.briarproject.bramble.api.sync.Versions;
+import org.briarproject.bramble.api.sync.event.CloseSyncConnectionsEvent;
import org.briarproject.bramble.api.transport.StreamWriter;
import java.io.IOException;
@@ -56,6 +58,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
private final Executor dbExecutor;
private final EventBus eventBus;
private final ContactId contactId;
+ private final TransportId transportId;
private final int maxLatency;
private final StreamWriter streamWriter;
private final SyncRecordWriter recordWriter;
@@ -65,12 +68,14 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
private volatile boolean interrupted = false;
SimplexOutgoingSession(DatabaseComponent db, Executor dbExecutor,
- EventBus eventBus, ContactId contactId, int maxLatency,
- StreamWriter streamWriter, SyncRecordWriter recordWriter) {
+ EventBus eventBus, ContactId contactId, TransportId transportId,
+ int maxLatency, StreamWriter streamWriter,
+ SyncRecordWriter recordWriter) {
this.db = db;
this.dbExecutor = dbExecutor;
this.eventBus = eventBus;
this.contactId = contactId;
+ this.transportId = transportId;
this.maxLatency = maxLatency;
this.streamWriter = streamWriter;
this.recordWriter = recordWriter;
@@ -123,6 +128,9 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
} else if (e instanceof LifecycleEvent) {
LifecycleEvent l = (LifecycleEvent) e;
if (l.getLifecycleState() == STOPPING) interrupt();
+ } else if (e instanceof CloseSyncConnectionsEvent) {
+ CloseSyncConnectionsEvent c = (CloseSyncConnectionsEvent) e;
+ if (c.getTransportId().equals(transportId)) interrupt();
}
}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java
index 64bf25c5d..4c590df73 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java
@@ -5,6 +5,7 @@ import org.briarproject.bramble.api.db.DatabaseComponent;
import org.briarproject.bramble.api.db.DatabaseExecutor;
import org.briarproject.bramble.api.event.EventBus;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.bramble.api.sync.Priority;
import org.briarproject.bramble.api.sync.PriorityHandler;
import org.briarproject.bramble.api.sync.SyncRecordReader;
@@ -58,23 +59,23 @@ class SyncSessionFactoryImpl implements SyncSessionFactory {
}
@Override
- public SyncSession createSimplexOutgoingSession(ContactId c,
+ public SyncSession createSimplexOutgoingSession(ContactId c, TransportId t,
int maxLatency, StreamWriter streamWriter) {
OutputStream out = streamWriter.getOutputStream();
SyncRecordWriter recordWriter =
recordWriterFactory.createRecordWriter(out);
- return new SimplexOutgoingSession(db, dbExecutor, eventBus, c,
+ return new SimplexOutgoingSession(db, dbExecutor, eventBus, c, t,
maxLatency, streamWriter, recordWriter);
}
@Override
- public SyncSession createDuplexOutgoingSession(ContactId c, int maxLatency,
- int maxIdleTime, StreamWriter streamWriter,
+ public SyncSession createDuplexOutgoingSession(ContactId c, TransportId t,
+ int maxLatency, int maxIdleTime, StreamWriter streamWriter,
@Nullable Priority priority) {
OutputStream out = streamWriter.getOutputStream();
SyncRecordWriter recordWriter =
recordWriterFactory.createRecordWriter(out);
- return new DuplexOutgoingSession(db, dbExecutor, eventBus, clock, c,
+ return new DuplexOutgoingSession(db, dbExecutor, eventBus, clock, c, t,
maxLatency, maxIdleTime, streamWriter, recordWriter, priority);
}
}
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
index 430a9150f..df8dc7b87 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
@@ -4,6 +4,7 @@ import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.db.DatabaseComponent;
import org.briarproject.bramble.api.db.Transaction;
import org.briarproject.bramble.api.event.EventBus;
+import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.bramble.api.sync.Ack;
import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.Message;
@@ -23,6 +24,7 @@ import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_IDS;
import static org.briarproject.bramble.test.TestUtils.getContactId;
import static org.briarproject.bramble.test.TestUtils.getMessage;
import static org.briarproject.bramble.test.TestUtils.getRandomId;
+import static org.briarproject.bramble.test.TestUtils.getTransportId;
public class SimplexOutgoingSessionTest extends BrambleMockTestCase {
@@ -36,14 +38,15 @@ public class SimplexOutgoingSessionTest extends BrambleMockTestCase {
private final Executor dbExecutor = new ImmediateExecutor();
private final ContactId contactId = getContactId();
+ private final TransportId transportId = getTransportId();
private final Message message = getMessage(new GroupId(getRandomId()));
private final MessageId messageId = message.getId();
@Test
public void testNothingToSend() throws Exception {
SimplexOutgoingSession session = new SimplexOutgoingSession(db,
- dbExecutor, eventBus, contactId, MAX_LATENCY, streamWriter,
- recordWriter);
+ dbExecutor, eventBus, contactId, transportId, MAX_LATENCY,
+ streamWriter, recordWriter);
Transaction noAckTxn = new Transaction(null, false);
Transaction noMsgTxn = new Transaction(null, false);
@@ -76,8 +79,8 @@ public class SimplexOutgoingSessionTest extends BrambleMockTestCase {
public void testSomethingToSend() throws Exception {
Ack ack = new Ack(singletonList(messageId));
SimplexOutgoingSession session = new SimplexOutgoingSession(db,
- dbExecutor, eventBus, contactId, MAX_LATENCY, streamWriter,
- recordWriter);
+ dbExecutor, eventBus, contactId, transportId, MAX_LATENCY,
+ streamWriter, recordWriter);
Transaction ackTxn = new Transaction(null, false);
Transaction noAckTxn = new Transaction(null, false);
Transaction msgTxn = new Transaction(null, false);
diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/bluetooth/JavaBluetoothPluginFactory.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/bluetooth/JavaBluetoothPluginFactory.java
index 59fc25c86..c931061cd 100644
--- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/bluetooth/JavaBluetoothPluginFactory.java
+++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/bluetooth/JavaBluetoothPluginFactory.java
@@ -56,7 +56,7 @@ public class JavaBluetoothPluginFactory implements DuplexPluginFactory {
@Override
public DuplexPlugin createPlugin(PluginCallback callback) {
BluetoothConnectionLimiter connectionLimiter =
- new BluetoothConnectionLimiterImpl();
+ new BluetoothConnectionLimiterImpl(eventBus);
Backoff backoff = backoffFactory.createBackoff(MIN_POLLING_INTERVAL,
MAX_POLLING_INTERVAL, BACKOFF_BASE);
JavaBluetoothPlugin plugin = new JavaBluetoothPlugin(connectionLimiter,