summaryrefslogtreecommitdiff
path: root/Presence/Presence.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Presence/Presence.hs')
-rw-r--r--Presence/Presence.hs28
1 files changed, 10 insertions, 18 deletions
diff --git a/Presence/Presence.hs b/Presence/Presence.hs
index 244bbead..befe47e1 100644
--- a/Presence/Presence.hs
+++ b/Presence/Presence.hs
@@ -578,17 +578,13 @@ deliverMessage state fail msg =
578 mto <- fmap join $ mapM rewriteJIDForPeer (stanzaTo msg) 578 mto <- fmap join $ mapM rewriteJIDForPeer (stanzaTo msg)
579 fromMaybe fail {- reverse lookup failure -} $ mto <&> \(to',k) -> do 579 fromMaybe fail {- reverse lookup failure -} $ mto <&> \(to',k) -> do
580 chans <- atomically $ readTVar (pkeyToChan state) 580 chans <- atomically $ readTVar (pkeyToChan state)
581 fromMaybe fail $ (Map.lookup k chans) <&> \Conn { connChan = chan 581 fromMaybe fail $ (Map.lookup k chans) <&> \conn -> do
582 , auxData = ConnectionData (Left (Local laddr))
583 ctyp
584 } -> do
585 (n,r) <- forClient state senderk (return (Nothing,Nothing))
586 $ \c -> return (Just (clientUser c), Just (clientResource c))
587 -- original 'from' address is discarded. 582 -- original 'from' address is discarded.
588 let from' = unsplitJID (n,addrToText laddr,r) 583 from' <- forClient state senderk (return Nothing)
584 $ return . Just . clientJID conn
589 -- dup <- atomically $ cloneStanza (msg { stanzaTo=Just to', stanzaFrom=Just from' }) 585 -- dup <- atomically $ cloneStanza (msg { stanzaTo=Just to', stanzaFrom=Just from' })
590 let dup = (msg { stanzaTo=Just to', stanzaFrom=Just from' }) 586 let dup = (msg { stanzaTo=Just to', stanzaFrom=from' })
591 sendModifiedStanzaToPeer dup chan 587 sendModifiedStanzaToPeer dup (connChan conn)
592 PeerOrigin senderk _ -> do 588 PeerOrigin senderk _ -> do
593 (pchans,cchans) <- atomically $ do 589 (pchans,cchans) <- atomically $ do
594 pc <- readTVar (pkeyToChan state) 590 pc <- readTVar (pkeyToChan state)
@@ -596,14 +592,14 @@ deliverMessage state fail msg =
596 return (pc,cc) 592 return (pc,cc)
597 fromMaybe fail $ (Map.lookup senderk pchans) 593 fromMaybe fail $ (Map.lookup senderk pchans)
598 <&> \(Conn { connChan = sender_chan 594 <&> \(Conn { connChan = sender_chan
599 , auxData = ConnectionData (Left laddr) ctyp }) -> do 595 , auxData = ConnectionData (Left laddr) ctyp cprof }) -> do
600 fromMaybe fail $ (stanzaTo msg) <&> \to -> do 596 fromMaybe fail $ (stanzaTo msg) <&> \to -> do
601 (mine,(n,h,r)) <- rewriteJIDForClient laddr to [] 597 (mine,(n,h,r)) <- rewriteJIDForClient laddr to []
602 if not mine then fail else do 598 if not mine then fail else do
603 let to' = unsplitJID (n,h,r) 599 let to' = unsplitJID (n,h,r)
604 let (cmapVar,ckey) = case ctyp of 600 let (cmapVar,ckey) = case ctyp of
605 Tox -> (clientsByProfile state , n <&> (<> ".tox") ) 601 Tox -> (clientsByProfile state , Just cprof )
606 XMPP -> (clientsByUser state , n ) 602 XMPP -> (clientsByUser state , n )
607 cmap <- atomically . readTVar $ cmapVar 603 cmap <- atomically . readTVar $ cmapVar
608 chans <- fmap (fromMaybe []) $ do 604 chans <- fmap (fromMaybe []) $ do
609 forM (ckey >>= flip Map.lookup cmap) $ \presence_container -> do 605 forM (ckey >>= flip Map.lookup cmap) $ \presence_container -> do
@@ -1084,14 +1080,12 @@ peerSubscriptionRequest state fail k stanza chan = do
1084 cmap <- readTVar (clients state) 1080 cmap <- readTVar (clients state)
1085 return (pktc,cktc,cmap) 1081 return (pktc,cktc,cmap)
1086 fromMaybe fail $ (Map.lookup k pktc) 1082 fromMaybe fail $ (Map.lookup k pktc)
1087 <&> \Conn { auxData=ConnectionData (Left laddr) ctyp } -> do 1083 <&> \Conn { auxData=ConnectionData (Left laddr) ctyp profile } -> do
1088 (mine,totup) <- rewriteJIDForClient laddr to [] 1084 (mine,totup) <- rewriteJIDForClient laddr to []
1089 if not mine then fail else do 1085 if not mine then fail else do
1090 (_,fromtup) <- rewriteJIDForClient laddr from [] 1086 (_,fromtup) <- rewriteJIDForClient laddr from []
1091 fromMaybe fail $ mto_u <&> \u -> do 1087 fromMaybe fail $ mto_u <&> \u -> do
1092 fromMaybe fail $ mfrom_u <&> \from_u -> do 1088 fromMaybe fail $ mfrom_u <&> \from_u -> do
1093 profiles <- releventProfiles ctyp u
1094 forM_ profiles $ \profile -> do
1095 resolved_subs <- resolvedFromRoster ConfigFiles.getSubscribers u profile 1089 resolved_subs <- resolvedFromRoster ConfigFiles.getSubscribers u profile
1096 let already_subscribed = elem (mfrom_u,k) resolved_subs 1090 let already_subscribed = elem (mfrom_u,k) resolved_subs
1097 is_wanted = case stanzaType stanza of 1091 is_wanted = case stanzaType stanza of
@@ -1225,7 +1219,7 @@ peerInformSubscription state fail k stanza = do
1225 return (pktc,cktc,cmap) 1219 return (pktc,cktc,cmap)
1226 fromMaybe fail $ (Map.lookup k ktc) 1220 fromMaybe fail $ (Map.lookup k ktc)
1227 <&> \(Conn { connChan=sender_chan 1221 <&> \(Conn { connChan=sender_chan
1228 , auxData =ConnectionData (Left laddr) ctyp }) -> do 1222 , auxData =ConnectionData (Left laddr) ctyp profile}) -> do
1229 (_,(from_u,from_h,_)) <- rewriteJIDForClient laddr from [] 1223 (_,(from_u,from_h,_)) <- rewriteJIDForClient laddr from []
1230 let from'' = unsplitJID (from_u,from_h,Nothing) 1224 let from'' = unsplitJID (from_u,from_h,Nothing)
1231 muser = do 1225 muser = do
@@ -1237,8 +1231,6 @@ peerInformSubscription state fail k stanza = do
1237 -- This would allow us to answer anonymous probes with 'unsubscribed'. 1231 -- This would allow us to answer anonymous probes with 'unsubscribed'.
1238 fromMaybe fail $ muser <&> \user -> do 1232 fromMaybe fail $ muser <&> \user -> do
1239 addrs <- resolvePeer from_h 1233 addrs <- resolvePeer from_h
1240 profiles <- releventProfiles ctyp user
1241 forM_ profiles $ \profile -> do
1242 was_solicited <- removeFromRosterFile ConfigFiles.modifySolicited user profile from'' addrs 1234 was_solicited <- removeFromRosterFile ConfigFiles.modifySolicited user profile from'' addrs
1243 subs <- resolvedFromRoster ConfigFiles.getSubscribers user profile 1235 subs <- resolvedFromRoster ConfigFiles.getSubscribers user profile
1244 let is_sub = not . null $ map (from_u,) addrs `intersect` subs 1236 let is_sub = not . null $ map (from_u,) addrs `intersect` subs