diff options
Diffstat (limited to 'src/Network/BitTorrent/Exchange')
-rw-r--r-- | src/Network/BitTorrent/Exchange/Message.hs | 5 | ||||
-rw-r--r-- | src/Network/BitTorrent/Exchange/Session.hs | 2 | ||||
-rw-r--r-- | src/Network/BitTorrent/Exchange/Wire.hs | 29 |
3 files changed, 18 insertions, 18 deletions
diff --git a/src/Network/BitTorrent/Exchange/Message.hs b/src/Network/BitTorrent/Exchange/Message.hs index 85ad76d6..b879e212 100644 --- a/src/Network/BitTorrent/Exchange/Message.hs +++ b/src/Network/BitTorrent/Exchange/Message.hs | |||
@@ -81,18 +81,15 @@ import Data.Ord | |||
81 | import Data.Serialize as S | 81 | import Data.Serialize as S |
82 | import Data.Text as T | 82 | import Data.Text as T |
83 | import Data.Typeable | 83 | import Data.Typeable |
84 | import Data.Tuple | ||
85 | import Data.Word | 84 | import Data.Word |
86 | import Network | 85 | import Network |
87 | import Network.Socket hiding (KeepAlive) | 86 | import Network.Socket hiding (KeepAlive) |
88 | import Network.Socket.ByteString as BS | ||
89 | import Text.PrettyPrint as PP | 87 | import Text.PrettyPrint as PP |
90 | import Text.PrettyPrint.Class | 88 | import Text.PrettyPrint.Class |
91 | 89 | ||
92 | import Data.Torrent.Bitfield | 90 | import Data.Torrent.Bitfield |
93 | import Data.Torrent.InfoHash | 91 | import Data.Torrent.InfoHash |
94 | import Network.BitTorrent.Core.PeerId | 92 | import Network.BitTorrent.Core |
95 | import Network.BitTorrent.Core.PeerAddr () | ||
96 | import Network.BitTorrent.Exchange.Block | 93 | import Network.BitTorrent.Exchange.Block |
97 | 94 | ||
98 | {----------------------------------------------------------------------- | 95 | {----------------------------------------------------------------------- |
diff --git a/src/Network/BitTorrent/Exchange/Session.hs b/src/Network/BitTorrent/Exchange/Session.hs index d2a9aaaf..c24e2b0b 100644 --- a/src/Network/BitTorrent/Exchange/Session.hs +++ b/src/Network/BitTorrent/Exchange/Session.hs | |||
@@ -15,7 +15,7 @@ import Text.PrettyPrint | |||
15 | 15 | ||
16 | import Data.Torrent.Bitfield | 16 | import Data.Torrent.Bitfield |
17 | import Data.Torrent.InfoHash | 17 | import Data.Torrent.InfoHash |
18 | import Network.BitTorrent.Core.PeerAddr | 18 | import Network.BitTorrent.Core |
19 | import Network.BitTorrent.Exchange.Message | 19 | import Network.BitTorrent.Exchange.Message |
20 | import Network.BitTorrent.Exchange.Status | 20 | import Network.BitTorrent.Exchange.Status |
21 | 21 | ||
diff --git a/src/Network/BitTorrent/Exchange/Wire.hs b/src/Network/BitTorrent/Exchange/Wire.hs index dd77a915..68c9b355 100644 --- a/src/Network/BitTorrent/Exchange/Wire.hs +++ b/src/Network/BitTorrent/Exchange/Wire.hs | |||
@@ -38,8 +38,7 @@ import Text.PrettyPrint as PP hiding (($$), (<>)) | |||
38 | import Text.PrettyPrint.Class | 38 | import Text.PrettyPrint.Class |
39 | 39 | ||
40 | import Data.Torrent.InfoHash | 40 | import Data.Torrent.InfoHash |
41 | import Network.BitTorrent.Core.PeerId | 41 | import Network.BitTorrent.Core |
42 | import Network.BitTorrent.Core.PeerAddr | ||
43 | import Network.BitTorrent.Exchange.Message | 42 | import Network.BitTorrent.Exchange.Message |
44 | 43 | ||
45 | 44 | ||
@@ -147,15 +146,21 @@ connectToPeer p = do | |||
147 | 146 | ||
148 | type Wire = ConduitM Message Message (ReaderT Connection IO) | 147 | type Wire = ConduitM Message Message (ReaderT Connection IO) |
149 | 148 | ||
150 | validate :: Wire () | 149 | validate :: ChannelSide -> Wire () |
151 | validate = do | 150 | validate side = await >>= maybe (return ()) yieldCheck |
152 | mmsg <- await | 151 | where |
153 | case mmsg of | 152 | yieldCheck msg = do |
154 | Nothing -> return () | 153 | caps <- lift $ asks connCaps |
155 | Just msg -> do | 154 | case requires msg of |
156 | valid <- lift $ asks (`isAllowed` msg) | 155 | Nothing -> return () |
157 | if valid then yield msg else error "TODO" | 156 | Just ext |
158 | 157 | | allowed caps ext -> yield msg | |
158 | | otherwise -> monadThrow $ ProtocolError $ InvalidMessage side ext | ||
159 | |||
160 | validate' action = do | ||
161 | validate RemotePeer | ||
162 | action | ||
163 | validate ThisPeer | ||
159 | 164 | ||
160 | runWire :: Wire () -> Socket -> Connection -> IO () | 165 | runWire :: Wire () -> Socket -> Connection -> IO () |
161 | runWire action sock = runReaderT $ | 166 | runWire action sock = runReaderT $ |
@@ -173,8 +178,6 @@ sendMessage msg = do | |||
173 | recvMessage :: Wire Message | 178 | recvMessage :: Wire Message |
174 | recvMessage = undefined | 179 | recvMessage = undefined |
175 | 180 | ||
176 | |||
177 | |||
178 | extendedHandshake :: Wire () | 181 | extendedHandshake :: Wire () |
179 | extendedHandshake = undefined | 182 | extendedHandshake = undefined |
180 | 183 | ||