diff options
Diffstat (limited to 'src/Network/BitTorrent/Tracker')
-rw-r--r-- | src/Network/BitTorrent/Tracker/Protocol.hs | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/Network/BitTorrent/Tracker/Protocol.hs b/src/Network/BitTorrent/Tracker/Protocol.hs index 0371a187..af48e3e9 100644 --- a/src/Network/BitTorrent/Tracker/Protocol.hs +++ b/src/Network/BitTorrent/Tracker/Protocol.hs | |||
@@ -24,7 +24,7 @@ module Network.BitTorrent.Tracker.Protocol | |||
24 | ( module Network.BitTorrent.Tracker.Scrape | 24 | ( module Network.BitTorrent.Tracker.Scrape |
25 | 25 | ||
26 | , Event(..), TRequest(..), TResponse(..) | 26 | , Event(..), TRequest(..), TResponse(..) |
27 | , sendRequest | 27 | , askTracker |
28 | 28 | ||
29 | -- * Defaults | 29 | -- * Defaults |
30 | , defaultPorts, defaultNumWant | 30 | , defaultPorts, defaultNumWant |
@@ -220,16 +220,21 @@ defaultPorts = [6881..6889] | |||
220 | defaultNumWant :: Int | 220 | defaultNumWant :: Int |
221 | defaultNumWant = 25 | 221 | defaultNumWant = 25 |
222 | 222 | ||
223 | -- | TODO rename to ask for peers | 223 | -- | Send request and receive response from the tracker specified in |
224 | -- announce list. This function throws 'IOException' if it couldn't | ||
225 | -- send request or receive response or decode response. | ||
224 | -- | 226 | -- |
225 | sendRequest :: TRequest -> IO (Result TResponse) | 227 | askTracker :: TRequest -> IO TResponse |
226 | sendRequest req = do | 228 | askTracker req = do |
227 | let r = mkHTTPRequest (encodeRequest req) | 229 | let r = mkHTTPRequest (encodeRequest req) |
228 | |||
229 | rawResp <- simpleHTTP r | ||
230 | respBody <- getResponseBody rawResp | ||
231 | return (decoded respBody) | ||
232 | 230 | ||
231 | rawResp <- simpleHTTP r | ||
232 | respBody <- getResponseBody rawResp | ||
233 | checkResult $ decoded respBody | ||
233 | where | 234 | where |
234 | mkHTTPRequest :: URI -> Request ByteString | 235 | mkHTTPRequest :: URI -> Request ByteString |
235 | mkHTTPRequest uri = Request uri GET [] "" | 236 | mkHTTPRequest uri = Request uri GET [] "" |
237 | |||
238 | checkResult (Left err) = ioError (userError err) | ||
239 | checkResult (Right (Failure err)) = ioError (userError (show err)) | ||
240 | checkResult (Right resp) = return resp | ||