diff --git a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java b/briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java index 499eb9d9b71a15e337f07c09d300c35bdf7a4ed2..34de50400f325671e808ae066af2cf7bab94278c 100644 --- a/briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java +++ b/briar-core/src/org/briarproject/plugins/tcp/LanTcpPlugin.java @@ -53,12 +53,12 @@ class LanTcpPlugin extends TcpPlugin { } @Override - protected List<SocketAddress> getLocalSocketAddresses() { + protected List<InetSocketAddress> getLocalSocketAddresses() { // Use the same address and port as last time if available TransportProperties p = callback.getLocalProperties(); String oldIpPorts = p.get(PROP_IP_PORTS); List<InetSocketAddress> olds = parseSocketAddresses(oldIpPorts); - List<SocketAddress> locals = new LinkedList<SocketAddress>(); + List<InetSocketAddress> locals = new LinkedList<InetSocketAddress>(); for (InetAddress local : getLocalIpAddresses()) { if (isAcceptableAddress(local)) { // If this is the old address, try to use the same port @@ -168,7 +168,9 @@ class LanTcpPlugin extends TcpPlugin { @Override public KeyAgreementListener createKeyAgreementListener(byte[] commitment) { ServerSocket ss = null; - for (SocketAddress addr : getLocalSocketAddresses()) { + for (InetSocketAddress addr : getLocalSocketAddresses()) { + // Don't try to reuse the same port we use for contact connections + addr = new InetSocketAddress(addr.getAddress(), 0); try { ss = new ServerSocket(); ss.bind(addr); diff --git a/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java b/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java index 5fc8742fdc312fd2fdbb6e5d738f18be17d44b5d..fab2a1cbb57a9f0afb91cd0098a980c65df344f5 100644 --- a/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java +++ b/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java @@ -51,7 +51,7 @@ abstract class TcpPlugin implements DuplexPlugin { * Returns zero or more socket addresses on which the plugin should listen, * in order of preference. At most one of the addresses will be bound. */ - protected abstract List<SocketAddress> getLocalSocketAddresses(); + protected abstract List<InetSocketAddress> getLocalSocketAddresses(); /** * Adds the address on which the plugin is listening to the transport diff --git a/briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java b/briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java index bc54da0ae4f089e42f9a7f22509c709d431fb3de..82c3221a5b65cf99311a255321dbf87b16cd173d 100644 --- a/briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java +++ b/briar-core/src/org/briarproject/plugins/tcp/WanTcpPlugin.java @@ -9,7 +9,6 @@ import org.briarproject.api.properties.TransportProperties; import java.net.Inet4Address; import java.net.InetAddress; import java.net.InetSocketAddress; -import java.net.SocketAddress; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -37,11 +36,11 @@ class WanTcpPlugin extends TcpPlugin { } @Override - protected List<SocketAddress> getLocalSocketAddresses() { + protected List<InetSocketAddress> getLocalSocketAddresses() { // Use the same address and port as last time if available TransportProperties p = callback.getLocalProperties(); InetSocketAddress old = parseSocketAddress(p.get(PROP_IP_PORT)); - List<SocketAddress> addrs = new LinkedList<SocketAddress>(); + List<InetSocketAddress> addrs = new LinkedList<InetSocketAddress>(); for (InetAddress a : getLocalIpAddresses()) { if (isAcceptableAddress(a)) { // If this is the old address, try to use the same port