rename tracker response function, Utils, catch exceptions.
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 6 Dec 2015 09:09:42 +0000 (14:39 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 6 Dec 2015 09:09:42 +0000 (14:39 +0530)
src/FuncTorrent/Tracker.hs
src/FuncTorrent/Utils.hs

index e0752e9e0a4f196a11cb289783e72ea8f7e2dc60..125a9269f9b9137fc7e2b25273a3ae4de44d1dd9 100644 (file)
@@ -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)
index b1db8d0defcbf9d6b1c9f46ec520448369b90b19..2a2797626527c8bdc7f3f983361bed31f127e129 100644 (file)
@@ -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 ()