Skip to content

Commit

Permalink
Ouroboros: add local signatures
Browse files Browse the repository at this point in the history
  • Loading branch information
locallycompact committed Apr 29, 2024
1 parent 980f608 commit ba8e9b3
Showing 1 changed file with 35 additions and 7 deletions.
42 changes: 35 additions & 7 deletions hydra-node/src/Hydra/Network/Ouroboros.hs
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,7 @@ import Hydra.Network.Ouroboros.Type (
import Network.Mux.Compat (
WithMuxBearer (..),
)
import Network.Socket (
AddrInfo (addrAddress),
SockAddr,
defaultHints,
getAddrInfo,
)
import Network.Socket (AddrInfo (addrAddress), SockAddr, Socket, defaultHints, getAddrInfo)
import Network.TypedProtocol.Codec (
AnyMessageAndAgency (..),
)
Expand All @@ -69,7 +64,7 @@ import Ouroboros.Network.ErrorPolicy (
WithAddr (WithAddr),
nullErrorPolicies,
)
import Ouroboros.Network.IOManager (withIOManager)
import Ouroboros.Network.IOManager (IOManager, withIOManager)
import Ouroboros.Network.Mux (
MiniProtocol (
MiniProtocol,
Expand Down Expand Up @@ -139,12 +134,26 @@ withOuroborosNetwork tracer localHost remoteHosts networkCallback between = do
{ broadcast = atomically . writeTChan bchan
}
where
resolveSockAddr :: Host -> IO SockAddr
resolveSockAddr Host{hostname, port} = do
is <- getAddrInfo (Just defaultHints) (Just $ toString hostname) (Just $ show port)
case is of
(info : _) -> pure $ addrAddress info
_ -> error "getAdrrInfo failed.. do proper error handling"

connect ::
IOManager ->
IO t ->
( t ->
OuroborosApplicationWithMinimalCtx
InitiatorMode
SockAddr
LByteString
IO
()
Void
) ->
IO Void
connect iomgr newBroadcastChannel app = do
-- REVIEW(SN): move outside to have this information available?
networkState <- newNetworkMutableState
Expand All @@ -160,6 +169,10 @@ withOuroborosNetwork tracer localHost remoteHosts networkCallback between = do
(subscriptionParams localAddr remoteAddrs)
(actualConnect iomgr newBroadcastChannel app)

subscriptionParams ::
SockAddr ->
[SockAddr] ->
SubscriptionParams a IPSubscriptionTarget
subscriptionParams localAddr remoteAddrs =
SubscriptionParams
{ spLocalAddresses = LocalAddresses (Just localAddr) Nothing Nothing
Expand All @@ -168,6 +181,12 @@ withOuroborosNetwork tracer localHost remoteHosts networkCallback between = do
, spSubscriptionTarget = IPSubscriptionTarget remoteAddrs (length remoteAddrs)
}

actualConnect ::
IOManager ->
IO t ->
(t -> OuroborosApplicationWithMinimalCtx 'InitiatorMode SockAddr LByteString IO () Void) ->
Socket ->
IO ()
actualConnect iomgr newBroadcastChannel app sn = do
chan <- newBroadcastChannel
connectToNodeSocket
Expand All @@ -180,12 +199,18 @@ withOuroborosNetwork tracer localHost remoteHosts networkCallback between = do
(unversionedProtocol (app chan))
sn
where
networkConnectTracers :: NetworkConnectTracers a v
networkConnectTracers =
NetworkConnectTracers
{ nctMuxTracer = nullTracer
, nctHandshakeTracer = nullTracer
}

withServerListening ::
IOManager ->
OuroborosApplicationWithMinimalCtx 'ResponderMode SockAddr LByteString IO a b ->
IO b ->
IO ()
withServerListening iomgr app continuation = do
networkState <- newNetworkMutableState
localAddr <- resolveSockAddr localHost
Expand All @@ -208,8 +233,10 @@ withOuroborosNetwork tracer localHost remoteHosts networkCallback between = do
$ \_addr serverAsync -> do
race_ (wait serverAsync) continuation
where
notConfigureSocket :: a -> b -> IO ()
notConfigureSocket _ _ = pure ()

networkServerTracers :: NetworkServerTracers SockAddr v
networkServerTracers =
NetworkServerTracers
{ nstMuxTracer = nullTracer
Expand All @@ -218,6 +245,7 @@ withOuroborosNetwork tracer localHost remoteHosts networkCallback between = do
, nstAcceptPolicyTracer = contramap (WithHost localHost . TraceAcceptPolicy) tracer
}

onIOException :: IOException -> IO ()
onIOException ioException =
throwIO $
NetworkServerListenException
Expand Down

0 comments on commit ba8e9b3

Please sign in to comment.