From a09686173da568122559a8debf4190b5f5e98d5e Mon Sep 17 00:00:00 2001 From: joe Date: Sun, 16 Feb 2014 03:22:42 -0500 Subject: more presence parsing --- Presence/XMPPServer.hs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'Presence/XMPPServer.hs') diff --git a/Presence/XMPPServer.hs b/Presence/XMPPServer.hs index 10928892..004f7472 100644 --- a/Presence/XMPPServer.hs +++ b/Presence/XMPPServer.hs @@ -286,18 +286,25 @@ parsePresenceStatus ns = do , presencePriority = prio , presenceStatus = status } -grokPresence stanzaTag = do +grokPresence ns stanzaTag = do let typ = lookupAttrib "type" (tagAttrs stanzaTag) case typ of - Nothing -> parsePresenceStatus "jabber:client" + Nothing -> parsePresenceStatus ns Just "unavailable" -> fmap (fmap (\p -> p {presenceShow=Offline})) - $ parsePresenceStatus "jabber:client" + $ parsePresenceStatus ns + Just "error" -> return . Just $ PresenceInformError + Just "unsubscribed" -> return . Just $ PresenceInformSubscription False + Just "subscribed" -> return . Just $ PresenceInformSubscription True + Just "probe" -> return . Just $ PresenceRequestStatus + Just "unsubscribe" -> return . Just $ PresenceRequestSubscription False + Just "subscribe" -> return . Just $ PresenceRequestSubscription True _ -> return Nothing -- todo grokStanza "jabber:server" stanzaTag = case () of _ | stanzaTag `isServerIQOf` "get" -> grokStanzaIQGet stanzaTag _ | stanzaTag `isServerIQOf` "result" -> grokStanzaIQResult stanzaTag + _ | tagName stanzaTag == "{jabber:server}presence" -> grokPresence "jabber:server" stanzaTag _ -> return $ Just Unrecognized grokStanza "jabber:client" stanzaTag = @@ -305,7 +312,7 @@ grokStanza "jabber:client" stanzaTag = _ | stanzaTag `isClientIQOf` "get" -> grokStanzaIQGet stanzaTag _ | stanzaTag `isClientIQOf` "set" -> grokStanzaIQSet stanzaTag _ | stanzaTag `isClientIQOf` "result" -> grokStanzaIQResult stanzaTag - _ | tagName stanzaTag == "{jabber:client}presence" -> grokPresence stanzaTag + _ | tagName stanzaTag == "{jabber:client}presence" -> grokPresence "jabber:client" stanzaTag _ -> return $ Just Unrecognized xmppInbound :: Server ConnectionKey -- cgit v1.2.3