X-Git-Url: https://git.rkrishnan.org/?p=functorrent.git;a=blobdiff_plain;f=src%2FFuncTorrent%2FTracker%2FUdp.hs;h=aaa99472b44c3a9d72f955afd0f35a5e8c05d534;hp=fe4d9e0aeb8dfcaab57ba46bb040eebfd720fa99;hb=272216c101f5f411726898f90355956ab9a105b7;hpb=2ddd7237e3615d4a55460ca86de22a669c90232c diff --git a/src/FuncTorrent/Tracker/Udp.hs b/src/FuncTorrent/Tracker/Udp.hs index fe4d9e0..aaa9947 100644 --- a/src/FuncTorrent/Tracker/Udp.hs +++ b/src/FuncTorrent/Tracker/Udp.hs @@ -39,8 +39,8 @@ import Network.Socket.ByteString (sendTo, recvFrom) import System.Random (randomIO) import System.Timeout (timeout) -import FuncTorrent.Peer (Peer(..)) -import FuncTorrent.Tracker.Types (TrackerEventState(..), TState(..)) +import FuncTorrent.PeerMsgs (Peer(..)) +import FuncTorrent.Tracker.Types (TrackerEventState(..), TState(..), UdpTrackerResponse(..)) import FuncTorrent.Utils (IP, Port, toIP, toPort, getHostname, getPort) import qualified FuncTorrent.FileSystem as FS (MsgChannel, Stats(..), getStats) @@ -171,13 +171,7 @@ announceRequest cid infohash peerId up down left port = do liftIO $ sendRequest h (toStrict pkt) return tidi -data PeerStats = PeerStats { leechers :: Word32 - , seeders :: Word32 - , interval :: Word32 - , peers :: [Peer] - } deriving (Show) - -announceResponse :: Word32 -> ReaderT UDPTrackerHandle IO PeerStats +announceResponse :: Word32 -> ReaderT UDPTrackerHandle IO UdpTrackerResponse announceResponse tid = do h <- ask resp <- liftIO $ recvResponse h @@ -186,10 +180,10 @@ announceResponse tid = do if tidr == tid then do liftIO $ putStrLn "announce succeeded" - return $ PeerStats ls ss interval xs + return $ UdpTrackerResponse ls ss interval xs else - return $ PeerStats 0 0 0 [] - _ -> return $ PeerStats 0 0 0 [] + return $ UdpTrackerResponse 0 0 0 [] + _ -> return $ UdpTrackerResponse 0 0 0 [] getIPPortPairs :: Get [Peer] getIPPortPairs = do @@ -200,7 +194,7 @@ getIPPortPairs = do ip <- toIP <$> getByteString 4 port <- toPort <$> getByteString 2 ipportpairs <- getIPPortPairs - return $ (Peer "" ip port) : ipportpairs + return $ (Peer ip port) : ipportpairs startSession :: String -> Port -> IO UDPTrackerHandle startSession host port = do @@ -216,7 +210,7 @@ closeSession (UDPTrackerHandle s _ _) = close s trackerLoop :: String -> Port -> String -> ByteString -> FS.MsgChannel -> TState -> IO () trackerLoop url sport peerId infohash fschan tstate = forever $ do - st <- fmap readMVar $ FS.getStats fschan + st <- readMVar <$> FS.getStats fschan up <- fmap FS.bytesRead st down <- fmap FS.bytesWritten st handle <- startSession host port