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