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"
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)]