Skip to content

Commit 4e9b21c

Browse files
ogolbergacogoluegnes
authored andcommitted
Enable DNS round robin with TLS hostname verification
(cherry picked from commit 58e14f8) Conflicts: src/main/java/com/rabbitmq/client/ConnectionFactory.java
1 parent 246e41d commit 4e9b21c

File tree

6 files changed

+40
-10
lines changed

6 files changed

+40
-10
lines changed

src/main/java/com/rabbitmq/client/Address.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.rabbitmq.client;
1818

19+
import java.net.InetSocketAddress;
1920
import org.slf4j.Logger;
2021
import org.slf4j.LoggerFactory;
2122

@@ -161,6 +162,13 @@ public static Address parseAddress(String addressString) {
161162
}
162163
}
163164

165+
/**
166+
* Construct an InetSocketAddress for this address with a specific port
167+
*/
168+
public InetSocketAddress toInetSocketAddress(int port) {
169+
return new InetSocketAddress(getHost(), port);
170+
}
171+
164172
/**
165173
* Array-based factory method: takes an array of formatted address strings as construction parameter
166174
* @param addresses array of strings of form "host[:port],..."
@@ -191,5 +199,4 @@ public static Address[] parseAddresses(String addresses) {
191199
@Override public String toString() {
192200
return _port == -1 ? _host : _host + ":" + _port;
193201
}
194-
195202
}

src/main/java/com/rabbitmq/client/ConnectionFactory.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1343,10 +1343,10 @@ public Connection newConnection(ExecutorService executor, String connectionName)
13431343
}
13441344

13451345
protected AddressResolver createAddressResolver(List<Address> addresses) {
1346-
if(addresses.size() == 1 && !isSSL()) {
1347-
return new DnsRecordIpAddressResolver(addresses.get(0), isSSL());
1348-
} else {
1346+
if (addresses.size() > 1) {
13491347
return new ListAddressResolver(addresses);
1348+
} else {
1349+
return new DnsRecordIpAddressResolver(addresses.get(0), isSSL());
13501350
}
13511351
}
13521352

src/main/java/com/rabbitmq/client/DnsRecordIpAddressResolver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ public List<Address> getAddresses() throws UnknownHostException {
7272

7373
InetAddress[] inetAddresses = resolveIpAddresses(hostName);
7474

75-
List<Address> addresses = new ArrayList<Address>();
75+
List<Address> addresses = new ArrayList<>();
7676
for (InetAddress inetAddress : inetAddresses) {
77-
addresses.add(new Address(inetAddress.getHostAddress(), portNumber));
77+
addresses.add(new ResolvedInetAddress(inetAddress, portNumber));
7878
}
7979
return addresses;
8080
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.rabbitmq.client;
2+
3+
import java.net.InetAddress;
4+
import java.net.InetSocketAddress;
5+
6+
public class ResolvedInetAddress extends Address {
7+
private final InetAddress inetAddress;
8+
9+
public ResolvedInetAddress(InetAddress inetAddress, int port) {
10+
super(inetAddress.getHostAddress(), port);
11+
this.inetAddress = inetAddress;
12+
}
13+
14+
public ResolvedInetAddress(InetAddress inetAddress) {
15+
super(inetAddress.getHostAddress());
16+
this.inetAddress = inetAddress;
17+
}
18+
19+
@Override
20+
public InetSocketAddress toInetSocketAddress(int port) {
21+
return new InetSocketAddress(inetAddress, port);
22+
}
23+
}

src/main/java/com/rabbitmq/client/impl/SocketFrameHandlerFactory.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import com.rabbitmq.client.Address;
1919
import com.rabbitmq.client.ConnectionFactory;
20+
import com.rabbitmq.client.ResolvedInetAddress;
2021
import com.rabbitmq.client.SocketConfigurator;
2122
import com.rabbitmq.client.SslContextFactory;
2223

@@ -51,14 +52,13 @@ public SocketFrameHandlerFactory(int connectionTimeout, SocketFactory socketFact
5152
}
5253

5354
public FrameHandler create(Address addr, String connectionName) throws IOException {
54-
String hostName = addr.getHost();
5555
int portNumber = ConnectionFactory.portOrDefault(addr.getPort(), ssl);
5656
Socket socket = null;
5757
try {
5858
socket = createSocket(connectionName);
5959
configurator.configure(socket);
60-
socket.connect(new InetSocketAddress(hostName, portNumber),
61-
connectionTimeout);
60+
61+
socket.connect(addr.toInetSocketAddress(portNumber), connectionTimeout);
6262
return create(socket);
6363
} catch (IOException ioe) {
6464
quietTrySocketClose(socket);

src/main/java/com/rabbitmq/client/impl/nio/SocketChannelFrameHandlerFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public FrameHandler create(Address addr, String connectionName) throws IOExcepti
8585
}
8686
}
8787

88-
SocketAddress address = new InetSocketAddress(addr.getHost(), portNumber);
88+
SocketAddress address = addr.toInetSocketAddress(portNumber);
8989
// No Sonar: the channel is closed in case of error and it cannot
9090
// be closed here because it's part of the state of the connection
9191
// to be returned.

0 commit comments

Comments
 (0)