packages feed

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 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]            }