diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/duplex/DuplexPlugin.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/duplex/DuplexPlugin.java index 9e14e7ab5..f37a8b5fe 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/duplex/DuplexPlugin.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/duplex/DuplexPlugin.java @@ -41,10 +41,12 @@ public interface DuplexPlugin extends Plugin { /** * Attempts to connect to the remote peer specified in the given descriptor. * Returns null if no connection can be established. + * + * @param alice True if the local party is Alice */ @Nullable DuplexTransportConnection createKeyAgreementConnection( - byte[] remoteCommitment, BdfList descriptor); + byte[] remoteCommitment, BdfList descriptor, boolean alice); /** * Returns true if the plugin supports rendezvous connections. diff --git a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java index e71137f7b..79bb700aa 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/KeyAgreementConnector.java @@ -118,8 +118,8 @@ class KeyAgreementConnector { DuplexPlugin plugin = (DuplexPlugin) p; byte[] commitment = remotePayload.getCommitment(); BdfList descriptor = d.getDescriptor(); - connectionChooser.submit(new ReadableTask( - new ConnectorTask(plugin, commitment, descriptor))); + connectionChooser.submit(new ReadableTask(new ConnectorTask( + plugin, commitment, descriptor, alice))); } } @@ -148,15 +148,17 @@ class KeyAgreementConnector { private class ConnectorTask implements Callable { + private final DuplexPlugin plugin; private final byte[] commitment; private final BdfList descriptor; - private final DuplexPlugin plugin; + private final boolean alice; private ConnectorTask(DuplexPlugin plugin, byte[] commitment, - BdfList descriptor) { + BdfList descriptor, boolean alice) { this.plugin = plugin; this.commitment = commitment; this.descriptor = descriptor; + this.alice = alice; } @Nullable @@ -166,7 +168,7 @@ class KeyAgreementConnector { while (!stopped) { DuplexTransportConnection conn = plugin.createKeyAgreementConnection(commitment, - descriptor); + descriptor, alice); if (conn != null) { if (LOG.isLoggable(INFO)) LOG.info(plugin.getId() + ": Outgoing connection"); 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 e8cf9b07f..7c1ee4b59 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 @@ -430,15 +430,22 @@ abstract class BluetoothPlugin implements DuplexPlugin, EventListener { @Override public DuplexTransportConnection createKeyAgreementConnection( - byte[] commitment, BdfList descriptor) { + byte[] commitment, BdfList descriptor, boolean alice) { if (getState() != ACTIVE) return null; // No truncation necessary because COMMIT_LENGTH = 16 String uuid = UUID.nameUUIDFromBytes(commitment).toString(); DuplexTransportConnection conn; if (descriptor.size() == 1) { - if (LOG.isLoggable(INFO)) - LOG.info("Discovering address for key agreement UUID " + uuid); - conn = discoverAndConnect(uuid); + if (alice) { + if (LOG.isLoggable(INFO)) { + LOG.info("Discovering address for key agreement UUID " + + uuid); + } + conn = discoverAndConnect(uuid); + } else { + LOG.info("No address in key agreement descriptor"); + return null; + } } else { String address; try { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java index 87706b7e5..235ac5cb9 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java @@ -376,7 +376,7 @@ class LanTcpPlugin extends TcpPlugin { @Override public DuplexTransportConnection createKeyAgreementConnection( - byte[] commitment, BdfList descriptor) { + byte[] commitment, BdfList descriptor, boolean alice) { ServerSocket ss = state.getServerSocket(true); if (ss == null) return null; InterfaceAddress local = getLocalInterfaceAddress(ss.getInetAddress()); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java index f67121685..53ada12c1 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java @@ -367,7 +367,7 @@ abstract class TcpPlugin implements DuplexPlugin, EventListener { @Override public DuplexTransportConnection createKeyAgreementConnection( - byte[] commitment, BdfList descriptor) { + byte[] commitment, BdfList descriptor, boolean alice) { throw new UnsupportedOperationException(); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java index 5fc93f885..a2ba04ed2 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java @@ -708,7 +708,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { @Override public DuplexTransportConnection createKeyAgreementConnection( - byte[] commitment, BdfList descriptor) { + byte[] commitment, BdfList descriptor, boolean alice) { throw new UnsupportedOperationException(); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java index cd560e3a6..59f3b1923 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java @@ -276,7 +276,7 @@ public class LanTcpPluginTest extends BrambleTestCase { descriptor.add(local.getPort()); // Connect to the port DuplexTransportConnection d = plugin.createKeyAgreementConnection( - new byte[COMMIT_LENGTH], descriptor); + new byte[COMMIT_LENGTH], descriptor, true); assertNotNull(d); // Check that the connection was accepted assertTrue(latch.await(5, SECONDS)); diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemPlugin.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemPlugin.java index 53a668f20..4d2ee0e1e 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemPlugin.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemPlugin.java @@ -198,7 +198,7 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback { @Override public DuplexTransportConnection createKeyAgreementConnection( - byte[] commitment, BdfList descriptor) { + byte[] commitment, BdfList descriptor, boolean alice) { throw new UnsupportedOperationException(); }