[ejabberd] Crash while returning IQ packet from Custom IQ handler.

Gaurav Jain monkeyfdude at gmail.com
Mon Mar 2 00:35:28 MSK 2015


I think I resolved the issue. I changed my code to return

    IQ#iq{type = result, sub_el = []}.

Then it works fine and client receives the response.

If you could please shed some light on it. Why it failed before and why it
succeeded after?

I changed the code by looking at other examples. I dont know the root
reasons which I need to understand.


On Sun, Mar 1, 2015 at 1:21 PM, Gaurav Jain <monkeyfdude at gmail.com> wrote:

> Hi,
>
> * I have written a custom IQ handler
> * That handler receives the IQ packet, sets its type = result and returns
> back as it output
>
> While testing, custom IQ handler, I get the error mentioned below:
>
> Sequence of events that happened:
>
>
> * Client sent the below XML to the server.
> * Server received it.
> * Gives it to the call back function of my custom IQ handler.
> * which logs it and make type = result for the IQ packet
>
> * And the server crashes with the result below.
>
>  CRASH REPORT Process <0.473.0> with 0 neighbours exited with reason:
> {badxml,{xmlel,<<"iq">>,[{<<"from">>,<<"some_id">>},{<<"to">>,<<"some_id">>},{<<"id">>,<<"12345">>},{<<"type">>,<<"result">>}],{xmlel,<<"query">>,[{<<"xmlns">>,<<"test:testing">>}],[{xmlel,<<"sales">>,[],[{xmlel,<<"type">>,[],[{xmlcdata,<<"my_test">>}]},{xmlel,<<"id">>,[],[{xmlcdata,<<"1234567890123111">>}]}]}]}},{function_clause,[{xml,'-element_to_string_nocatch/1-lc$^0/1-0-',[{xmlel,<<"query">>,[{<<"xmlns">>,<<"test...">>}],...}],...},...]}}
> in xml:element_to_string/1 line 122 in p1_fsm:terminate/8 line 760
>
>
> <?xml version="1.0" encoding="UTF-8"?><iq type="set" id="12345">
>    <query xmlns="test:testing">
>       <sales>
>          <type>my_test</type>
>          <id>1234567890123111</id>
>       </sales>
>    </query></iq>
>
>
> Relevant Code:
>
> start(Host, Opt) ->
>     IQDisc = gen_mod:get_opt(iqdisc, Opt, fun gen_iq_handler:check_type/1,
>                              one_queue),
>     gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_TEST, ?MODULE, process_sm_iq, IQDisc).
>
> stop(Host) ->
>     gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_TEST),
>     error_logger:info_msg("Stoping module 'custom_test' ", []).
>
> process_sm_iq(From, To,
>               #iq{type = Type, sub_el = SubEl} = IQ) ->
>     error_logger:info_msg("Process_sm_iq request received ~p~n", [IQ]),
>     IQ#iq{type = result}.
>
> Please provide pointers to help me resolve this issue.
>
>
> Best Regards,
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.jabber.ru/pipermail/ejabberd/attachments/20150301/5a211573/attachment.html>


More information about the ejabberd mailing list