socks 0.5.0 → 0.5.1
raw patch · 4 files changed
+61/−11 lines, 4 files
Files
- Network/Socks5/Command.hs +1/−1
- Network/Socks5/Conf.hs +8/−0
- Network/Socks5/Types.hs +51/−9
- socks.cabal +1/−1
Network/Socks5/Command.hs view
@@ -39,7 +39,7 @@ sendAll socket (encode $ SocksHello methods) getSocksHelloResponseMethod <$> runGetDone get (recv socket 4096) -newtype Connect = Connect SocksAddress deriving (Show,Eq)+newtype Connect = Connect SocksAddress deriving (Show,Eq,Ord) class Command a where toRequest :: a -> SocksRequest
Network/Socks5/Conf.hs view
@@ -1,3 +1,11 @@+-- |+-- Module : Network.Socks5.Conf+-- License : BSD-style+-- Maintainer : Vincent Hanquez <vincent@snarc.org>+-- Stability : experimental+-- Portability : unknown+--+-- typical SOCKS configuration module Network.Socks5.Conf ( SocksConf(..) , socksHost
Network/Socks5/Types.hs view
@@ -21,40 +21,79 @@ import Data.Data import Network.Socket (HostAddress, HostAddress6, PortNumber) import Control.Exception+import qualified Data.ByteString.Char8 as BC+import Numeric (showHex)+import Data.List (intersperse) -- | Socks Version data SocksVersion = SocksVer5- deriving (Show,Eq)+ deriving (Show,Eq,Ord) +-- | Command that can be send and receive on the SOCKS protocol data SocksCommand = SocksCommandConnect | SocksCommandBind | SocksCommandUdpAssociate- | SocksCommandOther Word8+ | SocksCommandOther !Word8 deriving (Show,Eq,Ord) +-- | Authentication methods available on the SOCKS protocol.+--+-- Only SocksMethodNone is effectively implemented, but+-- other value are enumerated for completeness. data SocksMethod = SocksMethodNone | SocksMethodGSSAPI | SocksMethodUsernamePassword- | SocksMethodOther Word8+ | SocksMethodOther !Word8 | SocksMethodNotAcceptable deriving (Show,Eq,Ord) +-- | A Host address on the SOCKS protocol. data SocksHostAddress =- SocksAddrIPV4 HostAddress- | SocksAddrDomainName ByteString- | SocksAddrIPV6 HostAddress6- deriving (Show,Eq)+ SocksAddrIPV4 !HostAddress+ | SocksAddrDomainName !ByteString+ | SocksAddrIPV6 !HostAddress6+ deriving (Eq,Ord) -data SocksAddress = SocksAddress SocksHostAddress PortNumber- deriving (Show,Eq)+instance Show SocksHostAddress where+ show (SocksAddrIPV4 ha) = "SocksAddrIPV4(" ++ showHostAddress ha ++ ")"+ show (SocksAddrIPV6 ha6) = "SocksAddrIPV6(" ++ showHostAddress6 ha6 ++ ")"+ show (SocksAddrDomainName dn) = "SocksAddrDomainName(" ++ BC.unpack dn ++ ")" +-- | Converts a HostAddress to a String in dot-decimal notation+showHostAddress :: HostAddress -> String+showHostAddress num = concat [show q1, ".", show q2, ".", show q3, ".", show q4]+ where (num',q1) = num `quotRem` 256+ (num'',q2) = num' `quotRem` 256+ (num''',q3) = num'' `quotRem` 256+ (_,q4) = num''' `quotRem` 256++-- | Converts a IPv6 HostAddress6 to standard hex notation+showHostAddress6 :: HostAddress6 -> String+showHostAddress6 (a,b,c,d) =+ (concat . intersperse ":" . map (flip showHex ""))+ [p1,p2,p3,p4,p5,p6,p7,p8]+ where (a',p2) = a `quotRem` 65536+ (_,p1) = a' `quotRem` 65536+ (b',p4) = b `quotRem` 65536+ (_,p3) = b' `quotRem` 65536+ (c',p6) = c `quotRem` 65536+ (_,p5) = c' `quotRem` 65536+ (d',p8) = d `quotRem` 65536+ (_,p7) = d' `quotRem` 65536++-- | Describe a Socket address on the SOCKS protocol+data SocksAddress = SocksAddress !SocksHostAddress !PortNumber+ deriving (Show,Eq,Ord)++-- | Type of reply on the SOCKS protocol data SocksReply = SocksReplySuccess | SocksReplyError SocksError deriving (Show,Eq,Ord,Data,Typeable) +-- | SOCKS error that can be received or sent data SocksError = SocksErrorGeneralServerFailure | SocksErrorConnectionNotAllowedByRule@@ -67,6 +106,9 @@ | SocksErrorOther Word8 deriving (Show,Eq,Ord,Data,Typeable) +-- | Exception returned when using a SOCKS version that is not supported.+--+-- This package only implement version 5. data SocksVersionNotSupported = SocksVersionNotSupported deriving (Show,Data,Typeable)
socks.cabal view
@@ -1,5 +1,5 @@ Name: socks-Version: 0.5.0+Version: 0.5.1 Description: Socks proxy (version 5) implementation. License: BSD3 License-file: LICENSE