diff options
author | joe <joe@jerkface.net> | 2017-09-20 20:47:10 -0400 |
---|---|---|
committer | joe <joe@jerkface.net> | 2017-09-20 20:47:10 -0400 |
commit | 6b822e47e4995e4aaf4cb1cc034c34314bd51da2 (patch) | |
tree | 5e83ab1f500ba850b25bcdd5f4d54bf03809dd22 /src/Network/Tox/Onion/Handlers.hs | |
parent | 447e9e53661edd7c633f757eb3403298849e4c35 (diff) |
Added outbound initiation addresses to the Onion transport.
Diffstat (limited to 'src/Network/Tox/Onion/Handlers.hs')
-rw-r--r-- | src/Network/Tox/Onion/Handlers.hs | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/Network/Tox/Onion/Handlers.hs b/src/Network/Tox/Onion/Handlers.hs index 9dc6177c..72398735 100644 --- a/src/Network/Tox/Onion/Handlers.hs +++ b/src/Network/Tox/Onion/Handlers.hs | |||
@@ -35,7 +35,7 @@ import Data.Bits | |||
35 | import Data.Ord | 35 | import Data.Ord |
36 | import Data.Functor.Identity | 36 | import Data.Functor.Identity |
37 | 37 | ||
38 | type Client = QR.Client String PacketKind TransactionId OnionToOwner Message | 38 | type Client = QR.Client String PacketKind TransactionId OnionDestination Message |
39 | type Message = OnionMessage Identity | 39 | type Message = OnionMessage Identity |
40 | 40 | ||
41 | classify :: Message -> MessageClass String PacketKind TransactionId | 41 | classify :: Message -> MessageClass String PacketKind TransactionId |
@@ -59,7 +59,7 @@ classify msg = go msg | |||
59 | -- The reason for this 20 second timeout in toxcore is that it gives a reasonable | 59 | -- The reason for this 20 second timeout in toxcore is that it gives a reasonable |
60 | -- time (20 to 40 seconds) for a peer to announce himself while taking in count | 60 | -- time (20 to 40 seconds) for a peer to announce himself while taking in count |
61 | -- all the possible delays with some extra seconds. | 61 | -- all the possible delays with some extra seconds. |
62 | announceH :: Routing -> TVar SessionTokens -> TVar AnnouncedKeys -> OnionToOwner -> AnnounceRequest -> IO AnnounceResponse | 62 | announceH :: Routing -> TVar SessionTokens -> TVar AnnouncedKeys -> OnionDestination -> AnnounceRequest -> IO AnnounceResponse |
63 | announceH routing toks keydb (OnionToOwner naddr retpath) req = do | 63 | announceH routing toks keydb (OnionToOwner naddr retpath) req = do |
64 | case () of | 64 | case () of |
65 | _ | announcePingId req == zeros32 | 65 | _ | announcePingId req == zeros32 |
@@ -89,16 +89,16 @@ announceH routing toks keydb (OnionToOwner naddr retpath) req = do | |||
89 | then Nonce32 . toPaddedByteString 32 <$> grantToken toks naddr | 89 | then Nonce32 . toPaddedByteString 32 <$> grantToken toks naddr |
90 | else return $ zeros32 | 90 | else return $ zeros32 |
91 | let k = case record of | 91 | let k = case record of |
92 | Nothing -> NotStored newtok | 92 | Nothing -> NotStored newtok |
93 | Just (OnionToOwner {}) | storing -> Acknowledged newtok | 93 | Just (OnionDestination {}) | storing -> Acknowledged newtok |
94 | Just (OnionToOwner ni _) -> SendBackKey $ id2key (nodeId ni) | 94 | Just (OnionToOwner ni _) -> SendBackKey $ id2key (nodeId ni) |
95 | let response = AnnounceResponse k ns | 95 | let response = AnnounceResponse k ns |
96 | hPutStrLn stderr $ unwords ["Announce:", show req, "-reply->", show response] | 96 | hPutStrLn stderr $ unwords ["Announce:", show req, "-reply->", show response] |
97 | return response | 97 | return response |
98 | 98 | ||
99 | dataToRouteH :: | 99 | dataToRouteH :: |
100 | TVar AnnouncedKeys | 100 | TVar AnnouncedKeys |
101 | -> Transport err OnionToOwner (OnionMessage f) | 101 | -> Transport err OnionDestination (OnionMessage f) |
102 | -> addr | 102 | -> addr |
103 | -> OnionMessage f | 103 | -> OnionMessage f |
104 | -> IO () | 104 | -> IO () |
@@ -118,11 +118,11 @@ type NodeDistance = NodeId | |||
118 | 118 | ||
119 | data AnnouncedKeys = AnnouncedKeys | 119 | data AnnouncedKeys = AnnouncedKeys |
120 | { keyByAge :: !(PSQ NodeId (Down POSIXTime)) -- timeout of 300 seconds | 120 | { keyByAge :: !(PSQ NodeId (Down POSIXTime)) -- timeout of 300 seconds |
121 | , keyAssoc :: !(MinMaxPSQ' NodeId NodeDistance (Int,OnionToOwner)) | 121 | , keyAssoc :: !(MinMaxPSQ' NodeId NodeDistance (Int,OnionDestination)) |
122 | } | 122 | } |
123 | 123 | ||
124 | 124 | ||
125 | insertKey :: POSIXTime -> NodeId -> OnionToOwner -> NodeDistance -> AnnouncedKeys -> AnnouncedKeys | 125 | insertKey :: POSIXTime -> NodeId -> OnionDestination -> NodeDistance -> AnnouncedKeys -> AnnouncedKeys |
126 | insertKey tm pub toxpath d keydb = AnnouncedKeys | 126 | insertKey tm pub toxpath d keydb = AnnouncedKeys |
127 | { keyByAge = PSQ.insert pub (Down tm) (keyByAge keydb) | 127 | { keyByAge = PSQ.insert pub (Down tm) (keyByAge keydb) |
128 | , keyAssoc = case MinMaxPSQ.lookup' pub (keyAssoc keydb) of | 128 | , keyAssoc = case MinMaxPSQ.lookup' pub (keyAssoc keydb) of |
@@ -134,12 +134,12 @@ areq :: Message -> Either String AnnounceRequest | |||
134 | areq (OnionAnnounce assym) = Right $ fst $ runIdentity $ assymData assym | 134 | areq (OnionAnnounce assym) = Right $ fst $ runIdentity $ assymData assym |
135 | areq _ = Left "Unexpected non-announce OnionMessage" | 135 | areq _ = Left "Unexpected non-announce OnionMessage" |
136 | 136 | ||
137 | handlers :: Transport err OnionToOwner Message | 137 | handlers :: Transport err OnionDestination Message |
138 | -> Routing | 138 | -> Routing |
139 | -> TVar SessionTokens | 139 | -> TVar SessionTokens |
140 | -> TVar AnnouncedKeys | 140 | -> TVar AnnouncedKeys |
141 | -> PacketKind | 141 | -> PacketKind |
142 | -> Maybe (MethodHandler String TransactionId OnionToOwner Message) | 142 | -> Maybe (MethodHandler String TransactionId OnionDestination Message) |
143 | handlers net routing toks keydb AnnounceType | 143 | handlers net routing toks keydb AnnounceType |
144 | = Just | 144 | = Just |
145 | $ MethodHandler areq (\(TransactionId n8 n24) src dst -> OnionAnnounceResponse n8 n24 . Identity) | 145 | $ MethodHandler areq (\(TransactionId n8 n24) src dst -> OnionAnnounceResponse n8 n24 . Identity) |