Skip to content

Commit ab5db36

Browse files
committed
Support for address mapping to be able to work in NAT-ed environments.
1 parent fa70da2 commit ab5db36

File tree

1 file changed

+22
-1
lines changed
  • transport-parent/transport-netty/src/main/java/io/scalecube/transport/netty

1 file changed

+22
-1
lines changed

transport-parent/transport-netty/src/main/java/io/scalecube/transport/netty/TransportImpl.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public final class TransportImpl implements Transport {
5656
// Transport factory
5757
private final Receiver receiver;
5858
private final Sender sender;
59+
private final Function<Address, Address> addressMapper;
5960

6061
/**
6162
* Constructor with cofig as parameter.
@@ -65,9 +66,28 @@ public final class TransportImpl implements Transport {
6566
* @param sender transport sender part
6667
*/
6768
public TransportImpl(MessageCodec messageCodec, Receiver receiver, Sender sender) {
69+
this(messageCodec, receiver, sender, Function.identity());
70+
}
71+
72+
/**
73+
* Constructor with cofig as parameter.
74+
*
75+
* @param messageCodec message codec
76+
* @param receiver transport receiver part
77+
* @param sender transport sender part
78+
* @param addressMapper function to map addresses. Useful when running against NAT-ed
79+
* environments. Used during connection setup so that the actual connection is established
80+
* against <code>addressMapper.apply(origAddress) destination</code>
81+
*/
82+
public TransportImpl(
83+
MessageCodec messageCodec,
84+
Receiver receiver,
85+
Sender sender,
86+
Function<Address, Address> addressMapper) {
6887
this.messageCodec = messageCodec;
6988
this.receiver = receiver;
7089
this.sender = sender;
90+
this.addressMapper = addressMapper;
7191
}
7292

7393
private static Address prepareAddress(DisposableServer server) {
@@ -216,8 +236,9 @@ private ByteBuf encodeMessage(Message message) {
216236
}
217237

218238
private Mono<? extends Connection> connect(Address remoteAddress) {
239+
final Address mappedAddr = addressMapper.apply(remoteAddress);
219240
return sender
220-
.connect(remoteAddress)
241+
.connect(mappedAddr)
221242
.doOnSuccess(
222243
connection -> {
223244
connection

0 commit comments

Comments
 (0)