ejabberd - 自定义 iq 处理程序

Posted

技术标签:

【中文标题】ejabberd - 自定义 iq 处理程序【英文标题】:ejabberd - custom iq handlers 【发布时间】:2017-01-06 13:14:36 【问题描述】:

我创建了简单的模块。这是代码

-module(mod_conversations).
-behaviour(gen_mod).
-export([start/2, stop/1, process_local_iq/3]).
-include("ejabberd.hrl").
-include("logger.hrl").
-include("jlib.hrl").
-define(IQ_CUSTOM, <<"jabber:iq:conversations">>).
start(Host, _) ->
    gen_iq_handler:add_iq_handler(ejabberd_local, Host, ?IQ_CUSTOM, ?MODULE, process_local_iq, one_queue),
ok.
stop(Host) ->
    gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?IQ_CUSTOM),
ok.
process_local_iq(From,_ ,IQ) ->
IQ#iqtype = result, sub_el = [xmlelement, <<"value">>, [], [xmlcdata, <<"Testing...">>]].

当我使用 strophe.js var iq = $iq(type: 'get', to: 'some host').c('query', xmlns: 'jabber:iq:conversations'); connection.sendIQ(iq); 提出请求时

服务器断开了我的连接。我试图找到类似的问题,但其中一些问题更大。请帮我解决这个问题

【问题讨论】:

【参考方案1】:

你不能在最近的 ejabberd 版本中使用 xmlelement 元组,正确的代码应该是这样的:

IQ#iqtype = result,
      sub_el = [#xmlelname = <<"value">>,
                       children = [xmlcdata, <<"Testing...">>]].

【讨论】:

以上是关于ejabberd - 自定义 iq 处理程序的主要内容,如果未能解决你的问题,请参考以下文章

ejabberd:生成自己的进程并将结果路由回客户端

ejabberd 添加 iq 处理程序

如何在 Ejabberd 之上开发自定义函数?

自定义 Ejabberd

使用 openfire 服务器自定义 iq

使用自定义 mysql 模式的模块扩展 ejabberd?