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