packages feed

HaskellNet-SSL 0.1.1.1 → 0.2

raw patch · 5 files changed

+70/−52 lines, 5 files

Files

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