X-Git-Url: https://git.rkrishnan.org/?p=functorrent.git;a=blobdiff_plain;f=src%2FFuncTorrent%2FPeerMsgs.hs;h=f597ed8c6ee676b3581b25e96a264d7fa35c2fd4;hp=ff3b43579906c6951378258fbfc0b8bea456e80a;hb=08f3238a8162039a1b77f4fb8825a56a34203c02;hpb=aa5477676dd98fb07a2afa118c29f98a4885fdc9 diff --git a/src/FuncTorrent/PeerMsgs.hs b/src/FuncTorrent/PeerMsgs.hs index ff3b435..f597ed8 100644 --- a/src/FuncTorrent/PeerMsgs.hs +++ b/src/FuncTorrent/PeerMsgs.hs @@ -86,9 +86,7 @@ instance Binary PeerMsg where 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) @@ -98,12 +96,15 @@ instance Binary PeerMsg where 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 @@ -112,15 +113,15 @@ instance Binary PeerMsg where 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