@@ -44,14 +44,12 @@ import Control.Concurrent.Class.MonadSTM.Strict (
4444 )
4545import Control.Exception (bracket )
4646import Control.Monad (forever )
47- import Control.Tracer ( nullTracer )
47+ import Control.Tracer
4848import Data.ByteString.Lazy.Char8 (ByteString )
4949import qualified Data.Map.Strict as Map
5050import Data.Maybe (fromJust )
51- import Data.Void (Void )
52- import qualified Network.Mux as Mux
51+ import qualified Network.Socket as Socket
5352import Network.TypedProtocol.Peer (Peer (.. ))
54- import Network.TypedProtocol.Stateful.Codec ()
5553import qualified Network.TypedProtocol.Stateful.Peer as St
5654import Ouroboros.Consensus.Block (CodecConfig , HasHeader , Point , StandardHash , castPoint )
5755import Ouroboros.Consensus.Config (TopLevelConfig , configCodec )
@@ -65,7 +63,6 @@ import Ouroboros.Consensus.Node.DbMarker ()
6563import Ouroboros.Consensus.Node.InitStorage ()
6664import Ouroboros.Consensus.Node.NetworkProtocolVersion (
6765 BlockNodeToClientVersion ,
68- NodeToClientVersion ,
6966 SupportedNetworkProtocolVersion ,
7067 latestReleasedNodeVersion ,
7168 supportedNodeToClientVersions ,
@@ -87,25 +84,22 @@ import Ouroboros.Network.Block (
8784 )
8885import Ouroboros.Network.Channel (Channel )
8986import Ouroboros.Network.Driver.Simple (runPeer )
90- import qualified Ouroboros.Network.Driver.Stateful as St (runPeer )
91- import Ouroboros.Network.IOManager (IOManager )
92- import qualified Ouroboros.Network.IOManager as IOManager
87+ import qualified Ouroboros.Network.Driver.Stateful as Stateful
9388import Ouroboros.Network.Magic (NetworkMagic )
94- import Ouroboros.Network.Mux (OuroborosApplicationWithMinimalCtx )
95- import Ouroboros.Network.NodeToClient (NodeToClientVersionData (.. ))
96- import qualified Ouroboros.Network.NodeToClient as NodeToClient
97- import Ouroboros.Network.NodeToNode (Versions )
89+ import Ouroboros.Network.NodeToClient
9890import Ouroboros.Network.Protocol.ChainSync.Server (
9991 ChainSyncServer (.. ),
10092 ServerStIdle (.. ),
10193 ServerStIntersect (.. ),
10294 ServerStNext (SendMsgRollBackward , SendMsgRollForward ),
10395 chainSyncServerPeer ,
10496 )
105- import Ouroboros.Network.Protocol.Handshake.Version ( simpleSingletonVersions )
97+ import Ouroboros.Network.Protocol.Handshake
10698import qualified Ouroboros.Network.Protocol.LocalStateQuery.Type as LocalStateQuery
107- import Ouroboros.Network.Snocket (LocalAddress , LocalSnocket , LocalSocket (.. ))
99+ import Ouroboros.Network.Server.Simple as Server
100+ import Ouroboros.Network.Snocket
108101import qualified Ouroboros.Network.Snocket as Snocket
102+ import Ouroboros.Network.Socket
109103import Ouroboros.Network.Util.ShowProxy (Proxy (.. ), ShowProxy (.. ))
110104
111105{- HLINT ignore "Use readTVarIO" -}
@@ -212,33 +206,41 @@ runLocalServer ::
212206 FilePath ->
213207 StrictTVar IO (ChainProducerState blk ) ->
214208 IO ()
215- runLocalServer iom codecConfig netMagic localDomainSock chainProdState =
216- withSnocket iom localDomainSock $ \ localSocket localSnocket -> do
217- networkState <- NodeToClient. newNetworkMutableState
218- _ <-
219- NodeToClient. withServer
220- localSnocket
221- NodeToClient. nullNetworkServerTracers -- debuggingNetworkServerTracers
222- networkState
223- localSocket
224- (versions chainProdState)
225- NodeToClient. networkErrorPolicies
226- pure ()
209+ runLocalServer iom codecConfig netMagic localDomainSock chainProdState = do
210+ _ <-
211+ Server. with
212+ (Snocket. socketSnocket iom)
213+ makeSocketBearer
214+ (\ _ _ -> pure () )
215+ (Socket. SockAddrUnix localDomainSock)
216+ ( HandshakeArguments
217+ { haHandshakeTracer = nullTracer -- showTracing stdoutTracer
218+ , haBearerTracer = nullTracer -- showTracing stdoutTracer
219+ , haHandshakeCodec = codecHandshake nodeToClientVersionCodec
220+ , haVersionDataCodec = cborTermVersionDataCodec nodeToClientCodecCBORTerm
221+ , haAcceptVersion = acceptableVersion
222+ , haQueryVersion = queryVersion
223+ , haTimeLimits = noTimeLimitsHandshake
224+ }
225+ )
226+ (versions chainProdState)
227+ (\ _ serverAsync -> wait serverAsync)
228+ pure ()
227229 where
228230 versions ::
229231 StrictTVar IO (ChainProducerState blk ) ->
230232 Versions
231233 NodeToClientVersion
232234 NodeToClientVersionData
233- (OuroborosApplicationWithMinimalCtx 'Mux. ResponderMode LocalAddress ByteString IO Void () )
235+ (SomeResponderApplication Socket. SockAddr ByteString IO () )
234236 versions state =
235237 let version = fromJust $ snd $ latestReleasedNodeVersion (Proxy @ blk )
236238 allVersions = supportedNodeToClientVersions (Proxy @ blk )
237239 blockVersion = fromJust $ Map. lookup version allVersions
238240 in simpleSingletonVersions
239241 version
240242 (NodeToClientVersionData netMagic False )
241- (\ versionData -> NTC. responder version versionData $ mkApps state version blockVersion (NTC. defaultCodecs codecConfig blockVersion version))
243+ (\ versionData' -> SomeResponderApplication $ NTC. responder version versionData' $ mkApps state version blockVersion (NTC. defaultCodecs codecConfig blockVersion version))
242244
243245 mkApps ::
244246 StrictTVar IO (ChainProducerState blk ) ->
@@ -260,11 +262,10 @@ runLocalServer iom codecConfig netMagic localDomainSock chainProdState =
260262 IO (() , Maybe ByteString )
261263 chainSyncServer' _them channel =
262264 runPeer
263- nullTracer -- TODO add a tracer!
265+ nullTracer -- (showTracing stdoutTracer)
264266 (cChainSyncCodec codecs)
265267 channel
266- $ chainSyncServerPeer
267- $ chainSyncServer state codecConfig blockVersion
268+ (chainSyncServerPeer $ chainSyncServer state codecConfig blockVersion)
268269
269270 txSubmitServer ::
270271 localPeer ->
@@ -277,13 +278,9 @@ runLocalServer iom codecConfig netMagic localDomainSock chainProdState =
277278 channel
278279 (Effect (forever $ threadDelay 3_600_000_000 ))
279280
280- stateQueryServer ::
281- localPeer ->
282- Channel IO ByteString ->
283- IO (() , Maybe ByteString )
284281 stateQueryServer _them channel =
285- St . runPeer
286- nullTracer
282+ Stateful . runPeer
283+ nullTracer -- (showTracing stdoutTracer)
287284 (cStateQueryCodec codecs)
288285 channel
289286 LocalStateQuery. StateIdle
@@ -354,8 +351,7 @@ chainSyncServer state codec _blockVersion =
354351 (Tip blk , ChainUpdate blk blk ) ->
355352 ServerStNext (Serialised blk ) (Point blk ) (Tip blk ) m ()
356353 sendNext r (tip, AddBlock b) =
357- -- SendMsgRollForward -- (Serialised $ toLazyByteString $ encodeNodeToClient codec blockVersion b) tip (idle' r)
358- SendMsgRollForward (mkSerialised (encodeDisk codec) b) tip (idle' r) -- encodeNodeToClient codec blockVersion -- mkSerialised encode b
354+ SendMsgRollForward (mkSerialised (encodeDisk codec) b) tip (idle' r)
359355 sendNext r (tip, RollBack p) = SendMsgRollBackward (castPoint p) tip (idle' r)
360356
361357 newFollower :: m FollowerId
@@ -404,36 +400,3 @@ chainSyncServer state codec _blockVersion =
404400 writeTVar state cps'
405401 let chain = chainDB cps'
406402 pure (castTip (headTip chain), u)
407-
408- withSnocket ::
409- forall a .
410- IOManager ->
411- FilePath ->
412- (LocalSocket -> LocalSnocket -> IO a ) ->
413- IO a
414- withSnocket iocp localDomainSock k =
415- bracket localServerInit localServerCleanup localServerBody
416- where
417- localServerInit :: IO (LocalSocket , LocalSnocket )
418- localServerInit = do
419- let sn = Snocket. localSnocket iocp
420- sd <-
421- Snocket. open
422- sn
423- ( Snocket. addrFamily sn $
424- Snocket. localAddressFromPath localDomainSock
425- )
426- pure (sd, sn)
427-
428- -- We close the socket here, even if it was provided for us.
429- localServerCleanup :: (LocalSocket , LocalSnocket ) -> IO ()
430- localServerCleanup (sd, sn) = Snocket. close sn sd
431-
432- localServerBody :: (LocalSocket , LocalSnocket ) -> IO a
433- localServerBody (sd, sn) = do
434- Snocket. bind sn sd (Snocket. localAddressFromPath localDomainSock)
435- Snocket. listen sn sd
436- k sd sn
437-
438- withIOManager :: (IOManager -> IO a ) -> IO a
439- withIOManager = IOManager. withIOManager
0 commit comments