sshtun-1.0.0: src/Sshtun/Switch.hs
-- Copyright: 2012 Dino Morelli
-- License: BSD3 (see LICENSE)
-- Author: Dino Morelli <dino@ui3.info>
module Sshtun.Switch
( switchWatcher
)
where
import Control.Concurrent.STM
import Data.Maybe
import Network.Curl
import Text.Printf
import Sshtun.Common
import Sshtun.Conf
import Sshtun.Log
switchWatcher :: Conf -> TVar Shared -> IO ()
switchWatcher conf shared = do
response <- curlGetString (fromJust . switchUrl $ conf) []
switch shared =<< respToState response
logM INFO "Switch watcher starting to wait"
sleep $ switchPollInterval conf
logM INFO "Switch watcher done waiting"
switchWatcher conf shared
respToState :: (CurlCode, String) -> IO DesiredState
respToState (CurlOK, "1\n") = return Run
respToState (CurlOK, "0\n") = return Stop
respToState (code, _ ) = do
logM ERROR $ printf "Problem reading switch file: %s" (show code)
return Stop
switch :: TVar Shared -> DesiredState -> IO ()
switch shared Run = do
logM INFO "Switch watcher setting desired state to Run"
run shared
switch shared Stop = do
logM INFO "Switch watcher setting desired state to Stop"
stop shared