summaryrefslogtreecommitdiff
path: root/dht/src/Data/Tox
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/Data/Tox
parent97043e1069e172a0f389610610892ca060f395dd (diff)
STM-based awaitMessage.
Diffstat (limited to 'dht/src/Data/Tox')
-rw-r--r--dht/src/Data/Tox/Onion.hs15
1 files changed, 8 insertions, 7 deletions
diff --git a/dht/src/Data/Tox/Onion.hs b/dht/src/Data/Tox/Onion.hs
index d3c8086d..e0d7c744 100644
--- a/dht/src/Data/Tox/Onion.hs
+++ b/dht/src/Data/Tox/Onion.hs
@@ -60,7 +60,7 @@ import Data.Bits (shiftR,shiftL)
60import qualified Rank2 60import qualified Rank2
61import Util (sameAddress) 61import Util (sameAddress)
62 62
63type HandleLo a = Maybe (Either String (ByteString, SockAddr)) -> IO a 63type HandleLo a = Arrival String SockAddr ByteString -> IO a
64 64
65type UDPTransport = Transport String SockAddr ByteString 65type UDPTransport = Transport String SockAddr ByteString
66 66
@@ -264,11 +264,12 @@ forwardOnions crypto baddr udp sendTCP = udp { awaitMessage = forwardAwait crypt
264 264
265forwardAwait :: TransportCrypto 265forwardAwait :: TransportCrypto
266 -> UDPTransport 266 -> UDPTransport
267 -> (Int -> OnionMessage Encrypted -> IO ()) {- ^ TCP relay send -} -> HandleLo a -> IO a 267 -> (Int -> OnionMessage Encrypted -> IO ()) {- ^ TCP relay send -} -> HandleLo a -> STM (IO a)
268forwardAwait crypto udp sendTCP kont = do 268forwardAwait crypto udp sendTCP kont = do
269 fix $ \another -> do 269 fix $ \another0 -> do
270 let another = join $ atomically another0
270 awaitMessage udp $ \case 271 awaitMessage udp $ \case
271 m@(Just (Right (bs,saddr))) -> case B.head bs of 272 m@(Arrival saddr bs) -> case B.head bs of
272 0x80 -> forward kont bs $ handleOnionRequest (Proxy :: Proxy N0) crypto (Addressed saddr) udp another 273 0x80 -> forward kont bs $ handleOnionRequest (Proxy :: Proxy N0) crypto (Addressed saddr) udp another
273 0x81 -> forward kont bs $ handleOnionRequest (Proxy :: Proxy N1) crypto (Addressed saddr) udp another 274 0x81 -> forward kont bs $ handleOnionRequest (Proxy :: Proxy N1) crypto (Addressed saddr) udp another
274 0x82 -> forward kont bs $ handleOnionRequest (Proxy :: Proxy N2) crypto (Addressed saddr) udp another 275 0x82 -> forward kont bs $ handleOnionRequest (Proxy :: Proxy N2) crypto (Addressed saddr) udp another
@@ -278,9 +279,9 @@ forwardAwait crypto udp sendTCP kont = do
278 _ -> kont m 279 _ -> kont m
279 m -> kont m 280 m -> kont m
280 281
281forward :: forall c b b1. (Serialize b, Show b) => 282forward :: (Serialize b, Show b) =>
282 (Maybe (Either String b1) -> c) -> ByteString -> (b -> c) -> c 283 HandleLo a -> ByteString -> (b -> IO a) -> IO a
283forward kont bs f = either (kont . Just . Left) f $ decode $ B.tail bs 284forward kont bs f = either (kont . ParseError) f $ decode $ B.tail bs
284 285
285class SumToThree a b 286class SumToThree a b
286 287