simplexmq-6.5.0.16: SimpleXMQ message broker
Copyright(c) simplex.chat
LicenseAGPL-3
Maintainerchat@simplex.chat
Stabilityexperimental
Portabilitynon-portable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Simplex.Messaging.Protocol

Description

Types, parsers, serializers and functions to send and receive SMP protocol commands and responses.

See https://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md

Synopsis

SMP protocol parameters

SMP protocol types

pattern VersionSMPC :: Word16 -> VersionSMPC Source #

class ProtocolMsgTag (Tag msg) => ProtocolEncoding v err msg | msg -> err, msg -> v where Source #

Associated Types

type Tag msg Source #

Methods

encodeProtocol :: Version v -> msg -> ByteString Source #

protocolP :: Version v -> Tag msg -> Parser msg Source #

fromProtocolError :: ProtocolErrorType -> err Source #

checkCredentials :: Maybe TAuthorizations -> EntityId -> msg -> Either err msg Source #

Instances

Instances details
ProtocolEncoding XFTPVersion XFTPErrorType FileCmd Source # 
Instance details

Defined in Simplex.FileTransfer.Protocol

Associated Types

type Tag FileCmd Source #

ProtocolEncoding XFTPVersion XFTPErrorType FileResponse Source # 
Instance details

Defined in Simplex.FileTransfer.Protocol

Associated Types

type Tag FileResponse Source #

ProtocolEncoding NTFVersion ErrorType NtfCmd Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Associated Types

type Tag NtfCmd Source #

ProtocolEncoding NTFVersion ErrorType NtfResponse Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Associated Types

type Tag NtfResponse Source #

ProtocolEncoding SMPVersion ErrorType BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type Tag BrokerMsg Source #

ProtocolEncoding SMPVersion ErrorType Cmd Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type Tag Cmd Source #

FilePartyI p => ProtocolEncoding XFTPVersion XFTPErrorType (FileCommand p) Source # 
Instance details

Defined in Simplex.FileTransfer.Protocol

Associated Types

type Tag (FileCommand p) Source #

NtfEntityI e => ProtocolEncoding NTFVersion ErrorType (NtfCommand e) Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Associated Types

type Tag (NtfCommand e) Source #

PartyI p => ProtocolEncoding SMPVersion ErrorType (Command p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type Tag (Command p) Source #

data Command (p :: Party) where Source #

Parameterized type for SMP protocol commands from all clients.

Constructors

NEW :: NewQueueReq -> Command Creator 
SUB :: Command Recipient 
SUBS :: Command RecipientService

subscribe all associated queues. Service ID must be used as entity ID, and service session key must sign the command.

KEY :: SndPublicAuthKey -> Command Recipient 
RKEY :: NonEmpty RcvPublicAuthKey -> Command Recipient 
LSET :: LinkId -> QueueLinkData -> Command Recipient 
LDEL :: Command Recipient 
NKEY :: NtfPublicAuthKey -> RcvNtfPublicDhKey -> Command Recipient 
NDEL :: Command Recipient 
GET :: Command Recipient 
ACK :: MsgId -> Command Recipient 
OFF :: Command Recipient 
DEL :: Command Recipient 
QUE :: Command Recipient 
SKEY :: SndPublicAuthKey -> Command Sender 
SEND :: MsgFlags -> MsgBody -> Command Sender 
PING :: Command IdleClient 
LKEY :: SndPublicAuthKey -> Command LinkClient 
LGET :: Command LinkClient 
NSUB :: Command Notifier 
NSUBS :: Command NotifierService

subscribe all associated queues. Service ID must be used as entity ID, and service session key must sign the command.

PRXY :: SMPServer -> Maybe BasicAuth -> Command ProxiedClient 
PFWD :: VersionSMP -> PublicKeyX25519 -> EncTransmission -> Command ProxiedClient 
RFWD :: EncFwdTransmission -> Command ProxyService 

Instances

Instances details
PartyI p => ProtocolEncoding SMPVersion ErrorType (Command p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type Tag (Command p) Source #

Show (Command p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> Command p -> ShowS

show :: Command p -> String

showList :: [Command p] -> ShowS

type Tag (Command p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

type Tag (Command p) = CommandTag p

data SubscriptionMode Source #

Constructors

SMSubscribe 
SMOnlyCreate 

Instances

Instances details
Show SubscriptionMode Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> SubscriptionMode -> ShowS

show :: SubscriptionMode -> String

showList :: [SubscriptionMode] -> ShowS

Eq SubscriptionMode Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Encoding SubscriptionMode Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: SubscriptionMode -> ByteString Source #

smpDecode :: ByteString -> Either String SubscriptionMode Source #

smpP :: Parser SubscriptionMode Source #

StrEncoding SubscriptionMode Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: SubscriptionMode -> ByteString Source #

strDecode :: ByteString -> Either String SubscriptionMode Source #

strP :: Parser SubscriptionMode Source #

data NewQueueReq Source #

Instances

Instances details
Show NewQueueReq Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> NewQueueReq -> ShowS

show :: NewQueueReq -> String

showList :: [NewQueueReq] -> ShowS

data QueueReqData Source #

Constructors

QRMessaging (Maybe (SenderId, QueueLinkData)) 
QRContact (Maybe (LinkId, (SenderId, QueueLinkData))) 

Instances

Instances details
Show QueueReqData Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> QueueReqData -> ShowS

show :: QueueReqData -> String

showList :: [QueueReqData] -> ShowS

Encoding QueueReqData Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: QueueReqData -> ByteString Source #

smpDecode :: ByteString -> Either String QueueReqData Source #

smpP :: Parser QueueReqData Source #

data QueueMode Source #

Constructors

QMMessaging 
QMContact 

Instances

Instances details
Show QueueMode Source # 
Instance details

Defined in Simplex.Messaging.Server.QueueStore.QueueInfo

Methods

showsPrec :: Int -> QueueMode -> ShowS

show :: QueueMode -> String

showList :: [QueueMode] -> ShowS

Eq QueueMode Source # 
Instance details

Defined in Simplex.Messaging.Server.QueueStore.QueueInfo

Methods

(==) :: QueueMode -> QueueMode -> Bool

(/=) :: QueueMode -> QueueMode -> Bool

Encoding QueueMode Source # 
Instance details

Defined in Simplex.Messaging.Server.QueueStore.QueueInfo

Methods

smpEncode :: QueueMode -> ByteString Source #

smpDecode :: ByteString -> Either String QueueMode Source #

smpP :: Parser QueueMode Source #

FromField QueueMode Source # 
Instance details

Defined in Simplex.Messaging.Server.QueueStore.QueueInfo

Methods

fromField :: FieldParser QueueMode #

ToField QueueMode Source # 
Instance details

Defined in Simplex.Messaging.Server.QueueStore.QueueInfo

Methods

toField :: QueueMode -> SQLData #

newtype EncDataBytes Source #

Constructors

EncDataBytes ByteString 

Instances

Instances details
Show EncDataBytes Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> EncDataBytes -> ShowS

show :: EncDataBytes -> String

showList :: [EncDataBytes] -> ShowS

Eq EncDataBytes Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: EncDataBytes -> EncDataBytes -> Bool

(/=) :: EncDataBytes -> EncDataBytes -> Bool

Encoding EncDataBytes Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: EncDataBytes -> ByteString Source #

smpDecode :: ByteString -> Either String EncDataBytes Source #

smpP :: Parser EncDataBytes Source #

StrEncoding EncDataBytes Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: EncDataBytes -> ByteString Source #

strDecode :: ByteString -> Either String EncDataBytes Source #

strP :: Parser EncDataBytes Source #

FromField EncDataBytes Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

fromField :: FieldParser EncDataBytes #

ToField EncDataBytes Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toField :: EncDataBytes -> SQLData #

data NewNtfCreds Source #

Instances

Instances details
Show NewNtfCreds Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> NewNtfCreds -> ShowS

show :: NewNtfCreds -> String

showList :: [NewNtfCreds] -> ShowS

Encoding NewNtfCreds Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: NewNtfCreds -> ByteString Source #

smpDecode :: ByteString -> Either String NewNtfCreds Source #

smpP :: Parser NewNtfCreds Source #

data ServerNtfCreds Source #

Instances

Instances details
Show ServerNtfCreds Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> ServerNtfCreds -> ShowS

show :: ServerNtfCreds -> String

showList :: [ServerNtfCreds] -> ShowS

Eq ServerNtfCreds Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Encoding ServerNtfCreds Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: ServerNtfCreds -> ByteString Source #

smpDecode :: ByteString -> Either String ServerNtfCreds Source #

smpP :: Parser ServerNtfCreds Source #

data Party Source #

SMP protocol clients

Instances

Instances details
Show Party Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> Party -> ShowS

show :: Party -> String

showList :: [Party] -> ShowS

TestEquality SParty Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

testEquality :: forall (a :: k) (b :: k). SParty a -> SParty b -> Maybe (a :~: b)

data Cmd Source #

Type for client command of any participant.

Constructors

forall p.PartyI p => Cmd (SParty p) (Command p) 

Instances

Instances details
Show Cmd Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> Cmd -> ShowS

show :: Cmd -> String

showList :: [Cmd] -> ShowS

ProtocolEncoding SMPVersion ErrorType Cmd Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type Tag Cmd Source #

type Tag Cmd Source # 
Instance details

Defined in Simplex.Messaging.Protocol

type Tag Cmd

type family QueueParty (p :: Party) :: Constraint where ... Source #

Equations

QueueParty Recipient = () 
QueueParty Sender = () 
QueueParty Notifier = () 
QueueParty LinkClient = () 
QueueParty p = (Int ~ Bool, TypeError ((Text "Party " :<>: ShowType p) :<>: Text " is not QueueParty")) 

type family BatchParty (p :: Party) :: Constraint where ... Source #

Equations

BatchParty Recipient = () 
BatchParty Notifier = () 
BatchParty p = (Int ~ Bool, TypeError ((Text "Party " :<>: ShowType p) :<>: Text " is not BatchParty")) 

type family ServiceParty (p :: Party) :: Constraint where ... Source #

Equations

ServiceParty RecipientService = () 
ServiceParty NotifierService = () 
ServiceParty p = (Int ~ Bool, TypeError ((Text "Party " :<>: ShowType p) :<>: Text " is not ServiceParty")) 

data ASubscriberParty Source #

Constructors

forall p.(PartyI p, ServiceParty p) => ASP (SParty p) 

Instances

Instances details
Show ASubscriberParty Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> ASubscriberParty -> ShowS

show :: ASubscriberParty -> String

showList :: [ASubscriberParty] -> ShowS

Eq ASubscriberParty Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Encoding ASubscriberParty Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: ASubscriberParty -> ByteString Source #

smpDecode :: ByteString -> Either String ASubscriberParty Source #

smpP :: Parser ASubscriberParty Source #

StrEncoding ASubscriberParty Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: ASubscriberParty -> ByteString Source #

strDecode :: ByteString -> Either String ASubscriberParty Source #

strP :: Parser ASubscriberParty Source #

data BrokerMsg where Source #

Constructors

IDS :: QueueIdsKeys -> BrokerMsg 
LNK :: SenderId -> QueueLinkData -> BrokerMsg 
SOK :: Maybe ServiceId -> BrokerMsg

Service subscription success - confirms when queue was associated with the service

SOKS :: Int64 -> BrokerMsg

The number of queues subscribed with SUBS command

MSG :: RcvMessage -> BrokerMsg 
NID :: NotifierId -> RcvNtfPublicDhKey -> BrokerMsg 
NMSG :: CbNonce -> EncNMsgMeta -> BrokerMsg 
PKEY :: SessionId -> VersionRangeSMP -> CertChainPubKey -> BrokerMsg 
RRES :: EncFwdResponse -> BrokerMsg 
PRES :: EncResponse -> BrokerMsg 
END :: BrokerMsg 
ENDS :: Int64 -> BrokerMsg 
DELD :: BrokerMsg 
INFO :: QueueInfo -> BrokerMsg 
OK :: BrokerMsg 
ERR :: ErrorType -> BrokerMsg 
PONG :: BrokerMsg 

Instances

Instances details
Show BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> BrokerMsg -> ShowS

show :: BrokerMsg -> String

showList :: [BrokerMsg] -> ShowS

Eq BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: BrokerMsg -> BrokerMsg -> Bool

(/=) :: BrokerMsg -> BrokerMsg -> Bool

Protocol SMPVersion ErrorType BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type ProtoCommand BrokerMsg = (cmd :: Type) Source #

type ProtoType BrokerMsg = (sch :: ProtocolType) Source #

ProtocolEncoding SMPVersion ErrorType BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type Tag BrokerMsg Source #

type ProtoCommand BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

type ProtoType BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

type Tag BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

data SParty :: Party -> Type where Source #

Singleton types for SMP protocol clients

Instances

Instances details
TestEquality SParty Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

testEquality :: forall (a :: k) (b :: k). SParty a -> SParty b -> Maybe (a :~: b)

Show (SParty p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> SParty p -> ShowS

show :: SParty p -> String

showList :: [SParty p] -> ShowS

class PartyI (p :: Party) where Source #

Methods

sParty :: SParty p Source #

data QueueIdsKeys Source #

Queue IDs and keys

Instances

Instances details
Show QueueIdsKeys Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> QueueIdsKeys -> ShowS

show :: QueueIdsKeys -> String

showList :: [QueueIdsKeys] -> ShowS

Eq QueueIdsKeys Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: QueueIdsKeys -> QueueIdsKeys -> Bool

(/=) :: QueueIdsKeys -> QueueIdsKeys -> Bool

data ErrorType Source #

Type for protocol errors.

Constructors

BLOCK

incorrect block format, encoding or signature size

SESSION

incorrect SMP session ID (TLS Finished message / tls-unique binding RFC5929)

CMD

SMP command is unknown or has invalid syntax

Fields

PROXY

error from proxied relay

Fields

AUTH

command authorization error - bad signature or non-existing SMP queue

BLOCKED

command with the entity that was blocked

SERVICE

service signature is not allowed for command or session; service command is sent not in service session

CRYPTO

encryption/decryption error in proxy protocol

QUOTA

SMP queue capacity is exceeded on the server

STORE

SMP server storage error

Fields

NO_MSG

ACK command is sent without message to be acknowledged

LARGE_MSG

sent message is too large (> maxMessageLength = 16088 bytes)

EXPIRED

relay public key is expired

INTERNAL

internal server error

DUPLICATE_

used internally, never returned by the server (to be removed)

Instances

Instances details
FromJSON ErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser ErrorType

parseJSONList :: Value -> Parser [ErrorType]

omittedField :: Maybe ErrorType

ToJSON ErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: ErrorType -> Value

toEncoding :: ErrorType -> Encoding

toJSONList :: [ErrorType] -> Value

toEncodingList :: [ErrorType] -> Encoding

omitField :: ErrorType -> Bool

Show ErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> ErrorType -> ShowS

show :: ErrorType -> String

showList :: [ErrorType] -> ShowS

Eq ErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: ErrorType -> ErrorType -> Bool

(/=) :: ErrorType -> ErrorType -> Bool

Encoding ErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: ErrorType -> ByteString Source #

smpDecode :: ByteString -> Either String ErrorType Source #

smpP :: Parser ErrorType Source #

StrEncoding ErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: ErrorType -> ByteString Source #

strDecode :: ByteString -> Either String ErrorType Source #

strP :: Parser ErrorType Source #

Protocol NTFVersion ErrorType NtfResponse Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Associated Types

type ProtoCommand NtfResponse = (cmd :: Type) Source #

type ProtoType NtfResponse = (sch :: ProtocolType) Source #

Protocol SMPVersion ErrorType BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type ProtoCommand BrokerMsg = (cmd :: Type) Source #

type ProtoType BrokerMsg = (sch :: ProtocolType) Source #

ProtocolEncoding NTFVersion ErrorType NtfCmd Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Associated Types

type Tag NtfCmd Source #

ProtocolEncoding NTFVersion ErrorType NtfResponse Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Associated Types

type Tag NtfResponse Source #

ProtocolEncoding SMPVersion ErrorType BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type Tag BrokerMsg Source #

ProtocolEncoding SMPVersion ErrorType Cmd Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type Tag Cmd Source #

NtfEntityI e => ProtocolEncoding NTFVersion ErrorType (NtfCommand e) Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Associated Types

type Tag (NtfCommand e) Source #

PartyI p => ProtocolEncoding SMPVersion ErrorType (Command p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type Tag (Command p) Source #

data CommandError Source #

SMP command error type.

Constructors

UNKNOWN

unknown command

SYNTAX

error parsing command

PROHIBITED

command is not allowed (bad service role, or SUB/GET used with the same queue in the same TCP session)

NO_AUTH

transmission has no required credentials (signature or queue ID)

HAS_AUTH

transmission has credentials that are not allowed for this command

NO_ENTITY

transmission has no required entity ID (e.g. SMP queue)

Instances

Instances details
FromJSON CommandError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser CommandError

parseJSONList :: Value -> Parser [CommandError]

omittedField :: Maybe CommandError

ToJSON CommandError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: CommandError -> Value

toEncoding :: CommandError -> Encoding

toJSONList :: [CommandError] -> Value

toEncodingList :: [CommandError] -> Encoding

omitField :: CommandError -> Bool

Read CommandError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

readsPrec :: Int -> ReadS CommandError

readList :: ReadS [CommandError]

readPrec :: ReadPrec CommandError

readListPrec :: ReadPrec [CommandError]

Show CommandError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> CommandError -> ShowS

show :: CommandError -> String

showList :: [CommandError] -> ShowS

Eq CommandError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: CommandError -> CommandError -> Bool

(/=) :: CommandError -> CommandError -> Bool

Encoding CommandError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: CommandError -> ByteString Source #

smpDecode :: ByteString -> Either String CommandError Source #

smpP :: Parser CommandError Source #

data ProxyError Source #

Constructors

PROTOCOL

Correctly parsed SMP server ERR response. This error is forwarded to the agent client as AgentErrorType `ERR PROXY PROTOCOL err`.

BROKER

destination server error

BASIC_AUTH

basic auth provided to proxy is invalid

NO_SESSION 

Instances

Instances details
FromJSON ProxyError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser ProxyError

parseJSONList :: Value -> Parser [ProxyError]

omittedField :: Maybe ProxyError

ToJSON ProxyError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: ProxyError -> Value

toEncoding :: ProxyError -> Encoding

toJSONList :: [ProxyError] -> Value

toEncodingList :: [ProxyError] -> Encoding

omitField :: ProxyError -> Bool

Show ProxyError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> ProxyError -> ShowS

show :: ProxyError -> String

showList :: [ProxyError] -> ShowS

Eq ProxyError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: ProxyError -> ProxyError -> Bool

(/=) :: ProxyError -> ProxyError -> Bool

Encoding ProxyError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: ProxyError -> ByteString Source #

smpDecode :: ByteString -> Either String ProxyError Source #

smpP :: Parser ProxyError Source #

StrEncoding ProxyError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: ProxyError -> ByteString Source #

strDecode :: ByteString -> Either String ProxyError Source #

strP :: Parser ProxyError Source #

data BrokerErrorType Source #

SMP server errors.

Constructors

RESPONSE

invalid server response (failed to parse)

Fields

UNEXPECTED

unexpected response

Fields

NETWORK

network error

HOST

no compatible server host (e.g. onion when public is required, or vice versa)

NO_SERVICE

service unavailable client-side - used in agent errors

TRANSPORT

handshake or other transport error

TIMEOUT

command response timeout

Instances

Instances details
FromJSON BrokerErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser BrokerErrorType

parseJSONList :: Value -> Parser [BrokerErrorType]

omittedField :: Maybe BrokerErrorType

ToJSON BrokerErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Exception BrokerErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toException :: BrokerErrorType -> SomeException

fromException :: SomeException -> Maybe BrokerErrorType

displayException :: BrokerErrorType -> String

Read BrokerErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Show BrokerErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> BrokerErrorType -> ShowS

show :: BrokerErrorType -> String

showList :: [BrokerErrorType] -> ShowS

Eq BrokerErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Encoding BrokerErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: BrokerErrorType -> ByteString Source #

smpDecode :: ByteString -> Either String BrokerErrorType Source #

smpP :: Parser BrokerErrorType Source #

StrEncoding BrokerErrorType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: BrokerErrorType -> ByteString Source #

strDecode :: ByteString -> Either String BrokerErrorType Source #

strP :: Parser BrokerErrorType Source #

data NetworkError Source #

Constructors

NEConnectError 

Fields

NETLSError 

Fields

NEUnknownCAError 
NEFailedError 
NETimeoutError 
NESubscribeError 

Fields

Instances

Instances details
FromJSON NetworkError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser NetworkError

parseJSONList :: Value -> Parser [NetworkError]

omittedField :: Maybe NetworkError

ToJSON NetworkError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: NetworkError -> Value

toEncoding :: NetworkError -> Encoding

toJSONList :: [NetworkError] -> Value

toEncodingList :: [NetworkError] -> Encoding

omitField :: NetworkError -> Bool

Read NetworkError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

readsPrec :: Int -> ReadS NetworkError

readList :: ReadS [NetworkError]

readPrec :: ReadPrec NetworkError

readListPrec :: ReadPrec [NetworkError]

Show NetworkError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> NetworkError -> ShowS

show :: NetworkError -> String

showList :: [NetworkError] -> ShowS

Eq NetworkError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: NetworkError -> NetworkError -> Bool

(/=) :: NetworkError -> NetworkError -> Bool

Encoding NetworkError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: NetworkError -> ByteString Source #

smpDecode :: ByteString -> Either String NetworkError Source #

smpP :: Parser NetworkError Source #

StrEncoding NetworkError Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: NetworkError -> ByteString Source #

strDecode :: ByteString -> Either String NetworkError Source #

strP :: Parser NetworkError Source #

data BlockingInfo Source #

Constructors

BlockingInfo 

Instances

Instances details
FromJSON BlockingInfo Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser BlockingInfo

parseJSONList :: Value -> Parser [BlockingInfo]

omittedField :: Maybe BlockingInfo

ToJSON BlockingInfo Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: BlockingInfo -> Value

toEncoding :: BlockingInfo -> Encoding

toJSONList :: [BlockingInfo] -> Value

toEncodingList :: [BlockingInfo] -> Encoding

omitField :: BlockingInfo -> Bool

Show BlockingInfo Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> BlockingInfo -> ShowS

show :: BlockingInfo -> String

showList :: [BlockingInfo] -> ShowS

Eq BlockingInfo Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: BlockingInfo -> BlockingInfo -> Bool

(/=) :: BlockingInfo -> BlockingInfo -> Bool

Encoding BlockingInfo Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: BlockingInfo -> ByteString Source #

smpDecode :: ByteString -> Either String BlockingInfo Source #

smpP :: Parser BlockingInfo Source #

StrEncoding BlockingInfo Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: BlockingInfo -> ByteString Source #

strDecode :: ByteString -> Either String BlockingInfo Source #

strP :: Parser BlockingInfo Source #

data BlockingReason Source #

Constructors

BRSpam 
BRContent 

Instances

Instances details
FromJSON BlockingReason Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser BlockingReason

parseJSONList :: Value -> Parser [BlockingReason]

omittedField :: Maybe BlockingReason

ToJSON BlockingReason Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: BlockingReason -> Value

toEncoding :: BlockingReason -> Encoding

toJSONList :: [BlockingReason] -> Value

toEncodingList :: [BlockingReason] -> Encoding

omitField :: BlockingReason -> Bool

Show BlockingReason Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> BlockingReason -> ShowS

show :: BlockingReason -> String

showList :: [BlockingReason] -> ShowS

Eq BlockingReason Source # 
Instance details

Defined in Simplex.Messaging.Protocol

StrEncoding BlockingReason Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: BlockingReason -> ByteString Source #

strDecode :: ByteString -> Either String BlockingReason Source #

strP :: Parser BlockingReason Source #

data RawTransmission Source #

unparsed SMP transmission with signature.

Instances

Instances details
Show RawTransmission Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> RawTransmission -> ShowS

show :: RawTransmission -> String

showList :: [RawTransmission] -> ShowS

type Transmission c = (CorrId, EntityId, c) Source #

Parsed SMP transmission without signature, size and session ID.

data TransmissionAuth Source #

Instances

Instances details
Show TransmissionAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> TransmissionAuth -> ShowS

show :: TransmissionAuth -> String

showList :: [TransmissionAuth] -> ShowS

type SignedTransmission c = (Maybe TAuthorizations, Signed, Transmission c) Source #

signed parsed transmission, with original raw bytes and parsing error.

type SentRawTransmission = (Maybe TAuthorizations, ByteString) Source #

unparsed sent SMP transmission with signature.

data ClientMsgEnvelope Source #

SMP message body format

Constructors

ClientMsgEnvelope 

Fields

Instances

Instances details
Show ClientMsgEnvelope Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> ClientMsgEnvelope -> ShowS

show :: ClientMsgEnvelope -> String

showList :: [ClientMsgEnvelope] -> ShowS

Encoding ClientMsgEnvelope Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: ClientMsgEnvelope -> ByteString Source #

smpDecode :: ByteString -> Either String ClientMsgEnvelope Source #

smpP :: Parser ClientMsgEnvelope Source #

data PubHeader Source #

Constructors

PubHeader 

Instances

Instances details
Show PubHeader Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> PubHeader -> ShowS

show :: PubHeader -> String

showList :: [PubHeader] -> ShowS

Encoding PubHeader Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: PubHeader -> ByteString Source #

smpDecode :: ByteString -> Either String PubHeader Source #

smpP :: Parser PubHeader Source #

data ClientMessage Source #

Constructors

ClientMessage PrivHeader ByteString 

Instances

Instances details
Encoding ClientMessage Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: ClientMessage -> ByteString Source #

smpDecode :: ByteString -> Either String ClientMessage Source #

smpP :: Parser ClientMessage Source #

data PrivHeader Source #

Instances

Instances details
Show PrivHeader Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> PrivHeader -> ShowS

show :: PrivHeader -> String

showList :: [PrivHeader] -> ShowS

Encoding PrivHeader Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: PrivHeader -> ByteString Source #

smpDecode :: ByteString -> Either String PrivHeader Source #

smpP :: Parser PrivHeader Source #

class (ProtocolTypeI (ProtoType msg), ProtocolEncoding v err msg, ProtocolEncoding v err (ProtoCommand msg), Show err, Show msg) => Protocol v err msg | msg -> v, msg -> err where Source #

Associated Types

type ProtoCommand msg = cmd | cmd -> msg Source #

type ProtoType msg = (sch :: ProtocolType) | sch -> msg Source #

Instances

Instances details
Protocol XFTPVersion XFTPErrorType FileResponse Source # 
Instance details

Defined in Simplex.FileTransfer.Protocol

Associated Types

type ProtoCommand FileResponse = (cmd :: Type) Source #

type ProtoType FileResponse = (sch :: ProtocolType) Source #

Protocol NTFVersion ErrorType NtfResponse Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Associated Types

type ProtoCommand NtfResponse = (cmd :: Type) Source #

type ProtoType NtfResponse = (sch :: ProtocolType) Source #

Protocol SMPVersion ErrorType BrokerMsg Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Associated Types

type ProtoCommand BrokerMsg = (cmd :: Type) Source #

type ProtoType BrokerMsg = (sch :: ProtocolType) Source #

data ProtocolType Source #

Constructors

PSMP 
PNTF 
PXFTP 

Instances

Instances details
Show ProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> ProtocolType -> ShowS

show :: ProtocolType -> String

showList :: [ProtocolType] -> ShowS

Eq ProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: ProtocolType -> ProtocolType -> Bool

(/=) :: ProtocolType -> ProtocolType -> Bool

Ord ProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

StrEncoding ProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: ProtocolType -> ByteString Source #

strDecode :: ByteString -> Either String ProtocolType Source #

strP :: Parser ProtocolType Source #

TestEquality SProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

testEquality :: forall (a :: k) (b :: k). SProtocolType a -> SProtocolType b -> Maybe (a :~: b)

data SProtocolType (p :: ProtocolType) where Source #

Instances

Instances details
TestEquality SProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

testEquality :: forall (a :: k) (b :: k). SProtocolType a -> SProtocolType b -> Maybe (a :~: b)

ProtocolTypeI p => FromJSON (SProtocolType p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser (SProtocolType p)

parseJSONList :: Value -> Parser [SProtocolType p]

omittedField :: Maybe (SProtocolType p)

ProtocolTypeI p => ToJSON (SProtocolType p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: SProtocolType p -> Value

toEncoding :: SProtocolType p -> Encoding

toJSONList :: [SProtocolType p] -> Value

toEncodingList :: [SProtocolType p] -> Encoding

omitField :: SProtocolType p -> Bool

Show (SProtocolType p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> SProtocolType p -> ShowS

show :: SProtocolType p -> String

showList :: [SProtocolType p] -> ShowS

Eq (SProtocolType p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: SProtocolType p -> SProtocolType p -> Bool

(/=) :: SProtocolType p -> SProtocolType p -> Bool

Ord (SProtocolType p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

ProtocolTypeI p => StrEncoding (SProtocolType p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: SProtocolType p -> ByteString Source #

strDecode :: ByteString -> Either String (SProtocolType p) Source #

strP :: Parser (SProtocolType p) Source #

data AProtocolType Source #

Constructors

forall p.ProtocolTypeI p => AProtocolType (SProtocolType p) 

Instances

Instances details
FromJSON AProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser AProtocolType

parseJSONList :: Value -> Parser [AProtocolType]

omittedField :: Maybe AProtocolType

ToJSON AProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: AProtocolType -> Value

toEncoding :: AProtocolType -> Encoding

toJSONList :: [AProtocolType] -> Value

toEncodingList :: [AProtocolType] -> Encoding

omitField :: AProtocolType -> Bool

Show AProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> AProtocolType -> ShowS

show :: AProtocolType -> String

showList :: [AProtocolType] -> ShowS

Eq AProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

StrEncoding AProtocolType Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: AProtocolType -> ByteString Source #

strDecode :: ByteString -> Either String AProtocolType Source #

strP :: Parser AProtocolType Source #

type family UserProtocol (p :: ProtocolType) :: Constraint where ... Source #

Equations

UserProtocol PSMP = () 
UserProtocol PXFTP = () 
UserProtocol a = (Int ~ Bool, TypeError ((Text "Servers for protocol " :<>: ShowType a) :<>: Text " cannot be configured by the users")) 

data ProtocolServer p Source #

server location and transport key digest (hash).

Constructors

ProtocolServer 

Fields

Instances

Instances details
ProtocolTypeI p => FromJSON (ProtocolServer p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser (ProtocolServer p)

parseJSONList :: Value -> Parser [ProtocolServer p]

omittedField :: Maybe (ProtocolServer p)

ProtocolTypeI p => ToJSON (ProtocolServer p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: ProtocolServer p -> Value

toEncoding :: ProtocolServer p -> Encoding

toJSONList :: [ProtocolServer p] -> Value

toEncodingList :: [ProtocolServer p] -> Encoding

omitField :: ProtocolServer p -> Bool

ProtocolTypeI p => IsString (ProtocolServer p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

fromString :: String -> ProtocolServer p

Show (ProtocolServer p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> ProtocolServer p -> ShowS

show :: ProtocolServer p -> String

showList :: [ProtocolServer p] -> ShowS

Eq (ProtocolServer p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: ProtocolServer p -> ProtocolServer p -> Bool

(/=) :: ProtocolServer p -> ProtocolServer p -> Bool

Ord (ProtocolServer p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

ProtocolTypeI p => Encoding (ProtocolServer p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: ProtocolServer p -> ByteString Source #

smpDecode :: ByteString -> Either String (ProtocolServer p) Source #

smpP :: Parser (ProtocolServer p) Source #

ProtocolTypeI p => StrEncoding (ProtocolServer p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: ProtocolServer p -> ByteString Source #

strDecode :: ByteString -> Either String (ProtocolServer p) Source #

strP :: Parser (ProtocolServer p) Source #

pattern SMPServer :: NonEmpty TransportHost -> ServiceName -> KeyHash -> ProtocolServer 'PSMP Source #

pattern NtfServer :: NonEmpty TransportHost -> ServiceName -> KeyHash -> ProtocolServer 'PNTF Source #

pattern XFTPServer :: NonEmpty TransportHost -> ServiceName -> KeyHash -> ProtocolServer 'PXFTP Source #

data ProtoServerWithAuth p Source #

Instances

Instances details
ProtocolTypeI p => FromJSON (ProtoServerWithAuth p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser (ProtoServerWithAuth p)

parseJSONList :: Value -> Parser [ProtoServerWithAuth p]

omittedField :: Maybe (ProtoServerWithAuth p)

ProtocolTypeI p => ToJSON (ProtoServerWithAuth p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

ProtocolTypeI p => IsString (ProtoServerWithAuth p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

fromString :: String -> ProtoServerWithAuth p

Show (ProtoServerWithAuth p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> ProtoServerWithAuth p -> ShowS

show :: ProtoServerWithAuth p -> String

showList :: [ProtoServerWithAuth p] -> ShowS

Eq (ProtoServerWithAuth p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Ord (ProtoServerWithAuth p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

ProtocolTypeI p => StrEncoding (ProtoServerWithAuth p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: ProtoServerWithAuth p -> ByteString Source #

strDecode :: ByteString -> Either String (ProtoServerWithAuth p) Source #

strP :: Parser (ProtoServerWithAuth p) Source #

data AProtoServerWithAuth Source #

Instances

Instances details
FromJSON AProtoServerWithAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

ToJSON AProtoServerWithAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Show AProtoServerWithAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> AProtoServerWithAuth -> ShowS

show :: AProtoServerWithAuth -> String

showList :: [AProtoServerWithAuth] -> ShowS

StrEncoding AProtoServerWithAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: AProtoServerWithAuth -> ByteString Source #

strDecode :: ByteString -> Either String AProtoServerWithAuth Source #

strP :: Parser AProtoServerWithAuth Source #

newtype BasicAuth Source #

Constructors

BasicAuth 

Fields

Instances

Instances details
IsString BasicAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

fromString :: String -> BasicAuth

Show BasicAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> BasicAuth -> ShowS

show :: BasicAuth -> String

showList :: [BasicAuth] -> ShowS

Eq BasicAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: BasicAuth -> BasicAuth -> Bool

(/=) :: BasicAuth -> BasicAuth -> Bool

Ord BasicAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

compare :: BasicAuth -> BasicAuth -> Ordering

(<) :: BasicAuth -> BasicAuth -> Bool

(<=) :: BasicAuth -> BasicAuth -> Bool

(>) :: BasicAuth -> BasicAuth -> Bool

(>=) :: BasicAuth -> BasicAuth -> Bool

max :: BasicAuth -> BasicAuth -> BasicAuth

min :: BasicAuth -> BasicAuth -> BasicAuth

Encoding BasicAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: BasicAuth -> ByteString Source #

smpDecode :: ByteString -> Either String BasicAuth Source #

smpP :: Parser BasicAuth Source #

StrEncoding BasicAuth Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: BasicAuth -> ByteString Source #

strDecode :: ByteString -> Either String BasicAuth Source #

strP :: Parser BasicAuth Source #

data SrvLoc Source #

Constructors

SrvLoc HostName ServiceName 

Instances

Instances details
Show SrvLoc Source # 
Instance details

Defined in Simplex.Messaging.ServiceScheme

Methods

showsPrec :: Int -> SrvLoc -> ShowS

show :: SrvLoc -> String

showList :: [SrvLoc] -> ShowS

Eq SrvLoc Source # 
Instance details

Defined in Simplex.Messaging.ServiceScheme

Methods

(==) :: SrvLoc -> SrvLoc -> Bool

(/=) :: SrvLoc -> SrvLoc -> Bool

Ord SrvLoc Source # 
Instance details

Defined in Simplex.Messaging.ServiceScheme

Methods

compare :: SrvLoc -> SrvLoc -> Ordering

(<) :: SrvLoc -> SrvLoc -> Bool

(<=) :: SrvLoc -> SrvLoc -> Bool

(>) :: SrvLoc -> SrvLoc -> Bool

(>=) :: SrvLoc -> SrvLoc -> Bool

max :: SrvLoc -> SrvLoc -> SrvLoc

min :: SrvLoc -> SrvLoc -> SrvLoc

StrEncoding SrvLoc Source # 
Instance details

Defined in Simplex.Messaging.ServiceScheme

Methods

strEncode :: SrvLoc -> ByteString Source #

strDecode :: ByteString -> Either String SrvLoc Source #

strP :: Parser SrvLoc Source #

newtype CorrId Source #

Transmission correlation ID.

Constructors

CorrId 

Fields

  • bs :: ByteString
     

Instances

Instances details
FromJSON CorrId Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser CorrId

parseJSONList :: Value -> Parser [CorrId]

omittedField :: Maybe CorrId

ToJSON CorrId Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: CorrId -> Value

toEncoding :: CorrId -> Encoding

toJSONList :: [CorrId] -> Value

toEncodingList :: [CorrId] -> Encoding

omitField :: CorrId -> Bool

IsString CorrId Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

fromString :: String -> CorrId

Show CorrId Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> CorrId -> ShowS

show :: CorrId -> String

showList :: [CorrId] -> ShowS

Eq CorrId Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: CorrId -> CorrId -> Bool

(/=) :: CorrId -> CorrId -> Bool

Ord CorrId Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

compare :: CorrId -> CorrId -> Ordering

(<) :: CorrId -> CorrId -> Bool

(<=) :: CorrId -> CorrId -> Bool

(>) :: CorrId -> CorrId -> Bool

(>=) :: CorrId -> CorrId -> Bool

max :: CorrId -> CorrId -> CorrId

min :: CorrId -> CorrId -> CorrId

Encoding CorrId Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: CorrId -> ByteString Source #

smpDecode :: ByteString -> Either String CorrId Source #

smpP :: Parser CorrId Source #

StrEncoding CorrId Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: CorrId -> ByteString Source #

strDecode :: ByteString -> Either String CorrId Source #

strP :: Parser CorrId Source #

pattern NoCorrId :: CorrId Source #

newtype EntityId Source #

Constructors

EntityId 

Fields

Instances

Instances details
Show EntityId Source # 
Instance details

Defined in Simplex.Messaging.Transport

Methods

showsPrec :: Int -> EntityId -> ShowS

show :: EntityId -> String

showList :: [EntityId] -> ShowS

Eq EntityId Source # 
Instance details

Defined in Simplex.Messaging.Transport

Methods

(==) :: EntityId -> EntityId -> Bool

(/=) :: EntityId -> EntityId -> Bool

Ord EntityId Source # 
Instance details

Defined in Simplex.Messaging.Transport

Methods

compare :: EntityId -> EntityId -> Ordering

(<) :: EntityId -> EntityId -> Bool

(<=) :: EntityId -> EntityId -> Bool

(>) :: EntityId -> EntityId -> Bool

(>=) :: EntityId -> EntityId -> Bool

max :: EntityId -> EntityId -> EntityId

min :: EntityId -> EntityId -> EntityId

Encoding EntityId Source # 
Instance details

Defined in Simplex.Messaging.Transport

Methods

smpEncode :: EntityId -> ByteString Source #

smpDecode :: ByteString -> Either String EntityId Source #

smpP :: Parser EntityId Source #

StrEncoding EntityId Source # 
Instance details

Defined in Simplex.Messaging.Transport

Methods

strEncode :: EntityId -> ByteString Source #

strDecode :: ByteString -> Either String EntityId Source #

strP :: Parser EntityId Source #

FromField EntityId Source # 
Instance details

Defined in Simplex.Messaging.Agent.Store.AgentStore

Methods

fromField :: FieldParser EntityId #

ToField EntityId Source # 
Instance details

Defined in Simplex.Messaging.Agent.Store.AgentStore

Methods

toField :: EntityId -> SQLData #

type QueueId = EntityId Source #

SMP queue ID on the server.

type RecipientId = QueueId Source #

SMP queue ID for the recipient.

type SenderId = QueueId Source #

SMP queue ID for the sender.

type NotifierId = QueueId Source #

SMP queue ID for notifications.

type RcvPrivateAuthKey = APrivateAuthKey Source #

Recipient's private key used by the recipient to authorize (v6: sign, v7: encrypt hash) SMP commands.

Only used by SMP agent, kept here so its definition is close to respective public key.

type RcvPublicAuthKey = APublicAuthKey Source #

Recipient's public key used by SMP server to verify authorization of SMP commands.

type RcvPublicDhKey = PublicKeyX25519 Source #

Public key used for DH exchange to encrypt message bodies from server to recipient

type RcvDhSecret = DhSecretX25519 Source #

DH Secret used to encrypt message bodies from server to recipient

type SndPrivateAuthKey = APrivateAuthKey Source #

Sender's private key used by the recipient to authorize (v6: sign, v7: encrypt hash) SMP commands.

Only used by SMP agent, kept here so its definition is close to respective public key.

type SndPublicAuthKey = APublicAuthKey Source #

Sender's public key used by SMP server to verify authorization of SMP commands.

type NtfPrivateAuthKey = APrivateAuthKey Source #

Private key used by push notifications server to authorize (sign or encrypt hash) NSUB command.

type NtfPublicAuthKey = APublicAuthKey Source #

Public key used by SMP server to verify authorization of NSUB command sent by push notifications server.

type RcvNtfPublicDhKey = PublicKeyX25519 Source #

Public key used for DH exchange to encrypt notification metadata from server to recipient

type RcvNtfDhSecret = DhSecretX25519 Source #

DH Secret used to encrypt notification metadata from server to recipient

data Message Source #

received message without server/recipient encryption

Constructors

Message 

Fields

MessageQuota 

Fields

Instances

Instances details
StrEncoding Message Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: Message -> ByteString Source #

strDecode :: ByteString -> Either String Message Source #

strP :: Parser Message Source #

data RcvMessage Source #

Constructors

RcvMessage 

Instances

Instances details
Show RcvMessage Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> RcvMessage -> ShowS

show :: RcvMessage -> String

showList :: [RcvMessage] -> ShowS

Eq RcvMessage Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: RcvMessage -> RcvMessage -> Bool

(/=) :: RcvMessage -> RcvMessage -> Bool

type MsgId = ByteString Source #

SMP message server ID.

type MsgBody = ByteString Source #

SMP message body.

type MaxMessageLen = 16088 Source #

newtype EncRcvMsgBody Source #

Constructors

EncRcvMsgBody ByteString 

Instances

Instances details
Show EncRcvMsgBody Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> EncRcvMsgBody -> ShowS

show :: EncRcvMsgBody -> String

showList :: [EncRcvMsgBody] -> ShowS

Eq EncRcvMsgBody Source # 
Instance details

Defined in Simplex.Messaging.Protocol

data RcvMsgBody Source #

Constructors

RcvMsgBody 

Fields

RcvMsgQuota 

Fields

data ClientRcvMsgBody Source #

Constructors

ClientRcvMsgBody 

Fields

ClientRcvMsgQuota 

Fields

type EncNMsgMeta = ByteString Source #

data SMPMsgMeta Source #

Constructors

SMPMsgMeta 

Fields

Instances

Instances details
Show SMPMsgMeta Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> SMPMsgMeta -> ShowS

show :: SMPMsgMeta -> String

showList :: [SMPMsgMeta] -> ShowS

Eq SMPMsgMeta Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: SMPMsgMeta -> SMPMsgMeta -> Bool

(/=) :: SMPMsgMeta -> SMPMsgMeta -> Bool

StrEncoding SMPMsgMeta Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: SMPMsgMeta -> ByteString Source #

strDecode :: ByteString -> Either String SMPMsgMeta Source #

strP :: Parser SMPMsgMeta Source #

data NMsgMeta Source #

Constructors

NMsgMeta 

Fields

Instances

Instances details
Show NMsgMeta Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> NMsgMeta -> ShowS

show :: NMsgMeta -> String

showList :: [NMsgMeta] -> ShowS

Encoding NMsgMeta Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: NMsgMeta -> ByteString Source #

smpDecode :: ByteString -> Either String NMsgMeta Source #

smpP :: Parser NMsgMeta Source #

newtype EncFwdResponse Source #

Constructors

EncFwdResponse ByteString 

Instances

Instances details
Show EncFwdResponse Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> EncFwdResponse -> ShowS

show :: EncFwdResponse -> String

showList :: [EncFwdResponse] -> ShowS

Eq EncFwdResponse Source # 
Instance details

Defined in Simplex.Messaging.Protocol

newtype EncFwdTransmission Source #

Constructors

EncFwdTransmission ByteString 

Instances

Instances details
Show EncFwdTransmission Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> EncFwdTransmission -> ShowS

show :: EncFwdTransmission -> String

showList :: [EncFwdTransmission] -> ShowS

newtype EncResponse Source #

Constructors

EncResponse ByteString 

Instances

Instances details
Show EncResponse Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> EncResponse -> ShowS

show :: EncResponse -> String

showList :: [EncResponse] -> ShowS

Eq EncResponse Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: EncResponse -> EncResponse -> Bool

(/=) :: EncResponse -> EncResponse -> Bool

newtype EncTransmission Source #

Constructors

EncTransmission ByteString 

Instances

Instances details
Show EncTransmission Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> EncTransmission -> ShowS

show :: EncTransmission -> String

showList :: [EncTransmission] -> ShowS

data FwdResponse Source #

Constructors

FwdResponse 

Instances

Instances details
Encoding FwdResponse Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: FwdResponse -> ByteString Source #

smpDecode :: ByteString -> Either String FwdResponse Source #

smpP :: Parser FwdResponse Source #

data FwdTransmission Source #

Instances

Instances details
Encoding FwdTransmission Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: FwdTransmission -> ByteString Source #

smpDecode :: ByteString -> Either String FwdTransmission Source #

smpP :: Parser FwdTransmission Source #

data MsgFlags Source #

Constructors

MsgFlags 

Fields

Instances

Instances details
FromJSON MsgFlags Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

parseJSON :: Value -> Parser MsgFlags

parseJSONList :: Value -> Parser [MsgFlags]

omittedField :: Maybe MsgFlags

ToJSON MsgFlags Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

toJSON :: MsgFlags -> Value

toEncoding :: MsgFlags -> Encoding

toJSONList :: [MsgFlags] -> Value

toEncodingList :: [MsgFlags] -> Encoding

omitField :: MsgFlags -> Bool

Show MsgFlags Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> MsgFlags -> ShowS

show :: MsgFlags -> String

showList :: [MsgFlags] -> ShowS

Eq MsgFlags Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

(==) :: MsgFlags -> MsgFlags -> Bool

(/=) :: MsgFlags -> MsgFlags -> Bool

Encoding MsgFlags Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: MsgFlags -> ByteString Source #

smpDecode :: ByteString -> Either String MsgFlags Source #

smpP :: Parser MsgFlags Source #

StrEncoding MsgFlags Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

strEncode :: MsgFlags -> ByteString Source #

strDecode :: ByteString -> Either String MsgFlags Source #

strP :: Parser MsgFlags Source #

FromField MsgFlags Source # 
Instance details

Defined in Simplex.Messaging.Agent.Store.AgentStore

Methods

fromField :: FieldParser MsgFlags #

ToField MsgFlags Source # 
Instance details

Defined in Simplex.Messaging.Agent.Store.AgentStore

Methods

toField :: MsgFlags -> SQLData #

queueParty :: SParty p -> Maybe (Dict (PartyI p, QueueParty p)) Source #

batchParty :: SParty p -> Maybe (Dict (PartyI p, BatchParty p)) Source #

serviceParty :: SParty p -> Maybe (Dict (PartyI p, ServiceParty p)) Source #

messageTs :: Message -> SystemTime Source #

toNetworkError :: SomeException -> NetworkError Source #

Parse and serialize

class ProtocolMsgTag t where Source #

Methods

decodeTag :: ByteString -> Maybe t Source #

Instances

Instances details
ProtocolMsgTag NtfCmdTag Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Methods

decodeTag :: ByteString -> Maybe NtfCmdTag Source #

ProtocolMsgTag NtfResponseTag Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Methods

decodeTag :: ByteString -> Maybe NtfResponseTag Source #

ProtocolMsgTag BrokerMsgTag Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

decodeTag :: ByteString -> Maybe BrokerMsgTag Source #

NtfEntityI e => ProtocolMsgTag (NtfCommandTag e) Source # 
Instance details

Defined in Simplex.Messaging.Notifications.Protocol

Methods

decodeTag :: ByteString -> Maybe (NtfCommandTag e) Source #

PartyI p => ProtocolMsgTag (CommandTag p) Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

decodeTag :: ByteString -> Maybe (CommandTag p) Source #

data TransmissionForAuth Source #

Constructors

TransmissionForAuth 

Fields

transmissionP :: THandleParams v p -> Parser RawTransmission Source #

SMP transmission parser.

_smpP :: Encoding a => Parser a Source #

legacyServerP :: forall p. ProtocolTypeI p => Parser (ProtocolServer p) Source #

TCP transport functions

data TransportBatch r Source #

Constructors

TBTransmissions ByteString Int [r] 
TBTransmission ByteString r 
TBError TransportError r 

tPut :: Transport c => THandle v c p -> NonEmpty (Either TransportError SentRawTransmission) -> IO [Either TransportError ()] Source #

Send signed SMP transmission to TCP transport.

tPutLog :: Transport c => THandle v c p -> ByteString -> IO (Either TransportError ()) Source #

tGetServer :: (ProtocolEncoding v err cmd, Transport c) => THandle v c 'TServer -> IO (NonEmpty (SignedTransmissionOrError err cmd)) Source #

Receive server transmissions

tGetClient :: (ProtocolEncoding v err cmd, Transport c) => THandle v c 'TClient -> IO (NonEmpty (Transmission (Either err cmd))) Source #

Receive client transmissions

tParse :: THandleParams v p -> ByteString -> NonEmpty (Either TransportError RawTransmission) Source #

tDecodeClient :: forall v err cmd. ProtocolEncoding v err cmd => THandleParams v 'TClient -> Either TransportError RawTransmission -> Transmission (Either err cmd) Source #

tEncode :: Bool -> SentRawTransmission -> ByteString Source #

tEncodeBatch1 :: Bool -> SentRawTransmission -> ByteString Source #

batchTransmissions' :: forall v p r. THandleParams v p -> NonEmpty (Either TransportError SentRawTransmission, r) -> [TransportBatch r] Source #

encodes and batches transmissions into blocks

batchTransmissions_ :: Int -> NonEmpty (Either TransportError ByteString, r) -> [TransportBatch r] Source #

Pack encoded transmissions into batches

exports for tests

data BrokerMsgTag Source #

Instances

Instances details
Show BrokerMsgTag Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

showsPrec :: Int -> BrokerMsgTag -> ShowS

show :: BrokerMsgTag -> String

showList :: [BrokerMsgTag] -> ShowS

Encoding BrokerMsgTag Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

smpEncode :: BrokerMsgTag -> ByteString Source #

smpDecode :: ByteString -> Either String BrokerMsgTag Source #

smpP :: Parser BrokerMsgTag Source #

ProtocolMsgTag BrokerMsgTag Source # 
Instance details

Defined in Simplex.Messaging.Protocol

Methods

decodeTag :: ByteString -> Maybe BrokerMsgTag Source #

checkParty :: forall t p p'. (PartyI p, PartyI p') => t p' -> Either String (t p) Source #