diff options
Diffstat (limited to 'src/Network/BitTorrent/Exchange/Message.hs')
-rw-r--r-- | src/Network/BitTorrent/Exchange/Message.hs | 17 |
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 | ||
88 | import Control.Applicative | 90 | import Control.Applicative |
@@ -859,13 +861,18 @@ instance PeerMessage ExtendedMetadata where | |||
859 | metadataPieceSize :: Int | 861 | metadataPieceSize :: Int |
860 | metadataPieceSize = 16 * 1024 | 862 | metadataPieceSize = 16 * 1024 |
861 | 863 | ||
864 | isLastPiece :: P.Piece a -> Int -> Bool | ||
865 | isLastPiece 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. |
864 | isLastMetadata :: ExtendedMetadata -> Bool | 872 | isValidPiece :: P.Piece BL.ByteString -> Int -> Bool |
865 | isLastMetadata = undefined -- FIXME | 873 | isValidPiece p @ P.Piece {..} total |
866 | 874 | | isLastPiece p total = P.pieceSize p <= metadataPieceSize | |
867 | checkPiece :: ExtendedMetadata -> Bool | 875 | | otherwise = P.pieceSize p == metadataPieceSize |
868 | checkPiece = undefined -- FIXME | ||
869 | 876 | ||
870 | setMetadataPayload :: BS.ByteString -> ExtendedMetadata -> ExtendedMetadata | 877 | setMetadataPayload :: BS.ByteString -> ExtendedMetadata -> ExtendedMetadata |
871 | setMetadataPayload bs (MetadataData (P.Piece pix _) t) = | 878 | setMetadataPayload bs (MetadataData (P.Piece pix _) t) = |