diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-12-24 12:12:58 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-12-24 12:14:14 -0400 |
commit | 856fa66695468e890749279e0b8ddfe60283f112 (patch) | |
tree | cbd92ef3e0b2ed36053cdde73f8a076ce801f7f8 /RemoteDaemon | |
parent | bb54ad98f274b180d2496069fffd3f83941875ca (diff) |
refactor
Diffstat (limited to 'RemoteDaemon')
-rw-r--r-- | RemoteDaemon/Transport/Tor.hs | 22 |
1 files changed, 3 insertions, 19 deletions
diff --git a/RemoteDaemon/Transport/Tor.hs b/RemoteDaemon/Transport/Tor.hs index 0fbe9a720..e7d3794d6 100644 --- a/RemoteDaemon/Transport/Tor.hs +++ b/RemoteDaemon/Transport/Tor.hs @@ -14,7 +14,6 @@ import Annex.ChangedRefs import RemoteDaemon.Types import RemoteDaemon.Common import Utility.Tor -import Utility.FileMode import Utility.AuthToken import P2P.Protocol as P2P import P2P.IO @@ -33,7 +32,6 @@ import System.Log.Logger (debugM) import Control.Concurrent.STM import Control.Concurrent.STM.TBMQueue import Control.Concurrent.Async -import qualified Network.Socket as S -- Run tor hidden service. server :: TransportHandle -> IO () @@ -48,30 +46,16 @@ server th@(TransportHandle (LocalRepo r) _) = do replicateM_ maxConnections $ forkIO $ forever $ serveClient th u r q - nukeFile sock - soc <- S.socket S.AF_UNIX S.Stream S.defaultProtocol - S.bind soc (S.SockAddrUnix sock) - -- Allow everyone to read and write to the socket; tor - -- is probably running as a different user. - -- Connections have to authenticate to do anything, - -- so it's fine that other local users can connect to the - -- socket. - modifyFileMode sock $ addModes - [groupReadMode, groupWriteMode, otherReadMode, otherWriteMode] - - S.listen soc 2 debugM "remotedaemon" "Tor hidden service running" - forever $ do - (conn, _) <- S.accept soc - h <- setupHandle conn + serveUnixSocket sock $ \conn -> do ok <- atomically $ ifM (isFullTBMQueue q) ( return False , do - writeTBMQueue q h + writeTBMQueue q conn return True ) unless ok $ do - hClose h + hClose conn warningIO "dropped Tor connection, too busy" go _ Nothing = debugM "remotedaemon" "Tor hidden service not enabled" |