socks 0.3.0 → 0.4.0
raw patch · 2 files changed
+24/−21 lines, 2 files
Files
- Network/Socks5.hs +23/−20
- socks.cabal +1/−1
Network/Socks5.hs view
@@ -29,7 +29,7 @@ -- this structure will be extended in future to support authentification. -- use defaultSocksConf to create new record. data SocksConf = SocksConf- { socksHost :: String -- ^ SOCKS host.+ { socksHost :: String -- ^ SOCKS host. , socksPort :: PortNumber -- ^ SOCKS port. , socksVersion :: Int -- ^ SOCKS version to use, only 5 supported for now. }@@ -64,26 +64,29 @@ _ <- socks5ConnectDomainName sock destination port return () --- | similar to Network connectTo but use a socks proxy.-socksConnectTo :: String -> PortID -> String -> PortID -> IO Handle-socksConnectTo sockshost socksport desthost destport = do- sport <- resolvePortID socksport+-- | create a new socket and connect in to a destination through the specified+-- SOCKS configuration.+socksConnectWith :: SocksConf -- ^ SOCKS configuration+ -> String -- ^ destination hostname+ -> PortID -- ^ destination port+ -> IO Socket+socksConnectWith sockConf desthost destport = do dport <- resolvePortID destport- proto <- getProtocolNumber "tcp"- bracketOnError (socket AF_INET Stream proto) sClose (go sport dport)- where- go sport dport sock = do- he <- getHostByName sockshost- let sockaddr = SockAddrInet sport (hostAddress he)- socksConnectName sock sockaddr desthost dport- socketToHandle sock ReadWriteMode+ bracketOnError (socket AF_INET Stream proto) sClose $ \sock -> do+ he <- getHostByName $ socksHost sockConf+ let sockaddr = SockAddrInet (socksPort sockConf) (hostAddress he)+ socksConnectName sock sockaddr desthost dport+ return sock - resolvePortID (Service serv) = getServicePortNumber serv- resolvePortID (PortNumber n) = return n- resolvePortID _ = error "unsupported unix PortID"+-- | similar to Network connectTo but use a socks proxy with default socks configuration.+socksConnectTo :: String -> PortID -> String -> PortID -> IO Handle+socksConnectTo sockshost socksport desthost destport = do+ sport <- resolvePortID socksport+ let socksConf = defaultSocksConf sockshost sport+ sock <- socksConnectWith socksConf desthost destport+ socketToHandle sock ReadWriteMode --- | like socksConnectTo but specify the socks configuration directly.-socksConnectWith :: SocksConf -> String -> PortID -> IO Handle-socksConnectWith socksConf =- socksConnectTo (socksHost socksConf) (PortNumber $ socksPort socksConf)+resolvePortID (Service serv) = getServicePortNumber serv+resolvePortID (PortNumber n) = return n+resolvePortID _ = error "unsupported unix PortID"
socks.cabal view
@@ -1,5 +1,5 @@ Name: socks-Version: 0.3.0+Version: 0.4.0 Description: Socks proxy (version 5) implementation. License: BSD3 License-file: LICENSE