hookup 0.1.1.0 → 0.2
raw patch · 3 files changed
+18/−8 lines, 3 filesdep ~basedep ~networkPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, network
API changes (from Hackage documentation)
+ Hookup: [cpFamily] :: ConnectionParams -> Family
+ Hookup: defaultFamily :: Family
- Hookup: ConnectionParams :: HostName -> PortNumber -> Maybe SocksParams -> Maybe TlsParams -> ConnectionParams
+ Hookup: ConnectionParams :: Family -> HostName -> PortNumber -> Maybe SocksParams -> Maybe TlsParams -> ConnectionParams
Files
- ChangeLog.md +4/−0
- hookup.cabal +1/−2
- src/Hookup.hs +13/−6
ChangeLog.md view
@@ -1,5 +1,9 @@ # Revision history for hookup +## 0.2 -- 2017-11-22++* Allow connection parameters to specify address family with `cpFamily` field+ ## 0.1.1.0 -- 2017-05-13 * Better error message for old openssl version
hookup.cabal view
@@ -1,9 +1,8 @@ name: hookup-version: 0.1.1.0+version: 0.2 synopsis: Abstraction over creating network connections with SOCKS5 and TLS description: This package provides an abstraction for communicating with line-oriented network services while abstracting over the use of SOCKS5 and TLS (via OpenSSL)-homepage: https://github.com/glguy/irc-core license: ISC license-file: LICENSE author: Eric Mertens
src/Hookup.hs view
@@ -14,6 +14,7 @@ ConnectionParams(..), SocksParams(..), TlsParams(..),+ defaultFamily, -- * Connections Connection,@@ -34,7 +35,7 @@ import Data.Foldable import Data.List (intercalate) import Network (PortID(..))-import Network.Socket (Socket, AddrInfo, PortNumber, HostName)+import Network.Socket (Socket, AddrInfo, PortNumber, HostName, Family) import qualified Network.Socket as Socket import qualified Network.Socket.ByteString as SocketB import Network.Socks5@@ -50,7 +51,8 @@ -- | Parameters for 'connect'. data ConnectionParams = ConnectionParams- { cpHost :: HostName -- ^ Destination host+ { cpFamily :: Family -- ^ IP Protocol family (default 'AF_UNSPEC')+ , cpHost :: HostName -- ^ Destination host , cpPort :: PortNumber -- ^ Destination TCP port , cpSocks :: Maybe SocksParams -- ^ Optional SOCKS5 parameters , cpTls :: Maybe TlsParams -- ^ Optional TLS parameters@@ -97,6 +99,10 @@ displayException (HostnameResolutionFailure x) = "hostname resolution failed: " ++ displayException x +-- | Default 'Family' value is unspecified and allows both INET and INET6.+defaultFamily :: Socket.Family+defaultFamily = Socket.AF_UNSPEC+ ------------------------------------------------------------------------ -- Opening sockets ------------------------------------------------------------------------@@ -106,7 +112,7 @@ openSocket :: ConnectionParams -> IO Socket openSocket params = case cpSocks params of- Nothing -> openSocket' (cpHost params) (cpPort params)+ Nothing -> openSocket' (cpFamily params) (cpHost params) (cpPort params) Just sp -> openSocks sp (cpHost params) (cpPort params) @@ -117,10 +123,11 @@ h (PortNumber p) -openSocket' :: HostName -> PortNumber -> IO Socket-openSocket' h p =+openSocket' :: Family -> HostName -> PortNumber -> IO Socket+openSocket' family h p = do let hints = Socket.defaultHints- { Socket.addrSocketType = Socket.Stream+ { Socket.addrFamily = family+ , Socket.addrSocketType = Socket.Stream , Socket.addrFlags = [Socket.AI_ADDRCONFIG ,Socket.AI_NUMERICSERV] }