packages feed

connection 0.2.1 → 0.2.2

raw patch · 3 files changed

+44/−12 lines, 3 filesdep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base

API changes (from Hackage documentation)

- Network.Connection: data SockSettings
+ Network.Connection: OtherProxy :: HostName -> PortNumber -> ProxySettings
+ Network.Connection: SockSettingsEnvironment :: (Maybe String) -> ProxySettings
+ Network.Connection: data ProxySettings
+ Network.Connection: type SockSettings = ProxySettings
- Network.Connection: ConnectionParams :: HostName -> PortNumber -> Maybe TLSSettings -> Maybe SockSettings -> ConnectionParams
+ Network.Connection: ConnectionParams :: HostName -> PortNumber -> Maybe TLSSettings -> Maybe ProxySettings -> ConnectionParams
- Network.Connection: SockSettingsSimple :: HostName -> PortNumber -> SockSettings
+ Network.Connection: SockSettingsSimple :: HostName -> PortNumber -> ProxySettings
- Network.Connection: connectionUseSocks :: ConnectionParams -> Maybe SockSettings
+ Network.Connection: connectionUseSocks :: ConnectionParams -> Maybe ProxySettings

Files

Network/Connection.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE BangPatterns #-} {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE ScopedTypeVariables #-} -- | -- Module      : Network.Connection -- License     : BSD-style@@ -16,7 +17,8 @@     , connectionID     , ConnectionParams(..)     , TLSSettings(..)-    , SockSettings(..)+    , ProxySettings(..)+    , SockSettings      -- * Exceptions     , LineTooLong(..)@@ -65,6 +67,7 @@  import qualified Crypto.Random.AESCtr as RNG +import System.Environment import System.IO import qualified Data.Map as M @@ -139,12 +142,34 @@           -> ConnectionParams  -- ^ The parameters for this connection (where to connect, and such).           -> IO Connection     -- ^ The new established connection on success. connectTo cg cParams = do-        h <- conFct (connectionHostname cParams) (N.PortNumber $ connectionPort cParams)-        connectFromHandle cg h cParams-    where-        conFct = case connectionUseSocks cParams of-                      Nothing                       -> N.connectTo-                      Just (SockSettingsSimple h p) -> socksConnectTo h (N.PortNumber p)+    conFct <- getConFct (connectionUseSocks cParams)+    h      <- conFct (connectionHostname cParams) (N.PortNumber $ connectionPort cParams)+    connectFromHandle cg h cParams+  where+        getConFct Nothing                            = return N.connectTo+        getConFct (Just (OtherProxy h p))            = return $ \_ _ -> N.connectTo h (N.PortNumber p)+        getConFct (Just (SockSettingsSimple h p))    = return $ socksConnectTo h (N.PortNumber p)+        getConFct (Just (SockSettingsEnvironment v)) = do+            -- if we can't get the environment variable or that the variable cannot be parsed+            -- we connect directly.+            let name = maybe "SOCKS_SERVER" id v+            evar <- E.try (getEnv name)+            case evar of+                Left (_ :: E.IOException) -> return N.connectTo+                Right var                 ->+                    case parseSocks var of+                        Nothing             -> return N.connectTo+                        Just (sHost, sPort) -> return $ socksConnectTo sHost (N.PortNumber $ fromIntegral (sPort :: Int))++        -- Try to parse "host:port" or "host"+        parseSocks s =+            case break (== ':') s of+                (sHost, "")        -> Just (sHost, 1080)+                (sHost, ':':portS) ->+                    case reads portS of+                        [(sPort,"")] -> Just (sHost, sPort)+                        _            -> Nothing+                _                  -> Nothing  -- | Put a block of data in the connection. connectionPut :: Connection -> ByteString -> IO ()
Network/Connection/Types.hs view
@@ -39,16 +39,23 @@     { connectionHostname   :: HostName           -- ^ host name to connect to.     , connectionPort       :: PortNumber         -- ^ port number to connect to.     , connectionUseSecure  :: Maybe TLSSettings  -- ^ optional TLS parameters.-    , connectionUseSocks   :: Maybe SockSettings -- ^ optional Socks configuration.+    , connectionUseSocks   :: Maybe ProxySettings -- ^ optional Proxy/Socks configuration.     } --- | Socks settings for the connection.+-- | Proxy settings for the connection. ----- The simple settings is just the hostname and portnumber of the proxy server.+-- OtherProxy handles specific application-level proxies like HTTP proxies. --+-- The simple SOCKS settings is just the hostname and portnumber of the SOCKS proxy server.+-- -- That's for now the only settings in the SOCKS package, -- socks password, or any sort of other authentications is not yet implemented.-data SockSettings = SockSettingsSimple HostName PortNumber+data ProxySettings =+      SockSettingsSimple HostName PortNumber+    | SockSettingsEnvironment (Maybe String)+    | OtherProxy HostName PortNumber++type SockSettings = ProxySettings  -- | TLS Settings that can be either expressed as simple settings, -- or as full blown TLS.Params settings.
connection.cabal view
@@ -1,5 +1,5 @@ Name:                connection-Version:             0.2.1+Version:             0.2.2 Description:     Simple network library for all your connection need.     .