module Xmpp (
inputBegin, inputFeature, inputP2, inputP3, input, output, outputS, inputMpi, outputMpi,
Mpi(..),
Xmpp(..), fromCommon,
Tags(..),
Jid(..), toJid, fromJid,
Side(..),
Feature(..), Tag(..),
Query(..), Bind(..), Requirement(..), toRequirement, fromRequirement,
voidM, hlpDebug, SHandle(..),
nullQ, tagsNull, tagsType,
fromHandleLike, toHandleLike,
) where
import Debug.Trace
import Data.Maybe
import Data.Pipe
import Text.XML.Pipe
import qualified Data.ByteString as BS
import XmppType
import Tools (voidM, hlpDebug, SHandle(..), fromHandleLike, toHandleLike)
tagsNull :: Tags
tagsNull = Tags Nothing Nothing Nothing Nothing Nothing []
tagsType :: BS.ByteString -> Tags
tagsType tp = tagsNull { tagType = Just tp }
inputP2 :: Monad m => Pipe BS.ByteString Xmpp m ()
inputP2 = xmlEvent =$= convert fromJust =$= mapOut toCommon xmlReborn
isSaslSuccess :: XmlNode -> Bool
isSaslSuccess (XmlNode ((_, Just "jabber:client"), "iq")
_ _ [XmlNode ((_, Just "urn:ietf:params:xml:ns:xmpp-bind"), "bind") _ _ _]) = True
isSaslSuccess _ = False
isFeature :: XmlNode -> Bool
isFeature (XmlNode
((_, Just "http://etherx.jabber.org/streams"), "features") _ [] []) = True
isFeature n = trace ("isFeature: " ++ show n) False
inputBegin :: Monad m => Pipe BS.ByteString Xmpp m [Xmlns]
inputBegin = xmlEvent =$= convert fromJust =$= mapOut toCommon xmlBegin
inputFeature :: Monad m => Pipe BS.ByteString Xmpp m [Xmlns]
inputFeature = xmlEvent =$= convert fromJust =$= mapOut toCommon xmlFeature
inputP3 :: Monad m => Pipe BS.ByteString Xmpp m [Xmlns]
inputP3 = xmlEvent =$= convert fromJust =$= mapOut toCommon xmlPipe
xmlPipe :: Monad m => Pipe XmlEvent XmlNode m [Xmlns]
xmlPipe = xmlBegin >>= \ns -> xmlNodeUntil isSaslSuccess ns >> return ns
xmlFeature :: Monad m => Pipe XmlEvent XmlNode m [Xmlns]
xmlFeature = xmlBegin >>= \ns -> xmlNodeUntil isFeature ns >> return ns
input :: Monad m => [Xmlns] -> Pipe BS.ByteString Xmpp m ()
input ns = xmlEvent =$= convert fromJust =$= xmlNode ns =$= convert toCommon
inputMpi :: Monad m => [Xmlns] -> Pipe BS.ByteString Mpi m ()
inputMpi ns = xmlEvent =$= convert fromJust =$= xmlNode ns =$= convert toMpi
output :: Monad m => Pipe Xmpp BS.ByteString m ()
output = convert $ xmlString . (: []) . fromCommon Client
outputS :: Monad m => Pipe Xmpp BS.ByteString m ()
outputS = convert $ xmlString . (: []) . fromCommon Server
outputMpi :: Monad m => Pipe Mpi BS.ByteString m ()
outputMpi = convert $ xmlString . (: []) . fromMpi