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 ()