Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Ouroboros.Network.ConnectionHandler
Contents
Description
Implementation of ConnectionHandler
While connection manager responsibility is to keep track of resources:
sockets and threads running connection and their state changes (including
changes imposed by ConnectionHandler
, e.g. weather a uni- or duplex- data
flow was negotiated), the responsibility of ConnectionHandler
is to:
- run handshake protocol on the underlying bearer
- start mux
ConnectionHandler
is run on each inbound or outbound connection and returns
Handle
. Upon successful handshake negotiation it returns all the
necessary information to run mini-protocols. Note that it is not responsible
for running them: that's what a server does or p2p-governor by means of
PeerStateActions
.
Synopsis
- data Handle (muxMode ∷ MuxMode) initiatorCtx responderCtx versionData bytes m a b = Handle {
- hMux ∷ !(Mux muxMode m)
- hMuxBundle ∷ !(OuroborosBundle muxMode initiatorCtx responderCtx bytes m a b)
- hControlMessage ∷ !(TemperatureBundle (StrictTVar m ControlMessage))
- hVersionData ∷ !versionData
- type HandleWithExpandedCtx muxMode peerAddr versionData bytes m a b = Handle muxMode (ExpandedInitiatorContext peerAddr m) (ResponderContext peerAddr) versionData bytes m a b
- type HandleWithMinimalCtx muxMode peerAddr versionData bytes m a b = Handle muxMode (MinimalInitiatorContext peerAddr) (ResponderContext peerAddr) versionData bytes m a b
- data HandleError (muxMode ∷ MuxMode) versionNumber where
- HandleHandshakeClientError ∷ HasInitiator muxMode ~ True ⇒ !(HandshakeException versionNumber) → HandleError muxMode versionNumber
- HandleHandshakeServerError ∷ HasResponder muxMode ~ True ⇒ !(HandshakeException versionNumber) → HandleError muxMode versionNumber
- HandleError ∷ !SomeException → HandleError muxMode versionNumber
- classifyHandleError ∷ HandleError muxMode versionNumber → HandleErrorType
- type MuxConnectionHandler muxMode socket initiatorCtx responderCtx peerAddr versionNumber versionData bytes m a b = ConnectionHandler muxMode (ConnectionHandlerTrace versionNumber versionData) socket peerAddr (Handle muxMode initiatorCtx responderCtx versionData bytes m a b) (HandleError muxMode versionNumber) (versionNumber, versionData) m
- makeConnectionHandler ∷ ∀ initiatorCtx responderCtx peerAddr muxMode socket versionNumber versionData m a b. (Alternative (STM m), MonadAsync m, MonadDelay m, MonadFork m, MonadLabelledSTM m, MonadThrow (STM m), MonadTimer m, MonadMask m, Ord versionNumber, Show peerAddr, Typeable peerAddr) ⇒ Tracer m (WithMuxBearer (ConnectionId peerAddr) MuxTrace) → SingMuxMode muxMode → HandshakeArguments (ConnectionId peerAddr) versionNumber versionData m → Versions versionNumber versionData (OuroborosBundle muxMode initiatorCtx responderCtx ByteString m a b) → (ThreadId m, RethrowPolicy) → MuxConnectionHandler muxMode socket initiatorCtx responderCtx peerAddr versionNumber versionData ByteString m a b
- type MuxConnectionManager muxMode socket initiatorCtx responderCtx peerAddr versionData versionNumber bytes m a b = ConnectionManager muxMode socket peerAddr (Handle muxMode initiatorCtx responderCtx versionData bytes m a b) (HandleError muxMode versionNumber) m
- type ConnectionManagerWithExpandedCtx muxMode socket peerAddr versionData versionNumber bytes m a b = ConnectionManager muxMode socket peerAddr (HandleWithExpandedCtx muxMode peerAddr versionData bytes m a b) (HandleError muxMode versionNumber) m
- data ConnectionHandlerTrace versionNumber versionData
- = TrHandshakeSuccess versionNumber versionData
- | TrHandshakeQuery (Map versionNumber (Either Text versionData))
- | TrHandshakeClientError (HandshakeException versionNumber)
- | TrHandshakeServerError (HandshakeException versionNumber)
- | TrConnectionHandlerError ErrorContext SomeException ErrorCommand
Documentation
data Handle (muxMode ∷ MuxMode) initiatorCtx responderCtx versionData bytes m a b Source #
States of the connection handler thread.
MuxRunning
- successful Handshake, mux startedHandleHandshakeClientError
- the connection handler thread was running client side
of the handshake negotiation, which failed with
a
HandshakeException
HandleHandshakeServerError
- the connection handler thread was running server side of the
handshake protocol, which fail with
HandshakeException
HandleError
- the multiplexer thrown
MuxError
.
Constructors
Handle | |
Fields
|
type HandleWithExpandedCtx muxMode peerAddr versionData bytes m a b = Handle muxMode (ExpandedInitiatorContext peerAddr m) (ResponderContext peerAddr) versionData bytes m a b Source #
Handle
used by `node-to-node` P2P connections.
type HandleWithMinimalCtx muxMode peerAddr versionData bytes m a b = Handle muxMode (MinimalInitiatorContext peerAddr) (ResponderContext peerAddr) versionData bytes m a b Source #
Handle
used by:
- `node-to-node` non P2P mode;
- `node-to-client` connections.
data HandleError (muxMode ∷ MuxMode) versionNumber where Source #
Constructors
HandleHandshakeClientError ∷ HasInitiator muxMode ~ True ⇒ !(HandshakeException versionNumber) → HandleError muxMode versionNumber | |
HandleHandshakeServerError ∷ HasResponder muxMode ~ True ⇒ !(HandshakeException versionNumber) → HandleError muxMode versionNumber | |
HandleError ∷ !SomeException → HandleError muxMode versionNumber |
Instances
Show versionNumber ⇒ Show (HandleError muxMode versionNumber) Source # | |
Defined in Ouroboros.Network.ConnectionHandler Methods showsPrec ∷ Int → HandleError muxMode versionNumber → ShowS # show ∷ HandleError muxMode versionNumber → String # showList ∷ [HandleError muxMode versionNumber] → ShowS # |
classifyHandleError ∷ HandleError muxMode versionNumber → HandleErrorType Source #
type MuxConnectionHandler muxMode socket initiatorCtx responderCtx peerAddr versionNumber versionData bytes m a b = ConnectionHandler muxMode (ConnectionHandlerTrace versionNumber versionData) socket peerAddr (Handle muxMode initiatorCtx responderCtx versionData bytes m a b) (HandleError muxMode versionNumber) (versionNumber, versionData) m Source #
Type of ConnectionHandler
implemented in this module.
makeConnectionHandler Source #
Arguments
∷ ∀ initiatorCtx responderCtx peerAddr muxMode socket versionNumber versionData m a b. (Alternative (STM m), MonadAsync m, MonadDelay m, MonadFork m, MonadLabelledSTM m, MonadThrow (STM m), MonadTimer m, MonadMask m, Ord versionNumber, Show peerAddr, Typeable peerAddr) | |
⇒ Tracer m (WithMuxBearer (ConnectionId peerAddr) MuxTrace) | |
→ SingMuxMode muxMode | describe whether this is outbound or inbound connection, and bring evidence that we can use mux with it. |
→ HandshakeArguments (ConnectionId peerAddr) versionNumber versionData m | |
→ Versions versionNumber versionData (OuroborosBundle muxMode initiatorCtx responderCtx ByteString m a b) | |
→ (ThreadId m, RethrowPolicy) |
|
→ MuxConnectionHandler muxMode socket initiatorCtx responderCtx peerAddr versionNumber versionData ByteString m a b |
To be used as makeConnectionHandler
field of ConnectionManagerArguments
.
Note: We need to pass MiniProtocolBundle
what forces us to have two
different ConnectionManager
s: one for `node-to-client` and another for
`node-to-node` connections. But this is ok, as these resources are
independent.
type MuxConnectionManager muxMode socket initiatorCtx responderCtx peerAddr versionData versionNumber bytes m a b = ConnectionManager muxMode socket peerAddr (Handle muxMode initiatorCtx responderCtx versionData bytes m a b) (HandleError muxMode versionNumber) m Source #
Type alias for ConnectionManager
using Handle
.
type ConnectionManagerWithExpandedCtx muxMode socket peerAddr versionData versionNumber bytes m a b = ConnectionManager muxMode socket peerAddr (HandleWithExpandedCtx muxMode peerAddr versionData bytes m a b) (HandleError muxMode versionNumber) m Source #
Type alias for ConnectionManager
which is using expanded context.
tracing
data ConnectionHandlerTrace versionNumber versionData Source #
ConnectionHandlerTrace
is embedded into ConnectionManagerTrace
with
ConnectionHandlerTrace
constructor. It already includes ConnectionId
so we don't need to take
care of it here.
TODO: when Handshake
will get its own tracer, independent of Mux
, it
should be embedded into ConnectionHandlerTrace
.
Constructors
TrHandshakeSuccess versionNumber versionData | |
TrHandshakeQuery (Map versionNumber (Either Text versionData)) | |
TrHandshakeClientError (HandshakeException versionNumber) | |
TrHandshakeServerError (HandshakeException versionNumber) | |
TrConnectionHandlerError ErrorContext SomeException ErrorCommand |
Instances
(Show versionNumber, Show versionData) ⇒ Show (ConnectionHandlerTrace versionNumber versionData) Source # | |
Defined in Ouroboros.Network.ConnectionHandler Methods showsPrec ∷ Int → ConnectionHandlerTrace versionNumber versionData → ShowS # show ∷ ConnectionHandlerTrace versionNumber versionData → String # showList ∷ [ConnectionHandlerTrace versionNumber versionData] → ShowS # |