25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-26 16:26:24 +01:00

add the ability to send raw xml packets over http bind

This commit is contained in:
Christopher tofu Zorn 2010-06-01 14:52:15 -04:00 committed by Badlop
parent 008a0a29cd
commit 312574cbc5
2 changed files with 23 additions and 11 deletions

View File

@ -1499,6 +1499,10 @@ change_shaper(StateData, JID) ->
StateData#state.shaper, JID), StateData#state.shaper, JID),
(StateData#state.sockmod):change_shaper(StateData#state.socket, Shaper). (StateData#state.sockmod):change_shaper(StateData#state.socket, Shaper).
send_text(StateData, Text) when StateData#state.xml_socket ->
?DEBUG("Send Text on stream = ~p", [lists:flatten(Text)]),
(StateData#state.sockmod):send_xml(StateData#state.socket,
{xmlstreamraw, Text});
send_text(StateData, Text) -> send_text(StateData, Text) ->
?DEBUG("Send XML on stream = ~s", [Text]), ?DEBUG("Send XML on stream = ~s", [Text]),
(StateData#state.sockmod):send(StateData#state.socket, Text). (StateData#state.sockmod):send(StateData#state.socket, Text).

View File

@ -992,6 +992,7 @@ prepare_response(Sess, Rid, OutputEls, StreamStart) ->
prepare_outpacket_response(Sess, _Rid, OutPacket, false) -> prepare_outpacket_response(Sess, _Rid, OutPacket, false) ->
case catch send_outpacket(Sess, OutPacket) of case catch send_outpacket(Sess, OutPacket) of
{'EXIT', _Reason} -> {'EXIT', _Reason} ->
?DEBUG("Error in sending packet ~p ", [_Reason]),
{200, ?HEADER, {200, ?HEADER,
"<body type='terminate' xmlns='"++ "<body type='terminate' xmlns='"++
?NS_HTTP_BIND_s++"'/>"}; ?NS_HTTP_BIND_s++"'/>"};
@ -1135,20 +1136,25 @@ send_outpacket(#http_bind{pid = FsmRef}, OutPacket) ->
declared_ns = [{undefined, ?NS_XMPP_pfx}]}}) -> false; declared_ns = [{undefined, ?NS_XMPP_pfx}]}}) -> false;
% {xmlelement, "stream:error", _, _}}) -> false; % {xmlelement, "stream:error", _, _}}) -> false;
({xmlstreamelement, _}) -> true; ({xmlstreamelement, _}) -> true;
({xmlstreamraw, _}) -> true;
(_) -> false (_) -> false
end, OutPacket), end, OutPacket),
case AllElements of case AllElements of
true -> true ->
TypedEls = [check_default_xmlns(OEl) || TypedEls = lists:foldr(fun({xmlstreamelement, El}, Acc) ->
{xmlstreamelement, OEl} <- OutPacket], Acc ++
Body = exmpp_xml:document_to_list( [exmpp_xml:document_to_list(
#xmlel{name = 'body', check_default_xmlns(El)
ns = ?NS_HTTP_BIND_s, )];
children = TypedEls}), ({xmlstreamraw, R}, Acc) ->
% {xmlelement,"body", Acc ++ [R]
% [{"xmlns", end,
% ?NS_HTTP_BIND_s}], [],
% TypedEls}), OutPacket),
Body = "<body xmlns='"++?NS_HTTP_BIND_s++"'>"
++ TypedEls ++
"</body>",
?DEBUG(" --- outgoing data --- ~n~s~n --- END --- ~n", ?DEBUG(" --- outgoing data --- ~n~s~n --- END --- ~n",
[Body]), [Body]),
{200, ?HEADER, Body}; {200, ?HEADER, Body};
@ -1345,7 +1351,9 @@ check_default_xmlns(#xmlel{name = Name, ns = Xmlns, attrs = Attrs, children = El
"" -> #xmlel{name = Name, ns = ?NS_JABBER_CLIENT_s, attrs = Attrs, children = Els}; "" -> #xmlel{name = Name, ns = ?NS_JABBER_CLIENT_s, attrs = Attrs, children = Els};
% "" -> {xmlelement, Name, [{"xmlns", ?NS_JABBER_CLIENT_s} | Attrs], Els}; % "" -> {xmlelement, Name, [{"xmlns", ?NS_JABBER_CLIENT_s} | Attrs], Els};
_ -> El _ -> El
end. end;
check_default_xmlns(El) ->
El.
%% Check that mod_http_bind has been defined in config file. %% Check that mod_http_bind has been defined in config file.
%% Print a warning in log file if this is not the case. %% Print a warning in log file if this is not the case.