From 21c75ebce577379a9b3e49367ab1a15b3d8e91c9 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Fri, 16 Dec 2011 20:10:44 +1000 Subject: [PATCH] Process "xmlns:xmpp" and "xmlns:stream" correctly (thanks to Pawel) --- src/web/ejabberd_bosh.erl | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/web/ejabberd_bosh.erl b/src/web/ejabberd_bosh.erl index 01f08b971..36f73abfd 100644 --- a/src/web/ejabberd_bosh.erl +++ b/src/web/ejabberd_bosh.erl @@ -746,6 +746,7 @@ make_xmlstreamstart(XMPPDomain, Version) -> {xmlstreamstart, "stream:stream", [{"to", XMPPDomain}, {"xmlns", ?NS_CLIENT}, + {"xmlns:xmpp", ?NS_BOSH}, {"xmlns:stream", ?NS_STREAM}|VersionEl]}. maybe_add_xmlstreamend(Els, "terminate") -> @@ -778,7 +779,10 @@ encode_body(#body{attrs = Attrs, els = Els}) -> {"condition", "remote-stream-error"}, {"xmlns:stream", ?NS_STREAM}|AttrsAcc], [xml:element_to_binary(El)|XMLBuf]}; - ({xmlstreamelement, El}, {AttrsAcc, XMLBuf}) -> + ({xmlstreamelement, {xmlelement, "stream:features", _, _} = El}, {AttrsAcc, XMLBuf}) -> + {lists:keystore("xmlns:stream", 1, AttrsAcc, {"xmlns:stream", ?NS_STREAM}), + [xml:element_to_binary(El)|XMLBuf]}; + ({xmlstreamelement, El}, {AttrsAcc, XMLBuf}) -> {AttrsAcc, [xml:element_to_binary(El)|XMLBuf]}; ({xmlstreamend, _}, {AttrsAcc, XMLBuf}) -> {[{"type", "terminate"}, @@ -789,8 +793,9 @@ encode_body(#body{attrs = Attrs, els = Els}) -> "" -> [{"authid", StreamID}|AttrsAcc]; V -> - [{"xmpp:version", V}, - {"authid", StreamID} | AttrsAcc] + lists:keystore("xmlns:xmpp", 1, [{"xmpp:version", V}, + {"authid", StreamID} | AttrsAcc], + {"xmlns:xmpp", ?NS_BOSH}) end, {NewAttrs, XMLBuf}; ({xmlstreamerror, _}, {AttrsAcc, XMLBuf}) ->