Blame Network/Socks5/Lowlevel.hs
|
Packit |
fc2124 |
module Network.Socks5.Lowlevel
|
|
Packit |
fc2124 |
( resolveToSockAddr
|
|
Packit |
fc2124 |
, socksListen
|
|
Packit |
fc2124 |
-- * lowlevel types
|
|
Packit |
fc2124 |
, module Network.Socks5.Wire
|
|
Packit |
fc2124 |
, module Network.Socks5.Command
|
|
Packit |
fc2124 |
) where
|
|
Packit |
fc2124 |
|
|
Packit |
fc2124 |
import Network.Socket
|
|
Packit |
fc2124 |
import Network.BSD
|
|
Packit |
fc2124 |
import Network.Socks5.Command
|
|
Packit |
fc2124 |
import Network.Socks5.Wire
|
|
Packit |
fc2124 |
import Network.Socks5.Types
|
|
Packit |
fc2124 |
import qualified Data.ByteString.Char8 as BC
|
|
Packit |
fc2124 |
|
|
Packit |
fc2124 |
resolveToSockAddr :: SocksAddress -> IO SockAddr
|
|
Packit |
fc2124 |
resolveToSockAddr (SocksAddress sockHostAddr port) =
|
|
Packit |
fc2124 |
case sockHostAddr of
|
|
Packit |
fc2124 |
SocksAddrIPV4 ha -> return $ SockAddrInet port ha
|
|
Packit |
fc2124 |
SocksAddrIPV6 ha6 -> return $ SockAddrInet6 port 0 ha6 0
|
|
Packit |
fc2124 |
SocksAddrDomainName bs -> do he <- getHostByName (BC.unpack bs)
|
|
Packit |
fc2124 |
return $ SockAddrInet port (hostAddress he)
|
|
Packit |
fc2124 |
|
|
Packit |
fc2124 |
socksListen :: Socket -> IO SocksRequest
|
|
Packit |
fc2124 |
socksListen sock = do
|
|
Packit |
fc2124 |
hello <- waitSerialized sock
|
|
Packit |
fc2124 |
case getSocksHelloMethods hello of
|
|
Packit |
fc2124 |
_ -> do sendSerialized sock (SocksHelloResponse SocksMethodNone)
|
|
Packit |
fc2124 |
waitSerialized sock
|