refactoring
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 16 Feb 2015 04:43:22 +0000 (10:13 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 16 Feb 2015 04:43:22 +0000 (10:13 +0530)
src/Main.hs
src/Tracker.hs
src/Utils.hs [new file with mode: 0644]

index f08c29532715dbe91e44de3f4ea6259298807d8a..f5a0a50318be8799ed69a9567e12c0b32bcaa1d4 100644 (file)
@@ -5,11 +5,11 @@ import qualified Data.ByteString.Char8 as BC
 import qualified Bencode as Benc
 import qualified Metainfo as MInfo
 import qualified Tracker as T
+import qualified Text.ParserCombinators.Parsec as Parsec
+import Data.Functor
 
-import Text.ParserCombinators.Parsec
-
-printError :: ParseError -> IO ()
-printError e = putStrLn "parse error"
+printError :: Parsec.ParseError -> IO ()
+printError e = putStrLn $ "parse error: " ++ show e
 
 genPeerId :: String
 genPeerId = "-HS0001-20150215"
@@ -22,10 +22,7 @@ main = do
    Right d -> case (MInfo.mkMetaInfo d) of
                Nothing -> putStrLn "parse error"
                Just m -> do
-                 let (Benc.Bdict d') = d
---                 putStrLn (show m)
---                 putStrLn (T.urlEncode (T.infoHash d'))
-                 do body <- T.connect (MInfo.announce m) (T.prepareRequest d genPeerId)
-                    putStrLn body
+                 body <- (Benc.decode . BC.pack) <$> T.connect (MInfo.announce m) (T.prepareRequest d genPeerId)
+                 putStrLn (show body)
    Left e -> printError e
   putStrLn "done"
index 7d5525f4058d23d183deb024c56463bd543b0f3e..70e15637d96b36b343e54ea21d30655cc2e7432f 100644 (file)
@@ -5,24 +5,21 @@ import qualified Data.Map as M
 import qualified Data.List as List
 import qualified Network.HTTP as HTTP
 import qualified Bencode as Benc
-import qualified Crypto.Hash as H
 import qualified Crypto.Hash.SHA1 as SHA1
 import qualified Data.ByteString.Base16 as B16
+import qualified Utils as U
 import Data.Char
 -- import Network.HTTP
 
 type Url = String
 
-splitN :: Int -> BC.ByteString -> [BC.ByteString]
-splitN n bs | BC.null bs = []
-            | otherwise = (BC.take n bs) : splitN n (BC.drop n bs)
 
 -- | urlEncode
 --
 -- >>> urlEncode $ BC.pack "123456789abcdef123456789abcdef123456789a"
 -- "%124Vx%9a%bc%de%f1%23Eg%89%ab%cd%ef%124Vx%9a"
 urlEncode :: BC.ByteString -> String
-urlEncode bs = concatMap (encode . BC.unpack) (splitN 2 bs)
+urlEncode bs = concatMap (encode . BC.unpack) (U.splitN 2 bs)
   where encode b@(c1 : c2 : []) = let c =  chr (read ("0x" ++ b))
                                   in
                                    escape c c1 c2
diff --git a/src/Utils.hs b/src/Utils.hs
new file mode 100644 (file)
index 0000000..4a2fc6a
--- /dev/null
@@ -0,0 +1,7 @@
+module Utils where
+
+import qualified Data.ByteString.Char8 as BC
+
+splitN :: Int -> BC.ByteString -> [BC.ByteString]
+splitN n bs | BC.null bs = []
+            | otherwise = (BC.take n bs) : splitN n (BC.drop n bs)