Skip to content

Commit add2616

Browse files
committed
Fix reconnection to clearnet addresses via Tor
1 parent e0a9c0a commit add2616

File tree

2 files changed

+12
-12
lines changed

2 files changed

+12
-12
lines changed

eclair-core/src/main/scala/fr/acinq/eclair/io/ReconnectionTask.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -187,19 +187,19 @@ object ReconnectionTask {
187187
// @formatter:on
188188

189189
def selectNodeAddress(nodeParams: NodeParams, nodeAddresses: Seq[NodeAddress]): Option[NodeAddress] = {
190-
// it doesn't make sense to mix tor and clearnet addresses, so we separate them and decide whether we use one or the other
191190
val torAddresses = nodeAddresses.collect { case o: OnionAddress => o }
192191
val clearnetAddresses = nodeAddresses diff torAddresses
193192
val selectedAddresses = nodeParams.socksProxy_opt match {
194-
case Some(params) if clearnetAddresses.nonEmpty && params.useForTor && (!params.useForIPv4 || !params.useForIPv6) =>
195-
// Remote has clearnet (and possibly tor addresses), and we support tor, but we have configured it to only use
196-
// tor when strictly necessary. In this case we will only connect over clearnet.
197-
clearnetAddresses
198-
case Some(params) if torAddresses.nonEmpty && params.useForTor =>
199-
// In all other cases, if they have a tor address and we support tor, we use tor.
200-
torAddresses
201-
case _ =>
202-
// Otherwise, if we don't support tor or they don't have a tor address, we use clearnet.
193+
case Some(socksProxy) =>
194+
if (socksProxy.useForTor) {
195+
// Tor is enabled, so we can connect to any type of addresses.
196+
nodeAddresses
197+
} else {
198+
// Tor is enabled, but for some reason tor addresses are not supported, we use clearnet addresses only.
199+
clearnetAddresses
200+
}
201+
case None =>
202+
// Otherwise, if we don't support tor, we use clearnet.
203203
clearnetAddresses
204204
}
205205
// finally, we pick an address at random

eclair-core/src/test/scala/fr/acinq/eclair/io/ReconnectionTaskSpec.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ class ReconnectionTaskSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike
247247
nodeParams.socksProxy_opt returns Some(socksParams)
248248
assert(ReconnectionTask.selectNodeAddress(nodeParams, List(clearnet)).contains(clearnet))
249249
assert(ReconnectionTask.selectNodeAddress(nodeParams, List(tor)).contains(tor))
250-
assert(ReconnectionTask.selectNodeAddress(nodeParams, List(clearnet, tor)).contains(clearnet))
250+
assert(ReconnectionTask.selectNodeAddress(nodeParams, List(clearnet, tor)).exists(Set(clearnet, tor)(_)))
251251
}
252252
{
253253
// tor supported and enabled for clearnet addresses: return tor addresses when available
@@ -258,7 +258,7 @@ class ReconnectionTaskSpec extends TestKitBaseClass with FixtureAnyFunSuiteLike
258258
nodeParams.socksProxy_opt returns Some(socksParams)
259259
assert(ReconnectionTask.selectNodeAddress(nodeParams, List(clearnet)).contains(clearnet))
260260
assert(ReconnectionTask.selectNodeAddress(nodeParams, List(tor)).contains(tor))
261-
assert(ReconnectionTask.selectNodeAddress(nodeParams, List(clearnet, tor)).contains(tor))
261+
assert(ReconnectionTask.selectNodeAddress(nodeParams, List(clearnet, tor)).exists(Set(clearnet, tor)(_)))
262262
}
263263
}
264264

0 commit comments

Comments
 (0)