{-# LANGUAGE OverloadedStrings #-} module Network.Xmpp.Session where import Data.XML.Pickle import Data.XML.Types(Element) import Network.Xmpp.Monad import Network.Xmpp.Pickle import Network.Xmpp.Types import Network.Xmpp.Concurrent sessionXML :: Element sessionXML = pickleElem (xpElemBlank "{urn:ietf:params:xml:ns:xmpp-session}session") () sessionIQ :: Stanza sessionIQ = IQRequestS $ IQRequest { iqRequestID = "sess" , iqRequestFrom = Nothing , iqRequestTo = Nothing , iqRequestLangTag = Nothing , iqRequestType = Set , iqRequestPayload = sessionXML } -- Sends the session IQ set element and waits for an answer. Throws an error if -- if an IQ error stanza is returned from the server. xmppStartSession :: XmppConMonad () xmppStartSession = do answer <- xmppSendIQ' "session" Nothing Set Nothing sessionXML case answer of Left e -> error $ show e Right _ -> return () -- Sends the session IQ set element and waits for an answer. Throws an error if -- if an IQ error stanza is returned from the server. startSession :: Session -> IO () startSession session = do answer <- sendIQ' Nothing Set Nothing sessionXML session case answer of IQResponseResult _ -> return () e -> error $ show e