diff options
author | Sam Truzjan <pxqr.sta@gmail.com> | 2013-11-30 11:10:38 +0400 |
---|---|---|
committer | Sam Truzjan <pxqr.sta@gmail.com> | 2013-11-30 11:10:38 +0400 |
commit | 7f54308b57615bc61c0727538af2b5a54366eadb (patch) | |
tree | 8d47fb66163a8e9d114f1debf5711eca45500055 /src/Network/BitTorrent/Tracker/RPC.hs | |
parent | d4ee859973b200d3f81ea56b2e40847ed8c93510 (diff) |
Redesign tracker subsustem
Diffstat (limited to 'src/Network/BitTorrent/Tracker/RPC.hs')
-rw-r--r-- | src/Network/BitTorrent/Tracker/RPC.hs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/Network/BitTorrent/Tracker/RPC.hs b/src/Network/BitTorrent/Tracker/RPC.hs new file mode 100644 index 00000000..c5aaeb03 --- /dev/null +++ b/src/Network/BitTorrent/Tracker/RPC.hs | |||
@@ -0,0 +1,41 @@ | |||
1 | module Network.BitTorrent.Tracker.RPC | ||
2 | ( module Network.BitTorrent.Tracker.RPC.Message | ||
3 | , TrackerRPC (..) | ||
4 | ) where | ||
5 | |||
6 | import Network.BitTorrent.Tracker.RPC.Message | ||
7 | import Network.BitTorrent.Tracker.RPC.HTTP as HTTP | ||
8 | import Network.BitTorrent.Tracker.RPC.UDP as UDP | ||
9 | |||
10 | -- | Set of tracker RPCs. | ||
11 | class Tracker s where | ||
12 | connect :: URI -> IO s | ||
13 | announce :: s -> AnnounceQuery -> IO AnnounceInfo | ||
14 | scrape :: s -> ScrapeQuery -> IO Scrape | ||
15 | |||
16 | instance Tracker HTTP.Tracker where | ||
17 | connect = return . HTTP.Tracker | ||
18 | announce = HTTP.announce | ||
19 | scrape = undefined | ||
20 | |||
21 | instance Tracker UDP.Tracker where | ||
22 | connect = initialTracker | ||
23 | announce = announce | ||
24 | scrape = undefined | ||
25 | |||
26 | data BitTracker = HTTPTr HTTPTracker | ||
27 | | UDPTr UDPTracker | ||
28 | |||
29 | instance Tracker BitTracker where | ||
30 | connect uri @ URI {..} | ||
31 | | uriScheme == "udp:" = UDPTr <$> connect uri | ||
32 | | uriScheme == "http:" = HTTPTr <$> connect uri | ||
33 | | otherwise = throwIO $ userError msg | ||
34 | where | ||
35 | msg = "unknown tracker protocol scheme: " ++ show uriScheme | ||
36 | |||
37 | announce (HTTPTr t) = Tracker.announce t | ||
38 | announce (UDPTr t) = Tracker.announce t | ||
39 | |||
40 | scrape (HTTPTr t) = scrape t | ||
41 | scrape (UDPTr t) = scrape t | ||