Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- muxStart :: forall m mode a b. ( MonadAsync m, MonadFork m, MonadLabelledSTM m, MonadThrow ( STM m), MonadTime m, MonadTimer m, MonadMask m) => Tracer m MuxTrace -> MuxApplication mode m a b -> MuxBearer m -> m ()
- data MuxBearer m
- data MuxMode where
- type family HasInitiator (mode :: MuxMode ) :: Bool where ...
- type family HasResponder (mode :: MuxMode ) :: Bool where ...
- newtype MuxApplication (mode :: MuxMode ) m a b = MuxApplication [ MuxMiniProtocol mode m a b]
-
data
MuxMiniProtocol
(mode ::
MuxMode
) m a b =
MuxMiniProtocol
{
- miniProtocolNum :: ! MiniProtocolNum
- miniProtocolLimits :: ! MiniProtocolLimits
- miniProtocolRun :: !( RunMiniProtocol mode m a b)
-
data
RunMiniProtocol
(mode ::
MuxMode
) m a b
where
- InitiatorProtocolOnly :: ( Channel m -> m (a, Maybe ByteString )) -> RunMiniProtocol InitiatorMode m a Void
- ResponderProtocolOnly :: ( Channel m -> m (b, Maybe ByteString )) -> RunMiniProtocol ResponderMode m Void b
- InitiatorAndResponderProtocol :: ( Channel m -> m (a, Maybe ByteString )) -> ( Channel m -> m (b, Maybe ByteString )) -> RunMiniProtocol InitiatorResponderMode m a b
- newtype MiniProtocolNum = MiniProtocolNum Word16
-
data
MiniProtocolLimits
=
MiniProtocolLimits
{
- maximumIngressQueue :: ! Int
- data MiniProtocolDir
-
data
MuxError
=
MuxError
{
- errorType :: ! MuxErrorType
- errorMsg :: ! String
- data MuxErrorType
- traceMuxBearerState :: Tracer m MuxTrace -> MuxBearerState -> m ()
- data MuxBearerState
-
data
MuxTrace
- = MuxTraceRecvHeaderStart
- | MuxTraceRecvHeaderEnd MuxSDUHeader
- | MuxTraceRecvDeltaQObservation MuxSDUHeader Time
- | MuxTraceRecvDeltaQSample Double Int Int Double Double Double Double String
- | MuxTraceRecvStart Int
- | MuxTraceRecvEnd Int
- | MuxTraceSendStart MuxSDUHeader
- | MuxTraceSendEnd
- | MuxTraceState MuxBearerState
- | MuxTraceCleanExit MiniProtocolNum MiniProtocolDir
- | MuxTraceExceptionExit MiniProtocolNum MiniProtocolDir SomeException
- | MuxTraceChannelRecvStart MiniProtocolNum
- | MuxTraceChannelRecvEnd MiniProtocolNum Int
- | MuxTraceChannelSendStart MiniProtocolNum Int
- | MuxTraceChannelSendEnd MiniProtocolNum
- | MuxTraceHandshakeStart
- | MuxTraceHandshakeClientEnd DiffTime
- | MuxTraceHandshakeServerEnd
- | forall e. Exception e => MuxTraceHandshakeClientError e DiffTime
- | forall e. Exception e => MuxTraceHandshakeServerError e
- | MuxTraceSDUReadTimeoutException
- | MuxTraceSDUWriteTimeoutException
- | MuxTraceStartEagerly MiniProtocolNum MiniProtocolDir
- | MuxTraceStartOnDemand MiniProtocolNum MiniProtocolDir
- | MuxTraceStartedOnDemand MiniProtocolNum MiniProtocolDir
- | MuxTraceTerminating MiniProtocolNum MiniProtocolDir
- | MuxTraceShutdown
- | MuxTraceTCPInfo StructTCPInfo Word16
- data WithMuxBearer peerid a = WithMuxBearer { }
Documentation
muxStart :: forall m mode a b. ( MonadAsync m, MonadFork m, MonadLabelledSTM m, MonadThrow ( STM m), MonadTime m, MonadTimer m, MonadMask m) => Tracer m MuxTrace -> MuxApplication mode m a b -> MuxBearer m -> m () Source #
Mux bearers
Low level access to underlying socket or pipe. There are three smart constructors:
-
socketAsMuxBearer
-
pipeAsMuxBearer
-
Test.Mux.queuesAsMuxBearer
Defining
MuxApplication
s
type family HasInitiator (mode :: MuxMode ) :: Bool where ... Source #
type family HasResponder (mode :: MuxMode ) :: Bool where ... Source #
newtype MuxApplication (mode :: MuxMode ) m a b Source #
MuxApplication [ MuxMiniProtocol mode m a b] |
data MuxMiniProtocol (mode :: MuxMode ) m a b Source #
MuxMiniProtocol | |
|
data RunMiniProtocol (mode :: MuxMode ) m a b where Source #
InitiatorProtocolOnly :: ( Channel m -> m (a, Maybe ByteString )) -> RunMiniProtocol InitiatorMode m a Void | |
ResponderProtocolOnly :: ( Channel m -> m (b, Maybe ByteString )) -> RunMiniProtocol ResponderMode m Void b | |
InitiatorAndResponderProtocol :: ( Channel m -> m (a, Maybe ByteString )) -> ( Channel m -> m (b, Maybe ByteString )) -> RunMiniProtocol InitiatorResponderMode m a b |
newtype MiniProtocolNum Source #
The wire format includes the protocol numbers, and it's vital that these
are stable. They are not necessarily dense however, as new ones are added
and some old ones retired. So we use a dedicated class for this rather than
reusing
Enum
. This also covers unrecognised protocol numbers on the
decoding side.
Instances
data MiniProtocolLimits Source #
Per Miniprotocol limits
MiniProtocolLimits | |
|
data MiniProtocolDir Source #
Instances
Errors
Error type used in across the mux layer.
MuxError | |
|
Instances
Show MuxError Source # | |
Generic MuxError Source # | |
Exception MuxError Source # | |
Defined in Network.Mux.Trace toException :: MuxError -> SomeException Source # fromException :: SomeException -> Maybe MuxError Source # displayException :: MuxError -> String Source # |
|
type Rep MuxError Source # | |
Defined in Network.Mux.Trace
type
Rep
MuxError
=
D1
('
MetaData
"MuxError" "Network.Mux.Trace" "network-mux-0.1.0.1-7ZKx91o48G8EWFMuCmTsQc" '
False
) (
C1
('
MetaCons
"MuxError" '
PrefixI
'
True
) (
S1
('
MetaSel
('
Just
"errorType") '
NoSourceUnpackedness
'
SourceStrict
'
DecidedStrict
) (
Rec0
MuxErrorType
)
:*:
S1
('
MetaSel
('
Just
"errorMsg") '
NoSourceUnpackedness
'
SourceStrict
'
DecidedStrict
) (
Rec0
String
)))
|
data MuxErrorType Source #
Enumeration of error conditions.
MuxUnknownMiniProtocol |
returned by
|
MuxDecodeError |
return by
|
MuxBearerClosed |
thrown by
|
MuxIngressQueueOverRun |
thrown by
|
MuxInitiatorOnly |
thrown when data arrives on a responder channel when the
mux was set up as an
|
MuxIOException IOException |
|
MuxSDUReadTimeout |
thrown when reading of a single SDU takes too long |
MuxSDUWriteTimeout |
thrown when writing a single SDU takes too long |
MuxShutdown !( Maybe MuxErrorType ) |
Result of runMiniProtocol's completionAction in case of an error or mux being closed while a mini-protocol was still running, this is not a clean exit. |
MuxCleanShutdown |
Mux stopped by
|
Instances
Eq MuxErrorType Source # | |
Defined in Network.Mux.Trace (==) :: MuxErrorType -> MuxErrorType -> Bool Source # (/=) :: MuxErrorType -> MuxErrorType -> Bool Source # |
|
Show MuxErrorType Source # | |
Defined in Network.Mux.Trace |
Tracing
traceMuxBearerState :: Tracer m MuxTrace -> MuxBearerState -> m () Source #
data MuxBearerState Source #
Mature |
MuxBearer has successfully completed the handshake. |
Dead |
MuxBearer is dead and the underlying bearer has been closed. |
Instances
Eq MuxBearerState Source # | |
Defined in Network.Mux.Trace (==) :: MuxBearerState -> MuxBearerState -> Bool Source # (/=) :: MuxBearerState -> MuxBearerState -> Bool Source # |
|
Show MuxBearerState Source # | |
Defined in Network.Mux.Trace |
Enumeration of Mux events that can be traced.
data WithMuxBearer peerid a Source #
Type used for tracing mux events.
Instances
( Show peerid, Show a) => Show ( WithMuxBearer peerid a) Source # | |
Defined in Network.Mux.Trace |
|
Generic ( WithMuxBearer peerid a) Source # | |
Defined in Network.Mux.Trace from :: WithMuxBearer peerid a -> Rep ( WithMuxBearer peerid a) x Source # to :: Rep ( WithMuxBearer peerid a) x -> WithMuxBearer peerid a Source # |
|
type Rep ( WithMuxBearer peerid a) Source # | |
Defined in Network.Mux.Trace
type
Rep
(
WithMuxBearer
peerid a) =
D1
('
MetaData
"WithMuxBearer" "Network.Mux.Trace" "network-mux-0.1.0.1-7ZKx91o48G8EWFMuCmTsQc" '
False
) (
C1
('
MetaCons
"WithMuxBearer" '
PrefixI
'
True
) (
S1
('
MetaSel
('
Just
"wmbPeerId") '
NoSourceUnpackedness
'
SourceStrict
'
DecidedStrict
) (
Rec0
peerid)
:*:
S1
('
MetaSel
('
Just
"wmbEvent") '
NoSourceUnpackedness
'
SourceStrict
'
DecidedStrict
) (
Rec0
a)))
|