summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Crayne <jim.crayne@gmail.com>2020-01-24 10:27:14 +0000
committerJames Crayne <jim.crayne@gmail.com>2020-01-24 10:27:14 +0000
commitaebcf4e527063a10f4b22ed476766926a45d4f50 (patch)
treeadc2931b88fdaabbe50eeec7accf40bad877dc6a
parent8db413d9a903f6f603b078f86f80a38306b9034d (diff)
Catch exceptions on no avahi dbus service.
-rw-r--r--dht/dht-client.cabal1
-rw-r--r--dht/src/DebugTag.hs1
-rw-r--r--dht/src/Network/Tox.hs14
3 files changed, 14 insertions, 2 deletions
diff --git a/dht/dht-client.cabal b/dht/dht-client.cabal
index 79a72c05..e56d67f4 100644
--- a/dht/dht-client.cabal
+++ b/dht/dht-client.cabal
@@ -158,6 +158,7 @@ library
158 build-depends: base 158 build-depends: base
159 , containers 159 , containers
160 , constraints 160 , constraints
161 , dbus
161 , dependent-map 162 , dependent-map
162 , array 163 , array
163 , hashable 164 , hashable
diff --git a/dht/src/DebugTag.hs b/dht/src/DebugTag.hs
index 93b5b74f..37593e63 100644
--- a/dht/src/DebugTag.hs
+++ b/dht/src/DebugTag.hs
@@ -7,6 +7,7 @@ data DebugTag
7 = XAnnounce 7 = XAnnounce
8 | XAnnounceResponse 8 | XAnnounceResponse
9 | XBitTorrent 9 | XBitTorrent
10 | XDBus
10 | XLan 11 | XLan
11 | XMan 12 | XMan
12 | XNetCrypto 13 | XNetCrypto
diff --git a/dht/src/Network/Tox.hs b/dht/src/Network/Tox.hs
index 1628b435..e0704f6f 100644
--- a/dht/src/Network/Tox.hs
+++ b/dht/src/Network/Tox.hs
@@ -88,6 +88,8 @@ import Network.SessionTransports
88import Network.Kademlia.Search 88import Network.Kademlia.Search
89import HandshakeCache 89import HandshakeCache
90import Data.ByteString.Base16 as Base16 90import Data.ByteString.Base16 as Base16
91import qualified DBus.Client as DBus
92import Control.Exception
91 93
92updateIP :: TVar (R.BucketList NodeInfo) -> SockAddr -> STM () 94updateIP :: TVar (R.BucketList NodeInfo) -> SockAddr -> STM ()
93updateIP tblvar a = do 95updateIP tblvar a = do
@@ -446,6 +448,12 @@ dnssdDiscover tox ni toxid = do
446 448
447 void $ DHT.pingUDP (toxDHT tox) ni 449 void $ DHT.pingUDP (toxDHT tox) ni
448 450
451-- | Log a dbus error
452putDBusError bFatal msg = do
453 let fatality = if bFatal then "Fatal" else "Non-Fatal"
454 prefix = fatality <> " DBus Exception: "
455 dput XDBus (prefix <> msg)
456
449-- | Returns: 457-- | Returns:
450-- 458--
451-- * action to shutdown this node, terminating all threads. 459-- * action to shutdown this node, terminating all threads.
@@ -469,8 +477,10 @@ forkTox tox with_avahi with_tcp = do
469 refresher4 <- forkPollForRefresh (DHT.refresher4 $ toxRouting tox) 477 refresher4 <- forkPollForRefresh (DHT.refresher4 $ toxRouting tox)
470 refresher6 <- forkPollForRefresh (DHT.refresher6 $ toxRouting tox) 478 refresher6 <- forkPollForRefresh (DHT.refresher6 $ toxRouting tox)
471 quitAvahi <- if with_avahi then do 479 quitAvahi <- if with_avahi then do
472 dnssdIn <- forkIO $ queryToxService (dnssdDiscover tox) 480 dnssdIn <- forkIO (queryToxService (dnssdDiscover tox)
473 dnssdOut <- forkIO $ dnssdAnnounce tox 481 `catch` \(e::DBus.ClientError) -> putDBusError (DBus.clientErrorFatal e) (DBus.clientErrorMessage e))
482 dnssdOut <- forkIO ( dnssdAnnounce tox
483 `catch` \(e::DBus.ClientError) -> putDBusError (DBus.clientErrorFatal e) (DBus.clientErrorMessage e))
474 labelThread dnssdIn "tox-avahi-monitor" 484 labelThread dnssdIn "tox-avahi-monitor"
475 labelThread dnssdOut "tox-avahi-publish" 485 labelThread dnssdOut "tox-avahi-publish"
476 return $ forM_ [dnssdIn,dnssdOut] killThread 486 return $ forM_ [dnssdIn,dnssdOut] killThread