]> git.rkrishnan.org Git - functorrent.git/blob - src/FuncTorrent/Network.hs
1a569a5737038bfa9437f711d61d51f90de8e290
[functorrent.git] / src / FuncTorrent / Network.hs
1 {-# LANGUAGE OverloadedStrings #-}
2 module FuncTorrent.Network
3     (
4      httpget,
5      mkParams
6     ) where
7
8 import Prelude hiding (concat)
9
10 import Data.ByteString (ByteString)
11 import Data.ByteString.Char8 as BC (pack, unpack, concat, intercalate)
12 import Network.HTTP (simpleHTTP, defaultGETRequest_, getResponseBody)
13 import Network.URI (parseURI)
14
15 -- | Make a query string from a alist of k, v
16 -- TODO: Url encode each argument
17 mkParams :: [(String, ByteString)] -> ByteString
18 mkParams params = BC.intercalate "&" [concat [pack f, "=", s] | (f,s) <- params]
19
20 httpget :: String -> [(String, ByteString)] -> IO ByteString
21 httpget url args = simpleHTTP (defaultGETRequest_ url') >>= getResponseBody
22     where url' = case parseURI $ unpack $ concat [pack url, "?", qstr] of
23                    Just x -> x
24                    _ -> error "Bad tracker URL"
25           qstr = mkParams args