module Network.XMPP.Print
(
renderXmpp
, putXmppLn
, hPutXmpp
, stream
, streamEnd
, to
, xmlns
, xmllang
, language
, stream_version
, mechanism
, type_
, id_
, from
) where
import System.IO
import Text.XML.HaXml hiding (tag)
import qualified Text.XML.HaXml.Pretty as P
import Network.XMPP.UTF8
import Network.XMPP.Types
import Network.XMPP.Utils
putXmppLn :: XmppMessage -> IO ()
putXmppLn = putStrLn . renderXmpp
hPutXmpp :: Handle -> XmppMessage -> IO ()
hPutXmpp h msg =
do let str = renderXmpp msg
debugIO $ "Sending: " ++ str
hPutStr h $ toUTF8 str
renderXmpp :: XmppMessage -> String
renderXmpp theXml =
case theXml of
xml@(CElem (Elem (N "stream:stream") _ _) _) ->
(:) '<' $ takeWhile (/= '<') $ tail $ render $ P.content xml
xml ->
render $ P.content xml
stream typ server =
ptag "stream:stream"
[ strAttr "xmlns:stream" "http://etherx.jabber.org/streams"
, strAttr "xml:language" "en"
, strAttr "version" "1.0"
, strAttr "to" server
, xmlns (show typ)
]
[ itag "" [] ]
streamEnd =
ptag "/stream:stream" [] [ itag "" [] ]
to = strAttr "to"
xmlns = strAttr "xmlns"
language = strAttr "xml:language"
xmllang = strAttr "xml:lang"
stream_version = strAttr "version"
mechanism = strAttr "mechanism"
type_ = strAttr "type"
id_ = strAttr "id"
from = strAttr "from"