diff options
Diffstat (limited to 'dht/src/Network/Tox.hs')
-rw-r--r-- | dht/src/Network/Tox.hs | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/dht/src/Network/Tox.hs b/dht/src/Network/Tox.hs index a7e5d2c2..f136ab96 100644 --- a/dht/src/Network/Tox.hs +++ b/dht/src/Network/Tox.hs | |||
@@ -315,9 +315,8 @@ newToxOverTransport keydb addr onNewSession (crypto,roster) udp tcp = do | |||
315 | let lookupClose _ = return Nothing | 315 | let lookupClose _ = return Nothing |
316 | 316 | ||
317 | mkrouting <- DHT.newRouting addr crypto updateIP updateIP | 317 | mkrouting <- DHT.newRouting addr crypto updateIP updateIP |
318 | (orouter,relaynet,onioncryptTCP0) <- newOnionRouter crypto (dput XRoutes) (maybe False (const True) tcp) | 318 | (orouter,relaynet,onioncryptTCP) <- newOnionRouter crypto (dput XRoutes) (maybe False (const True) tcp) |
319 | (dtacryptTCP,onioncryptTCP) <- partitionTransportM (Onion.parseDataToRoute crypto) (Onion.encodeDataToRoute crypto) onioncryptTCP0 | 319 | (cryptonet,dhtcrypt,onioncryptUDP,handshakes) |
320 | (cryptonet,dhtcrypt,onioncryptUDP,dtacryptUDP,handshakes) | ||
321 | <- toxTransport crypto orouter lookupClose addr udp relaynet | 320 | <- toxTransport crypto orouter lookupClose addr udp relaynet |
322 | (\dst x -> sendMessage (clientNet $ tcpClient $ tcpKademliaClient orouter) dst (True,x)) | 321 | (\dst x -> sendMessage (clientNet $ tcpClient $ tcpKademliaClient orouter) dst (True,x)) |
323 | (fromMaybe (\_ _ -> return ()) tcp) | 322 | (fromMaybe (\_ _ -> return ()) tcp) |
@@ -356,31 +355,29 @@ newToxOverTransport keydb addr onNewSession (crypto,roster) udp tcp = do | |||
356 | nil <- nullSessionTokens | 355 | nil <- nullSessionTokens |
357 | atomically $ newTVar nil { maxInterval = 20 } -- 20 second timeout on announce ping-ids. | 356 | atomically $ newTVar nil { maxInterval = 20 } -- 20 second timeout on announce ping-ids. |
358 | 357 | ||
359 | onioncrypt <- mergeTransports $ DMap.fromList | 358 | onioncrypt <- |
360 | [ Multi.OnionUDP :=> ByAddress onioncryptUDP | 359 | layerTransportM (\msg addr -> return $ Right (msg,Multi.untagOnion addr)) |
361 | , Multi.OnionTCP :=> ByAddress {- $ onInbound updateOnTCP -} onioncryptTCP ] | 360 | (\msg addr -> do |
362 | dtacrypt0 <- mergeTransports $ DMap.fromList | ||
363 | [ Multi.RendezvousUDP :=> ByAddress dtacryptUDP | ||
364 | , Multi.RendezvousTCP :=> ByAddress dtacryptTCP | ||
365 | ] | ||
366 | oniondrg <- drgNew | ||
367 | let onionnet = layerTransportM | ||
368 | (\msg od -> Onion.decrypt crypto msg $ Multi.untagOnion od) | ||
369 | (\msg od -> do | ||
370 | (msg', od') <- Onion.encrypt crypto msg od | ||
371 | -- TODO: lookupRoute is unnecessarily done twice | 361 | -- TODO: lookupRoute is unnecessarily done twice |
372 | -- because that was convenient for me. The other | 362 | -- because that was convenient for me. The other |
373 | -- call was done when building the transport. | 363 | -- call was done when building the onioncryptUDP |
364 | -- transport. | ||
374 | -- Consider simplifying this. | 365 | -- Consider simplifying this. |
375 | mtcp <- case od' of | 366 | mtcp <- case addr of |
376 | Onion.OnionDestination _ ni (Just rid) | 367 | Onion.OnionDestination _ ni (Just rid) |
377 | -> (>>= Onion.routeRelayPort) <$> lookupRoute orouter' ni rid | 368 | -> (>>= Onion.routeRelayPort) <$> lookupRoute orouter' ni rid |
378 | _ -> return Nothing | 369 | _ -> return Nothing |
379 | return (msg', maybe (Multi.OnionUDP ==> od') (const $ Multi.OnionTCP ==> od') mtcp)) | 370 | return (msg, maybe (Multi.OnionUDP ==> addr) (const $ Multi.OnionTCP ==> addr) mtcp)) |
380 | onioncrypt | 371 | <$> mergeTransports (DMap.fromList |
381 | dtacrypt = layerTransport (\msg addr -> Right (msg,Multi.untagRendezvous addr)) | 372 | [ Multi.OnionUDP :=> ByAddress onioncryptUDP |
382 | (\msg addr -> (msg, Multi.RendezvousUDP ==> addr)) | 373 | , Multi.OnionTCP :=> ByAddress {- $ onInbound updateOnTCP -} onioncryptTCP ]) |
383 | dtacrypt0 | 374 | |
375 | -- dtacrypt :: Transport String AnnouncedRendezvous (PublicKey,OnionData) | ||
376 | (dtacrypt,onioncrypt) <- partitionTransportM (Onion.parseDataToRoute crypto) (Onion.encodeDataToRoute crypto) onioncrypt | ||
377 | oniondrg <- drgNew | ||
378 | let onionnet = layerTransportM (\msg od -> Onion.decrypt crypto msg od) | ||
379 | (\msg od -> Onion.encrypt crypto msg od) | ||
380 | onioncrypt | ||
384 | onionclient <- newClient oniondrg onionnet (const Onion.classify) | 381 | onionclient <- newClient oniondrg onionnet (const Onion.classify) |
385 | (getOnionAlias crypto $ R.thisNode <$> readTVar (DHT.routing4 $ mkrouting dhtclient)) | 382 | (getOnionAlias crypto $ R.thisNode <$> readTVar (DHT.routing4 $ mkrouting dhtclient)) |
386 | (const $ Onion.handlers onionnet (mkrouting dhtclient) toks keydb) | 383 | (const $ Onion.handlers onionnet (mkrouting dhtclient) toks keydb) |