Skip to content

Commit d38dfb3

Browse files
committed
[grid] Checking for IPv6 addresses
1 parent d777cf5 commit d38dfb3

File tree

2 files changed

+42
-7
lines changed

2 files changed

+42
-7
lines changed

java/server/src/org/openqa/selenium/events/zeromq/BoundZmqEventBus.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,13 @@
2525
import org.zeromq.ZContext;
2626
import org.zeromq.ZMQ;
2727

28+
import java.net.Inet6Address;
29+
import java.net.InetAddress;
30+
import java.net.UnknownHostException;
2831
import java.util.concurrent.ExecutorService;
2932
import java.util.concurrent.Executors;
3033
import java.util.function.Consumer;
34+
import java.util.logging.Level;
3135
import java.util.logging.Logger;
3236

3337
class BoundZmqEventBus implements EventBus {
@@ -46,12 +50,12 @@ class BoundZmqEventBus implements EventBus {
4650
LOG.info(String.format("XPUB binding to %s, XSUB binding to %s", xpubAddr, xsubAddr));
4751

4852
xpub = context.createSocket(SocketType.XPUB);
49-
xpub.setIPv6(true);
53+
xpub.setIPv6(xpubAddr.isIPv6);
5054
xpub.setImmediate(true);
5155
xpub.bind(xpubAddr.bindTo);
5256

5357
xsub = context.createSocket(SocketType.XSUB);
54-
xsub.setIPv6(true);
58+
xsub.setIPv6(xsubAddr.isIPv6);
5559
xsub.setImmediate(true);
5660
xsub.bind(xsubAddr.bindTo);
5761

@@ -89,7 +93,7 @@ public void close() {
8993

9094
private Addresses deriveAddresses(String host, String connection) {
9195
if (connection.startsWith("inproc:")) {
92-
return new Addresses(connection, connection);
96+
return new Addresses(connection, connection, false);
9397
}
9498

9599
if (!connection.startsWith("tcp://")) {
@@ -109,19 +113,35 @@ private Addresses deriveAddresses(String host, String connection) {
109113
host = hostName;
110114
}
111115

116+
boolean isAddressIPv6 = false;
117+
try {
118+
if (InetAddress.getByName(host) instanceof Inet6Address ) {
119+
isAddressIPv6 = true;
120+
if (!host.startsWith("[")) {
121+
host = String.format("[%s]", host);
122+
}
123+
}
124+
} catch (UnknownHostException e) {
125+
LOG.log(Level.WARNING, "Could not determine if host address is IPv6 or IPv4", e);
126+
}
127+
112128
return new Addresses(
113129
connection,
114-
String.format("tcp://%s:%d", host, port));
130+
String.format("tcp://%s:%d", host, port),
131+
isAddressIPv6
132+
);
115133
}
116134

117135
private static class Addresses {
118-
Addresses(String bindTo, String advertise) {
136+
Addresses(String bindTo, String advertise, boolean isIPv6) {
119137
this.bindTo = bindTo;
120138
this.advertise = advertise;
139+
this.isIPv6 = isIPv6;
121140
}
122141

123142
String bindTo;
124143
String advertise;
144+
boolean isIPv6;
125145

126146
@Override
127147
public String toString() {

java/server/src/org/openqa/selenium/events/zeromq/UnboundEventBus.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
import org.zeromq.ZContext;
3030
import org.zeromq.ZMQ;
3131

32+
import java.net.Inet6Address;
33+
import java.net.InetAddress;
34+
import java.net.URI;
35+
import java.net.URISyntaxException;
36+
import java.net.UnknownHostException;
3237
import java.util.LinkedList;
3338
import java.util.List;
3439
import java.util.Map;
@@ -40,6 +45,7 @@
4045
import java.util.concurrent.Executors;
4146
import java.util.concurrent.atomic.AtomicBoolean;
4247
import java.util.function.Consumer;
48+
import java.util.logging.Level;
4349
import java.util.logging.Logger;
4450

4551
class UnboundZmqEventBus implements EventBus {
@@ -64,12 +70,12 @@ class UnboundZmqEventBus implements EventBus {
6470
LOG.info(String.format("Connecting to %s and %s", publishConnection, subscribeConnection));
6571

6672
sub = context.createSocket(SocketType.SUB);
67-
sub.setIPv6(true);
73+
sub.setIPv6(isSubAddressIPv6(publishConnection));
6874
sub.connect(publishConnection);
6975
sub.subscribe(new byte[0]);
7076

7177
pub = context.createSocket(SocketType.PUB);
72-
pub.setIPv6(true);
78+
pub.setIPv6(isSubAddressIPv6(subscribeConnection));
7379
pub.connect(subscribeConnection);
7480

7581
ZMQ.Poller poller = context.createPoller(1);
@@ -131,6 +137,15 @@ class UnboundZmqEventBus implements EventBus {
131137
}
132138
}
133139

140+
private boolean isSubAddressIPv6(String connection) {
141+
try {
142+
return InetAddress.getByName(new URI(connection).getHost()) instanceof Inet6Address;
143+
} catch (UnknownHostException | URISyntaxException e) {
144+
LOG.log(Level.WARNING, String.format("Could not determine if the address %s is IPv6 or IPv4", connection), e);
145+
}
146+
return false;
147+
}
148+
134149
@Override
135150
public void addListener(Type type, Consumer<Event> onType) {
136151
Objects.requireNonNull(type, "Event type must be set.");

0 commit comments

Comments
 (0)