summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent/Exchange/Message.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/BitTorrent/Exchange/Message.hs')
-rw-r--r--src/Network/BitTorrent/Exchange/Message.hs17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/Network/BitTorrent/Exchange/Message.hs b/src/Network/BitTorrent/Exchange/Message.hs
index e93f8bbe..d0d2bb03 100644
--- a/src/Network/BitTorrent/Exchange/Message.hs
+++ b/src/Network/BitTorrent/Exchange/Message.hs
@@ -83,6 +83,8 @@ module Network.BitTorrent.Exchange.Message
83 , metadataPieceSize 83 , metadataPieceSize
84 , defaultMetadataFactor 84 , defaultMetadataFactor
85 , defaultMaxInfoDictSize 85 , defaultMaxInfoDictSize
86 , isLastPiece
87 , isValidPiece
86 ) where 88 ) where
87 89
88import Control.Applicative 90import Control.Applicative
@@ -859,13 +861,18 @@ instance PeerMessage ExtendedMetadata where
859metadataPieceSize :: Int 861metadataPieceSize :: Int
860metadataPieceSize = 16 * 1024 862metadataPieceSize = 16 * 1024
861 863
864isLastPiece :: P.Piece a -> Int -> Bool
865isLastPiece P.Piece {..} total = succ pieceIndex == pcnt
866 where
867 pcnt = q + if r > 0 then 1 else 0
868 (q, r) = quotRem total metadataPieceSize
869
862-- TODO we can check if the piece payload bytestring have appropriate 870-- TODO we can check if the piece payload bytestring have appropriate
863-- length; otherwise serialization MUST fail. 871-- length; otherwise serialization MUST fail.
864isLastMetadata :: ExtendedMetadata -> Bool 872isValidPiece :: P.Piece BL.ByteString -> Int -> Bool
865isLastMetadata = undefined -- FIXME 873isValidPiece p @ P.Piece {..} total
866 874 | isLastPiece p total = P.pieceSize p <= metadataPieceSize
867checkPiece :: ExtendedMetadata -> Bool 875 | otherwise = P.pieceSize p == metadataPieceSize
868checkPiece = undefined -- FIXME
869 876
870setMetadataPayload :: BS.ByteString -> ExtendedMetadata -> ExtendedMetadata 877setMetadataPayload :: BS.ByteString -> ExtendedMetadata -> ExtendedMetadata
871setMetadataPayload bs (MetadataData (P.Piece pix _) t) = 878setMetadataPayload bs (MetadataData (P.Piece pix _) t) =