diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2014-10-04 12:37:31 +0400 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2014-10-04 12:49:33 +0400 |
commit | 7b3209cc7f467219b9071e2e0ce4bb1f945e5a2b (patch) | |
tree | f7c24a52e6c9a97fcfa2f30ca438698a49f5ad89 /src | |
parent | Process 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.erl | 28 |
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, [], |