diff options
Diffstat (limited to 'src/Network/BitTorrent/Tracker/Protocol.hs')
-rw-r--r-- | src/Network/BitTorrent/Tracker/Protocol.hs | 17 |
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 |
23 | module Network.BitTorrent.Tracker.Protocol | 23 | module 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] | |||
217 | defaultNumWant :: Int | 217 | defaultNumWant :: Int |
218 | defaultNumWant = 25 | 218 | defaultNumWant = 25 |
219 | 219 | ||
220 | mkHTTPRequest :: URI -> Request ByteString | ||
221 | mkHTTPRequest 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'. | ||
245 | leaveTracker :: TRequest -> IO () | ||
246 | leaveTracker req = do | ||
247 | let r = mkHTTPRequest (encodeRequest req) | ||
248 | |||
249 | rawResp <- simpleHTTP r | ||
250 | respBody <- getResponseBody rawResp | ||
251 | return () | ||