remotedaemon: notice on RELOAD when tor hidden service has been enabled

and start serving it. This makes the webapp wormhole tor pairing work 100%!

This commit was sponsored by Andrea Rota.
This commit is contained in:
Joey Hess 2016-12-28 12:21:52 -04:00
parent 4d690dc680
commit 309742805f
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
4 changed files with 62 additions and 31 deletions

View file

@ -34,14 +34,25 @@ import Control.Concurrent.STM.TBMQueue
import Control.Concurrent.Async
-- Run tor hidden service.
server :: TransportHandle -> IO ()
server th@(TransportHandle (LocalRepo r) _) = do
u <- liftAnnex th getUUID
uid <- getRealUserID
let ident = fromUUID u
go u =<< getHiddenServiceSocketFile torAppName uid ident
server :: Server
server ichan th@(TransportHandle (LocalRepo r) _) = go
where
go u (Just sock) = do
go = checkstartservice >>= handlecontrol
checkstartservice = do
u <- liftAnnex th getUUID
uid <- getRealUserID
let ident = fromUUID u
msock <- getHiddenServiceSocketFile torAppName uid ident
case msock of
Nothing -> do
debugM "remotedaemon" "Tor hidden service not enabled"
return False
Just sock -> do
void $ async $ startservice sock u
return True
startservice sock u = do
q <- newTBMQueueIO maxConnections
replicateM_ maxConnections $
forkIO $ forever $ serveClient th u r q
@ -57,7 +68,18 @@ server th@(TransportHandle (LocalRepo r) _) = do
unless ok $ do
hClose conn
warningIO "dropped Tor connection, too busy"
go _ Nothing = debugM "remotedaemon" "Tor hidden service not enabled"
handlecontrol servicerunning = do
msg <- atomically $ readTChan ichan
case msg of
-- On reload, the configuration may have changed to
-- enable the tor hidden service. If it was not
-- enabled before, start it,
RELOAD | not servicerunning -> go
-- We can ignore all other messages; no need
-- to restart the hidden service when the network
-- changes as tor takes care of all that.
_ -> handlecontrol servicerunning
-- How many clients to serve at a time, maximum. This is to avoid DOS attacks.
maxConnections :: Int