tls-2.1.9: Network/TLS/Error.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE PatternSynonyms #-}
module Network.TLS.Error where
import Control.Exception (Exception (..))
import Data.Typeable
import Network.TLS.Imports
----------------------------------------------------------------
-- | TLSError that might be returned through the TLS stack.
--
-- Prior to version 1.8.0, this type had an @Exception@ instance.
-- In version 1.8.0, this instance was removed, and functions in
-- this library now only throw 'TLSException'.
data TLSError
= -- | mainly for instance of Error
Error_Misc String
| -- | A fatal error condition was encountered at a low level. The
-- elements of the tuple give (freeform text description, structured
-- error description).
Error_Protocol String AlertDescription
| -- | A non-fatal error condition was encountered at a low level at a low
-- level. The elements of the tuple give (freeform text description,
-- structured error description).
Error_Protocol_Warning String AlertDescription
| Error_Certificate String
| -- | handshake policy failed.
Error_HandshakePolicy String
| Error_EOF
| Error_Packet String
| Error_Packet_unexpected String String
| Error_Packet_Parsing String
| Error_TCP_Terminate
deriving (Eq, Show, Typeable)
----------------------------------------------------------------
-- | TLS Exceptions. Some of the data constructors indicate incorrect use of
-- the library, and the documentation for those data constructors calls
-- this out. The others wrap 'TLSError' with some kind of context to explain
-- when the exception occurred.
data TLSException
= -- | Early termination exception with the reason and the error associated
Terminated Bool String TLSError
| -- | Handshake failed for the reason attached.
HandshakeFailed TLSError
| -- | Failure occurred while sending or receiving data after the
-- TLS handshake succeeded.
PostHandshake TLSError
| -- | Lifts a 'TLSError' into 'TLSException' without provided any context
-- around when the error happened.
Uncontextualized TLSError
| -- | Usage error when the connection has not been established
-- and the user is trying to send or receive data.
-- Indicates that this library has been used incorrectly.
ConnectionNotEstablished
| -- | Expected that a TLS handshake had already taken place, but no TLS
-- handshake had occurred.
-- Indicates that this library has been used incorrectly.
MissingHandshake
deriving (Show, Eq, Typeable)
instance Exception TLSException
----------------------------------------------------------------
newtype AlertLevel = AlertLevel {fromAlertLevel :: Word8} deriving (Eq)
{- FOURMOLU_DISABLE -}
pattern AlertLevel_Warning :: AlertLevel
pattern AlertLevel_Warning = AlertLevel 1
pattern AlertLevel_Fatal :: AlertLevel
pattern AlertLevel_Fatal = AlertLevel 2
instance Show AlertLevel where
show AlertLevel_Warning = "AlertLevel_Warning"
show AlertLevel_Fatal = "AlertLevel_Fatal"
show (AlertLevel x) = "AlertLevel " ++ show x
{- FOURMOLU_ENABLE -}
----------------------------------------------------------------
newtype AlertDescription = AlertDescription {fromAlertDescription :: Word8}
deriving (Eq)
{- FOURMOLU_DISABLE -}
pattern CloseNotify :: AlertDescription
pattern CloseNotify = AlertDescription 0
pattern UnexpectedMessage :: AlertDescription
pattern UnexpectedMessage = AlertDescription 10
pattern BadRecordMac :: AlertDescription
pattern BadRecordMac = AlertDescription 20
pattern DecryptionFailed :: AlertDescription
pattern DecryptionFailed = AlertDescription 21
pattern RecordOverflow :: AlertDescription
pattern RecordOverflow = AlertDescription 22
pattern DecompressionFailure :: AlertDescription
pattern DecompressionFailure = AlertDescription 30
pattern HandshakeFailure :: AlertDescription
pattern HandshakeFailure = AlertDescription 40
pattern BadCertificate :: AlertDescription
pattern BadCertificate = AlertDescription 42
pattern UnsupportedCertificate :: AlertDescription
pattern UnsupportedCertificate = AlertDescription 43
pattern CertificateRevoked :: AlertDescription
pattern CertificateRevoked = AlertDescription 44
pattern CertificateExpired :: AlertDescription
pattern CertificateExpired = AlertDescription 45
pattern CertificateUnknown :: AlertDescription
pattern CertificateUnknown = AlertDescription 46
pattern IllegalParameter :: AlertDescription
pattern IllegalParameter = AlertDescription 47
pattern UnknownCa :: AlertDescription
pattern UnknownCa = AlertDescription 48
pattern AccessDenied :: AlertDescription
pattern AccessDenied = AlertDescription 49
pattern DecodeError :: AlertDescription
pattern DecodeError = AlertDescription 50
pattern DecryptError :: AlertDescription
pattern DecryptError = AlertDescription 51
pattern ExportRestriction :: AlertDescription
pattern ExportRestriction = AlertDescription 60
pattern ProtocolVersion :: AlertDescription
pattern ProtocolVersion = AlertDescription 70
pattern InsufficientSecurity :: AlertDescription
pattern InsufficientSecurity = AlertDescription 71
pattern InternalError :: AlertDescription
pattern InternalError = AlertDescription 80
pattern InappropriateFallback :: AlertDescription
pattern InappropriateFallback = AlertDescription 86 -- RFC7507
pattern UserCanceled :: AlertDescription
pattern UserCanceled = AlertDescription 90
pattern NoRenegotiation :: AlertDescription
pattern NoRenegotiation = AlertDescription 100
pattern MissingExtension :: AlertDescription
pattern MissingExtension = AlertDescription 109
pattern UnsupportedExtension :: AlertDescription
pattern UnsupportedExtension = AlertDescription 110
pattern CertificateUnobtainable :: AlertDescription
pattern CertificateUnobtainable = AlertDescription 111
pattern UnrecognizedName :: AlertDescription
pattern UnrecognizedName = AlertDescription 112
pattern BadCertificateStatusResponse :: AlertDescription
pattern BadCertificateStatusResponse = AlertDescription 113
pattern BadCertificateHashValue :: AlertDescription
pattern BadCertificateHashValue = AlertDescription 114
pattern UnknownPskIdentity :: AlertDescription
pattern UnknownPskIdentity = AlertDescription 115
pattern CertificateRequired :: AlertDescription
pattern CertificateRequired = AlertDescription 116
pattern GeneralError :: AlertDescription
pattern GeneralError = AlertDescription 117
pattern NoApplicationProtocol :: AlertDescription
pattern NoApplicationProtocol = AlertDescription 120 -- RFC7301
pattern EchRequired :: AlertDescription
pattern EchRequired = AlertDescription 121 -- draft
instance Show AlertDescription where
show CloseNotify = "CloseNotify"
show UnexpectedMessage = "UnexpectedMessage"
show BadRecordMac = "BadRecordMac"
show DecryptionFailed = "DecryptionFailed"
show RecordOverflow = "RecordOverflow"
show DecompressionFailure = "DecompressionFailure"
show HandshakeFailure = "HandshakeFailure"
show BadCertificate = "BadCertificate"
show UnsupportedCertificate = "UnsupportedCertificate"
show CertificateRevoked = "CertificateRevoked"
show CertificateExpired = "CertificateExpired"
show CertificateUnknown = "CertificateUnknown"
show IllegalParameter = "IllegalParameter"
show UnknownCa = "UnknownCa"
show AccessDenied = "AccessDenied"
show DecodeError = "DecodeError"
show DecryptError = "DecryptError"
show ExportRestriction = "ExportRestriction"
show ProtocolVersion = "ProtocolVersion"
show InsufficientSecurity = "InsufficientSecurity"
show InternalError = "InternalError"
show InappropriateFallback = "InappropriateFallback"
show UserCanceled = "UserCanceled"
show NoRenegotiation = "NoRenegotiation"
show MissingExtension = "MissingExtension"
show UnsupportedExtension = "UnsupportedExtension"
show CertificateUnobtainable = "CertificateUnobtainable"
show UnrecognizedName = "UnrecognizedName"
show BadCertificateStatusResponse = "BadCertificateStatusResponse"
show BadCertificateHashValue = "BadCertificateHashValue"
show UnknownPskIdentity = "UnknownPskIdentity"
show CertificateRequired = "CertificateRequired"
show GeneralError = "GeneralError"
show NoApplicationProtocol = "NoApplicationProtocol"
show EchRequired = "EchRequired"
show (AlertDescription x) = "AlertDescription " ++ show x
{- FOURMOLU_ENABLE -}