diff options
author | Joe Crayne <joe@jerkface.net> | 2019-12-14 01:03:07 -0500 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2020-01-01 23:26:05 -0500 |
commit | b5a3c7b92e7effcd234037241b00f9f29773d870 (patch) | |
tree | 4047e11c9102585001dd3be95855038a6816a5c2 /dht/src/Network/Tox/DHT/Transport.hs | |
parent | 97043e1069e172a0f389610610892ca060f395dd (diff) |
STM-based awaitMessage.
Diffstat (limited to 'dht/src/Network/Tox/DHT/Transport.hs')
-rw-r--r-- | dht/src/Network/Tox/DHT/Transport.hs | 8 |
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 | |||
59 | import Network.Socket | 59 | import Network.Socket |
60 | 60 | ||
61 | type DHTTransport = Transport String NodeInfo (DHTMessage Encrypted8) | 61 | type DHTTransport = Transport String NodeInfo (DHTMessage Encrypted8) |
62 | type HandleHi a = Maybe (Either String (DHTMessage Encrypted8, NodeInfo)) -> IO a | 62 | type HandleHi a = Arrival String NodeInfo (DHTMessage Encrypted8) -> IO a |
63 | 63 | ||
64 | 64 | ||
65 | data DHTMessage (f :: * -> *) | 65 | data DHTMessage (f :: * -> *) |
@@ -399,13 +399,13 @@ instance Serialize CookieRequest where | |||
399 | forwardDHTRequests :: TransportCrypto -> (PublicKey -> IO (Maybe NodeInfo)) -> DHTTransport -> DHTTransport | 399 | forwardDHTRequests :: TransportCrypto -> (PublicKey -> IO (Maybe NodeInfo)) -> DHTTransport -> DHTTransport |
400 | forwardDHTRequests crypto closeLookup dht = dht { awaitMessage = await' } | 400 | forwardDHTRequests 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 | ||
411 | encrypt :: TransportCrypto -> DHTMessage ((,) Nonce8) -> NodeInfo -> IO (DHTMessage Encrypted8, NodeInfo) | 411 | encrypt :: TransportCrypto -> DHTMessage ((,) Nonce8) -> NodeInfo -> IO (DHTMessage Encrypted8, NodeInfo) |