You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ejabberd从20.07迁移至23.04后IQ路由处理失败问题咨询

Ejabberd 20.07迁移至23.04后IQ请求处理失败问题(privacy/ping等模块)

问题现象

将Ejabberd从20.07版本升级到23.04后,mod_privacy、mod_ping、mod_mix_pam模块均无法处理ejabberd_route IQ请求。例如在PSI+中发送以下IQ请求:

<iq type="get" id="aad6a"><query xmlns="jabber:iq:privacy"/></iq>

服务端返回函数匹配失败错误,错误日志如下:

2023-03-21 12:44:21.820818+05:30 [error] <0.1269.0>@gen_iq_handler:process_iq/4:116 Failed to process iq:
#iq{id = <<"aad6a">>,type = get,lang = <<"en">>,
    from = #jid{user = <<"userid">>,server = <<"localhost">>,
                resource = <<"Mobile-123">>,luser = <<"userid">>,
                lserver = <<"localhost">>,lresource = <<"Mobile-123">>},
    from_jid = undefined,
    to = #jid{user = <<"userid">>,server = <<"localhost">>,
              resource = <<>>,luser = <<"userid">>,
              lserver = <<"localhost">>,lresource = <<>>},
    sub_els = [#xmlel{name = <<"query">>,
                      attrs = [{<<"xmlns">>,<<"jabber:iq:privacy">>}],
                      children = []}],
    meta = #{ip => {0,0,0,0,0,0,0,1}}}
** exception error: no function clause matching 
                  mod_privacy:process_iq({iq,<<"aad6a">>,get,<<"en">>,
                                          {jid,<<"userid">>,
                                           <<"localhost">>,<<"Mobile-123">>,
                                           <<"userid">>,<<"localhost">>,
                                           <<"Mobile-123">>},
                                          undefined,
                                          {jid,<<"userid">>,
                                           <<"localhost">>,<<>>,
                                           <<"userid">>,<<"localhost">>,
                                           <<>>},
                                          [{privacy_query,[],undefined,
                                            undefined}],
                                          #{ip => {0,0,0,0,0,0,0,1}}}) (src/mod_privacy.erl, line 126)
   in function  gen_iq_handler:process_iq/3 (src/gen_iq_handler.erl, line 131)
   in call from gen_iq_handler:process_iq/4 (src/gen_iq_handler.erl, line 109)
   in call from ejabberd_sm:route/1 (src/ejabberd_sm.erl, line 146)
   in call from ejabberd_router:do_route/1 (src/ejabberd_router.erl, line 399)
   in call from ejabberd_router:route/1 (src/ejabberd_router.erl, line 92)
   in call from ejabberd_c2s:check_privacy_then_route/2 (src/ejabberd_c2s.erl, line 874)
   in call from xmpp_stream_in:process_authenticated_packet/2 (src/xmpp_stream_in.erl, line 727)

问题原因

Ejabberd在20.07到23.04版本之间对XMPP数据包处理API做了重构,其中IQ请求的处理函数签名发生了变更。错误日志显示,当前mod_privacy模块的process_iq函数无法匹配新版本传递的参数结构——旧版本的函数参数格式与23.04版本的参数封装方式不兼容,导致函数子句匹配失败。

解决方案

  • 使用官方适配版本的模块:确保使用的mod_privacy、mod_ping等模块是Ejabberd 23.04官方发布的版本,第三方自定义模块需要同步更新。
  • 调整模块函数签名:对比Ejabberd 23.04官方mod_privacy.erl中的process_iq函数定义,修改自定义模块的函数参数以匹配新版本要求。例如新版本可能将参数从原始记录结构改为映射(#{})类型,或调整了字段顺序/名称。
  • 检查路由配置:验证ejabberd.yml中的路由规则,确保IQ请求被正确路由到对应模块,避免配置错误导致的参数传递异常。
  • 清理缓存并重启服务:升级后删除Ejabberd的缓存文件,完全重启服务,避免旧版本模块代码残留影响运行。

内容的提问来源于stack exchange,提问作者Venkateshwaran Kathiresan K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:07:13