From 1e8250682c95dc677d54a73f8765bd94985d4a38 Mon Sep 17 00:00:00 2001
From: Ramakrishnan Muthukrishnan <ram@rkrishnan.org>
Date: Sun, 6 Dec 2015 14:39:42 +0530
Subject: [PATCH] rename tracker response function, Utils, catch exceptions.

---
 src/FuncTorrent/Tracker.hs |  8 ++++----
 src/FuncTorrent/Utils.hs   | 11 +++++++----
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/FuncTorrent/Tracker.hs b/src/FuncTorrent/Tracker.hs
index e0752e9..125a926 100644
--- a/src/FuncTorrent/Tracker.hs
+++ b/src/FuncTorrent/Tracker.hs
@@ -159,9 +159,9 @@ initialTrackerState sz = do
                   , downloaded = down
                   , left = sz }
 
--- | Deserialize tracker response
-mkTrackerResponse :: BVal -> Either ByteString TrackerResponse
-mkTrackerResponse resp =
+-- | Deserialize HTTP tracker response
+parseTrackerResponse :: BVal -> Either ByteString TrackerResponse
+parseTrackerResponse resp =
     case lookup "failure reason" body of
       Just (Bstr err) -> Left err
       Just _ -> Left "Unknown failure"
@@ -231,7 +231,7 @@ trackerLoop port peerId m st = do
   case Benc.decode resp of
     Left e -> return $ pack (show e)
     Right trackerInfo ->
-      case mkTrackerResponse trackerInfo of
+      case parseTrackerResponse trackerInfo of
         Left e -> return e
         Right tresp -> do
           _ <- threadDelay $ fromIntegral (interval tresp)
diff --git a/src/FuncTorrent/Utils.hs b/src/FuncTorrent/Utils.hs
index b1db8d0..2a27976 100644
--- a/src/FuncTorrent/Utils.hs
+++ b/src/FuncTorrent/Utils.hs
@@ -11,7 +11,7 @@ module FuncTorrent.Utils
 import Prelude hiding (writeFile, take)
 
 import qualified Crypto.Hash.SHA1 as SHA1 (hash)
-import Control.Monad (unless)
+import Control.Exception.Base (IOException, try)
 import Data.ByteString (ByteString, writeFile, hPut, hGet, take)
 import qualified Data.ByteString.Char8 as BC
 import System.IO (withFile, hSeek, IOMode(..), SeekMode(..))
@@ -26,11 +26,14 @@ splitNum n d | n == 0 = []
              | n < d = [n]
              | otherwise = d : splitNum (n - d) d
 
-createDummyFile :: FilePath -> Int -> IO ()
+createDummyFile :: FilePath -> Int -> IO (Either IOException ())
 createDummyFile path size = do
   dfe <- doesFileExist path
-  unless dfe $
-    writeFile path (BC.replicate size '\0')
+  if not dfe
+    then do
+    try $ writeFile path (BC.replicate size '\0')
+    else
+    return $ Right ()
 
 -- write into a file at a specific offet
 writeFileAtOffset :: FilePath -> Integer -> ByteString -> IO ()
-- 
2.45.2