summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bittorrent.cabal1
-rw-r--r--src/Data/Torrent.hs4
-rw-r--r--src/Data/Torrent/InfoHash.hs10
-rw-r--r--src/Network/BitTorrent/Tracker/Message.hs3
-rw-r--r--tests/Data/Torrent/InfoHashSpec.hs3
5 files changed, 10 insertions, 11 deletions
diff --git a/bittorrent.cabal b/bittorrent.cabal
index f1a04329..d653c971 100644
--- a/bittorrent.cabal
+++ b/bittorrent.cabal
@@ -160,6 +160,7 @@ test-suite spec
160 , directory 160 , directory
161 , filepath 161 , filepath
162 , time 162 , time
163 , convertible
163 164
164 , aeson 165 , aeson
165 , cereal 166 , cereal
diff --git a/src/Data/Torrent.hs b/src/Data/Torrent.hs
index d6227b6f..b3ac7586 100644
--- a/src/Data/Torrent.hs
+++ b/src/Data/Torrent.hs
@@ -78,10 +78,10 @@ import Data.ByteString as BS
78import qualified Data.ByteString.Char8 as BC (pack, unpack) 78import qualified Data.ByteString.Char8 as BC (pack, unpack)
79import qualified Data.ByteString.Lazy as BL 79import qualified Data.ByteString.Lazy as BL
80import Data.Char as Char 80import Data.Char as Char
81import Data.Convertible
81import Data.Default 82import Data.Default
82import Data.Hashable as Hashable 83import Data.Hashable as Hashable
83import qualified Data.List as L 84import qualified Data.List as L
84import Data.Maybe
85import Data.Text as T 85import Data.Text as T
86import Data.Time 86import Data.Time
87import Data.Time.Clock.POSIX 87import Data.Time.Clock.POSIX
@@ -155,7 +155,7 @@ putPrivate True = \ cont -> "private" .=! True .: cont
155 155
156-- | Hash lazy bytestring using SHA1 algorithm. 156-- | Hash lazy bytestring using SHA1 algorithm.
157hashLazyIH :: BL.ByteString -> InfoHash 157hashLazyIH :: BL.ByteString -> InfoHash
158hashLazyIH = fromMaybe (error msg) . byteStringToInfoHash . C.hashlazy 158hashLazyIH = either (const (error msg)) id . safeConvert . C.hashlazy
159 where 159 where
160 msg = "Infohash.hash: impossible: SHA1 is always 20 bytes long" 160 msg = "Infohash.hash: impossible: SHA1 is always 20 bytes long"
161 161
diff --git a/src/Data/Torrent/InfoHash.hs b/src/Data/Torrent/InfoHash.hs
index 7442c61c..08cee3c9 100644
--- a/src/Data/Torrent/InfoHash.hs
+++ b/src/Data/Torrent/InfoHash.hs
@@ -15,7 +15,6 @@ module Data.Torrent.InfoHash
15 ( InfoHash 15 ( InfoHash
16 16
17 -- * Parsing 17 -- * Parsing
18 , byteStringToInfoHash
19 , textToInfoHash 18 , textToInfoHash
20 19
21 -- * Rendering 20 -- * Rendering
@@ -163,12 +162,9 @@ instance FromJSON InfoHash where
163ignoreErrorMsg :: Either a b -> Maybe b 162ignoreErrorMsg :: Either a b -> Maybe b
164ignoreErrorMsg = either (const Nothing) Just 163ignoreErrorMsg = either (const Nothing) Just
165 164
166-- | TODO remove from API 165-- | Tries both base16 and base32 while decoding info hash.
167byteStringToInfoHash :: BS.ByteString -> Maybe InfoHash 166--
168byteStringToInfoHash = ignoreErrorMsg . safeConvert 167-- Use 'safeConvert' for detailed error messages.
169
170-- | Tries both base16 and base32 while decoding info hash. To Use
171-- 'safeConvert' to find out
172-- 168--
173textToInfoHash :: Text -> Maybe InfoHash 169textToInfoHash :: Text -> Maybe InfoHash
174textToInfoHash = ignoreErrorMsg . safeConvert 170textToInfoHash = ignoreErrorMsg . safeConvert
diff --git a/src/Network/BitTorrent/Tracker/Message.hs b/src/Network/BitTorrent/Tracker/Message.hs
index e5d8b25a..3437dcf3 100644
--- a/src/Network/BitTorrent/Tracker/Message.hs
+++ b/src/Network/BitTorrent/Tracker/Message.hs
@@ -55,6 +55,7 @@ import Data.BEncode.BDict as BE
55import Data.ByteString as BS 55import Data.ByteString as BS
56import Data.ByteString.Char8 as BC 56import Data.ByteString.Char8 as BC
57import Data.Char as Char 57import Data.Char as Char
58import Data.Convertible
58import Data.List as L 59import Data.List as L
59import Data.Map as M 60import Data.Map as M
60import Data.Maybe 61import Data.Maybe
@@ -265,7 +266,7 @@ class FromParam a where
265 fromParam :: BS.ByteString -> Maybe a 266 fromParam :: BS.ByteString -> Maybe a
266 267
267instance FromParam InfoHash where 268instance FromParam InfoHash where
268 fromParam = byteStringToInfoHash 269 fromParam = either (const Nothing) pure . safeConvert
269 270
270instance FromParam PeerId where 271instance FromParam PeerId where
271 fromParam = byteStringToPeerId 272 fromParam = byteStringToPeerId
diff --git a/tests/Data/Torrent/InfoHashSpec.hs b/tests/Data/Torrent/InfoHashSpec.hs
index afa017ef..3cc110c1 100644
--- a/tests/Data/Torrent/InfoHashSpec.hs
+++ b/tests/Data/Torrent/InfoHashSpec.hs
@@ -3,6 +3,7 @@ module Data.Torrent.InfoHashSpec (spec) where
3 3
4import Control.Applicative 4import Control.Applicative
5import Data.ByteString as BS 5import Data.ByteString as BS
6import Data.Convertible
6import Data.Maybe 7import Data.Maybe
7import System.FilePath 8import System.FilePath
8import Test.Hspec 9import Test.Hspec
@@ -16,7 +17,7 @@ import Data.Torrent.InfoHash as IH
16instance Arbitrary InfoHash where 17instance Arbitrary InfoHash where
17 arbitrary = do 18 arbitrary = do
18 bs <- BS.pack <$> vectorOf 20 arbitrary 19 bs <- BS.pack <$> vectorOf 20 arbitrary
19 pure $ fromMaybe (error "arbitrary infohash") $ byteStringToInfoHash bs 20 pure $ either (const (error "arbitrary infohash")) id $ safeConvert bs
20 21
21type TestPair = (FilePath, String) 22type TestPair = (FilePath, String)
22 23