diff options
Diffstat (limited to 'src/Network/Tox.hs')
-rw-r--r-- | src/Network/Tox.hs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/Network/Tox.hs b/src/Network/Tox.hs index 3c3bce49..170a07e8 100644 --- a/src/Network/Tox.hs +++ b/src/Network/Tox.hs | |||
@@ -1,3 +1,4 @@ | |||
1 | {-# LANGUAGE ViewPatterns #-} | ||
1 | {-# LANGUAGE CPP #-} | 2 | {-# LANGUAGE CPP #-} |
2 | {-# LANGUAGE DeriveDataTypeable #-} | 3 | {-# LANGUAGE DeriveDataTypeable #-} |
3 | {-# LANGUAGE DeriveFoldable #-} | 4 | {-# LANGUAGE DeriveFoldable #-} |
@@ -19,7 +20,11 @@ import Debug.Trace | |||
19 | import Control.Exception hiding (Handler) | 20 | import Control.Exception hiding (Handler) |
20 | import Control.Applicative | 21 | import Control.Applicative |
21 | import Control.Arrow | 22 | import Control.Arrow |
22 | import Control.Concurrent (MVar,killThread) | 23 | #ifdef THREAD_DEBUG |
24 | import Control.Concurrent.Lifted.Instrument | ||
25 | #else | ||
26 | import Control.Concurrent.Lifted | ||
27 | #endif | ||
23 | import Control.Concurrent.STM | 28 | import Control.Concurrent.STM |
24 | import Control.Monad | 29 | import Control.Monad |
25 | import Control.Monad.Fix | 30 | import Control.Monad.Fix |
@@ -113,7 +118,7 @@ import Data.HashMap.Strict (HashMap) | |||
113 | import qualified Data.Map.Strict as Map | 118 | import qualified Data.Map.Strict as Map |
114 | import Control.Concurrent (threadDelay) | 119 | import Control.Concurrent (threadDelay) |
115 | import DPut | 120 | import DPut |
116 | 121 | import Network.Tox.Avahi | |
117 | 122 | ||
118 | newCrypto :: IO TransportCrypto | 123 | newCrypto :: IO TransportCrypto |
119 | newCrypto = do | 124 | newCrypto = do |
@@ -476,6 +481,17 @@ newTox keydb addr mbSessionsState suppliedDHTKey = do | |||
476 | onionTimeout :: Tox -> DHT.TransactionId -> Onion.OnionDestination RouteId -> STM (Onion.OnionDestination RouteId, Int) | 481 | onionTimeout :: Tox -> DHT.TransactionId -> Onion.OnionDestination RouteId -> STM (Onion.OnionDestination RouteId, Int) |
477 | onionTimeout Tox { toxOnionRoutes = or } (DHT.TransactionId n8 _) od = lookupTimeout or n8 od | 482 | onionTimeout Tox { toxOnionRoutes = or } (DHT.TransactionId n8 _) od = lookupTimeout or n8 od |
478 | 483 | ||
484 | routing4nodeInfo :: DHT.Routing -> IO NodeInfo | ||
485 | routing4nodeInfo (DHT.routing4 -> tv) = R.thisNode <$> readTVarIO tv | ||
486 | |||
487 | dnssdAnnounce :: Tox -> IO () | ||
488 | dnssdAnnounce (toxRouting -> r) = do | ||
489 | ni <- routing4nodeInfo r | ||
490 | announceToxService (nodePort ni) (nodeId ni) | ||
491 | |||
492 | dnssdDiscover :: Tox -> NodeInfo -> IO () | ||
493 | dnssdDiscover (toxDHT -> client) ni = void $ DHT.ping client ni | ||
494 | |||
479 | forkTox :: Tox -> IO (IO (), [NodeInfo] -> [NodeInfo] -> IO (), [NodeInfo] -> [NodeInfo] -> IO ()) | 495 | forkTox :: Tox -> IO (IO (), [NodeInfo] -> [NodeInfo] -> IO (), [NodeInfo] -> [NodeInfo] -> IO ()) |
480 | forkTox tox = do | 496 | forkTox tox = do |
481 | _ <- forkListener "toxHandshakes" (toxHandshakes tox) | 497 | _ <- forkListener "toxHandshakes" (toxHandshakes tox) |
@@ -485,6 +501,8 @@ forkTox tox = do | |||
485 | quit <- forkListener "toxCrypto" (toxCrypto tox) | 501 | quit <- forkListener "toxCrypto" (toxCrypto tox) |
486 | forkPollForRefresh (DHT.refresher4 $ toxRouting tox) | 502 | forkPollForRefresh (DHT.refresher4 $ toxRouting tox) |
487 | forkPollForRefresh (DHT.refresher6 $ toxRouting tox) | 503 | forkPollForRefresh (DHT.refresher6 $ toxRouting tox) |
504 | dnssdIn <- forkIO $ queryToxService (dnssdDiscover tox) | ||
505 | dnssdOut <- forkIO $ dnssdAnnounce tox | ||
488 | keygc <- Onion.forkAnnouncedKeysGC (toxAnnouncedKeys tox) | 506 | keygc <- Onion.forkAnnouncedKeysGC (toxAnnouncedKeys tox) |
489 | return ( killThread keygc >> quit | 507 | return ( killThread keygc >> quit |
490 | , bootstrap (DHT.refresher4 $ toxRouting tox) | 508 | , bootstrap (DHT.refresher4 $ toxRouting tox) |