    -- |
    -- Module      : Network.TLS.Session
    -- License     : BSD-style
    -- Maintainer  : Vincent Hanquez <vincent@snarc.org>
    -- Stability   : experimental
    -- Portability : unknown
    --
    {-# LANGUAGE ExistentialQuantification #-}
    module Network.TLS.Session
        ( SessionManager(..)
        , NoSessionManager(..)
        ) where

    import Network.TLS.Types

    -- | A session manager
    class SessionManager a where
        -- | used on server side to decide whether to resume a client session
        sessionResume     :: a -> SessionID -> IO (Maybe SessionData)
        -- | used when a session is established.
        sessionEstablish  :: a -> SessionID -> SessionData -> IO ()
        -- | used when a session is invalidated
        sessionInvalidate :: a -> SessionID -> IO ()

    data NoSessionManager = NoSessionManager

    instance SessionManager NoSessionManager where
        sessionResume     _ _   = return Nothing
        sessionEstablish  _ _ _ = return ()
        sessionInvalidate _ _   = return ()