diff options
Diffstat (limited to 'dht/TCPProber.hs')
-rw-r--r-- | dht/TCPProber.hs | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/dht/TCPProber.hs b/dht/TCPProber.hs index faf8b35c..17b68f64 100644 --- a/dht/TCPProber.hs +++ b/dht/TCPProber.hs | |||
@@ -26,6 +26,7 @@ import Data.Wrapper.PSQ as PSQ | |||
26 | import Network.Kademlia.Search | 26 | import Network.Kademlia.Search |
27 | import Network.Tox.NodeId | 27 | import Network.Tox.NodeId |
28 | import qualified Network.Tox.TCP as TCP | 28 | import qualified Network.Tox.TCP as TCP |
29 | import Network.QueryResponse as QR | ||
29 | 30 | ||
30 | -- Probe TCP ports in a staggered fashion to up the odds of discovering | 31 | -- Probe TCP ports in a staggered fashion to up the odds of discovering |
31 | -- a higher priority port like 443. | 32 | -- a higher priority port like 443. |
@@ -156,7 +157,7 @@ runProbeQueue prober client maxjobs = do | |||
156 | loop | 157 | loop |
157 | 158 | ||
158 | 159 | ||
159 | getNodes :: TCPProber -> TCP.TCPClient err Nonce8 -> NodeId -> TCP.NodeInfo -> IO (Maybe ([TCP.NodeInfo],[TCP.NodeInfo],Maybe ())) | 160 | getNodes :: TCPProber -> TCP.TCPClient err Nonce8 -> NodeId -> TCP.NodeInfo -> IO (Result ([TCP.NodeInfo],[TCP.NodeInfo],Maybe ())) |
160 | getNodes prober tcp seeking dst = do | 161 | getNodes prober tcp seeking dst = do |
161 | r <- TCP.getUDPNodes' tcp seeking (TCP.udpNodeInfo dst) | 162 | r <- TCP.getUDPNodes' tcp seeking (TCP.udpNodeInfo dst) |
162 | dput XTCP $ "Got via TCP nodes: " ++ show r | 163 | dput XTCP $ "Got via TCP nodes: " ++ show r |
@@ -164,14 +165,16 @@ getNodes prober tcp seeking dst = do | |||
164 | where ns' = do | 165 | where ns' = do |
165 | n <- ns | 166 | n <- ns |
166 | [ TCP.NodeInfo n 0 ] | 167 | [ TCP.NodeInfo n 0 ] |
167 | fmap join $ forM r $ \(ns,gw) -> do | 168 | case r of |
169 | Success (ns,gw) -> do | ||
168 | let ts = tcps ns | 170 | let ts = tcps ns |
169 | if TCP.nodeId gw == TCP.nodeId dst | 171 | if TCP.nodeId gw == TCP.nodeId dst |
170 | then return $ Just ts | 172 | then return $ Success ts |
171 | else do | 173 | else do |
172 | enqueueProbe prober (TCP.udpNodeInfo dst) | 174 | enqueueProbe prober (TCP.udpNodeInfo dst) |
173 | return $ Just ts | 175 | return $ Success ts |
174 | return $ Just ts | 176 | return $ Success ts |
177 | _ -> return $ fmap (const $ error "TCPProber.getNodes: The impossible happened!") r | ||
175 | 178 | ||
176 | nodeSearch :: TCPProber -> TCP.TCPClient err Nonce8 -> Search NodeId (IP, PortNumber) () TCP.NodeInfo TCP.NodeInfo | 179 | nodeSearch :: TCPProber -> TCP.TCPClient err Nonce8 -> Search NodeId (IP, PortNumber) () TCP.NodeInfo TCP.NodeInfo |
177 | nodeSearch prober tcp = Search | 180 | nodeSearch prober tcp = Search |