Safe Haskell | Safe-Inferred |
---|---|
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 :: NodeToClientProtocols appType addr bytes m a b -> NodeToClientVersion -> OuroborosApplicationWithMinimalCtx appType addr bytes m a b
- data NodeToClientProtocols appType ntcAddr bytes m a b = NodeToClientProtocols {
- localChainSyncProtocol :: RunMiniProtocolWithMinimalCtx appType ntcAddr bytes m a b
- localTxSubmissionProtocol :: RunMiniProtocolWithMinimalCtx appType ntcAddr bytes m a b
- localStateQueryProtocol :: RunMiniProtocolWithMinimalCtx appType ntcAddr bytes m a b
- localTxMonitorProtocol :: RunMiniProtocolWithMinimalCtx appType ntcAddr bytes m a b
- data NodeToClientVersion
- data NodeToClientVersionData = NodeToClientVersionData {
- networkMagic :: !NetworkMagic
- query :: !Bool
- 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 (OuroborosApplicationWithMinimalCtx 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 (OuroborosApplicationWithMinimalCtx 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 (OuroborosApplicationWithMinimalCtx mode LocalAddress ByteString IO x y) -> IO Void
- chainSyncPeerNull :: forall (header :: Type) (point :: Type) (tip :: Type) m a. MonadDelay m => Peer (ChainSync header point tip) AsClient StIdle m a
- localStateQueryPeerNull :: forall (block :: Type) (point :: Type) (query :: Type -> Type) m a. MonadDelay m => Peer (LocalStateQuery block point query) AsClient StIdle m a
- localTxSubmissionPeerNull :: forall (tx :: Type) (reject :: Type) m a. MonadDelay m => Peer (LocalTxSubmission tx reject) AsClient StIdle m a
- localTxMonitorPeerNull :: forall (txid :: Type) (tx :: Type) (slot :: Type) m a. MonadDelay 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 -> NodeToClientProtocols appType LocalAddress bytes m a b -> Versions NodeToClientVersion NodeToClientVersionData (OuroborosApplicationWithMinimalCtx 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 :: forall (m :: Type -> Type). 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
- newtype MinimalInitiatorContext addr = MinimalInitiatorContext {
- micConnectionId :: ConnectionId addr
- newtype ResponderContext addr = ResponderContext {
- rcConnectionId :: ConnectionId addr
- type LocalConnectionId = ConnectionId LocalAddress
- data ErrorPolicies = ErrorPolicies {}
- 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 :: NodeToClientProtocols appType addr bytes m a b -> NodeToClientVersion -> OuroborosApplicationWithMinimalCtx 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 ntcAddr bytes m a b Source #
Record of node-to-client mini protocols.
Constructors
NodeToClientProtocols | |
Fields
|
data NodeToClientVersion #
Constructors
NodeToClientV_9 | |
NodeToClientV_10 | |
NodeToClientV_11 | |
NodeToClientV_12 | |
NodeToClientV_13 | |
NodeToClientV_14 | |
NodeToClientV_15 | |
NodeToClientV_16 |
Instances
data NodeToClientVersionData #
Constructors
NodeToClientVersionData | |
Fields
|
Instances
Show NodeToClientVersionData | |
Defined in Ouroboros.Network.NodeToClient.Version | |
Eq NodeToClientVersionData | |
Defined in Ouroboros.Network.NodeToClient.Version Methods (==) :: NodeToClientVersionData -> NodeToClientVersionData -> Bool Source # (/=) :: NodeToClientVersionData -> NodeToClientVersionData -> Bool Source # | |
Acceptable NodeToClientVersionData | |
Defined in Ouroboros.Network.NodeToClient.Version Methods acceptableVersion :: NodeToClientVersionData -> NodeToClientVersionData -> Accept NodeToClientVersionData | |
Queryable NodeToClientVersionData | |
Defined in Ouroboros.Network.NodeToClient.Version Methods |
data NetworkConnectTracers addr vNumber #
Constructors
NetworkConnectTracers | |
Fields
|
nullNetworkConnectTracers :: NetworkConnectTracers addr vNumber #
Arguments
:: LocalSnocket | callback constructed by |
-> NetworkConnectTracers LocalAddress NodeToClientVersion | |
-> Versions NodeToClientVersion NodeToClientVersionData (OuroborosApplicationWithMinimalCtx 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 #
Constructors
NetworkServerTracers | |
Fields
|
nullNetworkServerTracers :: NetworkServerTracers addr vNumber #
data NetworkMutableState addr #
Constructors
NetworkMutableState | |
Fields
|
newNetworkMutableState :: IO (NetworkMutableState addr) #
newNetworkMutableStateSTM :: STM (NetworkMutableState addr) #
cleanNetworkMutableState :: NetworkMutableState addr -> IO () #
withServer :: LocalSnocket -> NetworkServerTracers LocalAddress NodeToClientVersion -> NetworkMutableState LocalAddress -> LocalSocket -> Versions NodeToClientVersion NodeToClientVersionData (OuroborosApplicationWithMinimalCtx 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 #
Constructors
ClientSubscriptionParams | |
Fields
|
ncSubscriptionWorker :: forall mode x y. HasInitiator mode ~ True => LocalSnocket -> NetworkClientSubcriptionTracers -> NetworkMutableState LocalAddress -> ClientSubscriptionParams () -> Versions NodeToClientVersion NodeToClientVersionData (OuroborosApplicationWithMinimalCtx 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. MonadDelay m => Peer (ChainSync header point tip) AsClient StIdle m a Source #
localStateQueryPeerNull :: forall (block :: Type) (point :: Type) (query :: Type -> Type) m a. MonadDelay m => Peer (LocalStateQuery block point query) AsClient StIdle m a Source #
localTxSubmissionPeerNull :: forall (tx :: Type) (reject :: Type) m a. MonadDelay m => Peer (LocalTxSubmission tx reject) AsClient StIdle m a Source #
localTxMonitorPeerNull :: forall (txid :: Type) (tx :: Type) (slot :: Type) m a. MonadDelay 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 #
localSnocket :: IOManager -> LocalSnocket #
newtype LocalSocket #
Constructors
LocalSocket | |
Fields
|
Instances
Generic LocalSocket | |
Defined in Ouroboros.Network.Snocket Methods from :: LocalSocket -> Rep LocalSocket x Source # to :: Rep LocalSocket x -> LocalSocket Source # | |
Show LocalSocket | |
Defined in Ouroboros.Network.Snocket | |
Eq LocalSocket | |
Defined in Ouroboros.Network.Snocket Methods (==) :: LocalSocket -> LocalSocket -> Bool Source # (/=) :: LocalSocket -> LocalSocket -> Bool Source # | |
type Rep LocalSocket | |
Defined in Ouroboros.Network.Snocket type Rep LocalSocket = D1 ('MetaData "LocalSocket" "Ouroboros.Network.Snocket" "ouroboros-network-framework-0.10.1.0-6oc7eN9E7cu67rZ3WydsD2" 'True) (C1 ('MetaCons "LocalSocket" 'PrefixI 'True) (S1 ('MetaSel ('Just "getLocalHandle") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 LocalHandle))) |
newtype LocalAddress #
Constructors
LocalAddress | |
Fields |
Instances
Versions
newtype Versions vNum vData r #
Constructors
Versions | |
Fields
|
versionedNodeToClientProtocols :: NodeToClientVersion -> NodeToClientVersionData -> NodeToClientProtocols appType LocalAddress bytes m a b -> Versions NodeToClientVersion NodeToClientVersionData (OuroborosApplicationWithMinimalCtx appType LocalAddress bytes m a b) Source #
Versions
containing a single version of nodeToClientProtocols
.
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 #
Codecs
nodeToClientHandshakeCodec :: forall (m :: Type -> Type). MonadST m => Codec (Handshake NodeToClientVersion Term) DeserialiseFailure m ByteString #
nodeToClientVersionCodec :: CodecCBORTerm (Text, Maybe Int) NodeToClientVersion #
nodeToClientCodecCBORTerm :: NodeToClientVersion -> CodecCBORTerm Text NodeToClientVersionData #
Re-exports
data ConnectionId addr #
Constructors
ConnectionId | |
Fields
|
Instances
newtype MinimalInitiatorContext addr #
Constructors
MinimalInitiatorContext | |
Fields
|
Instances
Functor MinimalInitiatorContext | |
Defined in Ouroboros.Network.Context Methods fmap :: (a -> b) -> MinimalInitiatorContext a -> MinimalInitiatorContext b Source # (<$) :: a -> MinimalInitiatorContext b -> MinimalInitiatorContext a Source # |
newtype ResponderContext addr #
Constructors
ResponderContext | |
Fields
|
Instances
Functor ResponderContext | |
Defined in Ouroboros.Network.Context Methods fmap :: (a -> b) -> ResponderContext a -> ResponderContext b Source # (<$) :: a -> ResponderContext b -> ResponderContext a Source # |
data ErrorPolicies #
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 #
Constructors
ErrorPolicy :: forall e. Exception e => (e -> Maybe (SuspendDecision DiffTime)) -> ErrorPolicy |
Instances
Show ErrorPolicy | |
Defined in Ouroboros.Network.ErrorPolicy |
data ErrorPolicyTrace #
Constructors
ErrorPolicySuspendPeer (Maybe (ConnectionOrApplicationExceptionTrace SomeException)) DiffTime DiffTime | |
ErrorPolicySuspendConsumer (Maybe (ConnectionOrApplicationExceptionTrace SomeException)) DiffTime | |
ErrorPolicyLocalNodeError (ConnectionOrApplicationExceptionTrace SomeException) | |
ErrorPolicyResumePeer | |
ErrorPolicyKeepSuspended | |
ErrorPolicyResumeConsumer | |
ErrorPolicyResumeProducer | |
ErrorPolicyUnhandledApplicationException SomeException | |
ErrorPolicyUnhandledConnectionException SomeException | |
ErrorPolicyAcceptException IOException |
Instances
Show ErrorPolicyTrace | |
Defined in Ouroboros.Network.ErrorPolicy |
data SuspendDecision t #
Constructors
SuspendPeer !t !t | |
SuspendConsumer !t | |
Throw |
Instances
data TraceSendRecv ps where #
Constructors
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 #
Instances
data Handshake (vNumber :: k) (vParams :: k1) #
Instances
ShowProxy (Handshake vNumber vParams :: Type) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type | |
Show (ClientHasAgency st) | |
Show (ServerHasAgency st) | |
(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 :: forall (st :: Handshake vNumber vParams). ClientHasAgency st -> ServerHasAgency st -> Void exclusionLemma_NobodyAndClientHaveAgency :: forall (st :: Handshake vNumber vParams). NobodyHasAgency st -> ClientHasAgency st -> Void exclusionLemma_NobodyAndServerHaveAgency :: forall (st :: Handshake vNumber vParams). NobodyHasAgency st -> ServerHasAgency st -> Void | |
data ClientHasAgency (st :: Handshake vNumber vParams) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type data ClientHasAgency (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 NobodyHasAgency (st :: Handshake vNumber vParams) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type | |
data ServerHasAgency (st :: Handshake vNumber vParams) | |
Defined in Ouroboros.Network.Protocol.Handshake.Type data ServerHasAgency (st :: Handshake vNumber vParams) where
|
data LocalAddresses addr #
Instances
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 # | |
Show addr => Show (LocalAddresses addr) | |
Defined in Ouroboros.Network.Subscription.Worker | |
Eq addr => Eq (LocalAddresses addr) | |
Defined in Ouroboros.Network.Subscription.Worker Methods (==) :: LocalAddresses addr -> LocalAddresses addr -> Bool Source # (/=) :: LocalAddresses addr -> LocalAddresses addr -> Bool Source # |
data SubscriptionTrace addr #
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 #