summaryrefslogtreecommitdiff
path: root/dht/src/Network/Tox/DHT/Transport.hs
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-12-14 01:03:07 -0500
committerJoe Crayne <joe@jerkface.net>2020-01-01 23:26:05 -0500
commitb5a3c7b92e7effcd234037241b00f9f29773d870 (patch)
tree4047e11c9102585001dd3be95855038a6816a5c2 /dht/src/Network/Tox/DHT/Transport.hs
parent97043e1069e172a0f389610610892ca060f395dd (diff)
STM-based awaitMessage.
Diffstat (limited to 'dht/src/Network/Tox/DHT/Transport.hs')
-rw-r--r--dht/src/Network/Tox/DHT/Transport.hs8
1 files changed, 4 insertions, 4 deletions
diff --git a/dht/src/Network/Tox/DHT/Transport.hs b/dht/src/Network/Tox/DHT/Transport.hs
index 7475b3b1..7414343d 100644
--- a/dht/src/Network/Tox/DHT/Transport.hs
+++ b/dht/src/Network/Tox/DHT/Transport.hs
@@ -59,7 +59,7 @@ import GHC.Generics
59import Network.Socket 59import Network.Socket
60 60
61type DHTTransport = Transport String NodeInfo (DHTMessage Encrypted8) 61type DHTTransport = Transport String NodeInfo (DHTMessage Encrypted8)
62type HandleHi a = Maybe (Either String (DHTMessage Encrypted8, NodeInfo)) -> IO a 62type HandleHi a = Arrival String NodeInfo (DHTMessage Encrypted8) -> IO a
63 63
64 64
65data DHTMessage (f :: * -> *) 65data DHTMessage (f :: * -> *)
@@ -399,13 +399,13 @@ instance Serialize CookieRequest where
399forwardDHTRequests :: TransportCrypto -> (PublicKey -> IO (Maybe NodeInfo)) -> DHTTransport -> DHTTransport 399forwardDHTRequests :: TransportCrypto -> (PublicKey -> IO (Maybe NodeInfo)) -> DHTTransport -> DHTTransport
400forwardDHTRequests crypto closeLookup dht = dht { awaitMessage = await' } 400forwardDHTRequests crypto closeLookup dht = dht { awaitMessage = await' }
401 where 401 where
402 await' :: HandleHi a -> IO a 402 await' :: HandleHi a -> STM (IO a)
403 await' pass = awaitMessage dht $ \case 403 await' pass = awaitMessage dht $ \case
404 Just (Right (m@(DHTDHTRequest target payload),src)) | target /= transportPublic crypto 404 Arrival src m@(DHTDHTRequest target payload) | target /= transportPublic crypto
405 -> do mni <- closeLookup target 405 -> do mni <- closeLookup target
406 -- Forward the message if the target is in our close list. 406 -- Forward the message if the target is in our close list.
407 forM_ mni $ \ni -> sendMessage dht ni m 407 forM_ mni $ \ni -> sendMessage dht ni m
408 await' pass 408 join $ atomically (await' pass)
409 m -> pass m 409 m -> pass m
410 410
411encrypt :: TransportCrypto -> DHTMessage ((,) Nonce8) -> NodeInfo -> IO (DHTMessage Encrypted8, NodeInfo) 411encrypt :: TransportCrypto -> DHTMessage ((,) Nonce8) -> NodeInfo -> IO (DHTMessage Encrypted8, NodeInfo)