【问题标题】:while trying to get id from packet getting this error?在尝试从数据包中获取 id 时出现此错误?
【发布时间】:2016-01-03 12:26:24
【问题描述】:

我有 ejabberd 15.07 并在尝试从数据包中获取 id 时使用 mod_ack 模块出现此错误?

return_message_reciept_to_sender(From, _To, Packet) ->
    ReturnRecieptType = "serverreceipt",
    MessageId = xml:get_tag_attr_s(<<"id">>, Packet),
    ?INFO_MSG("mod_echo_receipt - MsgID: ~p To: ~p From: ~p", [MessageId, _To, From]),
    send_message(From, _To, ReturnRecieptType, MessageId).

错误日志:

[错误] @ejabberd_hooks:run_fold1:371 {function_clause,[{xml,get_tag_attr_s,[>,{jid,>,>,>,>,>,>}],[{file,"src/xml.erl"},{line,210} ]},{mod_ack,return_message_reciept_to_sender,3,[{file,"src/mod_ack.erl"},{line,36}]},{mod_ack,on_user_send_packet,4,[{file,"src/mod_ack.erl"} ,{line,30}]},{ejabberd_hooks,safe_apply,3,[{file,"src/ejabberd_hooks.erl"},{line,385}]},{ejabberd_hooks,run_fold1,4,[{file,"src /ejabberd_hooks.erl"},{line,368}]},{ejabberd_c2s,session_established2,2,[{file,"src/ejabberd_c2s.erl"},{line,1296}]},{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}]}]}

【问题讨论】:

    标签: parsing module erlang ejabberd


    【解决方案1】:

    source on github 显示:

    -spec(get_tag_attr_s/2 ::
    (
      AttrName :: binary(),
      Xmlel    :: xmlel())
        -> binary()
    ).
    
    get_tag_attr_s(AttrName, #xmlel{attrs = Attrs}) ->
        get_attr_s(AttrName, Attrs).
    

    如果第二个参数不是 xmlel 记录,则模式匹配将失败,您将收到 function_clause 错误。

    您传递的是 7 元组而不是正确的记录。如果你想建立自己的记录通过,你必须匹配xml.hrl中记录的定义:

    -record(xmlel,
    {
        name = <<"">> :: binary(),
        attrs    = [] :: [attr()],
        children = [] :: [xmlel() | cdata()]
    }).
    
    -type(cdata() :: {xmlcdata, CData::binary()}).
    
    -type(attr() :: {Name::binary(), Value::binary()}).
    
    -type(xmlel() :: #xmlel{}).
    

    如果your other question 中的代码正在调用此函数,您可能需要更改on_user_send_packet 的参数顺序以匹配ejabberd 钩子。

    【讨论】:

      猜你喜欢
      • 2022-09-24
      • 2022-01-02
      • 2019-09-03
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      相关资源
      最近更新 更多