diff options
Diffstat (limited to 'dht/src/Network/Tox/Transport.hs')
-rw-r--r-- | dht/src/Network/Tox/Transport.hs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/dht/src/Network/Tox/Transport.hs b/dht/src/Network/Tox/Transport.hs index b017f7be..e90917f6 100644 --- a/dht/src/Network/Tox/Transport.hs +++ b/dht/src/Network/Tox/Transport.hs | |||
@@ -18,18 +18,24 @@ import Network.Tox.Onion.Transport | |||
18 | import Network.Tox.Crypto.Transport | 18 | import Network.Tox.Crypto.Transport |
19 | import Network.Tox.Onion.Routes | 19 | import Network.Tox.Onion.Routes |
20 | 20 | ||
21 | import Control.Applicative | ||
21 | import Control.Concurrent.STM | 22 | import Control.Concurrent.STM |
22 | import qualified Data.ByteString as B | 23 | import qualified Data.ByteString as B |
23 | import qualified Data.Dependent.Map as DMap | 24 | import qualified Data.Dependent.Map as DMap |
24 | import Data.Dependent.Sum | 25 | import Data.Dependent.Sum |
25 | import Data.Functor.Identity | 26 | import Data.Functor.Identity |
27 | import Data.Maybe | ||
26 | import Network.Socket | 28 | import Network.Socket |
27 | 29 | ||
28 | pendingCookiesUDP :: TransportCrypto -> STM [(SockAddr, (Int, PublicKey))] | 30 | pendingCookiesUDP :: TransportCrypto -> SockAddr -> STM (Maybe UDP.NodeInfo) |
29 | pendingCookiesUDP crypto = readTVar $ pendingCookies crypto | 31 | pendingCookiesUDP crypto saddr = do |
32 | cs <- readTVar $ pendingCookies crypto | ||
33 | return $ do | ||
34 | (_,key) <- lookup saddr cs <|> listToMaybe (map snd cs) | ||
35 | either (const Nothing) Just $ nodeInfo (key2id key) saddr | ||
30 | 36 | ||
31 | pendingCookiesTCP :: TransportCrypto -> STM [(ViaRelay, (Int, PublicKey))] | 37 | pendingCookiesTCP :: ViaRelay -> STM (Maybe ViaRelay) |
32 | pendingCookiesTCP crypto = return [] -- TODO | 38 | pendingCookiesTCP ni = return $ Just ni |
33 | 39 | ||
34 | toxTransport :: | 40 | toxTransport :: |
35 | TransportCrypto | 41 | TransportCrypto |
@@ -52,7 +58,7 @@ toxTransport crypto orouter closeLookup addr udp relaynet _ tcp2client = do | |||
52 | -- rlynet0 = layerTransportM (DHT.decrypt crypto Multi.relayNodeId) (DHT.encrypt crypto Multi.relayNodeId) relaynet | 58 | -- rlynet0 = layerTransportM (DHT.decrypt crypto Multi.relayNodeId) (DHT.encrypt crypto Multi.relayNodeId) relaynet |
53 | (netcryptoTCP, relaynet0) <- partitionTransport parseCrypto encodeCrypto relaynet | 59 | (netcryptoTCP, relaynet0) <- partitionTransport parseCrypto encodeCrypto relaynet |
54 | (dhtTCP,relaynet1) <- partitionTransportM | 60 | (dhtTCP,relaynet1) <- partitionTransportM |
55 | (parseDHTAddr (pendingCookiesTCP crypto) (\nid viarelay -> Right viarelay)) | 61 | (parseDHTAddr pendingCookiesTCP (\nid viarelay -> Right viarelay)) |
56 | (fmap Just . encodeDHTAddr id) | 62 | (fmap Just . encodeDHTAddr id) |
57 | relaynet0 | 63 | relaynet0 |
58 | let _ = dhtTCP :: Transport String ViaRelay (DHTMessage Encrypted8) | 64 | let _ = dhtTCP :: Transport String ViaRelay (DHTMessage Encrypted8) |