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 +32/−7
- Network/Connection/Types.hs +11/−4
- connection.cabal +1/−1
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. .