summaryrefslogtreecommitdiff
path: root/examples/dhtd.hs
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2018-11-27 22:39:17 -0500
committerJoe Crayne <joe@jerkface.net>2018-12-16 14:08:26 -0500
commitaa0dd020cee882e218c9ab9eb6b75f142abfd8d5 (patch)
tree12333ca232fcbdb341c65fc2b3ceb36fd4688afe /examples/dhtd.hs
parent7e1dff874444dcc4e1e15adb2ef5bd0946526519 (diff)
group chat invite accepted message.
Diffstat (limited to 'examples/dhtd.hs')
-rw-r--r--examples/dhtd.hs30
1 files changed, 20 insertions, 10 deletions
diff --git a/examples/dhtd.hs b/examples/dhtd.hs
index a602b772..6756b14b 100644
--- a/examples/dhtd.hs
+++ b/examples/dhtd.hs
@@ -115,6 +115,7 @@ import qualified Connection.Tcp as Tcp (ConnectionEvent(..),noCleanUp,TCPStatus)
115import DPut 115import DPut
116import DebugTag 116import DebugTag
117import LocalChat 117import LocalChat
118import ToxChat
118import MUC 119import MUC
119 120
120 121
@@ -1022,7 +1023,7 @@ clientSession s@Session{..} sock cnum h = do
1022 ] 1023 ]
1023 rs = map mkrow cs 1024 rs = map mkrow cs
1024 return $ do 1025 return $ do
1025 hPutClient h $ showColumns rs 1026 hPutClient h $ "connections\n" ++ showColumns rs
1026 1027
1027 ("help", s) | Just DHT{..} <- Map.lookup netname dhts 1028 ("help", s) | Just DHT{..} <- Map.lookup netname dhts
1028 -> cmd0 $ do 1029 -> cmd0 $ do
@@ -1157,11 +1158,12 @@ newXmmpSink session@(Tox.NCrypto { ncOutgoingQueue = outGoingQVar }) = C.awaitFo
1157 1158
1158onNewToxSession :: XMPPServer 1159onNewToxSession :: XMPPServer
1159 -> TVar (Map.Map Uniq24 AggregateSession) 1160 -> TVar (Map.Map Uniq24 AggregateSession)
1161 -> InviteCache IO
1160 -> ContactInfo extra 1162 -> ContactInfo extra
1161 -> SockAddr 1163 -> SockAddr
1162 -> Tox.Session 1164 -> Tox.Session
1163 -> IO () 1165 -> IO ()
1164onNewToxSession sv ssvar ContactInfo{accounts} addrTox netcrypto = do 1166onNewToxSession sv ssvar invc ContactInfo{accounts} addrTox netcrypto = do
1165 let them s = Tox.longTermKey $ runIdentity cookie -- remote tox key 1167 let them s = Tox.longTermKey $ runIdentity cookie -- remote tox key
1166 where Tox.Cookie _ cookie = Tox.handshakeCookie (sReceivedHandshake s) 1168 where Tox.Cookie _ cookie = Tox.handshakeCookie (sReceivedHandshake s)
1167 1169
@@ -1193,7 +1195,7 @@ onNewToxSession sv ssvar ContactInfo{accounts} addrTox netcrypto = do
1193 _ -> retry) 1195 _ -> retry)
1194 (return ()) 1196 (return ())
1195 toxSnk = C.mapM_ (uncurry $ dispatchMessage c) 1197 toxSnk = C.mapM_ (uncurry $ dispatchMessage c)
1196 xmppSrc = toxSrc .| C.map snd .| toxToXmpp addrTox (me s) (xmppHostname $ them s) 1198 xmppSrc = toxSrc .| toxToXmpp (rememberInvite invc c) addrTox (me s) (xmppHostname $ them s)
1197 xmppSnk = flushPassThrough xmppToTox 1199 xmppSnk = flushPassThrough xmppToTox
1198 .| C.mapMaybe (\case Flush -> Nothing 1200 .| C.mapMaybe (\case Flush -> Nothing
1199 Chunk x -> Just (Nothing,x)) 1201 Chunk x -> Just (Nothing,x))
@@ -1288,11 +1290,14 @@ selectManager mtman tcp profile = case T.splitAt 43 profile of
1288 1290
1289initTox :: Options 1291initTox :: Options
1290 -> TVar (Map.Map Uniq24 AggregateSession) 1292 -> TVar (Map.Map Uniq24 AggregateSession)
1291 -> TVar Tox.AnnouncedKeys -> Maybe XMPPServer -> IO ( Maybe (Tox.Tox JabberClients) , IO () 1293 -> TVar Tox.AnnouncedKeys
1294 -> Maybe XMPPServer
1295 -> InviteCache IO
1296 -> IO ( Maybe (Tox.Tox JabberClients) , IO ()
1292 , Map.Map String DHT 1297 , Map.Map String DHT
1293 , IO [SockAddr] 1298 , IO [SockAddr]
1294 , [SockAddr]) 1299 , [SockAddr])
1295initTox opts ssvar keysdb mbxmpp = case porttox opts of 1300initTox opts ssvar keysdb mbxmpp invc = case porttox opts of
1296 "" -> return (Nothing,return (), Map.empty, return [],[]) 1301 "" -> return (Nothing,return (), Map.empty, return [],[])
1297 toxport -> do 1302 toxport -> do
1298 addrTox <- getBindAddress toxport (ip6tox opts) 1303 addrTox <- getBindAddress toxport (ip6tox opts)
@@ -1301,7 +1306,7 @@ initTox opts ssvar keysdb mbxmpp = case porttox opts of
1301 addrTox 1306 addrTox
1302 (case mbxmpp of 1307 (case mbxmpp of
1303 Nothing -> \_ _ _ -> return () 1308 Nothing -> \_ _ _ -> return ()
1304 Just xmpp -> onNewToxSession xmpp ssvar) 1309 Just xmpp -> onNewToxSession xmpp ssvar invc)
1305 (dhtkey opts) 1310 (dhtkey opts)
1306 (\_ _ -> return ()) -- TODO: TCP relay send 1311 (\_ _ -> return ()) -- TODO: TCP relay send
1307 (quitTox, toxStrap4, toxStrap6) <- Tox.forkTox tox True 1312 (quitTox, toxStrap4, toxStrap6) <- Tox.forkTox tox True
@@ -1493,11 +1498,12 @@ initJabber :: Options
1493 -> Announcer 1498 -> Announcer
1494 -> Maybe (Tox.Tox JabberClients) 1499 -> Maybe (Tox.Tox JabberClients)
1495 -> Map.Map String DHT 1500 -> Map.Map String DHT
1501 -> MUC
1496 -> IO ( Maybe XMPPServer 1502 -> IO ( Maybe XMPPServer
1497 , Maybe (Manager TCPStatus T.Text) 1503 , Maybe (Manager TCPStatus T.Text)
1498 , Maybe (PresenceState Pending) 1504 , Maybe (PresenceState Pending)
1499 ) 1505 )
1500initJabber opts ssvar announcer mbtox toxdhts = case portxmpp opts of 1506initJabber opts ssvar announcer mbtox toxdhts toxchat = case portxmpp opts of
1501 "" -> return (Nothing,Nothing,Nothing) 1507 "" -> return (Nothing,Nothing,Nothing)
1502 p -> do 1508 p -> do
1503 cport <- getBindAddress p True{-IPv6 supported-} 1509 cport <- getBindAddress p True{-IPv6 supported-}
@@ -1522,7 +1528,8 @@ initJabber opts ssvar announcer mbtox toxdhts = case portxmpp opts of
1522 state <- newPresenceState cw tman sv (selectManager tman tcp) 1528 state <- newPresenceState cw tman sv (selectManager tman tcp)
1523 chat <- atomically newMUC 1529 chat <- atomically newMUC
1524 quitChatService <- forkLocalChat chat 1530 quitChatService <- forkLocalChat chat
1525 let chats = Map.singleton "chat" chat 1531 let chats = Map.fromList [ ("local", chat)
1532 , ("ngc", toxchat) ]
1526 forkXmpp sv (presenceHooks state chats (verbosity opts) (Just cport) (Just sport)) 1533 forkXmpp sv (presenceHooks state chats (verbosity opts) (Just cport) (Just sport))
1527 conns <- xmppConnections sv 1534 conns <- xmppConnections sv
1528 return (Just sv, Just conns, Just state) 1535 return (Just sv, Just conns, Just state)
@@ -1546,6 +1553,9 @@ main = do
1546 forM ([minBound .. maxBound]::[DebugTag]) setQuiet 1553 forM ([minBound .. maxBound]::[DebugTag]) setQuiet
1547 forM (verboseTags opts) setVerbose 1554 forM (verboseTags opts) setVerbose
1548 1555
1556 toxchat <- atomically newMUC
1557 (quitToxChat,invc) <- forkToxChat toxchat
1558
1549 (quitBt,btdhts,btips,baddrs) <- case portbt opts of 1559 (quitBt,btdhts,btips,baddrs) <- case portbt opts of
1550 "" -> return (return (), Map.empty,return [],[]) 1560 "" -> return (return (), Map.empty,return [],[])
1551 p -> do 1561 p -> do
@@ -1638,9 +1648,9 @@ main = do
1638 ssvar <- atomically $ newTVar Map.empty 1648 ssvar <- atomically $ newTVar Map.empty
1639 rec (mbtox,quitTox,toxdhts,toxips,(taddrs::[SockAddr]),msv,mconns,mstate) <- do 1649 rec (mbtox,quitTox,toxdhts,toxips,(taddrs::[SockAddr]),msv,mconns,mstate) <- do
1640 1650
1641 (mbtox,quitTox,toxdhts,toxips,(taddrs::[SockAddr])) <- initTox opts ssvar keysdb msv 1651 (mbtox,quitTox,toxdhts,toxips,(taddrs::[SockAddr])) <- initTox opts ssvar keysdb msv invc
1642 1652
1643 (msv,mconns,mstate) <- initJabber opts ssvar announcer mbtox toxdhts 1653 (msv,mconns,mstate) <- initJabber opts ssvar announcer mbtox toxdhts toxchat
1644 1654
1645 return (mbtox,quitTox,toxdhts,toxips,(taddrs::[SockAddr]),msv,mconns,mstate) 1655 return (mbtox,quitTox,toxdhts,toxips,(taddrs::[SockAddr]),msv,mconns,mstate)
1646 1656