summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent/Tracker/Protocol.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/BitTorrent/Tracker/Protocol.hs')
-rw-r--r--src/Network/BitTorrent/Tracker/Protocol.hs17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/Network/BitTorrent/Tracker/Protocol.hs b/src/Network/BitTorrent/Tracker/Protocol.hs
index 13127e7c..efc709e2 100644
--- a/src/Network/BitTorrent/Tracker/Protocol.hs
+++ b/src/Network/BitTorrent/Tracker/Protocol.hs
@@ -22,7 +22,7 @@
22-- TODO: add "compact" field to TRequest 22-- TODO: add "compact" field to TRequest
23module Network.BitTorrent.Tracker.Protocol 23module Network.BitTorrent.Tracker.Protocol
24 ( Event(..), TRequest(..), TResponse(..) 24 ( Event(..), TRequest(..), TResponse(..)
25 , askTracker 25 , askTracker, leaveTracker
26 26
27 -- * Defaults 27 -- * Defaults
28 , defaultPorts, defaultNumWant 28 , defaultPorts, defaultNumWant
@@ -217,6 +217,9 @@ defaultPorts = [6881..6889]
217defaultNumWant :: Int 217defaultNumWant :: Int
218defaultNumWant = 25 218defaultNumWant = 25
219 219
220mkHTTPRequest :: URI -> Request ByteString
221mkHTTPRequest uri = Request uri GET [] ""
222
220-- | Send request and receive response from the tracker specified in 223-- | Send request and receive response from the tracker specified in
221-- announce list. This function throws 'IOException' if it couldn't 224-- announce list. This function throws 'IOException' if it couldn't
222-- send request or receive response or decode response. 225-- send request or receive response or decode response.
@@ -230,11 +233,19 @@ askTracker req = do
230 print $ respBody 233 print $ respBody
231 checkResult $ decoded respBody 234 checkResult $ decoded respBody
232 where 235 where
233 mkHTTPRequest :: URI -> Request ByteString
234 mkHTTPRequest uri = Request uri GET [] ""
235 236
236 checkResult (Left err) 237 checkResult (Left err)
237 = ioError $ userError $ err ++ " in tracker response" 238 = ioError $ userError $ err ++ " in tracker response"
238 checkResult (Right (Failure err)) 239 checkResult (Right (Failure err))
239 = ioError $ userError $ show err ++ " in tracker response" 240 = ioError $ userError $ show err ++ " in tracker response"
240 checkResult (Right resp) = return resp 241 checkResult (Right resp) = return resp
242
243-- | The same as the 'askTracker' but ignore response. Used in
244-- conjunction with 'Stopped'.
245leaveTracker :: TRequest -> IO ()
246leaveTracker req = do
247 let r = mkHTTPRequest (encodeRequest req)
248
249 rawResp <- simpleHTTP r
250 respBody <- getResponseBody rawResp
251 return ()