aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2014-10-04 12:37:31 +0400
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2014-10-04 12:49:33 +0400
commit7b3209cc7f467219b9071e2e0ce4bb1f945e5a2b (patch)
treef7c24a52e6c9a97fcfa2f30ca438698a49f5ad89 /src
parentProcess XML-RPC requests via p1_xml and ejabberd_http (diff)
Switch to P1 implementation of XML-RPC
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_xmlrpc.erl28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/ejabberd_xmlrpc.erl b/src/ejabberd_xmlrpc.erl
index c393cbe4b..1a4166607 100644
--- a/src/ejabberd_xmlrpc.erl
+++ b/src/ejabberd_xmlrpc.erl
@@ -209,18 +209,26 @@ process(_, #request{method = 'POST', data = Data, opts = Opts}) ->
_ -> true
end,
State = #state{access_commands = AccessCommands, get_auth = GetAuth},
- case xmlrpc_decode:payload(Data) of
- {error, _} = Err ->
- ?ERROR_MSG("XML-RPC request ~s failed with reason: ~p",
- [Data, Err]),
+ case xml_stream:parse_element(Data) of
+ {error, _} ->
{400, [],
#xmlel{name = <<"h1">>, attrs = [],
- children = [{xmlcdata, <<"Malformed Request">>}]}};
- {ok, RPC} ->
- ?DEBUG("got XML-RPC request: ~p", [RPC]),
- {false, Result} = handler(State, RPC),
- {ok, XML} = xmlrpc_encode:payload(Result),
- {200, [], [{<<"Content-Type">>, <<"text/xml">>}], XML}
+ children = [{xmlcdata, <<"Malformed XML">>}]}};
+ El ->
+ case p1_xmlrpc:decode(El) of
+ {error, _} = Err ->
+ ?ERROR_MSG("XML-RPC request ~s failed with reason: ~p",
+ [Data, Err]),
+ {400, [],
+ #xmlel{name = <<"h1">>, attrs = [],
+ children = [{xmlcdata, <<"Malformed Request">>}]}};
+ {ok, RPC} ->
+ ?DEBUG("got XML-RPC request: ~p", [RPC]),
+ {false, Result} = handler(State, RPC),
+ XML = xml:element_to_binary(p1_xmlrpc:encode(Result)),
+ {200, [], [{<<"Content-Type">>, <<"text/xml">>}],
+ <<"<?xml version=\"1.0\"?>", XML/binary>>}
+ end
end;
process(_, _) ->
{400, [],