summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent/Tracker/RPC/Message.hs
diff options
context:
space:
mode:
authorSam Truzjan <pxqr.sta@gmail.com>2013-12-02 00:17:05 +0400
committerSam Truzjan <pxqr.sta@gmail.com>2013-12-02 00:17:05 +0400
commit10fcabb96e9f5b2d25cdfae22973cbcb99282139 (patch)
tree94ceeddd0c4f6998317f921feccddc1d7498ed7e /src/Network/BitTorrent/Tracker/RPC/Message.hs
parent2abd00f548b7b9565b2a6bc1bed793d2a6f8c9cd (diff)
Add http tracker server-side skeleton
Diffstat (limited to 'src/Network/BitTorrent/Tracker/RPC/Message.hs')
-rw-r--r--src/Network/BitTorrent/Tracker/RPC/Message.hs49
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
226filterMaybes :: [(a, Maybe b)] -> [(a, b)] 237queryToSimpleQuery :: Query -> SimpleQuery
227filterMaybes = catMaybes . L.map f 238queryToSimpleQuery = 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.
233renderAnnounceQuery :: AnnounceQuery -> SimpleQuery 244renderAnnounceQuery :: AnnounceQuery -> SimpleQuery
234renderAnnounceQuery = filterMaybes . toQuery 245renderAnnounceQuery = queryToSimpleQuery . toQuery
235 246
236data QueryParam 247data 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 334data 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
339parseAnnounceQueryExt :: SimpleQuery -> AnnounceQueryExt
340parseAnnounceQueryExt = undefined
341
342renderAnnounceQueryExt :: AnnounceQueryExt -> SimpleQuery
343renderAnnounceQueryExt = undefined
344
345data AnnounceRequest = AnnounceRequest
346 { announceQuery :: AnnounceQuery
347 , announceAdvises :: AnnounceQueryExt
348 } deriving (Show, Eq, Typeable)
349
350parseAnnounceRequest :: SimpleQuery -> Either ParamParseFailure AnnounceRequest
351parseAnnounceRequest = undefined
352
353renderAnnounceRequest :: AnnounceRequest -> SimpleQuery
354renderAnnounceRequest = undefined
325 355
326{----------------------------------------------------------------------- 356{-----------------------------------------------------------------------
327-- Announce response 357-- Announce response
@@ -449,6 +479,13 @@ instance Serialize AnnounceInfo where
449defaultNumWant :: Int 479defaultNumWant :: Int
450defaultNumWant = 50 480defaultNumWant = 50
451 481
482defaultMaxNumWant :: Int
483defaultMaxNumWant = 200
484
485defaultReannounceInterval :: Int
486defaultReannounceInterval = 30 * 60
487
488
452missingOffset :: Int 489missingOffset :: Int
453missingOffset = 101 490missingOffset = 101
454 491
@@ -500,7 +537,7 @@ isScrapeParam :: BS.ByteString -> Bool
500isScrapeParam = (==) scrapeParam 537isScrapeParam = (==) scrapeParam
501 538
502renderScrapeQuery :: ScrapeQuery -> SimpleQuery 539renderScrapeQuery :: ScrapeQuery -> SimpleQuery
503renderScrapeQuery = filterMaybes . L.map mkPair 540renderScrapeQuery = queryToSimpleQuery . L.map mkPair
504 where 541 where
505 mkPair ih = (scrapeParam, toQueryValue ih) 542 mkPair ih = (scrapeParam, toQueryValue ih)
506 543