From f0e8e2d4ebe27764fba489d8cf91253828d21186 Mon Sep 17 00:00:00 2001 From: Jon Kristensen Date: Wed, 13 Jun 2012 04:13:52 +0200 Subject: [PATCH] send xml declaration --- source/Network/Xmpp/Monad.hs | 9 +++++++++ source/Network/Xmpp/Stream.hs | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/source/Network/Xmpp/Monad.hs b/source/Network/Xmpp/Monad.hs index 075b3cb..f7062f9 100644 --- a/source/Network/Xmpp/Monad.hs +++ b/source/Network/Xmpp/Monad.hs @@ -40,6 +40,15 @@ pushElement x = do pushStanza :: Stanza -> XmppConMonad Bool pushStanza = pushElement . pickleElem xpStanza +-- XML documents and XMPP streams SHOULD be preceeded by an XML declaration. +-- UTF-8 is the only supported XMPP encoding. The standalone document +-- declaration (matching "SDDecl" in the XML standard) MUST NOT be included in +-- XMPP streams. RFC 6120 defines XMPP only in terms of XML 1.0. +pushXmlDecl :: XmppConMonad Bool +pushXmlDecl = do + sink <- gets sConPushBS + liftIO $ sink "" + pushOpenElement :: Element -> XmppConMonad Bool pushOpenElement e = do sink <- gets sConPushBS diff --git a/source/Network/Xmpp/Stream.hs b/source/Network/Xmpp/Stream.hs index 2fa3681..52fba97 100644 --- a/source/Network/Xmpp/Stream.hs +++ b/source/Network/Xmpp/Stream.hs @@ -61,8 +61,10 @@ xmppStartStream = runErrorT $ do hostname' <- gets sHostname case hostname' of Nothing -> throwError StreamConnectionError - Just hostname -> lift . pushOpenElement $ - pickleElem pickleStream ("1.0", Nothing, Just hostname) + Just hostname -> lift $ do + pushXmlDecl + pushOpenElement $ + pickleElem pickleStream ("1.0", Nothing, Just hostname) features <- ErrorT . pullToSink $ runErrorT xmppStream modify (\s -> s {sFeatures = features}) return ()