summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2020-01-24 21:43:44 -0500
committerJoe Crayne <joe@jerkface.net>2020-01-25 19:18:12 -0500
commit81489b13ee734bf5c618e1b826971725df8ed808 (patch)
treeeb45f4806aee2b17394a153b7f99fa7b7287a8bf
parent41b1a490c7b516c0feb0251fdb7723f045773f23 (diff)
Moved parse-error printing from addHandler to forkListener.
-rw-r--r--dht/examples/dhtd.hs2
-rw-r--r--dht/examples/tcpclient.hs2
-rw-r--r--dht/src/DebugTag.hs1
-rw-r--r--dht/src/Network/BitTorrent/MainlineDHT.hs5
-rw-r--r--dht/src/Network/BitTorrent/Tracker/Transport.hs2
-rw-r--r--dht/src/Network/Tox.hs21
-rw-r--r--dht/src/Network/Tox/Onion/Routes.hs2
-rw-r--r--server/src/Network/QueryResponse.hs20
8 files changed, 26 insertions, 29 deletions
diff --git a/dht/examples/dhtd.hs b/dht/examples/dhtd.hs
index de315e35..0dcb4237 100644
--- a/dht/examples/dhtd.hs
+++ b/dht/examples/dhtd.hs
@@ -1803,7 +1803,7 @@ main = do
1803 fromMaybe bail $ msock <&> \(udp,sock) -> do 1803 fromMaybe bail $ msock <&> \(udp,sock) -> do
1804 addr <- getSocketName sock 1804 addr <- getSocketName sock
1805 (bt,btR,btBootstrap4, btBootstrap6,quitBtClient) <- Mainline.newClient swarms addr udp 1805 (bt,btR,btBootstrap4, btBootstrap6,quitBtClient) <- Mainline.newClient swarms addr udp
1806 quitBt <- forkListener "bt" (clientNet bt) 1806 quitBt <- forkListener "bt" (dput XBitTorrent . mappend "bt-parse: ") (clientNet bt)
1807 mainlineSearches <- atomically $ newTVar Map.empty 1807 mainlineSearches <- atomically $ newTVar Map.empty
1808 peerPort <- atomically $ newTVar 6881 -- BitTorrent client TCP port. 1808 peerPort <- atomically $ newTVar 6881 -- BitTorrent client TCP port.
1809 let mainlineDHT bkts wantip = DHT 1809 let mainlineDHT bkts wantip = DHT
diff --git a/dht/examples/tcpclient.hs b/dht/examples/tcpclient.hs
index d168b1fb..858a617d 100644
--- a/dht/examples/tcpclient.hs
+++ b/dht/examples/tcpclient.hs
@@ -16,7 +16,7 @@ main = do
16 setVerbose XUnexpected 16 setVerbose XUnexpected
17 crypto <- newCrypto 17 crypto <- newCrypto
18 (_,client) <- newClient crypto id (\cb p -> cb (Just (False,p))) 18 (_,client) <- newClient crypto id (\cb p -> cb (Just (False,p)))
19 quitTCP <- forkListener "TCP-recv" (addHandler print (handleMessage client) $ clientNet client) 19 quitTCP <- forkListener "TCP-recv" (dput XTCP . (++) "tcp-parse: ") (addHandler print (handleMessage client) $ clientNet client)
20 args <- getArgs 20 args <- getArgs
21 let addr = read $ args !! 0 21 let addr = read $ args !! 0
22 22
diff --git a/dht/src/DebugTag.hs b/dht/src/DebugTag.hs
index 37593e63..b5f862dc 100644
--- a/dht/src/DebugTag.hs
+++ b/dht/src/DebugTag.hs
@@ -8,6 +8,7 @@ data DebugTag
8 | XAnnounceResponse 8 | XAnnounceResponse
9 | XBitTorrent 9 | XBitTorrent
10 | XDBus 10 | XDBus
11 | XDHT
11 | XLan 12 | XLan
12 | XMan 13 | XMan
13 | XNetCrypto 14 | XNetCrypto
diff --git a/dht/src/Network/BitTorrent/MainlineDHT.hs b/dht/src/Network/BitTorrent/MainlineDHT.hs
index a83cf740..705d7291 100644
--- a/dht/src/Network/BitTorrent/MainlineDHT.hs
+++ b/dht/src/Network/BitTorrent/MainlineDHT.hs
@@ -623,11 +623,8 @@ newClient swarms addr udp = do
623 gen :: Word16 -> (TransactionId, Word16) 623 gen :: Word16 -> (TransactionId, Word16)
624 gen cnt = (TransactionId $ S.encode cnt, cnt+1) 624 gen cnt = (TransactionId $ S.encode cnt, cnt+1)
625 625
626 ignoreParseError :: String -> IO ()
627 ignoreParseError _ = return ()
628
629 client = Client 626 client = Client
630 { clientNet = addHandler ignoreParseError (handleMessage client) net 627 { clientNet = addHandler (handleMessage client) net
631 , clientDispatcher = dispatch 628 , clientDispatcher = dispatch
632 , clientErrorReporter = ignoreErrors -- printErrors stderr 629 , clientErrorReporter = ignoreErrors -- printErrors stderr
633 , clientPending = map_var 630 , clientPending = map_var
diff --git a/dht/src/Network/BitTorrent/Tracker/Transport.hs b/dht/src/Network/BitTorrent/Tracker/Transport.hs
index 5d225a7e..eacf7946 100644
--- a/dht/src/Network/BitTorrent/Tracker/Transport.hs
+++ b/dht/src/Network/BitTorrent/Tracker/Transport.hs
@@ -94,4 +94,4 @@ implementTracker err net c = do
94 , clientAddress = const $ return localhost4 94 , clientAddress = const $ return localhost4
95 , clientResponseId = return 95 , clientResponseId = return
96 } 96 }
97 return $ addHandler (\err -> return ()) (handleMessage client) net 97 return $ addHandler (handleMessage client) net
diff --git a/dht/src/Network/Tox.hs b/dht/src/Network/Tox.hs
index 6adfb9a9..084a9978 100644
--- a/dht/src/Network/Tox.hs
+++ b/dht/src/Network/Tox.hs
@@ -174,7 +174,6 @@ newClient drg net classify selfAddr handlers modifytbl modifynet = do
174 , lookupHandler = handlers -- var 174 , lookupHandler = handlers -- var
175 , tableMethods = modifytbl tbl 175 , tableMethods = modifytbl tbl
176 } 176 }
177 eprinter = logErrors -- printErrors stderr
178 mkclient :: (TransactionMethods 177 mkclient :: (TransactionMethods
179 (g, pending) DHT.TransactionId addr x, 178 (g, pending) DHT.TransactionId addr x,
180 TVar (g, pending)) 179 TVar (g, pending))
@@ -184,9 +183,9 @@ newClient drg net classify selfAddr handlers modifytbl modifynet = do
184 -> ClientA String meth DHT.TransactionId addr x x 183 -> ClientA String meth DHT.TransactionId addr x x
185 mkclient (tbl,var) handlers = 184 mkclient (tbl,var) handlers =
186 let client = Client 185 let client = Client
187 { clientNet = addHandler (reportParseError eprinter) (handleMessage client) $ modifynet client net 186 { clientNet = addHandler (handleMessage client) $ modifynet client net
188 , clientDispatcher = dispatch tbl var (handlers client) client 187 , clientDispatcher = dispatch tbl var (handlers client) client
189 , clientErrorReporter = eprinter 188 , clientErrorReporter = logErrors
190 , clientPending = var 189 , clientPending = var
191 , clientAddress = selfAddr 190 , clientAddress = selfAddr
192 , clientResponseId = genNonce24 var 191 , clientResponseId = genNonce24 var
@@ -412,8 +411,8 @@ newToxOverTransport keydb addr onNewSession (crypto,roster) udp tcp = do
412 { toxDHT = dhtclient 411 { toxDHT = dhtclient
413 , toxOnion = onionclient 412 , toxOnion = onionclient
414 , toxToRoute = onInbound (updateContactInfo roster) dtacrypt 413 , toxToRoute = onInbound (updateContactInfo roster) dtacrypt
415 , toxCrypto = addHandler (dput XMisc) (sessionHandler sessions) cryptonet 414 , toxCrypto = addHandler (sessionHandler sessions) cryptonet
416 , toxHandshakes = addHandler (dput XMisc) (handshakeH sparams) handshakes 415 , toxHandshakes = addHandler (handshakeH sparams) handshakes
417 , toxHandshakeCache = hscache 416 , toxHandshakeCache = hscache
418 , toxCryptoKeys = crypto 417 , toxCryptoKeys = crypto
419 , toxRouting = mkrouting dhtclient 418 , toxRouting = mkrouting dhtclient
@@ -467,13 +466,13 @@ forkTox :: Tox extra
467 -> Bool -- tcp 466 -> Bool -- tcp
468 -> IO (IO (), [NodeInfo] -> [NodeInfo] -> IO (), [NodeInfo] -> [NodeInfo] -> IO ()) 467 -> IO (IO (), [NodeInfo] -> [NodeInfo] -> IO (), [NodeInfo] -> [NodeInfo] -> IO ())
469forkTox tox with_avahi with_tcp = do 468forkTox tox with_avahi with_tcp = do
470 quitHs <- forkListener "toxHandshakes" (toxHandshakes tox) 469 quitHs <- forkListener "toxHandshakes" (dput XMan . mappend "hs-parse: ") (toxHandshakes tox)
471 quitToRoute <- forkListener "toxToRoute" (toxToRoute tox) 470 quitToRoute <- forkListener "toxToRoute" (dput XOnion . mappend "dta-parse: ") (toxToRoute tox)
472 quitOnion <- forkListener "toxOnion" (clientNet $ toxOnion tox) 471 quitOnion <- forkListener "toxOnion" (dput XOnion . mappend "onion-parse: ") (clientNet $ toxOnion tox)
473 quitDHT <- forkListener "toxDHT" (clientNet $ toxDHT tox) 472 quitDHT <- forkListener "toxDHT" (dput XDHT . mappend "dht-parse: ") (clientNet $ toxDHT tox)
474 quitNC <- forkListener "toxCrypto" (toxCrypto tox) 473 quitNC <- forkListener "toxCrypto" (dput XNetCrypto . mappend "nc-parse: ") (toxCrypto tox)
475 quitTCP <- if with_tcp 474 quitTCP <- if with_tcp
476 then forkListener "relay-client" (clientNet $ tcpClient $ tcpKademliaClient $ toxOnionRoutes tox) 475 then forkListener "relay-client" (dput XTCP . mappend "tcp-parse: ") (clientNet $ tcpClient $ tcpKademliaClient $ toxOnionRoutes tox)
477 else return $ return () 476 else return $ return ()
478 refresher4 <- forkPollForRefresh (DHT.refresher4 $ toxRouting tox) 477 refresher4 <- forkPollForRefresh (DHT.refresher4 $ toxRouting tox)
479 refresher6 <- forkPollForRefresh (DHT.refresher6 $ toxRouting tox) 478 refresher6 <- forkPollForRefresh (DHT.refresher6 $ toxRouting tox)
diff --git a/dht/src/Network/Tox/Onion/Routes.hs b/dht/src/Network/Tox/Onion/Routes.hs
index 374b9648..46ded48d 100644
--- a/dht/src/Network/Tox/Onion/Routes.hs
+++ b/dht/src/Network/Tox/Onion/Routes.hs
@@ -249,7 +249,7 @@ newOnionRouter crypto perror tcp_enabled = do
249 , tcpKademliaClient = tcp 249 , tcpKademliaClient = tcp
250 { TCP.tcpClient = 250 { TCP.tcpClient =
251 let c = TCP.tcpClient tcp 251 let c = TCP.tcpClient tcp
252 in c { clientNet = addHandler perror (handleMessage c) 252 in c { clientNet = addHandler (handleMessage c)
253 $ onInbound (updateTCP or) 253 $ onInbound (updateTCP or)
254 $ clientNet c } 254 $ clientNet c }
255 } 255 }
diff --git a/server/src/Network/QueryResponse.hs b/server/src/Network/QueryResponse.hs
index ea87abe4..69cc6f50 100644
--- a/server/src/Network/QueryResponse.hs
+++ b/server/src/Network/QueryResponse.hs
@@ -188,17 +188,16 @@ partitionTransport parse encodex tr =
188-- Note: If you add a handler to one of the branches before applying a 188-- Note: If you add a handler to one of the branches before applying a
189-- 'mergeTransports' combinator, then this handler may not block or return 189-- 'mergeTransports' combinator, then this handler may not block or return
190-- Nothing. 190-- Nothing.
191addHandler :: (err -> IO ()) -> (addr -> x -> IO (Maybe (x -> x))) -> TransportA err addr x y -> TransportA err addr x y 191addHandler :: (addr -> x -> IO (Maybe (x -> x))) -> TransportA err addr x y -> TransportA err addr x y
192addHandler onParseError f tr = tr 192addHandler f tr = tr
193 { awaitMessage = \kont -> fix $ \eat -> awaitMessage tr $ \case 193 { awaitMessage = \kont -> fix $ \eat -> awaitMessage tr $ \case
194 Arrival addr x -> f addr x >>= maybe (join $ atomically eat) (kont . Arrival addr . ($ x)) 194 Arrival addr x -> f addr x >>= maybe (join $ atomically eat) (kont . Arrival addr . ($ x))
195 ParseError e -> onParseError e >> kont (ParseError e) 195 m -> kont m
196 Terminated -> kont Terminated
197 } 196 }
198 197
199-- | Modify a 'Transport' to invoke an action upon every received packet. 198-- | Modify a 'Transport' to invoke an action upon every received packet.
200onInbound :: (addr -> x -> IO ()) -> Transport err addr x -> Transport err addr x 199onInbound :: (addr -> x -> IO ()) -> Transport err addr x -> Transport err addr x
201onInbound f tr = addHandler (const $ return ()) (\addr x -> f addr x >> return (Just id)) tr 200onInbound f tr = addHandler (\addr x -> f addr x >> return (Just id)) tr
202 201
203-- * Using a query\/response client. 202-- * Using a query\/response client.
204 203
@@ -208,19 +207,20 @@ onInbound f tr = addHandler (const $ return ()) (\addr x -> f addr x >> return (
208-- Example usage: 207-- Example usage:
209-- 208--
210-- > -- Start client. 209-- > -- Start client.
211-- > quitServer <- forkListener "listener" (clientNet client) 210-- > quitServer <- forkListener "listener" (\_ -> return()) (clientNet client)
212-- > -- Send a query q, recieve a response r. 211-- > -- Send a query q, recieve a response r.
213-- > r <- sendQuery client method q 212-- > r <- sendQuery client method q
214-- > -- Quit client. 213-- > -- Quit client.
215-- > quitServer 214-- > quitServer
216forkListener :: String -> Transport err addr x -> IO (IO ()) 215forkListener :: String -> (err -> IO ()) -> Transport err addr x -> IO (IO ())
217forkListener name client = do 216forkListener name onParseError client = do
218 setActive client True 217 setActive client True
219 thread_id <- forkIO $ do 218 thread_id <- forkIO $ do
220 myThreadId >>= flip labelThread ("listener."++name) 219 myThreadId >>= flip labelThread ("listener."++name)
221 fix $ \loop -> join $ atomically $ awaitMessage client $ \case 220 fix $ \loop -> join $ atomically $ awaitMessage client $ \case
222 Terminated -> return () 221 Terminated -> return ()
223 _ -> loop 222 ParseError e -> onParseError e >> loop
223 _ -> loop
224 dput XMisc $ "Listener died: " ++ name 224 dput XMisc $ "Listener died: " ++ name
225 return $ do 225 return $ do
226 setActive client False 226 setActive client False