diff options
Diffstat (limited to 'Presence/Presence.hs')
-rw-r--r-- | Presence/Presence.hs | 28 |
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 |