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