From 2425c1a5df23d7051461d8f9fd32b5d5aa03e104 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Tue, 17 Dec 2019 13:22:28 -0500 Subject: Schedule TCP chat-link session attempts. --- dht/src/Data/Tox/DHT/Multi.hs | 17 ++++++++++++++--- dht/src/Data/Tox/Onion.hs | 5 +++-- 2 files changed, 17 insertions(+), 5 deletions(-) (limited to 'dht/src/Data/Tox') diff --git a/dht/src/Data/Tox/DHT/Multi.hs b/dht/src/Data/Tox/DHT/Multi.hs index 3f91387c..f769e384 100644 --- a/dht/src/Data/Tox/DHT/Multi.hs +++ b/dht/src/Data/Tox/DHT/Multi.hs @@ -7,13 +7,14 @@ {-# LANGUAGE TypeFamilies #-} module Data.Tox.DHT.Multi where +import Crypto.PubKey.Curve25519 (PublicKey) import qualified Network.Tox.NodeId as UDP ;import Network.Tox.NodeId (NodeId) import qualified Network.Tox.TCP.NodeId as TCP -import Data.Tox.Relay +import Data.Tox.Relay hiding (NodeInfo) import Network.Address (either4or6) -import Network.Tox.TCP as TCP (ViaRelay(..)) -import Network.QueryResponse (Tagged(..)) +import Network.Tox.TCP as TCP (ViaRelay(..), tcpConnectionRequest_) +import Network.QueryResponse as QR (Tagged(..), Client) import Data.Dependent.Sum import Data.GADT.Compare @@ -124,3 +125,13 @@ relayNodeId (ViaRelay _ nid _) = nid udpNode :: DSum T Identity -> Maybe UDP.NodeInfo udpNode (UDP :=> Identity ni) = Just ni udpNode _ = Nothing + +sessionAddr :: DSum T Identity -> DSum S Identity +sessionAddr (UDP :=> Identity ni) = SessionUDP ==> UDP.nodeAddr ni +sessionAddr (TCP :=> Identity vr) = SessionTCP ==> vr + +tcpConnectionRequest :: QR.Client err PacketNumber tid TCP.NodeInfo (Bool, RelayPacket) + -> PublicKey -> TCP.NodeInfo -> IO (Maybe NodeInfo) +tcpConnectionRequest client pubkey ni = do + mcon <- tcpConnectionRequest_ client pubkey ni + return $ fmap (\conid -> TCP ==> ViaRelay (Just conid) (UDP.key2id pubkey) ni) mcon diff --git a/dht/src/Data/Tox/Onion.hs b/dht/src/Data/Tox/Onion.hs index e19f71b6..a9bc4e1d 100644 --- a/dht/src/Data/Tox/Onion.hs +++ b/dht/src/Data/Tox/Onion.hs @@ -125,12 +125,12 @@ data OnionDestination r = OnionToOwner { onionNodeInfo :: NodeInfo , onionReturnPath :: ReturnPath N3 -- ^ Somebody else's path to us. - } + } -- ^ incoming queries and outgoing responses | OnionDestination { onionAliasSelector' :: AliasSelector , onionNodeInfo :: NodeInfo , onionRouteSpec :: Maybe r -- ^ Our own onion-path. - } + } -- ^ outgoing queries and incoming responses deriving Show onionAliasSelector :: OnionDestination r -> AliasSelector @@ -213,6 +213,7 @@ putOnionMsg (OnionToRoute pubkey a) = putOnionAsymm 0x85 (putPublicKey putOnionMsg (OnionAnnounceResponse n8 n24 x) = put (0x84 :: Word8) >> put n8 >> put n24 >> put x putOnionMsg (OnionToRouteResponse a) = putOnionAsymm 0x86 (return ()) a +-- | /r/ parameter for 'OnionDestination' newtype RouteId = RouteId Int deriving Show -- cgit v1.2.3