http-conduit 1.2.2 → 1.2.3
raw patch · 5 files changed
+33/−12 lines, 5 filesdep +socksPVP ok
version bump matches the API change (PVP)
Dependencies added: socks
API changes (from Hackage documentation)
+ Network.HTTP.Conduit: socksProxy :: Request m -> Maybe SocksConf
Files
- Network/HTTP/Conduit.hs +1/−0
- Network/HTTP/Conduit/ConnInfo.hs +6/−2
- Network/HTTP/Conduit/Manager.hs +19/−9
- Network/HTTP/Conduit/Request.hs +4/−0
- http-conduit.cabal +3/−1
Network/HTTP/Conduit.hs view
@@ -68,6 +68,7 @@ , requestHeaders , requestBody , proxy+ , socksProxy , rawBody , decompress , redirectCount
Network/HTTP/Conduit/ConnInfo.hs view
@@ -28,9 +28,11 @@ import qualified Data.ByteString as S import qualified Data.ByteString.Lazy as L +import Network (PortID(..)) import Network.Socket (Socket, sClose) import Network.Socket.ByteString (recv, sendAll) import qualified Network.Socket as NS+import Network.Socks5 (socksConnectWith, SocksConf) import Network.TLS import Network.TLS.Extra (ciphersuite_all)@@ -154,8 +156,10 @@ -- least on tls-0.8.4 it's guaranteed to always -- return a lazy bytestring with a single chunk. -getSocket :: String -> Int -> IO NS.Socket-getSocket host' port' = do+getSocket :: String -> Int -> Maybe SocksConf -> IO NS.Socket+getSocket host' port' (Just socksConf) = do+ socksConnectWith socksConf host' (PortNumber $ fromIntegral port')+getSocket host' port' Nothing = do let hints = NS.defaultHints { NS.addrFlags = [NS.AI_ADDRCONFIG] , NS.addrSocketType = NS.Stream
Network/HTTP/Conduit/Manager.hs view
@@ -18,7 +18,7 @@ import Prelude hiding (catch) import Data.Monoid (mappend)-import System.IO (hClose, hFlush)+import System.IO (hClose, hFlush, IOMode(..)) import qualified Data.IORef as I import qualified Data.Map as Map @@ -42,7 +42,8 @@ import Control.Concurrent (forkIO, threadDelay) import Data.Time (UTCTime, getCurrentTime, addUTCTime) -import Network (connectTo, PortID (PortNumber))+import Network (connectTo, PortID (PortNumber), HostName)+import Network.Socket (socketToHandle) import Data.Certificate.X509 (X509, encodeCertificate) import qualified Network.HTTP.Types as W@@ -52,8 +53,10 @@ import Network.HTTP.Conduit.Util (hGetSome) import Network.HTTP.Conduit.Parser (parserHeadersFromByteString) import Network.HTTP.Conduit.Request+import Network.Socks5 (SocksConf, socksConnectWith) import Data.Default import Data.Maybe (mapMaybe)+import System.IO (Handle) -- | Settings for a @Manager@. Please use the 'def' function and then modify -- individual settings.@@ -238,10 +241,11 @@ => Manager -> String -> Int+ -> Maybe SocksConf -- ^ optional socks proxy -> ResourceT m (ConnRelease m, ConnInfo, ManagedConn)-getSocketConn man host' port' =+getSocketConn man host' port' socksProxy' = getManagedConn man (ConnKey (T.pack host') port' False) $- getSocket host' port'>>= socketConn desc+ getSocket host' port' socksProxy' >>= socketConn desc where desc = socketDesc host' port' "unsecured" @@ -253,10 +257,11 @@ -> Manager -> String -- ^ host -> Int -- ^ port+ -> Maybe SocksConf -- ^ optional socks proxy -> ResourceT m (ConnRelease m, ConnInfo, ManagedConn)-getSslConn checkCert man host' port' =+getSslConn checkCert man host' port' socksProxy' = getManagedConn man (ConnKey (T.pack host') port' True) $- (connectTo host' (PortNumber $ fromIntegral port') >>= sslClientConn desc checkCert)+ (connectionTo host' (PortNumber $ fromIntegral port') socksProxy' >>= sslClientConn desc checkCert) where desc = socketDesc host' port' "secured" @@ -268,14 +273,15 @@ -> Manager -> String -- ^ Proxy host -> Int -- ^ Proxy port+ -> Maybe SocksConf -- ^ optional SOCKS proxy -> ResourceT m (ConnRelease m, ConnInfo, ManagedConn)-getSslProxyConn checkCert thost tport man phost pport =+getSslProxyConn checkCert thost tport man phost pport socksProxy' = getManagedConn man (ConnKey (T.pack phost) pport True) $ doConnect >>= sslClientConn desc checkCert where desc = socketDesc phost pport "secured-proxy" doConnect = do- h <- connectTo phost (PortNumber $ fromIntegral pport)+ h <- connectionTo phost (PortNumber $ fromIntegral pport) socksProxy' L.hPutStr h $ Blaze.toLazyByteString connectRequest hFlush h r <- hGetSome h 2048@@ -350,7 +356,7 @@ -> Manager -> ResourceT m (ConnRelease m, ConnInfo, ManagedConn) getConn req m =- go m connhost connport+ go m connhost connport (socksProxy req) where h = host req (useProxy, connhost, connport) =@@ -401,3 +407,7 @@ Nothing -> Map.singleton encoded expire Just m -> Map.insert encoded expire m +connectionTo :: HostName -> PortID -> Maybe SocksConf -> IO Handle+connectionTo host' port' Nothing = connectTo host' port'+connectionTo host' port' (Just socksConf) =+ socksConnectWith socksConf host' port' >>= flip socketToHandle ReadWriteMode
Network/HTTP/Conduit/Request.hs view
@@ -36,6 +36,7 @@ import qualified Data.ByteString.Lazy as L import qualified Network.HTTP.Types as W+import Network.Socks5 (SocksConf) import Control.Exception (Exception, SomeException, toException) import Control.Failure (Failure (failure))@@ -72,6 +73,8 @@ , requestBody :: RequestBody m , proxy :: Maybe Proxy -- ^ Optional HTTP proxy.+ , socksProxy :: Maybe SocksConf+ -- ^ Optional SOCKS proxy. , rawBody :: Bool -- ^ If @True@, a chunked and\/or gzipped body will not be -- decoded. Use with caution.@@ -165,6 +168,7 @@ , requestBody = RequestBodyLBS L.empty , method = "GET" , proxy = Nothing+ , socksProxy = Nothing , rawBody = False , decompress = browserDecompress , redirectCount = 10
http-conduit.cabal view
@@ -1,5 +1,5 @@ name: http-conduit-version: 1.2.2+version: 1.2.3 license: BSD3 license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>@@ -43,6 +43,7 @@ , text , transformers-base >= 0.4 && < 0.5 , lifted-base >= 0.1 && < 0.2+ , socks >= 0.4 && < 0.5 , time if flag(network-bytestring) build-depends: network >= 2.2.1 && < 2.2.3@@ -96,6 +97,7 @@ , network , wai , warp+ , socks , http-types source-repository head