summaryrefslogtreecommitdiff
path: root/dht/src/Network/Tox.hs
diff options
context:
space:
mode:
Diffstat (limited to 'dht/src/Network/Tox.hs')
-rw-r--r--dht/src/Network/Tox.hs41
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)