@@ -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