diff --git a/src/main/java/io/bitsquare/BitSquare.java b/src/main/java/io/bitsquare/BitSquare.java index 6dd920c83f..5d0ae75bc5 100644 --- a/src/main/java/io/bitsquare/BitSquare.java +++ b/src/main/java/io/bitsquare/BitSquare.java @@ -45,6 +45,7 @@ public class BitSquare { private static String appName = "Bitsquare"; private static int clientPort; + private static String interfaceHint; public static String getAppName() { return appName; @@ -70,6 +71,10 @@ public class BitSquare { appName = appName + "-" + namespace.getString(BitsquareArgumentParser.NAME_FLAG); } + if (namespace.getString(BitsquareArgumentParser.INFHINT_FLAG) != null) { + interfaceHint = namespace.getString(BitsquareArgumentParser.INFHINT_FLAG); + } + if (namespace.getBoolean(BitsquareArgumentParser.SEED_FLAG) == true) { Integer port = BitsquareArgumentParser.PORT_DEFAULT; if (namespace.getString(BitsquareArgumentParser.PORT_FLAG) != null) { @@ -80,7 +85,7 @@ public class BitSquare { ActorRef seedNode = actorSystem.actorOf(DHTManager.getProps(), DHTManager.SEED_NAME); Inbox inbox = Inbox.create(actorSystem); - inbox.send(seedNode, new InitializePeer(Number160.createHash("localhost"), port, null)); + inbox.send(seedNode, new InitializePeer(Number160.createHash("localhost"), port, interfaceHint, null)); Thread seedNodeThread = new Thread(() -> { Boolean quit = false; diff --git a/src/main/java/io/bitsquare/msg/DHTSeedService.java b/src/main/java/io/bitsquare/msg/DHTSeedService.java index f13b223756..829815c83b 100644 --- a/src/main/java/io/bitsquare/msg/DHTSeedService.java +++ b/src/main/java/io/bitsquare/msg/DHTSeedService.java @@ -42,6 +42,6 @@ public class DHTSeedService extends ActorService { public void initializePeer(String id, Integer port) { // TODO hard coded seed peer config for now, should read from config properties file - send(new InitializePeer(Number160.createHash(id), port, null)); + send(new InitializePeer(Number160.createHash(id), port, null, null)); } } diff --git a/src/main/java/io/bitsquare/msg/actor/DHTManager.java b/src/main/java/io/bitsquare/msg/actor/DHTManager.java index 25e13d90cc..b894155767 100644 --- a/src/main/java/io/bitsquare/msg/actor/DHTManager.java +++ b/src/main/java/io/bitsquare/msg/actor/DHTManager.java @@ -20,6 +20,7 @@ package io.bitsquare.msg.actor; import io.bitsquare.msg.actor.command.InitializePeer; import io.bitsquare.msg.actor.event.PeerInitialized; +import net.tomp2p.connection.Bindings; import net.tomp2p.dht.PeerBuilderDHT; import net.tomp2p.dht.PeerDHT; import net.tomp2p.nat.PeerBuilderNAT; @@ -48,6 +49,7 @@ public class DHTManager extends AbstractActor { return Props.create(DHTManager.class); } + private Bindings bindings; private Peer peer; private PeerDHT peerDHT; private PeerNAT peerNAT; @@ -58,7 +60,11 @@ public class DHTManager extends AbstractActor { log.debug("Received message: {}", ip); try { - peer = new PeerBuilder(ip.getPeerId()).ports(ip.getPort()).start(); + bindings = new Bindings(); + if (ip.getInterfaceHint() != null) { + bindings.addInterface(ip.getInterfaceHint()); + } + peer = new PeerBuilder(ip.getPeerId()).ports(ip.getPort()).bindings(bindings).start(); peerDHT = new PeerBuilderDHT(peer).start(); peerNAT = new PeerBuilderNAT(peer).start(); diff --git a/src/main/java/io/bitsquare/msg/actor/command/InitializePeer.java b/src/main/java/io/bitsquare/msg/actor/command/InitializePeer.java index 473e18f9b0..38f70ac393 100644 --- a/src/main/java/io/bitsquare/msg/actor/command/InitializePeer.java +++ b/src/main/java/io/bitsquare/msg/actor/command/InitializePeer.java @@ -30,11 +30,15 @@ public class InitializePeer { private final Number160 peerId; private final Integer port; + private final String interfaceHint; + private final Collection bootstrapPeers; - public InitializePeer(Number160 peerId, Integer port, Collection bootstrapPeers) { + public InitializePeer(Number160 peerId, Integer port, String interfaceHint, + Collection bootstrapPeers) { this.peerId = peerId; this.port = port; + this.interfaceHint = interfaceHint; this.bootstrapPeers = bootstrapPeers; } @@ -46,6 +50,10 @@ public class InitializePeer { return port; } + public String getInterfaceHint() { + return interfaceHint; + } + public Collection getBootstrapPeers() { return bootstrapPeers; } diff --git a/src/main/java/io/bitsquare/util/BitsquareArgumentParser.java b/src/main/java/io/bitsquare/util/BitsquareArgumentParser.java index 593e581fdb..890c53a7d3 100644 --- a/src/main/java/io/bitsquare/util/BitsquareArgumentParser.java +++ b/src/main/java/io/bitsquare/util/BitsquareArgumentParser.java @@ -28,6 +28,7 @@ public class BitsquareArgumentParser { public static String SEED_FLAG = "seed"; public static String PORT_FLAG = "port"; public static Integer PORT_DEFAULT = 5000; + public static String INFHINT_FLAG = "interface"; public static String NAME_FLAG = "name"; private final ArgumentParser parser; @@ -42,6 +43,8 @@ public class BitsquareArgumentParser { parser.addArgument("-p", "--"+PORT_FLAG) .setDefault(PORT_DEFAULT) .help("IP port to listen on."); + parser.addArgument("-i", "--"+INFHINT_FLAG) + .help("interface to listen on."); parser.addArgument("-n", "--"+NAME_FLAG) .help("Append name to application name."); }