summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent/Exchange/Wire.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/BitTorrent/Exchange/Wire.hs')
-rw-r--r--src/Network/BitTorrent/Exchange/Wire.hs29
1 files changed, 16 insertions, 13 deletions
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 (($$), (<>))
38import Text.PrettyPrint.Class 38import Text.PrettyPrint.Class
39 39
40import Data.Torrent.InfoHash 40import Data.Torrent.InfoHash
41import Network.BitTorrent.Core.PeerId 41import Network.BitTorrent.Core
42import Network.BitTorrent.Core.PeerAddr
43import Network.BitTorrent.Exchange.Message 42import Network.BitTorrent.Exchange.Message
44 43
45 44
@@ -147,15 +146,21 @@ connectToPeer p = do
147 146
148type Wire = ConduitM Message Message (ReaderT Connection IO) 147type Wire = ConduitM Message Message (ReaderT Connection IO)
149 148
150validate :: Wire () 149validate :: ChannelSide -> Wire ()
151validate = do 150validate 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
160validate' action = do
161 validate RemotePeer
162 action
163 validate ThisPeer
159 164
160runWire :: Wire () -> Socket -> Connection -> IO () 165runWire :: Wire () -> Socket -> Connection -> IO ()
161runWire action sock = runReaderT $ 166runWire action sock = runReaderT $
@@ -173,8 +178,6 @@ sendMessage msg = do
173recvMessage :: Wire Message 178recvMessage :: Wire Message
174recvMessage = undefined 179recvMessage = undefined
175 180
176
177
178extendedHandshake :: Wire () 181extendedHandshake :: Wire ()
179extendedHandshake = undefined 182extendedHandshake = undefined
180 183