Skip to content

Commit 9aaffa2

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

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -187,19 +187,17 @@ 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.
193+
case Some(socksProxy) if !socksProxy.useForTor =>
194+
// Tor is enabled, but tor addresses are not supported, we use clearnet
197195
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.
196+
case Some(_) =>
197+
// Tor is enabled, so we can connect to any type of addresses.
198+
nodeAddresses
199+
case None =>
200+
// Otherwise, if we don't support tor, we use clearnet.
203201
clearnetAddresses
204202
}
205203
// 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)