Safe Haskell | None |
---|---|
Language | Haskell2010 |
This is the starting point for a module that will bring together the overall node to client protocol, as a collection of mini-protocols.
Synopsis
- nodeToClientProtocols :: ( ConnectionId addr -> STM m ControlMessage -> NodeToClientProtocols appType bytes m a b) -> NodeToClientVersion -> OuroborosApplication appType addr bytes m a b
-
data
NodeToClientProtocols
appType bytes m a b =
NodeToClientProtocols
{
- localChainSyncProtocol :: RunMiniProtocol appType bytes m a b
- localTxSubmissionProtocol :: RunMiniProtocol appType bytes m a b
- localStateQueryProtocol :: RunMiniProtocol appType bytes m a b
- localTxMonitorProtocol :: RunMiniProtocol appType bytes m a b
- data NodeToClientVersion
- newtype NodeToClientVersionData = NodeToClientVersionData { }
-
data
NetworkConnectTracers
addr vNumber =
NetworkConnectTracers
{
- nctMuxTracer :: Tracer IO ( WithMuxBearer ( ConnectionId addr) MuxTrace )
- nctHandshakeTracer :: Tracer IO ( WithMuxBearer ( ConnectionId addr) ( TraceSendRecv ( Handshake vNumber Term )))
- nullNetworkConnectTracers :: NetworkConnectTracers addr vNumber
- connectTo :: LocalSnocket -> NetworkConnectTracers LocalAddress NodeToClientVersion -> Versions NodeToClientVersion NodeToClientVersionData ( OuroborosApplication InitiatorMode LocalAddress ByteString IO a b) -> FilePath -> IO ()
-
data
NetworkServerTracers
addr vNumber =
NetworkServerTracers
{
- nstMuxTracer :: Tracer IO ( WithMuxBearer ( ConnectionId addr) MuxTrace )
- nstHandshakeTracer :: Tracer IO ( WithMuxBearer ( ConnectionId addr) ( TraceSendRecv ( Handshake vNumber Term )))
- nstErrorPolicyTracer :: Tracer IO ( WithAddr addr ErrorPolicyTrace )
- nstAcceptPolicyTracer :: Tracer IO AcceptConnectionsPolicyTrace
- nullNetworkServerTracers :: NetworkServerTracers addr vNumber
-
data
NetworkMutableState
addr =
NetworkMutableState
{
- nmsConnectionTable :: ConnectionTable IO addr
- nmsPeerStates :: StrictTVar IO ( PeerStates IO addr)
- newNetworkMutableState :: IO ( NetworkMutableState addr)
- newNetworkMutableStateSTM :: STM ( NetworkMutableState addr)
- cleanNetworkMutableState :: NetworkMutableState addr -> IO ()
- withServer :: LocalSnocket -> NetworkServerTracers LocalAddress NodeToClientVersion -> NetworkMutableState LocalAddress -> LocalSocket -> Versions NodeToClientVersion NodeToClientVersionData ( OuroborosApplication ResponderMode LocalAddress ByteString IO a b) -> ErrorPolicies -> IO Void
- type NetworkClientSubcriptionTracers = NetworkSubscriptionTracers Identity LocalAddress NodeToClientVersion
-
data
NetworkSubscriptionTracers
withIPList addr vNumber =
NetworkSubscriptionTracers
{
- nsMuxTracer :: Tracer IO ( WithMuxBearer ( ConnectionId addr) MuxTrace )
- nsHandshakeTracer :: Tracer IO ( WithMuxBearer ( ConnectionId addr) ( TraceSendRecv ( Handshake vNumber Term )))
- nsErrorPolicyTracer :: Tracer IO ( WithAddr addr ErrorPolicyTrace )
- nsSubscriptionTracer :: Tracer IO (withIPList ( SubscriptionTrace addr))
-
data
ClientSubscriptionParams
a =
ClientSubscriptionParams
{
- cspAddress :: ! LocalAddress
- cspConnectionAttemptDelay :: !( Maybe DiffTime )
- cspErrorPolicies :: ! ErrorPolicies
- ncSubscriptionWorker :: forall mode x y. HasInitiator mode ~ True => LocalSnocket -> NetworkClientSubcriptionTracers -> NetworkMutableState LocalAddress -> ClientSubscriptionParams () -> Versions NodeToClientVersion NodeToClientVersionData ( OuroborosApplication mode LocalAddress ByteString IO x y) -> IO Void
- chainSyncPeerNull :: forall (header :: Type ) (point :: Type ) (tip :: Type ) m a. MonadTimer m => Peer ( ChainSync header point tip) AsClient StIdle m a
- localStateQueryPeerNull :: forall (block :: Type ) (point :: Type ) (query :: Type -> Type ) m a. MonadTimer m => Peer ( LocalStateQuery block point query) AsClient StIdle m a
- localTxSubmissionPeerNull :: forall (tx :: Type ) (reject :: Type ) m a. MonadTimer m => Peer ( LocalTxSubmission tx reject) AsClient StIdle m a
- localTxMonitorPeerNull :: forall (txid :: Type ) (tx :: Type ) (slot :: Type ) m a. MonadTimer m => Peer ( LocalTxMonitor txid tx slot) AsClient StIdle m a
-
newtype
IOManager
=
IOManager
{
- associateWithIOManager :: forall hole. hole -> IO ()
- type AssociateWithIOCP = IOManager
- withIOManager :: WithIOManager
- type LocalSnocket = Snocket IO LocalSocket LocalAddress
- localSnocket :: IOManager -> LocalSnocket
-
newtype
LocalSocket
=
LocalSocket
{
- getLocalHandle :: LocalHandle
- newtype LocalAddress = LocalAddress { }
-
newtype
Versions
vNum vData r =
Versions
{
- getVersions :: Map vNum ( Version vData r)
- versionedNodeToClientProtocols :: NodeToClientVersion -> NodeToClientVersionData -> ( ConnectionId LocalAddress -> STM m ControlMessage -> NodeToClientProtocols appType bytes m a b) -> Versions NodeToClientVersion NodeToClientVersionData ( OuroborosApplication appType LocalAddress bytes m a b)
- simpleSingletonVersions :: vNum -> vData -> r -> Versions vNum vData r
- foldMapVersions :: ( Ord vNum, Foldable f, HasCallStack ) => (x -> Versions vNum extra r) -> f x -> Versions vNum extra r
- combineVersions :: ( Ord vNum, Foldable f, HasCallStack ) => f ( Versions vNum extra r) -> Versions vNum extra r
- nodeToClientHandshakeCodec :: MonadST m => Codec ( Handshake NodeToClientVersion Term ) DeserialiseFailure m ByteString
- nodeToClientVersionCodec :: CodecCBORTerm ( Text , Maybe Int ) NodeToClientVersion
- nodeToClientCodecCBORTerm :: NodeToClientVersion -> CodecCBORTerm Text NodeToClientVersionData
-
data
ConnectionId
addr =
ConnectionId
{
- localAddress :: !addr
- remoteAddress :: !addr
- type LocalConnectionId = ConnectionId LocalAddress
-
data
ErrorPolicies
=
ErrorPolicies
{
- epAppErrorPolicies :: [ ErrorPolicy ]
- epConErrorPolicies :: [ ErrorPolicy ]
- networkErrorPolicies :: ErrorPolicies
- nullErrorPolicies :: ErrorPolicies
-
data
ErrorPolicy
where
- ErrorPolicy :: forall e. Exception e => (e -> Maybe ( SuspendDecision DiffTime )) -> ErrorPolicy
-
data
ErrorPolicyTrace
- = ErrorPolicySuspendPeer ( Maybe (ConnectionOrApplicationExceptionTrace SomeException )) DiffTime DiffTime
- | ErrorPolicySuspendConsumer ( Maybe (ConnectionOrApplicationExceptionTrace SomeException )) DiffTime
- | ErrorPolicyLocalNodeError (ConnectionOrApplicationExceptionTrace SomeException )
- | ErrorPolicyResumePeer
- | ErrorPolicyKeepSuspended
- | ErrorPolicyResumeConsumer
- | ErrorPolicyResumeProducer
- | ErrorPolicyUnhandledApplicationException SomeException
- | ErrorPolicyUnhandledConnectionException SomeException
- | ErrorPolicyAcceptException IOException
- data WithAddr addr a = WithAddr { }
-
data
SuspendDecision
t
- = SuspendPeer !t !t
- | SuspendConsumer !t
- | Throw
-
data
TraceSendRecv
ps
where
- TraceSendMsg :: forall ps. AnyMessageAndAgency ps -> TraceSendRecv ps
- TraceRecvMsg :: forall ps. AnyMessageAndAgency ps -> TraceSendRecv ps
- data ProtocolLimitFailure
- data Handshake (vNumber :: k) (vParams :: k1)
- data LocalAddresses addr = LocalAddresses { }
-
data
SubscriptionTrace
addr
- = SubscriptionTraceConnectStart addr
- | SubscriptionTraceConnectEnd addr ConnectResult
- | Exception e => SubscriptionTraceSocketAllocationException addr e
- | Exception e => SubscriptionTraceConnectException addr e
- | Exception e => SubscriptionTraceApplicationException addr e
- | SubscriptionTraceTryConnectToPeer addr
- | SubscriptionTraceSkippingPeer addr
- | SubscriptionTraceSubscriptionRunning
- | SubscriptionTraceSubscriptionWaiting Int
- | SubscriptionTraceSubscriptionFailed
- | SubscriptionTraceSubscriptionWaitingNewConnection DiffTime
- | SubscriptionTraceStart Int
- | SubscriptionTraceRestart DiffTime Int Int
- | SubscriptionTraceConnectionExist addr
- | SubscriptionTraceUnsupportedRemoteAddr addr
- | SubscriptionTraceMissingLocalAddress
- | SubscriptionTraceAllocateSocket addr
- | SubscriptionTraceCloseSocket addr
- type HandshakeTr ntcAddr ntcVersion = WithMuxBearer ( ConnectionId ntcAddr) ( TraceSendRecv ( Handshake ntcVersion Term ))
Documentation
nodeToClientProtocols :: ( ConnectionId addr -> STM m ControlMessage -> NodeToClientProtocols appType bytes m a b) -> NodeToClientVersion -> OuroborosApplication appType addr bytes m a b Source #
Make an
OuroborosApplication
for the bundle of mini-protocols that
make up the overall node-to-client protocol.
This function specifies the wire format protocol numbers as well as the
protocols that run for each
NodeToClientVersion
.
They are chosen to not overlap with the node to node protocol numbers. This is not essential for correctness, but is helpful to allow a single shared implementation of tools that can analyse both protocols, e.g. wireshark plugins.
data NodeToClientProtocols appType bytes m a b Source #
Recorod of node-to-client mini protocols.
NodeToClientProtocols | |
|
data NodeToClientVersion Source #
Enumeration of node to client protocol versions.
NodeToClientV_9 |
enabled
|
NodeToClientV_10 |
added
|
NodeToClientV_11 |
added
|
NodeToClientV_12 |
added
|
NodeToClientV_13 |
enabled
|
Instances
newtype NodeToClientVersionData Source #
Version data for NodeToClient protocol v1
data NetworkConnectTracers addr vNumber Source #
Tracer used by
connectToNode
(and derivatives, like
connectTo
or
'Ouroboros.Network.NodeToClient.connectTo).
NetworkConnectTracers | |
|
nullNetworkConnectTracers :: NetworkConnectTracers addr vNumber Source #
:: LocalSnocket |
callback constructed by
|
-> NetworkConnectTracers LocalAddress NodeToClientVersion | |
-> Versions NodeToClientVersion NodeToClientVersionData ( OuroborosApplication InitiatorMode LocalAddress ByteString IO a b) |
A dictionary of protocol versions & applications to run on an established connection. The application to run will be chosen by initial handshake protocol (the highest shared version will be chosen). |
-> FilePath |
path of the unix socket or named pipe |
-> IO () |
A specialised version of
connectToNode
. It is
a general purpose function which can connect using any version of the
protocol. This is mostly useful for future enhancements.
data NetworkServerTracers addr vNumber Source #
Tracers required by a server which handles inbound connections.
NetworkServerTracers | |
|
nullNetworkServerTracers :: NetworkServerTracers addr vNumber Source #
data NetworkMutableState addr Source #
Mutable state maintained by the network component.
NetworkMutableState | |
|
newNetworkMutableState :: IO ( NetworkMutableState addr) Source #
newNetworkMutableStateSTM :: STM ( NetworkMutableState addr) Source #
cleanNetworkMutableState :: NetworkMutableState addr -> IO () Source #
Clean
PeerStates
within
NetworkMutableState
every 200s
withServer :: LocalSnocket -> NetworkServerTracers LocalAddress NodeToClientVersion -> NetworkMutableState LocalAddress -> LocalSocket -> Versions NodeToClientVersion NodeToClientVersionData ( OuroborosApplication ResponderMode LocalAddress ByteString IO a b) -> ErrorPolicies -> IO Void Source #
A specialised version of
withServerNode
.
Comments to
withServer
apply here as well.
type NetworkClientSubcriptionTracers = NetworkSubscriptionTracers Identity LocalAddress NodeToClientVersion Source #
data NetworkSubscriptionTracers withIPList addr vNumber Source #
IP subscription tracers.
NetworkSubscriptionTracers | |
|
data ClientSubscriptionParams a Source #
ClientSubscriptionParams | |
|
ncSubscriptionWorker :: forall mode x y. HasInitiator mode ~ True => LocalSnocket -> NetworkClientSubcriptionTracers -> NetworkMutableState LocalAddress -> ClientSubscriptionParams () -> Versions NodeToClientVersion NodeToClientVersionData ( OuroborosApplication mode LocalAddress ByteString IO x y) -> IO Void Source #
ncSubscriptionWorker
which starts given application versions on each
established connection.
Null Protocol Peers
chainSyncPeerNull :: forall (header :: Type ) (point :: Type ) (tip :: Type ) m a. MonadTimer m => Peer ( ChainSync header point tip) AsClient StIdle m a Source #
localStateQueryPeerNull :: forall (block :: Type ) (point :: Type ) (query :: Type -> Type ) m a. MonadTimer m => Peer ( LocalStateQuery block point query) AsClient StIdle m a Source #
localTxSubmissionPeerNull :: forall (tx :: Type ) (reject :: Type ) m a. MonadTimer m => Peer ( LocalTxSubmission tx reject) AsClient StIdle m a Source #
localTxMonitorPeerNull :: forall (txid :: Type ) (tx :: Type ) (slot :: Type ) m a. MonadTimer m => Peer ( LocalTxMonitor txid tx slot) AsClient StIdle m a Source #
Re-exported network interface
This is public api to interact with the io manager; On Windows
IOManager
holds
associateWithIOCompletionPort
;
on other platforms
IOManager
can run over any type, and thus is
guaranteed to be no-op.
IOManager | |
|
type AssociateWithIOCP = IOManager Source #
withIOManager :: WithIOManager Source #
withIOManager
allows to do asynchronous io on Windows hiding the
differences between posix and Win32.
It starts an io manger thread, which should be only one running at a time, so
the best place to call it is very close to the
main
function and last for
duration of the application.
Async
IO
operations which are using the
iocp
port should not leak
out-side of
withIOManager
. They will be silently cancelled when
withIOManager
exists. In particular one should not return
IOManager
from
withIOManager
.
type LocalSnocket = Snocket IO LocalSocket LocalAddress Source #
System dependent LocalSnocket
localSnocket :: IOManager -> LocalSnocket Source #
Create a
LocalSnocket
.
On
Windows
, there is no way to get path associated to a named pipe. To go
around this, the address passed to
open
via
LocalFamily
will be
referenced by
LocalSocket
.
newtype LocalSocket Source #
System dependent LocalSnocket type
LocalSocket | |
|
Instances
Eq LocalSocket | |
Defined in Ouroboros.Network.Snocket (==) :: LocalSocket -> LocalSocket -> Bool Source # (/=) :: LocalSocket -> LocalSocket -> Bool Source # |
|
Show LocalSocket | |
Defined in Ouroboros.Network.Snocket |
|
Generic LocalSocket | |
Defined in Ouroboros.Network.Snocket from :: LocalSocket -> Rep LocalSocket x Source # to :: Rep LocalSocket x -> LocalSocket Source # |
|
type Rep LocalSocket | |
Defined in Ouroboros.Network.Snocket
type
Rep
LocalSocket
=
D1
('
MetaData
"LocalSocket" "Ouroboros.Network.Snocket" "ouroboros-network-framework-0.1.0.1-8Cos8Lgj9CwATl9eblNk02" '
True
) (
C1
('
MetaCons
"LocalSocket" '
PrefixI
'
True
) (
S1
('
MetaSel
('
Just
"getLocalHandle") '
NoSourceUnpackedness
'
NoSourceStrictness
'
DecidedLazy
) (
Rec0
LocalHandle)))
|
newtype LocalAddress Source #
Local address, on Unix is associated with
AF_UNIX
family, on
Windows with `named-pipes`.
Instances
Versions
newtype Versions vNum vData r Source #
The version map supported by the local agent keyed on the version identifier.
Each
Version
contains a function which takes negotiated version data and
returns negotiated application (the
r
type variable).
If one needs to combine multiple versions the simplest way is to use one of
the combinators:
foldMapVersions
,
combineVersions
or the
Semigroup
instance directly:
fold $ (simpleSingletonVersions ...) :| [ (simpleSingletonVersions ...) , (simpleSingletonVersions ...) , ... ]
Versions | |
|
versionedNodeToClientProtocols :: NodeToClientVersion -> NodeToClientVersionData -> ( ConnectionId LocalAddress -> STM m ControlMessage -> NodeToClientProtocols appType bytes m a b) -> Versions NodeToClientVersion NodeToClientVersionData ( OuroborosApplication appType LocalAddress bytes m a b) Source #
Versions
containing a single version of
nodeToClientProtocols
.
simpleSingletonVersions :: vNum -> vData -> r -> Versions vNum vData r Source #
Singleton smart constructor for
Versions
.
foldMapVersions :: ( Ord vNum, Foldable f, HasCallStack ) => (x -> Versions vNum extra r) -> f x -> Versions vNum extra r Source #
combineVersions :: ( Ord vNum, Foldable f, HasCallStack ) => f ( Versions vNum extra r) -> Versions vNum extra r Source #
Codecs
nodeToClientHandshakeCodec :: MonadST m => Codec ( Handshake NodeToClientVersion Term ) DeserialiseFailure m ByteString Source #
nodeToClientVersionCodec :: CodecCBORTerm ( Text , Maybe Int ) NodeToClientVersion Source #
We set 16ths bit to distinguish
NodeToNodeVersion
and
NodeToClientVersion
. This way connecting wrong protocol suite will fail
during
Handshake
negotiation
This is done in backward compatible way, so
NodeToClientV_1
encoding is not
changed.
nodeToClientCodecCBORTerm :: NodeToClientVersion -> CodecCBORTerm Text NodeToClientVersionData Source #
Re-exports
data ConnectionId addr Source #
Connection is identified by local and remote address.
TODO: the type variable which this data type fills in is called
peerid
. We
should renamed to
connectionId
.
ConnectionId | |
|
Instances
data ErrorPolicies Source #
List of error policies for exception handling and a policy for handing application return values.
ErrorPolicies | |
|
Instances
Semigroup ErrorPolicies | |
Defined in Ouroboros.Network.ErrorPolicy (<>) :: ErrorPolicies -> ErrorPolicies -> ErrorPolicies Source # sconcat :: NonEmpty ErrorPolicies -> ErrorPolicies Source # stimes :: Integral b => b -> ErrorPolicies -> ErrorPolicies Source # |
networkErrorPolicies :: ErrorPolicies Source #
ErrorPolicies
for client application. Additional rules can be added by
means of a
Semigroup
instance of
ErrorPolicies
.
This error policies will try to preserve
subscriptionWorker
, e.g. if the
connect function throws an
IOException
we will suspend it for
a
shortDelay
, and try to re-connect.
This allows to recover from a situation where a node temporarily shutsdown, or running a client application which is subscribed two more than one node (possibly over network).
data ErrorPolicy where Source #
ErrorPolicy | |
|
Instances
Show ErrorPolicy | |
Defined in Ouroboros.Network.ErrorPolicy |
data ErrorPolicyTrace Source #
Trace data for error policies
ErrorPolicySuspendPeer ( Maybe (ConnectionOrApplicationExceptionTrace SomeException )) DiffTime DiffTime |
suspending peer with a given exception until |
ErrorPolicySuspendConsumer ( Maybe (ConnectionOrApplicationExceptionTrace SomeException )) DiffTime |
suspending consumer until |
ErrorPolicyLocalNodeError (ConnectionOrApplicationExceptionTrace SomeException ) |
caught a local exception |
ErrorPolicyResumePeer |
resume a peer (both consumer and producer) |
ErrorPolicyKeepSuspended |
consumer was suspended until producer will resume |
ErrorPolicyResumeConsumer |
resume consumer |
ErrorPolicyResumeProducer |
resume producer |
ErrorPolicyUnhandledApplicationException SomeException |
an application throwed an exception, which was not handled by any
|
ErrorPolicyUnhandledConnectionException SomeException |
|
ErrorPolicyAcceptException IOException |
|
Instances
Show ErrorPolicyTrace | |
Defined in Ouroboros.Network.ErrorPolicy |
data SuspendDecision t Source #
Semigroup of commands which acts on
PeerState
. The
t
variable might
be initiated to
DiffTime
or
Time m
.
This semigroup allows to either suspend both consumer and producer or just the consumer part.
SuspendPeer !t !t |
peer is suspend; The first
|
SuspendConsumer !t |
suspend local consumer / initiator side until
|
Throw |
throw an error from the main thread. |
Instances
data TraceSendRecv ps where Source #
TraceSendMsg :: forall ps. AnyMessageAndAgency ps -> TraceSendRecv ps | |
TraceRecvMsg :: forall ps. AnyMessageAndAgency ps -> TraceSendRecv ps |
Instances
Show ( AnyMessageAndAgency ps) => Show ( TraceSendRecv ps) | |
Defined in Ouroboros.Network.Driver.Simple |
data ProtocolLimitFailure Source #
Instances
data Handshake (vNumber :: k) (vParams :: k1) Source #
The handshake mini-protocol is used initially to agree the version and associated parameters of the protocol to use for all subsequent communication.
Instances
ShowProxy ( Handshake vNumber vParams :: Type ) | |
Show ( ClientHasAgency st) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type |
|
Show ( ServerHasAgency st) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type |
|
( Show vNumber, Show vParams) => Show ( Message ( Handshake vNumber vParams) from to) | |
Protocol ( Handshake vNumber vParams) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type data Message ( Handshake vNumber vParams) st st' Source # data ClientHasAgency st Source # data ServerHasAgency st Source # data NobodyHasAgency st Source # exclusionLemma_ClientAndServerHaveAgency :: forall (st :: Handshake vNumber vParams). ClientHasAgency st -> ServerHasAgency st -> Void Source # exclusionLemma_NobodyAndClientHaveAgency :: forall (st :: Handshake vNumber vParams). NobodyHasAgency st -> ClientHasAgency st -> Void Source # exclusionLemma_NobodyAndServerHaveAgency :: forall (st :: Handshake vNumber vParams). NobodyHasAgency st -> ServerHasAgency st -> Void Source # |
|
data Message ( Handshake vNumber vParams) (from :: Handshake vNumber vParams) (to :: Handshake vNumber vParams) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type
data
Message
(
Handshake
vNumber vParams) (from ::
Handshake
vNumber vParams) (to ::
Handshake
vNumber vParams)
where
|
|
data ClientHasAgency (st :: Handshake vNumber vParams) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type
data
ClientHasAgency
(st ::
Handshake
vNumber vParams)
where
|
|
data ServerHasAgency (st :: Handshake vNumber vParams) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type
data
ServerHasAgency
(st ::
Handshake
vNumber vParams)
where
|
|
data NobodyHasAgency (st :: Handshake vNumber vParams) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type
data
NobodyHasAgency
(st ::
Handshake
vNumber vParams)
where
|
data LocalAddresses addr Source #
Instances
Eq addr => Eq ( LocalAddresses addr) | |
Defined in Ouroboros.Network.Subscription.Worker (==) :: LocalAddresses addr -> LocalAddresses addr -> Bool Source # (/=) :: LocalAddresses addr -> LocalAddresses addr -> Bool Source # |
|
Show addr => Show ( LocalAddresses addr) | |
Defined in Ouroboros.Network.Subscription.Worker |
|
Semigroup ( LocalAddresses addr) | |
Defined in Ouroboros.Network.Subscription.Worker (<>) :: LocalAddresses addr -> LocalAddresses addr -> LocalAddresses addr Source # sconcat :: NonEmpty ( LocalAddresses addr) -> LocalAddresses addr Source # stimes :: Integral b => b -> LocalAddresses addr -> LocalAddresses addr Source # |
data SubscriptionTrace addr Source #
Instances
Show addr => Show ( SubscriptionTrace addr) | |
Defined in Ouroboros.Network.Subscription.Worker |
type HandshakeTr ntcAddr ntcVersion = WithMuxBearer ( ConnectionId ntcAddr) ( TraceSendRecv ( Handshake ntcVersion Term )) Source #