mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-22 16:20:52 +01:00
add the ability to send raw xml packets over http bind
This commit is contained in:
parent
008a0a29cd
commit
312574cbc5
@ -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).
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user