Ejabberd 仅打印 "message" 个数据包
Ejabberd print only "message" packets
以下是filter_packet hook调用的函数中记录的数据包之一。
I(<0.10945.0>:my_module:46) : in_filter_packet: {xmlelement,"message",
[{"type","headline"}],
[{xmlelement,"event",
[{"xmlns",
"http://jabber.org/protocol/pubsub#event"}],
[{xmlelement,"items",
[{"node",
"http://jabber.org/protocol/tune"}],
[{xmlelement,"item",
[{"id",
"5A487A38503FE"}],
[{xmlelement,"tune",
[{"xmlns",
"http://jabber.org/protocol/tune"}],
[]}]}]}]},
{xmlelement,"addresses",
[{"xmlns",
"http://jabber.org/protocol/address"}],
[{xmlelement,"address",
[{"type","replyto"},
{"jid",
"test1@ubuntu/10042049171444555575238273"}],
[]}]}]}
如何只过滤掉"message","type"包?即当前挂钩函数看起来像
on_filter_packet({From, To, Packet} = Input) ->
?INFO_MSG("in_filter_packet: ~p ", [Packet]), %[gen_mod:get_module_opt(global, ?MODULE, debug, false)]),
Input.
如何编写代码 ** if (packet.type == message) only then print ** ?
type
是一个XML属性,所以需要用函数xml:get_tag_attr_s
来取值。然后,使用case
根据值进行切换:
on_filter_packet({From, To, Packet} = Input) ->
?INFO_MSG("in_filter_packet: ~p ", [Packet]), %[gen_mod:get_module_opt(global, ?MODULE, debug, false)]),
case xml:get_tag_attr_s("type", Packet) of
"message" ->
%% Do something with "message" packets,
%% and finally return a value.
Input;
_ ->
%% Something other than "message".
%% Ignore it and return the original packet.
Input
end.
以下是filter_packet hook调用的函数中记录的数据包之一。
I(<0.10945.0>:my_module:46) : in_filter_packet: {xmlelement,"message",
[{"type","headline"}],
[{xmlelement,"event",
[{"xmlns",
"http://jabber.org/protocol/pubsub#event"}],
[{xmlelement,"items",
[{"node",
"http://jabber.org/protocol/tune"}],
[{xmlelement,"item",
[{"id",
"5A487A38503FE"}],
[{xmlelement,"tune",
[{"xmlns",
"http://jabber.org/protocol/tune"}],
[]}]}]}]},
{xmlelement,"addresses",
[{"xmlns",
"http://jabber.org/protocol/address"}],
[{xmlelement,"address",
[{"type","replyto"},
{"jid",
"test1@ubuntu/10042049171444555575238273"}],
[]}]}]}
如何只过滤掉"message","type"包?即当前挂钩函数看起来像
on_filter_packet({From, To, Packet} = Input) ->
?INFO_MSG("in_filter_packet: ~p ", [Packet]), %[gen_mod:get_module_opt(global, ?MODULE, debug, false)]),
Input.
如何编写代码 ** if (packet.type == message) only then print ** ?
type
是一个XML属性,所以需要用函数xml:get_tag_attr_s
来取值。然后,使用case
根据值进行切换:
on_filter_packet({From, To, Packet} = Input) ->
?INFO_MSG("in_filter_packet: ~p ", [Packet]), %[gen_mod:get_module_opt(global, ?MODULE, debug, false)]),
case xml:get_tag_attr_s("type", Packet) of
"message" ->
%% Do something with "message" packets,
%% and finally return a value.
Input;
_ ->
%% Something other than "message".
%% Ignore it and return the original packet.
Input
end.