summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent/Tracker/RPC/Message.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/BitTorrent/Tracker/RPC/Message.hs')
-rw-r--r--src/Network/BitTorrent/Tracker/RPC/Message.hs52
1 files changed, 21 insertions, 31 deletions
diff --git a/src/Network/BitTorrent/Tracker/RPC/Message.hs b/src/Network/BitTorrent/Tracker/RPC/Message.hs
index a0691f37..74a3842f 100644
--- a/src/Network/BitTorrent/Tracker/RPC/Message.hs
+++ b/src/Network/BitTorrent/Tracker/RPC/Message.hs
@@ -40,8 +40,8 @@ module Network.BitTorrent.Tracker.RPC.Message
40 40
41 -- * Scrape 41 -- * Scrape
42 , ScrapeQuery 42 , ScrapeQuery
43 , ScrapeInfo(..) 43 , ScrapeEntry (..)
44 , Scrape 44 , ScrapeInfo
45 ) 45 )
46 where 46 where
47 47
@@ -56,7 +56,6 @@ import Data.ByteString.Char8 as BC
56import Data.Char as Char 56import Data.Char as Char
57import Data.Convertible 57import Data.Convertible
58import Data.List as L 58import Data.List as L
59import Data.Map as M
60import Data.Maybe 59import Data.Maybe
61import Data.Serialize as S hiding (Result) 60import Data.Serialize as S hiding (Result)
62import Data.Text (Text) 61import Data.Text (Text)
@@ -482,9 +481,8 @@ parseFailureStatus = mkStatus <$> parseFailureCode <*> parseFailureMessage
482 481
483type ScrapeQuery = [InfoHash] 482type ScrapeQuery = [InfoHash]
484 483
485-- TODO rename to ScrapeEntry
486-- | Overall information about particular torrent. 484-- | Overall information about particular torrent.
487data ScrapeInfo = ScrapeInfo { 485data ScrapeEntry = ScrapeEntry {
488 -- | Number of seeders - peers with the entire file. 486 -- | Number of seeders - peers with the entire file.
489 siComplete :: {-# UNPACK #-} !Int 487 siComplete :: {-# UNPACK #-} !Int
490 488
@@ -499,43 +497,35 @@ data ScrapeInfo = ScrapeInfo {
499 , siName :: !(Maybe Text) 497 , siName :: !(Maybe Text)
500 } deriving (Show, Eq, Typeable) 498 } deriving (Show, Eq, Typeable)
501 499
502$(deriveJSON (L.map toLower . L.dropWhile isLower) ''ScrapeInfo) 500$(deriveJSON (L.map toLower . L.dropWhile isLower) ''ScrapeEntry)
503
504-- TODO hash map
505-- TODO rename to ScrapeInfo
506-- | Scrape info about a set of torrents.
507type Scrape = Map InfoHash ScrapeInfo
508 501
509-- | HTTP tracker protocol compatible encoding. 502-- | HTTP tracker protocol compatible encoding.
510instance BEncode ScrapeInfo where 503instance BEncode ScrapeEntry where
511 toBEncode ScrapeInfo {..} = toDict $ 504 toBEncode ScrapeEntry {..} = toDict $
512 "complete" .=! siComplete 505 "complete" .=! siComplete
513 .: "downloaded" .=! siDownloaded 506 .: "downloaded" .=! siDownloaded
514 .: "incomplete" .=! siIncomplete 507 .: "incomplete" .=! siIncomplete
515 .: "name" .=? siName 508 .: "name" .=? siName
516 .: endDict 509 .: endDict
517 510
518 fromBEncode = fromDict $ do 511 fromBEncode = fromDict $ ScrapeEntry
519 ScrapeInfo <$>! "complete" 512 <$>! "complete"
520 <*>! "downloaded" 513 <*>! "downloaded"
521 <*>! "incomplete" 514 <*>! "incomplete"
522 <*>? "name" 515 <*>? "name"
523 516
524-- | UDP tracker protocol compatible encoding. 517-- | UDP tracker protocol compatible encoding.
525instance Serialize ScrapeInfo where 518instance Serialize ScrapeEntry where
526 put ScrapeInfo {..} = do 519 put ScrapeEntry {..} = do
527 putWord32be $ fromIntegral siComplete 520 putWord32be $ fromIntegral siComplete
528 putWord32be $ fromIntegral siDownloaded 521 putWord32be $ fromIntegral siDownloaded
529 putWord32be $ fromIntegral siIncomplete 522 putWord32be $ fromIntegral siIncomplete
530 523
531 get = do 524 get = ScrapeEntry
532 seeders <- getWord32be 525 <$> (fromIntegral <$> getWord32be)
533 downTimes <- getWord32be 526 <*> (fromIntegral <$> getWord32be)
534 leechers <- getWord32be 527 <*> (fromIntegral <$> getWord32be)
535 528 <*> pure Nothing
536 return $ ScrapeInfo { 529
537 siComplete = fromIntegral seeders 530-- | Scrape info about a set of torrents.
538 , siDownloaded = fromIntegral downTimes 531type ScrapeInfo = [(InfoHash, ScrapeEntry)]
539 , siIncomplete = fromIntegral leechers
540 , siName = Nothing
541 }