packages feed

moesocks 1.0.0.42 → 1.0.0.43

raw patch · 17 files changed

+232/−183 lines, 17 files

Files

moesocks.cabal view
@@ -1,6 +1,6 @@ name:               moesocks category:           Network-version:            1.0.0.42+version:            1.0.0.43 license:            Apache-2.0 synopsis:           A functional firewall killer description:        A SOCKS5 proxy using the client / server architecture.@@ -9,7 +9,7 @@ author:             Jinjing Wang maintainer:         Jinjing Wang <nfjinjing@gmail.com> build-type:         Simple-cabal-version:      >=1.10+cabal-version:      >=1.18 copyright:          Copyright (C) 2015 Jinjing Wang tested-with:        GHC == 8.0.2 
src/Network/MoeSocks/App.hs view
@@ -3,16 +3,16 @@  module Network.MoeSocks.App where -import Control.Concurrent.Async hiding (waitBoth)-import Control.Lens-import Control.Monad-import Network.MoeSocks.Bootstrap (loadConfig)-import Network.MoeSocks.Handler (runRemoteRelay, runLocalService)-import Network.MoeSocks.Helper-import Network.MoeSocks.Runtime (initRuntime)-import Network.MoeSocks.Type-import Prelude hiding ((-), take)+import           Control.Concurrent.Async hiding (waitBoth)+import           Control.Lens++import           Network.MoeSocks.Bootstrap (loadConfig)+import           Network.MoeSocks.Handler (runRemoteRelay, runLocalService)+import           Network.MoeSocks.Helper ((-), io, error_, foreverRun)+import           Network.MoeSocks.Runtime (initRuntime)+import           Network.MoeSocks.Type (Env, Job(..), MoeMonad, env, jobs) import qualified Network.MoeSocks.Type.Bootstrap.Option as O+import           Prelude hiding ((-), take)   runJob :: Env -> Job -> IO ()
src/Network/MoeSocks/Bootstrap.hs view
@@ -3,25 +3,26 @@  module Network.MoeSocks.Bootstrap where -import Control.Lens-import Control.Monad-import Control.Monad.Except-import Control.Monad.Writer hiding (listen)-import Data.Aeson hiding (Result)-import Data.Aeson.Lens-import Data.Maybe (fromMaybe)-import Data.Text (Text)-import Data.Text.Lens-import Network.MoeSocks.Default-import Network.MoeSocks.Encrypt (safeMethods, unsafeMethods)-import Network.MoeSocks.Helper-import Prelude hiding ((-), take)+import           Control.Lens+import           Control.Monad.Except (ExceptT, throwError)+import           Control.Monad.Writer hiding (listen)+import           Data.Aeson hiding (Result)+import           Data.Aeson.Lens (_Object, _JSON)+import           Data.Maybe (fromMaybe)+import           Data.Text (Text)+import           Data.Text.Lens (_Text) import qualified Data.HashMap.Strict as H import qualified Data.Map as Map import qualified Data.Text as T import qualified Data.Text.IO as TIO+ import qualified Network.MoeSocks.Type.Bootstrap.Config as C import qualified Network.MoeSocks.Type.Bootstrap.Option as O+import           Network.MoeSocks.Default (defaultConfig)+import           Network.MoeSocks.Encrypt (safeMethods, unsafeMethods)++import           Network.MoeSocks.Helper ((-), debug_, io, toHaskellNamingConvention)+import           Prelude hiding ((-), take)   asList :: ([(Text, Value)] -> [(Text, Value)]) -> Value -> Value
src/Network/MoeSocks/BuilderAndParser.hs view
@@ -2,21 +2,24 @@  module Network.MoeSocks.BuilderAndParser where -import Control.Lens-import Data.Attoparsec.ByteString-import Data.Binary-import Data.Binary.Put-import Data.Maybe-import Data.Monoid-import Data.Text.Lens-import Data.Text.Strict.Lens (utf8)-import Network.MoeSocks.Helper-import Network.MoeSocks.Type-import Network.Socket-import Prelude hiding ((-), take)+import           Control.Lens+import           Data.Attoparsec.ByteString (Parser, anyWord8, word8, take, count)+import           Data.Attoparsec.ByteString (satisfy, choice)+import           Data.Binary (Word16, Word8, decode, put)+import           Data.Binary.Put (runPut)+import           Data.Maybe (fromMaybe)+import           Data.Monoid ((<>))+import           Data.Text.Lens+import           Data.Text.Strict.Lens (utf8)+import           Network.Socket (SockAddr(..)) import qualified Data.ByteString as S import qualified Data.ByteString.Builder as B import qualified Prelude as P++import           Network.MoeSocks.Type++import           Network.MoeSocks.Helper ((-), flip4, portPairToInt)+import           Prelude hiding ((-), take)   _No_authentication :: Word8
src/Network/MoeSocks/Common.hs view
@@ -5,12 +5,16 @@  import Control.Lens import Control.Monad.Writer hiding (listen)-import Data.IP-import Data.Maybe+import Data.IP (IPRange, isMatchedTo)+import Data.Maybe (isJust) import Data.Text.Lens-import Network.MoeSocks.Helper+import Network.Socket (SockAddr(..), Socket(..), SocketType(..), Family(..))+import Network.Socket (setSocketOption, SocketOption(..))+ import Network.MoeSocks.Type-import Network.Socket hiding (send, recv, recvFrom, sendTo)++import Network.MoeSocks.Helper ((-), tryIO, error_)+import Network.MoeSocks.Helper (setSocket_TCP_NOTSENT_LOWAT, getSocketWithHint) import Prelude hiding ((-), take)  
src/Network/MoeSocks/Default.hs view
@@ -2,15 +2,16 @@  module Network.MoeSocks.Default where -import Control.Lens-import Control.Monad.Writer-import Data.IP-import Data.Text (Text)-import Data.Text.Lens-import Network.MoeSocks.Encrypt (constCipherBox)-import Network.MoeSocks.Type-import System.Log.Logger+import           Control.Lens+import           Control.Monad.Writer (execWriter, tell)+import           Data.IP (IPRange)+import           Data.Text (Text)+import           Data.Text.Lens+import           System.Log.Logger (Priority(DEBUG)) import qualified Data.Text as T++import           Network.MoeSocks.Encrypt (constCipherBox)+import           Network.MoeSocks.Type import qualified Network.MoeSocks.Type.Bootstrap.Config as C import qualified Network.MoeSocks.Type.Bootstrap.Option as O 
src/Network/MoeSocks/Encrypt.hs view
@@ -16,23 +16,24 @@ ) where -import Control.Lens-import Control.Monad.Except-import Crypto.Hash.MD5 (hash)-import Data.ByteString (ByteString)-import Data.Map-import Data.Monoid ((<>))-import Data.Text (Text)-import Data.Text.Lens-import Data.Text.Strict.Lens (utf8)-import OpenSSL (withOpenSSL)-import OpenSSL.EVP.Cipher (getCipherByName, CryptoMode(..))-import OpenSSL.EVP.Internal (cipherIvLength)-import OpenSSL.Random (randBytes)-import Prelude hiding ((-))+import           Control.Lens+import           Control.Monad.Except (ExceptT, runExceptT, liftIO, throwError)+import           Crypto.Hash.MD5 (hash)+import           Data.ByteString (ByteString) import qualified Data.ByteString as S+import           Data.Map (Map,fromList)+import           Data.Monoid ((<>)) import qualified Data.Strict as S+import           Data.Text (Text)+import           Data.Text.Lens+import           Data.Text.Strict.Lens (utf8)+import           OpenSSL (withOpenSSL)+import           OpenSSL.EVP.Cipher (getCipherByName, CryptoMode(..))+import           OpenSSL.EVP.Internal (cipherIvLength) import qualified OpenSSL.EVP.Internal as E+import           OpenSSL.Random (randBytes)++import           Prelude hiding ((-))  -- BEGIN backports 
src/Network/MoeSocks/Handler.hs view
@@ -3,20 +3,25 @@  module Network.MoeSocks.Handler where -import Control.Concurrent+import Control.Concurrent (forkIO) import Control.Lens-import Control.Monad-import Control.Monad.Writer hiding (listen)+import Control.Monad.Writer (forever, when)+import Data.Monoid ((<>)) import Data.ByteString (ByteString) import Data.Text (Text) import Data.Text.Lens-import Network.MoeSocks.Common-import Network.MoeSocks.Helper-import Network.MoeSocks.TCP+import Network.Socket (Socket, SockAddr, SocketType(Stream, Datagram), bind)+import Network.Socket (SocketOption(ReuseAddr), setSocketOption, accept, maxListenQueue)+import Network.Socket (listen)+import Network.Socket.ByteString (recvFrom)++import Network.MoeSocks.Common (setSocketConfig)+import Network.MoeSocks.TCP (local_SOCKS5_RequestHandler, local_TCP_ForwardRequestHandler)+import Network.MoeSocks.TCP (remote_TCP_RequestHandler) import Network.MoeSocks.Type-import Network.MoeSocks.UDP-import Network.Socket hiding (send, recv, recvFrom, sendTo)-import Network.Socket.ByteString+import Network.MoeSocks.UDP (local_UDP_ForwardRequestHandler, remote_UDP_RequestHandler)++import Network.MoeSocks.Helper import Prelude hiding ((-), take)  _PacketLength :: Int@@ -35,7 +40,7 @@   logSA "L loop" (pure s) - \(_localSocket, _localAddr) -> do      setSocketOption _localSocket ReuseAddr 1-    bindSocket _localSocket _localAddr+    bind _localSocket _localAddr      case aServiceType of       TCP_Service -> do@@ -125,7 +130,7 @@     info_ - "RT: TCP relay " <> showWrapped _remoteAddr <> " nyaa!"      setSocketOption _remoteSocket ReuseAddr 1-    bindSocket _remoteSocket _remoteAddr+    bind _remoteSocket _remoteAddr      when (_env ^. fastOpen) -       setSocket_TCP_FAST_OPEN _remoteSocket@@ -149,7 +154,7 @@     info_ - "RU: UDP relay " <> showWrapped _remoteAddr <> " nyaa!"      setSocketOption _remoteSocket ReuseAddr 1-    bindSocket _remoteSocket _remoteAddr+    bind _remoteSocket _remoteAddr      let handleRemote = do           (_msg, _sockAddr) <- recvFrom _remoteSocket _PacketLength
src/Network/MoeSocks/Helper.hs view
@@ -3,38 +3,49 @@  module Network.MoeSocks.Helper where -import Control.Concurrent-import Control.Concurrent.Async-import Control.Concurrent.STM-import Control.Exception-import Control.Lens-import Control.Monad-import Control.Monad.IO.Class-import Data.Attoparsec.ByteString hiding (try)-import Data.Binary-import Data.Binary.Put-import Data.ByteString (ByteString)-import Data.Char (isUpper)-import Data.Foldable (for_)-import Data.List (sortOn)-import Data.Maybe-import Data.Monoid-import Data.Text (Text)-import Data.Text.Lens-import Data.Time.Clock-import Debug.Trace (trace)-import Network.MoeSocks.Internal.Socket (sendAllToFastOpen)-import Network.Socket hiding (send, recv)-import Network.Socket.ByteString-import Prelude hiding (take, (-))-import System.Log.Logger-import System.Random-import System.Timeout (timeout)+import           Control.Concurrent (threadDelay, yield)+import           Control.Concurrent.Async (concurrently, race_)+import           Control.Concurrent.STM (TBQueue, readTBQueue, writeTBQueue, atomically)+import           Control.Exception (Exception, SomeException, IOException, AsyncException)+import           Control.Exception (catches, bracket, Handler(Handler))+import           Control.Exception (try, onException, throw, throwIO, catch)+import           Control.Lens+import           Control.Monad (forever, when)+import           Control.Monad.IO.Class (MonadIO, liftIO)+import           Data.Attoparsec.ByteString (IResult(Partial, Fail, Done), Result)+import           Data.Attoparsec.ByteString (Parser, parse)+import           Data.Binary (Word8, Word16, put, decode)+import           Data.Binary.Put (runPut)+import           Data.ByteString (ByteString) import qualified Data.ByteString as S import qualified Data.ByteString.Builder as B import qualified Data.ByteString.Lazy as LB+import           Data.Char (isUpper)+import           Data.Foldable (for_)+import           Data.List (sortOn)+import           Data.Maybe (fromMaybe)+import           Data.Monoid ((<>)) import qualified Data.Strict as S+import           Data.Text (Text) import qualified Data.Text as T+import           Data.Text.Lens+import           Data.Time.Clock (getCurrentTime, diffUTCTime)+import           Debug.Trace (trace)+import           Network.Socket (AddrInfoFlag(AI_NUMERICSERV, AI_ADDRCONFIG))+import           Network.Socket (ShutdownCmd(ShutdownSend, ShutdownReceive))+import           Network.Socket (Socket, SockAddr, SocketType(Stream))+import           Network.Socket (SocketOption(CustomSockOpt, NoDelay), setSocketOption)+import           Network.Socket (addrFamily, addrFlags, addrSocketType, shutdown, close)+import           Network.Socket (defaultHints, socket, addrAddress, addrProtocol)+import           Network.Socket (getAddrInfo, Family(AF_UNSPEC))+import           Network.Socket.ByteString (recv, sendAll)+import           System.Log.Logger  (noticeM, debugM, errorM, warningM, infoM)+import           System.Random (randomRIO)+import           System.Timeout (timeout)++import           Network.MoeSocks.Internal.Socket (sendAllToFastOpen)++import           Prelude hiding (take, (-))  -- BEGIN backports 
src/Network/MoeSocks/Internal/Socket.hs view
@@ -2,15 +2,15 @@  module Network.MoeSocks.Internal.Socket where -import Control.Monad-import Data.ByteString (ByteString)-import Data.ByteString.Unsafe (unsafeUseAsCStringLen)-import Foreign.C.Types-import Foreign.Ptr (Ptr)-import Network.Socket-import Network.Socket.ByteString-import Network.Socket.Internal (withSockAddr)+import           Control.Monad (liftM, when)+import           Data.ByteString (ByteString) import qualified Data.ByteString as S+import           Data.ByteString.Unsafe (unsafeUseAsCStringLen)+import           Foreign.C.Types (CSize(..), CInt(..))+import           Foreign.Ptr (Ptr)+import           Network.Socket (Socket(MkSocket), SockAddr, )+import           Network.Socket.ByteString (sendAll)+import           Network.Socket.Internal (withSockAddr)  foreign import ccall unsafe "sendto" c_sendto ::   CInt -> Ptr a -> CSize -> CInt -> Ptr SockAddr -> CInt -> IO CInt
src/Network/MoeSocks/Options.hs view
@@ -2,24 +2,26 @@  module Network.MoeSocks.Options where -import Control.Lens-import Data.Aeson-import Data.Maybe-import Data.Text (Text)-import Data.Text.Lens-import Network.MoeSocks.Default-import Network.MoeSocks.Helper-import Network.MoeSocks.Type.Bootstrap.Option-import Network.MoeSocks.Type.Common-import Options.Applicative hiding (Parser)-import Prelude hiding ((-), takeWhile)-import System.Log.Logger+import           Control.Lens+import           Data.Aeson (Value, toJSON)+import           Data.Attoparsec.Text (Parser, takeWhile, char, decimal)+import           Data.Attoparsec.Text (skipSpace, parseOnly, many', choice)+import           Data.Maybe (catMaybes)+import           Data.Monoid ((<>))+import           Data.Text (Text) import qualified Data.Text as T-import qualified Network.MoeSocks.Type.Bootstrap.Config as C+import           Data.Text.Lens import qualified Options.Applicative as O-import Data.Attoparsec.Text (Parser, takeWhile, char, decimal, skipSpace,-                              parseOnly, many', choice)-import Data.Monoid ((<>))+import           Options.Applicative hiding (Parser)+import           System.Log.Logger (Priority(DEBUG, INFO))++import           Network.MoeSocks.Default (defaultConfig)+import qualified Network.MoeSocks.Type.Bootstrap.Config as C+import           Network.MoeSocks.Type.Bootstrap.Option (Options(..), RunningMode(..))+import           Network.MoeSocks.Type.Common (Forward(Forward))++import           Network.MoeSocks.Helper ((-))+import           Prelude hiding ((-), takeWhile)  textOption :: O.Mod O.OptionFields String -> O.Parser Text textOption x = strOption x <&> review _Text
src/Network/MoeSocks/Runtime.hs view
@@ -3,28 +3,29 @@  module Network.MoeSocks.Runtime where -import Control.Lens-import Control.Monad.Except-import Control.Monad.Writer hiding (listen)-import Data.IP-{-import Data.List (intercalate)-}-{-import Data.Text (Text)-}-import Data.Text.IO as T-import Data.Text.Lens-import Network.MoeSocks.Bootstrap-import Network.MoeSocks.Default-import Network.MoeSocks.Encrypt-import Network.MoeSocks.Helper-import Network.MoeSocks.Type-import Prelude hiding ((-), take)-import System.Log.Formatter-import System.Log.Handler.Simple-import System.Log.Logger+import           Control.Lens+import           Control.Monad.Except (ExceptT, throwError)+import           Data.IP (IPRange)+import           Data.Monoid ((<>)) import qualified Data.Text as T+import           Data.Text.IO as T+import           Data.Text.Lens (_Text) import qualified Network.MoeSocks.Type.Bootstrap.Config as C import qualified Network.MoeSocks.Type.Bootstrap.Option as O import qualified System.IO as IO+import           System.Log.Formatter (simpleLogFormatter) import qualified System.Log.Handler as LogHandler+import           System.Log.Handler.Simple (streamHandler)+import           System.Log.Logger (Priority(DEBUG), removeHandler, addHandler, setLevel)+import           System.Log.Logger (updateGlobalLogger, rootLoggerName)++import           Network.MoeSocks.Bootstrap (loadConfig)+import           Network.MoeSocks.Default (defaultRuntime, parseIPRangeList, defaultEnv)+import           Network.MoeSocks.Encrypt (initCipherBox)+import           Network.MoeSocks.Type++import           Prelude hiding ((-), take)+import           Network.MoeSocks.Helper ((-), debug_, io, is)  initLogger :: Priority -> IO () initLogger aLevel = do
src/Network/MoeSocks/TCP.hs view
@@ -2,22 +2,35 @@  module Network.MoeSocks.TCP where -import Control.Concurrent.STM-import Control.Exception-import Control.Lens-import Control.Monad.Writer hiding (listen)-import Data.ByteString (ByteString)-import Data.Text (Text)-import Network.MoeSocks.BuilderAndParser-import Network.MoeSocks.Common-import Network.MoeSocks.Encrypt (identityCipher)-import Network.MoeSocks.Helper-import Network.MoeSocks.Type-import Network.Socket hiding (send, recv, recvFrom, sendTo)-import Network.Socket.ByteString (recv)-import Prelude hiding ((-), take)+import           Control.Concurrent.STM (newTBQueueIO)+import           Control.Exception (throwIO, finally)+import           Control.Lens+import           Control.Monad (when)+import           Data.ByteString (ByteString) import qualified Data.ByteString as S+import           Data.Monoid ((<>)) import qualified Data.Strict as S+import           Data.Text (Text)+import           Network.Socket (Socket, SockAddr, SocketType(Stream))+import           Network.Socket (connect, getPeerName, getSocketName)+import           Network.Socket.ByteString (recv)++import           Network.MoeSocks.BuilderAndParser (greetingParser, greetingReplyBuilder)+import           Network.MoeSocks.BuilderAndParser (shadowSocksRequestParser)+import           Network.MoeSocks.BuilderAndParser (shadowSocksRequestBuilder)+import           Network.MoeSocks.BuilderAndParser (connectionParser, connectionReplyBuilder)+import           Network.MoeSocks.BuilderAndParser (sockAddr_To_Pair, _No_authentication)+import           Network.MoeSocks.Common (showRelay, getIPLists, initTarget)+import           Network.MoeSocks.Common (withChecked_IP_List, setSocketConfig)+import           Network.MoeSocks.Encrypt (identityCipher)+import           Network.MoeSocks.Type++import           Network.MoeSocks.Helper ((-), connectMarket, consumeLoop, produceLoop)+import           Network.MoeSocks.Helper (sendBytes, connectTunnel, send_, sendFast)+import           Network.MoeSocks.Helper (info_, debug_, logSA, parseSocket)+import           Network.MoeSocks.Helper (builder_To_ByteString, getSocket)+import           Network.MoeSocks.Helper (ParseException(ParseException))+import           Prelude hiding ((-), take)  _NoThrottle :: Maybe a _NoThrottle = Nothing
src/Network/MoeSocks/Type/Bootstrap/Config.hs view
@@ -4,7 +4,7 @@ module Network.MoeSocks.Type.Bootstrap.Config where  import Control.Lens-import Data.Aeson+import Data.Aeson (FromJSON, ToJSON) import Data.Text (Text) import GHC.Generics (Generic) 
src/Network/MoeSocks/Type/Bootstrap/Option.hs view
@@ -4,10 +4,10 @@ module Network.MoeSocks.Type.Bootstrap.Option where  import Control.Lens-import Data.Aeson+import Data.Aeson (Value) import Data.Text (Text)-import Network.MoeSocks.Type.Common-import System.Log.Logger+import Network.MoeSocks.Type.Common (Forward)+import System.Log.Logger (Priority)  data RunningMode = RemoteMode | LocalMode | DebugMode       deriving (Show, Eq)
src/Network/MoeSocks/Type/Runtime.hs view
@@ -3,17 +3,17 @@  module Network.MoeSocks.Type.Runtime where -import Control.Lens-import Control.Monad.Except-import Data.ByteString (ByteString)-import Data.Text (Text)-import Data.Text.Lens-import Data.Word-import Data.IP-import Network.MoeSocks.Type.Common-import Numeric (showHex)+import           Control.Lens+import           Control.Monad.Except+import           Data.ByteString (ByteString)+import           Data.IP import qualified Data.List as L import qualified Data.Strict as S+import           Data.Text (Text)+import           Data.Text.Lens+import           Data.Word (Word8, Word16)+import           Network.MoeSocks.Type.Common+import           Numeric (showHex)  data ClientGreeting = ClientGreeting   {
src/Network/MoeSocks/UDP.hs view
@@ -2,22 +2,29 @@  module Network.MoeSocks.UDP where -import Control.Exception-import Control.Lens-import Control.Monad-import Control.Monad.Writer hiding (listen)-import Data.Attoparsec.ByteString-import Data.ByteString (ByteString)-import Data.Text (Text)-import Network.MoeSocks.BuilderAndParser-import Network.MoeSocks.Common-import Network.MoeSocks.Helper-import Network.MoeSocks.Type-import Network.Socket hiding (send, recv, recvFrom, sendTo)-import Network.Socket.ByteString-import Prelude hiding ((-), take)+import           Control.Exception (throwIO)+import           Control.Lens+import           Control.Monad (when)+import           Data.Monoid ((<>))+import           Data.Attoparsec.ByteString (IResult(Done), parse)+import           Data.ByteString (ByteString) import qualified Data.ByteString as S import qualified Data.Strict as S+import           Data.Text (Text)+import           Network.Socket (Socket, SockAddr)+import           Network.Socket (connect, SocketType(Datagram))+import           Network.Socket.ByteString (sendAllTo)++import           Network.MoeSocks.BuilderAndParser (shadowSocksRequestParser)+import           Network.MoeSocks.BuilderAndParser (shadowSocksRequestBuilder)+import           Network.MoeSocks.BuilderAndParser (sockAddr_To_Pair)+import           Network.MoeSocks.Common (withChecked_IP_List, showRelay, initTarget, getIPLists)+import           Network.MoeSocks.Type++import           Network.MoeSocks.Helper ((-), recv_UDP, info_, debug_, send_)+import           Network.MoeSocks.Helper (logSA, getSocket, ParseException(ParseException))+import           Network.MoeSocks.Helper (builder_To_ByteString)+import           Prelude hiding ((-), take)   buildShadowSocksRequest :: ClientRequest -> ByteString -> ByteString