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
bfListLen = length bfList
RequestMsg i o l -> do putWord32be 13
putWord8 6
- putWord32be (fromIntegral i)
- putWord32be (fromIntegral o)
- putWord32be (fromIntegral l)
+ putIndexOffsetLength i o l
PieceMsg i o b -> do putWord32be $ fromIntegral (9 + blocklen)
putWord8 7
putWord32be (fromIntegral i)
blocklen = length blockList
CancelMsg i o l -> do putWord32be 13
putWord8 8
- putWord32be (fromIntegral i)
- putWord32be (fromIntegral o)
- putWord32be (fromIntegral l)
+ putIndexOffsetLength i o l
PortMsg p -> do putWord32be 3
putWord8 9
putWord16be (fromIntegral p)
+ where putIndexOffsetLength i o l = do
+ putWord32be (fromIntegral i)
+ putWord32be (fromIntegral o)
+ putWord32be (fromIntegral l)
+
get = do
l <- getWord32be
msgid <- getWord8
1 -> return UnChokeMsg
2 -> return InterestedMsg
3 -> return NotInterestedMsg
- 4 -> liftM (HaveMsg . fromIntegral) getWord32be
- 5 -> liftM (BitFieldMsg . pack) (replicateM (fromIntegral l - 1) getWord8)
+ 4 -> fmap (HaveMsg . fromIntegral) getWord32be
+ 5 -> fmap (BitFieldMsg . pack) (replicateM (fromIntegral l - 1) getWord8)
6 -> liftA3 RequestMsg getInteger getInteger getInteger
where getInteger = fromIntegral <$> getWord32be
7 -> liftA3 PieceMsg getInteger getInteger (pack <$> replicateM (fromIntegral l - 9) getWord8)
where getInteger = fromIntegral <$> getWord32be
8 -> liftA3 CancelMsg getInteger getInteger getInteger
where getInteger = fromIntegral <$> getWord32be
- 9 -> liftM (PortMsg . fromIntegral) getWord16be
+ 9 -> fmap (PortMsg . fromIntegral) getWord16be
_ -> error ("unknown message ID: " ++ show msgid)
getMsg :: Handle -> IO PeerMsg
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