ejabberd_router: ошибка маршрута в модуле ejabberd

Я пытаюсь создать простого эхо-бота в ejabberd. Я смог заставить mod_echo работать нормально, и я вполне уверен, что моя собственная версия работала в какой-то момент (отладка сыграла злую шутку с моей головой). Я получаю сообщение об ошибке ниже, но я не могу понять, что делать дальше, чтобы отладить его. Кажется, есть проблема с маршрутизацией, но не совсем понятно, почему. Какие-нибудь советы?

2016-03-31 16:49:38.350 [debug] <0.448.0>@ejabberd_router:do_route:324 route
    from {jid,<<"user1">>,<<"alchemy.local">>,<<"alchemy">>,<<"user1">>,<<"alchemy.local">>,<<"alchemy">>}
    to {jid,<<>>,<<"echo.alchemy.local">>,<<>>,<<>>,<<"echo.alchemy.local">>,<<>>}
    packet {xmlel,<<"message">>,[{<<"xml:lang">>,<<"en">>},{<<"to">>,<<"echo.alchemy.local">>},{<<"id">>,<<"aacca">>}],[{xmlcdata,<<"\n">>},{xmlel,<<"subject">>,[],[]},{xmlcdata,<<"\n">>},{xmlel,<<"body">>,[],[{xmlcdata,<<"testme">>}]},{xmlcdata,<<"\n">>},{xmlel,<<"nick">>,[{<<"xmlns">>,<<"http://jabber.org/protocol/nick">>}],[{xmlcdata,<<"user1">>}]},{xmlcdata,<<"\n">>}]}
2016-03-31 16:49:38.351 [error] <0.448.0>@ejabberd_router:route:77 {function_clause,[{mod_echobot,route,[{jid,<<"user1">>,<<"alchemy.local">>,<<"alchemy">>,<<"user1">>,<<"alchemy.local">>,<<"alchemy">>},{jid,<<>>,<<"echo.alchemy.local">>,<<>>,<<>>,<<"echo.alchemy.local">>,<<>>},{xmlel,<<"message">>,[{<<"xml:lang">>,<<"en">>},{<<"to">>,<<"echo.alchemy.local">>},{<<"id">>,<<"aacca">>}],[{xmlcdata,<<"\n">>},{xmlel,<<"subject">>,[],[]},{xmlcdata,<<"\n">>},{xmlel,<<"body">>,[],[{xmlcdata,<<"testme">>}]},{xmlcdata,<<"\n">>},{xmlel,<<"nick">>,[{<<"xmlns">>,<<"http://jabber.org/protocol/nick">>}],[{xmlcdata,<<"user1">>}]},{xmlcdata,<<"\n">>}]}],[{file,"mod_echobot.erl"},{line,86}]},{ejabberd_router,route,3,[{file,"src/ejabberd_router.erl"},{line,75}]},{ejabberd_c2s,check_privacy_route,5,[{file,"src/ejabberd_c2s.erl"},{line,2121}]},{ejabberd_c2s,session_established2,2,[{file,"src/ejabberd_c2s.erl"},{line,1288}]},{p1_fsm,handle_msg,10,[{file,"src/p1_fsm.erl"},{line,582}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,237}]}]}
when processing: {{jid,<<"user1">>,<<"alchemy.local">>,<<"alchemy">>,<<"user1">>,<<"alchemy.local">>,<<"alchemy">>},{jid,<<>>,<<"echo.alchemy.local">>,<<>>,<<>>,<<"echo.alchemy.local">>,<<>>},{xmlel,<<"message">>,[{<<"xml:lang">>,<<"en">>},{<<"to">>,<<"echo.alchemy.local">>},{<<"id">>,<<"aacca">>}],[{xmlcdata,<<"\n">>},{xmlel,<<"subject">>,[],[]},{xmlcdata,<<"\n">>},{xmlel,<<"body">>,[],[{xmlcdata,<<"testme">>}]},{xmlcdata,<<"\n">>},{xmlel,<<"nick">>,[{<<"xmlns">>,<<"http://jabber.org/protocol/nick">>}],[{xmlcdata,<<"user1">>}]},{xmlcdata,<<"\n">>}]}}
2016-03-31 16:50:16.356 [debug] <0.447.0>@ejabberd_receiver:process_data:282 Received XML on stream = <<"\n">>

person stevenlivz    schedule 31.03.2016    source источник
comment
Это function_clause ошибка в функции mod_echobot:route. Это означает, что эта функция вызывается с аргументами, указанными в сообщении об ошибке, но эти аргументы не могут соответствовать списку аргументов ни в одном из предложений этой функции. Просмотр источника mod_echobot:route должен упростить обнаружение ошибки.   -  person legoscia    schedule 31.03.2016
comment
Спасибо @legoscia. Я создал список здесь gist.github.com/stevenlivz/d666200595a23c42b2a662fef87bf281   -  person stevenlivz    schedule 31.03.2016
comment
Хм, кажется, в моем коде мне нужно использовать ‹‹message›› в предложениях, чтобы действительно соответствовать, тогда как пример кода, который я использовал, не делал этого, использовал только сообщение и т. д. - это было что-то, что было добавлено в язык или я упускаю что-то очевидное [новое для erlang]? Работаю сейчас. Также стоит отметить, что xmlelement теперь называется xmlel.   -  person stevenlivz    schedule 31.03.2016
comment
Представление XML-элементов в ejabberd изменилось несколько лет назад, я забыл, какая версия. В результате изрядное количество примеров кода устарело.   -  person legoscia    schedule 31.03.2016
comment
Кстати, это может помочь другим людям, если вы опубликуете свои выводы в качестве ответа на свой вопрос. Вы, вероятно, получите голос или два :)   -  person legoscia    schedule 31.03.2016
comment
Ах, спасибо @legoscia - никогда не думал об этом :-)   -  person stevenlivz    schedule 01.04.2016


Ответы (1)


Кажется, что в образце кода (который был из более старого образца, который я нашел в Интернете) .com/stevenlivz/d666200595a23c42b2a662fef87bf281 мне нужно использовать ‹‹"message">> в предложениях, чтобы действительно соответствовать, тогда как пример кода, который я использовал, не делал этого, используя только "сообщение" и так далее. Кроме того, также стоит отметить, что xmlelement теперь xmlel, поэтому пункты также необходимо обновить. Например.

route(From, To, {xmlel, <<"message">>, _, _} = Packet) ->
person stevenlivz    schedule 01.04.2016