diff options
Diffstat (limited to 'src/Network/BitTorrent/Tracker/RPC/Message.hs')
-rw-r--r-- | src/Network/BitTorrent/Tracker/RPC/Message.hs | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/src/Network/BitTorrent/Tracker/RPC/Message.hs b/src/Network/BitTorrent/Tracker/RPC/Message.hs index cec68169..cefe96d5 100644 --- a/src/Network/BitTorrent/Tracker/RPC/Message.hs +++ b/src/Network/BitTorrent/Tracker/RPC/Message.hs | |||
@@ -32,10 +32,18 @@ module Network.BitTorrent.Tracker.RPC.Message | |||
32 | , ParamParseFailure | 32 | , ParamParseFailure |
33 | , parseAnnounceQuery | 33 | , parseAnnounceQuery |
34 | 34 | ||
35 | -- ** Request | ||
36 | , AnnounceQueryExt (..) | ||
37 | , AnnounceRequest (..) | ||
38 | , parseAnnounceRequest | ||
39 | , renderAnnounceRequest | ||
40 | |||
35 | -- ** Info | 41 | -- ** Info |
36 | , PeerList (..) | 42 | , PeerList (..) |
37 | , AnnounceInfo(..) | 43 | , AnnounceInfo(..) |
38 | , defaultNumWant | 44 | , defaultNumWant |
45 | , defaultMaxNumWant | ||
46 | , defaultReannounceInterval | ||
39 | , parseFailureStatus | 47 | , parseFailureStatus |
40 | 48 | ||
41 | -- * Scrape | 49 | -- * Scrape |
@@ -47,6 +55,9 @@ module Network.BitTorrent.Tracker.RPC.Message | |||
47 | -- ** Info | 55 | -- ** Info |
48 | , ScrapeEntry (..) | 56 | , ScrapeEntry (..) |
49 | , ScrapeInfo | 57 | , ScrapeInfo |
58 | |||
59 | -- ** Extra | ||
60 | , queryToSimpleQuery | ||
50 | ) | 61 | ) |
51 | where | 62 | where |
52 | 63 | ||
@@ -223,15 +234,15 @@ instance QueryLike AnnounceQuery where | |||
223 | , ("event" , toQueryValue reqEvent) | 234 | , ("event" , toQueryValue reqEvent) |
224 | ] | 235 | ] |
225 | 236 | ||
226 | filterMaybes :: [(a, Maybe b)] -> [(a, b)] | 237 | queryToSimpleQuery :: Query -> SimpleQuery |
227 | filterMaybes = catMaybes . L.map f | 238 | queryToSimpleQuery = catMaybes . L.map f |
228 | where | 239 | where |
229 | f (_, Nothing) = Nothing | 240 | f (_, Nothing) = Nothing |
230 | f (a, Just b ) = Just (a, b) | 241 | f (a, Just b ) = Just (a, b) |
231 | 242 | ||
232 | -- | Encode announce query and add it to the base tracker URL. | 243 | -- | Encode announce query and add it to the base tracker URL. |
233 | renderAnnounceQuery :: AnnounceQuery -> SimpleQuery | 244 | renderAnnounceQuery :: AnnounceQuery -> SimpleQuery |
234 | renderAnnounceQuery = filterMaybes . toQuery | 245 | renderAnnounceQuery = queryToSimpleQuery . toQuery |
235 | 246 | ||
236 | data QueryParam | 247 | data QueryParam |
237 | = ParamInfoHash | 248 | = ParamInfoHash |
@@ -320,8 +331,27 @@ parseAnnounceQuery params = AnnounceQuery | |||
320 | <*> optParam ParamNumWant params | 331 | <*> optParam ParamNumWant params |
321 | <*> optParam ParamEvent params | 332 | <*> optParam ParamEvent params |
322 | 333 | ||
323 | -- TODO add extension datatype | 334 | data AnnounceQueryExt = AnnounceQueryExt |
324 | --type AnnounceRequest = () | 335 | { extCompact :: Maybe Bool -- | "compact" param |
336 | , extNoPeerId :: Maybe Bool -- | "no_peer_id" param | ||
337 | } deriving (Show, Eq, Typeable) | ||
338 | |||
339 | parseAnnounceQueryExt :: SimpleQuery -> AnnounceQueryExt | ||
340 | parseAnnounceQueryExt = undefined | ||
341 | |||
342 | renderAnnounceQueryExt :: AnnounceQueryExt -> SimpleQuery | ||
343 | renderAnnounceQueryExt = undefined | ||
344 | |||
345 | data AnnounceRequest = AnnounceRequest | ||
346 | { announceQuery :: AnnounceQuery | ||
347 | , announceAdvises :: AnnounceQueryExt | ||
348 | } deriving (Show, Eq, Typeable) | ||
349 | |||
350 | parseAnnounceRequest :: SimpleQuery -> Either ParamParseFailure AnnounceRequest | ||
351 | parseAnnounceRequest = undefined | ||
352 | |||
353 | renderAnnounceRequest :: AnnounceRequest -> SimpleQuery | ||
354 | renderAnnounceRequest = undefined | ||
325 | 355 | ||
326 | {----------------------------------------------------------------------- | 356 | {----------------------------------------------------------------------- |
327 | -- Announce response | 357 | -- Announce response |
@@ -449,6 +479,13 @@ instance Serialize AnnounceInfo where | |||
449 | defaultNumWant :: Int | 479 | defaultNumWant :: Int |
450 | defaultNumWant = 50 | 480 | defaultNumWant = 50 |
451 | 481 | ||
482 | defaultMaxNumWant :: Int | ||
483 | defaultMaxNumWant = 200 | ||
484 | |||
485 | defaultReannounceInterval :: Int | ||
486 | defaultReannounceInterval = 30 * 60 | ||
487 | |||
488 | |||
452 | missingOffset :: Int | 489 | missingOffset :: Int |
453 | missingOffset = 101 | 490 | missingOffset = 101 |
454 | 491 | ||
@@ -500,7 +537,7 @@ isScrapeParam :: BS.ByteString -> Bool | |||
500 | isScrapeParam = (==) scrapeParam | 537 | isScrapeParam = (==) scrapeParam |
501 | 538 | ||
502 | renderScrapeQuery :: ScrapeQuery -> SimpleQuery | 539 | renderScrapeQuery :: ScrapeQuery -> SimpleQuery |
503 | renderScrapeQuery = filterMaybes . L.map mkPair | 540 | renderScrapeQuery = queryToSimpleQuery . L.map mkPair |
504 | where | 541 | where |
505 | mkPair ih = (scrapeParam, toQueryValue ih) | 542 | mkPair ih = (scrapeParam, toQueryValue ih) |
506 | 543 | ||