module Sarsi where import Crypto.Hash (Digest, hash) import Crypto.Hash.Algorithms (MD5) import Network.Socket (Family(AF_UNIX), SockAddr(SockAddrUnix), Socket, SocketType(Stream), defaultProtocol, socket) import System.Directory (getTemporaryDirectory, doesFileExist, makeAbsolute, removeFile) import System.FilePath (()) import qualified Data.ByteString.Char8 as BSC8 title :: String title = "sarsi" -- TODO Windows compat: create a TCP socket. mkSocket :: IO Socket mkSocket = do socket AF_UNIX Stream defaultProtocol mkSockAddr :: FilePath -> IO SockAddr mkSockAddr fp = do path <- getSockPath fp return . SockAddrUnix $ path mkSockAddr' :: FilePath -> IO SockAddr mkSockAddr' fp = do path <- getSockPath fp exists <- doesFileExist path if (exists) then removeFile path else return () mkSockAddr fp getSockPath :: FilePath -> IO FilePath getSockPath fp' = do fp <- makeAbsolute fp' tmp <- getTemporaryDirectory return $ tmp concat [title, "-", show $ (hash $ BSC8.pack fp :: Digest MD5)]