ouroboros-network-framework
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Network.Protocol.Handshake.Type

Synopsis

Handshake Protocol

data Handshake (vNumber :: k) (vParams :: k1) where Source #

The handshake mini-protocol is used initially to agree the version and associated parameters of the protocol to use for all subsequent communication.

Constructors

StPropose :: forall {k} {k1} (vNumber :: k) (vParams :: k1). Handshake vNumber vParams 
StConfirm :: forall {k} {k1} (vNumber :: k) (vParams :: k1). Handshake vNumber vParams 
StDone :: forall {k} {k1} (vNumber :: k) (vParams :: k1). Handshake vNumber vParams 

Instances

Instances details
ShowProxy (Handshake vNumber vParams :: Type) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

showProxy :: Proxy (Handshake vNumber vParams) -> String #

(NFData vNumber, NFData vParams) => NFData (Message (Handshake vNumber vParams) from to) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

rnf :: Message (Handshake vNumber vParams) from to -> () #

(Show vNumber, Show vParams) => Show (Message (Handshake vNumber vParams) from to) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

showsPrec :: Int -> Message (Handshake vNumber vParams) from to -> ShowS #

show :: Message (Handshake vNumber vParams) from to -> String #

showList :: [Message (Handshake vNumber vParams) from to] -> ShowS #

Protocol (Handshake vNumber vParams) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Associated Types

type StateToken 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

type StateToken = SingHandshake :: Handshake vNumber vParams -> Type
StateTokenI ('StConfirm :: Handshake vNumber vParams) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

stateToken :: StateToken ('StConfirm :: Handshake vNumber vParams) #

StateTokenI ('StDone :: Handshake vNumber vParams) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

stateToken :: StateToken ('StDone :: Handshake vNumber vParams) #

StateTokenI ('StPropose :: Handshake vNumber vParams) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

stateToken :: StateToken ('StPropose :: Handshake vNumber vParams) #

data Message (Handshake vNumber vParams) (from :: Handshake vNumber vParams) (to :: Handshake vNumber vParams) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

data Message (Handshake vNumber vParams) (from :: Handshake vNumber vParams) (to :: Handshake vNumber vParams) where
type StateToken Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

type StateToken = SingHandshake :: Handshake vNumber vParams -> Type
type StateAgency ('StConfirm :: Handshake vNumber vParams) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

type StateAgency ('StConfirm :: Handshake vNumber vParams) = 'ServerAgency
type StateAgency ('StDone :: Handshake vNumber vParams) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

type StateAgency ('StDone :: Handshake vNumber vParams) = 'NobodyAgency
type StateAgency ('StPropose :: Handshake vNumber vParams) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

type StateAgency ('StPropose :: Handshake vNumber vParams) = 'ClientAgency

data SingHandshake (st :: Handshake vNumber vParams) where Source #

Constructors

SingPropose :: forall {k} {k1} {vNumber :: k} {vParams :: k1}. SingHandshake ('StPropose :: Handshake vNumber vParams) 
SingConfirm :: forall {k} {k1} {vNumber :: k} {vParams :: k1}. SingHandshake ('StConfirm :: Handshake vNumber vParams) 
SingDone :: forall {k} {k1} {vNumber :: k} {vParams :: k1}. SingHandshake ('StDone :: Handshake vNumber vParams) 

Instances

Instances details
Show (SingHandshake st) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

data family Message ps (st :: ps) (st' :: ps) #

The messages for this protocol. It is expected to be a GADT that is indexed by the from and to protocol states. That is the protocol state the message transitions from, and the protocol state it transitions into. These are the edges of the protocol state transition system.

Instances

Instances details
(NFData vNumber, NFData vParams) => NFData (Message (Handshake vNumber vParams) from to) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

rnf :: Message (Handshake vNumber vParams) from to -> () #

(Show vNumber, Show vParams) => Show (Message (Handshake vNumber vParams) from to) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

showsPrec :: Int -> Message (Handshake vNumber vParams) from to -> ShowS #

show :: Message (Handshake vNumber vParams) from to -> String #

showList :: [Message (Handshake vNumber vParams) from to] -> ShowS #

data Message (Handshake vNumber vParams) (from :: Handshake vNumber vParams) (to :: Handshake vNumber vParams) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

data Message (Handshake vNumber vParams) (from :: Handshake vNumber vParams) (to :: Handshake vNumber vParams) where

On simultaneous open both sides will send MsgProposeVersions, which will be decoded as MsgReplyVersions. It is a terminal message of the protocol. It is important to stress that in this case both sides will make the choice which version and parameters to pick. Our algorithm for picking version is symmetric, which ensures that both sides will end up with the same choice. If one side decides to refuse the version it will close the connection, without sending the reason to the other side.

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 [Int].

HandshakeDecodeError vNumber Text

The server failed to decode version parameters.

Refused vNumber Text

The server refused to run the proposed version parameters

Instances

Instances details
NFData vNumber => NFData (RefuseReason vNumber) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

rnf :: RefuseReason vNumber -> () #

(Typeable vNumber, Show vNumber) => Exception (RefuseReason vNumber) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Generic (RefuseReason vNumber) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Associated Types

type Rep (RefuseReason vNumber) 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

from :: RefuseReason vNumber -> Rep (RefuseReason vNumber) x #

to :: Rep (RefuseReason vNumber) x -> RefuseReason vNumber #

Show vNumber => Show (RefuseReason vNumber) Source # 
Instance details

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 # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

Methods

(==) :: RefuseReason vNumber -> RefuseReason vNumber -> Bool #

(/=) :: RefuseReason vNumber -> RefuseReason vNumber -> Bool #

type Rep (RefuseReason vNumber) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Type

data HandshakeProtocolError vNumber Source #

Extends handshake error RefuseReason type, by client specific errors.

data HandshakeResult r vNumber vData Source #

The result of a handshake.

Constructors

HandshakeNegotiationResult r vNumber vData 
HandshakeQueryResult (Map vNumber (Either Text vData))