HaskellNet-SSL 0.1.1.1 → 0.2
raw patch · 5 files changed
+70/−52 lines, 5 files
Files
- HaskellNet-SSL.cabal +1/−1
- src/Network/HaskellNet/IMAP/SSL.hs +7/−6
- src/Network/HaskellNet/POP3/SSL.hs +7/−6
- src/Network/HaskellNet/SMTP/SSL.hs +22/−19
- src/Network/HaskellNet/SSL.hs +33/−20
HaskellNet-SSL.cabal view
@@ -1,6 +1,6 @@ name: HaskellNet-SSL synopsis: Helpers to connect to SSL/TLS mail servers with HaskellNet-version: 0.1.1.1+version: 0.2 description: This package ties together the HaskellNet and connection packages to make it easy to open IMAP and SMTP connections over SSL.
src/Network/HaskellNet/IMAP/SSL.hs view
@@ -1,15 +1,16 @@ module Network.HaskellNet.IMAP.SSL- ( connectIMAPSSL- , connectIMAPSSLPort+ ( -- * Establishing connection+ connectIMAPSSL+ , connectIMAPSSLWithSettings ) where -import Network.Socket.Internal (PortNumber) import Network.HaskellNet.IMAP.Connection import Network.HaskellNet.IMAP import Network.HaskellNet.SSL connectIMAPSSL :: String -> IO IMAPConnection-connectIMAPSSL hostname = connectIMAPSSLPort hostname 993+connectIMAPSSL hostname = connectIMAPSSLWithSettings hostname cfg+ where cfg = defaultSettingsWithPort 993 -connectIMAPSSLPort :: String -> PortNumber -> IO IMAPConnection-connectIMAPSSLPort hostname port = connectSSL hostname port >>= connectStream+connectIMAPSSLWithSettings :: String -> Settings -> IO IMAPConnection+connectIMAPSSLWithSettings hostname cfg = connectSSL hostname cfg >>= connectStream
src/Network/HaskellNet/POP3/SSL.hs view
@@ -1,15 +1,16 @@ module Network.HaskellNet.POP3.SSL- ( connectPop3SSL- , connectPop3SSLPort+ ( -- * Establishing connection+ connectPop3SSL+ , connectPop3SSLWithSettings ) where -import Network.Socket.Internal (PortNumber) import Network.HaskellNet.POP3.Connection import Network.HaskellNet.POP3 import Network.HaskellNet.SSL connectPop3SSL :: String -> IO POP3Connection-connectPop3SSL hostname = connectPop3SSLPort hostname 995+connectPop3SSL hostname = connectPop3SSLWithSettings hostname cfg+ where cfg = defaultSettingsWithPort 995 -connectPop3SSLPort :: String -> PortNumber -> IO POP3Connection-connectPop3SSLPort hostname port = connectSSL hostname port >>= connectStream+connectPop3SSLWithSettings :: String -> Settings -> IO POP3Connection+connectPop3SSLWithSettings hostname cfg = connectSSL hostname cfg >>= connectStream
src/Network/HaskellNet/SMTP/SSL.hs view
@@ -1,15 +1,16 @@ module Network.HaskellNet.SMTP.SSL- ( connectSMTPSSL- , connectSMTPSSLPort+ ( -- * Establishing connection+ connectSMTPSSL+ , connectSMTPSSLWithSettings , connectSMTPSTARTTLS- , connectSMTPSTARTTLSPort+ , connectSMTPSTARTTLSWithSettings+ -- * Other Useful Operations , doSMTPSSL- , doSMTPSSLPort+ , doSMTPSSLWithSettings , doSMTPSTARTTLS- , doSMTPSTARTTLSPort+ , doSMTPSTARTTLSWithSettings ) where -import Network.Socket.Internal (PortNumber) import Network.HaskellNet.SMTP import Network.HaskellNet.SSL @@ -23,20 +24,22 @@ import Data.IORef connectSMTPSSL :: String -> IO SMTPConnection-connectSMTPSSL hostname = connectSMTPSSLPort hostname 465+connectSMTPSSL hostname = connectSMTPSSLWithSettings hostname cfg+ where cfg = defaultSettingsWithPort 465 -connectSMTPSSLPort :: String -> PortNumber -> IO SMTPConnection-connectSMTPSSLPort hostname port = connectSSL hostname port >>= connectStream+connectSMTPSSLWithSettings :: String -> Settings -> IO SMTPConnection+connectSMTPSSLWithSettings hostname cfg = connectSSL hostname cfg >>= connectStream connectSMTPSTARTTLS :: String -> IO SMTPConnection-connectSMTPSTARTTLS hostname = connectSMTPSTARTTLSPort hostname 587+connectSMTPSTARTTLS hostname = connectSMTPSTARTTLSWithSettings hostname cfg+ where cfg = defaultSettingsWithPort 587 -connectSMTPSTARTTLSPort :: String -> PortNumber -> IO SMTPConnection-connectSMTPSTARTTLSPort hostname port = connectSTARTTLS hostname port >>= connectStream+connectSMTPSTARTTLSWithSettings :: String -> Settings -> IO SMTPConnection+connectSMTPSTARTTLSWithSettings hostname cfg = connectSTARTTLS hostname cfg >>= connectStream -connectSTARTTLS :: String -> PortNumber -> IO BSStream-connectSTARTTLS hostname port = do- (bs, startTLS) <- connectPlain hostname port+connectSTARTTLS :: String -> Settings -> IO BSStream+connectSTARTTLS hostname cfg = do+ (bs, startTLS) <- connectPlain hostname cfg greeting <- bsGetLine bs failIfNot bs 220 $ parseResponse greeting@@ -76,11 +79,11 @@ doSMTPSSL :: String -> (SMTPConnection -> IO a) -> IO a doSMTPSSL host = bracketSMTP $ connectSMTPSSL host -doSMTPSSLPort :: String -> PortNumber -> (SMTPConnection -> IO a) -> IO a-doSMTPSSLPort host port = bracketSMTP $ connectSMTPSSLPort host port+doSMTPSSLWithSettings :: String -> Settings -> (SMTPConnection -> IO a) -> IO a+doSMTPSSLWithSettings host port = bracketSMTP $ connectSMTPSSLWithSettings host port doSMTPSTARTTLS :: String -> (SMTPConnection -> IO a) -> IO a doSMTPSTARTTLS host = bracketSMTP $ connectSMTPSTARTTLS host -doSMTPSTARTTLSPort :: String -> PortNumber -> (SMTPConnection -> IO a) -> IO a-doSMTPSTARTTLSPort host port = bracketSMTP $ connectSMTPSTARTTLSPort host port+doSMTPSTARTTLSWithSettings :: String -> Settings -> (SMTPConnection -> IO a) -> IO a+doSMTPSTARTTLSWithSettings host port = bracketSMTP $ connectSMTPSTARTTLSWithSettings host port
src/Network/HaskellNet/SSL.hs view
@@ -1,6 +1,9 @@-module Network.HaskellNet.SSL ( connectSSL- , connectPlain- ) where+module Network.HaskellNet.SSL+ ( Settings (..)+ , defaultSettingsWithPort+ , connectSSL+ , connectPlain+ ) where import Network.Connection import Network.HaskellNet.BSStream@@ -11,34 +14,44 @@ type STARTTLS = IO () -maxLineLength :: Int-maxLineLength = 10000+data Settings = Settings+ { sslPort :: PortNumber+ , sslMaxLineLength :: Int+ } +defaultSettingsWithPort :: PortNumber -> Settings+defaultSettingsWithPort p = Settings+ { sslPort = p+ , sslMaxLineLength = 10000+ }+ connectionGetBytes :: Connection -> Int -> IO B.ByteString connectionGetBytes = loop B.empty where loop buf _ 0 = return buf loop buf c l = connectionGet c l >>= nextIteration where nextIteration b = loop (buf `B.append` b) c $ l - B.length b -connectionToStream :: Connection -> BSStream-connectionToStream c = BSStream- { bsGet = connectionGetBytes c- , bsPut = connectionPut c- , bsFlush = return ()- , bsClose = connectionClose c- , bsIsOpen = return True- , bsGetLine = connectionGetLine maxLineLength c- }+connectionToStream :: Connection -> Settings -> BSStream+connectionToStream c cfg = BSStream+ { bsGet = connectionGetBytes c+ , bsPut = connectionPut c+ , bsFlush = return ()+ , bsClose = connectionClose c+ , bsIsOpen = return True+ , bsGetLine = connectionGetLine maxl c+ } where maxl = sslMaxLineLength cfg -connectSSL :: String -> PortNumber -> IO BSStream-connectSSL hostname port = do+connectSSL :: String -> Settings -> IO BSStream+connectSSL hostname cfg = do c <- initConnectionContext >>= flip connectTo params- return $ connectionToStream c+ return $ connectionToStream c cfg where params = ConnectionParams hostname port (Just def) Nothing+ port = sslPort cfg -connectPlain :: String -> PortNumber -> IO (BSStream, STARTTLS)-connectPlain hostname port = do+connectPlain :: String -> Settings -> IO (BSStream, STARTTLS)+connectPlain hostname cfg = do ctx <- initConnectionContext c <- connectTo ctx params- return (connectionToStream c, connectionSetSecure ctx c def)+ return (connectionToStream c cfg, connectionSetSecure ctx c def) where params = ConnectionParams hostname port Nothing Nothing+ port = sslPort cfg