From 829ff32e8b3fef3c3b0e8461cda3613365ca91cb Mon Sep 17 00:00:00 2001
From: Jaseem Abid <jaseemabid@gmail.com>
Date: Thu, 23 Apr 2015 20:56:02 +0530
Subject: [PATCH] Move network code to own file

---
 functorrent.cabal          |  1 +
 src/FuncTorrent/Network.hs | 25 +++++++++++++++++++++++++
 src/FuncTorrent/Tracker.hs | 23 ++++-------------------
 3 files changed, 30 insertions(+), 19 deletions(-)
 create mode 100644 src/FuncTorrent/Network.hs

diff --git a/functorrent.cabal b/functorrent.cabal
index c3492db..6bfb1c8 100644
--- a/functorrent.cabal
+++ b/functorrent.cabal
@@ -20,6 +20,7 @@ library
                        FuncTorrent.Bencode,
                        FuncTorrent.Logger,
                        FuncTorrent.Metainfo,
+                       FuncTorrent.Network
                        FuncTorrent.Peer,
                        FuncTorrent.Tracker
 
diff --git a/src/FuncTorrent/Network.hs b/src/FuncTorrent/Network.hs
new file mode 100644
index 0000000..eac69c9
--- /dev/null
+++ b/src/FuncTorrent/Network.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE OverloadedStrings #-}
+module FuncTorrent.Network
+    (
+     get,
+     mkParams
+    ) where
+
+import Prelude hiding (concat)
+
+import Data.ByteString (ByteString)
+import Data.ByteString.Char8 as BC (pack, unpack, concat, intercalate)
+import Network.HTTP (simpleHTTP, defaultGETRequest_, getResponseBody)
+import Network.URI (parseURI)
+
+-- | Make a query string from a alist of k, v
+-- TODO: Url encode each argument
+mkParams :: [(String, ByteString)] -> ByteString
+mkParams params = BC.intercalate "&" [concat [pack f, "=", s] | (f,s) <- params]
+
+get :: String -> [(String, ByteString)] -> IO ByteString
+get url args = simpleHTTP (defaultGETRequest_ url') >>= getResponseBody
+    where url' = case parseURI $ unpack $ concat [pack url, "?", qstr] of
+                   Just x -> x
+                   _ -> error "Bad tracker URL"
+          qstr = mkParams args
diff --git a/src/FuncTorrent/Tracker.hs b/src/FuncTorrent/Tracker.hs
index 749f75d..07bf7f7 100644
--- a/src/FuncTorrent/Tracker.hs
+++ b/src/FuncTorrent/Tracker.hs
@@ -3,28 +3,25 @@ module FuncTorrent.Tracker
     (TrackerResponse(..),
      connect,
      mkArgs,
-     mkParams,
      mkTrackerResponse,
      urlEncodeHash
     ) where
 
-import Prelude hiding (lookup, concat, replicate, splitAt)
+import Prelude hiding (lookup, splitAt)
 
 import Data.ByteString (ByteString)
-import Data.ByteString.Char8 as BC (pack, unpack, splitAt, concat, intercalate)
+import Data.ByteString.Char8 as BC (pack, unpack, splitAt)
 import Data.Char (chr)
 import Data.List (intercalate)
 import Data.Map as M (lookup)
-import Network.HTTP (simpleHTTP, defaultGETRequest_, getResponseBody)
 import Network.HTTP.Base (urlEncode)
-import Network.URI (parseURI)
 import qualified Data.ByteString.Base16 as B16 (encode)
 
 import FuncTorrent.Bencode (BVal(..))
+import FuncTorrent.Metainfo (Info(..), Metainfo(..))
+import FuncTorrent.Network (get)
 import FuncTorrent.Peer (Peer(..))
 import FuncTorrent.Utils (splitN)
-import FuncTorrent.Metainfo (Info(..), Metainfo(..))
-
 
 -- | Tracker response
 data TrackerResponse = TrackerResponse {
@@ -97,15 +94,3 @@ mkArgs m peer_id = [("info_hash", pack . urlEncodeHash . B16.encode . infoHash $
                     ("left", pack . show . lengthInBytes $ info m),
                     ("compact", "1"),
                     ("event", "started")]
-
--- | Make a query string from a alist of k, v
--- TODO: Url encode each argument
-mkParams :: [(String, ByteString)] -> ByteString
-mkParams params = BC.intercalate "&" [concat [pack f, "=", s] | (f,s) <- params]
-
-get :: String -> [(String, ByteString)] -> IO ByteString
-get url args = simpleHTTP (defaultGETRequest_ url') >>= getResponseBody
-    where url' = case parseURI $ unpack $ concat [pack url, "?", qstr] of
-                   Just x -> x
-                   _ -> error "Bad tracker URL"
-          qstr = mkParams args
-- 
2.45.2