You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
2.1 KiB

14 years ago
{-# LANGUAGE OverloadedStrings #-}
14 years ago
module Network.XMPP.TLS where
14 years ago
import Control.Monad
import Control.Monad.Trans.Class
import Control.Monad.Trans.State
14 years ago
import Data.Conduit
import Data.Conduit.List as CL
import Data.Conduit.TLS as TLS
import Data.Default
import Data.XML.Types
import qualified Network.TLS as TLS
import qualified Network.TLS.Extra as TLS
14 years ago
import Network.XMPP.Monad
import Network.XMPP.Stream
import Network.XMPP.Types
14 years ago
import qualified Text.XML.Stream.Render as XR
14 years ago
starttlsE :: Element
14 years ago
starttlsE =
14 years ago
Element "{urn:ietf:params:xml:ns:xmpp-tls}starttls" [] []
14 years ago
exampleParams :: TLS.TLSParams
exampleParams = TLS.defaultParams
{pConnectVersion = TLS.TLS10
, pAllowedVersions = [TLS.SSL3, TLS.TLS10, TLS.TLS11]
, pCiphers = [TLS.cipher_AES128_SHA1]
, pCompressions = [TLS.nullCompression]
, pWantClientCert = False -- Used for servers
, pUseSecureRenegotiation = False -- No renegotiation
, pCertificates = [] -- TODO
, pLogging = TLS.defaultLogging -- TODO
, onCertificatesRecv = \ certificate ->
return TLS.CertificateUsageAccept
}
xmppStartTLS :: TLS.TLSParams -> XMPPConMonad ()
14 years ago
xmppStartTLS params = do
features <- gets sFeatures
unless (stls features == Nothing) $ do
pushN starttlsE
14 years ago
Element "{urn:ietf:params:xml:ns:xmpp-tls}proceed" [] [] <- pullE
14 years ago
Just handle <- gets sConHandle
14 years ago
(raw, snk, psh) <- lift $ TLS.tlsinit params handle
14 years ago
modify (\x -> x
{ sRawSrc = raw
-- , sConSrc = -- Note: this momentarily leaves us in an
-- inconsistent state
14 years ago
, sConPushBS = psh
14 years ago
})
xmppRestartStream
14 years ago
modify (\s -> s{sHaveTLS = True})
return ()
14 years ago