diff options
Diffstat (limited to 'src/Network/BitTorrent')
-rw-r--r-- | src/Network/BitTorrent/PeerWire/Block.hs | 22 | ||||
-rw-r--r-- | src/Network/BitTorrent/PeerWire/Message.hs | 18 |
2 files changed, 22 insertions, 18 deletions
diff --git a/src/Network/BitTorrent/PeerWire/Block.hs b/src/Network/BitTorrent/PeerWire/Block.hs index a5bc4f32..8e4a1f24 100644 --- a/src/Network/BitTorrent/PeerWire/Block.hs +++ b/src/Network/BitTorrent/PeerWire/Block.hs | |||
@@ -4,12 +4,16 @@ module Network.BitTorrent.PeerWire.Block | |||
4 | , defaultBlockSize | 4 | , defaultBlockSize |
5 | , pieceIx, blockIx | 5 | , pieceIx, blockIx |
6 | , blockRange, ixRange, isPiece | 6 | , blockRange, ixRange, isPiece |
7 | |||
8 | , putInt, getInt | ||
7 | ) where | 9 | ) where |
8 | 10 | ||
9 | import Control.Applicative | 11 | import Control.Applicative |
10 | import Data.ByteString (ByteString) | 12 | import Data.ByteString (ByteString) |
11 | import qualified Data.ByteString as B | 13 | import qualified Data.ByteString as B |
12 | import Data.Int | 14 | import Data.Int |
15 | import Data.Serialize | ||
16 | |||
13 | 17 | ||
14 | type BlockLIx = Int | 18 | type BlockLIx = Int |
15 | type PieceLIx = Int | 19 | type PieceLIx = Int |
@@ -26,6 +30,24 @@ data BlockIx = BlockIx { | |||
26 | , ixLength :: {-# UNPACK #-} !Int | 30 | , ixLength :: {-# UNPACK #-} !Int |
27 | } deriving (Show, Eq) | 31 | } deriving (Show, Eq) |
28 | 32 | ||
33 | getInt :: Get Int | ||
34 | getInt = fromIntegral <$> getWord32be | ||
35 | {-# INLINE getInt #-} | ||
36 | |||
37 | putInt :: Putter Int | ||
38 | putInt = putWord32be . fromIntegral | ||
39 | {-# INLINE putInt #-} | ||
40 | |||
41 | instance Serialize BlockIx where | ||
42 | {-# SPECIALIZE instance Serialize BlockIx #-} | ||
43 | get = BlockIx <$> getInt <*> getInt <*> getInt | ||
44 | {-# INLINE get #-} | ||
45 | |||
46 | put ix = do putInt (ixPiece ix) | ||
47 | putInt (ixOffset ix) | ||
48 | putInt (ixLength ix) | ||
49 | {-# INLINE put #-} | ||
50 | |||
29 | 51 | ||
30 | data Block = Block { | 52 | data Block = Block { |
31 | -- ^ Zero-based piece index. | 53 | -- ^ Zero-based piece index. |
diff --git a/src/Network/BitTorrent/PeerWire/Message.hs b/src/Network/BitTorrent/PeerWire/Message.hs index 1bcb2ee5..66021487 100644 --- a/src/Network/BitTorrent/PeerWire/Message.hs +++ b/src/Network/BitTorrent/PeerWire/Message.hs | |||
@@ -25,15 +25,6 @@ data Message = KeepAlive | |||
25 | | Port Int | 25 | | Port Int |
26 | deriving (Show, Eq) | 26 | deriving (Show, Eq) |
27 | 27 | ||
28 | instance Serialize BlockIx where | ||
29 | {-# SPECIALIZE instance Serialize BlockIx #-} | ||
30 | get = BlockIx <$> getInt <*> getInt <*> getInt | ||
31 | {-# INLINE get #-} | ||
32 | |||
33 | put ix = do putInt (ixPiece ix) | ||
34 | putInt (ixOffset ix) | ||
35 | putInt (ixLength ix) | ||
36 | {-# INLINE put #-} | ||
37 | 28 | ||
38 | instance Serialize Message where | 29 | instance Serialize Message where |
39 | get = do | 30 | get = do |
@@ -80,12 +71,3 @@ instance Serialize Message where | |||
80 | 71 | ||
81 | put (Cancel blk) = putInt 13 >> putWord8 8 >> put blk | 72 | put (Cancel blk) = putInt 13 >> putWord8 8 >> put blk |
82 | put (Port p ) = putInt 3 >> putWord8 9 >> putWord16be (fromIntegral p) | 73 | put (Port p ) = putInt 3 >> putWord8 9 >> putWord16be (fromIntegral p) |
83 | |||
84 | |||
85 | getInt :: Get Int | ||
86 | getInt = fromIntegral <$> getWord32be | ||
87 | {-# INLINE getInt #-} | ||
88 | |||
89 | putInt :: Putter Int | ||
90 | putInt = putWord32be . fromIntegral | ||
91 | {-# INLINE putInt #-} | ||