summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Data/Torrent.hs2
-rw-r--r--src/Network/BitTorrent/PeerWire/Block.hs22
-rw-r--r--src/Network/BitTorrent/PeerWire/Message.hs18
3 files changed, 24 insertions, 18 deletions
diff --git a/src/Data/Torrent.hs b/src/Data/Torrent.hs
index 2185f702..35bed5f2 100644
--- a/src/Data/Torrent.hs
+++ b/src/Data/Torrent.hs
@@ -15,6 +15,8 @@ module Data.Torrent
15 , Layout, contentLayout 15 , Layout, contentLayout
16 , isSingleFile, isMultiFile 16 , isSingleFile, isMultiFile
17 , fromFile 17 , fromFile
18
19 , sizeInBase
18 ) where 20 ) where
19 21
20import Control.Applicative 22import Control.Applicative
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
9import Control.Applicative 11import Control.Applicative
10import Data.ByteString (ByteString) 12import Data.ByteString (ByteString)
11import qualified Data.ByteString as B 13import qualified Data.ByteString as B
12import Data.Int 14import Data.Int
15import Data.Serialize
16
13 17
14type BlockLIx = Int 18type BlockLIx = Int
15type PieceLIx = Int 19type 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
33getInt :: Get Int
34getInt = fromIntegral <$> getWord32be
35{-# INLINE getInt #-}
36
37putInt :: Putter Int
38putInt = putWord32be . fromIntegral
39{-# INLINE putInt #-}
40
41instance 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
30data Block = Block { 52data 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
28instance 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
38instance Serialize Message where 29instance 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
85getInt :: Get Int
86getInt = fromIntegral <$> getWord32be
87{-# INLINE getInt #-}
88
89putInt :: Putter Int
90putInt = putWord32be . fromIntegral
91{-# INLINE putInt #-}