| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Network.Protocol.Handshake
Contents
Description
API for running Handshake protocol.
Synopsis
- runHandshakeClient :: (MonadAsync m, MonadEvaluate m, MonadFork m, MonadTimer m, MonadMask m, MonadThrow (STM m), Ord vNumber, NFData vNumber, NFData vData) => Bearer m -> connectionId -> HandshakeArguments connectionId vNumber vData m -> Versions vNumber vData application -> m (Either (HandshakeException vNumber) (HandshakeResult application vNumber vData))
- runHandshakeServer :: (MonadAsync m, MonadEvaluate m, MonadFork m, MonadTimer m, MonadMask m, MonadThrow (STM m), Ord vNumber, NFData vNumber, NFData vData) => Bearer m -> connectionId -> HandshakeArguments connectionId vNumber vData m -> Versions vNumber vData application -> m (Either (HandshakeException vNumber) (HandshakeResult application vNumber vData))
- data HandshakeArguments connectionId vNumber vData (m :: Type -> Type) = HandshakeArguments {
- haHandshakeTracer :: Tracer m (WithBearer connectionId (TraceSendRecv (Handshake vNumber Term)))
- haBearerTracer :: Tracer m (WithBearer connectionId BearerTrace)
- haHandshakeCodec :: Codec (Handshake vNumber Term) DeserialiseFailure m ByteString
- haVersionDataCodec :: VersionDataCodec Term vNumber vData
- haAcceptVersion :: vData -> vData -> Accept vData
- haQueryVersion :: vData -> Bool
- haTimeLimits :: ProtocolTimeLimits (Handshake vNumber Term)
- newtype Versions vNum vData r = Versions {
- getVersions :: Map vNum (Version vData r)
- data HandshakeException vNumber
- data HandshakeProtocolError vNumber
- = HandshakeError (RefuseReason vNumber)
- | NotRecognisedVersion vNumber
- | InvalidServerSelection vNumber Text
- | QueryNotSupported
- data HandshakeResult r vNumber vData
- = HandshakeNegotiationResult r vNumber vData
- | HandshakeQueryResult (Map vNumber (Either Text vData))
- data RefuseReason vNumber
- = VersionMismatch [vNumber] [Int]
- | HandshakeDecodeError vNumber Text
- | Refused vNumber Text
- data Accept vData
- handshake_QUERY_SHUTDOWN_DELAY :: DiffTime
- module Ouroboros.Network.Protocol.Handshake.Type
- module Ouroboros.Network.Protocol.Handshake.Codec
- module Ouroboros.Network.Protocol.Handshake.Version
- class Acceptable v where
- acceptableVersion :: v -> v -> Accept v
- class Queryable v where
- queryVersion :: v -> Bool
Documentation
runHandshakeClient :: (MonadAsync m, MonadEvaluate m, MonadFork m, MonadTimer m, MonadMask m, MonadThrow (STM m), Ord vNumber, NFData vNumber, NFData vData) => Bearer m -> connectionId -> HandshakeArguments connectionId vNumber vData m -> Versions vNumber vData application -> m (Either (HandshakeException vNumber) (HandshakeResult application vNumber vData)) Source #
Run client side of the Handshake protocol
runHandshakeServer :: (MonadAsync m, MonadEvaluate m, MonadFork m, MonadTimer m, MonadMask m, MonadThrow (STM m), Ord vNumber, NFData vNumber, NFData vData) => Bearer m -> connectionId -> HandshakeArguments connectionId vNumber vData m -> Versions vNumber vData application -> m (Either (HandshakeException vNumber) (HandshakeResult application vNumber vData)) Source #
Run server side of the Handshake protocol.
data HandshakeArguments connectionId vNumber vData (m :: Type -> Type) Source #
Common arguments for both Handshake client & server.
Constructors
| HandshakeArguments | |
Fields
| |
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
| |
data HandshakeException vNumber Source #
Wrapper around initiator and responder errors experienced by tryHandshake.
TODO: should we have Exception instance?
It would be handly in prop_socket_send_recgtv.
Constructors
| HandshakeProtocolLimit ProtocolLimitFailure | |
| HandshakeProtocolError (HandshakeProtocolError vNumber) |
Instances
data HandshakeProtocolError vNumber Source #
Extends handshake error type, by client specific errors.RefuseReason
Constructors
| HandshakeError (RefuseReason vNumber) | |
| NotRecognisedVersion vNumber | |
| InvalidServerSelection vNumber Text | |
| QueryNotSupported |
Instances
| NFData vNumber => NFData (HandshakeProtocolError vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type Methods rnf :: HandshakeProtocolError vNumber -> () # | |||||
| (Typeable vNumber, Show vNumber) => Exception (HandshakeProtocolError vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type Methods toException :: HandshakeProtocolError vNumber -> SomeException # fromException :: SomeException -> Maybe (HandshakeProtocolError vNumber) # displayException :: HandshakeProtocolError vNumber -> String # backtraceDesired :: HandshakeProtocolError vNumber -> Bool # | |||||
| Generic (HandshakeProtocolError vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type Associated Types
Methods from :: HandshakeProtocolError vNumber -> Rep (HandshakeProtocolError vNumber) x # to :: Rep (HandshakeProtocolError vNumber) x -> HandshakeProtocolError vNumber # | |||||
| Show vNumber => Show (HandshakeProtocolError vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type Methods showsPrec :: Int -> HandshakeProtocolError vNumber -> ShowS # show :: HandshakeProtocolError vNumber -> String # showList :: [HandshakeProtocolError vNumber] -> ShowS # | |||||
| Eq vNumber => Eq (HandshakeProtocolError vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type Methods (==) :: HandshakeProtocolError vNumber -> HandshakeProtocolError vNumber -> Bool # (/=) :: HandshakeProtocolError vNumber -> HandshakeProtocolError vNumber -> Bool # | |||||
| type Rep (HandshakeProtocolError vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type type Rep (HandshakeProtocolError vNumber) = D1 ('MetaData "HandshakeProtocolError" "Ouroboros.Network.Protocol.Handshake.Type" "ouroboros-network-1.0.0.0-inplace-framework" 'False) ((C1 ('MetaCons "HandshakeError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (RefuseReason vNumber))) :+: C1 ('MetaCons "NotRecognisedVersion" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 vNumber))) :+: (C1 ('MetaCons "InvalidServerSelection" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 vNumber) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: C1 ('MetaCons "QueryNotSupported" 'PrefixI 'False) (U1 :: Type -> Type))) | |||||
data HandshakeResult r vNumber vData Source #
The result of a handshake.
Constructors
| HandshakeNegotiationResult r vNumber vData | |
| HandshakeQueryResult (Map vNumber (Either Text vData)) |
Instances
| (NFData vNumber, NFData vData) => NFData (HandshakeResult r vNumber vData) Source # | |
Defined in Ouroboros.Network.Protocol.Handshake.Type Methods rnf :: HandshakeResult r vNumber vData -> () # | |
data RefuseReason vNumber Source #
Reasons by which a server can refuse proposed version.
Constructors
| VersionMismatch [vNumber] [Int] | All of the prosed versions where not known to the server.
Since the server sends all versions that it can knows about, some of them
we might not be able to decode, so we include raw tags |
| HandshakeDecodeError vNumber Text | The server failed to decode version parameters. |
| Refused vNumber Text | The server refused to run the proposed version parameters |
Instances
| NFData vNumber => NFData (RefuseReason vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type Methods rnf :: RefuseReason vNumber -> () # | |||||
| (Typeable vNumber, Show vNumber) => Exception (RefuseReason vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type Methods toException :: RefuseReason vNumber -> SomeException # fromException :: SomeException -> Maybe (RefuseReason vNumber) # displayException :: RefuseReason vNumber -> String # backtraceDesired :: RefuseReason vNumber -> Bool # | |||||
| Generic (RefuseReason vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type Associated Types
Methods from :: RefuseReason vNumber -> Rep (RefuseReason vNumber) x # to :: Rep (RefuseReason vNumber) x -> RefuseReason vNumber # | |||||
| Show vNumber => Show (RefuseReason vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type Methods showsPrec :: Int -> RefuseReason vNumber -> ShowS # show :: RefuseReason vNumber -> String # showList :: [RefuseReason vNumber] -> ShowS # | |||||
| Eq vNumber => Eq (RefuseReason vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type Methods (==) :: RefuseReason vNumber -> RefuseReason vNumber -> Bool # (/=) :: RefuseReason vNumber -> RefuseReason vNumber -> Bool # | |||||
| type Rep (RefuseReason vNumber) Source # | |||||
Defined in Ouroboros.Network.Protocol.Handshake.Type type Rep (RefuseReason vNumber) = D1 ('MetaData "RefuseReason" "Ouroboros.Network.Protocol.Handshake.Type" "ouroboros-network-1.0.0.0-inplace-framework" 'False) (C1 ('MetaCons "VersionMismatch" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [vNumber]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Int])) :+: (C1 ('MetaCons "HandshakeDecodeError" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 vNumber) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: C1 ('MetaCons "Refused" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 vNumber) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))) | |||||
handshake_QUERY_SHUTDOWN_DELAY :: DiffTime Source #
A 20s delay after query result was send back, before we close the connection. After that delay we close the connection.
Re-exports
class Acceptable v where #
Methods
acceptableVersion :: v -> v -> Accept v #
Methods
queryVersion :: v -> Bool #
Instances
| Queryable DataFlowProtocolData Source # | |
Defined in Ouroboros.Network.Protocol.Handshake.Unversioned Methods | |
| Queryable UnversionedProtocolData Source # | |
Defined in Ouroboros.Network.Protocol.Handshake.Unversioned Methods | |