]> git.rkrishnan.org Git - functorrent.git/commitdiff
refactor: remove peerid from Peer datatype
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 19 Jun 2016 06:56:55 +0000 (12:26 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 19 Jun 2016 06:56:55 +0000 (12:26 +0530)
src/FuncTorrent/Peer.hs
src/FuncTorrent/PeerMsgs.hs
src/FuncTorrent/Server.hs
src/FuncTorrent/Tracker.hs
src/FuncTorrent/Tracker/Http.hs
src/FuncTorrent/Tracker/Types.hs
src/FuncTorrent/Tracker/Udp.hs

index 5d987e815bcac57b36f1d3be85d10ead30422256..63aaa5afe9ede340862383318370616a8c9813e8 100644 (file)
@@ -20,8 +20,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 
 module FuncTorrent.Peer
 {-# LANGUAGE OverloadedStrings #-}
 
 module FuncTorrent.Peer
-    (Peer(..),
-     PieceMap,
+    (PieceMap,
      handlePeerMsgs
     ) where
 
      handlePeerMsgs
     ) where
 
@@ -53,7 +52,7 @@ havePiece pm index =
   dlstate (pm ! index) == Have
 
 connectToPeer :: Peer -> IO Handle
   dlstate (pm ! index) == Have
 
 connectToPeer :: Peer -> IO Handle
-connectToPeer (Peer ip port) = do
+connectToPeer (Peer ip port) = do
   h <- connectTo ip (PortNumber (fromIntegral port))
   hSetBuffering h LineBuffering
   return h
   h <- connectTo ip (PortNumber (fromIntegral port))
   hSetBuffering h LineBuffering
   return h
index cfefce1aaaada054fac4d6bbcabc9895f2f41429..ff3b43579906c6951378258fbfc0b8bea456e80a 100644 (file)
@@ -44,8 +44,8 @@ import Data.Binary.Get (getWord32be, getWord16be, getWord8, runGet)
 
 import FuncTorrent.Utils (toIP, toPort)
 
 
 import FuncTorrent.Utils (toIP, toPort)
 
--- | Peer is a PeerID, IP address, port tuple
-data Peer = Peer ID IP Port
+-- | Peer is a IP address, port tuple
+data Peer = Peer IP Port
           deriving (Show, Eq)
 
 type ID = String
           deriving (Show, Eq)
 
 type ID = String
@@ -148,5 +148,5 @@ bsToInt :: ByteString -> Int
 bsToInt x = fromIntegral (runGet getWord32be (fromChunks (return x)))
 
 makePeer :: ByteString -> Peer
 bsToInt x = fromIntegral (runGet getWord32be (fromChunks (return x)))
 
 makePeer :: ByteString -> Peer
-makePeer peer = Peer "" (toIP ip') (toPort port')
+makePeer peer = Peer (toIP ip') (toPort port')
   where (ip', port') = splitAt 4 peer
   where (ip', port') = splitAt 4 peer
index 4c3ab948dbe6004d622c018fe23819f21bba6d06..3827aa2bc35673110f379901ac139090e2fd3bcf 100644 (file)
@@ -27,7 +27,8 @@ import Network (withSocketsDo, listenOn, accept, Socket, PortID ( PortNumber ))
 import System.IO (hSetBuffering, BufferMode ( NoBuffering ))
 
 import FuncTorrent.Metainfo (Metainfo)
 import System.IO (hSetBuffering, BufferMode ( NoBuffering ))
 
 import FuncTorrent.Metainfo (Metainfo)
-import FuncTorrent.Peer (handlePeerMsgs, Peer(..), PieceMap)
+import FuncTorrent.Peer (handlePeerMsgs, PieceMap)
+import FuncTorrent.PeerMsgs (Peer(..))
 import qualified FuncTorrent.FileSystem as FS (MsgChannel)
 
 -- server is listening on any port from 6881 - 6889
 import qualified FuncTorrent.FileSystem as FS (MsgChannel)
 
 -- server is listening on any port from 6881 - 6889
@@ -41,6 +42,6 @@ start = withSocketsDo $ do
 run :: Socket -> String -> Metainfo -> PieceMap -> FS.MsgChannel -> IO ()
 run listenSock peerid m pieceMap c = forever $ do
   (handle, ip, port) <- accept listenSock
 run :: Socket -> String -> Metainfo -> PieceMap -> FS.MsgChannel -> IO ()
 run listenSock peerid m pieceMap c = forever $ do
   (handle, ip, port) <- accept listenSock
-  let peer = Peer "" ip (fromIntegral port)
+  let peer = Peer ip (fromIntegral port)
   hSetBuffering handle NoBuffering
   forkIO $ handlePeerMsgs peer peerid m pieceMap False c
   hSetBuffering handle NoBuffering
   forkIO $ handlePeerMsgs peer peerid m pieceMap False c
index 8f6a5cc379dc5fc46a45c395899bab6f985e692a..8090feb99ea868eb328dc1811332b550984e277c 100644 (file)
@@ -38,7 +38,7 @@ import qualified FuncTorrent.Tracker.Udp as UT (trackerLoop)
 import FuncTorrent.Tracker.Types (TState(..), TrackerEventState(..), TrackerProtocol(..), TrackerMsg(..))
 import FuncTorrent.Utils (Port, toPort, getHostname)
 import qualified FuncTorrent.FileSystem as FS (MsgChannel)
 import FuncTorrent.Tracker.Types (TState(..), TrackerEventState(..), TrackerProtocol(..), TrackerMsg(..))
 import FuncTorrent.Utils (Port, toPort, getHostname)
 import qualified FuncTorrent.FileSystem as FS (MsgChannel)
-import FuncTorrent.Peer (Peer)
+import FuncTorrent.PeerMsgs (Peer)
 
 type MsgChannel = Chan TrackerMsg
 
 
 type MsgChannel = Chan TrackerMsg
 
index f911b2f7ad1a3c4e67682b4ba6a24cd9b076544a..9edf3fca6691149ed218f012df2a5784b826ef02 100644 (file)
@@ -23,16 +23,15 @@ module FuncTorrent.Tracker.Http
        (trackerLoop
        ) where
 
        (trackerLoop
        ) where
 
-import Prelude hiding (lookup, splitAt)
+import Prelude hiding (lookup)
 
 import Control.Concurrent (threadDelay)
 import Control.Concurrent.MVar (readMVar, putMVar, isEmptyMVar, swapMVar)
 import Control.Monad (forever, void)
 import qualified Data.ByteString.Base16 as B16 (encode)
 import Data.ByteString (ByteString)
 
 import Control.Concurrent (threadDelay)
 import Control.Concurrent.MVar (readMVar, putMVar, isEmptyMVar, swapMVar)
 import Control.Monad (forever, void)
 import qualified Data.ByteString.Base16 as B16 (encode)
 import Data.ByteString (ByteString)
-import Data.ByteString.Char8 as BC (pack, unpack, splitAt)
+import Data.ByteString.Char8 as BC (pack, unpack)
 import Data.Char (chr)
 import Data.Char (chr)
-import Data.List (intercalate)
 import Data.Map as M (lookup)
 import Network (PortNumber)
 import Network.HTTP.Base (urlEncode)
 import Data.Map as M (lookup)
 import Network (PortNumber)
 import Network.HTTP.Base (urlEncode)
@@ -41,7 +40,7 @@ import qualified FuncTorrent.Bencode as Benc
 import FuncTorrent.Bencode (BVal(..))
 import qualified FuncTorrent.FileSystem as FS (MsgChannel, Stats(..), getStats)
 import FuncTorrent.Network (sendGetRequest)
 import FuncTorrent.Bencode (BVal(..))
 import qualified FuncTorrent.FileSystem as FS (MsgChannel, Stats(..), getStats)
 import FuncTorrent.Network (sendGetRequest)
-import FuncTorrent.PeerMsgs (Peer(..), makePeer)
+import FuncTorrent.PeerMsgs (makePeer)
 import FuncTorrent.Utils (splitN, IP, Port)
 import FuncTorrent.Tracker.Types(TState(..), TrackerResponse(..))
 
 import FuncTorrent.Utils (splitN, IP, Port)
 import FuncTorrent.Tracker.Types(TState(..), TrackerResponse(..))
 
@@ -75,10 +74,9 @@ mkArgs port peer_id up down left' infoHash =
 
 trackerLoop :: String -> PortNumber -> String -> ByteString -> FS.MsgChannel -> TState -> IO ()
 trackerLoop url sport peerId infohash fschan tstate = forever $ do
 
 trackerLoop :: String -> PortNumber -> String -> ByteString -> FS.MsgChannel -> TState -> IO ()
 trackerLoop url sport peerId infohash fschan tstate = forever $ do
-  st' <- FS.getStats fschan
-  st <- readMVar st'
-  let up = FS.bytesRead st
-      down = FS.bytesWritten st
+  st <- readMVar <$> FS.getStats fschan
+  up <- fmap FS.bytesRead st
+  down <- fmap FS.bytesWritten st
   resp <- sendGetRequest url $ mkArgs sport peerId up down (left tstate) infohash
   case Benc.decode resp of
     Left e ->
   resp <- sendGetRequest url $ mkArgs sport peerId up down (left tstate) infohash
   case Benc.decode resp of
     Left e ->
index 2165b08261d1229d49dfa0ce1751fbad53cb82d7..3adcacc8bc6ac35c24b017dc83675f37635a11a6 100644 (file)
@@ -29,7 +29,7 @@ module FuncTorrent.Tracker.Types
 import Data.ByteString (ByteString)
 import Control.Concurrent.MVar (MVar)
 
 import Data.ByteString (ByteString)
 import Control.Concurrent.MVar (MVar)
 
-import FuncTorrent.Peer (Peer(..))
+import FuncTorrent.PeerMsgs (Peer)
 
 data TrackerProtocol = Http
                      | Udp
 
 data TrackerProtocol = Http
                      | Udp
index fe4d9e0aeb8dfcaab57ba46bb040eebfd720fa99..5e98879f976a082d4611def19bef7224e20077a2 100644 (file)
@@ -39,7 +39,7 @@ import Network.Socket.ByteString (sendTo, recvFrom)
 import System.Random (randomIO)
 import System.Timeout (timeout)
 
 import System.Random (randomIO)
 import System.Timeout (timeout)
 
-import FuncTorrent.Peer (Peer(..))
+import FuncTorrent.PeerMsgs (Peer(..))
 import FuncTorrent.Tracker.Types (TrackerEventState(..), TState(..))
 import FuncTorrent.Utils (IP, Port, toIP, toPort, getHostname, getPort)
 import qualified FuncTorrent.FileSystem as FS (MsgChannel, Stats(..), getStats)
 import FuncTorrent.Tracker.Types (TrackerEventState(..), TState(..))
 import FuncTorrent.Utils (IP, Port, toIP, toPort, getHostname, getPort)
 import qualified FuncTorrent.FileSystem as FS (MsgChannel, Stats(..), getStats)
@@ -200,7 +200,7 @@ getIPPortPairs = do
     ip <- toIP <$> getByteString 4
     port <- toPort <$> getByteString 2
     ipportpairs <- getIPPortPairs
     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
 
 startSession :: String -> Port -> IO UDPTrackerHandle
 startSession host port = do
@@ -216,7 +216,7 @@ closeSession (UDPTrackerHandle s _ _) = close s
 
 trackerLoop :: String -> Port -> String -> ByteString -> FS.MsgChannel -> TState -> IO ()
 trackerLoop url sport peerId infohash fschan tstate = forever $ do
 
 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
   up <- fmap FS.bytesRead st
   down <- fmap FS.bytesWritten st
   handle <- startSession host port