moesocks 0.1.1.32 → 0.1.2.0
raw patch · 10 files changed
+51/−24 lines, 10 files
Files
- CHANGELOG.md +6/−0
- config.json +1/−1
- moesocks.cabal +1/−1
- src/Network/MoeSocks/App.hs +13/−6
- src/Network/MoeSocks/Common.hs +8/−0
- src/Network/MoeSocks/Config.hs +1/−0
- src/Network/MoeSocks/Helper.hs +9/−12
- src/Network/MoeSocks/TCP.hs +2/−2
- src/Network/MoeSocks/Type.hs +7/−0
- src/Network/MoeSocks/UDP.hs +3/−2
CHANGELOG.md view
@@ -1,3 +1,9 @@+0.1.2.0+-------++* Add OSX compatibility, still some unfixed bugs on OSX. +* Fix a bug that breaks UDP forwarding in local+ 0.1.1.32 -------- * Add a runtime type
config.json view
@@ -4,7 +4,7 @@ "local":"localhost", "localPort":1090, "password":"birthday!",- "fastOpen":true,+ "fastOpen":false, "method":"aes-256-cfb" }
moesocks.cabal view
@@ -1,6 +1,6 @@ name: moesocks category: Network-version: 0.1.1.32+version: 0.1.2.0 license: Apache-2.0 synopsis: A functional firewall killer description: A SOCKS5 proxy using the client / server architecture.
src/Network/MoeSocks/App.hs view
@@ -19,6 +19,7 @@ import Network.MoeSocks.Config import Network.MoeSocks.Constant import Network.MoeSocks.Encrypt (initCipherBox, safeMethods, unsafeMethods)+import Network.MoeSocks.Common import Network.MoeSocks.Helper import Network.MoeSocks.TCP import Network.MoeSocks.Type@@ -37,6 +38,7 @@ import qualified System.Log.Handler as LogHandler + withGateOptions :: Options -> IO a -> IO () withGateOptions aOption aIO = do if aOption ^. listMethods@@ -75,6 +77,7 @@ ("server", "remoteAddress") , ("server_port", "remotePort") , ("local_address", "localAddress")+ , ("local_port", "localPort") ] in@@ -83,7 +86,7 @@ toParsableConfig :: Value -> Value toParsableConfig = asList - each . _1 %~ ( T.cons '_' - . toHaskellNamingConvention+ {-. toHaskellNamingConvention-} . fromShadowSocksConfig ) @@ -114,7 +117,8 @@ optionalConfig = filterEssentialConfig - toJSON defaultConfig - _maybeConfig = _v+ _maybeConfig = -- trace ("JSON: " <> show _v) + _v >>= decode . encode . fallbackConfig optionalConfig@@ -197,13 +201,15 @@ TCP_Relay -> do info_ - "LT: " <> aID <> " nyaa!" - setSocket_TCP_FAST_OPEN _localSocket+ when (_c ^. fastOpen) -+ setSocket_TCP_FAST_OPEN _localSocket+ listen _localSocket maxListenQueue let handleLocal _socket = do _s@(_newSocket, _newSockAddr) <- accept _socket setSocketCloseOnExec _newSocket- setSocketSendFast _socket+ setSocketConfig _c _socket forkIO - catchExceptAsyncLog "LT" - logSA "L TCP client socket" (pure _s) -@@ -268,14 +274,15 @@ setSocketOption _remoteSocket ReuseAddr 1 bindSocket _remoteSocket _remoteAddr - setSocket_TCP_FAST_OPEN _remoteSocket+ when (_c ^. fastOpen) -+ setSocket_TCP_FAST_OPEN _remoteSocket listen _remoteSocket maxListenQueue let handleRemote _socket = do (_newSocket, _) <- accept _socket setSocketCloseOnExec _newSocket- setSocketSendFast _socket+ setSocketConfig _c _socket forkIO - catchExceptAsyncLog "RT" - logSocket "R remote socket" (pure _newSocket) -
src/Network/MoeSocks/Common.hs view
@@ -86,3 +86,11 @@ _family = _clientRequest ^. addressType . to addressType_To_Family getSocketWithHint _family _hostName _port _socketType+++setSocketConfig:: Config -> Socket -> IO ()+setSocketConfig aConfig aSocket = do+ setSocketOption aSocket NoDelay 1 + when (aConfig ^. socketOption_TCP_NOTSENT_LOWAT) - do+ tryIO "setSocket_TCP_NOTSENT_LOWAT" - setSocket_TCP_NOTSENT_LOWAT aSocket+ pure ()
src/Network/MoeSocks/Config.hs view
@@ -20,6 +20,7 @@ , _throttleSpeed = 8000 -- in Kilobytes , _obfuscationFlushBound = 4096 , _fastOpen = False+ , _socketOption_TCP_NOTSENT_LOWAT = True }
src/Network/MoeSocks/Helper.hs view
@@ -19,6 +19,7 @@ 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@@ -31,9 +32,7 @@ import qualified Data.ByteString.Builder as B import qualified Data.ByteString.Lazy as LB import qualified Data.Strict as S-import qualified Data.Text as T - -- BEGIN backports infixr 0 -@@ -57,6 +56,9 @@ boolToMaybe True = Just () boolToMaybe False = Nothing +trace' :: (Show a) => String -> a -> a+trace' aID x = trace ("TRACE " <> aID <> ": " <> show x) x+ {-syncLock :: MVar ()-} {-syncLock = unsafePerformIO - newEmptyMVar-} @@ -433,12 +435,7 @@ in setSocketOption aSocket (CustomSockOpt (_TCP_Option, _TCP_NOTSENT_LOWAT)) 1 -setSocketSendFast :: Socket -> IO ()-setSocketSendFast aSocket = do- setSocketOption aSocket NoDelay 1 - setSocket_TCP_NOTSENT_LOWAT aSocket - -- Copied and slightly modified from: -- https://github.com/mzero/plush/blob/master/src/Plush/Server/Warp.hs setSocketCloseOnExec :: Socket -> IO ()@@ -449,8 +446,8 @@ tryIO :: String -> IO a -> IO (Either IOException a) tryIO _ = try -- . logException aID -toHaskellNamingConvention :: Text -> Text-toHaskellNamingConvention x = x - & T.split (`elem` ['_', '-'])- & over (_tail . traversed) T.toTitle- & T.concat+{-toHaskellNamingConvention :: Text -> Text-}+{-toHaskellNamingConvention x = x -}+ {-& T.split (`elem` ['_', '-'])-}+ {-& over (_tail . traversed) T.toTitle-}+ {-& T.concat-}
src/Network/MoeSocks/TCP.hs view
@@ -89,7 +89,7 @@ logSA "L remote socket" _initSocket - \(_remoteSocket, _remoteAddress) -> do- setSocketSendFast _remoteSocket+ setSocketConfig _c _remoteSocket _remoteSocketName <- getSocketName _remoteSocket @@ -221,7 +221,7 @@ debug_ - "checking: " <> show _addr <> " ? " <> show _forbidden_IPs withCheckedForbidden_IP_List _addr _forbidden_IPs - do- setSocketSendFast _targetSocket+ setSocketConfig _c _targetSocket _remotePeerAddr <- getPeerName aSocket let _msg = showRelay _remotePeerAddr _clientRequest
src/Network/MoeSocks/Type.hs view
@@ -64,6 +64,7 @@ , _throttleSpeed :: Double , _obfuscationFlushBound :: Int -- should be greater then MTU , _fastOpen :: Bool+ , _socketOption_TCP_NOTSENT_LOWAT :: Bool } deriving (Show, Eq, Generic) @@ -88,6 +89,12 @@ makeLenses ''Forward++{-data Profile = Mac-}+ {-| Linux-}+ {-deriving (Show, Eq, Read)-}++{-makePrisms ''Profile-} data Options = Options {
src/Network/MoeSocks/UDP.hs view
@@ -48,7 +48,7 @@ (aSocket, aSockAddr) = do let _c = aEnv ^. config- _cipherBox = _cipherBox+ _cipherBox = aEnv ^. cipherBox let _clientRequest = ClientRequest UDP_Port@@ -71,13 +71,14 @@ connect _remoteSocket _remoteAddr _encodeIV <- _cipherBox ^. generate_IV + _encrypt <- _cipherBox ^. encryptBuilder - _encodeIV {-let (_encrypt, _decrypt) = (pure, pure)-} let _bytes = buildShadowSocksRequest _clientRequest aMessage - {-debug_ - "L UDP: " <> show _bytes-}+ {-debug_ - "L UDP sending: " <> show _bytes-} let _msg = showRelay aSockAddr _clientRequest info_ - "LU: " <> _msg