Skip to content

Commit

Permalink
Backend(LN): catch NOnionException for TorConnect
Browse files Browse the repository at this point in the history
  • Loading branch information
parhamsaremi committed Nov 8, 2022
1 parent d51d215 commit db90318
Showing 1 changed file with 22 additions and 7 deletions.
29 changes: 22 additions & 7 deletions src/GWallet.Backend/UtxoCoin/Lightning/Network.fs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ open NBitcoin
open DotNetLightning.Peer
open DotNetLightning.Utils
open ResultUtils.Portability
open NOnion
open NOnion.Network
open NOnion.Directory
open NOnion.Services
Expand All @@ -36,7 +37,7 @@ type PeerDisconnectedError =
not self.Abruptly

type HandshakeError =
| TcpConnect of seq<SocketException>
| TcpConnect of seq<Exception>
| TcpAccept of seq<SocketException>
| DisconnectedOnAct1 of PeerDisconnectedError
| InvalidAct1 of PeerError
Expand All @@ -48,7 +49,7 @@ type HandshakeError =
member self.Message =
match self with
| TcpConnect errs ->
let messages = Seq.map (fun (err: SocketException) -> err.Message) errs
let messages = Seq.map (fun (err: Exception) -> err.Message) errs
SPrintF1 "TCP connection failed: %s" (String.concat "; " messages)
| TcpAccept errs ->
let messages = Seq.map (fun (err: SocketException) -> err.Message) errs
Expand Down Expand Up @@ -331,7 +332,7 @@ type internal TransportStream =
static member private TcpTransportConnect
(localEndPointOpt: Option<IPEndPoint>)
(remoteEndPoint: IPEndPoint)
: Async<Result<TcpClient, seq<SocketException>>> = async {
: Async<Result<TcpClient, seq<Exception>>> = async {
let client = new TcpClient (remoteEndPoint.AddressFamily)
match localEndPointOpt with
| Some localEndPoint ->
Expand All @@ -352,7 +353,13 @@ type internal TransportStream =
| ex ->
client.Close()
let socketExceptions = FindSingleException<SocketException> ex
return Error socketExceptions
let exceptions =
seq {
for socketException in socketExceptions do
yield socketException :> Exception
}

return Error exceptions
}

static member private AcceptAny (listener: IncomingConnectionMethod)
Expand Down Expand Up @@ -419,23 +426,31 @@ type internal TransportStream =

static member private TorTransportConnect
(nonionEndPoint: NOnionEndPoint)
: Async<Result<TorServiceClient, seq<SocketException>>> =
: Async<Result<TorServiceClient, seq<Exception>>> =
async {
let! directory = TorOperations.GetTorDirectory()
try
let! torClient = TorOperations.TorConnect directory nonionEndPoint.Url
Infrastructure.LogDebug <| SPrintF1 "Connected %s" nonionEndPoint.Url
return Ok torClient
with
| :? NOnionException as ex ->
return Error (ex :> Exception |> Seq.singleton)
| ex ->
let socketExceptions = FindSingleException<SocketException> ex
return Error socketExceptions
let exceptions =
seq {
for socketException in socketExceptions do
yield socketException :> Exception
}

return Error exceptions
}

static member private TransportConnect
(localEndPointOpt: Option<IPEndPoint>)
(node: NodeIdentifier)
: Async<Result<TransportClientType, seq<SocketException>>> =
: Async<Result<TransportClientType, seq<Exception>>> =
async {
match node with
| NodeIdentifier.TcpEndPoint remoteEndPoint ->
Expand Down

0 comments on commit db90318

Please sign in to comment.