Safe Haskell | None |
---|---|
Language | Haskell2010 |
Ouroboros.Network.NodeToClient
Description
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 {}
- ncSubscriptionWorker ∷ ∀ mode x y. HasInitiator mode ~ True ⇒ LocalSnocket → NetworkClientSubcriptionTracers → NetworkMutableState LocalAddress → ClientSubscriptionParams () → Versions NodeToClientVersion NodeToClientVersionData (OuroborosApplication mode LocalAddress ByteString IO x y) → IO Void
- chainSyncPeerNull ∷ ∀ (header ∷ Type) (point ∷ Type) (tip ∷ Type) m a. MonadTimer m ⇒ Peer (ChainSync header point tip) AsClient StIdle m a
- localStateQueryPeerNull ∷ ∀ (block ∷ Type) (point ∷ Type) (query ∷ Type → Type) m a. MonadTimer m ⇒ Peer (LocalStateQuery block point query) AsClient StIdle m a
- localTxSubmissionPeerNull ∷ ∀ (tx ∷ Type) (reject ∷ Type) m a. MonadTimer m ⇒ Peer (LocalTxSubmission tx reject) AsClient StIdle m a
- localTxMonitorPeerNull ∷ ∀ (txid ∷ Type) (tx ∷ Type) (slot ∷ Type) m a. MonadTimer m ⇒ Peer (LocalTxMonitor txid tx slot) AsClient StIdle m a
- newtype IOManager = IOManager {
- associateWithIOManager ∷ ∀ 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 {}
- networkErrorPolicies ∷ ErrorPolicies
- nullErrorPolicies ∷ ErrorPolicies
- data ErrorPolicy where
- ErrorPolicy ∷ ∀ 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 ∷ ∀ ps. AnyMessageAndAgency ps → TraceSendRecv ps
- TraceRecvMsg ∷ ∀ 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.
Constructors
NodeToClientProtocols | |
Fields
|
data NodeToClientVersion Source #
Enumeration of node to client protocol versions.
Constructors
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
Constructors
NodeToClientVersionData | |
Fields |
data NetworkConnectTracers addr vNumber Source #
Tracer used by connectToNode
(and derivatives, like
connectTo
or
'Ouroboros.Network.NodeToClient.connectTo).
Constructors
NetworkConnectTracers | |
Fields
|
nullNetworkConnectTracers ∷ NetworkConnectTracers addr vNumber Source #
Arguments
∷ 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.
Constructors
NetworkServerTracers | |
Fields
|
nullNetworkServerTracers ∷ NetworkServerTracers addr vNumber Source #
data NetworkMutableState addr Source #
Mutable state maintained by the network component.
Constructors
NetworkMutableState | |
Fields
|
newNetworkMutableState ∷ IO (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.
Constructors
NetworkSubscriptionTracers | |
Fields
|
data ClientSubscriptionParams a Source #
Constructors
ClientSubscriptionParams | |
Fields
|
ncSubscriptionWorker ∷ ∀ 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 ∷ ∀ (header ∷ Type) (point ∷ Type) (tip ∷ Type) m a. MonadTimer m ⇒ Peer (ChainSync header point tip) AsClient StIdle m a Source #
localStateQueryPeerNull ∷ ∀ (block ∷ Type) (point ∷ Type) (query ∷ Type → Type) m a. MonadTimer m ⇒ Peer (LocalStateQuery block point query) AsClient StIdle m a Source #
localTxSubmissionPeerNull ∷ ∀ (tx ∷ Type) (reject ∷ Type) m a. MonadTimer m ⇒ Peer (LocalTxSubmission tx reject) AsClient StIdle m a Source #
localTxMonitorPeerNull ∷ ∀ (txid ∷ Type) (tx ∷ Type) (slot ∷ Type) m a. MonadTimer m ⇒ Peer (LocalTxMonitor txid tx slot) AsClient StIdle m a Source #
Re-exported network interface
Constructors
IOManager | |
Fields
|
type AssociateWithIOCP = IOManager #
withIOManager ∷ 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
Constructors
LocalSocket | |
Fields
|
Instances
Eq LocalSocket | |
Defined in Ouroboros.Network.Snocket Methods (==) ∷ LocalSocket → LocalSocket → Bool Source # (/=) ∷ LocalSocket → LocalSocket → Bool Source # | |
Show LocalSocket | |
Defined in Ouroboros.Network.Snocket | |
Generic LocalSocket | |
Defined in Ouroboros.Network.Snocket | |
type Rep LocalSocket | |
Defined in Ouroboros.Network.Snocket type Rep LocalSocket = D1 ('MetaData "LocalSocket" "Ouroboros.Network.Snocket" "ouroboros-network-framework-0.1.0.0-inplace" '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`.
Constructors
LocalAddress | |
Fields |
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 ...) , ... ]
Constructors
Versions | |
Fields
|
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
.
Constructors
ConnectionId | |
Fields
|
Instances
data ErrorPolicies Source #
List of error policies for exception handling and a policy for handing application return values.
Constructors
ErrorPolicies | |
Fields
|
Instances
Semigroup ErrorPolicies | |
Defined in Ouroboros.Network.ErrorPolicy Methods (<>) ∷ 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 #
Constructors
ErrorPolicy | |
Fields
|
Instances
Show ErrorPolicy | |
Defined in Ouroboros.Network.ErrorPolicy |
data ErrorPolicyTrace Source #
Trace data for error policies
Constructors
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.
Constructors
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 #
Structured Tracer
output for runPeer
and derivitives.
Constructors
TraceSendMsg ∷ ∀ ps. AnyMessageAndAgency ps → TraceSendRecv ps | |
TraceRecvMsg ∷ ∀ 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 (ServerHasAgency st) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type | |
Show (ClientHasAgency 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 Associated Types data Message (Handshake vNumber vParams) st st' # data ClientHasAgency st # data ServerHasAgency st # data NobodyHasAgency st # Methods exclusionLemma_ClientAndServerHaveAgency ∷ ∀ (st ∷ Handshake vNumber vParams). ClientHasAgency st → ServerHasAgency st → Void exclusionLemma_NobodyAndClientHaveAgency ∷ ∀ (st ∷ Handshake vNumber vParams). NobodyHasAgency st → ClientHasAgency st → Void exclusionLemma_NobodyAndServerHaveAgency ∷ ∀ (st ∷ Handshake vNumber vParams). NobodyHasAgency st → ServerHasAgency st → Void | |
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 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 LocalAddresses addr Source #
Constructors
LocalAddresses | |
Instances
Eq addr ⇒ Eq (LocalAddresses addr) | |
Defined in Ouroboros.Network.Subscription.Worker Methods (==) ∷ 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 Methods (<>) ∷ 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 #
Constructors
Instances
Show addr ⇒ Show (SubscriptionTrace addr) | |
Defined in Ouroboros.Network.Subscription.Worker |
type HandshakeTr ntcAddr ntcVersion = WithMuxBearer (ConnectionId ntcAddr) (TraceSendRecv (Handshake ntcVersion Term)) Source #