diff options
author | Sam Truzjan <pxqr.sta@gmail.com> | 2014-01-08 07:53:52 +0400 |
---|---|---|
committer | Sam Truzjan <pxqr.sta@gmail.com> | 2014-01-08 07:53:52 +0400 |
commit | 64f26fba49e7ae933a0ccdcd7cdbb56c5c6a7df7 (patch) | |
tree | 05aa86f2dd3ecff40b6fde9b40e02a0d4e404e91 | |
parent | 3ddfd24a0b158bdf06f654a373f82e0591cb9b8f (diff) |
Use newer krpc package
-rw-r--r-- | bittorrent.cabal | 10 | ||||
-rw-r--r-- | src/Network/BitTorrent/DHT/Message.hs | 4 | ||||
-rw-r--r-- | src/Network/BitTorrent/DHT/Session.hs | 15 | ||||
m--------- | sub/krpc | 10 | ||||
-rw-r--r-- | tests/Network/BitTorrent/DHT/MessageSpec.hs | 16 |
5 files changed, 29 insertions, 26 deletions
diff --git a/bittorrent.cabal b/bittorrent.cabal index 073329de..28c26baf 100644 --- a/bittorrent.cabal +++ b/bittorrent.cabal | |||
@@ -148,7 +148,7 @@ library | |||
148 | 148 | ||
149 | -- Network | 149 | -- Network |
150 | , network >= 2.4 | 150 | , network >= 2.4 |
151 | , krpc >= 0.5 | 151 | , krpc >= 0.6 |
152 | , http-types >= 0.8 | 152 | , http-types >= 0.8 |
153 | , http-conduit >= 1.9 && < 2.0 | 153 | , http-conduit >= 1.9 && < 2.0 |
154 | , wai >= 1.4 && < 2.0 | 154 | , wai >= 1.4 && < 2.0 |
@@ -202,6 +202,7 @@ test-suite spec | |||
202 | , convertible | 202 | , convertible |
203 | , data-default | 203 | , data-default |
204 | , monad-loops | 204 | , monad-loops |
205 | , monad-logger | ||
205 | , containers | 206 | , containers |
206 | , iproute | 207 | , iproute |
207 | 208 | ||
@@ -220,7 +221,7 @@ test-suite spec | |||
220 | , http-types | 221 | , http-types |
221 | , bencoding | 222 | , bencoding |
222 | , process | 223 | , process |
223 | , krpc >= 0.5.0.0 | 224 | , krpc >= 0.6 |
224 | , bittorrent | 225 | , bittorrent |
225 | ghc-options: -Wall -fno-warn-orphans | 226 | ghc-options: -Wall -fno-warn-orphans |
226 | 227 | ||
@@ -250,11 +251,6 @@ executable mktorrent | |||
250 | hs-source-dirs: examples | 251 | hs-source-dirs: examples |
251 | main-is: MkTorrent.hs | 252 | main-is: MkTorrent.hs |
252 | other-modules: Paths_bittorrent | 253 | other-modules: Paths_bittorrent |
253 | -- , MkTorrent.Amend | ||
254 | -- , MkTorrent.Check | ||
255 | -- , MkTorrent.Create | ||
256 | -- , MkTorrent.Magnet | ||
257 | -- , MkTorrent.Show | ||
258 | build-depends: base == 4.6.* | 254 | build-depends: base == 4.6.* |
259 | , bytestring | 255 | , bytestring |
260 | , text | 256 | , text |
diff --git a/src/Network/BitTorrent/DHT/Message.hs b/src/Network/BitTorrent/DHT/Message.hs index 461c8f83..ac4889fe 100644 --- a/src/Network/BitTorrent/DHT/Message.hs +++ b/src/Network/BitTorrent/DHT/Message.hs | |||
@@ -108,7 +108,7 @@ node_id_key = "id" | |||
108 | data Query a = Query | 108 | data Query a = Query |
109 | { thisNodeId :: NodeId -- ^ node id of /quering/ node; | 109 | { thisNodeId :: NodeId -- ^ node id of /quering/ node; |
110 | , queryParams :: a -- ^ query parameters. | 110 | , queryParams :: a -- ^ query parameters. |
111 | } deriving (Show, Eq) | 111 | } deriving (Show, Eq, Typeable) |
112 | 112 | ||
113 | instance BEncode a => BEncode (Query a) where | 113 | instance BEncode a => BEncode (Query a) where |
114 | toBEncode Query {..} = toDict $ | 114 | toBEncode Query {..} = toDict $ |
@@ -128,7 +128,7 @@ instance BEncode a => BEncode (Query a) where | |||
128 | data Response a = Response | 128 | data Response a = Response |
129 | { remoteNodeId :: NodeId -- ^ node id of /quered/ node; | 129 | { remoteNodeId :: NodeId -- ^ node id of /quered/ node; |
130 | , responseVals :: a -- ^ query result. | 130 | , responseVals :: a -- ^ query result. |
131 | } deriving (Show, Eq) | 131 | } deriving (Show, Eq, Typeable) |
132 | 132 | ||
133 | instance BEncode a => BEncode (Response a) where | 133 | instance BEncode a => BEncode (Response a) where |
134 | toBEncode = toBEncode . toQuery | 134 | toBEncode = toBEncode . toQuery |
diff --git a/src/Network/BitTorrent/DHT/Session.hs b/src/Network/BitTorrent/DHT/Session.hs index 4e6a6825..d7c6a7f7 100644 --- a/src/Network/BitTorrent/DHT/Session.hs +++ b/src/Network/BitTorrent/DHT/Session.hs | |||
@@ -76,8 +76,8 @@ import Text.PrettyPrint as PP hiding ((<>)) | |||
76 | import Text.PrettyPrint.Class | 76 | import Text.PrettyPrint.Class |
77 | 77 | ||
78 | import Data.Torrent.InfoHash | 78 | import Data.Torrent.InfoHash |
79 | import Network.KRPC | 79 | import Network.KRPC hiding (Options, def) |
80 | import Network.KRPC.Method | 80 | import qualified Network.KRPC as KRPC (Options, def) |
81 | import Network.BitTorrent.Core | 81 | import Network.BitTorrent.Core |
82 | import Network.BitTorrent.Core.PeerAddr as P | 82 | import Network.BitTorrent.Core.PeerAddr as P |
83 | import Network.BitTorrent.DHT.Message | 83 | import Network.BitTorrent.DHT.Message |
@@ -196,7 +196,8 @@ runDHT :: forall ip a. Address ip | |||
196 | -> IO a -- ^ result. | 196 | -> IO a -- ^ result. |
197 | runDHT handlers opts naddr action = runResourceT $ do | 197 | runDHT handlers opts naddr action = runResourceT $ do |
198 | runStderrLoggingT $ LoggingT $ \ logger -> do | 198 | runStderrLoggingT $ LoggingT $ \ logger -> do |
199 | (_, m) <- allocate (newManager (toSockAddr naddr) handlers) closeManager | 199 | let kopts = KRPC.def |
200 | (_, m) <- allocate (newManager kopts (toSockAddr naddr) handlers) closeManager | ||
200 | myId <- liftIO genNodeId | 201 | myId <- liftIO genNodeId |
201 | node <- liftIO $ Node opts m | 202 | node <- liftIO $ Node opts m |
202 | <$> newMVar (nullTable myId (optBucketCount opts)) | 203 | <$> newMVar (nullTable myId (optBucketCount opts)) |
@@ -254,14 +255,14 @@ grantToken addr = do | |||
254 | toks <- asks sessionTokens >>= liftIO . readTVarIO | 255 | toks <- asks sessionTokens >>= liftIO . readTVarIO |
255 | return $ T.lookup addr $ tokenMap toks | 256 | return $ T.lookup addr $ tokenMap toks |
256 | 257 | ||
257 | -- | Throws 'ProtocolError' if token is invalid or already expired. | 258 | -- | Throws 'HandlerError' if the token is invalid or already |
259 | -- expired. See 'TokenMap' for details. | ||
258 | checkToken :: Hashable a => NodeAddr a -> Token -> DHT ip () | 260 | checkToken :: Hashable a => NodeAddr a -> Token -> DHT ip () |
259 | checkToken addr questionableToken = do | 261 | checkToken addr questionableToken = do |
260 | tryUpdateSecret | 262 | tryUpdateSecret |
261 | toks <- asks sessionTokens >>= liftIO . readTVarIO | 263 | toks <- asks sessionTokens >>= liftIO . readTVarIO |
262 | unless (member addr questionableToken (tokenMap toks)) $ | 264 | unless (member addr questionableToken (tokenMap toks)) $ |
263 | liftIO $ throwIO $ KError ProtocolError "bad token" "" | 265 | throw $ InvalidParameter "token" |
264 | -- todo reset transaction id in krpc | ||
265 | 266 | ||
266 | {----------------------------------------------------------------------- | 267 | {----------------------------------------------------------------------- |
267 | -- Routing table | 268 | -- Routing table |
@@ -355,7 +356,7 @@ nodeHandler :: Address ip => KRPC (Query a) (Response b) | |||
355 | => (NodeAddr ip -> a -> DHT ip b) -> NodeHandler ip | 356 | => (NodeAddr ip -> a -> DHT ip b) -> NodeHandler ip |
356 | nodeHandler action = handler $ \ sockAddr (Query remoteId q) -> do | 357 | nodeHandler action = handler $ \ sockAddr (Query remoteId q) -> do |
357 | case fromSockAddr sockAddr of | 358 | case fromSockAddr sockAddr of |
358 | Nothing -> liftIO $ throwIO $ KError GenericError "bad address" "" | 359 | Nothing -> throwIO BadAddress |
359 | Just naddr -> do | 360 | Just naddr -> do |
360 | insertNode (NodeInfo remoteId naddr) | 361 | insertNode (NodeInfo remoteId naddr) |
361 | Response <$> getNodeId <*> action naddr q | 362 | Response <$> getNodeId <*> action naddr q |
diff --git a/sub/krpc b/sub/krpc | |||
Subproject 9a9a7d5750e24ee0810006f3dd2a7e7879b521e | Subproject 41ca2fc6ece3e24542703035c4249f409eca390 | ||
diff --git a/tests/Network/BitTorrent/DHT/MessageSpec.hs b/tests/Network/BitTorrent/DHT/MessageSpec.hs index af694470..0d84c919 100644 --- a/tests/Network/BitTorrent/DHT/MessageSpec.hs +++ b/tests/Network/BitTorrent/DHT/MessageSpec.hs | |||
@@ -1,6 +1,7 @@ | |||
1 | {-# LANGUAGE RecordWildCards #-} | 1 | {-# LANGUAGE RecordWildCards #-} |
2 | module Network.BitTorrent.DHT.MessageSpec (spec) where | 2 | module Network.BitTorrent.DHT.MessageSpec (spec) where |
3 | import Control.Monad.Reader | 3 | import Control.Monad.Reader |
4 | import Control.Monad.Logger | ||
4 | import Control.Concurrent | 5 | import Control.Concurrent |
5 | import Data.BEncode as BE | 6 | import Data.BEncode as BE |
6 | import Data.ByteString.Lazy as BL | 7 | import Data.ByteString.Lazy as BL |
@@ -8,7 +9,8 @@ import Data.Default | |||
8 | import Data.List as L | 9 | import Data.List as L |
9 | import Network.BitTorrent.Core | 10 | import Network.BitTorrent.Core |
10 | import Network.BitTorrent.DHT.Message | 11 | import Network.BitTorrent.DHT.Message |
11 | import Network.KRPC | 12 | import qualified Network.KRPC as KRPC (def) |
13 | import Network.KRPC hiding (def) | ||
12 | import Network.Socket (PortNumber) | 14 | import Network.Socket (PortNumber) |
13 | import Test.Hspec | 15 | import Test.Hspec |
14 | import Test.QuickCheck | 16 | import Test.QuickCheck |
@@ -18,6 +20,10 @@ import Network.BitTorrent.CoreSpec () | |||
18 | import Network.BitTorrent.DHT.TokenSpec () | 20 | import Network.BitTorrent.DHT.TokenSpec () |
19 | import Data.Torrent.InfoHashSpec () | 21 | import Data.Torrent.InfoHashSpec () |
20 | 22 | ||
23 | |||
24 | instance MonadLogger IO where | ||
25 | monadLoggerLog _ _ _ _ = return () | ||
26 | |||
21 | remoteAddr :: SockAddr | 27 | remoteAddr :: SockAddr |
22 | remoteAddr = SockAddrInet 6881 (256 * 256 * 256 + 127) | 28 | remoteAddr = SockAddrInet 6881 (256 * 256 * 256 + 127) |
23 | 29 | ||
@@ -29,12 +35,12 @@ thisPort = 60001 | |||
29 | 35 | ||
30 | rpc :: ReaderT (Manager IO) IO a -> IO a | 36 | rpc :: ReaderT (Manager IO) IO a -> IO a |
31 | rpc action = do | 37 | rpc action = do |
32 | withManager thisAddr [] $ runReaderT $ do | 38 | withManager KRPC.def thisAddr [] $ runReaderT $ do |
33 | listen | 39 | listen |
34 | action | 40 | action |
35 | 41 | ||
36 | isProtocolError :: KError -> Bool | 42 | isQueryError :: QueryFailure -> Bool |
37 | isProtocolError KError {..} = errorCode == ProtocolError | 43 | isQueryError _ = True |
38 | 44 | ||
39 | prop_bencode :: Eq a => Show a => BEncode a => a -> Expectation | 45 | prop_bencode :: Eq a => Show a => BEncode a => a -> Expectation |
40 | prop_bencode x = BE.decode (BL.toStrict (BE.encode x)) `shouldBe` Right x | 46 | prop_bencode x = BE.decode (BL.toStrict (BE.encode x)) `shouldBe` Right x |
@@ -196,5 +202,5 @@ spec = do | |||
196 | let _ = peers :: Either [NodeInfo IPv4] [PeerAddr IPv4] | 202 | let _ = peers :: Either [NodeInfo IPv4] [PeerAddr IPv4] |
197 | let invalidToken = "" | 203 | let invalidToken = "" |
198 | query remoteAddr (Query nid (Announce False def thisPort invalidToken))) | 204 | query remoteAddr (Query nid (Announce False def thisPort invalidToken))) |
199 | `shouldThrow` isProtocolError | 205 | `shouldThrow` isQueryError |
200 | return () | 206 | return () |