From 7f54308b57615bc61c0727538af2b5a54366eadb Mon Sep 17 00:00:00 2001 From: Sam Truzjan Date: Sat, 30 Nov 2013 11:10:38 +0400 Subject: Redesign tracker subsustem --- src/Network/BitTorrent/Tracker/RPC.hs | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/Network/BitTorrent/Tracker/RPC.hs (limited to 'src/Network/BitTorrent/Tracker/RPC.hs') 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 @@ +module Network.BitTorrent.Tracker.RPC + ( module Network.BitTorrent.Tracker.RPC.Message + , TrackerRPC (..) + ) where + +import Network.BitTorrent.Tracker.RPC.Message +import Network.BitTorrent.Tracker.RPC.HTTP as HTTP +import Network.BitTorrent.Tracker.RPC.UDP as UDP + +-- | Set of tracker RPCs. +class Tracker s where + connect :: URI -> IO s + announce :: s -> AnnounceQuery -> IO AnnounceInfo + scrape :: s -> ScrapeQuery -> IO Scrape + +instance Tracker HTTP.Tracker where + connect = return . HTTP.Tracker + announce = HTTP.announce + scrape = undefined + +instance Tracker UDP.Tracker where + connect = initialTracker + announce = announce + scrape = undefined + +data BitTracker = HTTPTr HTTPTracker + | UDPTr UDPTracker + +instance Tracker BitTracker where + connect uri @ URI {..} + | uriScheme == "udp:" = UDPTr <$> connect uri + | uriScheme == "http:" = HTTPTr <$> connect uri + | otherwise = throwIO $ userError msg + where + msg = "unknown tracker protocol scheme: " ++ show uriScheme + + announce (HTTPTr t) = Tracker.announce t + announce (UDPTr t) = Tracker.announce t + + scrape (HTTPTr t) = scrape t + scrape (UDPTr t) = scrape t -- cgit v1.2.3