summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2018-09-09 17:38:58 -0400
committerJoe Crayne <joe@jerkface.net>2018-10-03 07:00:51 -0400
commit38505a54b28492ad303cad66f07591df3abf2a4d (patch)
treef2cd1dfe586327618a838e1d844c5992fa2b000e
parentc9f4768777ed33fbe33ad672c34da74718b938fc (diff)
Provide a different roster resolver for tox-peers to Presence.
-rw-r--r--Presence/Presence.hs1
-rw-r--r--examples/dhtd.hs38
2 files changed, 38 insertions, 1 deletions
diff --git a/Presence/Presence.hs b/Presence/Presence.hs
index 98d701e9..c3e60239 100644
--- a/Presence/Presence.hs
+++ b/Presence/Presence.hs
@@ -794,6 +794,7 @@ informClientPresence0 state mbk client stanza = do
794 atomically $ setClientFlag0 client cf_available 794 atomically $ setClientFlag0 client cf_available
795 maybe (return ()) (sendCachedPresence state) mbk 795 maybe (return ()) (sendCachedPresence state) mbk
796 addrs <- subscribedPeers (manager state $ clientProfile client) (clientUser client) (clientProfile client) 796 addrs <- subscribedPeers (manager state $ clientProfile client) (clientUser client) (clientProfile client)
797 dput XJabber $ "informClientPresence(subscribedPeers) "++show (clientProfile client,addrs)
797 ktc <- atomically $ readTVar (pkeyToChan state) 798 ktc <- atomically $ readTVar (pkeyToChan state)
798 let connected = mapMaybe (flip Map.lookup ktc) addrs 799 let connected = mapMaybe (flip Map.lookup ktc) addrs
799 forM_ connected $ \con -> do 800 forM_ connected $ \con -> do
diff --git a/examples/dhtd.hs b/examples/dhtd.hs
index 92af259c..d5428f93 100644
--- a/examples/dhtd.hs
+++ b/examples/dhtd.hs
@@ -1690,6 +1690,42 @@ onNewToxSession sv ssvar ContactInfo{accounts} addrTox netcrypto = do
1690 1690
1691 return () 1691 return ()
1692 1692
1693selectManager :: Maybe (t -> ToxManager k) -> Manager status T.Text -> T.Text -> Manager status T.Text
1694selectManager (Just tman) tcp profile = case T.splitAt 43 profile of
1695 (k,".tox") -> let _ = _
1696 tox = toxConnections $ tman $ error "PresenseState"
1697 in Manager
1698 { resolvePeer = \themhost -> do
1699 r <- fromMaybe (return []) $ do
1700 (themT,".tox") <- Just $ T.splitAt 43 themhost
1701 them <- readMaybe $ T.unpack themT
1702 me <- readMaybe $ T.unpack k
1703 let contact = Tox.ToxContact me them
1704 Just $ resolvePeer tox contact
1705 dput XMan $ "resolvePeer(tox) " ++ show (T.take 8 $ k,T.take 8 $ themhost,r)
1706 return r
1707 , reverseAddress = \paddr -> do
1708 r <- fromMaybe (return []) $ do
1709 me <- readMaybe $ T.unpack k
1710 Just $ do
1711 reverseAddress tox paddr
1712 <&> mapMaybe (\case
1713 Tox.ToxContact a k | a == me -> Just $ T.pack (show k) `T.append` ".tox"
1714 _ -> Nothing)
1715 dput XMan $ "reverseAddress(tox)" ++ show (T.take 8 k,paddr) ++ ": " ++ show r
1716 return r
1717 }
1718 _ -> tcp
1719selectManager _ tcp profile = tcp
1720 { resolvePeer = \themhost -> do
1721 dput XMan $ "resolvePeer(tcp) " ++ show (profile,themhost)
1722 resolvePeer tcp themhost
1723 , reverseAddress = \paddr -> do
1724 dput XMan $ "reverseAddress(tcp) " ++ show (profile,paddr)
1725 reverseAddress tcp paddr
1726 }
1727
1728
1693main :: IO () 1729main :: IO ()
1694main = do 1730main = do
1695 args <- getArgs 1731 args <- getArgs
@@ -2022,7 +2058,7 @@ main = do
2022 sv <- xmppServer Tcp.noCleanUp (Just sport) 2058 sv <- xmppServer Tcp.noCleanUp (Just sport)
2023 tcp <- xmppConnections sv -- :: IO ( Manager TCPStatus T.Text ) 2059 tcp <- xmppConnections sv -- :: IO ( Manager TCPStatus T.Text )
2024 let tman = toxman ssvar announcer toxbkts <$> mbtox 2060 let tman = toxman ssvar announcer toxbkts <$> mbtox
2025 state <- newPresenceState cw tman sv (const tcp) 2061 state <- newPresenceState cw tman sv (selectManager tman tcp)
2026 forkXmpp sv (presenceHooks state (verbosity opts) (Just cport) (Just sport)) 2062 forkXmpp sv (presenceHooks state (verbosity opts) (Just cport) (Just sport))
2027 conns <- xmppConnections sv 2063 conns <- xmppConnections sv
2028 return (Just sv, Just conns, Just state) 2064 return (Just sv, Just conns, Just state)